From efaf0b8aeb26aca6536a4b384c912cc3cac4d070 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期六, 15 三月 2025 16:07:45 +0800 Subject: [PATCH] 成品代码,其他仓优化,前端优化界面增加 --- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs | 31 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutProStockInfoRepository.cs | 18 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs | 4 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs | 5 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs | 4 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs | 4 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c0c07971-a8e8-48ed-85a6-a9d507a9fa79.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs | 12 代码管理/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue | 7 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs | 28 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpRequestContent.cs | 12 代码管理/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue | 1 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs | 4 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/698304e2-84c8-4568-8d00-fafc24f90fa6.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs | 8 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderDetailService.cs | 10 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs | 4 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/成品仓/AGV_CPJob.cs | 3 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs | 2 代码管理/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue | 7 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs | 67 ++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs | 4 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs | 13 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutProTypeEnum.cs | 23 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs | 8 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs | 11 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutProStockInfoRepository.cs | 14 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProOutOrderDetail.cs | 10 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs | 14 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js | 7 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/干膜仓/StackerCraneJob_GM.cs | 3 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue | 6 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/StackerCraneJob_BC.cs | 2 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/阻焊仓/StackerCraneJob_ZH.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs | 99 +++ 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/成品仓/AGV_CPExtend.cs | 113 +++ 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs | 9 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs | 10 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_ProStockInfoDetail.cs | 4 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/油墨仓/StackerCraneJob_YM.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs | 53 + 代码管理/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue | 7 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs | 160 +++++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs | 11 代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue | 1 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4097eb55-e5cd-477d-a304-2ebfbecb7877.vsidx | 0 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/油墨仓/CommonHoisterJob.cs | 15 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 10 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP仓/StackerCraneJob_PP.cs | 3 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d47d14a8-1bd7-49ce-b62d-ff8267c57e45.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs | 124 ++- 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/干膜仓/ConveyorLineJob_GM.cs | 31 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs | 151 +++++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json | 1 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 79 ++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs | 14 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs | 85 ++ 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/MesOutOrderDetail.vue | 247 ++++++++ /dev/null | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs | 10 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs | 17 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/板材仓/ConveyorLineJob_BC.cs | 9 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs | 7 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs | 5 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs | 8 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AGVBoxApplyPassDTO.cs | 40 + 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/测试架仓/StackerCraneJob_CSJ.cs | 2 代码管理/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue | 3 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs | 23 77 files changed, 1,586 insertions(+), 147 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs" index 2c5696f..219d1da 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/APIEnum/APIEnum.cs" @@ -65,6 +65,11 @@ /// AGV鍌ㄤ綅缁戝畾鏌ヨ /// </summary> [Description("AGV鍌ㄤ綅缁戝畾鏌ヨ")] - Agv_CSJPodBerthAndMat + Agv_CSJPodBerthAndMat, + /// <summary> + /// 鎴愬搧鏂欑鍙栨斁璐ч�氱煡鍥炶皟 + /// </summary> + [Description("鎴愬搧鏂欑鍙栨斁璐ч�氱煡鍥炶皟")] + AGV_CPBoxApplyPass } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" index 9f175d4..091a4cb 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs" @@ -62,6 +62,11 @@ [Description("鎴愬搧鍑哄簱")] OutProduct = 230, /// <summary> + /// 鎴愬搧瀵勫敭杞粨 + /// </summary> + [Description("鎴愬搧瀵勫敭杞粨")] + OutSendProduct = 240, + /// <summary> /// 閲囪喘鍏ュ簱 /// </summary> [Description("閲囪喘鍏ュ簱")] diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AGVBoxApplyPassDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AGVBoxApplyPassDTO.cs" new file mode 100644 index 0000000..bd3f08d --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Agv/AGVBoxApplyPassDTO.cs" @@ -0,0 +1,40 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEAWCS_DTO.Agv +{ + /// <summary> + /// 鏂欑鍥炶皟 + /// </summary> + public class AGVBoxApplyPassDTO + { + /// <summary> + /// 璇锋眰缂栧彿 + /// </summary> + public string ReqCode { get; set; } + /// <summary> + /// 璇锋眰鏃堕棿 + /// </summary> + public string ReqTime { get; set; } + /// <summary> + /// + /// </summary> + public string? ClientCode { get; set; } + /// <summary> + /// 浠ょ墝鍙� + /// </summary> + public string? TokenCode { get; set; } + /// <summary> + /// 浠诲姟鍗曞彿 + /// </summary> + public string TaskCode { get; set; } + /// <summary> + /// 1.鍙栫敵璇烽�氳繃<br/> + /// 2.鏀剧敵璇烽�氳繃<br/> + /// </summary> + public string Type { get; set; } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" index cb4391f..0387b4f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs" @@ -264,5 +264,9 @@ /// //鍒ゆ柇绉诲簱璐т綅浠诲姟鏄惁宸插瓨鍦紝濡傚瓨鍦ㄥ厛鎵ц /// </summary> Dt_Task QueryStackerExistTask(string PalletCode,string locationCode); + /// <summary> + /// AGV鎴愬搧鍙栨斁璐ч�氱煡 + /// </summary> + WebResponseContent AgvBoxApplyPass(AGVBoxApplyPassDTO applyPassDTO, APIEnum SecureReply = APIEnum.AGV_CPBoxApplyPass); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" index 8b17b85..0a5c229 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" @@ -107,10 +107,35 @@ var task = _taskRepository.QueryFirst(x => agvUpdateModel.TaskCode == x.AgvTaskNum); if (task == null) throw new Exception($"鏈壘鍒颁换鍔�,浠诲姟鍙枫�恵agvUpdateModel.TaskCode}銆�"); - if (agvUpdateModel.Method == "end") + switch (agvUpdateModel.Method) { - if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) PutFinish(task.NextAddress); - _taskService.TaskCompleted(task.TaskNum); + case "end": + if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.OutProduct.ObjToInt()) + PutFinish(task.NextAddress); + _taskService.TaskCompleted(task.TaskNum); + break; + case "applyToAgv": + //鏇存敼鎴愬搧鍏ュ簱AGV鍙栬揣浠诲姟鐘舵�� + if (task.TaskType == TaskTypeEnum.InProduct.ObjToInt()) + { + _taskService.UpdateTask(task,TaskStatusEnum.AGV_WaitToExecute); + } + break; + case "applyFromAgv": + //鏇存敼鎴愬搧鍑篈GV鏀捐揣浠诲姟鐘舵�� + if (task.TaskType == TaskTypeEnum.OutProduct.ObjToInt()) + { + _taskService.UpdateTask(task, TaskStatusEnum.AGV_WaitToExecute); + } + break; + case "outbin": + if (task.TaskType == TaskTypeEnum.OutProduct.ObjToInt()) + { + TakeFinish(task.CurrentAddress); + } + break; + default: + break; } agvResponseContent.Code = "0"; agvResponseContent.Message = "鎴愬姛"; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" index 406edb3..862fba7 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/appsettings.json" @@ -14,7 +14,9 @@ //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWCS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //"ConnectionString": "Data Source=10.30.4.92;Initial Catalog=TestWCS_TC;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + //"ConnectionString": "Data Source=10.30.4.92;Initial Catalog=TESTWCSCP_WCS;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "WMSConnectionStrings": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + //"WMSConnectionStrings": "Data Source=10.30.4.92;Initial Catalog=TESTWMSCP_WMS;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //璺ㄥ煙 "Cors": { "PolicyName": "CorsIpAccess", //绛栫暐鍚嶇О diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs" index feaaf20..5990c06 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs" @@ -83,6 +83,34 @@ return content; } /// <summary> + /// AGV鎴愬搧鍙栨斁璐ч�氱煡 + /// </summary> + public WebResponseContent AgvBoxApplyPass(AGVBoxApplyPassDTO applyPassDTO, APIEnum SecureReply = APIEnum.AGV_CPBoxApplyPass) + { + WebResponseContent content = new WebResponseContent(); + try + { + string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == SecureReply.ToString())?.ApiAddress; + if (string.IsNullOrEmpty(apiAddress)) + return WebResponseContent.Instance.Error($"鏈壘鍒板彂閫丄GV浠诲姟鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�"); + string response = HttpHelper.Post(apiAddress, applyPassDTO.Serialize()); + AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>(); + if (agvContent.Code == "0") + { + content.OK(agvContent.Message); + } + else + { + content.Error(agvContent.Message); + } + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + /// <summary> /// AGV浠诲姟鐘舵�佸埛鏂�/AGV浠诲姟瀹屾垚 /// </summary> /// <param name="agvUpdateModel"></param> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" index 5be0087..c5ab563 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs" @@ -182,7 +182,7 @@ } else { - stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneCode == item.RoadWay); + stationManger = _stationMangerRepository.QueryFirst(x => x.StackerCraneCode == item.RoadWay || x.Remark==item.RoadWay); } if (stationManger == null) { @@ -228,12 +228,12 @@ else { task.NextAddress = taskTypeGroup == TaskTypeGroup.InboundGroup ? task.TargetAddress : router.NextPosi; - if (item.RoadWay.Contains("AGV_FL")) + if (item.RoadWay.Contains("AGV_FL")|| (item.RoadWay.Contains("AGV_CP") && taskTypeGroup == TaskTypeGroup.OutbondGroup)) { task.DeviceCode = item.RoadWay; - task.AgvTaskNum = task.DeviceCode + DateTime.Now.ToString("yyyyMMdd") + item.TaskNum; + task.AgvTaskNum = item.RoadWay + DateTime.Now.ToString("yyyyMMdd") + item.TaskNum; } - else if(item.RoadWay.Contains("AGV_FL")) + else if(item.RoadWay.Contains("AGV_CP") && taskTypeGroup == TaskTypeGroup.InboundGroup) { task.DeviceCode = stationManger.StationDeviceCode; task.AgvTaskNum = task.DeviceCode + DateTime.Now.ToString("yyyyMMdd") + item.TaskNum; @@ -842,7 +842,7 @@ /// </summary> public Dt_Task QueryStackerExistTask(string PalletCode, string locationCode) { - return BaseDal.QueryFirst(x => x.PalletCode == PalletCode && x.SourceAddress == locationCode && x.TaskState == (int)TaskStatusEnum.SC_Execute); + return BaseDal.QueryFirst(x => x.PalletCode == PalletCode && x.SourceAddress == locationCode && (x.TaskState == (int)TaskStatusEnum.SC_Execute || x.TaskState == (int)TaskStatusEnum.SC_Executing)); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/StackerCraneJob_PP.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/StackerCraneJob_PP.cs" index 3d4c6dc..ddfcdab 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/StackerCraneJob_PP.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/PP\344\273\223/StackerCraneJob_PP.cs" @@ -75,8 +75,9 @@ task.Dispatchertime = DateTime.Now; task.ExceptionMessage = ""; _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); - commonStackerCrane.Communicator.Write("DB105.54", (short)1); + //寤舵椂1s + Thread.Sleep(1000); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/ConveyorLineJob_GM.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/ConveyorLineJob_GM.cs" index 5346746..6e61683 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/ConveyorLineJob_GM.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/ConveyorLineJob_GM.cs" @@ -1,4 +1,5 @@ -锘縰sing Quartz; +锘縰sing Newtonsoft.Json; +using Quartz; using System; using System.Collections.Generic; using System.Linq; @@ -8,6 +9,7 @@ using WIDESEAWCS_Common.Helper; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; +using WIDESEAWCS_Core.Caches; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_ITaskInfoRepository; @@ -24,20 +26,33 @@ [DisallowConcurrentExecution] public class ConveyorLineJob_GM : JobBase, IJob { - + private readonly ICacheService _cacheService; private readonly ITaskService _taskService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskRepository _taskRepository; private readonly IStationMangerRepository _stationMangerRepository; private readonly IRouterRepository _routerRepository; + private readonly List<Dt_WarehouseDevice> warehouseDevices; - public ConveyorLineJob_GM(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository) + public ConveyorLineJob_GM(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, ICacheService + cacheService) { + _cacheService = cacheService; _taskService = taskService; _taskExecuteDetailService = taskExecuteDetailService; _taskRepository = taskRepository; _stationMangerRepository = stationMangerRepository; _routerRepository = routerRepository; + + string? warehouseDevicesStr = _cacheService.Get<string>(nameof(Dt_WarehouseDevice)); + if (!string.IsNullOrEmpty(warehouseDevicesStr)) + { + warehouseDevices = JsonConvert.DeserializeObject<List<Dt_WarehouseDevice>>(warehouseDevicesStr) ?? new List<Dt_WarehouseDevice>(); + } + else + { + warehouseDevices = new List<Dt_WarehouseDevice>(); + } } public Task Execute(IJobExecutionContext context) @@ -46,6 +61,12 @@ if (flag && value != null) { OtherDevice device = (OtherDevice)value; + Dt_WarehouseDevice? warehouseDevice = warehouseDevices.FirstOrDefault(x => x.DeviceCode == device.DeviceCode); + if (warehouseDevice == null) + { + WriteError(device.DeviceName, $"璇烽厤缃粨搴撹澶囦俊鎭�"); + return Task.CompletedTask; + } List<string> deviceStations = device.DeviceProDTOs.Select(x => x.DeviceChildCode).ToList(); List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(x => x.StationDeviceCode == device.DeviceCode); foreach (var item in stationMangers.Where(x => deviceStations.Contains(x.StationCode))) @@ -75,6 +96,7 @@ { if (!string.IsNullOrEmpty(conveyorLineInfoRead.Barcode)) { + //鍏ュ簱鐢宠浠诲姟 WebResponseContent content = _taskService.RequestWMSTask(conveyorLineInfoRead.Barcode, item.StationCode); if (content.Status) { @@ -98,7 +120,7 @@ { if (!conveyorLineSignalRead.STB && !conveyorLineSignalRead.ACK && conveyorLineStatus.Online && !conveyorLineStatus.Goods && !conveyorLineStatus.Alarm && !conveyorLineSignalWrite.STB && !conveyorLineSignalWrite.ACK) { - Dt_Task task = _taskRepository.QueryFirst(x => _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && !string.IsNullOrEmpty(x.NextAddress)); + Dt_Task task = _taskRepository.QueryFirst(x => x.WarehouseId== warehouseDevice.WarehouseId && _taskService.TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == TaskStatusEnum.New.ObjToInt() && string.IsNullOrEmpty(x.TargetAddress) && !string.IsNullOrEmpty(x.NextAddress)); if (task != null) { _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, nextAddress: item.StationCode, deviceCode: item.StackerCraneCode, targetAddress: item.StationCode); @@ -116,6 +138,7 @@ WriteError(item.StationName, $"鏈壘鍒板搴旂珯鍙颁俊鎭�,璁惧缂栧彿:{item.StationCode},浠诲姟鍙�:{task.TaskNum}"); continue; } + //鍏ュ簱鐢宠鍒嗛厤璐т綅 string? locationCode = _taskService.RequestAssignLocation(task.TaskNum, stationManger.StackerCraneCode); if (string.IsNullOrEmpty(locationCode)) { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs" index a520b73..97880f7 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\345\271\262\350\206\234\344\273\223/StackerCraneJob_GM.cs" @@ -93,8 +93,9 @@ task.Dispatchertime = DateTime.Now; task.ExceptionMessage = ""; _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); - commonStackerCrane.Communicator.Write("DB105.54", (short)1); + //寤舵椂1s + Thread.Sleep(1000); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" index 1e451d5..c446cbb 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPExtend.cs" @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,7 +9,9 @@ using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.Helper; +using WIDESEAWCS_DTO.Agv; using WIDESEAWCS_Model.Models; +using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_Tasks { @@ -18,7 +21,7 @@ { try { - var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt() && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); + var newTasks = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_Execute.ObjToInt()|| x.TaskState == TaskStatusEnum.New.ObjToInt()) && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).ToList(); foreach (var task in newTasks) { try @@ -47,11 +50,11 @@ } }, }; + //鍙戦�丄GV浠诲姟 WebResponseContent content = _taskService.AgvSendTask(taskDTO, APIEnum.Agv_CPSendTask); - if (!content.Status) throw new Exception(content.Message); - + if (!content.Status) + throw new Exception(content.Message); task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt(); - } catch (Exception ex) { @@ -62,6 +65,96 @@ if (newTasks.Count>0) { _taskService.UpdateData(newTasks); + } + } + catch (Exception ex) + { + WriteError(nameof(AGV_CPJob), ex.Message, ex); + } + } + /// <summary> + /// AGV鍙栨斁璐у洖璋� + /// </summary> + public void ContinueAGVTask() + { + try + { + //鑾峰彇鏄惁鏈夊畨鍏ㄧ敵璇蜂腑鐨勪换鍔� + var continueTask = _taskService.Db.Queryable<Dt_Task>().Where(x => (x.TaskState == TaskStatusEnum.AGV_WaitToExecute.ObjToInt()) && nameof(AGV_CPJob).Contains(x.DeviceCode) && !string.IsNullOrEmpty(x.DeviceCode)).ToList().OrderBy(x => x.Grade).ThenBy(x => x.CreateDate).FirstOrDefault(); + if (continueTask!=null) + { + //鍙栬揣鍥炶皟 + if (continueTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) + { + Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == continueTask.CurrentAddress); + if (stationManger == null) + { + throw new Exception($"鏈壘鍒扮珯鍙皗continueTask.CurrentAddress}淇℃伅"); + } + IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode); + if (device == null) + { + throw new Exception($"鏈壘鍒拌澶噞stationManger.StationDeviceCode}淇℃伅"); + } + OtherDevice otherDevice = (OtherDevice)device; + short canTake = otherDevice.GetValue<GroundStationDBName, short>(GroundStationDBName.R_IsCanTake, stationManger.StationCode); + if (canTake != 1) + { + return; + } + } + else//鏀捐揣鍥炶皟 + { + Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.AGVStationCode == continueTask.NextAddress); + if (stationManger == null) + { + throw new Exception($"鏈壘鍒扮珯鍙皗continueTask.NextAddress}淇℃伅"); + } + IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == stationManger.StationDeviceCode); + if (device == null) + { + throw new Exception($"鏈壘鍒拌澶噞stationManger.StationDeviceCode}淇℃伅"); + } + OtherDevice otherDevice = (OtherDevice)device; + short canPut = otherDevice.GetValue<GroundStationDBName, short>(GroundStationDBName.R_IsCanPut, stationManger.StationCode); + if (canPut != 1) + { + return; + } + } + //鑾峰彇璋冨叆鍙傛暟 + AGVBoxApplyPassDTO boxApplyPassDTO = new AGVBoxApplyPassDTO() + { + ReqCode = Guid.NewGuid().ToString().Replace("-", ""), + ReqTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + TaskCode = continueTask.AgvTaskNum + }; + if (continueTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) + { + boxApplyPassDTO.Type = "1"; + } + else + { + boxApplyPassDTO.Type = "2"; + } + //璇锋眰鏂欑鍥炶皟鎺ュ彛 + WebResponseContent content = _taskService.AgvBoxApplyPass(boxApplyPassDTO); + if (content.Status && continueTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) + { + continueTask.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt(); + _taskService.UpdateTask(continueTask, TaskStatusEnum.AGV_Executing); + } + else if (content.Status && continueTask.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) + { + continueTask.TaskState = TaskStatusEnum.AGV_Puting.ObjToInt(); + _taskService.UpdateTask(continueTask, TaskStatusEnum.AGV_Puting); + } + else + { + continueTask.TaskState = TaskStatusEnum.Exception.ObjToInt(); + continueTask.ExceptionMessage = content.Message; + _taskService.UpdateTask(continueTask, TaskStatusEnum.Exception); + } } } catch (Exception ex) @@ -84,11 +177,11 @@ var Layer = Convert.ToInt16(targetCodes[3]); var a = Row switch { - 1 => "A1", - 2 => "B1", - 3 => "C1", - 4 => "D1", - 5 => "E1", + 1 => "A", + 2 => "B", + 3 => "C", + 4 => "D", + 5 => "E", _ => throw new Exception($"鏈畾涔夌殑鎺�,鍦板潃:銆恵Address}銆�"), }; var b = Layer > 9 ? "" + Layer : "0" + Layer; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPJob.cs" index 92930b9..fba253f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPJob.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\210\220\345\223\201\344\273\223/AGV_CPJob.cs" @@ -33,7 +33,10 @@ { try { + //浠诲姟鍙戦�� SendAGVTask(); + //缁х画鎵ц + ContinueAGVTask(); } catch (Exception ex) { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/ConveyorLineJob_BC.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/ConveyorLineJob_BC.cs" index 160aaee..ede1df3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/ConveyorLineJob_BC.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/ConveyorLineJob_BC.cs" @@ -256,6 +256,7 @@ deviceCode = item.StackerCraneCode; roadwayNo = responseContent.Data.ToString(); device.SetValue(W_ConveyorLineDB.EndPos, task.NextAddress, item.StationCode); + device.SetValue(W_ConveyorLineDB.StartPos, task.CurrentAddress, item.StationCode); } else { @@ -266,10 +267,14 @@ else { //task.NextAddress鍙兘鏄痳outer.NextPosi - device.SetValue(W_ConveyorLineDB.EndPos, task.NextAddress, item.StationCode); + roadwayNo = responseContent.Data.ToString(); + deviceCode = router.ChildPosiDeviceCode; + currentAddress = router.StartPosi; + nextAddress= router.NextPosi; + device.SetValue(W_ConveyorLineDB.EndPos, router.NextPosi, item.StationCode); + device.SetValue(W_ConveyorLineDB.StartPos, router.StartPosi, item.StationCode); } device.SetValue(W_ConveyorLineDB.TaskNum, task.TaskNum, item.StationCode); - device.SetValue(W_ConveyorLineDB.StartPos, task.CurrentAddress, item.StationCode); device.SetValue(W_ConveyorLineDB.Spare1, ConveyorWorkTypeEnum.Outbound.ObjToInt(), item.StationCode); device.SetValue(W_ConveyorLineDB.ACK, true, item.StationCode); _taskService.UpdateTask(task, taskState, currentAddress: currentAddress, nextAddress: nextAddress, targetAddress: targetAddress, deviceCode: deviceCode, roadwayNo: roadwayNo,heightType: conveyorLineInfoRead.Spare2); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" index 8fb228b..4056894 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\235\277\346\235\220\344\273\223/StackerCraneJob_BC.cs" @@ -120,6 +120,8 @@ task.Dispatchertime = DateTime.Now; task.ExceptionMessage = ""; _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); + //寤舵椂1s + Thread.Sleep(1000); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/CommonHoisterJob.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/CommonHoisterJob.cs" index fa169f0..f98a066 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/CommonHoisterJob.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/CommonHoisterJob.cs" @@ -93,8 +93,11 @@ task.NextAddress = locationCode; task.DeviceCode = stationManger.StackerCraneCode; task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt(); - _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: task.DeviceCode, targetAddress: task.TargetAddress, currentAddress: task.CurrentAddress, nextAddress: task.NextAddress); bool isWrite = hoister.SetValue(HoisterDBName.RequestIn, false, deviceChildCode); + if (isWrite) + { + _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: task.DeviceCode, targetAddress: task.TargetAddress, currentAddress: task.CurrentAddress, nextAddress: task.NextAddress); + } } else { @@ -113,8 +116,11 @@ if (task != null) { task.TaskState=TaskStatusEnum.HT_Executing.ObjToInt(); - _taskService.UpdateTask(task, TaskStatusEnum.HT_Executing); bool isWrite = hoister.SetValue(HoisterDBName.RequestOut, true, deviceChildCode); + if (isWrite) + { + _taskService.UpdateTask(task, TaskStatusEnum.HT_Executing); + } WriteError(hoister.DeviceName, $"璇锋眰鍑哄簱,璁惧缂栧彿:{deviceChildCode},浠诲姟鍙�:{task.TaskNum}"); } } @@ -134,8 +140,11 @@ task.NextAddress = stationManger.StackerCraneStationCode; ; task.DeviceCode = stationManger.StackerCraneCode; task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt(); - _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: task.DeviceCode, targetAddress: task.TargetAddress, nextAddress: task.NextAddress); bool isWrite = hoister.SetValue(HoisterDBName.RequestOut, false, deviceChildCode); + if (isWrite) + { + _taskService.UpdateTask(task, TaskStatusEnum.SC_Execute, deviceCode: task.DeviceCode, targetAddress: task.TargetAddress, nextAddress: task.NextAddress); + } } else { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/StackerCraneJob_YM.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/StackerCraneJob_YM.cs" index 888e499..f2f0ed3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/StackerCraneJob_YM.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\262\271\345\242\250\344\273\223/StackerCraneJob_YM.cs" @@ -80,6 +80,8 @@ task.Dispatchertime = DateTime.Now; task.ExceptionMessage = ""; _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); + //寤舵椂1s + Thread.Sleep(1000); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" index 8f364d1..1740fcd 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\346\265\213\350\257\225\346\236\266\344\273\223/StackerCraneJob_CSJ.cs" @@ -94,6 +94,8 @@ task.Dispatchertime = DateTime.Now; task.ExceptionMessage = ""; _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); + //寤舵椂1s + Thread.Sleep(1000); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/StackerCraneJob_ZH.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/StackerCraneJob_ZH.cs" index 537052a..ea01bc0 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/StackerCraneJob_ZH.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\351\230\273\347\204\212\344\273\223/StackerCraneJob_ZH.cs" @@ -73,6 +73,8 @@ task.Dispatchertime = DateTime.Now; task.ExceptionMessage = ""; _taskService.UpdateTask(task, TaskStatusEnum.SC_Executing); + //寤舵椂1s + Thread.Sleep(1000); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/MesOutOrderDetail.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/MesOutOrderDetail.vue" new file mode 100644 index 0000000..9556fb4 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/MesOutOrderDetail.vue" @@ -0,0 +1,247 @@ +<template> + <div> + <vol-box + v-model="showDetialBox" + :lazy="true" + width="75%" + :padding="15" + title="鍑哄簱璇︽儏" + > + <div class="box-head"> + <el-alert :closable="false" style="width: 100%"> + <el-row> + <el-col :span="24"> + <span class="less-style">鐗╂枡鍚嶇О锛� {{ row.materialName }} </span> + <el-divider direction="vertical"></el-divider> + <span class="less-style">鐗╂枡缂栧彿锛� {{ row.materialCode }} </span> + <el-divider direction="vertical"></el-divider> + <span class="less-style" + >闇�姹傛暟閲忥細 {{ row.orderQuantity }} + </span> + <el-divider direction="vertical"></el-divider> + <span class="less-style" + >宸插垎閰嶆暟閲忥細 {{ row.lockQuantity }} + </span> + </el-col> + </el-row> + </el-alert> + </div> + <div class="box-table" style="margin-top: 1%"> + <el-table + ref="singleTable" + :data="tableData" + style="width: 100%; height: 100%" + highlight-current-row + height="500px" + > + > + <el-table-column + label="搴忓彿" + type="index" + fixed="left" + width="55" + align="center" + ></el-table-column> + <el-table-column + v-for="(item, index) in tableColumns.filter((x) => !x.hidden)" + :key="index" + :prop="item.prop" + :label="item.title" + :width="item.width" + align="center" + > + <template #default="scoped" v-if="item.type == 'icon'"> + <el-tooltip + class="item" + effect="dark" + :content="item.title" + placement="bottom" + ><el-button + type="text" + @click="tableButtonClick(scoped.row, item)" + ><i :class="item.icon" style="font-size: 22px"></i></el-button + ></el-tooltip> + </template> + </el-table-column> + </el-table> + </div> + <template #footer> + <!-- <el-button type="primary" size="small" @click="submit">纭</el-button> --> + <el-button type="danger" size="small" @click="showDetialBox = false" + >鍏抽棴</el-button + > + </template> + </vol-box> + </div> +</template> + <script> +import VolBox from "@/components/basic/VolBox.vue"; +export default { + components: { VolBox }, + data() { + return { + row: null, + showDetialBox: false, + tableData: [], + tableColumns: [ + { + prop: "id", + title: "涓婚敭", + type: "string", + width: 150, + hidden: true, + }, + { + prop: "orderNo", + title: "鍗曟嵁缂栧彿", + type: "string", + width: 150, + }, + { + prop: "orderDetailId", + title: "鍗曟嵁鏄庣粏涓婚敭", + type: "string", + width: 150, + hidden: true, + }, + { + prop: "orderType", + title: "鍗曟嵁绫诲瀷", + type: "string", + width: 90, + }, + { + prop: "batchNo", + title: "鎵规鍙�", + type: "string", + width: 120, + }, + { + prop: "materielCode", + title: "鐗╂枡缂栧彿", + type: "string", + width: 150, + }, + { + prop: "materielName", + title: "鐗╂枡鍚嶇О", + type: "string", + width: 150, + }, + { + prop: "stockId", + title: "搴撳瓨涓婚敭", + type: "string", + width: 150, + hidden: true, + }, + { + prop: "originalQuantity", + title: "鍘熷搴撳瓨閲�", + type: "string", + width: 100, + }, + // { + // prop: "assignQuantity", + // title: "鍒嗛厤鍑哄簱閲�", + // type: "string", + // width: 100, + // }, + { + prop: "taskNum", + title: "鍑哄簱浠诲姟鍙�", + type: "string", + width: 100, + }, + { + prop: "palletCode", + title: "鎵樼洏缂栧彿", + type: "string", + width: 150, + }, + { + prop: "locationCode", + title: "璐т綅缂栧彿", + type: "string", + width: 180, + }, + { + prop: "status", + title: "鐘舵��", + type: "string", + }, + ], + }; + }, + methods: { + open(row) { + this.row = row; + this.showDetialBox = true; + this.getData(); + }, + getData() { + this.http + .post( + "api/OutStockLockInfo/GetByMesOrderDetail?taskNo=" + + this.row.taskNo, + null, + "鏌ヨ涓�" + ) + .then((x) => { + + var label=[ + { label: '宸插垎閰�', value: 0 }, + { label: '鍑哄簱涓�', value: 1 }, + { label: '鍑哄簱瀹屾垚', value: 2 }, + { label: '鎷i�夊畬鎴�', value: 3 }, + { label: '鎾ら攢', value: 99 } + ] + this.tableData=x.map((i) => ({ + ...i, + status:label.find((j) => j.value === i.status).label + })) + }); + }, + }, +}; +</script> + <style scoped> +.less-style { + color: black; +} +.equle-style { + color: green; +} +.more-style { + color: red; +} +</style> + + <style> +.text-button:hover { + background-color: #f0f9eb !important; +} +.el-table .warning-row { + background: oldlace; +} +.box-table .el-table tbody tr:hover > td { + background-color: #d8e0d4 !important; + /* color: #ffffff; */ +} + +.box-table .el-table tbody tr.current-row > td { + background-color: #f0f9eb !important; + /* color: #ffffff; */ +} + +.el-table .success-row { + background: #f0f9eb; +} + +.box-table .el-table { + border: 1px solid #ebeef5; +} +.box-head .el-alert__content { + width: 100%; +} +</style> \ No newline at end of file diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue" index acfbc12..9dcd95e 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/SelectedStock.vue" @@ -148,6 +148,12 @@ width: 100, }, { + prop: "taskNum", + title: "鍑哄簱浠诲姟鍙�", + type: "string", + width: 100, + }, + { prop: "palletCode", title: "鎵樼洏缂栧彿", type: "string", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js" index 1c3066e..67a03bf 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/mesOutboundOrder.js" @@ -1,10 +1,11 @@ //姝s鏂囦欢鏄敤鏉ヨ嚜瀹氫箟鎵╁睍涓氬姟浠g爜锛屽彲浠ユ墿灞曚竴浜涜嚜瀹氫箟椤甸潰鎴栬�呴噸鏂伴厤缃敓鎴愮殑浠g爜 -import gridBody from './extend/addMesOutOrder.vue' +import gridBody from './extend/MesOutOrderDetail.vue' +import gridHeader from './extend/addMesOutOrder.vue' let extension = { components: { //鏌ヨ鐣岄潰鎵╁睍缁勪欢 - gridHeader: '', + gridHeader: gridHeader, gridBody: gridBody, gridFooter: '', //鏂板缓銆佺紪杈戝脊鍑烘鎵╁睍缁勪欢 @@ -21,7 +22,7 @@ let addButton = this.buttons.find(item => item.value == 'Add'); if (addButton) { addButton.onClick = () => { - this.$refs.gridBody.open(); + this.$refs.gridHeader.open(); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" index 55659d0..0e1d17a 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/inboundOrder.vue" @@ -97,6 +97,7 @@ }, { title: "鍒涘缓鑰�", field: "creater", type: "like" }, { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" }, + { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],} ], ]); const columns = ref([ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue" index 2bc7943..275fdaf 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/inbound/receiveOrder.vue" @@ -53,7 +53,8 @@ ], [ { title: "渚涘簲鍟�", field: "suppliersId", type: "select",dataKey:"suppliers",data:[]}, - { title: "鍒涘缓鑰�", field: "creater", type: "like" } + { title: "鍒涘缓鑰�", field: "creater", type: "like" }, + { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],} ], ]); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" index 0fe8eda..6b61d28 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/outbound/outboundOrder.vue" @@ -116,6 +116,7 @@ }, { title: "鍒涘缓鑰�", field: "creater", type: "like" }, { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" }, + { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],} ], ]); const columns = ref([ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue" index 73bdbb7..59be617 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/stock/stockView.vue" @@ -282,6 +282,13 @@ align: "left", }, { + field: "materielSpec", + title: "瑙勬牸鍨嬪彿", + type: "string", + width: 180, + align: "left", + }, + { field: "serialNumber", title: "搴忓垪鍙�", type: "int", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue" index f8fed3d..a9e595a 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue" @@ -120,6 +120,13 @@ width: 220, align: "left", }, + { + field: "orderNo", + title: "鍗曟嵁缂栧彿", + type: "string", + width: 150, + align: "left", + }, // { // field: "currentAddress", // title: "褰撳墠浣嶇疆", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue" index c0ade98..c4538b3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue" @@ -120,6 +120,13 @@ width: 220, align: "left", }, + { + field: "orderNo", + title: "鍗曟嵁缂栧彿", + type: "string", + width: 150, + align: "left", + }, // { // field: "currentAddress", // title: "褰撳墠浣嶇疆", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1ceb7491-cd63-4a60-ba30-ad6b8388e302.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1ceb7491-cd63-4a60-ba30-ad6b8388e302.vsidx" deleted file mode 100644 index a0f3fff..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1ceb7491-cd63-4a60-ba30-ad6b8388e302.vsidx" +++ /dev/null Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2750f5ae-5ba3-4a71-bf69-75c17db76907.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2750f5ae-5ba3-4a71-bf69-75c17db76907.vsidx" deleted file mode 100644 index a9a7e35..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/2750f5ae-5ba3-4a71-bf69-75c17db76907.vsidx" +++ /dev/null Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4097eb55-e5cd-477d-a304-2ebfbecb7877.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4097eb55-e5cd-477d-a304-2ebfbecb7877.vsidx" new file mode 100644 index 0000000..006a14c --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/4097eb55-e5cd-477d-a304-2ebfbecb7877.vsidx" Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/416fe101-249f-41a5-9c55-755eb49bfad0.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/416fe101-249f-41a5-9c55-755eb49bfad0.vsidx" deleted file mode 100644 index 8972118..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/416fe101-249f-41a5-9c55-755eb49bfad0.vsidx" +++ /dev/null Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5172d2fd-775d-4922-be09-1cba741a2211.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5172d2fd-775d-4922-be09-1cba741a2211.vsidx" deleted file mode 100644 index 7a21cf1..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5172d2fd-775d-4922-be09-1cba741a2211.vsidx" +++ /dev/null Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5d7aaa65-610a-4a4f-9e08-ac924f0dace4.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5d7aaa65-610a-4a4f-9e08-ac924f0dace4.vsidx" deleted file mode 100644 index 981c64c..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5d7aaa65-610a-4a4f-9e08-ac924f0dace4.vsidx" +++ /dev/null Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/698304e2-84c8-4568-8d00-fafc24f90fa6.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/698304e2-84c8-4568-8d00-fafc24f90fa6.vsidx" new file mode 100644 index 0000000..9a610ed --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/698304e2-84c8-4568-8d00-fafc24f90fa6.vsidx" Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c0c07971-a8e8-48ed-85a6-a9d507a9fa79.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c0c07971-a8e8-48ed-85a6-a9d507a9fa79.vsidx" new file mode 100644 index 0000000..25062a7 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/c0c07971-a8e8-48ed-85a6-a9d507a9fa79.vsidx" Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d47d14a8-1bd7-49ce-b62d-ff8267c57e45.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d47d14a8-1bd7-49ce-b62d-ff8267c57e45.vsidx" new file mode 100644 index 0000000..c7983b0 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d47d14a8-1bd7-49ce-b62d-ff8267c57e45.vsidx" Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e5636152-b0c4-43fd-9e1c-ef8dceb4183d.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e5636152-b0c4-43fd-9e1c-ef8dceb4183d.vsidx" deleted file mode 100644 index 37e4729..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/e5636152-b0c4-43fd-9e1c-ef8dceb4183d.vsidx" +++ /dev/null Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs" index eccb5e8..c32f484 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_CheckService/CheckOrderService.cs" @@ -163,7 +163,7 @@ Code = checkOrder.CheckOrderNo, CompanyId = "HATC", Result = checkOrder.Result, - CreatorCode = "TC20082",//娴嬭瘯 + CreatorCode = checkOrder.Creater,//娴嬭瘯 DefectedNote = checkOrder.DefectedNote, MaterialsCode = checkOrder.MaterielCode, PlantsId = "HA02", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutProTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutProTypeEnum.cs" new file mode 100644 index 0000000..1b76f01 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutProTypeEnum.cs" @@ -0,0 +1,23 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEA_Common.OrderEnum +{ + public enum OutProTypeEnum + { + /// <summary> + /// 鎴愬搧鍑哄簱鍗� + /// </summary> + [Description("鎴愬搧鍑哄簱鍗�")] + ProOut=1, + /// <summary> + /// 瀵勫敭璁㈠崟杞粨 + /// </summary> + [Description("瀵勫敭璁㈠崟杞粨")] + SendProOut=2 + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs" index 22e5586..a43dd7e 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/PurchaseOrderEnum.cs" @@ -25,7 +25,12 @@ /// 鏀惰揣瀹屾垚 /// </summary> [Description("鏀惰揣瀹屾垚")] - Received = 2 + Received = 2, + /// <summary> + /// 璁㈠崟鍏抽棴 + /// </summary> + [Description("璁㈠崟鍏抽棴")] + Closed = 3 } public enum PurchaseOrderDetailStatusEnum @@ -44,7 +49,12 @@ /// 鏀惰揣瀹屾垚 /// </summary> [Description("鏀惰揣瀹屾垚")] - Received = 2 + Received = 2, + /// <summary> + /// 璁㈠崟鍏抽棴 + /// </summary> + [Description("璁㈠崟鍏抽棴")] + Closed = 3 } public enum PurchaseOrderTypeEnum diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs" index 3ac452b..4b0a448 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReceiveOrderEnum.cs" @@ -46,6 +46,17 @@ /// 鏀惰揣瀹屾垚 /// </summary> [Description("鏀惰揣瀹屾垚")] - Completed + Completed, + /// <summary> + /// 鍏抽棴 + /// </summary> + [Description("鍏抽棴")] + 鍏抽棴 = 99, + + /// <summary> + /// 鍙栨秷 + /// </summary> + [Description("鍙栨秷")] + 鍙栨秷 = 98 } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" index 0ab240e..7307542 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs" @@ -64,7 +64,11 @@ /// </summary> [Description("鎴愬搧鍑哄簱")] OutProduct = 230, - + /// <summary> + /// 鎴愬搧瀵勫敭杞粨 + /// </summary> + [Description("鎴愬搧瀵勫敭杞粨")] + OutSendProduct = 240, /// <summary> /// 閲囪喘鍏ュ簱 /// </summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs" index 19fad41..1bfabba 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/Helper/HttpMesHelper.cs" @@ -23,15 +23,19 @@ using HttpClient httpClient = new HttpClient(); httpClient.Timeout = new TimeSpan(0, 0, 60); - //string authorization = "AppKey 1830415116987195392"; - string authorization = "AppKey 1773317109539201024"; + //姝e紡 + string authorization = "AppKey 1830415116987195392"; + //娴嬭瘯 + //string authorization = "AppKey 1773317109539201024"; - + headers = new Dictionary<string, string> { { "Authorization", authorization }, - //{ "Site_tenant_id", "0dc2d164-8a62-417e-8a00-808007464feb" } - { "Site_tenant_id", "ced19269-2b83-4577-be43-8cc2f700251e" } + //姝e紡 + { "Site_tenant_id", "0dc2d164-8a62-417e-8a00-808007464feb" } + //娴嬭瘯 + //{ "Site_tenant_id", "ced19269-2b83-4577-be43-8cc2f700251e" } }; if (headers != null) { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpRequestContent.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpRequestContent.cs" index 4b047a0..02945c7 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpRequestContent.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpRequestContent.cs" @@ -6,10 +6,22 @@ namespace WIDESEA_DTO.ERP { + /// <summary> + /// 璋冪敤ERP鎺ュ彛杩斿洖鍙傛暟 + /// </summary> public class ErpRequestContent { + /// <summary> + /// 瑙i噴 + /// </summary> public string Data { get ; set; } + /// <summary> + /// + /// </summary> public string Rdata { get; set; } + /// <summary> + /// 鍝嶅簲鐘舵�� + /// </summary> public int res { get ; set; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs" index 963d767..b909403 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs" @@ -39,7 +39,7 @@ ERPBaseModel<ERPReceiveModel> model = new ERPBaseModel<ERPReceiveModel>() { Data = receiveModel, - Desc = "鏀惰揣鍗�", + Desc = "WMS鏀惰揣鍗曟帹閫�", Type = "toTCWMSReceive", SecurityCode = "TeChuang" }; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" index 26760b3..1e4d934 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" @@ -32,11 +32,11 @@ /// 鍏ュ簱瀹屾垚涓婃姤 /// </summary> /// <returns></returns> - WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder); + WebResponseContent FeedbackInboundOrder(int inboundOrderId); /// <summary> /// 閫�鏂欏畬鎴愪笂鎶ヨ嚦ERP /// </summary> - public WebResponseContent FeedbackReturnOrder(Dt_InboundOrder inboundOrder,Dt_ReturnOrder returnOrder); + WebResponseContent FeedbackReturnOrder(Dt_InboundOrder inboundOrder,Dt_ReturnOrder returnOrder); /// <summary> /// 鏍规嵁浠撳簱鍜屾墭鐩樺彿鑾峰彇鎵樼洏绫诲瀷 /// </summary> @@ -47,5 +47,9 @@ /// </summary> /// <returns></returns> WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO model); + /// <summary> + /// 鎴愬搧鍏ュ簱涓婁紶ERP + /// </summary> + WebResponseContent FeedbackProIn(Dt_MesProInOrder mesProInOrder); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutProStockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutProStockInfoRepository.cs" new file mode 100644 index 0000000..1b66392 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutProStockInfoRepository.cs" @@ -0,0 +1,14 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IOutboundRepository +{ + public interface IOutProStockInfoRepository : IRepository<Dt_OutProStockInfo> + { + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs" new file mode 100644 index 0000000..065f01c --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs" @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseServices; +using WIDESEA_IOutboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IOutboundService +{ + public interface IOutProStockInfoService : IService<Dt_OutProStockInfo> + { + IOutProStockInfoRepository Repository { get; } + Dt_OutProStockInfo GetOutStockLockInfo(Dt_ProOutOrder proOutOrder, Dt_ProOutOrderDetail proOutOrderDetail, Dt_ProStockInfo proStockInfo, float assignQty, int? taskNum = null); + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs" index 4d49688..822d536 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs" @@ -97,5 +97,11 @@ /// <param name="palletCode">鎵樼洏鍙�</param> /// <returns></returns> WebResponseContent MaterialPick(string palletCode); + /// <summary> + /// 鑾峰彇Mes鍑哄簱璇︽儏 + /// </summary> + /// <param name="taskNo">Mes浠诲姟鍗曞彿</param> + /// <returns></returns> + List<Dt_OutStockLockInfo> GetByMesOrderDetail(string taskNo); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderDetailService.cs" index 3154f3c..20cc88f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderDetailService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderDetailService.cs" @@ -3,6 +3,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using WIDESEA_Common.LocationEnum; +using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_IOutboundRepository; using WIDESEA_Model.Models; @@ -12,5 +14,13 @@ public interface IProOutOrderDetailService : IService<Dt_ProOutOrderDetail> { IProOutOrderDetailRepository Repository { get; } + /// <summary> + /// 鍒嗛厤搴撳瓨澶勭悊璐т綅鏁版嵁 + /// </summary> + (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(int warehouseId,Dt_ProOutOrder proOutOrder); + /// <summary> + /// 鍑哄簱浠诲姟鏁版嵁澶勭悊 + /// </summary> + WebResponseContent LockOutboundStockDataUpdate(List<Dt_ProStockInfo> proStockInfos, List<Dt_ProOutOrderDetail> proOutOrderDetails, List<Dt_OutProStockInfo> outProStockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs" index 553243d..d86e150 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs" @@ -10,5 +10,9 @@ { public interface IProStockInfoRepository : IRepository<Dt_ProStockInfo> { + /// <summary> + /// 鏌ユ壘鍙敤搴撳瓨 + /// </summary> + List<Dt_ProStockInfo> GetProStocks(Dt_ProOutOrderDetail proOutOrderDetail,List<string> locationInfos); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs" index 1f65de3..6d5fbd0 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs" @@ -12,5 +12,13 @@ public interface IProStockInfoService : IService<Dt_ProStockInfo> { IProStockInfoRepository Repository { get; } + /// <summary> + /// 鏌ユ壘鍙敤搴撳瓨 + /// </summary> + List<Dt_ProStockInfo> GetUseableStocks(int warehoseId, Dt_ProOutOrderDetail proOutOrderDetail); + /// <summary> + /// 鑾峰彇鍑哄簱搴撳瓨 + /// </summary> + List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail outOrderDetail, float needQuantity, out float residueQuantity); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs" index 13f1cfe..29dd8fe 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockService.cs" @@ -15,5 +15,9 @@ IStockInfoDetail_HtyService StockInfoDetail_HtyService { get; } IStockInfo_HtyService StockInfo_HtyService { get; } + IProStockInfoService ProStockInfoService { get; } + IProStockInfoDetailService ProStockInfoDetailService { get; } + IProStockInfo_HtyService ProStockInfo_HtyService { get; } + IProStockInfoDetail_HtyService ProStockInfoDetail_HtyService { get; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" index 214bf41..0e64ce4 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" @@ -347,6 +347,12 @@ WebResponseContent PPCutOutGenerateOutboundTasks(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews); WebResponseContent PPGeneratePKOutboundTask(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews); - + /// <summary> + /// 鐢熸垚鎴愬搧鍑哄簱浠诲姟 + /// </summary> + /// <param name="ProOutNo">鍑哄簱璁㈠崟鍙�</param> + /// <param name="StationCode">绔欏彴鍦板潃</param> + /// <returns></returns> + WebResponseContent OutProductTask(string ProOutNo, string StationCode); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" index 4d71ad1..252b4b0 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" @@ -2,8 +2,10 @@ using HslCommunication.WebSocket; using Microsoft.AspNetCore.Mvc.RazorPages; using Newtonsoft.Json; +using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using SqlSugar; using System; +using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -41,6 +43,7 @@ using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; using WIDESEA_StockRepository; +using static Org.BouncyCastle.Pqc.Crypto.Utilities.PqcOtherInfoGenerator; namespace WIDESEA_InboundService { @@ -556,7 +559,7 @@ } else { - FeedbackInboundOrder(inboundOrder); + FeedbackInboundOrder(inboundOrder.Id); } } #endregion @@ -1131,11 +1134,12 @@ /// 鍏ュ簱瀹屾垚涓婃姤ERP /// </summary> /// <returns></returns> - public WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder) + public WebResponseContent FeedbackInboundOrder(int inboundOrderId) { WebResponseContent content = new WebResponseContent(); try { + Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderId).Includes(x => x.Details).First(); if (inboundOrder.Details.Count == 0) { return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); @@ -1232,11 +1236,11 @@ .Select(mg => new ReturnPickItem { Material = mg.Key, - Qty = mg.Sum(x => x.Qty), + Qty = mg.Sum(x => x.ReturnQty), Dataitem = mg.Select(d => new ReturnDataItem { Lotno = d.BatchNo, - Qty = d.Qty, + Qty = d.ReturnQty, Location = warehouse.WarehouseCode, Msfpart = d.Code }).ToList() @@ -1263,6 +1267,61 @@ } return content; } + /// <summary> + /// 鎴愬搧鍏ュ簱涓婁紶ERP + /// </summary> + public WebResponseContent FeedbackProIn(Dt_MesProInOrder mesProInOrder) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<ERPProItemsItem> proItemsItems = new List<ERPProItemsItem>(); + foreach (var item in mesProInOrder.Details) + { + ERPProItemsItem proItemsItem = new ERPProItemsItem() + { + PartNum = item.ProductCode, + Rev=item.ProductVersion, + DateCode=item.DateCode, + BatchNumber= item.BagNo, + XLocation=item.XSite, + Xqty=item.XQty, + QtySet=item.SETQty, + QtyPcs=item.OKPCSQTY, + WoList=new List<ERPProListItem>() + { + new ERPProListItem() + { + moNumber=item.MoNumber, + WoNumber=item.ERPOrder, + QtyPcs=item.OKPCSQTY, + QtySet=item.SETQty + } + } + }; + proItemsItems.Add(proItemsItem); + } + ERPProInboundModel proInboundModel = new ERPProInboundModel() + { + Way = 1, + Code = mesProInOrder.ProInOrderNo, + CreatorCode = "GSWMS", + CompanyCode = "HATC", + FactoryCode = "HA02", + WarehouseCode = "HA71", + LocationCode = "HA71", + StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + StockFormType= "Production", + StockFormItems= proItemsItems + }; + _invokeERPService.InvokeProInApi(proInboundModel); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } static object lock_code = new object(); public string CreateCodeByRule(string ruleCode) { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs" index 3b89db1..2eb5da7 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs" @@ -258,12 +258,15 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒伴噰璐崟鏄庣粏淇℃伅"); } - + purchaseOrder.PurchaseOrderStatus = PurchaseOrderStatusEnum.Closed.ObjToInt(); _unitOfWorkManage.BeginTran(); - BaseDal.DeleteAndMoveIntoHty(purchaseOrder, OperateTypeEnum.鍏抽棴); + BaseDal.UpdateData(purchaseOrder); + //BaseDal.DeleteAndMoveIntoHty(purchaseOrder, OperateTypeEnum.鍏抽棴); foreach (var item in purchaseOrder.Details) { - _purchaseOrderDetailRepository.DeleteAndMoveIntoHty(item, OperateTypeEnum.鍏抽棴); + item.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.Closed.ObjToInt(); + //_purchaseOrderDetailRepository.DeleteAndMoveIntoHty(item, OperateTypeEnum.鍏抽棴); + _purchaseOrderDetailRepository.UpdateData(item); } _unitOfWorkManage.CommitTran(); return WebResponseContent.Instance.OK(); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs" index d74a418..ff6f7dc 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs" @@ -72,6 +72,70 @@ { return WebResponseContent.Instance.Error($"璇ョ墿鏂欎笉灞炰簬璇ヤ粨搴�"); } + //鏃犻噰璐崟杩涜鏀惰揣 + if (receiveOrder.ReceiveOrderType != ReceiveOrderTypeEnum.PO.ObjToInt()) + { + //鑾峰彇鍏蜂綋鎵规鍙婄墿鏂� + Dt_ReceiveOrderDetail? detailNoPo = receiveOrder.Details.FirstOrDefault(x => x.LotNo == model.LotNo && x.MaterielCode == model.MaterielCode); + lock (_rowNoLocker) + { + if (detailNoPo != null) + { + //鍘熸湁鏀惰揣鏄庣粏澧炲姞鏀惰揣鏁伴噺 + detailNoPo.ReceivedQuantity += model.Quantity; + _unitOfWorkManage.BeginTran(); + BaseDal.UpdateData(detailNoPo); + _unitOfWorkManage.CommitTran(); + } + else + { + int rowNo = 0; + if (receiveOrder.Details.Count > 0) + { + rowNo = receiveOrder.Details.Max(x => x.RowNo); + } + Dt_ReceiveOrderDetail receiveOrderDetail = new Dt_ReceiveOrderDetail() + { + PurchaseOrderNo = model.PurchaseOrderNo, + ReceivedQuantity = model.Quantity, + MaterielCode = model.MaterielCode, + LotNo = model.LotNo, + MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec, + ReceiveOrderId = receiveOrder.ReceiveOrderId, + PurchaseOrderDetailRowNo = rowNo + 1, + IfInspection = materielInfo.IsCheck.ObjToInt(), + CurrCode = "", + PriceInTax = 0, + TaxRate = "", + RowNo = rowNo + 1, + Unit = materielInfo.MaterielUnit + }; + if (receiveOrder.ReceiveOrderStatus == ReceiveOrderStatusEnum.NotStarted.ObjToInt()) + { + receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Receiving.ObjToInt(); + } + _unitOfWorkManage.BeginTran(); + _inboundRepository.ReceiveOrderDetailRepository.AddData(receiveOrderDetail); + _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder); + #region 娉ㄩ噴 + if (materielInfo.IsCheck == WhetherEnum.True) + { + Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); + checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; + checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; + checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo; + checkOrder.ScrappedQuantity = 0; + checkOrder.ReturnQuantity = 0; + checkOrder.DefectedQuantity = 0; + _checkOrderRepository.AddData(checkOrder); + } + #endregion + _unitOfWorkManage.CommitTran(); + } + return WebResponseContent.Instance.OK(); + } + } Dt_PurchaseOrder purchaseOrder = _inboundRepository.PurchaseOrderRepository.Db.Queryable<Dt_PurchaseOrder>().Where(x => x.PurchaseOrderNo == model.PurchaseOrderNo).Includes(x => x.Details).First(); if (purchaseOrder == null) { @@ -200,16 +264,17 @@ _inboundRepository.ReceiveOrderRepository.UpdateData(receiveOrder); _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrderDetail); #region 娉ㄩ噴 - //if (materielInfo.IsCheck == WhetherEnum.True) - //{ - // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); - // checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; - // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; - // checkOrder.ScrappedQuantity = 0; - // checkOrder.ReturnQuantity = 0; - // checkOrder.DefectedQuantity = 0; - // _checkOrderRepository.AddData(checkOrder); - //} + ////if (materielInfo.IsCheck == WhetherEnum.True) + ////{ + //// Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); + //// checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; + //// checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; + //// checkOrder.ReceiveDetailRowNo = receiveOrderDetail.RowNo; + //// checkOrder.ScrappedQuantity = 0; + //// checkOrder.ReturnQuantity = 0; + //// checkOrder.DefectedQuantity = 0; + //// _checkOrderRepository.AddData(checkOrder); + ////} #endregion _unitOfWorkManage.CommitTran(); } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" index 72ba693..0477465 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs" @@ -131,12 +131,17 @@ PriceInTax = 0, PurchaseOrderCode = item.PurchaseOrderNo, PurchaseOrderSerno = item.PurchaseOrderDetailRowNo, - QtyRecieved = item.ReceivedQuantity.ObjToInt(), + QtyRecieved = item.ReceivedQuantity, Serno = item.RowNo, - Supplotno = "", + Supplotno = item.LotNo, Taxrate = "", }; + if (receiveOrder.ReceiveOrderType!=ReceiveOrderTypeEnum.PO.ObjToInt()) + { + recevieOrderDetail.Taxrate = "ZZ11"; + recevieOrderDetail.Currcode = "RMB"; + } recevieOrderDetails.Add(recevieOrderDetail); } @@ -158,12 +163,16 @@ //鏇存柊鏀惰揣鍗曚俊鎭� receiveOrder.ReceiveOrderStatus = ReceiveOrderStatusEnum.Completed.ObjToInt(); - receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt(); + //鏀惰揣鎺ㄩ�佽嚦ER + string response = _invokeERPService.InvokeMatReceiveApi(receiveModel); + ErpRequestContent requestContent = response.DeserializeObject<ErpRequestContent>(); + if (requestContent.res == 1) + { + receiveOrder.UploadStatus = WhetherEnum.True.ObjToInt(); + } BaseDal.UpdateData(receiveOrder); //鍒涘缓鍏ュ簱鍗� CreateInboundOrder(orderId); - //鏀惰揣鎺ㄩ�佽嚦ERP 娴嬭瘯娉ㄩ噴 - _invokeERPService.InvokeMatReceiveApi(receiveModel); return WebResponseContent.Instance.OK(); } catch (Exception ex) @@ -209,6 +218,10 @@ try { Dt_ReceiveOrder receiveOrder = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderId == receiveOrderId).Includes(x => x.Details).First(); + if (receiveOrder.UploadStatus!= WhetherEnum.True.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏉ユ枡涓婁紶ERP澶辫触鏃犳硶鍒涘缓鍏ュ簱鍗曟嵁"); + } if (receiveOrder == null) { return WebResponseContent.Instance.Error($"鏈壘鍒拌鏀惰揣鍗曚俊鎭�"); @@ -221,17 +234,22 @@ { return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈畬鎴�"); } + Dt_InboundOrder OldCreateOrder = _inboundRepository.InboundOrderRepository.QueryFirst(x => x.UpperOrderNo == receiveOrder.ReceiveOrderNo); + if (receiveOrder.CreateInOrderStatus==WhetherEnum.True.ObjToInt() || OldCreateOrder!=null) + { + return WebResponseContent.Instance.Error($"璇ユ敹璐у崟瀵瑰簲鐨勫叆搴撳崟宸插瓨鍦�"); + } #region 娉ㄩ噴 - //List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); - //if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) - //{ - // return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈川妫�瀹屾垚"); - //} + ////List<Dt_CheckOrder> checkOrders = _checkOrderRepository.QueryData(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo); + ////if (checkOrders.FirstOrDefault(x => x.CheckOrderStatus == CheckOrderStatusEnum.NotCheck.ObjToInt()) != null) + ////{ + //// return WebResponseContent.Instance.Error($"璇ユ敹璐у崟鏈川妫�瀹屾垚"); + ////} - //if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) - //{ - // return WebResponseContent.Instance.Error($"璇ユ敹璐у崟璐ㄦ缁撴灉瀹℃壒鏈畬鎴�"); - //} + ////if (checkOrders.FirstOrDefault(x => x.AuditStatus != AuditStatusEnum.Agree.ObjToInt()) != null) + ////{ + //// return WebResponseContent.Instance.Error($"璇ユ敹璐у崟璐ㄦ缁撴灉瀹℃壒鏈畬鎴�"); + ////} #endregion Dt_InboundOrder inboundOrder = new Dt_InboundOrder() @@ -249,15 +267,15 @@ { float quantity = item.ReceivedQuantity; #region 娉ㄩ噴 - //if (item.IfInspection == WhetherEnum.True.ObjToInt()) - //{ - // Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); - // if (checkOrder == null) - // { - // return WebResponseContent.Instance.Error($"璐ㄦ鍗曟暟鎹敊璇�"); - // } - // quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); - //} + ////if (item.IfInspection == WhetherEnum.True.ObjToInt()) + ////{ + //// Dt_CheckOrder? checkOrder = checkOrders.FirstOrDefault(x => x.ReceiveOrderNo == receiveOrder.ReceiveOrderNo && x.ReceiveDetailRowNo == item.RowNo); + //// if (checkOrder == null) + //// { + //// return WebResponseContent.Instance.Error($"璐ㄦ鍗曟暟鎹敊璇�"); + //// } + //// quantity = checkOrder.QualifiedQuantity.GetValueOrDefault() + checkOrder.DefectedQuantity.GetValueOrDefault(); + ////} #endregion Dt_InboundOrderDetail detail = new Dt_InboundOrderDetail() { @@ -342,19 +360,19 @@ rowNo += 1; receiveOrderDetails.Add(receiveOrderDetail); #region 娉ㄩ噴 - //if (materielInfo.IsCheck == WhetherEnum.True) - //{ - // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); - // checkOrder.CheckOrderNo = "TestCheckNo21";//娴嬭瘯 - // checkOrder.ReceiveOrderNo = ""; - // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; - // checkOrder.ScrappedQuantity = 0; - // checkOrder.ReturnQuantity = 0; - // checkOrder.DefectedQuantity = 0; - // checkOrder.ReceiveDetailRowNo = rowNo; - // checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); - // checkOrders.Add(checkOrder); - //} + if (materielInfo.IsCheck == WhetherEnum.True) + { + Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); + checkOrder.CheckOrderNo = "TestCheckNo21";//娴嬭瘯 + checkOrder.ReceiveOrderNo = ""; + checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; + checkOrder.ScrappedQuantity = 0; + checkOrder.ReturnQuantity = 0; + checkOrder.DefectedQuantity = 0; + checkOrder.ReceiveDetailRowNo = rowNo; + checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); + checkOrders.Add(checkOrder); + } #endregion } receiveOrder = new Dt_ReceiveOrder() @@ -405,19 +423,19 @@ rowNo += 1; receiveOrderDetails.Add(receiveOrderDetail); - //if (materielInfo.IsCheck == WhetherEnum.True) - //{ - // Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); - // checkOrder.CheckOrderNo = "Test-CheckNo1";//娴嬭瘯 - // checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; - // checkOrder.ScrappedQuantity = 0; - // checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; - // checkOrder.ReturnQuantity = 0; - // checkOrder.DefectedQuantity = 0; - // checkOrder.ReceiveDetailRowNo = rowNo; - // checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); - // checkOrders.Add(checkOrder); - //} + if (materielInfo.IsCheck == WhetherEnum.True) + { + Dt_CheckOrder checkOrder = _mapper.Map<Dt_CheckOrder>(receiveOrderDetail); + checkOrder.CheckOrderNo = "Test-CheckNo1";//娴嬭瘯 + checkOrder.QualifiedQuantity = receiveOrderDetail.ReceivedQuantity; + checkOrder.ScrappedQuantity = 0; + checkOrder.ReceiveOrderNo = receiveOrder.ReceiveOrderNo; + checkOrder.ReturnQuantity = 0; + checkOrder.DefectedQuantity = 0; + checkOrder.ReceiveDetailRowNo = rowNo; + checkOrder.UploadStatus = CheckUploadEnum.UploadNo.ObjToInt(); + checkOrders.Add(checkOrder); + } } } @@ -434,10 +452,10 @@ Db.InsertNav(receiveOrder).Include(x => x.Details).ExecuteCommand(); checkOrders.ForEach(x => x.ReceiveOrderNo = receiveOrder.ReceiveOrderNo); } - //if (checkOrders.Count > 0) - //{ - // _checkOrderRepository.AddData(checkOrders); - //} + if (checkOrders.Count > 0) + { + _checkOrderRepository.AddData(checkOrders); + } _inboundRepository.PurchaseOrderRepository.UpdateData(purchaseOrder); _inboundRepository.PurchaseOrderDetailRepository.UpdateData(purchaseOrder.Details); _unitOfWorkManage.CommitTran(); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs" index 6d5f190..1943086 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs" @@ -24,12 +24,14 @@ private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IBasicRepository _basicRepository; private readonly IOutboundService _outboundService; + private readonly IInboundRepository _inboundRepository; public ReturnOrderService(IReturnOrderRepository BaseDal,IUnitOfWorkManage unitOfWorkManage,IBasicRepository basicRepository, - IOutboundService outboundService) : base(BaseDal) + IOutboundService outboundService,IInboundRepository inboundRepository) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _basicRepository = basicRepository; _outboundService = outboundService; + _inboundRepository = inboundRepository; } /// <summary> /// 鑾峰彇閫�鏂欏崟 @@ -189,6 +191,12 @@ { return content.Error("璇ラ��鏂欏崟宸插畬鎴愭垨閫�鏂欎腑"); } + //鍒ゆ柇鏄惁鍒涘缓鍏ュ簱鍗� + Dt_InboundOrder InboundOld = _inboundRepository.InboundOrderRepository.QueryFirst(x=>x.UpperOrderNo== returnOrder.OrderNo); + if (InboundOld!=null) + { + return content.Error($"璇ラ��鏂欏崟{returnOrder.OrderNo}宸茬敓鎴愬叆搴撳崟鍙穥InboundOld.InboundOrderNo}"); + } List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>(); foreach (var item in returnOrder.Details) { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs" index e25fc30..ceea5e9 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Config/Dt_CodeRuleConfig.cs" @@ -41,7 +41,7 @@ /// <summary> /// 鍓嶇紑瀛楃涓� /// </summary> - [SugarColumn(IsNullable = true, Length = 2, ColumnDescription = "鍓嶇紑瀛楃涓�")] + [SugarColumn(IsNullable = true, Length = 5, ColumnDescription = "鍓嶇紑瀛楃涓�")] public string StartStr { get; set; } /// <summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs" index b18f8d9..aeb933c 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrder.cs" @@ -48,6 +48,12 @@ public int UploadStatus { get; set; } /// <summary> + /// 鏄惁鍒涘缓鍏ュ簱鍗� + /// </summary> + [SugarColumn(IsNullable = true, ColumnDescription = "鏄惁鍒涘缓鍏ュ簱鍗�")] + public int CreateInOrderStatus { get; set; } + + /// <summary> /// 瀹㈡埛浠e彿 /// </summary> [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "瀹㈡埛浠e彿")] diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs" index 6e40d7b..7bbfb97 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutProStockInfo.cs" @@ -64,6 +64,11 @@ [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "浜у搧鐗堟湰")] public string PVer { get; set; } /// <summary> + /// 浜у搧鎵规 + /// </summary> + [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "浜у搧鎵规")] + public string PLot { get; set; } + /// <summary> /// 浜у搧鍛ㄦ湡 /// </summary> [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "浜у搧鍛ㄦ湡")] diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProOutOrderDetail.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProOutOrderDetail.cs" index ce8dbed..86e4fbe 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProOutOrderDetail.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_ProOutOrderDetail.cs" @@ -79,9 +79,9 @@ public string DateCode { get; set; } /// <summary> - /// 鍚堟牸PCS鏁� + /// 鍑哄簱鍚堟牸PCS鏁� /// </summary> - [SugarColumn(IsNullable = false, ColumnDescription = "鍚堟牸PCS鏁�")] + [SugarColumn(IsNullable = false, ColumnDescription = "鍑哄簱鍚堟牸PCS鏁�")] public float QtyPcs { get; set; } /// <summary> @@ -91,6 +91,12 @@ public float OverQtyPcs { get; set; } /// <summary> + /// 閿佸畾鏁伴噺 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閿佸畾鏁伴噺")] + public float LockQtyPcs { get; set; } + + /// <summary> /// X鏉挎暟 /// </summary> [SugarColumn(IsNullable = true, ColumnDescription = "X鏉挎暟")] diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_ProStockInfoDetail.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_ProStockInfoDetail.cs" index 723c9e1..2ad16db 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_ProStockInfoDetail.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_ProStockInfoDetail.cs" @@ -56,10 +56,10 @@ [SugarColumn(IsNullable = false, ColumnDescription = "鍖呰SET鏁伴噺")] public float SETQty { get; set; } /// <summary> - /// 鍚堟牸PCS鏁� + /// 搴撳瓨PCS鏁� /// </summary> [SugarColumn(IsNullable = false, ColumnDescription = "鍚堟牸PCS鏁�")] - public float OKPCSQTY { get; set; } + public float StockPcsQty { get; set; } /// <summary> /// 鍛ㄦ湡 /// </summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutProStockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutProStockInfoRepository.cs" new file mode 100644 index 0000000..767cd01 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutProStockInfoRepository.cs" @@ -0,0 +1,18 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_IOutboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_OutboundRepository +{ + public class OutProStockInfoRepository : RepositoryBase<Dt_OutProStockInfo>, IOutProStockInfoRepository + { + public OutProStockInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) + { + } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs" new file mode 100644 index 0000000..d3bb1cb --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs" @@ -0,0 +1,53 @@ +锘縰sing SqlSugar.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Common.StockEnum; +using WIDESEA_Core.BaseRepository; +using WIDESEA_Core.BaseServices; +using WIDESEA_IOutboundRepository; +using WIDESEA_IOutboundService; +using WIDESEA_Model.Models; + +namespace WIDESEA_OutboundService +{ + public partial class OutProStockInfoService : ServiceBase<Dt_OutProStockInfo, IOutProStockInfoRepository>, IOutProStockInfoService + { + private readonly IUnitOfWorkManage _unitOfWorkManage; + + public IOutProStockInfoRepository Repository => BaseDal; + + public OutProStockInfoService(IOutProStockInfoRepository BaseDal,IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) + { + _unitOfWorkManage = unitOfWorkManage; + } + public Dt_OutProStockInfo GetOutStockLockInfo(Dt_ProOutOrder proOutOrder, Dt_ProOutOrderDetail proOutOrderDetail, Dt_ProStockInfo proStockInfo, float assignQty, int? taskNum = null) + { + Dt_OutProStockInfo outProStockInfo = new Dt_OutProStockInfo() + { + OrderNo = proOutOrder.ProOutOrderNo, + OrderDetailId = proOutOrderDetail.Id, + OrderType = proOutOrder.ProOrderType, + BatchNo = proOutOrderDetail.PLot, + SaleOrder = proOutOrderDetail.SaleOrder, + Customer = proOutOrderDetail.Customer, + PCode = proOutOrderDetail.PCode, + PVer = proOutOrderDetail.PVer, + PLot = proOutOrderDetail.PLot, + DateCode = proOutOrderDetail.DateCode, + StockId = proStockInfo.Id, + OrderQuantity = proOutOrderDetail.QtyPcs, + OriginalQuantity = proStockInfo.proStockInfoDetails.Sum(x => x.StockPcsQty), + AssignQuantity = assignQty, + LocationCode = proStockInfo.LocationCode, + PalletCode = proStockInfo.PalletCode, + Unit = proOutOrderDetail.Unit, + TaskNum = taskNum, + Status = taskNum == null ? OutLockStockStatusEnum.宸插垎閰�.ObjToInt() : OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt() + }; + return outProStockInfo; + } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs" index 2e84bab..5da8a45 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutStockLockInfoService.cs" @@ -188,6 +188,10 @@ { return BaseDal.QueryData(x => x.OrderDetailId == orderDetailId && outStockStatus == null ? true : x.Status == outStockStatus.ObjToInt()); } + public List<Dt_OutStockLockInfo> GetByMesOrderDetail(string taskNo) + { + return BaseDal.QueryData(x => x.OrderNo == taskNo); + } public List<Dt_OutStockLockInfo> GetStockOutboundOrder(SaveModel saveModel) { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" index a213cab..b6057e6 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" @@ -235,7 +235,7 @@ ERPPickItemModel pickItemModel = new ERPPickItemModel() { Lotno = item.BatchNo, - Qty = item.AssignQuantity.ObjToInt().ToString(), + Qty = item.AssignQuantity.ToString(), Location = WarehouseCode }; //鑾峰彇鍑哄簱鍗曟槑缁� @@ -474,7 +474,7 @@ issueModel = new ERPIssueModel() { UniqueTag = id.ToString(), - Code = CreateCodeByRule(nameof(RuleCodeEnum.FLCodeRule)),//娴嬭瘯 + Code = CreateCodeByRule(nameof(RuleCodeEnum.FLCodeRule)), WarehouseCode = warehouse.WarehouseCode, Docremark = "", Deptno = outboundOrder.DepartmentCode, diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs" index dd8108e..1941997 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs" @@ -3,10 +3,16 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using WIDESEA_Common.LocationEnum; +using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; +using WIDESEA_Core.Helper; +using WIDESEA_IBasicService; using WIDESEA_IOutboundRepository; using WIDESEA_IOutboundService; +using WIDESEA_IRecordService; +using WIDESEA_IStockService; using WIDESEA_Model.Models; namespace WIDESEA_OutboundService @@ -16,10 +22,151 @@ private readonly IUnitOfWorkManage _unitOfWorkManage; public IProOutOrderDetailRepository Repository => BaseDal; - - public ProOutOrderDetailService(IProOutOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) + private readonly IStockService _stockInfoService; + private readonly IBasicService _basicService; + private readonly IOutProStockInfoService _outProStockInfoService; + private readonly IRecordService _recordService; + public ProOutOrderDetailService(IProOutOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockInfoService, IBasicService basicService,IOutProStockInfoService outProStockInfoService, IRecordService recordService) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; + _stockInfoService = stockInfoService; + _basicService = basicService; + _outProStockInfoService = outProStockInfoService; + _recordService = recordService; + } + /// <summary> + /// 鍑哄簱搴撳瓨鍒嗛厤鍚庯紝鏇存柊鏁版嵁搴撴暟鎹� + /// </summary> + public WebResponseContent LockOutboundStockDataUpdate(List<Dt_ProStockInfo> proStockInfos, List<Dt_ProOutOrderDetail> proOutOrderDetails, List<Dt_OutProStockInfo> outProStockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null) + { + try + { + _stockInfoService.ProStockInfoService.Repository.UpdateData(proStockInfos); + List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); + foreach (var item in proStockInfos) + { + proStockInfoDetails.AddRange(item.proStockInfoDetails); + } + _stockInfoService.ProStockInfoDetailService.Repository.UpdateData(proStockInfoDetails); + BaseDal.UpdateData(proOutOrderDetails); + + List<Dt_OutProStockInfo> addOutStockLockInfos = outProStockInfos.Where(x => x.Id == 0).ToList(); + if (addOutStockLockInfos != null && addOutStockLockInfos.Any()) + { + if (tasks != null) + { + addOutStockLockInfos.ForEach(x => + { + x.TaskNum = tasks.FirstOrDefault(v => v.PalletCode == x.PalletCode)?.TaskNum; + }); + } + + _outProStockInfoService.Repository.AddData(addOutStockLockInfos); + } + List<Dt_OutProStockInfo> updateOutStockLockInfos = outProStockInfos.Where(x => x.Id > 0).ToList(); + if (updateOutStockLockInfos != null && updateOutStockLockInfos.Any()) + { + _outProStockInfoService.Repository.UpdateData(updateOutStockLockInfos); + } + + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, locationStatus, LocationChangeType.OutboundAssignLocation, "", tasks?.Select(x => x.TaskNum).ToList()); + _basicService.LocationInfoService.Repository.UpdateLocationStatus(locationInfos, locationStatus); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + /// <summary> + /// 鍒嗛厤搴撳瓨澶勭悊璐т綅鏁版嵁 + /// </summary> + public (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(int warehouseId, Dt_ProOutOrder proOutOrder) + { + List<Dt_ProOutOrderDetail> OutOrderDetails = proOutOrder.Details; + if (!OutOrderDetails.Any()) + { + throw new Exception($"鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅"); + } + List<Dt_ProStockInfo> outStocks = new List<Dt_ProStockInfo>(); + List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>(); + List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>(); + List<Dt_ProOutOrderDetail> groupDetails = OutOrderDetails.GroupBy(x => new { x.SaleOrder, x.PCode, x.PVer, x.PLot, x.DateCode }).Select(x => new Dt_ProOutOrderDetail() + { + QtyPcs = x.Sum(x => x.QtyPcs) - x.Sum(x => x.OverQtyPcs), + SaleOrder = x.Key.SaleOrder, + PCode = x.Key.PCode, + PVer = x.Key.PVer, + PLot = x.Key.PLot, + DateCode = x.Key.DateCode, + }).ToList(); + foreach (var item in groupDetails) + { + float needQty = item.QtyPcs; + //鏌ユ壘鍙敤搴撳瓨 + List<Dt_ProStockInfo> stockInfoss = _stockInfoService.ProStockInfoService.GetUseableStocks(warehouseId, item); + if (!stockInfoss.Any()) + { + throw new Exception("鏈壘鍒板彲鍒嗛厤搴撳瓨"); + } + //鑾峰彇鍑哄簱搴撳瓨 + List<Dt_ProStockInfo> assignOutStocks = _stockInfoService.ProStockInfoService.GetOutboundStocks(stockInfoss, item, needQty, out float residueQuantity); + item.LockQtyPcs += needQty - residueQuantity; + outStocks.AddRange(assignOutStocks); + float assignQuantity = needQty - residueQuantity; + bool isCanLot = !string.IsNullOrEmpty(item.PLot); + bool isCanDate = !string.IsNullOrEmpty(item.DateCode); + List<Dt_ProOutOrderDetail> details = OutOrderDetails + .Where(x => x.SaleOrder == item.SaleOrder && x.PCode == item.PCode && x.PVer == item.PVer + && (isCanLot ? x.PLot == item.PLot : true) + && (isCanDate ? x.DateCode == item.DateCode : true)) + .ToList(); + + for (int i = 0; i < details.Count; i++) + { + float orderQuantity = details[i].QtyPcs; + for (int j = 0; j < assignOutStocks.Count; j++) + { + float detailAssignQuantity = outProStockInfos.Where(x => x.SaleOrder == item.SaleOrder && x.PCode == item.PCode && x.PVer == item.PVer + && (item.PLot.IsNotEmptyOrNull() ? x.PLot == item.PLot : false) + && (item.DateCode.IsNotEmptyOrNull() ? x.DateCode == item.PLot : false) + && x.OrderDetailId == details[i].Id).Sum(x => x.AssignQuantity);//鍑哄簱璁㈠崟鏄庣粏宸插垎閰嶆暟閲� + + float palletAssignQuantity = outProStockInfos.Where(x => x.SaleOrder == item.SaleOrder && x.PCode == item.PCode && x.PVer == item.PVer + && (item.PLot.IsNotEmptyOrNull() ? x.PLot == item.PLot : false) + && (item.DateCode.IsNotEmptyOrNull() ? x.DateCode == item.PLot : false + && x.PalletCode == assignOutStocks[j].PalletCode)).Sum(x => x.AssignQuantity); + //鍑哄簱璇︽儏宸插垎閰嶆暟閲� + palletAssignQuantity = outProStockInfos.Where(x => x.SaleOrder == item.SaleOrder && x.PCode == item.PCode && x.PVer == item.PVer + && (item.PLot.IsNotEmptyOrNull() ? x.PLot == item.PLot : false) + && (item.DateCode.IsNotEmptyOrNull() ? x.DateCode == item.PLot : false && x.PalletCode == assignOutStocks[j].PalletCode)).Sum(x => x.AssignQuantity);//鍑哄簱璇︽儏宸插垎閰嶆暟閲� + float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); + if (palletAssignQuantity < palletOutboundQuantity)//濡傛灉鍑哄簱璇︽儏宸插垎閰嶆暟閲忓皬浜庢墭鐩樺凡鍒嗛厤鏁伴噺锛屽垯鍙互缁х画娣诲姞璇ユ墭鐩樺嚭搴撲俊鎭� + { + float orderDetailNeedQuantity = details[i].QtyPcs - detailAssignQuantity; + if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity) + { + details[i].LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity; + Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity); + outProStockInfos.Add(outStockLockInfo); + } + else + { + Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], details[i].QtyPcs - details[i].LockQtyPcs); + outProStockInfos.Add(outStockLockInfo); + details[i].LockQtyPcs = details[i].QtyPcs; + break; + } + + } + } + } + List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList(); + + locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr)); + + } + return (outStocks, OutOrderDetails, outProStockInfos, locationInfos); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs" index 0d83d13..9861ce4 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs" @@ -1,9 +1,11 @@ -锘縰sing System; +锘縰sing Microsoft.IdentityModel.Tokens; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core.BaseRepository; +using WIDESEA_Core.Helper; using WIDESEA_IStockRepository; using WIDESEA_Model.Models; @@ -14,5 +16,24 @@ public ProStockInfoRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) { } + //鏍规嵁鏄庣粏鏁版嵁鏌ユ壘鍙敤搴撳瓨搴撳瓨 + public List<Dt_ProStockInfo> GetProStocks(Dt_ProOutOrderDetail proOutOrderDetail,List<string> locationInfos) + { + List<Dt_ProStockInfo>? proStockInfos = null; + bool isCanLot= !string.IsNullOrEmpty(proOutOrderDetail.PLot); + bool isCanDate = !string.IsNullOrEmpty(proOutOrderDetail.DateCode); + proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Contains(x.LocationCode)) + .Includes(x => x.proStockInfoDetails) + .Where(x => x.proStockInfoDetails + .Any(x => x.SaleOrder == proOutOrderDetail.SaleOrder + && x.ProductCode == proOutOrderDetail.PCode + && x.ProductVersion == proOutOrderDetail.PVer + && (isCanLot ? x.LotNumber == proOutOrderDetail.PLot : true) + && (isCanDate ? x.DateCode == proOutOrderDetail.DateCode : true) + )) + .ToList(); + proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault().DateCode).ToList(); + return proStockInfos; + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" index fc4b072..e7b3f37 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs" @@ -5,6 +5,7 @@ using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseServices; +using WIDESEA_IBasicRepository; using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_Model.Models; @@ -14,11 +15,16 @@ public partial class ProStockInfoService : ServiceBase<Dt_ProStockInfo, IProStockInfoRepository>, IProStockInfoService { public IProStockInfoRepository Repository => BaseDal; - public IStockRepository _stockRepository; - public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository) : base(BaseDal) + private readonly IStockRepository _stockRepository; + private readonly IBasicRepository _basicRepository; + public ProStockInfoService(IProStockInfoRepository BaseDal,IStockRepository stockRepository, IBasicRepository basicRepository) : base(BaseDal) { _stockRepository = stockRepository; + _basicRepository = basicRepository; } + /// <summary> + /// 鏍规嵁澶栧寘淇℃伅瑙g粦鍐呭寘淇℃伅 + /// </summary> public WebResponseContent UnBindStock(List<Dt_ProStockInfoDetail> proStockInfoDetails) { WebResponseContent content = new WebResponseContent(); @@ -37,5 +43,94 @@ } return content; } + //鏌ユ壘鍙敤搴撳瓨 + public List<Dt_ProStockInfo> GetUseableStocks(int warehoseId,Dt_ProOutOrderDetail proOutOrderDetail) + { + List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId); + return BaseDal.GetProStocks(proOutOrderDetail,locationCodes); + } + /// <summary> + /// 鑾峰彇鍑哄簱搴撳瓨 + /// </summary> + public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail outOrderDetail, float needQuantity, out float residueQuantity) + { + List<Dt_ProStockInfo> assignOutStocks =new List<Dt_ProStockInfo>(); + float stockTotalQuantity = stockInfos.Select(x => x.proStockInfoDetails.Sum(v => v.StockPcsQty - v.OutboundQuantity)).Sum(x => x); + //stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); + if (stockTotalQuantity >= needQuantity)//搴撳瓨澶� + { + int index = 0; + while (needQuantity > 0) + { + Dt_ProStockInfo stockInfo = stockInfos[index]; + float useableStockQuantity = stockInfo.proStockInfoDetails + .Where(x => x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode==outOrderDetail.PCode && x.ProductVersion==outOrderDetail.PVer) + .Sum(x => x.StockPcsQty - x.OutboundQuantity); + if (useableStockQuantity < needQuantity) + { + stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); + needQuantity -= useableStockQuantity; + } + else + { + stockInfo.proStockInfoDetails.ForEach(x => + { + if ((x.StockPcsQty > x.OutboundQuantity) && x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer) + { + if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) + { + x.OutboundQuantity += needQuantity; + needQuantity = 0; + } + else + { + needQuantity -= (x.StockPcsQty - x.OutboundQuantity); + x.OutboundQuantity = x.StockPcsQty; + } + } + }); + } + assignOutStocks.Add(stockInfo); + index++; + } + } + else + { + for (int i = 0; i < stockInfos.Count; i++) + { + Dt_ProStockInfo stockInfo = stockInfos[i]; + float useableStockQuantity = stockInfo.proStockInfoDetails + .Where(x => x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer) + .Sum(x => x.StockPcsQty - x.OutboundQuantity); + if (useableStockQuantity < needQuantity) + { + stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); + needQuantity -= useableStockQuantity; + } + else + { + stockInfo.proStockInfoDetails.ForEach(x => + { + if (x.StockPcsQty > x.OutboundQuantity && x.SaleOrder == outOrderDetail.SaleOrder && x.ProductCode == outOrderDetail.PCode && x.ProductVersion == outOrderDetail.PVer) + { + if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) + { + x.OutboundQuantity += needQuantity; + needQuantity = 0; + } + else + { + needQuantity -= (x.StockPcsQty - x.OutboundQuantity); + x.OutboundQuantity = x.StockPcsQty; + } + } + }); + } + assignOutStocks.Add(stockInfo); + } + } + residueQuantity = needQuantity; + return assignOutStocks; + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs" index 5747dac..d97d042 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockSerivce.cs" @@ -15,13 +15,21 @@ public IStockInfoDetail_HtyService StockInfoDetail_HtyService { get; } public IStockInfo_HtyService StockInfo_HtyService { get; } + public IProStockInfoService ProStockInfoService { get; } + public IProStockInfoDetailService ProStockInfoDetailService { get; } + public IProStockInfo_HtyService ProStockInfo_HtyService { get; } + public IProStockInfoDetail_HtyService ProStockInfoDetail_HtyService { get; } - public StockSerivce(IStockInfoDetailService stockInfoDetailService, IStockInfoService stockInfoService, IStockInfoDetail_HtyService stockInfoDetail_HtyService, IStockInfo_HtyService stockInfo_HtyService) + public StockSerivce(IStockInfoDetailService stockInfoDetailService, IStockInfoService stockInfoService, IStockInfoDetail_HtyService stockInfoDetail_HtyService, IStockInfo_HtyService stockInfo_HtyService, IProStockInfoService proStockInfoService,IProStockInfoDetailService proStockInfoDetailService,IProStockInfo_HtyService proStockInfo_HtyService,IProStockInfoDetail_HtyService proStockInfoDetail_HtyService) { StockInfoDetailService = stockInfoDetailService; StockInfoService = stockInfoService; StockInfoDetail_HtyService = stockInfoDetail_HtyService; StockInfo_HtyService = stockInfo_HtyService; + ProStockInfoService= proStockInfoService; + ProStockInfoDetailService= proStockInfoDetailService; + ProStockInfo_HtyService = proStockInfo_HtyService; + ProStockInfoDetail_HtyService = proStockInfoDetail_HtyService; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" index cc46e19..f4369ea 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" @@ -442,6 +442,7 @@ tasks.ForEach(x => { x.TargetAddress = model.Line; + x.OrderNo = mesOutboundOrder.TaskNo; }); _unitOfWorkManage.BeginTran(); @@ -501,7 +502,7 @@ EffectiveDate = model.ExpirationDate, MaterielCode = model.MaterialCode, InboundOrderRowNo = stockInfoDetail_Hty?.InboundOrderRowNo ?? 0, - MaterielName = model.MaterialCode, + MaterielName = stockInfoDetail_Hty.MaterielName, ProductionDate = model.ProductionDate, OrderNo = stockInfoDetail_Hty?.OrderNo ?? "", OutboundQuantity = 0, @@ -1064,6 +1065,7 @@ } return content; } + //澶栧寘淇℃伅鎺ユ敹 public MesResponseContent BoxStockin(MesBoxInfoModel boxInfoModel) { MesResponseContent content = new MesResponseContent(); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" index 0c76b61..3e6d678 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" @@ -226,7 +226,11 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅"); } - + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + if (warehouse.WarehouseCode==WarehouseEnum.HA71.ToString()) + { + return InProductCompleted(task); + } 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) { @@ -266,10 +270,8 @@ LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); - + stockInfo.LocationCode = locationInfo.LocationCode; - #region 绌虹鍏ュ簱/鎷i�夊洖搴�/鐢熶骇閫�鏂� if (task.TaskType == TaskTypeEnum.InEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.InPick.ObjToInt() || (task.TaskType == TaskTypeEnum.ProductionReturn.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())) { @@ -369,7 +371,7 @@ _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details); _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted); _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, stockInfo.Details.Sum(x => x.StockQuantity), stockInfo.Details.Sum(x => x.StockQuantity), StockChangeTypeEnum.Inbound, taskNum); - if (inboundOrder != null) + if (inboundOrder != null && inboundOrderDetail != null) { _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail); @@ -389,7 +391,7 @@ } else { - _inboundOrderService.FeedbackInboundOrder(inboundOrder); + _inboundOrderService.FeedbackInboundOrder(inboundOrder.Id); } } return WebResponseContent.Instance.OK(); @@ -400,7 +402,70 @@ return WebResponseContent.Instance.Error(ex.Message); } } - + /// <summary> + /// 鎴愬搧浠撲换鍔″畬鎴� + /// </summary> + public WebResponseContent InProductCompleted(Dt_Task task) + { + WebResponseContent content=new WebResponseContent(); + try + { + //鑾峰彇缁勭洏淇℃伅 + Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First(); + if (proStockInfo == null) + { + return content.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅"); + } + Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (locationInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒扮洰鏍囪揣浣嶄俊鎭�"); + } + if (locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; + locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + proStockInfo.LocationCode = locationInfo.LocationCode; + //鑾峰彇MES鍏ュ簱鍗曟嵁 + Dt_MesProInOrder mesProInOrder = _inboundRepository.MesProInOrderRepository.Db.Queryable<Dt_MesProInOrder>().Where(x => x.BatchNo == task.PalletCode).Includes(x => x.Details).First(); + if (mesProInOrder == null || mesProInOrder.Details == null || mesProInOrder.Details.Count <= 0) + { + return content.Error("鏈壘鍒癕ES鍐呭寘鍗曟嵁淇℃伅"); + } + //杩涜鍗曟嵁澶勭悊 + mesProInOrder.MesProStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt(); + mesProInOrder.Details.ForEach(x => + { + x.OverInQuantity = x.OKPCSQTY; + }); + proStockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + proStockInfo.proStockInfoDetails.ForEach(x => + { + x.ProOutDetailStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + }); + //鏇存柊鍏ュ簱鐘舵�� + task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId); + _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); + _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails); + _inboundRepository.MesProInOrderRepository.UpdateData(mesProInOrder); + _inboundRepository.MesProInOrderDetailRepository.UpdateData(mesProInOrder.Details); + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted); + _unitOfWorkManage.CommitTran(); + //涓婁紶ERP + _inboundOrderService.FeedbackProIn(mesProInOrder); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content.OK(); + } /// <summary> /// 鍑哄簱浠诲姟瀹屾垚 /// </summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" index b20f957..cf866ab 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" @@ -94,6 +94,10 @@ { string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? ""; inboundOrder =_inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()); + if (inboundOrder!=null) + { + newTask.OrderNo = inboundOrder.InboundOrderNo; + } } if (inboundOrder != null) @@ -101,10 +105,12 @@ if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt()) { newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt(); + newTask.OrderNo = inboundOrder.InboundOrderNo; } else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) { newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt(); + newTask.OrderNo = inboundOrder.InboundOrderNo; } } if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" index ef6aeb1..d130c64 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" @@ -78,36 +78,184 @@ /// <summary> /// 鐢熸垚鎴愬搧鍑哄簱浠诲姟 /// </summary> - /// <param name="Id">鍑哄簱璁㈠崟ID</param> + /// <param name="ProOutNo">鍑哄簱璁㈠崟鍙�</param> /// <param name="StationCode">绔欏彴鍦板潃</param> /// <returns></returns> - public WebResponseContent OutProductTask(int Id,string StationCode) + public WebResponseContent OutProductTask(string ProOutNo, string StationCode) { WebResponseContent content = new WebResponseContent(); try { + //鑾峰彇鎴愬搧鍑哄簱璁㈠崟 + Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First(); + if (proOutOrder==null) + { + return content.Error("鍑哄簱璁㈠崟涓嶅瓨鍦�"); + } + List<Dt_Task> tasks = new List<Dt_Task>(); + List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>(); + List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); + List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>(); + List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>(); + List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>(); (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) result = - OutProductTaskDataHandle(Id, StationCode); + OutProductTaskDataHandle(proOutOrder); + if (result.Item2 != null && result.Item2.Count > 0) + { + proStockInfos.AddRange(result.Item2); + } + if (result.Item3 != null && result.Item3.Count > 0) + { + proOutOrderDetails.AddRange(result.Item3); + } + if (result.Item4 != null && result.Item4.Count > 0) + { + outProStockInfos.AddRange(result.Item4); + } + if (result.Item5 != null && result.Item5.Count > 0) + { + locationInfos.AddRange(result.Item5); + } + if (result.Item1 != null && result.Item1.Count > 0) + { + //鏇存柊鍑哄簱鐩殑浣嶇疆 + result.Item1.ForEach(x => + { + x.TargetAddress = StationCode; + }); + tasks.AddRange(result.Item1); + } + //澶勭悊鍑哄簱鏁版嵁 + content = GenerateOutboundTaskDataUpdate(tasks, proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos); } catch (Exception ex) { + _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; + } + public WebResponseContent GenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_ProStockInfo>? proStockInfos = null, List<Dt_ProOutOrderDetail>? proOutOrderDetails = null, List<Dt_OutProStockInfo>? outProStockInfos = null, List<Dt_LocationInfo>? locationInfos = null) + { + try + { + _unitOfWorkManage.BeginTran(); + + BaseDal.AddData(tasks); + if (proStockInfos != null && proStockInfos.Count > 0 && proOutOrderDetails != null && proOutOrderDetails.Count > 0 && outProStockInfos != null && outProStockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) + { + proStockInfos.ForEach(x => + { + x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + }); + WebResponseContent content = _outboundService.ProOutOrderDetailService.LockOutboundStockDataUpdate(proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos, tasks: tasks); + + if (!content.Status) + { + _unitOfWorkManage.RollbackTran(); + return content; + } + } + else if (proOutOrderDetails != null && proOutOrderDetails.Count > 0) + { + proOutOrderDetails.ForEach(x => + { + x.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + }); + + _outboundService.ProOutOrderDetailService.Repository.UpdateData(proOutOrderDetails); + } + _unitOfWorkManage.CommitTran(); + PushTasksToWCS(tasks); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); + } + } /// <summary> /// 澶勭悊鎴愬搧鍑哄簱鏁版嵁 /// </summary> /// <returns></returns> - public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProductTaskDataHandle(int Id, string StationCode) + public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProductTaskDataHandle(Dt_ProOutOrder proOutOrder) { List<Dt_Task> tasks = new List<Dt_Task>(); List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>(); List<Dt_OutProStockInfo> outProStockInfos=new List<Dt_OutProStockInfo>(); List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>(); + //鍒嗛厤搴撳瓨 + (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) result = _outboundService.ProOutOrderDetailService.AssignProStockOut(proOutOrder.WarehouseId, proOutOrder); + if (result.Item1!=null&&result.Item1.Count>0) + { + TaskTypeEnum typeEnum = proOutOrder.ProOrderType switch + { + (int)OutProTypeEnum.ProOut => TaskTypeEnum.OutProduct, + (int)OutProTypeEnum.SendProOut => TaskTypeEnum.OutSendProduct, + _ => new TaskTypeEnum() + }; + tasks = GetTasks(result.Item1, typeEnum); + result.Item2.ForEach(x => + { + x.ProOrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + }); + result.Item3.ForEach(x => + { + x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(); + }); + proStockInfos = result.Item1; + proOutOrderDetails = result.Item2; + outProStockInfos = result.Item3; + locationInfos = result.Item4; + } + else + { + throw new Exception("鏃犲彲鍒嗛厤搴撳瓨"); + } return (tasks, proStockInfos, proOutOrderDetails, outProStockInfos, locationInfos); + } + /// <summary> + /// 鐢熸垚浠诲姟 + /// </summary> + /// <param name="stockInfos"></param> + /// <param name="taskType"></param> + /// <returns></returns> + public List<Dt_Task> GetTasks(List<Dt_ProStockInfo> stockInfos, TaskTypeEnum taskType) + { + List<Dt_Task> tasks = new List<Dt_Task>(); + for (int i = 0; i < stockInfos.Count; i++) + { + Dt_ProStockInfo stockInfo = stockInfos[i]; + + if (stockInfo != null) + { + Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode); + if (!tasks.Exists(x => x.PalletCode == stockInfo.PalletCode)) + { + Dt_Task task = new() + { + CurrentAddress = stockInfo.LocationCode, + Grade = 0, + PalletCode = stockInfo.PalletCode, + NextAddress = "", + Roadway = locationInfo.RoadwayNo, + SourceAddress = stockInfo.LocationCode, + TargetAddress = "", + TaskStatus = TaskStatusEnum.New.ObjToInt(), + TaskType = taskType.ObjToInt(), + TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), + PalletType = stockInfo.PalletType, + WarehouseId = stockInfo.WarehouseId, + }; + tasks.Add(task); + } + } + } + return tasks; } /// <summary> /// 搴撳瓨鏁版嵁杞嚭搴撲换鍔� @@ -254,6 +402,10 @@ _ =>new TaskTypeEnum() }; tasks = GetTasks(result.Item1, typeEnum); + tasks.ForEach(x => + { + x.OrderNo = outboundOrder.UpperOrderNo; + }); result.Item2.ForEach(x => { x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" index d147c0e..6bb636a 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs" @@ -84,7 +84,16 @@ { return Service.MaterielGroup(saveModel); } - + /// <summary> + /// 鏇存嵁鍏ュ簱鍗曞彿ID涓婁紶ERP + /// </summary> + /// <param name="inboundOrderId">鍏ュ簱鍗曞彿Id</param> + /// <returns></returns> + [HttpPost, HttpGet, Route("FeedbackInboundOrder")] + public WebResponseContent FeedbackInboundOrder(int inboundOrderId) + { + return Service.FeedbackInboundOrder(inboundOrderId); + } ///// <summary> ///// 鍏ュ簱瀹屾垚鍚庡洖浼燛RP ///// </summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs" index dd6e86c..f5c9e72 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutStockLockInfoController.cs" @@ -42,7 +42,17 @@ [HttpPost, HttpGet, Route("GetByOrderDetailId"), AllowAnonymous] public List<Dt_OutStockLockInfo> GetByOrderDetailId(int orderDetailId) { - return Service.GetByOrderDetailId(orderDetailId,null); + return Service.GetByOrderDetailId(orderDetailId, null); + } + /// <summary> + /// 鑾峰彇Mes鍑哄簱璇︽儏 + /// </summary> + /// <param name="taskNo">Mes浠诲姟鍗曞彿</param> + /// <returns></returns> + [HttpPost, HttpGet, Route("GetByMesOrderDetail"), AllowAnonymous] + public List<Dt_OutStockLockInfo> GetByMesOrderDetail(string taskNo) + { + return Service.GetByMesOrderDetail(taskNo); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" index f814880..e381dba 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" @@ -176,6 +176,17 @@ { return Service.GenerateOutboundTasks(keys); } + /// <summary> + /// 鐢熸垚鎴愬搧鍑哄簱浠诲姟 + /// </summary> + /// <param name="ProOutNo">鍑哄簱璁㈠崟鍙�</param> + /// <param name="StationCode">绔欏彴鍦板潃</param> + /// <returns></returns> + [HttpPost, HttpGet, Route("OutProductTask"), AllowAnonymous] + public WebResponseContent OutProductTask(string ProOutNo, string StationCode) + { + return Service.OutProductTask(ProOutNo, StationCode); + } ///// <summary> ///// 鐢熸垚MESPP浠撳ぇ鍗峰嚭搴撲换鍔� ///// </summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs" index bfcb11d..0e1fe8e 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Filter/CustomProfile.cs" @@ -38,7 +38,7 @@ CreateMap<Dt_Task, WMSTaskDTO>(); CreateMap<MESBagDetail, Dt_MesProInOrderDetail>().ForMember(x => x.OverInQuantity, b => b.MapFrom(b => 0)); CreateMap<ErpProOutOrderDetailds, Dt_ProOutOrderDetail>().ForMember(x => x.ProOrderDetailStatus, b => b.MapFrom(b => 0)).ForMember(x => x.OverQtyPcs, b => b.MapFrom(b => 0)); - CreateMap<Dt_MesProInOrderDetail, Dt_ProStockInfoDetail>().ForMember(x => x.ProOutDetailStatus, b => b.MapFrom(b => StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())).ForMember(x => x.OutboundQuantity, b => b.MapFrom(b => 0)); + CreateMap<Dt_MesProInOrderDetail, Dt_ProStockInfoDetail>().ForMember(x => x.ProOutDetailStatus, b => b.MapFrom(b => StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt())).ForMember(x => x.OutboundQuantity, b => b.MapFrom(b => 0)).ForMember(x => x.StockPcsQty, b => b.MapFrom(b => b.OKPCSQTY)); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" index 58106ac..bf7bb13 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" @@ -14,6 +14,7 @@ //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + // "ConnectionString": "Data Source=10.30.4.92;Initial Catalog=TESTWMSCP_WMS;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //鏃MS鏁版嵁搴撹繛鎺� //"TeConnectionString": "Data Source=10.30.4.92;Initial Catalog=TeChuang;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //璺ㄥ煙 -- Gitblit v1.9.3