1
hutongqing
2024-12-29 89051aef8a2c1a85d457914cf6317fe70e0e321c
1
已删除9个文件
已修改66个文件
已添加8个文件
1040 ■■■■ 文件已修改
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2fb78268-22d5-49b6-a616-9b2ce8001792.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4a20dff1-21c1-4155-a046-64d2b9450c27.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9e5bb932-a2ae-42b5-8ed0-09de9b346dc6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVExtend.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/油墨仓/CommonHoisterJob.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/油墨仓/StackerCraneJob_YM.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/GroundStationJob_CSJ.cs 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/StackerCraneJob_CSJ.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7cbecfdf-aa8f-477e-97c5-c98d196bc584.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7d106012-debf-45da-af92-3040d723f8a8.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/82835ef7-7fbf-4f8d-820f-864028c498bd.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9497be76-23d9-4711-8cd9-ce4560cabb6e.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/996cb05a-4002-49d6-b075-bdc5451f77c7.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ce31cc25-eb57-4d5c-84f0-523faa1628bd.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/cefa9c6e-65e6-4f5e-8814-550d3e8d3f27.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SqlsugarSetup.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/WIDESEA_IInboundService.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService2.cs 399 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/AGV/AgvController.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Approval/ApprovalFlowController.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Approval/ApprovalTaskController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/CustomerInfoController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/LocationInfoController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielInfoController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/SupplierInfoController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/UserInfoController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/WarehouseController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetail_HtyController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrder_HtyController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderDetailController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderController.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderDetailController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetail_HtyController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrder_HtyController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/LocationStatusChangeRecordController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/StockQuantityChangeRecordController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetail_HtyController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfo_HtyController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryListController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_LogController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_RoleAuthController.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_RoleController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_TenantController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/Task_HtyController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
项目资料/设备协议/~$阻焊仓堆垛机通信协议.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/2fb78268-22d5-49b6-a616-9b2ce8001792.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/4a20dff1-21c1-4155-a046-64d2b9450c27.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9e5bb932-a2ae-42b5-8ed0-09de9b346dc6.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/read.lock
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/TaskInfo/WMSTaskDTO.cs
@@ -56,5 +56,7 @@
        public int WarehouseId { get; set; }
        public string AGVArea { get; set; }
        public int PalletType { get; set; }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGVController.cs
@@ -46,12 +46,18 @@
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt())
                {
                    var content = TakeRequest(task.CurrentAddress);
                    if (!content.Status) throw new Exception(content.Message);
                    if (!content.Status)
                    {
                        throw new Exception(content.Message);
                    }
                }
                else
                {
                    var content = PutRequest(task.NextAddress, task.PalletType);
                    if (!content.Status) throw new Exception(content.Message);
                    if (!content.Status)
                    {
                        throw new Exception(content.Message);
                    }
                }
                task.TaskState = TaskStatusEnum.AGV_WaitToExecute.ObjToInt();
                var up = _taskRepository.UpdateData(task);
@@ -92,6 +98,7 @@
                            if (!content.Status) throw new Exception(content.Message);
                            task.TaskState = TaskStatusEnum.AGV_Finish.ObjToInt();
                            var up = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.自动完成);
                            _taskService.TaskCompleted(task.TaskNum);
                            agvResponseContent.Code = up ? "0" : "1";
                            agvResponseContent.Message = up ? "成功" : "失败";
                            return agvResponseContent;
@@ -100,8 +107,10 @@
                    case "end"://入库根据这个信号判断放货完成
                        if (task.TaskType != TaskTypeEnum.Outbound.ObjToInt())
                        {
                            var content = PutFinish(task.CurrentAddress);
                            var content = PutFinish(task.NextAddress);
                            if (!content.Status) throw new Exception(content.Message);
                            task.CurrentAddress = task.NextAddress;
                            task.NextAddress = "";
                            task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                            var up = _taskRepository.UpdateData(task);
                            agvResponseContent.Code = up ? "0" : "1";
@@ -160,7 +169,6 @@
                else
                {
                    otherDevice.SetValue(GroundStationDBName.W_PutRequest, true, stationManger.StationCode);
                    otherDevice.SetValue(GroundStationDBName.W_PutPalletType, (short)palletType, stationManger.StationCode);
                    Thread.Sleep(1000);
                    canPut = otherDevice.GetValue<GroundStationDBName, bool>(GroundStationDBName.R_IsCanPut, stationManger.StationCode);
                    if (canPut)
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs
@@ -24,7 +24,9 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                string apiAddress = "http://10.30.4.29:8182/rcms/services/rest/hikRpcService/genAgvSchedulingTask";// AppSettings.Get(APIEnum.AgvSendTask.ToString());
                string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.AgvSendTask.ToString())?.ApiAddress;
                if (string.IsNullOrEmpty(apiAddress))
                    return WebResponseContent.Instance.Error($"未找到发送AGV任务接口,请检查接口配置"); // AppSettings.Get(APIEnum.AgvSendTask.ToString());
                string response = HttpHelper.Post(apiAddress, taskModel.Serialize());
                AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>();
                if (agvContent.Code == "0")
@@ -59,7 +61,9 @@
            WebResponseContent content = new WebResponseContent();
            try
            {
                string apiAddress = "http://10.30.4.29:8182/rcms/services/rest/hikRpcService/continueTask";// AppSettings.Get(APIEnum.AgvSecureReply.ToString());
                string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == APIEnum.AgvSecureReply.ToString())?.ApiAddress;
                if (string.IsNullOrEmpty(apiAddress))
                    return WebResponseContent.Instance.Error($"未找到发送AGV任务接口,请检查接口配置"); // AppSettings.Get(APIEnum.AgvSendTask.ToString());// AppSettings.Get(APIEnum.AgvSecureReply.ToString());
                string response = HttpHelper.Post(apiAddress, secureReplyModel.Serialize());
                AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>();
                if (agvContent.Code == "0")
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -186,7 +186,7 @@
                    }
                    else
                    {
                        if(item.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                        if (item.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                        {
                            List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && item.AGVArea == x.NextPosi);
                            if (routers.FirstOrDefault() == null)
@@ -197,6 +197,7 @@
                            task.NextAddress = router?.StartPosi ?? "";
                            task.DeviceCode = item.RoadWay;
                            task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                        }
                        else
                        {
@@ -206,9 +207,16 @@
                                return WebResponseContent.Instance.Error($"未找到路由配置信息");
                            }
                            router = routers.FirstOrDefault();
                            string stationCode = router?.NextPosi ?? "";
                            Dt_StationManger? stationManger = _stationMangerRepository.QueryFirst(x => x.StationCode == stationCode);
                            if (stationManger == null)
                            {
                                return WebResponseContent.Instance.Error($"未找到站台配置信息");
                            }
                            task.NextAddress = router?.NextPosi ?? "";
                            task.NextAddress = stationManger?.AGVStationCode ?? "";
                            task.DeviceCode = "AGV";
                            task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
                        }
                    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/AGV/AGVExtend.cs
@@ -101,11 +101,11 @@
        {
            switch (DeviceCode)
            {
                case "SC01_CSJ":
                case "AGV_CSJ":
                    {
                        return TaskType == TaskTypeEnum.ProductionReturn.ObjToInt() ? "23" : "24";
                    }
                case "SC01_ZH":
                case "AGV_ZH":
                    {
                        if (TaskType == TaskTypeEnum.InboundXB.ObjToInt())
                            return "20";
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ÓÍÄ«²Ö/CommonHoisterJob.cs
@@ -129,7 +129,7 @@
                                task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                                _taskRepository.UpdateData(task);
                                bool isWrite = hoister.SetValue(HoisterDBName.RequestIn, false, deviceChildCode);
                                bool isWrite = hoister.SetValue(HoisterDBName.RequestOut, false, deviceChildCode);
                            }
                            else
                            {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ÓÍÄ«²Ö/StackerCraneJob_YM.cs
@@ -88,6 +88,7 @@
                                    int oldState = task.TaskState;
                                    task.TaskState = TaskStatusEnum.SC_Executing.ObjToInt();
                                    task.ExceptionMessage = "";
                                    task.Dispatchertime = DateTime.Now;
                                    _taskRepository.UpdateData(task);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskState}】");
                                }
@@ -115,9 +116,9 @@
            {
                if (commonStackerCrane != null)
                {
                    WriteInfo(commonStackerCrane.DeviceName, $"读取到任务完成信号,{e.TaskNum}");
                    if (commonStackerCrane.GetValue<StackerCraneDBName, short>(StackerCraneDBName.WorkType) != 5)
                    {
                        WriteInfo(commonStackerCrane.DeviceName, $"读取到任务完成信号,{e.TaskNum}");
                        Dt_Task task = _taskRepository.QueryFirst(x => x.TaskNum == e.TaskNum);
                        if (task != null)
                        {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/²âÊԼܲÖ/GroundStationJob_CSJ.cs
@@ -61,7 +61,7 @@
                        if (item.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt())
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x => x.DeviceCode == item.StackerCraneCode && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.NextAddress));
                            Dt_Task task = _taskRepository.QueryFirst(x => x.DeviceCode == item.StackerCraneCode && x.TaskState == TaskStatusEnum.SC_Execute.ObjToInt() && string.IsNullOrEmpty(x.NextAddress));
                            if (task != null && isCanPut && !isCanTake && !putRequest && !putFinish && !takeRequest && !takeFinish)
                            {
                                string oldAddress = task.NextAddress;
@@ -74,13 +74,27 @@
                        }
                        if (item.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt())
                        {
                            Dt_Task task = _taskRepository.QueryFirst(x => x.TargetAddress == item.StackerCraneCode && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.NextAddress));
                            if (task != null && isCanPut && !isCanTake && !putRequest && !putFinish && !takeRequest && !takeFinish)
                            Dt_Task task = _taskRepository.QueryFirst(x => (x.TargetAddress == item.StackerCraneCode || string.IsNullOrEmpty(x.TargetAddress) || x.NextAddress == item.StackerCraneCode || string.IsNullOrEmpty(x.NextAddress)) && (x.TaskState == TaskStatusEnum.New.ObjToInt() || x.TaskState == TaskStatusEnum.SC_Execute.ObjToInt()) && x.SourceAddress == item.StationCode);
                            if (task != null)
                            {
                                string oldAddress = task.NextAddress;
                                int oldStatus = task.TaskState;
                                task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                                task.NextAddress = item.StationCode;
                                Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.StationCode == item.StationCode);
                                if (stationManger == null)
                                {
                                    WriteInfo(item.StationName, $"未找到对应站台信息,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                    break;
                                }
                                string? locationCode = _taskService.RequestAssignLocation(task.TaskNum, stationManger.StackerCraneCode);
                                if (string.IsNullOrEmpty(locationCode))
                                {
                                    WriteInfo(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                    break;
                                }
                                task.CurrentAddress = stationManger.StackerCraneStationCode;
                                task.TargetAddress = locationCode;
                                task.NextAddress = locationCode;
                                task.DeviceCode = stationManger.StackerCraneCode;
                                _taskRepository.UpdateData(task);
                                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"系统自动流程,目标地址由{oldAddress}变更为{task.NextAddress},任务状态由{oldStatus}变更为{task.TaskState}");
                            }
@@ -111,15 +125,19 @@
                                WriteInfo(item.StationName, $"请求分配货位返回信息错误,设备编号:{item.StationCode},任务号:{task.TaskNum}");
                                break;
                            }
                            string oldAddress = task.NextAddress;
                            int oldStatus = task.TaskState;
                            task.CurrentAddress = stationManger.StackerCraneStationCode;
                            task.TargetAddress = locationCode;
                            task.NextAddress = locationCode;
                            task.DeviceCode = stationManger.StackerCraneCode;
                            task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt();
                            _taskRepository.UpdateData(task);
                            _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"系统自动流程,目标地址由{oldAddress}变更为{task.NextAddress},任务状态由{oldStatus}变更为{task.TaskState}");
                        }
                    }
                    catch(Exception ex)
                    catch (Exception ex)
                    {
                    }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/²âÊԼܲÖ/StackerCraneJob_CSJ.cs
@@ -89,6 +89,8 @@
                                    commonStackerCrane.LastTaskType = task.TaskType;
                                    int oldState = task.TaskState;
                                    task.TaskState = TaskStatusEnum.SC_Executing.ObjToInt();
                                    task.Dispatchertime = DateTime.Now;
                                    task.ExceptionMessage = "";
                                    _taskRepository.UpdateData(task);
                                    _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"系统自动流程,任务状态从【{oldState}】转到【{task.TaskState}】");
                                }
@@ -131,10 +133,17 @@
                {
                    if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
                    {
                        Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneStationCode == task.NextAddress);
                        if(stationManger == null)
                        {
                            _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"AGV站点未配置,{task.NextAddress}");
                            _taskService.UpdateTaskExceptionMessage(taskNum, $"AGV站点未配置,{task.NextAddress}");
                            return WebResponseContent.Instance.Error($"AGV站点未配置,{task.NextAddress}");
                        }
                        int oldStatus = task.TaskState;
                        task.DeviceCode = "AGV";
                        task.DeviceCode = "AGV_CSJ";
                        task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
                        task.CurrentAddress = task.NextAddress;
                        task.CurrentAddress = stationManger.AGVStationCode;
                        task.NextAddress = task.TargetAddress;
                        _taskRepository.UpdateData(task);
                        _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"系统自动流程,,任务状态从【{oldStatus}】转到【{task.TaskState}】");
@@ -199,7 +208,7 @@
            if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)
            {
                if (OutTaskStationIsOccupied(task) != null || true)
                if (OutTaskStationIsOccupied(task) != null)
                {
                    return task;
                }
@@ -328,8 +337,8 @@
                else
                {
                    //数据配置错误
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务终点错误,起点:【{task.NextAddress}】");
                    WriteInfo(task.DeviceCode, $"出库任务终点错误,起点:【{task.NextAddress}】");
                    _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"出库任务终点错误,终点:【{task.NextAddress}】");
                    WriteInfo(task.DeviceCode, $"出库任务终点错误,终点:【{task.NextAddress}】");
                    return null;
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7cbecfdf-aa8f-477e-97c5-c98d196bc584.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7d106012-debf-45da-af92-3040d723f8a8.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/82835ef7-7fbf-4f8d-820f-864028c498bd.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9497be76-23d9-4711-8cd9-ce4560cabb6e.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/996cb05a-4002-49d6-b075-bdc5451f77c7.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/ce31cc25-eb57-4d5c-84f0-523faa1628bd.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/cefa9c6e-65e6-4f5e-8814-550d3e8d3f27.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/read.lock
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Service/AssignLocation/LocationInfoService_CSJ.cs
@@ -190,23 +190,25 @@
                case PalletTypeEnum.LargePallet:
                    {
                        List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                        moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && x.LocationStatus != LocationStatusEnum.PalletLock.ObjToInt() && x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                        moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && x.LocationStatus != LocationStatusEnum.PalletLock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                        List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                        littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
                        littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
                    }
                    break;
                case PalletTypeEnum.MediumPallet:
                case PalletTypeEnum.SmallPallet:
                    {
                        List<Dt_LocationInfo> moreDepth = locations.Where(x => x.Depth > emptyLocation.Depth).ToList();
                        moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt()) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                        moreDepthFlag = moreDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())) == null;//查询大于当前货位深度的集合里是否有状态不为有货的货位,如果是true,则表示深货位有未被使用的情况
                        List<Dt_LocationInfo> littleDepth = locations.Where(x => x.Depth <= emptyLocation.Depth).ToList();
                        littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
                        littleDepthFlag = littleDepth.FirstOrDefault(x => x.LocationStatus != LocationStatusEnum.Free.ObjToInt() && (x.EnableStatus == EnableStatusEnum.OnlyIn.ObjToInt() || x.EnableStatus == EnableStatusEnum.Normal.ObjToInt())) == null; //查询小于当前货位深度的集合里是否有状态不为空,且禁用状态不为禁用以及只入的货位,如果是true,则表示浅货位被使用或者被禁用的情况
                    }
                    break;
                default:
                    throw new Exception($"托盘类型错误");
            }
            if (moreDepthFlag && littleDepthFlag)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs
@@ -12,8 +12,7 @@
    /// 1,组盘暂存<br/>
    /// 2,组盘撤销<br/>  
    /// 3,入库确认<br/> 
    /// 4,入库撤销<br/>
    /// 5,已入库<br/>
    /// 4,入库撤销<br/>
    /// 6,入库完成<br/>
    /// 7,出库锁定<br/>
    /// 8,出库完成<br/>
@@ -33,9 +32,6 @@
        [Description("入库撤销")]
        å…¥åº“撤销 = 4,
        [Description("已入库")]
        å·²å…¥åº“ = 5,
        [Description("入库完成")]
        å…¥åº“完成 = 6,
@@ -49,6 +45,9 @@
        ç§»åº“锁定 = 9,
        [Description("入库完成未建出库单")]
        å…¥åº“完成未建出库单 = 10
        å…¥åº“完成未建出库单 = 10,
        [Description("退库")]
        é€€åº“ = 11,
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/Extensions/SqlsugarSetup.cs
@@ -51,9 +51,14 @@
                                  Parallel.For(0, 1, e =>
                                  {
                                        MiniProfiler.Current.CustomTiming("SQL:", GetParas(p) + "【SQL语句】:" + sql);
                                      Console.Out.WriteLine(sql);
                                      Console.Out.WriteLine();
                                  });
                                 if(AppSettings.GetValue("PrintSql").ObjToBool())
                                {
                                    Console.Out.WriteLine(GetParas(p));
                                    Console.Out.WriteLine(sql);
                                    Console.Out.WriteLine();
                                }
                            }
                        }
                    }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Core/LogHelper/Logger.cs
@@ -84,9 +84,9 @@
                }
                //  row["Id"] = log.Id;
                // å°†RequestParam中的换行符替换为空字符串
                row["RequestParam"] = log.RequestParam?.Replace("\r\n", "");
                row["RequestParam"] = log.RequestParam?.Replace("\r\n", "").Replace("\n", "");
                // å°†ResponseParam中的换行符替换为空字符串
                row["ResponseParam"] = log.ResponseParam?.Replace("\r\n", "");
                row["ResponseParam"] = log.ResponseParam?.Replace("\r\n", "").Replace("\n", "");
                //row["Success"] = log.Success ?? -1;
                // å°†BeginDate设置为log的BeginDate
                row["BeginDate"] = log.BeginDate;
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Task/WMSTaskDTO.cs
@@ -57,5 +57,7 @@
        public string AGVArea { get; set; }
        public int PalletType { get; set; }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs
@@ -7,6 +7,7 @@
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO;
using WIDESEA_DTO.Inbound;
using WIDESEA_External.Model;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
@@ -28,6 +29,6 @@
        /// å…¥åº“完成上报
        /// </summary>
        /// <returns></returns>
        WebResponseContent FeedbackInboundOrder(Dt_StockInfo stockInfo,Dt_InboundOrder inboundOrder);
        WebResponseContent FeedbackInboundOrder(Dt_StockInfo stockInfo,Dt_InboundOrder inboundOrder, List<ERPInboundDetailModel> detailModels);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/WIDESEA_IInboundService.csproj
@@ -7,6 +7,7 @@
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\WIDESEA_External\WIDESEA_External.csproj" />
    <ProjectReference Include="..\WIDESEA_InboundRepository\WIDESEA_InboundRepository.csproj" />
  </ItemGroup>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs
@@ -73,21 +73,21 @@
            try
            {
                //获取仓库信息
                Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x=>x.WarehouseCode==erpInOrder.WaId);
                if (warehouse==null)
                Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseCode == erpInOrder.WaId);
                if (warehouse == null)
                {
                    return content.Error("未找到仓库信息");
                }
                //获取是否存在订单
                Dt_InboundOrder inboundOrder = BaseDal.QueryFirst(x=>x.InboundOrderNo== erpInOrder.OrderNo);
                if (erpInOrder.Way==1)
                Dt_InboundOrder inboundOrder = BaseDal.QueryFirst(x => x.InboundOrderNo == erpInOrder.OrderNo);
                if (erpInOrder.Way == 1)
                {
                    if (inboundOrder!=null)
                    if (inboundOrder != null)
                    {
                    }
                }
                else if(erpInOrder.Way==2)
                else if (erpInOrder.Way == 2)
                {
                }
@@ -145,7 +145,7 @@
                {
                    return WebResponseContent.Instance.Error($"未找到入库单信息");
                }
                if (inboundOrder.OrderStatus>=InOrderStatusEnum.入库完成.ObjToInt())
                if (inboundOrder.OrderStatus >= InOrderStatusEnum.入库完成.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"入库单已结束");
                }
@@ -187,11 +187,11 @@
                {
                    return WebResponseContent.Instance.Error($"未在入库单明细中找到该物料信息");
                }
                if (inboundOrderDetail.OrderDetailStatus>OrderDetailStatusEnum.GroupAndInbound.ObjToInt())
                if (inboundOrderDetail.OrderDetailStatus > OrderDetailStatusEnum.GroupAndInbound.ObjToInt())
                {
                    return WebResponseContent.Instance.Error($"对应入库单明细已结束");
                }
                float inboundDetailSum = inboundOrderDetail.OverInQuantity + inboundOrderDetail.ReceiptQuantity ;
                float inboundDetailSum = inboundOrderDetail.OverInQuantity + inboundOrderDetail.ReceiptQuantity;
                if (inboundDetailSum == inboundOrderDetail.OrderQuantity)
                {
                    return WebResponseContent.Instance.Error($"该物料入库单明细已全部组盘完成");
@@ -201,7 +201,7 @@
                    return WebResponseContent.Instance.Error($"与该收货单明细收货数量不一致");
                }
                Dt_StockInfo oldStockinfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode);
                if(oldStockinfo!=null)
                if (oldStockinfo != null)
                {
                    return WebResponseContent.Instance.Error($"托盘重复");
                }
@@ -225,11 +225,11 @@
                    PalletCode = palletCode,
                    StockStatus = StockStatusEmun.组盘暂存.ObjToInt(),
                    WarehouseId = inboundOrder.WarehouseId,
                    Details=new List<Dt_StockInfoDetail> { stockInfoDetail }
                    Details = new List<Dt_StockInfoDetail> { stockInfoDetail }
                };
                inboundOrderDetail.ReceiptQuantity += model.Quantity;
                _unitOfWorkManage.BeginTran();
                if (inboundOrderDetail.OrderDetailStatus==OrderDetailStatusEnum.New.ObjToInt())
                if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
                {
                    inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt();
                }
@@ -562,9 +562,9 @@
        /// å…¥åº“完成上报ERP
        /// </summary>
        /// <returns></returns>
        public WebResponseContent FeedbackInboundOrder(Dt_StockInfo stockInfo,Dt_InboundOrder inboundOrder)
        public WebResponseContent FeedbackInboundOrder(Dt_StockInfo stockInfo, Dt_InboundOrder inboundOrder, List<ERPInboundDetailModel> detailModels)
        {
            WebResponseContent content=new WebResponseContent();
            WebResponseContent content = new WebResponseContent();
            try
            {
                if (inboundOrder.Details.Count == 0)
@@ -575,44 +575,17 @@
                {
                    return WebResponseContent.Instance.Error($"入库单据已完成");
                }
                List<ERPInboundDetailModel> detailModels = new List<ERPInboundDetailModel>();
                Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId);
                if (warehouse == null)
                {
                    return WebResponseContent.Instance.Error($"未找到仓库信息");
                }
                List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>();
                foreach (var item in stockInfo.Details)
                {
                    Dt_InboundOrderDetail? inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x=>x.RowNo==item.InboundOrderRowNo);
                    if (inboundOrderDetail == null)
                    {
                        continue;
                    }
                    ERPInboundDetailModel detailModel = new ERPInboundDetailModel()
                    {
                        ExpiryDate = item.EffectiveDate ?? "",
                        LocationCode = warehouse.WarehouseCode,
                        MaterialsCode = item.MaterielCode,
                        MfgDate = item.ProductionDate ?? "",
                        QtyCustoms = "0",
                        Quantity = item.StockQuantity.ToString(),
                        Rack = stockInfo.LocationCode,
                        ReceiptCode = inboundOrder.UpperOrderNo,
                        ReceiptSerNo = item.InboundOrderRowNo.ToString()
                    };
                    inboundOrderDetail.OverInQuantity += detailModel.Quantity.ObjToInt();
                    if (inboundOrderDetail.OverInQuantity== inboundOrderDetail.OrderQuantity)
                    {
                        inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                    }
                    inboundOrderDetails.Add(inboundOrderDetail);
                    detailModels.Add(detailModel);
                }
                ERPInboundModel model = new ERPInboundModel()
                {
                    Code = inboundOrder.InboundOrderNo,
                    CreatorCode = "TC20082",//测试
                    CreatorCode = inboundOrder.Creater,//测试
                    EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
                    StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    SuppliersId = inboundOrder.SupplierId,
@@ -622,40 +595,27 @@
                    Way = 1,
                    Details = detailModels
                };
                //入库明细新增完成数量
                int newCount = inboundOrderDetails.Select(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
                //入库明细原完成数量
                int oldCount = inboundOrder.Details.Select(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
                string response = _invokeERPService.InvokeInboundOrderApi(model);
                ErpRequestContent requestContent = JsonConvert.DeserializeObject<ErpRequestContent>(response);
                if (requestContent==null)
                ErpRequestContent? requestContent = JsonConvert.DeserializeObject<ErpRequestContent>(response);
                if (requestContent == null)
                {
                    return WebResponseContent.Instance.Error();
                }
                if (requestContent.res==0)
                if (requestContent.res == 0)
                {
                    return WebResponseContent.Instance.Error(requestContent.Data);
                }
                _unitOfWorkManage.BeginTran();
                _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails);
                if (inboundOrder.Details.Count == (newCount + oldCount))
                {
                    inboundOrder.OrderStatus = InOrderStatusEnum.入库完成.ObjToInt();
                    _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
                }
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
        /// <summary>
        /// å…¥åº“完成回传到ERP æµ‹è¯•
        /// å…¥åº“完成回传到ERP
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
@@ -717,7 +677,7 @@
                ERPInboundModel model = new ERPInboundModel()
                {
                    Code = inboundOrder.InboundOrderNo,
                    CreatorCode = "TC20082",//测试
                    CreatorCode = inboundOrder.Creater,//测试
                    EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
                    StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    SuppliersId = inboundOrder.SupplierId,
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs
@@ -49,7 +49,7 @@
        {
            try
            {
                Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).Includes(x=>x.Details).First();
                Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).Includes(x => x.Details).First();
                if (receiveOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该收货单");
@@ -68,11 +68,11 @@
                    return WebResponseContent.Instance.Error($"未找到该物料的信息");
                }
                //该收货单仓库是否有该物料
                if (materielInfo.WarehouseId!= receiveOrder.WarehouseId)
                if (materielInfo.WarehouseId != receiveOrder.WarehouseId)
                {
                    return WebResponseContent.Instance.Error($"该物料不属于该仓库");
                }
                Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo).Includes(x=>x.Details).First();
                Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo).Includes(x => x.Details).First();
                if (purchaseOrder == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该采购单");
@@ -92,10 +92,7 @@
                Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.MaterielCode == model.MaterielCode && (x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt() || x.PurchaseDetailStatus == PurchaseOrderDetailStatusEnum.Receiving.ObjToInt()));
                if (purchaseOrderDetail == null)
                {
                    if (purchaseOrder.Details.Count > 0)
                    {
                        return WebResponseContent.Instance.Error($"该明细收货已完成");
                    }
                    return WebResponseContent.Instance.Error($"该明细收货已完成");
                }
                //判断是否存在对应采购明细的收货明细
                Dt_ReceiveOrderDetail? detail = receiveOrder.Details.FirstOrDefault(x => x.PurchaseOrderNo == model.PurchaseOrderNo && x.PurchaseOrderDetailRowNo == purchaseOrderDetail.RowNo);
@@ -106,7 +103,7 @@
                lock (_rowNoLocker)
                {
                    if (detail!=null)
                    if (detail != null)
                    {
                        //原有收货明细增加收货数量
                        detail.ReceivedQuantity += model.Quantity;
@@ -115,7 +112,7 @@
                        {
                            return WebResponseContent.Instance.Error($"采购单该物料数量和收货数量不一致");
                        }
                        if(purchaseOrderDetail.PurchaseDetailReceiveQty ==purchaseOrderDetail.PurchaseDetailQuantity)
                        if (purchaseOrderDetail.PurchaseDetailReceiveQty == purchaseOrderDetail.PurchaseDetailQuantity)
                        {
                            purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Received.ObjToInt();
                        }
@@ -157,11 +154,11 @@
                            receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt();
                        }
                        //判断采购明细数量
                        if (purchaseOrderDetail.PurchaseDetailQuantity<model.Quantity)
                        if (purchaseOrderDetail.PurchaseDetailQuantity < model.Quantity)
                        {
                            return WebResponseContent.Instance.Error($"请核对采购单该物料数量");
                        }
                        if (purchaseOrderDetail.PurchaseDetailReceiveQty>0)
                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > 0)
                        {
                            purchaseOrderDetail.PurchaseDetailReceiveQty += model.Quantity;
                        }
@@ -169,7 +166,7 @@
                        {
                            purchaseOrderDetail.PurchaseDetailReceiveQty = model.Quantity;
                        }
                        if (purchaseOrderDetail.PurchaseDetailReceiveQty> purchaseOrderDetail.PurchaseDetailQuantity)
                        if (purchaseOrderDetail.PurchaseDetailReceiveQty > purchaseOrderDetail.PurchaseDetailQuantity)
                        {
                            return WebResponseContent.Instance.Error($"采购单该物料数量和收货数量不一致");
                        }
@@ -201,7 +198,7 @@
                        #endregion
                        _unitOfWorkManage.CommitTran();
                    }
                    return WebResponseContent.Instance.OK();
                }
            }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs
@@ -134,15 +134,13 @@
                ERPReceiveModel receiveModel = new ERPReceiveModel()
                {
                    Code = receiveOrder.ReceiveOrderNo,
                    CompanyId = "HATC",
                    DeliveryCode = receiveOrder.DeliveryCode,
                    CustomerId = receiveOrder.CustomerId,
                    CreatorId = "TC20082",//测试 receiveOrder.Creater
                    CreatorId = receiveOrder.Creater,
                    EntDate = receiveOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
                    ReceiveDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    PlantsId = "HA02",
                    SuppliersId = receiveOrder.SuppliersId,
                    Type = Enum.GetName(typeof(ReceiveOrderTypeEnum), receiveOrder.ReceiveOrderType),
                    Type = Enum.GetName(typeof(ReceiveOrderTypeEnum), receiveOrder.ReceiveOrderType) ?? throw new Exception($"采购单类型错误"),
                    UniqueTag = receiveOrder.ReceiveOrderId.ToString(),
                    WarehouseCode = warehouse.WarehouseCode,
                    Way = 1,
@@ -231,7 +229,6 @@
                Dt_InboundOrder inboundOrder = new Dt_InboundOrder()
                {
                    InboundOrderNo="IN"+DateTime.Now.ToString("yyyyMMddHHmmss"),//测试
                    UpperOrderNo = receiveOrder.ReceiveOrderNo,
                    CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                    OrderStatus = InOrderStatusEnum.未开始.ObjToInt(),
@@ -353,7 +350,6 @@
                    }
                    receiveOrder = new Dt_ReceiveOrder()
                    {
                        ReceiveOrderNo= "RE"+DateTime.Now.ToString("yyyyMMddHHmmss"),//测试
                        ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(),
                        CustomerId = "",
                        DeliveryCode = "/",
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs
@@ -212,13 +212,13 @@
                    issueModel = new ERPIssueModel()
                    {
                        UniqueTag = id.ToString(),
                        Code = "OT" + DateTime.Now.ToString("yyyyMMddHHmmss"),//测试
                        Code = outboundOrder.OrderNo,//测试
                        WarehouseCode = warehouse.WarehouseCode,
                        Docremark = "",
                        Deptno = outboundOrder.DepartmentCode,
                        Deptname = outboundOrder.DepartmentName,
                        Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                        Createuser = "TC20082",
                        Createuser = outboundOrder.Creater,
                        Issitem = new List<ERPIssueItemModel>() { issueItemModel },
                    };
                }
@@ -247,13 +247,13 @@
                    issueModel = new ERPIssueModel()
                    {
                        UniqueTag = id.ToString(),
                        Code = "OT" + DateTime.Now.ToString("yyyyMMddHHmmss"),//测试
                        Code = outboundOrder.OrderNo,//测试
                        WarehouseCode = warehouse.WarehouseCode,
                        Docremark = "",
                        Deptno = outboundOrder.DepartmentCode,
                        Deptname = outboundOrder.DepartmentName,
                        Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                        Createuser = "TC20082",
                        Createuser = outboundOrder.Creater,
                        Issitem = new List<ERPIssueItemModel>() { issueItemModel },
                    };
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService2.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,399 @@
/*using AutoMapper;
using MailKit.Search;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_Core.Utilities;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Outbound;
using WIDESEA_External.ERPService;
using WIDESEA_External.Model;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_IStockRepository;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
namespace WIDESEA_OutboundService
{
    public class OutboundOrderService : ServiceBase<Dt_OutboundOrder, IOutboundOrderRepository>, IOutboundOrderService
    {
        private readonly IMapper _mapper;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IBasicService _basicService;
        private readonly IOutboundOrderDetailRepository _outboundOrderDetailRepository;
        private readonly IStockInfoService _stockInfoService;
        private readonly IStockInfoRepository _stockInfoRepository;
        public IOutboundOrderRepository Repository => BaseDal;
        private readonly IInvokeERPService _invokeERPService;
        private readonly IOutStockLockInfoService _outStockLockInfoService;
        public OutboundOrderService(IOutboundOrderRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IBasicService basicService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IStockInfoService stockInfoService,
          IStockInfoRepository stockInfoRepository, IInvokeERPService invokeERPService, IOutStockLockInfoService outStockLockInfoService) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
            _basicService = basicService;
            _outboundOrderDetailRepository = outboundOrderDetailRepository;
            _stockInfoService = stockInfoService;
            _stockInfoRepository = stockInfoRepository;
            _invokeERPService = invokeERPService;
            _outStockLockInfoService = outStockLockInfoService;
        }
        public WebResponseContent ReceiveOutOrder(ErpOutOrderDTO model)
        {
            try
            {
                Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == model.MCode);
                if (materielInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该物料信息");
                }
                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == model.WaId);
                if (warehouse == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该仓库信息");
                }
                Dt_OutboundOrder oldOutboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).Includes(x => x.Details).First();
                if (model.Way == 1)
                {
                    if (oldOutboundOrder != null)
                    {
                        if (oldOutboundOrder.Details.FirstOrDefault(x => x.RowNo == Convert.ToInt32(model.RowNo)) != null)
                        {
                            return WebResponseContent.Instance.Error($"该明细行号已存在");
                        }
                        if (oldOutboundOrder.WarehouseId != warehouse.WarehouseId)
                        {
                            return WebResponseContent.Instance.Error($"仓库不一致");
                        }
                        else
                        {
                            Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail()
                            {
                                RowNo = Convert.ToInt32(model.RowNo),
                                BatchNo = model.MLot,
                                MaterielCode = model.MCode,
                                MaterielName = materielInfo.MaterielName,
                                OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                                OrderQuantity = model.Qty,
                                OrderId = oldOutboundOrder.Id
                            };
                            if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
                            {
                                Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(v => v.BatchNo == model.MLot)).First();
                                if (stockInfo == null)
                                {
                                    return WebResponseContent.Instance.Error($"库存不足");
                                }
                                //更改状态
                                stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                                stockInfo.Details.ForEach(x => { x.Remark = oldOutboundOrder.OrderNo; });
                                Db.Updateable(stockInfo.Details);
                                _stockInfoRepository.UpdateData(stockInfo);
                            }
                            _outboundOrderDetailRepository.AddData(outboundOrderDetail);
                        }
                    }
                    else
                    {
                        Dt_OutboundOrderDetail outboundOrderDetail = new Dt_OutboundOrderDetail()
                        {
                            RowNo = Convert.ToInt32(model.RowNo),
                            BatchNo = model.MLot,
                            MaterielCode = model.MCode,
                            MaterielName = materielInfo.MaterielName,
                            OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                            OrderQuantity = model.Qty,
                        };
                        Dt_OutboundOrder outboundOrder = new Dt_OutboundOrder()
                        {
                            OrderNo = model.OrderNo,
                            UpperOrderNo = model.OrderNo,
                            OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                            OrderType = OutOrderTypeEnum.Issue.ObjToInt(),
                            CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(),
                            WarehouseId = warehouse.WarehouseId,
                            DepartmentCode = model.DepartmentCode,
                            DepartmentName = model.DepartmentName,
                            Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail }
                        };
                        _unitOfWorkManage.BeginTran();
                        Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand();
                        if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
                        {
                            Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(v => v.BatchNo == model.MLot)).First();
                            if (stockInfo == null)
                            {
                                return WebResponseContent.Instance.Error($"库存不足");
                            }
                            //更改状态
                            stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                            stockInfo.Details.ForEach(x => { x.Remark = outboundOrder.OrderNo; });
                            _stockInfoRepository.UpdateData(stockInfo);
                            Db.Updateable(stockInfo.Details);
                        }
                        _unitOfWorkManage.CommitTran();
                    }
                }
                else if (model.Way == 2)
                {
                    if (oldOutboundOrder == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到该出库单");
                    }
                    Dt_OutboundOrderDetail? outboundOrderDetail = oldOutboundOrder.Details.FirstOrDefault(x => x.RowNo == Convert.ToInt32(model.RowNo));
                    if (outboundOrderDetail == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到该明细行号信息");
                    }
                    if (outboundOrderDetail.OrderDetailStatus != OrderDetailStatusEnum.New.ObjToInt())
                    {
                        return WebResponseContent.Instance.Error($"该明细不可修改");
                    }
                    outboundOrderDetail = new Dt_OutboundOrderDetail()
                    {
                        RowNo = Convert.ToInt32(model.RowNo),
                        BatchNo = model.MLot,
                        MaterielCode = model.MCode,
                        MaterielName = materielInfo.MaterielName,
                        OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                        OrderQuantity = model.Qty,
                    };
                    _outboundOrderDetailRepository.UpdateData(outboundOrderDetail);
                }
                else if (model.Way == 3)
                {
                    if (oldOutboundOrder == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到该出库单");
                    }
                }
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent TestOutUpload(Dt_OutboundOrder outboundOrder, Dt_StockInfo stockInfo, string warehouseCode)
        {
            try
            {
                List<ERPPickItemModel> eRPOutPick = new List<ERPPickItemModel>();
                ERPPickItemModel pickItemModel = new ERPPickItemModel()
                {
                    Lotno = stockInfo.Details[0].BatchNo,
                    Qty = stockInfo.Details[0].StockQuantity.ObjToInt().ToString(),
                    Location = warehouseCode
                };
                eRPOutPick.Add(pickItemModel);
                ERPPickModel pickModel = new ERPPickModel()
                {
                    Rowindex = outboundOrder.Details[0].RowNo,
                    Material = outboundOrder.Details[0].MaterielCode,
                    Qty = (outboundOrder.Details[0].OrderQuantity.ObjToInt()).ToString(),
                    Dataitem = eRPOutPick
                };
                ERPIssueItemModel issueItemModel = new ERPIssueItemModel()
                {
                    Pickcode = outboundOrder.UpperOrderNo,
                    PickList = new List<ERPPickModel>() { pickModel }
                };
                ERPIssueModel issueModel = new ERPIssueModel()
                {
                    UniqueTag = outboundOrder.Id.ToString(),
                    Code = outboundOrder.OrderNo,//测试
                    WarehouseCode = warehouseCode,
                    Docremark = "",
                    Deptno = outboundOrder.DepartmentCode,
                    Deptname = outboundOrder.DepartmentName,
                    Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    Createuser = outboundOrder.Creater,
                    Issitem = new List<ERPIssueItemModel>() { issueItemModel },
                };
                string response = _invokeERPService.InvokeOutStandardsApi(issueModel);
                ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
                if (requestContent.res == 1)
                {
                    return WebResponseContent.Instance.OK();
                }
                else
                {
                    return WebResponseContent.Instance.Error(requestContent.Data);
                }
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        //上报出库完成
        public WebResponseContent TestOutUpload(int id, Dt_StockInfo stockInfo)
        {
            try
            {
                Dt_OutboundOrder outboundOrder = Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == id).Includes(x => x.Details).First();
                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == outboundOrder.WarehouseId);
                //测试架库给ERP上报出库完成
                ERPIssueModel issueModel = new ERPIssueModel();
                List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
                if (stockInfo == null)
                {
                    stockInfos = TestOutStocksUpdate(warehouse).Data as List<Dt_StockInfo> ?? new List<Dt_StockInfo>();
                    List<ERPPickItemModel> eRPOutPick = new List<ERPPickItemModel>();
                    for (int i = 0; i < stockInfos.Count; i++)
                    {
                        ERPPickItemModel pickItemModel = new ERPPickItemModel()
                        {
                            Lotno = stockInfos[i].Details[0].BatchNo,
                            Qty = stockInfos[i].Details[0].StockQuantity.ObjToInt().ToString(),
                            Location = warehouse.WarehouseCode
                        };
                        eRPOutPick.Add(pickItemModel);
                    }
                    ERPPickModel pickModel = new ERPPickModel()
                    {
                        Rowindex = outboundOrder.Details[0].RowNo,
                        Material = outboundOrder.Details[0].MaterielCode,
                        Qty = (outboundOrder.Details[0].OrderQuantity.ObjToInt()).ToString(),
                        Dataitem = eRPOutPick
                    };
                    ERPIssueItemModel issueItemModel = new ERPIssueItemModel()
                    {
                        Pickcode = outboundOrder.UpperOrderNo,
                        PickList = new List<ERPPickModel>() { pickModel }
                    };
                    issueModel = new ERPIssueModel()
                    {
                        UniqueTag = id.ToString(),
                        WarehouseCode = warehouse.WarehouseCode,
                        Docremark = "",
                        Deptno = outboundOrder.DepartmentCode,
                        Deptname = outboundOrder.DepartmentName,
                        Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                        Createuser = outboundOrder.Creater,
                        Issitem = new List<ERPIssueItemModel>() { issueItemModel },
                    };
                }
                else
                {
                    Dt_OutboundOrderDetail orderDetail = outboundOrder.Details.FirstOrDefault(x => x.MaterielCode == stockInfo.Details[0].MaterielCode);
                    ERPPickItemModel pickItemModel = new ERPPickItemModel()
                    {
                        Lotno = stockInfo.Details[0].BatchNo,
                        Qty = stockInfo.Details[0].StockQuantity.ObjToInt().ToString(),
                        Location = stockInfo.LocationCode
                    };
                    ERPPickModel pickModel = new ERPPickModel()
                    {
                        Rowindex = outboundOrder.Details[0].RowNo,
                        Material = outboundOrder.Details[0].MaterielCode,
                        Qty = (outboundOrder.Details[0].OrderQuantity.ObjToInt()).ToString(),
                        Dataitem = new List<ERPPickItemModel> { pickItemModel }
                    };
                    ERPIssueItemModel issueItemModel = new ERPIssueItemModel()
                    {
                        Pickcode = outboundOrder.UpperOrderNo,
                        PickList = new List<ERPPickModel>() { pickModel }
                    };
                    issueModel = new ERPIssueModel()
                    {
                        UniqueTag = id.ToString(),
                        Code = outboundOrder.OrderNo,//测试
                        WarehouseCode = warehouse.WarehouseCode,
                        Docremark = "",
                        Deptno = outboundOrder.DepartmentCode,
                        Deptname = outboundOrder.DepartmentName,
                        Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                        Createuser = outboundOrder.Creater,
                        Issitem = new List<ERPIssueItemModel>() { issueItemModel },
                    };
                }
                string response = _invokeERPService.InvokeOutStandardsApi(issueModel);
                ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>();
                if (requestContent.res == 1)
                {
                    if (stockInfos.Count > 0)
                    {
                        _stockInfoRepository.UpdateData(stockInfos);
                    }
                    return WebResponseContent.Instance.OK(requestContent.Data);
                }
                else
                {
                    return WebResponseContent.Instance.Error(requestContent.Data);
                }
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        /// <summary>
        /// æ›´æ”¹å‡ºåº“单库存状态
        /// </summary>
        /// <param name="warehouse"></param>
        /// <param name="model"></param>
        /// <returns></returns>
        public WebResponseContent TestOutStocksUpdate(Dt_Warehouse warehouse)
        {
            try
            {
                //获取出库单库存
                List<Dt_StockInfo> stockInfos = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == warehouse.WarehouseId).Includes(x => x.Details).ToList();
                if (stockInfos.Count <= 0)
                {
                    return WebResponseContent.Instance.Error($"库存不足");
                }
                //更改状态
                stockInfos.ForEach(x =>
                {
                    x.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                });
                return WebResponseContent.Instance.OK("成功", stockInfos);
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
}*/
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -26,7 +26,7 @@
namespace WIDESEA_TaskInfoService
{
    public partial class TaskService
    public partial class TaskService
    {
        /// <summary>
        /// æµ‹è¯•架出仓
@@ -38,12 +38,12 @@
            MesResponseContent responseContent = new MesResponseContent();
            try
            {
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA64.ToString());
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString());
                //获取库存记录
                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
                  x.WarehouseId == warehouse.WarehouseId &&
                  x.StockStatus==(int)StockStatusEmun.入库完成).Includes(x=>x.Details).ToList();
                Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x=>x.Details.Any(x=>x.BatchNo==model.ToolCode));
                List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x =>
                  x.WarehouseId == warehouse.WarehouseId &&
                  x.StockStatus == (int)StockStatusEmun.入库完成).Includes(x => x.Details).ToList();
                Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == model.ToolCode));
                if (stockInfo == null)
                {
                    return responseContent.Error($"测试架:{model.ToolCode}无可用库存");
@@ -52,7 +52,7 @@
                  x.WarehouseId == stockInfo.WarehouseId &&
                  x.LocationStatus == (int)LocationStatusEnum.InStock &&
                  (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
                if (locationInfo==null)
                if (locationInfo == null)
                {
                    return responseContent.Error($"测试架货位:{stockInfo.LocationCode}出库条件不满足");
                }
@@ -75,12 +75,6 @@
                stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
                LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
                //将任务推送到WCS
                WebResponseContent content = PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV");
                if (!content.Status)
                {
                    return responseContent.Error();
                }
                //判断是否有出库单信息
                _unitOfWorkManage.BeginTran();
                //更新库存状态
@@ -91,9 +85,9 @@
                BaseDal.AddData(taskOut);
                //加入货位变动记录
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
                //加入库存变动记录
                //_recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.StockLock);
                _unitOfWorkManage.CommitTran();
                //将任务推送到WCS
                WebResponseContent content = PushTasksToWCS(new List<Dt_Task>() { taskOut }, "AGV");
                responseContent.OK();
            }
            catch (Exception ex)
@@ -119,7 +113,7 @@
                  x.WarehouseId == warehouse.WarehouseId &&
                  x.StockStatus == (int)StockStatusEmun.出库完成).Includes(x => x.Details).ToList();
                Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(x => x.BatchNo == backModel.TestToolCode));
                if (stockInfo==null)
                if (stockInfo == null)
                {
                    return responseContent.Error($"{backModel.TestToolCode}库存信息不存在");
                }
@@ -140,7 +134,7 @@
                    WarehouseId = stockInfo.WarehouseId,
                };
                //更改库存状态
                stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
                stockInfo.StockStatus = StockStatusEmun.退库.ObjToInt();
                BaseDal.AddData(taskIn);
                _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                //将任务推送到WCS
@@ -204,15 +198,15 @@
        /// <returns></returns>
        public WebResponseContent TestSynStock(TestToolSynInfo toolSynInfo)
        {
            WebResponseContent content= new WebResponseContent();
            WebResponseContent content = new WebResponseContent();
            try
            {
                Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x=>x.ApiCode==APIEnum.WMS_MES_TestToolSync.ToString());
                Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_TestToolSync.ToString());
                MESRoot<TestToolSynInfo> root = new MESRoot<TestToolSynInfo>()
                {
                    From = "WMS",
                    DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    Content=toolSynInfo
                    Content = toolSynInfo
                };
                JsonSerializerSettings settings = new JsonSerializerSettings
                {
@@ -222,7 +216,7 @@
                string response = HttpMesHelper.Post(apiInfo.ApiAddress, request);
                MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>();
                //调用接口
                if (mesResponseContent.BSucc==true)
                if (mesResponseContent.BSucc == true)
                {
                    content.OK(mesResponseContent.StrMsg);
                }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -35,6 +35,7 @@
using WIDESEA_DTO.Stock;
using WIDESEA_DTO.Task;
using WIDESEA_External.ERPService;
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_IInboundRepository;
@@ -132,12 +133,7 @@
                    return WebResponseContent.Instance.Error($"未找到该任务信息");
                }
                //if (task.TaskType != TaskTypeEnum.Inbound.ObjToInt())
                //{
                //    return WebResponseContent.Instance.Error($"任务类型错误");
                //}
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId==task.WarehouseId).Includes(x => x.Details).First();
                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First();
                if (stockInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到托盘对应的组盘信息");
@@ -166,32 +162,76 @@
                LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId== task.WarehouseId);
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
                stockInfo.LocationCode = locationInfo.LocationCode;
                Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
                List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>();
                if (stockInfo.StockStatus == StockStatusEmun.入库确认.ObjToInt())
                {
                    //推送入库完成给Erp
                    if (inboundOrder == null)
                    {
                        return WebResponseContent.Instance.Error($"对应入库单不存在");
                    }
                    List<ERPInboundDetailModel> detailModels = new List<ERPInboundDetailModel>();
                    foreach (var item in stockInfo.Details)
                    {
                        Dt_InboundOrderDetail? inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == item.InboundOrderRowNo);
                        if (inboundOrderDetail == null)
                        {
                            continue;
                        }
                        ERPInboundDetailModel detailModel = new ERPInboundDetailModel()
                        {
                            ExpiryDate = item.EffectiveDate ?? "",
                            LocationCode = warehouse.WarehouseCode,
                            MaterialsCode = item.MaterielCode,
                            MfgDate = item.ProductionDate ?? "",
                            QtyCustoms = "0",
                            Quantity = item.StockQuantity.ToString(),
                            Rack = stockInfo.LocationCode,
                            ReceiptCode = inboundOrder.UpperOrderNo,
                            ReceiptSerNo = item.InboundOrderRowNo.ToString()
                        };
                        inboundOrderDetail.OverInQuantity += detailModel.Quantity.ObjToInt();
                        if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity)
                        {
                            inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                        }
                        inboundOrderDetails.Add(inboundOrderDetail);
                        detailModels.Add(detailModel);
                    }
                    //入库明细新增完成数量
                    int newCount = inboundOrderDetails.Select(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
                    //入库明细原完成数量
                    int oldCount = inboundOrder.Details.Select(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
                    if (inboundOrder.Details.Count == (newCount + oldCount))
                    {
                        inboundOrder.OrderStatus = InOrderStatusEnum.入库完成.ObjToInt();
                    }
                    if (!_inboundOrderService.FeedbackInboundOrder(stockInfo, inboundOrder, detailModels).Status)
                    {
                        return WebResponseContent.Instance.Error($"入库同步Erp失败");
                    }
                }
                //测试架入库库存状态
                if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt() && warehouse.WarehouseCode==WarehouseEnum.HA64.ToString())
                if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())
                {
                    stockInfo.StockStatus = StockStatusEmun.入库完成未建出库单.ObjToInt();
                }
                else
                {
                    stockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                }
                stockInfo.Details.ForEach(x =>
                {
                    x.Status = StockStatusEmun.入库完成.ObjToInt();
                });
                stockInfo.LocationCode = locationInfo.LocationCode;
                //推送入库完成给Erp
                Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x=>x.Details).First();
                if (inboundOrder == null)
                {
                    return WebResponseContent.Instance.Error($"对应入库单不存在");
                }
                if (!_inboundOrderService.FeedbackInboundOrder(stockInfo, inboundOrder).Status)
                {
                    return WebResponseContent.Instance.Error($"入库同步Erp失败");
                }
                _unitOfWorkManage.BeginTran();
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
@@ -199,6 +239,8 @@
                _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationChangeType.InboundCompleted);
                _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, stockInfo.Details.Sum(x => x.StockQuantity), stockInfo.Details.Sum(x => x.StockQuantity), StockChangeTypeEnum.Inbound, taskNum);
                _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails);
                _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder);
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
@@ -235,7 +277,7 @@
                {
                    return WebResponseContent.Instance.Error($"未找到货位信息");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId== task.WarehouseId);
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum);
                if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString())
@@ -260,18 +302,18 @@
                if (warehouse.WarehouseCode != WarehouseEnum.HA64.ToString())
                {
                    //推送出库完成
                    WebResponseContent webResponse = _outboundService.OutboundOrderService.TestOutUpload(outboundOrderDetails.FirstOrDefault().Id,stockInfo);
                    WebResponseContent webResponse = _outboundService.OutboundOrderService.TestOutUpload(outboundOrderDetails.FirstOrDefault().Id, stockInfo);
                    if (!webResponse.Status)
                    {
                        return webResponse;
                    }
                }
                _unitOfWorkManage.BeginTran();
                if (outboundOrderDetails.Count>0)
                if (outboundOrderDetails.Count > 0)
                {
                    _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                }
                stockInfo.LocationCode = locationInfo.LocationCode;
                stockInfo.LocationCode = "";
                stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                _stockService.StockInfoService.Repository.UpdateData(stockInfo);
                int beforeStatus = locationInfo.LocationStatus;
@@ -281,7 +323,7 @@
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationChangeType.OutboundCompleted, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);
                _unitOfWorkManage.CommitTran();
                return WebResponseContent.Instance.OK();
            }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -52,6 +52,10 @@
                {
                    return WebResponseContent.Instance.Error($"该托盘已绑定货位");
                }
                if(warehouseId != stockInfo.WarehouseId)
                {
                    return WebResponseContent.Instance.Error($"仓库不正确");
                }
                Dt_Task newTask = new Dt_Task()
                {
@@ -64,7 +68,8 @@
                    TargetAddress = "",
                    TaskType = TaskTypeEnum.Inbound.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = warehouseId
                    WarehouseId = stockInfo.WarehouseId,
                    PalletType = stockInfo.PalletType
                };
                stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt();
@@ -100,6 +105,11 @@
                    return WebResponseContent.Instance.Error($"未找到该入库任务");
                }
                if(_basicRepository.LocationInfoRepository.QueryFirst(x=>x.LocationCode == task.TargetAddress) != null)
                {
                    return WebResponseContent.Instance.OK(data: task.TargetAddress);
                }
                Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, (PalletTypeEnum)task.PalletType, task.WarehouseId);
                if (locationInfo == null)
                {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -219,15 +219,11 @@
                {
                    WebResponseContent content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks);
                    if (content.Status)
                    {
                        _unitOfWorkManage.CommitTran();
                    }
                    else
                    if (!content.Status)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return content;
                    }
                    return content;
                }
                else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0)
                {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/AGV/AgvController.cs
ÎļþÒÑɾ³ý
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Approval/ApprovalFlowController.cs
ÎļþÒÑɾ³ý
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Approval/ApprovalTaskController.cs
@@ -12,6 +12,9 @@
namespace WIDESEA_WMSServer.Controllers.Approval
{
    /// <summary>
    /// å®¡æ‰¹ä»»åŠ¡
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class ApprovalTaskController : ApiBaseController<IApprovalTaskService, Dt_ApprovalTask>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/CustomerInfoController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers.Basic
{
    /// <summary>
    /// å®¢æˆ·
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class CustomerInfoController : ApiBaseController<ICustomerInfoService, Dt_CustomerInfo>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/LocationInfoController.cs
@@ -15,6 +15,9 @@
namespace WIDESEA_WMSServer.Controllers.Basic
{
    /// <summary>
    /// è´§ä½
    /// </summary>
    [Route("api/LocationInfo")]
    [ApiController]
    public class LocationInfoController : ApiBaseController<ILocationInfoService, Dt_LocationInfo>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/MaterielInfoController.cs
@@ -10,6 +10,9 @@
namespace WIDESEA_WMSServer.Controllers.Basic
{
    /// <summary>
    /// ç‰©æ–™
    /// </summary>
    [Route("api/MaterielInfo")]
    [ApiController]
    public class MaterielInfoController : ApiBaseController<IMaterielInfoService, Dt_MaterielInfo>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/SupplierInfoController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers.Basic
{
    /// <summary>
    /// ä¾›åº”商
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class SupplierInfoController : ApiBaseController<ISupplierInfoService, Dt_SupplierInfo>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/UserInfoController.cs
@@ -5,6 +5,9 @@
namespace WIDESEA_WMSServer.Controllers.Basic
{
    /// <summary>
    /// ç”¨æˆ·
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class UserInfoController : ApiBaseController<IUserInfoService, Dt_UserInfo>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/WarehouseController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers.Basic
{
    /// <summary>
    /// ä»“库
    /// </summary>
    [Route("api/Warehouse")]
    [ApiController]
    public class WarehouseController : ApiBaseController<IWarehouseService, Dt_Warehouse>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderController.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_WMSServer.Controllers.Check
{
    /// <summary>
    /// è´¨æ£€å•
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class CheckOrderController : ApiBaseController<ICheckOrderService, Dt_CheckOrder>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Check/CheckOrderResultController.cs
@@ -7,6 +7,9 @@
namespace WIDESEA_WMSServer.Controllers.Check
{
    /// <summary>
    /// è´¨æ£€ç»“æžœ
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class CheckOrderResultController : ApiBaseController<ICheckOrderResultService, Dt_CheckOrderResult>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs
@@ -22,6 +22,9 @@
namespace WIDESEA_WMSServer.Controllers.ERP
{
    /// <summary>
    /// ERP接口
    /// </summary>
    [Route("api/Erp")]
    [ApiController]
    public class ErpController : ControllerBase
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// å…¥åº“单
    /// </summary>
    [Route("api/InboundOrder")]
    [ApiController]
    public class InboundOrderController : ApiBaseController<IInboundOrderService, Dt_InboundOrder>
@@ -33,7 +36,7 @@
        /// <param name="palletCode"></param>
        /// <param name="serNum"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("MaterielGroupSingle"),AllowAnonymous]
        [HttpPost, HttpGet, Route("MaterielGroupSingle")]
        public WebResponseContent MaterielGroup(int inboundOrderId, string palletCode, string serNum)
        {
            return Service.MaterielGroup(inboundOrderId, palletCode, serNum);
@@ -67,7 +70,7 @@
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("FeedbackInboundOrder"),AllowAnonymous]
        [HttpPost, HttpGet, Route("FeedbackInboundOrder")]
        public WebResponseContent FeedbackInboundOrder(int id)
        {
            return Service.FeedbackInboundOrder(id);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs
@@ -7,6 +7,9 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// å…¥åº“单明细
    /// </summary>
    [Route("api/InboundOrderDetail")]
    [ApiController]
    public class InboundOrderDetailController : ApiBaseController<IInboundOrderDetailService, Dt_InboundOrderDetail>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetail_HtyController.cs
@@ -10,7 +10,7 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// åŽ†å²å…¥åº“å•æ˜Žç»†
    /// å…¥åº“单明细历史
    /// </summary>
    [Route("api/InboundOrderDetail_Hty")]
    [ApiController]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrder_HtyController.cs
@@ -10,7 +10,7 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// åŽ†å²å…¥åº“å•
    /// å…¥åº“单历史
    /// </summary>
    [Route("api/InboundOrder_Hty")]
    [ApiController]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// é‡‡è´­å•
    /// </summary>
    [Route("api/PurchaseOrder")]
    [ApiController]
    public class PurchaseOrderController : ApiBaseController<IPurchaseOrderService, Dt_PurchaseOrder>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/PurchaseOrderDetailController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// é‡‡è´­å•明细
    /// </summary>
    [Route("api/PurchaseOrderDetail")]
    [ApiController]
    public class PurchaseOrderDetailController : ApiBaseController<IPurchaseOrderDetailService, Dt_PurchaseOrderDetail>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderController.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// æ”¶è´§å•
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class ReceiveOrderController : ApiBaseController<IReceiveOrderService, Dt_ReceiveOrder>
@@ -21,7 +24,7 @@
        /// </summary>
        /// <param name="receiveOrderId">收货单编号</param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("CreateInboundOrder"),AllowAnonymous]
        [HttpPost, HttpGet, Route("CreateInboundOrder")]
        public WebResponseContent CreateInboundOrder(int receiveOrderId)
        {
            return Service.CreateInboundOrder(receiveOrderId);
@@ -32,7 +35,7 @@
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("FeedbackReceiveOrder"),AllowAnonymous]
        [HttpPost, HttpGet, Route("FeedbackReceiveOrder")]
        public WebResponseContent FeedbackReceiveOrder(int orderId)
        {
            return Service.FeedbackReceiveOrder(orderId);
@@ -42,7 +45,7 @@
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GetReceiveOrders")]
        public WebResponseContent GetReceiveOrders([FromBody]SaveModel saveModel)
        public WebResponseContent GetReceiveOrders([FromBody] SaveModel saveModel)
        {
            return Service.GetReceiveOrders(saveModel);
        }
@@ -53,7 +56,7 @@
        /// <param name="purchaseOrderId"></param>
        /// <param name="lotNo"></param>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("ReceiveAllOrder"),AllowAnonymous]
        [HttpPost, HttpGet, Route("ReceiveAllOrder")]
        public WebResponseContent ReceiveAllOrder(int purchaseOrderId, string lotNo)
        {
            return Service.ReceiveAllOrder(purchaseOrderId, lotNo);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderDetailController.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// æ”¶è´§å•明细
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class ReceiveOrderDetailController : ApiBaseController<IReceiveOrderDetailService, Dt_ReceiveOrderDetail>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs
@@ -15,6 +15,9 @@
namespace WIDESEA_WMSServer.Controllers.MES
{
    /// <summary>
    /// MES接口
    /// </summary>
    [Route("api/Mes")]
    [ApiController]
    public class MesController : ControllerBase
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    /// <summary>
    /// å‡ºåº“详情
    /// </summary>
    [Route("api/OutStockLockInfo")]
    [ApiController]
    public class OutStockLockInfoController : ApiBaseController<IOutStockLockInfoService, Dt_OutStockLockInfo>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs
@@ -11,6 +11,9 @@
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    /// <summary>
    /// å‡ºåº“单
    /// </summary>
    [Route("api/OutboundOrder")]
    [ApiController]
    public class OutboundOrderController : ApiBaseController<IOutboundOrderService, Dt_OutboundOrder>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetailController.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_WMSServer.Controllers.Outbound
{
    /// <summary>
    /// å‡ºåº“单明细
    /// </summary>
    [Route("api/OutboundOrderDetail")]
    [ApiController]
    public class OutboundOrderDetailController : ApiBaseController<IOutboundOrderDetailService, Dt_OutboundOrderDetail>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderDetail_HtyController.cs
@@ -11,7 +11,7 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// åŽ†å²å‡ºåº“å•æ˜Žç»†
    /// å‡ºåº“单明细历史
    /// </summary>
    [Route("api/OutboundOrderDetail_Hty")]
    [ApiController]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrder_HtyController.cs
@@ -11,7 +11,7 @@
namespace WIDESEA_WMSServer.Controllers.Inbound
{
    /// <summary>
    /// åŽ†å²å‡ºåº“å•
    /// å‡ºåº“单历史
    /// </summary>
    [Route("api/OutboundOrder_Hty")]
    [ApiController]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/PDAController.cs
@@ -14,6 +14,9 @@
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// PDA
    /// </summary>
    [Route("api/PDA")]
    [Authorize, ApiController]
    public class PDAController : Controller
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/LocationStatusChangeRecordController.cs
@@ -8,6 +8,9 @@
namespace WIDESEA_WMSServer.Controllers.Record
{
    /// <summary>
    /// è´§ä½çŠ¶æ€å˜åŠ¨è®°å½•
    /// </summary>
    [Route("api/LocationStatusChangeRecord")]
    [ApiController]
    public class LocationStatusChangeRecordController : ApiBaseController<ILocationStatusChangeRecordService, Dt_LocationStatusChangeRecord>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Record/StockQuantityChangeRecordController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers.Record
{
    /// <summary>
    /// åº“存数量变动记录
    /// </summary>
    [Route("api/StockQuantityChangeRecord")]
    [ApiController]
    public class StockQuantityChangeRecordController : ApiBaseController<IStockQuantityChangeRecordService, Dt_StockQuantityChangeRecord>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs
@@ -11,6 +11,9 @@
namespace WIDESEA_WMSServer.Controllers.Stock
{
    /// <summary>
    /// åº“å­˜
    /// </summary>
    [Route("api/StockInfo")]
    [ApiController]
    public class StockInfoController : ApiBaseController<IStockInfoService, Dt_StockInfo>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetailController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers.Stock
{
    /// <summary>
    /// åº“存明细
    /// </summary>
    [Route("api/StockInfoDetail")]
    [ApiController]
    public class StockInfoDetailController : ApiBaseController<IStockInfoDetailService, Dt_StockInfoDetail>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoDetail_HtyController.cs
@@ -11,7 +11,7 @@
namespace WIDESEA_WMSServer.Controllers.Stock
{
    /// <summary>
    /// åŽ†å²åº“å­˜æ˜Žç»†
    /// åº“存明细历史
    /// </summary>
    [Route("api/StockInfoDetail_Hty")]
    [ApiController]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfo_HtyController.cs
@@ -11,7 +11,7 @@
namespace WIDESEA_WMSServer.Controllers.Stock
{
    /// <summary>
    /// åŽ†å²åº“å­˜ä¿¡æ¯
    /// åº“存历史
    /// </summary>
    [Route("api/StockInfo_Hty")]
    [ApiController]
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockViewController.cs
@@ -10,6 +10,9 @@
namespace WIDESEA_WMSServer.Controllers.Stock
{
    /// <summary>
    /// åº“存视图
    /// </summary>
    [Route("api/StockView")]
    [Authorize, ApiController]
    public class StockViewController : Controller
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryController.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// å­—å…¸
    /// </summary>
    [Route("api/Sys_Dictionary")]
    [ApiController]
    public class Sys_DictionaryController : ApiBaseController<ISys_DictionaryService, Sys_Dictionary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_DictionaryListController.cs
@@ -5,6 +5,9 @@
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// å­—典明细
    /// </summary>
    [Route("api/Sys_DictionaryList")]
    [ApiController]
    public class Sys_DictionaryListController : ApiBaseController<ISys_DictionaryListService, Sys_DictionaryList>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_LogController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// æ—¥å¿—
    /// </summary>
    [Route("api/[controller]")]
    [ApiController]
    public class Sys_LogController : ApiBaseController<ISys_LogService, Sys_Log>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_MenuController.cs
@@ -6,6 +6,9 @@
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// èœå•
    /// </summary>
    [Route("api/Sys_Menu")]
    [ApiController]
    public class Sys_MenuController : ApiBaseController<ISys_MenuService, Sys_Menu>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_RoleAuthController.cs
ÎļþÒÑɾ³ý
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_RoleController.cs
@@ -11,6 +11,9 @@
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// è§’色
    /// </summary>
    [Route("api/Sys_Role")]
    [ApiController]
    public class Sys_RoleController : ApiBaseController<ISys_RoleService, Sys_Role>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_TenantController.cs
@@ -13,6 +13,9 @@
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// ç§Ÿæˆ·
    /// </summary>
    [Route("api/tenant")]
    [ApiController]
    public class Sys_TenantController : ApiBaseController<ISys_TenantService, Sys_Tenant>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/System/Sys_UserController.cs
@@ -17,6 +17,9 @@
namespace WIDESEA_WMSServer.Controllers
{
    /// <summary>
    /// ç”¨æˆ·
    /// </summary>
    [Route("api/User")]
    [ApiController]
    public class Sys_UserController : ApiBaseController<ISys_UserService, Sys_User>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -10,6 +10,9 @@
namespace WIDESEA_WMSServer.Controllers.TaskInfo
{
    /// <summary>
    /// ä»»åŠ¡
    /// </summary>
    [Route("api/Task")]
    [ApiController]
    public class TaskController : ApiBaseController<ITaskService, Dt_Task>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/Task_HtyController.cs
@@ -9,6 +9,9 @@
namespace WIDESEA_WMSServer.Controllers.TaskInfo
{
    /// <summary>
    /// ä»»åŠ¡åŽ†å²
    /// </summary>
    [Route("api/Task_Hty")]
    [ApiController]
    public class Task_HtyController : ApiBaseController<ITask_HtyService, Dt_Task_Hty>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json
@@ -24,6 +24,7 @@
  "WCS": "http://localhost:9291/api/Task/",
  "LogAopEnable": false,
  "PrintSql": true, //打印SQL语句
  "ApiName": "WIDESEA",
  "ExpMinutes": 120,
  "QuartzJobAutoStart": true,
ÏîÄ¿×ÊÁÏ/É豸ЭÒé/~$×躸²Ö¶Ñ¶â»úͨÐÅЭÒé.xlsx
Binary files differ