From d8db1698c125618c1b5f62b009204ddc5d4eed5a Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期三, 19 三月 2025 20:34:08 +0800 Subject: [PATCH] 成品代码更新.... --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs | 41 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/91b1a3a3-e3b0-4830-964d-9ab1bdf01bb5.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs | 4 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs | 7 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d9a4ac64-ff06-4973-a542-ee01830747ad.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProStockCheckModel.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs | 38 + 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs | 315 +++++++-- 代码管理/WMS/WIDESEA_WMSClient/src/views/taskinfo/task.vue | 11 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockRepository/IProStockInfoRepository.cs | 4 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs | 5 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/efb438a8-33f2-4f81-bdb3-e2a568ef889e.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs | 5 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesProductOutBound.cs | 61 ++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs | 117 ++++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderDetailService.cs | 2 代码管理/WMS/WIDESEA_WMSClient/src/views/taskinfo/task_hty.vue | 11 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs | 1 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IMesRworkOutboundOrderService.cs | 12 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs | 67 ++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs | 15 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/RworkTaskModel.cs | 13 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/干膜仓/StackerCraneJob_GM.cs | 4 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs | 158 +++++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProOutLingOrder.cs | 71 ++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs | 166 +++++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs | 20 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs | 18 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutProStockInfoService.cs | 28 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs | 57 + 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs | 23 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs | 13 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs | 3 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs | 14 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderService.cs | 5 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs | 25 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs | 3 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs | 9 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 121 ++++ 代码管理/WMS/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs | 80 ++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs | 8 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs | 54 + /dev/null | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs | 3 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs | 9 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/03235358-3ae5-4103-a845-c64fa06f092b.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IProStockInfoService.cs | 17 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs | 13 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs | 35 + 51 files changed, 1,516 insertions(+), 180 deletions(-) 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 091a4cb..41a8b43 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,11 +62,16 @@ [Description("鎴愬搧鍑哄簱")] OutProduct = 230, /// <summary> - /// 鎴愬搧瀵勫敭杞粨 + /// 鎴愬搧瀵勫敭鍑哄簱 /// </summary> - [Description("鎴愬搧瀵勫敭杞粨")] + [Description("鎴愬搧瀵勫敭鍑哄簱")] OutSendProduct = 240, /// <summary> + /// 鎴愬搧MES鍑哄簱/鎻愬簱 + /// </summary> + [Description("鎴愬搧MES鍑哄簱/鎻愬簱")] + OutMesRworkProduct = 250, + /// <summary> /// 閲囪喘鍏ュ簱 /// </summary> [Description("閲囪喘鍏ュ簱")] 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 97880f7..90435af 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" @@ -242,7 +242,7 @@ _taskService.UpdateTaskExceptionMessage(task.TaskNum, $"鏈壘鍒癢MS绉诲簱鍒ゆ柇鎺ュ彛"); return null; } - HttpHelper.Post($"{url}?taskNum={task.TaskNum}&locationCode={task.NextAddress}", "");//todo 璋冪敤WMS浠诲姟瀹屾垚鏂规硶 + //HttpHelper.Post($"{url}?taskNum={task.TaskNum}&locationCode={task.NextAddress}", "");//todo 璋冪敤WMS浠诲姟瀹屾垚鏂规硶 } return task; @@ -262,7 +262,7 @@ if (device != null) { OtherDevice client = (OtherDevice)device; - if (!client.GetValue<R_ConveyorLineDB, bool>(R_ConveyorLineDB.Goods, stationManger.StationCode))//鍑哄簱绔欏彴鏈鍗犵敤 + if (client.GetValue<R_ConveyorLineDB, bool>(R_ConveyorLineDB.Goods, stationManger.StationCode))//鍑哄簱绔欏彴鏈鍗犵敤 { task.NextAddress = stationManger.StackerCraneStationCode; _taskRepository.UpdateData(task); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js" index 116fd46..c111053 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/basic/materielCodeInfo.js" @@ -162,7 +162,11 @@ let year = date.getFullYear(); let month = String(date.getMonth() + 1).padStart(2, "0"); let day = String(date.getDate()).padStart(2, "0"); - this.editFormFields.lotNo = year + month + day; + let hour= String(date.getHours()).padStart(2, "0"); + let minute= String(date.getMinutes()).padStart(2, "0"); + let second= String(date.getSeconds()).padStart(2, "0"); + //灏唝ear鎴彇鍚庝袱浣� + this.editFormFields.lotNo = (year.toString().substr(-2)) + month+day + hour + minute+second; this.editFormFields.productionDate = year + "-" + month + "-" + day; this.editFormFields.effectiveDate = year + 2 + "-" + month + "-" + day; } 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 a9e595a..b18d604 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" @@ -57,6 +57,9 @@ { title: "鐩爣鍦板潃", field: "targetAddress", type: "like" }, { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" }, ], + [ + { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],} + ], ]); const columns = ref([ { @@ -77,6 +80,14 @@ align: "left", }, { + field: "warehouseId", + title: "鎵�灞炰粨搴�", + type: "string", + width: 100, + align: "left", + bind: { key: "warehouses", data: [] }, + }, + { field: "palletCode", title: "鎵樼洏缂栧彿", type: "string", 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 c4538b3..6ab9ba1 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" @@ -57,6 +57,9 @@ { title: "鐩爣鍦板潃", field: "targetAddress", type: "like" }, { title: "鍒涘缓鏃堕棿", field: "createDate", type: "datetime" }, ], + [ + { title: "鎵�灞炰粨搴�", field: "warehouseId",type: "selectList",dataKey: "warehouses",data: [],} + ], ]); const columns = ref([ { @@ -77,6 +80,14 @@ align: "left", }, { + field: "warehouseId", + title: "鎵�灞炰粨搴�", + type: "string", + width: 100, + align: "left", + bind: { key: "warehouses", data: [] }, + }, + { field: "palletCode", title: "鎵樼洏缂栧彿", type: "string", diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/03235358-3ae5-4103-a845-c64fa06f092b.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/03235358-3ae5-4103-a845-c64fa06f092b.vsidx" new file mode 100644 index 0000000..1058cb6 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/03235358-3ae5-4103-a845-c64fa06f092b.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/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" deleted file mode 100644 index 006a14c..0000000 --- "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" +++ /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" deleted file mode 100644 index 9a610ed..0000000 --- "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" +++ /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/91b1a3a3-e3b0-4830-964d-9ab1bdf01bb5.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/91b1a3a3-e3b0-4830-964d-9ab1bdf01bb5.vsidx" new file mode 100644 index 0000000..dd31b13 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/91b1a3a3-e3b0-4830-964d-9ab1bdf01bb5.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" deleted file mode 100644 index 25062a7..0000000 --- "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" +++ /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/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" deleted file mode 100644 index c7983b0..0000000 --- "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" +++ /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/d9a4ac64-ff06-4973-a542-ee01830747ad.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d9a4ac64-ff06-4973-a542-ee01830747ad.vsidx" new file mode 100644 index 0000000..1ae4842 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/d9a4ac64-ff06-4973-a542-ee01830747ad.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/efb438a8-33f2-4f81-bdb3-e2a568ef889e.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/efb438a8-33f2-4f81-bdb3-e2a568ef889e.vsidx" new file mode 100644 index 0000000..671e5a1 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/efb438a8-33f2-4f81-bdb3-e2a568ef889e.vsidx" Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs" index d3c9037..3d7293f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicRepository/BasicRepository.cs" @@ -26,13 +26,15 @@ public IWarehouseRepository WarehouseRepository { get; } public IPalletTypeInfoRepository PalletTypeInfoRepository { get; } + public ICustomerInfoRepository CustomerInfoRepository { get; } - public BasicRepository(ILocationInfoRepository locationInfoRepository, IMaterielInfoRepository materielInfoRepository, IWarehouseRepository warehouseRepository, IPalletTypeInfoRepository palletTypeInfoRepository) + public BasicRepository(ILocationInfoRepository locationInfoRepository, IMaterielInfoRepository materielInfoRepository, IWarehouseRepository warehouseRepository, IPalletTypeInfoRepository palletTypeInfoRepository, ICustomerInfoRepository customerInfoRepository) { LocationInfoRepository = locationInfoRepository; MaterielInfoRepository = materielInfoRepository; WarehouseRepository = warehouseRepository; PalletTypeInfoRepository = palletTypeInfoRepository; + CustomerInfoRepository = customerInfoRepository; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs" index affe4dd..25c032c 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/PalletCodeInfoService.cs" @@ -104,11 +104,10 @@ List<Dt_PalletCodeInfo> palletCodeInfos = new List<Dt_PalletCodeInfo>(); int serialNo = 0; DateTime now = DateTime.Now; - Dt_PalletCodeInfo palletCodeInfo = BaseDal.QueryFirst(x => x.WarehouseId == warehouseId && x.PalletTypeId==palletTypeId, new Dictionary<string, OrderByType> { { nameof(Dt_PalletCodeInfo.SerialNo), OrderByType.Desc } }); + Dt_PalletCodeInfo palletCodeInfo = BaseDal.QueryFirst(x => x.WarehouseId == warehouseId && x.PalletTypeId==palletTypeId && x.CreateDate.Year == now.Year && x.CreateDate.Month == now.Month && x.CreateDate.Day == now.Day, new Dictionary<string, OrderByType> { { nameof(Dt_PalletCodeInfo.SerialNo), OrderByType.Desc } }); if (palletCodeInfo != null && palletCodeInfo.CreateDate.Year == now.Year && palletCodeInfo.CreateDate.Month == now.Month && palletCodeInfo.CreateDate.Day == now.Day) { serialNo = palletCodeInfo.SerialNo + 1; - } else { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" index c7850d6..8cc1abd 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/APIEnum/APIEnum.cs" @@ -41,6 +41,11 @@ /// MES鍚屾鎴愬搧鍑哄簱 /// </summary> [Description("MES鍚屾鎴愬搧鍑哄簱")] - WMS_MES_ShipmentOrderSync + WMS_MES_ShipmentOrderSync, + /// <summary> + /// 搴撳瓨鏉垮嚭搴� + /// </summary> + [Description("搴撳瓨鏉垮嚭搴�")] + WMS_MES_ProductOutBound } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs" index 31f61eb..fc74d28 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/MesOutboundOrderType.cs" @@ -36,4 +36,24 @@ [Description("鎵嬪姩鍩烘澘鍑哄簱鎷i��")] HandSubstrateOutPick = 400, } + public enum MesRworkOutTypeEnum + { + /// <summary> + /// 瀹㈤�� + /// </summary> + [Description("瀹㈤��")] + ReturnGuest = 1, + + /// <summary> + /// 搴撳瓨涓嶈壇 + /// </summary> + [Description("搴撳瓨涓嶈壇")] + OutOfStock = 2, + + /// <summary> + /// 浣欐暟鎻愪粨 + /// </summary> + [Description("浣欐暟鎻愪粨")] + Withdrawn = 3 + } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs" index 993b657..0d0055a 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/StockEnum/StockStatusEmun.cs" @@ -53,6 +53,9 @@ [Description("鎷i�夊畬鎴�")] 鎷i�夊畬鎴� =14, + [Description("骞冲簱鍏ュ簱瀹屾垚")] + 骞冲簱鍏ュ簱瀹屾垚 = 15, + [Description("閫�搴�")] MES閫�搴� = 21, 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 7307542..88cf381 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" @@ -65,11 +65,16 @@ [Description("鎴愬搧鍑哄簱")] OutProduct = 230, /// <summary> - /// 鎴愬搧瀵勫敭杞粨 + /// 鎴愬搧瀵勫敭鍑哄簱 /// </summary> - [Description("鎴愬搧瀵勫敭杞粨")] + [Description("鎴愬搧瀵勫敭鍑哄簱")] OutSendProduct = 240, /// <summary> + /// 鎴愬搧MES鍑哄簱/鎻愬簱 + /// </summary> + [Description("鎴愬搧MES鍑哄簱/鎻愬簱")] + OutMesRworkProduct =250, + /// <summary> /// 閲囪喘鍏ュ簱 /// </summary> [Description("閲囪喘鍏ュ簱")] diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" index 7685dce..70dabe9 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/WareHouseEnum/WarehouseEnum.cs" @@ -73,4 +73,17 @@ [Description("娌瑰ⅷ浠�")] HA153 } + public enum WarehouseTypEnum + { + /// <summary> + /// 鍘熸枡 + /// </summary> + [Description("鍘熸枡")] + 鍘熸枡, + /// <summary> + /// 鎴愬搧 + /// </summary> + [Description("鎴愬搧")] + 鎴愬搧, + } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs" index 7edb3d3..1af5034 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs" @@ -60,5 +60,10 @@ /// </summary> [Description("鎴愬搧鍏ュ簱鍗曞彿缂栫爜瑙勫垯")] ProInCodeRule, + /// <summary> + /// 鎴愬搧鍑哄簱鍗曞彿缂栫爜瑙勫垯 + /// </summary> + [Description("鎴愬搧鍑哄簱鍗曞彿缂栫爜瑙勫垯")] + ProOutCOdeRule } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProOutLingOrder.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProOutLingOrder.cs" new file mode 100644 index 0000000..a9a2c99 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpProOutLingOrder.cs" @@ -0,0 +1,71 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEA_DTO.ERP +{ + /// <summary> + /// 鎴愬搧棰嗘枡鍑哄簱 + /// </summary> + public class ErpProOutLingOrder + { + /// <summary> + /// + /// </summary> + public int RowId { get; set; } + /// <summary> + /// + /// </summary> + public string OrderNo { get; set; } + /// <summary> + /// + /// </summary> + public string PCode { get; set; } + /// <summary> + /// + /// </summary> + public string PVer { get; set; } + /// <summary> + /// + /// </summary> + public string PLot { get; set; } + /// <summary> + /// + /// </summary> + public int DateCode { get; set; } + /// <summary> + /// + /// </summary> + public string WaType { get; set; } + /// <summary> + /// + /// </summary> + public float SetQty { get; set; } + /// <summary> + /// + /// </summary> + public float QtyPcs { get; set; } + /// <summary> + /// + /// </summary> + public float XQty { get; set; } + /// <summary> + /// + /// </summary> + public string XSite { get; set; } + /// <summary> + /// + /// </summary> + public string Unit { get; set; } + /// <summary> + /// + /// </summary> + public string OrderDate { get; set; } + /// <summary> + /// + /// </summary> + public string Note { get; set; } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesProductOutBound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesProductOutBound.cs" new file mode 100644 index 0000000..bdff8aa --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/MesProductOutBound.cs" @@ -0,0 +1,61 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEA_DTO.MES +{ + /// <summary> + /// 搴撳瓨鏉垮嚭搴� + /// </summary> + public class MesProductOutBound + { + /// <summary> + /// 浠诲姟鍗曞彿 + /// </summary> + public string TaskNo { get; set; } + /// <summary> + /// 浜у搧缂栫爜 + /// </summary> + public string ProductCode { get; set; } + /// <summary> + /// 浜у搧鐗堟湰 + /// </summary> + public string ProductVersion { get; set; } + /// <summary> + /// 鍛ㄦ湡 + /// </summary> + public string DateCode { get; set; } + /// <summary> + /// 閿�鍞鍗� + /// </summary> + public string SaleOrder { get; set; } + /// <summary> + /// 浠撳簱淇℃伅 + /// </summary> + public List<MesInventoryInfo> InventoryInfo { get; set; } + } + /// <summary> + /// 浠撳簱淇℃伅 + /// </summary> + public class MesInventoryInfo + { + /// <summary> + /// 浠撳簱浠g爜 + /// </summary> + public string Warhouseno { get; set; } + /// <summary> + /// 鍐呭寘鍙� + /// </summary> + public string InternalPackageNumber { get; set; } + /// <summary> + /// SET鏁伴噺 + /// </summary> + public string SetCount { get; set; } + /// <summary> + /// 鍚堟牸PCS鏁伴噺 + /// </summary> + public string EligiblePcsCount { get; set; } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/RworkTaskModel.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/RworkTaskModel.cs" index 07542a5..813b7d3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/RworkTaskModel.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/MES/RworkTaskModel.cs" @@ -3,37 +3,45 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using WIDESEA_Core.Attributes; namespace WIDESEA_DTO.MES { /// <summary> /// 杩斿伐鎻愬簱 /// </summary> + [ModelValidate] public class RworkTaskModel { /// <summary> /// 浠诲姟鍗曞彿 /// </summary> + [PropertyValidate("浠诲姟鍗曞彿", NotNullAndEmpty = true)] public string TaskNo { get; set; } /// <summary> /// 浜у搧缂栫爜 /// </summary> + [PropertyValidate("浜у搧缂栫爜", NotNullAndEmpty = true)] public string ProductCode { get; set; } /// <summary> /// 浜у搧鍚嶇О /// </summary> + [PropertyValidate("浜у搧鍚嶇О", NotNullAndEmpty = true)] public string ProductName { get; set; } /// <summary> /// 浜у搧鐗堟湰 /// </summary> + [PropertyValidate("浜у搧鐗堟湰", NotNullAndEmpty = true)] public string ProductVersion { get; set; } /// <summary> /// 鍛ㄦ湡 /// </summary> + [PropertyValidate("鍛ㄦ湡", NotNullAndEmpty = true)] public string DateCode { get; set; } /// <summary> /// 闇�姹傛暟閲� /// </summary> + [PropertyValidate("闇�姹傛暟閲�", NotNullAndEmpty = true)] public float RequiredQuantity { get; set; } /// <summary> /// 宸ュ巶 @@ -42,10 +50,15 @@ /// <summary> /// 閿�鍞鍗� /// </summary> + [PropertyValidate("閿�鍞鍗�", NotNullAndEmpty = true)] public string SaleOrder { get; set; } /// <summary> /// 搴撳瓨绫诲瀷 + /// 1:瀹㈤��<br/> + /// 2:搴撳瓨涓嶈壇<br/> + /// 3:浣欐暟鎻愪粨<br/> /// </summary> + [PropertyValidate("搴撳瓨绫诲瀷", NotNullAndEmpty = true, Check = new object[] { 1, 2,3 })] public int InventoryType { 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 b909403..266cc08 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" @@ -176,6 +176,63 @@ return response; } /// <summary> + /// 鎴愬搧浠撴鎶ュ簾鍑哄簱鎺ㄩ�丒RP + /// </summary> + /// <param name="checkModel"></param> + /// <returns></returns> + public string InvokeProCheckApi(ERPProductCheckModel checkModel) + { + Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeErpApi.ToString()); + ERPBaseModel<ERPProductCheckModel> model = new ERPBaseModel<ERPProductCheckModel>() + { + Data = checkModel, + Desc = "鎴愬搧妫�楠屽崟", + Type = " toFGIIqcChecked", + SecurityCode = "TeChuang" + }; + string request = JsonConvert.SerializeObject(model, settings); + string response = HttpHelper.Post(apiInfo.ApiAddress, request); + return response; + } + /// <summary> + /// 鎴愬搧瓒呭懆鏈熸姤搴熸帹閫丒RP + /// </summary> + /// <param name="sheetModel"></param> + /// <returns></returns> + public string InvokeProScrapSheetApi(ERPScrapSheetModel sheetModel) + { + Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeErpApi.ToString()); + ERPBaseModel<ERPScrapSheetModel> model = new ERPBaseModel<ERPScrapSheetModel>() + { + Data = sheetModel, + Desc = "鎴愬搧鎶ュ簾鍗�", + Type = " toFGIScrapSheet", + SecurityCode = "TeChuang" + }; + string request = JsonConvert.SerializeObject(model, settings); + string response = HttpHelper.Post(apiInfo.ApiAddress, request); + return response; + } + /// <summary> + /// 鎴愬搧鐩樼偣鐩樿耽/鐩樹簭 + /// </summary> + /// <param name="stockCheckModel"></param> + /// <returns></returns> + public string InvokeProStockCheckApi(ERPProStockCheckModel stockCheckModel) + { + Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeErpApi.ToString()); + ERPBaseModel<ERPProStockCheckModel> model = new ERPBaseModel<ERPProStockCheckModel>() + { + Data = stockCheckModel, + Desc = "鎴愬搧鐩樼偣鍗�", + Type = "toStockCheck", + SecurityCode = "TeChuang" + }; + string request = JsonConvert.SerializeObject(model, settings); + string response = HttpHelper.Post(apiInfo.ApiAddress, request); + return response; + } + /// <summary> /// ERP鐗╂枡鍑哄簱鎺ュ彛璋冪敤 /// </summary> /// <param name="outboundModel"></param> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs" index ddbd68f..5d37476 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs" @@ -57,5 +57,23 @@ /// <param name="inboundModel"></param> /// <returns></returns> string InvokeProInApi(ERPProInboundModel inboundModel); + /// <summary> + /// 鎴愬搧浠撴鎶ュ簾鍑哄簱鎺ㄩ�丒RP + /// </summary> + /// <param name="checkModel"></param> + /// <returns></returns> + string InvokeProCheckApi(ERPProductCheckModel checkModel); + /// <summary> + /// 鎴愬搧瓒呭懆鏈熸姤搴熸帹閫丒Rp + /// </summary> + /// <param name="sheetModel"></param> + /// <returns></returns> + string InvokeProScrapSheetApi(ERPScrapSheetModel sheetModel); + /// <summary> + /// 鎴愬搧鐩樼偣鐩樿耽/鐩樹簭 + /// </summary> + /// <param name="stockCheckModel"></param> + /// <returns></returns> + string InvokeProStockCheckApi(ERPProStockCheckModel stockCheckModel); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPStockCheckModel.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProStockCheckModel.cs" similarity index 98% rename from "\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPStockCheckModel.cs" rename to "\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProStockCheckModel.cs" index 8cb53f0..d5ab707 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPStockCheckModel.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPProStockCheckModel.cs" @@ -9,7 +9,7 @@ /// <summary> /// 鎴愬搧鐩樼偣 /// </summary> - public class ERPStockCheckModel + public class ERPProStockCheckModel { /// <summary> /// 鎿嶄綔绫诲瀷 diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs" index 5be3300..7942ee8 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IBasicRepository/IBasicRepository.cs" @@ -17,6 +17,7 @@ IWarehouseRepository WarehouseRepository { get; } IPalletTypeInfoRepository PalletTypeInfoRepository { get; } + ICustomerInfoRepository CustomerInfoRepository { get; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs" index 7ee6315..9ed3de3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/IOutboundRepository.cs" @@ -16,5 +16,8 @@ IOutStockLockInfoRepository OutboundStockLockInfoRepository { get; } IMesPPCutOutboundOrderRepository MesPPCutOutboundOrderRepository { get; } + IProOutOrderRepository ProOutOrderRepository { get; } + IProOutOrderDetailRepository ProOutOrderDetailRepository { get; } + IMesRworkOutboundOrderRepository RworkOutboundOrderRepository { get; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IMesRworkOutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IMesRworkOutboundOrderService.cs" index f2a6163..23dbd0f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IMesRworkOutboundOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IMesRworkOutboundOrderService.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,15 @@ public interface IMesRworkOutboundOrderService : IService<Dt_MesRworkOutboundOrder> { IMesRworkOutboundOrderRepository Repository { get; } + /// <summary> + /// 鎻愬簱浠诲姟鍒嗛厤搴撳瓨 + /// </summary> + /// <param name="mesOutboundOrder"></param> + /// <returns></returns> + (List<Dt_ProStockInfo>?, Dt_MesRworkOutboundOrder?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>) AssignMesStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrders); + /// <summary> + /// 澶勭悊鍑哄簱鏁版嵁 + /// </summary> + WebResponseContent LockOutboundStockDataUpdate(List<Dt_ProStockInfo> stockInfos, List<Dt_OutProStockInfo> outStockLockInfos, 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_IOutboundService/IOutProStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutProStockInfoService.cs" index 065f01c..eafb1ac 100644 --- "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" @@ -13,5 +13,7 @@ { IOutProStockInfoRepository Repository { get; } Dt_OutProStockInfo GetOutStockLockInfo(Dt_ProOutOrder proOutOrder, Dt_ProOutOrderDetail proOutOrderDetail, Dt_ProStockInfo proStockInfo, float assignQty, int? taskNum = null); + //澶勭悊鎻愬簱鍑哄簱璇︽儏 + Dt_OutProStockInfo GetOutStockLockInfo(Dt_MesRworkOutboundOrder mesOutboundOrder, Dt_ProStockInfo outStock, float assignQuantity, int? taskNum = null); } } 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 20cc88f..b94d169 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" @@ -17,7 +17,7 @@ /// <summary> /// 鍒嗛厤搴撳瓨澶勭悊璐т綅鏁版嵁 /// </summary> - (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(int warehouseId,Dt_ProOutOrder proOutOrder); + (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(List<Dt_ProOutOrderDetail> proOutOrderDetails); /// <summary> /// 鍑哄簱浠诲姟鏁版嵁澶勭悊 /// </summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderService.cs" index 013c7b1..7b521cc 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IProOutOrderService.cs" @@ -19,5 +19,10 @@ /// </summary> /// <returns></returns> WebResponseContent ProductDeliveryOrder(ErpProOutOrderDTO outOrderDTO); + /// <summary> + /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱 + /// </summary> + /// <returns></returns> + WebResponseContent OutProductPK(string[] OutPKCodes, string ProOutNo); } } 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 d86e150..4d8d4c7 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" @@ -14,5 +14,9 @@ /// 鏌ユ壘鍙敤搴撳瓨 /// </summary> List<Dt_ProStockInfo> GetProStocks(Dt_ProOutOrderDetail proOutOrderDetail,List<string> locationInfos); + /// <summary> + /// 鑾峰彇鎴愬搧搴撳瓨 + /// </summary> + List<Dt_ProStockInfo> GetProStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, 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 6d5fbd0..6e082b8 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" @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_IStockRepository; using WIDESEA_Model.Models; @@ -13,6 +14,12 @@ { IProStockInfoRepository Repository { get; } /// <summary> + /// 鏍规嵁澶栧寘淇℃伅瑙g粦鍐呭寘涓庤兌妗嗗簱瀛樹俊鎭� + /// </summary> + /// <param name="proStockInfoDetails"></param> + /// <returns></returns> + WebResponseContent UnBindStock(List<Dt_ProStockInfoDetail> proStockInfoDetails); + /// <summary> /// 鏌ユ壘鍙敤搴撳瓨 /// </summary> List<Dt_ProStockInfo> GetUseableStocks(int warehoseId, Dt_ProOutOrderDetail proOutOrderDetail); @@ -20,5 +27,15 @@ /// 鑾峰彇鍑哄簱搴撳瓨 /// </summary> List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_ProOutOrderDetail outOrderDetail, float needQuantity, out float residueQuantity); + + /// <summary> + /// MES鎻愬簱鍙敤搴撳瓨 + /// </summary> + /// <returns></returns> + public List<Dt_ProStockInfo> GetUseableStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder); + /// <summary> + /// 鑾峰彇MES鎻愬簱搴撳瓨 + /// </summary> + List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, float needQuantity, out float residueQuantity); } } 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 0e64ce4..18a1993 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" @@ -15,6 +15,7 @@ *----------------------------------------------------------------*/ #endregion << 鐗� 鏈� 娉� 閲� >> +using Microsoft.AspNetCore.Mvc; using SqlSugar; using System; using System.Collections.Generic; @@ -353,6 +354,8 @@ /// <param name="ProOutNo">鍑哄簱璁㈠崟鍙�</param> /// <param name="StationCode">绔欏彴鍦板潃</param> /// <returns></returns> - WebResponseContent OutProductTask(string ProOutNo, string StationCode); + WebResponseContent OutProductTask(int[] keys, string StationCode); + //搴撳瓨鏉垮嚭搴� + WebResponseContent ProductOutBoundSync(MesProductOutBound model); } } 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 252b4b0..8d1ef05 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" @@ -7,6 +7,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Reflection.Metadata; @@ -690,6 +691,12 @@ return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); } List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); + //楠岃瘉鍒ゆ柇鏃堕棿鏍煎紡 + WebResponseContent IsValidContent = IsValidMCDates(models); + if (!IsValidContent.Status) + { + return content.Error(IsValidContent.Message); + } //闄ら噰璐叆搴撳崟浠ュ鍏朵粬鍏ュ簱鍗曠粍鐩樻暟鎹鐞� if (inboundOrder.OrderType != InOrderTypeEnum.Purchase.ObjToInt()) { @@ -706,7 +713,6 @@ } List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList(); - if (models.Select(x => x.MaterielCode).Distinct().Count() > 1) { return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁"); @@ -864,7 +870,12 @@ { return content.Error($"鐗╂枡涓嶅彲娣锋斁"); } - + //楠岃瘉鍒ゆ柇鏃堕棿鏍煎紡 + WebResponseContent IsValidContent = IsValidMCDates(models); + if (!IsValidContent.Status) + { + return content.Error(IsValidContent.Message); + } string materielCode = models.FirstOrDefault()?.MaterielCode ?? ""; Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode); if (materielInfo == null) @@ -1016,7 +1027,12 @@ { return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁"); } - + //楠岃瘉鍒ゆ柇鏃堕棿鏍煎紡 + WebResponseContent IsValidContent = IsValidMCDates(models); + if (!IsValidContent.Status) + { + return content.Error(IsValidContent.Message); + } string materielCode = models.FirstOrDefault()?.MaterielCode ?? ""; Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode); if (materielInfo == null) @@ -1507,5 +1523,50 @@ } return -1; } + /// <summary> + /// 鍒ゆ柇姝g‘鏃堕棿鏍煎紡 + /// </summary> + public WebResponseContent IsValidMCDates(List<MatSerNumAnalysisModel> analysisModels) + { + string[] effDates = analysisModels.Select(x => x.EffectiveDate).Distinct().ToArray(); + string[] ProDates = analysisModels.Select(x => x.ProductionDate).Distinct().ToArray(); + foreach (string effDate in effDates) + { + string format = "yyyy-MM-dd"; // 鐩爣鏍煎紡 + DateTime parsedDate; + // 瑙f瀽骞堕獙璇佹牸寮� + bool isValid = DateTime.TryParseExact( + effDate, + format, + CultureInfo.InvariantCulture, + DateTimeStyles.None, + out parsedDate + ); + + if (!isValid) + { + return WebResponseContent.Instance.Error("鏍煎紡鏃犳晥鎴栨棩鏈熶笉鍚堟硶"); + } + } + foreach (string ProDate in ProDates) + { + string format = "yyyy-MM-dd"; // 鐩爣鏍煎紡 + DateTime parsedDate; + // 瑙f瀽骞堕獙璇佹牸寮� + bool isValid = DateTime.TryParseExact( + ProDate, + format, + CultureInfo.InvariantCulture, + DateTimeStyles.None, + out parsedDate + ); + + if (!isValid) + { + return WebResponseContent.Instance.Error("鏍煎紡鏃犳晥鎴栨棩鏈熶笉鍚堟硶"); + } + } + 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 ff6f7dc..2fc803e 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" @@ -2,6 +2,7 @@ using AutoMapper; using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,11 +13,13 @@ using WIDESEA_Core.BaseServices; using WIDESEA_Core.CodeConfigEnum; using WIDESEA_Core.Helper; +using WIDESEA_DTO; using WIDESEA_DTO.Basic; using WIDESEA_IBasicRepository; using WIDESEA_ICheckRepository; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; +using WIDESEA_IStockRepository; using WIDESEA_Model.Models; namespace WIDESEA_InboundService @@ -28,14 +31,16 @@ private readonly IInboundRepository _inboundRepository; private readonly IBasicRepository _basicRepository; private readonly ICheckOrderRepository _checkOrderRepository; + private readonly IStockRepository _stockRepository; - public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository) : base(BaseDal) + public ReceiveOrderDetailService(IReceiveOrderDetailRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, ICheckOrderRepository checkOrderRepository, IStockRepository stockRepository) : base(BaseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; _inboundRepository = inboundRepository; _basicRepository = basicRepository; _checkOrderRepository = checkOrderRepository; + _stockRepository = stockRepository; } private static object _rowNoLocker = new object(); @@ -61,7 +66,54 @@ } MatSerNumAnalysisModel model = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNum); + //鏀惰揣澧炲姞鎵规鍗℃帶 + //鏌ヨ鏀惰揣鏄庣粏鏄惁鏈夊瓨鍦ㄥ悓涓�涓壒娆� + Dt_ReceiveOrderDetail receiveOrderDetailOld = _inboundRepository.ReceiveOrderDetailRepository.QueryFirst(x => x.LotNo == model.LotNo); + Dt_ReceiveOrder? receiveOrderOld = null; + if (receiveOrderDetailOld!=null) + { + receiveOrderOld = _inboundRepository.ReceiveOrderRepository.QueryFirst(x => x.ReceiveOrderId == receiveOrderDetailOld.ReceiveOrderId); + } + if (receiveOrderDetailOld!=null && receiveOrderOld?.WarehouseId== receiveOrder.WarehouseId) + { + return WebResponseContent.Instance.Error($"鏀惰揣鍗曞彿{receiveOrderOld.ReceiveOrderNo}涓壒娆model.LotNo}宸插瓨鍦�"); + } + //鏌ヨ搴撳瓨鎵规鏄惁鏈夊瓨鍦ㄥ悓涓�涓壒娆� + Dt_StockInfoDetail stockInfoDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == model.LotNo); + Dt_StockInfo? stockInfo = null; + if (stockInfoDetail!=null) + { + stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.Id == stockInfoDetail.Id); + } + if (stockInfoDetail!=null && stockInfo?.WarehouseId==receiveOrder.WarehouseId) + { + return WebResponseContent.Instance.Error($"搴撳瓨{stockInfo.PalletCode}涓壒娆model.LotNo}宸插瓨鍦�"); + } + if (model!=null) + { + string format = "yyyy-MM-dd"; // 鐩爣鏍煎紡 + DateTime parsedDate; + // 瑙f瀽楠岃瘉鏍煎紡 + bool isValidEffDate = DateTime.TryParseExact( + model.EffectiveDate, + format, + CultureInfo.InvariantCulture, + DateTimeStyles.None, + out parsedDate + ); + bool isValidProDate = DateTime.TryParseExact( + model.ProductionDate, + format, + CultureInfo.InvariantCulture, + DateTimeStyles.None, + out parsedDate + ); + if (!isValidEffDate || !isValidProDate) + { + return WebResponseContent.Instance.Error("鏍煎紡鏃犳晥鎴栨棩鏈熶笉鍚堟硶"); + } + } Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == model.MaterielCode); if (materielInfo == null) { diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs" index cbe2a08..86e7760 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_MesRworkOutboundOrder.cs" @@ -41,23 +41,17 @@ [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "浠诲姟鍗曞彿")] public string TaskNo { get; set; } - ///// <summary> - ///// 鍗曟嵁鏁伴噺 - ///// </summary> - //[SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鏁伴噺")] - //public float OrderQuantity { get; set; } + /// <summary> + /// 閿佸畾鏁伴噺 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閿佸畾鏁伴噺", DefaultValue = "0")] + public float LockQuantity { get; set; } - ///// <summary> - ///// 閿佸畾鏁伴噺 - ///// </summary> - //[SugarColumn(IsNullable = false, ColumnDescription = "閿佸畾鏁伴噺", DefaultValue = "0")] - //public float LockQuantity { get; set; } - - ///// <summary> - ///// 宸插嚭鏁伴噺 - ///// </summary> - //[SugarColumn(IsNullable = false, ColumnDescription = "宸插嚭鏁伴噺", DefaultValue = "0")] - //public float OverOutQuantity { get; set; } + /// <summary> + /// 宸插嚭鏁伴噺 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "宸插嚭鏁伴噺", DefaultValue = "0")] + public float OverOutQuantity { get; set; } /// <summary> /// 鍗曟嵁鐘舵�� @@ -71,11 +65,11 @@ [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡", IsOnlyIgnoreUpdate = true)] public int CreateType { get; set; } - ///// <summary> - ///// 鍗曟嵁绫诲瀷 - ///// </summary> - //[SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷", IsOnlyIgnoreUpdate = true)] - //public int OrderType { get; set; } + /// <summary> + /// 鍗曟嵁绫诲瀷 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷", IsOnlyIgnoreUpdate = true)] + public int OrderType { get; set; } /// <summary> /// 浜у搧缂栫爜 @@ -113,10 +107,5 @@ /// </summary> [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "閿�鍞鍗�")] public string SaleOrder { get; set; } - /// <summary> - /// 搴撳瓨绫诲瀷 - /// </summary> - [SugarColumn(IsNullable = false, ColumnDescription = "搴撳瓨绫诲瀷", IsOnlyIgnoreUpdate = true)] - public int InventoryType { get; set; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs" index 7854934..81ed156 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/OutboundRepository.cs" @@ -16,13 +16,19 @@ public IOutStockLockInfoRepository OutboundStockLockInfoRepository { get; } public IMesPPCutOutboundOrderRepository MesPPCutOutboundOrderRepository { get; } + public IProOutOrderRepository ProOutOrderRepository { get; } + public IProOutOrderDetailRepository ProOutOrderDetailRepository { get; } + public IMesRworkOutboundOrderRepository RworkOutboundOrderRepository { get; } - public OutboundRepository(IOutboundOrderDetailRepository outboundOrderDetailRepository, IOutboundOrderRepository outboundOrderRepository, IOutStockLockInfoRepository outboundStockLockInfoRepository,IMesPPCutOutboundOrderRepository mesPPCutOutboundOrderRepository) + public OutboundRepository(IOutboundOrderDetailRepository outboundOrderDetailRepository, IOutboundOrderRepository outboundOrderRepository, IOutStockLockInfoRepository outboundStockLockInfoRepository,IMesPPCutOutboundOrderRepository mesPPCutOutboundOrderRepository, IProOutOrderRepository proOutOrderRepository, IProOutOrderDetailRepository proOutOrderDetailRepository, IMesRworkOutboundOrderRepository rworkOutboundOrderRepository) { OutboundOrderDetailRepository = outboundOrderDetailRepository; OutboundOrderRepository = outboundOrderRepository; OutboundStockLockInfoRepository = outboundStockLockInfoRepository; MesPPCutOutboundOrderRepository = mesPPCutOutboundOrderRepository; + ProOutOrderRepository = proOutOrderRepository; + ProOutOrderDetailRepository = proOutOrderDetailRepository; + RworkOutboundOrderRepository = rworkOutboundOrderRepository; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs" index 4508b4f..876025c 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs" @@ -3,7 +3,11 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using WIDESEA_Common.LocationEnum; +using WIDESEA_Common.StockEnum; +using WIDESEA_Core; using WIDESEA_Core.BaseServices; +using WIDESEA_Core.Helper; using WIDESEA_IBasicRepository; using WIDESEA_IBasicService; using WIDESEA_IOutboundRepository; @@ -22,16 +26,127 @@ private readonly IOutStockLockInfoService _outStockLockInfoService; private readonly IBasicService _basicService; private readonly IRecordService _recordService; + private readonly IOutProStockInfoService _outProStockInfoService; public IMesRworkOutboundOrderRepository Repository => BaseDal; - public MesRworkOutboundOrderService(IMesRworkOutboundOrderRepository BaseDal, IBasicRepository basicRepository, IStockService stockService, IOutStockLockInfoService outStockLockInfoService, IBasicService basicService, IRecordService recordService) : base(BaseDal) + public MesRworkOutboundOrderService(IMesRworkOutboundOrderRepository BaseDal, IBasicRepository basicRepository, IStockService stockService, IOutStockLockInfoService outStockLockInfoService, IBasicService basicService, IRecordService recordService, IOutProStockInfoService outProStockInfoService) : base(BaseDal) { _basicRepository = basicRepository; _stockService = stockService; _outStockLockInfoService = outStockLockInfoService; _basicService = basicService; _recordService = recordService; + _outProStockInfoService = outProStockInfoService; + } + /// <summary> + /// 鎻愬簱浠诲姟鍒嗛厤搴撳瓨 + /// </summary> + public (List<Dt_ProStockInfo>?,Dt_MesRworkOutboundOrder?,List<Dt_OutProStockInfo>?,List<Dt_LocationInfo>) AssignMesStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder) + { + List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); + Dt_MesRworkOutboundOrder assignOutOrder= new Dt_MesRworkOutboundOrder(); + List<Dt_OutProStockInfo> outProStockInfos=new List<Dt_OutProStockInfo>(); + List<Dt_LocationInfo> locationInfos=new List<Dt_LocationInfo>(); + float originalNeedQuantity = mesRworkOutboundOrder.RequiredQuantity; + + float needQuantity = originalNeedQuantity; + + //鏌ユ壘鍙敤搴撳瓨 + List<Dt_ProStockInfo> stockInfoss = _stockService.ProStockInfoService.GetUseableStocks(mesRworkOutboundOrder); + if (!stockInfoss.Any()) + { + throw new Exception("鏈壘鍒板彲鍒嗛厤搴撳瓨"); + } + List<Dt_ProStockInfo> autoAssignStocks = _stockService.ProStockInfoService.GetOutboundStocks(stockInfoss,mesRworkOutboundOrder, needQuantity,out float residueQuantity); + mesRworkOutboundOrder.LockQuantity += needQuantity - residueQuantity; + autoAssignStocks.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.StockPcsQty).ToList(); + proStockInfos.AddRange(autoAssignStocks); + float assignQuantity = needQuantity - residueQuantity; + + float orderQuantity = mesRworkOutboundOrder.RequiredQuantity; + for (int j = 0; j < autoAssignStocks.Count; j++) + { + //鍑哄簱璁㈠崟鏄庣粏宸插垎閰嶆暟閲� + float detailAssignQuantity = outProStockInfos + .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder + && x.PCode == mesRworkOutboundOrder.ProductCode + && x.PVer == mesRworkOutboundOrder.ProductVersion) + .Sum(x => x.AssignQuantity); + + //鍑哄簱璇︽儏宸插垎閰嶆暟閲� + float palletAssignQuantity = outProStockInfos + .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder + && x.PCode == mesRworkOutboundOrder.ProductCode + && x.PVer == mesRworkOutboundOrder.ProductVersion + && x.PalletCode == autoAssignStocks[j].PalletCode) + .Sum(x => x.AssignQuantity); + + float palletOutboundQuantity = autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); + if (palletAssignQuantity < palletOutboundQuantity)//濡傛灉鍑哄簱璇︽儏宸插垎閰嶆暟閲忓皬浜庢墭鐩樺凡鍒嗛厤鏁伴噺锛屽垯鍙互缁х画娣诲姞璇ユ墭鐩樺嚭搴撲俊鎭� + { + float orderDetailNeedQuantity = mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity; + if (orderDetailNeedQuantity > autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity) + { + mesRworkOutboundOrder.LockQuantity += autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity; + Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, autoAssignStocks[j], autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity); + outProStockInfos.Add(outStockLockInfo); + } + else + { + Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, autoAssignStocks[j], mesRworkOutboundOrder.RequiredQuantity-mesRworkOutboundOrder.LockQuantity); + outProStockInfos.Add(outStockLockInfo); + mesRworkOutboundOrder.LockQuantity = mesRworkOutboundOrder.RequiredQuantity; + break; + } + } + } + locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(proStockInfos.Select(x => x.LocationCode).ToList())); + + return (proStockInfos, assignOutOrder, outProStockInfos, locationInfos); + } + public WebResponseContent LockOutboundStockDataUpdate(List<Dt_ProStockInfo> stockInfos, List<Dt_OutProStockInfo> outStockLockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null) + { + try + { + stockInfos.ForEach(x => { + x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + }); + _stockService.ProStockInfoService.Repository.UpdateData(stockInfos); + List<Dt_ProStockInfoDetail> stockInfoDetails = new List<Dt_ProStockInfoDetail>(); + foreach (var item in stockInfos) + { + stockInfoDetails.AddRange(item.proStockInfoDetails); + } + _stockService.ProStockInfoDetailService.Repository.UpdateData(stockInfoDetails); + + List<Dt_OutProStockInfo> addOutStockLockInfos = outStockLockInfos.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 = outStockLockInfos.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); + } } } } 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" index d3bb1cb..ed4c867 100644 --- "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" @@ -49,5 +49,33 @@ }; return outProStockInfo; } + public Dt_OutProStockInfo GetOutStockLockInfo(Dt_MesRworkOutboundOrder mesOutboundOrder, Dt_ProStockInfo outStock, float assignQuantity, int? taskNum = null) + { + + Dt_OutProStockInfo outProStockInfo = new Dt_OutProStockInfo() + { + OrderNo = mesOutboundOrder.OrderNo, + OrderDetailId = mesOutboundOrder.Id, + OrderType = mesOutboundOrder.OrderType, + BatchNo = outStock.proStockInfoDetails.FirstOrDefault()?.LotNumber, + SaleOrder = mesOutboundOrder.SaleOrder, + Customer = "", + PCode = mesOutboundOrder.ProductCode, + PVer = mesOutboundOrder.ProductVersion, + PLot = outStock.proStockInfoDetails.FirstOrDefault()?.LotNumber, + DateCode = mesOutboundOrder.DateCode, + StockId = outStock.Id, + OrderQuantity = mesOutboundOrder.RequiredQuantity, + OriginalQuantity = outStock.proStockInfoDetails.Sum(x => x.StockPcsQty), + AssignQuantity = assignQuantity, + LocationCode = outStock.LocationCode, + PalletCode = outStock.PalletCode, + Unit = "PCS", + 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/OutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" index b6057e6..5bbabf2 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" @@ -88,17 +88,17 @@ int pageNo = saveModel.MainData["pageNo"].ObjToInt(); string? orderNo = saveModel.MainData["orderNo"].ToString(); int warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); - List<Dt_OutboundOrder> dt_ReceiveOrders = new List<Dt_OutboundOrder>(); + List<Dt_OutboundOrder> _OutboundOrders = new List<Dt_OutboundOrder>(); if (string.IsNullOrEmpty(orderNo)) { - dt_ReceiveOrders = Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderStatus < OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); + _OutboundOrders = Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderStatus < OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); } else { - dt_ReceiveOrders = Db.Queryable<Dt_OutboundOrder>().Where(x => (x.OrderNo.Contains(orderNo)) && x.OrderStatus < OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); + _OutboundOrders = Db.Queryable<Dt_OutboundOrder>().Where(x => (x.OrderNo.Contains(orderNo)) && x.OrderStatus < OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); } - content.OK(data: dt_ReceiveOrders); + content.OK(data: _OutboundOrders); } catch (Exception ex) { @@ -283,19 +283,21 @@ { try { + Dt_OutboundOrder oldOutboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo && x.OrderStatus < OutOrderStatusEnum.鍏抽棴.ObjToInt()).Includes(x => x.Details).OrderBy(x => x.CreateDate).First(); Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == model.MCode); + if (materielInfo == null) { + DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡淇℃伅"); } Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseCode == model.WaId); if (warehouse == null) { + DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅"); } - - Dt_OutboundOrder oldOutboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).Includes(x => x.Details).First(); if (model.Way == 1) { @@ -303,10 +305,12 @@ { if (oldOutboundOrder.Details.FirstOrDefault(x => x.RowNo == Convert.ToInt32(model.RowNo)) != null) { + DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"璇ユ槑缁嗚鍙峰凡瀛樺湪"); } if (oldOutboundOrder.WarehouseId != warehouse.WarehouseId) { + DelOutOrder(oldOutboundOrder); return WebResponseContent.Instance.Error($"浠撳簱涓嶄竴鑷�"); } else @@ -412,6 +416,28 @@ return WebResponseContent.Instance.Error(ex.Message); } } + /// <summary> + /// 璇ュ崟鎹け璐ヨ繘琛屽垹闄� + /// </summary> + /// <returns></returns> + public void DelOutOrder(Dt_OutboundOrder outboundOrder) + { + try + { + if (outboundOrder != null && outboundOrder.Details.Count > 0) + { + _unitOfWorkManage.BeginTran(); + _outboundOrderRepository.DeleteAndMoveIntoHty(outboundOrder, OperateTypeEnum.鑷姩鍒犻櫎); + _outboundOrderDetailRepository.DeleteAndMoveIntoHty(outboundOrder.Details, OperateTypeEnum.鑷姩鍒犻櫎); + _unitOfWorkManage.CommitTran(); + } + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + throw new Exception(ex.Message); + } + } //涓婃姤鍑哄簱瀹屾垚 public WebResponseContent TestOutUpload(int id, List<Dt_OutStockLockInfo>? outStockLockInfos) { 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 1941997..a368baf 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" @@ -25,14 +25,16 @@ private readonly IStockService _stockInfoService; private readonly IBasicService _basicService; private readonly IOutProStockInfoService _outProStockInfoService; + private readonly IProOutOrderRepository _proOutOrderRepository; private readonly IRecordService _recordService; - public ProOutOrderDetailService(IProOutOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockInfoService, IBasicService basicService,IOutProStockInfoService outProStockInfoService, IRecordService recordService) : base(BaseDal) + public ProOutOrderDetailService(IProOutOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockInfoService, IBasicService basicService,IOutProStockInfoService outProStockInfoService, IRecordService recordService, IProOutOrderRepository proOutOrderRepository) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _stockInfoService = stockInfoService; _basicService = basicService; _outProStockInfoService = outProStockInfoService; _recordService = recordService; + _proOutOrderRepository=proOutOrderRepository; } /// <summary> /// 鍑哄簱搴撳瓨鍒嗛厤鍚庯紝鏇存柊鏁版嵁搴撴暟鎹� @@ -81,17 +83,18 @@ /// <summary> /// 鍒嗛厤搴撳瓨澶勭悊璐т綅鏁版嵁 /// </summary> - public (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(int warehouseId, Dt_ProOutOrder proOutOrder) + public (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) AssignProStockOut(List<Dt_ProOutOrderDetail> proOutOrderDetails) { - 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() + //鑾峰彇鎴愬搧璁㈠崟 + Dt_ProOutOrder proOutOrder = _proOutOrderRepository.QueryFirst(x=>x.Id==proOutOrderDetails.FirstOrDefault().ProOrderId); + if (proOutOrder==null) + { + throw new Exception("鏈壘鍒版垚鍝佽鍗�"); + } + List<Dt_ProOutOrderDetail> groupDetails = proOutOrderDetails.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, @@ -104,7 +107,7 @@ { float needQty = item.QtyPcs; //鏌ユ壘鍙敤搴撳瓨 - List<Dt_ProStockInfo> stockInfoss = _stockInfoService.ProStockInfoService.GetUseableStocks(warehouseId, item); + List<Dt_ProStockInfo> stockInfoss = _stockInfoService.ProStockInfoService.GetUseableStocks(proOutOrder.WarehouseId, item); if (!stockInfoss.Any()) { throw new Exception("鏈壘鍒板彲鍒嗛厤搴撳瓨"); @@ -116,7 +119,7 @@ float assignQuantity = needQty - residueQuantity; bool isCanLot = !string.IsNullOrEmpty(item.PLot); bool isCanDate = !string.IsNullOrEmpty(item.DateCode); - List<Dt_ProOutOrderDetail> details = OutOrderDetails + List<Dt_ProOutOrderDetail> details = proOutOrderDetails .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)) @@ -166,7 +169,7 @@ locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr)); } - return (outStocks, OutOrderDetails, outProStockInfos, locationInfos); + return (outStocks, proOutOrderDetails, outProStockInfos, locationInfos); } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" index d0811af..7effb11 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" @@ -1,21 +1,28 @@ 锘縰sing AutoMapper; +using Castle.Core.Resource; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.OrderEnum; +using WIDESEA_Common.StockEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; +using WIDESEA_Core.CodeConfigEnum; +using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO.ERP; +using WIDESEA_External.ERPService; +using WIDESEA_External.Model; using WIDESEA_IBasicRepository; using WIDESEA_IBasicService; using WIDESEA_IOutboundRepository; using WIDESEA_IOutboundService; using WIDESEA_IRecordService; +using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_Model.Models; @@ -26,14 +33,22 @@ private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IBasicRepository _basicRepository; private readonly IMapper _mapper; + private readonly IStockRepository _stockRepository; + private readonly IOutboundRepository _outboundRepository; + private readonly IOutboundOrderService _outboundOrderService; + private readonly IInvokeERPService _invokeERPService; public IProOutOrderRepository Repository => BaseDal; - public ProOutOrderService(IProOutOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IMapper mapper) : base(BaseDal) + public ProOutOrderService(IProOutOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IMapper mapper, IStockRepository stockRepository, IOutboundRepository outboundRepository, IOutboundOrderService outboundOrderService,IInvokeERPService invokeERPService) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _basicRepository = basicRepository; _mapper = mapper; + _stockRepository = stockRepository; + _outboundRepository = outboundRepository; + _outboundOrderService = outboundOrderService; + _invokeERPService = invokeERPService; } /// <summary> /// 鎺ユ敹ERP鎴愬搧鍑哄簱鍗� @@ -70,6 +85,7 @@ return content.Error($"鍑哄簱鍗曞彿{outOrderDTO.OrderNo}宸插瓨鍦�!"); } Dt_Warehouse warehouse=null; + List<Dt_CustomerInfo> customerInfos = _basicRepository.CustomerInfoRepository.QueryData(); if (outOrderDTO.OType==1 && string.IsNullOrEmpty(outOrderDTO.WaType)) { warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA71.ToString()); @@ -81,6 +97,12 @@ List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>(); foreach (var item in outOrderDTO.OrderDetails) { + //鍒ゆ柇瀹㈡埛鏄惁瀛樺湪 + Dt_CustomerInfo? customerInfo = customerInfos.Where(x=>x.Code== item.Customer).FirstOrDefault(); + if (customerInfo==null) + { + return content.Error($"瀹㈡埛{item.Customer}涓嶅瓨鍦�!"); + } proOutOrderDetails.Add(_mapper.Map<Dt_ProOutOrderDetail>(item)); } Dt_ProOutOrder proOutOrder= new Dt_ProOutOrder() @@ -136,5 +158,139 @@ } return content; } + /// <summary> + /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱 + /// </summary> + /// <returns></returns> + public WebResponseContent OutProductPK(string[] OutPKCodes,string ProOutNo) + { + WebResponseContent content = new WebResponseContent(); + try + { + if (OutPKCodes.IsNullOrEmpty()) + { + return content.Error("涓嶈兘涓虹┖"); + } + Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First(); + if (proOutOrder == null) + { + return content.Error($"鍑哄簱鍗晎ProOutNo}涓嶅瓨鍦�"); + } + if (proOutOrder.ProOrderStatus==OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + { + return content.Error($"鍑哄簱鍗晎ProOutNo}宸插畬鎴�"); + } + string? userName = App.User.UserName;//GSWMS + //鑾峰彇鎵�鏈夊绠辩殑鏁版嵁 + List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() + .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt()) + .Includes(x => x.proStockInfoDetails).ToList(); + List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>(); + List<Dt_ProStockInfoDetail> proStockInfoDetails=new List<Dt_ProStockInfoDetail>(); + List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString()); + foreach (var item in OutPKCodes) + { + //鑾峰彇搴撳瓨 + Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault(); + if (proStockInfo == null) + { + return content.Error($"鏈壘鍒皗item}搴撳瓨"); + } + Dt_Warehouse? dt_Warehouse = warehouses.Where(x=>x.WarehouseId== proStockInfo.WarehouseId).FirstOrDefault(); + if (dt_Warehouse==null) + { + return content.Error($"澶栫鍙穥item},涓嶅睘浜庢垚鍝佷粨"); + } + if (proStockInfo.ShipmentOrder!= proOutOrder.ProOutOrderNo) + { + return content.Error($"澶栫鍙穥item},涓嶅睘浜庡嚭搴撹鍗晎proOutOrder.ProOutOrderNo}"); + } + proStockInfos.Add(proStockInfo); + proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails); + } + + if (proOutOrder.Details.Sum(x=>x.LockQtyPcs-x.OverQtyPcs)< proStockInfoDetails.Sum(x=>x.StockPcsQty)) + { + return content.Error($"鍑哄簱鏁伴噺{proStockInfoDetails.Sum(x => x.StockPcsQty)}>鎵�鍓╄鍗曟暟閲弡proOutOrder.Details.Sum(x => x.LockQtyPcs - x.OverQtyPcs)}"); + } + List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>(); + List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList(); + if (proOutOrderDetails==null || proOutOrderDetails.Count<=0) + { + return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖"); + } + foreach (var item in proStockInfoDetails) + { + //鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁 + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault(); + if (proOutOrderDetail==null) + { + return content.Error("鏈壘鍒板搴斿嚭搴撹鍗曟槑缁�"); + } + proOutOrderDetail.OverQtyPcs += item.StockPcsQty; + if (proOutOrderDetail.OverQtyPcs> proOutOrderDetail.QtyPcs) + { + return content.Error($"鍑哄簱璁㈠崟鏄庣粏琛寋proOutOrderDetail.RowId},婧㈠嚭{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}"); + } + if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs) + { + proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); + } + StockOutItemsItem outItemsItem = new StockOutItemsItem() + { + PartNum=item.ProductCode, + Rev=item.ProductVersion, + SoNumber=item.SaleOrder, + BatchNumber=item.BagNo, + QtyPcs=item.StockPcsQty, + QtySet=item.SETQty + }; + stockOutItems.Add(outItemsItem); + } + int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); + int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count(); + if (proOutOrder.Details.Count== (OldOverCount + AddOverCount)) + { + proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); + } + Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault(); + //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP + _unitOfWorkManage.BeginTran(); + _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚); + _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚); + _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails); + BaseDal.UpdateData(proOutOrder); + //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏� + ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel() + { + Way = 1, + StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)), + ConfirmedUserNo=userName, + AssignUserNo=userName, + WarehouseCode=warehouse.WarehouseCode, + ShipDate=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + DeliverplanCode=proOutOrder.ProOutOrderNo, + Remark=proOutOrder.Remark, + StockOutItems= stockOutItems + }; + string response = _invokeERPService.InvokeProOutApi(proOutOrderModel); + ErpRequestContent erpRequestContent= response.DeserializeObject<ErpRequestContent>(); + if (erpRequestContent.res==1) + { + _unitOfWorkManage.CommitTran(); + content.OK(); + } + else + { + throw new Exception(erpRequestContent.Data); + } + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } } } 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 9861ce4..1f4d0ad 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" @@ -25,14 +25,37 @@ 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) + .Any(v => v.SaleOrder==proOutOrderDetail.SaleOrder + && v.ProductCode==proOutOrderDetail.PCode + && v.ProductVersion==proOutOrderDetail.PVer + && (isCanLot? v.LotNumber== proOutOrderDetail.PLot:true) + && (isCanDate ? v.DateCode == proOutOrderDetail.DateCode : true) )) .ToList(); - proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault().DateCode).ToList(); + + proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x=>x.proStockInfoDetails.Sum(x=>x.StockPcsQty)).ToList(); + return proStockInfos; + } + /// <summary> + /// 鑾峰彇MES鎻愬簱搴撳瓨 + /// </summary> + /// <param name="mesRworkOutboundOrder"></param> + /// <param name="locationInfos"></param> + /// <returns></returns> + public List<Dt_ProStockInfo> GetProStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List<string> locationInfos) + { + List<Dt_ProStockInfo>? proStockInfos = null; + bool isCanDate = !string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode); + proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Contains(x.LocationCode)) + .Includes(x => x.proStockInfoDetails) + .Where(x => x.proStockInfoDetails + .Any(v => v.SaleOrder == mesRworkOutboundOrder.SaleOrder + && v.ProductCode == mesRworkOutboundOrder.ProductCode + && v.ProductVersion == mesRworkOutboundOrder.ProductVersion + && (isCanDate ? v.DateCode == mesRworkOutboundOrder.DateCode : true) + )) + .ToList(); + proStockInfos = proStockInfos.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.DateCode).ThenBy(x => x.proStockInfoDetails.Sum(x => x.StockPcsQty)).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 e7b3f37..23494f2 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" @@ -3,8 +3,11 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using WIDESEA_Common.StockEnum; using WIDESEA_Core; using WIDESEA_Core.BaseServices; +using WIDESEA_Core.Enums; +using WIDESEA_Core.Helper; using WIDESEA_IBasicRepository; using WIDESEA_IStockRepository; using WIDESEA_IStockService; @@ -31,11 +34,54 @@ //鏍规嵁鍐呭寘鍙疯繘琛屽簱瀛樻墸闄� try { + //鑾峰彇搴撳瓨 + List<string> BagNos = proStockInfoDetails.Select(x => x.BagNo).Distinct().ToList(); + List<Dt_ProStockInfo> proStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>() + .Where(x => x.StockStatus == StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt()) + .Includes(x => x.proStockInfoDetails) + .Where(x => x.proStockInfoDetails.Any(v => BagNos.Contains(v.BagNo))).Distinct().ToList(); List<Dt_ProStockInfoDetail> delProStockDetails=new List<Dt_ProStockInfoDetail>(); - //foreach (var item in collection) - //{ - // Dt_ProStockInfoDetail delProStockDetal= - //} + List<Dt_ProStockInfoDetail> upProStockDetails = new List<Dt_ProStockInfoDetail>(); + List<Dt_ProStockInfo> delProStockInfos = new List<Dt_ProStockInfo>(); + foreach (var item in proStockInfoDetails) + { + Dt_ProStockInfo? proStockInfo = proStockInfos.Where(x => x.proStockInfoDetails.Any(v => v.BagNo == item?.BagNo)).FirstOrDefault(); + Dt_ProStockInfoDetail? proStockInfoDetail = proStockInfo?.proStockInfoDetails.Where(x => x.BagNo == item?.BagNo).FirstOrDefault(); + if (proStockInfo==null || proStockInfoDetail == null) + { + return content.Error($"鏈壘鍒皗item?.BagNo}搴撳瓨"); + } + //鍒ゆ柇鏄庣粏鏄惁鍏ㄩ儴鎵嚭 + if (proStockInfoDetail.StockPcsQty==item.StockPcsQty) + { + delProStockDetails.Add(proStockInfoDetail); + proStockInfo.proStockInfoDetails.Remove(proStockInfoDetail); + } + else + { + proStockInfoDetail.StockPcsQty -= item.StockPcsQty; + proStockInfoDetail.SETQty -= item.SETQty; + upProStockDetails.Add(proStockInfoDetail); + } + + if (proStockInfo.proStockInfoDetails.Count==0) + { + delProStockInfos.Add(proStockInfo); + } + } + if (delProStockInfos.Count>0) + { + BaseDal.DeleteAndMoveIntoHty(delProStockInfos, OperateTypeEnum.鑷姩鍒犻櫎); + } + if (delProStockDetails.Count > 0) + { + _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(delProStockDetails, OperateTypeEnum.鑷姩鍒犻櫎); + } + if (upProStockDetails.Count > 0) + { + _stockRepository.ProStockInfoDetailRepository.UpdateData(upProStockDetails); + } + content.OK(); } catch (Exception ex) { @@ -48,6 +94,15 @@ { List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(warehoseId); return BaseDal.GetProStocks(proOutOrderDetail,locationCodes); + } + /// <summary> + /// MES鎻愬簱鍙敤搴撳瓨 + /// </summary> + /// <returns></returns> + public List<Dt_ProStockInfo> GetUseableStocks(Dt_MesRworkOutboundOrder mesRworkOutboundOrder) + { + List<string> locationCodes = _basicRepository.LocationInfoRepository.GetCanOutLocationCodes(mesRworkOutboundOrder.WarehouseId); + return BaseDal.GetProStocks(mesRworkOutboundOrder, locationCodes); } /// <summary> /// 鑾峰彇鍑哄簱搴撳瓨 @@ -132,5 +187,108 @@ residueQuantity = needQuantity; return assignOutStocks; } + /// <summary> + /// 鑾峰彇MES鎻愬簱搴撳瓨 + /// </summary> + public List<Dt_ProStockInfo> GetOutboundStocks(List<Dt_ProStockInfo> stockInfos, Dt_MesRworkOutboundOrder mesRworkOutboundOrder, 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 == mesRworkOutboundOrder.SaleOrder && x.ProductCode == mesRworkOutboundOrder.ProductCode && x.ProductVersion == mesRworkOutboundOrder.ProductVersion) + .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 == mesRworkOutboundOrder.SaleOrder && x.ProductCode == mesRworkOutboundOrder.ProductCode && x.ProductVersion == mesRworkOutboundOrder.ProductVersion) + { + 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 == mesRworkOutboundOrder.SaleOrder && x.ProductCode == mesRworkOutboundOrder.ProductCode && x.ProductVersion == mesRworkOutboundOrder.ProductVersion) + .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 == mesRworkOutboundOrder.SaleOrder && x.ProductCode == mesRworkOutboundOrder.ProductCode && x.ProductVersion == mesRworkOutboundOrder.ProductVersion) + { + 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; + } + ////澶勭悊鍑哄簱搴撳瓨 + //public (List<Dt_ProStockInfoDetail>?, List<Dt_ProStockInfoDetail>?) HandleOutProStock(Dt_ProStockInfo proStockInfo) + //{ + // List<Dt_ProStockInfoDetail>? deleteStockDetails = null; + // List<Dt_ProStockInfoDetail>? updateStockDetails = null; + // foreach (var item in proStockInfo.proStockInfoDetails) + // { + // if (item.StockPcsQty==item.OutboundQuantity) + // { + // item.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + // deleteStockDetails.Add(item); + // } + // else if(item.StockPcsQty> item.OutboundQuantity && item.OutboundQuantity>0) + // { + // item.StockPcsQty-=item.OutboundQuantity; + // updateStockDetails.Add(item); + // } + // } + // return (deleteStockDetails, updateStockDetails); + //} } } 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 f4369ea..86aad6c 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" @@ -295,46 +295,6 @@ return content; } /// <summary> - /// WMS鍚屾鎴愬搧鍑哄簱鑷矼ES - /// </summary> - /// <param name="model"></param> - /// <returns></returns> - public WebResponseContent ShipmentOrderSync(MesShipmentOrderSync model) - { - WebResponseContent content = new WebResponseContent(); - try - { - Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_ShipmentOrderSync.ToString()); - MESRoot<MesShipmentOrderSync> root = new MESRoot<MesShipmentOrderSync>() - { - From = "WMS", - DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - Content = model - }; - JsonSerializerSettings settings = new JsonSerializerSettings - { - ContractResolver = new CamelCasePropertyNamesContractResolver() - }; - string request = JsonConvert.SerializeObject(root, settings); - string response = HttpMesHelper.Post(apiInfo.ApiAddress, request); - MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>(); - //璋冪敤鎺ュ彛 - if (mesResponseContent.BSucc == true) - { - content.OK(mesResponseContent.StrMsg); - } - else - { - content.Error(mesResponseContent.StrMsg); - } - } - catch (Exception ex) - { - content.Error(ex.Message); - } - return content; - } - /// <summary> /// /// </summary> /// <param name="stockInfo"></param> @@ -498,6 +458,7 @@ Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() { + MaterielSpec = stockInfoDetail_Hty.MaterielSpec, BatchNo = stockInfoDetail_Hty?.BatchNo ?? "", EffectiveDate = model.ExpirationDate, MaterielCode = model.MaterialCode, @@ -1072,12 +1033,25 @@ try { Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); + //鍒ゆ柇MES浼犲叆鐨勫嚭搴撳崟鍙锋槸鍚﹀瓨鍦� + Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x=>x.ProOutOrderNo== boxInfoModel.ShipmentOrder).Includes(x=>x.Details).First(); + if (proOutOrder==null) + { + return content.Error($"鍗曞彿{boxInfoModel.ShipmentOrder}涓嶅瓨鍦�"); + } + //鑾峰彇鎵�鏈夋垚鍝佸嚭搴撳唴鍖呬俊鎭� + List<Dt_ProStockInfoDetail> dt_ProStockInfos = _stockRepository.ProStockInfoDetailRepository.QueryData(x=>x.ProOutDetailStatus==StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt()); //鑾峰彇MES鍐呭寘淇℃伅 List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>(); foreach (var item in boxInfoModel.Bags) { foreach (var child in item.BagItems) { + Dt_ProStockInfoDetail? proStockInfoDetail = dt_ProStockInfos.Where(x=>x.BagNo==item.BagNo)?.FirstOrDefault(); + if (proStockInfoDetail==null) + { + return content.Error($"鍐呭寘{item.BagNo}璐х墿鐘舵�佸紓甯�"); + } Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail() { BagNo = item.BagNo, @@ -1103,16 +1077,27 @@ { proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item)); } + proStockInfoDetails.ForEach(x => + { + x.ProOutDetailStatus = StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt(); + }); + Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() { PalletCode = boxInfoModel.BoxNo, PalletType = 0, WarehouseId = warehouse.WarehouseId, ShipmentOrder = boxInfoModel.ShipmentOrder, - StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), + StockStatus = StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt(), proStockInfoDetails = proStockInfoDetails }; _unitOfWorkManage.BeginTran(); + //鏍规嵁澶栧寘淇℃伅瑙g粦鍐呭寘涓庤兌妗嗗簱瀛樺叧绯� + WebResponseContent UnBindContent = _stockService.ProStockInfoService.UnBindStock(proStockInfoDetails); + if (!UnBindContent.Status) + { + throw new Exception(UnBindContent.Message); + } Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); _unitOfWorkManage.CommitTran(); return content.OK("澶栧寘鎺ユ敹鎴愬姛"); @@ -1123,51 +1108,7 @@ } return content; } - /// <summary> - /// 鎴愬搧杩斿伐鎻愬簱 - /// </summary> - /// <param name="model"></param> - /// <returns></returns> - public MesResponseContent RworkTask(RworkTaskModel model) - { - MesResponseContent content = new MesResponseContent(); - try - { - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString()); - if (warehouse==null) - { - return MesResponseContent.Instance.Error("鏈壘鍒版浠撳簱"); - } - Dt_MesRworkOutboundOrder mesRworkOutboundOrder = new Dt_MesRworkOutboundOrder() - { - WarehouseId=warehouse.WarehouseId, - TaskNo=model.TaskNo, - OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(), - CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), - ProductCode=model.ProductCode, - ProductName=model.ProductName, - ProductVersion=model.ProductVersion, - DateCode=model.DateCode, - RequiredQuantity=model.RequiredQuantity, - FactoryCode= model.FactoryCode, - SaleOrder=model.SaleOrder, - InventoryType=model.InventoryType, - }; - _unitOfWorkManage.BeginTran(); - _outboundService.RworkOutboundOrderService.AddData(mesRworkOutboundOrder); - _unitOfWorkManage.CommitTran(); - return content.OK("鎻愪緵杩斿簱鍗曟帴鏀舵垚鍔�"); - } - catch (Exception ex) - { - _unitOfWorkManage.RollbackTran(); - content.Error(ex.Message); - } - return content; - } - - - + /// <summary> /// 鐢熸垚PP澶у嵎鍑哄簱浠诲姟 @@ -1660,5 +1601,207 @@ return WebResponseContent.Instance.Error(ex.Message); } } + /// <summary> + /// MES鎴愬搧鍑哄簱鍗曞悓姝ユ暟鎹鐞� + /// </summary> + public MesShipmentOrderSync MesOutSync(Dt_OutProStockInfo outProStockInfo, Dt_ProOutOrderDetail proOutOrderDetail) + { + List<MesShipOrderDetail> mesShipOrderDetails = new List<MesShipOrderDetail>(); + //鑾峰彇鍑哄簱鍗� + Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.QueryFirst(x=>x.Id== proOutOrderDetail.ProOrderId); + //鑾峰彇瀹㈡埛 + Dt_CustomerInfo customerInfo = _basicRepository.CustomerInfoRepository.QueryFirst(x=>x.Code==proOutOrderDetail.Customer); + + MesShipOrderDetail orderDetail = new MesShipOrderDetail() + { + ProductCode = proOutOrderDetail.PCode, + ProductVersion = proOutOrderDetail.PVer, + Qty = outProStockInfo.AssignQuantity, + SaleOrder = proOutOrderDetail.SaleOrder, + Sequence = outProStockInfo.Id, + WorkCenter = "SPCK_OUTER-001" + }; + mesShipOrderDetails.Add(orderDetail); + MesShipmentOrderSync shipmentOrderSync = new MesShipmentOrderSync() + { + ShipmentOrder = proOutOrder.ProOutOrderNo, + PlantShipDate = proOutOrder.PlantShipDate.ToString("yyyy-MM-dd HH:mm:ss"), + Customer = proOutOrderDetail.Customer, + FactoryCode = proOutOrderDetail.FactoryCode, + ShipName = customerInfo.Name, + ShippingAddress = customerInfo.NickName, + OrderDetails = mesShipOrderDetails + }; + return shipmentOrderSync; + } + /// <summary> + /// WMS鍚屾鎴愬搧鍑哄簱鑷矼ES + /// </summary> + public WebResponseContent ShipmentOrderSync(MesShipmentOrderSync model) + { + WebResponseContent content = new WebResponseContent(); + try + { + Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_ShipmentOrderSync.ToString()); + MESRoot<MesShipmentOrderSync> root = new MESRoot<MesShipmentOrderSync>() + { + From = "WMS", + DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Content = model + }; + JsonSerializerSettings settings = new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver() + }; + string request = JsonConvert.SerializeObject(root, settings); + string response = HttpMesHelper.Post(apiInfo.ApiAddress, request); + MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>(); + //璋冪敤鎺ュ彛 + if (mesResponseContent.BSucc == true) + { + content.OK(mesResponseContent.StrMsg); + } + else + { + content.Error(mesResponseContent.StrMsg); + } + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + + /// <summary> + /// MES鎴愬搧杩斿伐鎻愬簱 + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public MesResponseContent RworkTask(RworkTaskModel model) + { + MesResponseContent content = new MesResponseContent(); + try + { + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA72.ToString()); + if (warehouse == null) + { + return content.Error($"灏炬暟浠撲俊鎭湭閰嶇疆"); + } + Dt_MesRworkOutboundOrder rworkOutboundOrderOld = _outboundRepository.RworkOutboundOrderRepository.QueryFirst(x=>x.TaskNo== model.TaskNo); + if (rworkOutboundOrderOld==null) + { + return content.Error($"鎻愬簱浠诲姟鍗晎model.TaskNo}宸插瓨鍦�"); + } + Dt_MesRworkOutboundOrder mesRworkOutboundOrder = new Dt_MesRworkOutboundOrder() + { + WarehouseId = warehouse.WarehouseId, + TaskNo = model.TaskNo, + OrderStatus = OutOrderStatusEnum.鏈紑濮�.ObjToInt(), + CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), + ProductCode = model.ProductCode, + ProductName = model.ProductName, + ProductVersion = model.ProductVersion, + DateCode = model.DateCode, + RequiredQuantity = model.RequiredQuantity, + FactoryCode = model.FactoryCode, + SaleOrder = model.SaleOrder, + OrderType = model.InventoryType, + }; + List<Dt_Task> tasks = new List<Dt_Task>(); + List<Dt_ProStockInfo>? proStockInfos = null; + List<Dt_OutProStockInfo>? outProStockInfos = null; + List<Dt_LocationInfo>? locationInfos = null; + //鍒嗛厤搴撳瓨鐢熸垚鎻愬簱浠诲姟 + (List<Dt_ProStockInfo>?, Dt_MesRworkOutboundOrder?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>) result = _outboundService.RworkOutboundOrderService.AssignMesStocks(mesRworkOutboundOrder); + if (result.Item1!=null && result.Item1.Count>0) + { + tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound); + result.Item2.OrderStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + result.Item3.ForEach(x => + { + x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(); + }); + + proStockInfos = result.Item1; + mesRworkOutboundOrder = result.Item2; + outProStockInfos = result.Item3; + locationInfos = result.Item4; + } + else + { + throw new Exception("鏃犲簱瀛樺垎閰�"); + } + tasks.ForEach(x => + { + x.TargetAddress = "5236"; + x.OrderNo = mesRworkOutboundOrder.TaskNo; + }); + _unitOfWorkManage.BeginTran(); + + int id = BaseDal.AddData(tasks); + outProStockInfos.ForEach(x => + { + x.OrderNo = mesRworkOutboundOrder.TaskNo; + x.OrderDetailId = id; + }); + if (proStockInfos != null && proStockInfos.Count > 0 && outProStockInfos != null && outProStockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) + { + WebResponseContent updateContent = _outboundService.RworkOutboundOrderService.LockOutboundStockDataUpdate(proStockInfos, outProStockInfos, locationInfos, tasks: tasks); + + if (!updateContent.Status) + { + _unitOfWorkManage.RollbackTran(); + return content.Error(updateContent.Message); + } + } + _outboundService.RworkOutboundOrderService.Repository.AddData(mesRworkOutboundOrder); + return content.OK("鎻愪緵杩斿簱鍗曟帴鏀舵垚鍔�"); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } + /// <summary> + /// 搴撳瓨鏉垮悓姝ユ帴鍙� + /// </summary> + public WebResponseContent ProductOutBoundSync(MesProductOutBound model) + { + WebResponseContent content = new WebResponseContent(); + try + { + Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_ProductOutBound.ToString()); + MESRoot<MesProductOutBound> root = new MESRoot<MesProductOutBound>() + { + From = "WMS", + DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Content = model + }; + JsonSerializerSettings settings = new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver() + }; + string request = JsonConvert.SerializeObject(root, settings); + string response = HttpMesHelper.Post(apiInfo.ApiAddress, request); + MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>(); + //璋冪敤鎺ュ彛 + if (mesResponseContent.BSucc == true) + { + content.OK(mesResponseContent.StrMsg); + } + else + { + content.Error(mesResponseContent.StrMsg); + } + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } } } 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 3e6d678..80bd640 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" @@ -50,6 +50,7 @@ using WIDESEA_ITaskInfoRepository; using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; +using WIDESEA_OutboundRepository; using WIDESEA_TaskInfoRepository; namespace WIDESEA_TaskInfoService @@ -69,7 +70,8 @@ private readonly IInboundRepository _inboundRepository; private readonly IInboundOrderService _inboundOrderService; private readonly IPalletTypeInfoRepository _palletTypeInfoRepository; - + private readonly IOutProStockInfoRepository _outProStockInfoRepository; + private readonly IOutboundRepository _outboundRepository; public ITaskRepository Repository => BaseDal; private Dictionary<string, OrderByType> _taskOrderBy = new() @@ -82,7 +84,7 @@ public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList(); - public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository) : base(BaseDal) + public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository) : base(BaseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; @@ -97,6 +99,8 @@ _inboundRepository = inboundRepository; _inboundOrderService = inboundOrderService; _palletTypeInfoRepository = palletTypeInfoRepository; + _outProStockInfoRepository = outProStockInfoRepository; + _outboundRepository = outboundRepository; } /// <summary> @@ -403,7 +407,7 @@ } } /// <summary> - /// 鎴愬搧浠撲换鍔″畬鎴� + /// 鎴愬搧浠撳叆搴撲换鍔″畬鎴� /// </summary> public WebResponseContent InProductCompleted(Dt_Task task) { @@ -480,7 +484,12 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔′俊鎭�"); } - + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + //鎴愬搧鍑哄簱浠诲姟瀹屾垚 + if (warehouse.WarehouseCode==WarehouseEnum.HA71.ToString()) + { + return OutProCompleted(task); + } Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode); Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); @@ -492,7 +501,6 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒拌揣浣嶄俊鎭�"); } - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum); List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>(); List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>(); @@ -611,6 +619,109 @@ return WebResponseContent.Instance.Error(ex.Message); } } + //鎴愬搧鍑哄簱浠诲姟瀹屾垚 + public WebResponseContent OutProCompleted(Dt_Task task) + { + WebResponseContent content = new WebResponseContent(); + try + { + //鑾峰彇璐т綅 + Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (locationInfo==null) + { + return content.Error("鏈壘鍒拌揣浣嶄俊鎭�"); + } + //鏍规嵁浠诲姟鑾峰彇鎴愬搧鍑哄簱璇︽儏浠诲姟鍙婄墿鏂欎俊鎭� + Dt_OutProStockInfo outProStockInfo = _outProStockInfoRepository.QueryFirst(x=>x.TaskNum==task.TaskNum); + if (outProStockInfo == null) + { + return content.Error("鏈壘鍒版垚鍝佸嚭搴撹鎯�"); + } + //鑾峰彇鎴愬搧鍑哄簱璁㈠崟 + Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == outProStockInfo.OrderNo).Includes(x => x.Details).First(); + if (proOutOrder==null) + { + return content.Error("鏈壘鍒版垚鍝佸嚭搴撹鍗�"); + } + //鑾峰彇鎴愬搧搴撳瓨 + 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("鏈壘鍒版垚鍝佸簱瀛樹俊鎭�"); + } + List<Dt_ProStockInfoDetail> proStockInfoDetails = proStockInfo.proStockInfoDetails; + if (proStockInfoDetails.Count<=0) + { + return content.Error("鎴愬搧搴撳瓨鏄庣粏"); + } + proStockInfoDetails.ForEach(x => + { + x.OutboundQuantity = 0; + x.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + }); + //澶勭悊搴撳瓨鏁版嵁 + //List<Dt_ProStockInfoDetail>? deleteStockDetails = null; + //List<Dt_ProStockInfoDetail>? updateStockDetails = null; + //(List<Dt_ProStockInfoDetail>?, List<Dt_ProStockInfoDetail>?) result = _stockService.ProStockInfoService.HandleOutProStock(proStockInfo); + //if (result.Item1!=null && result.Item1.Count>0) + //{ + // deleteStockDetails.AddRange(result.Item1); + //} + //if (result.Item1 != null && result.Item1.Count > 0) + //{ + // updateStockDetails.AddRange(updateStockDetails); + //} + //鑾峰彇鎴愬搧鍑哄簱鍗曟槑缁� + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x=>x.Id== outProStockInfo.OrderDetailId); + if (proOutOrderDetail==null) + { + return content.Error("鏈壘鍒板搴斾换鍔℃垚鍝佽鍗曟槑缁�"); + } + //if (deleteStockDetails?.Sum(x=>x.StockPcsQty)== proStockInfo.proStockInfoDetails.Sum(x=>x.StockPcsQty)) + //{ + proStockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + proStockInfo.LocationCode = "鍑鸿嚦鎴愬搧寰呭彂璐у尯"; + //} + task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + outProStockInfo.Status = OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); + _unitOfWorkManage.BeginTran(); + //璐т綅鍙樺姩璁板綍 + int beforeStatus = locationInfo.LocationStatus; + locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, proOutOrder?.ProOutOrderNo ?? "", task.TaskNum); + if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鏈紑濮�.ObjToInt()) + { + proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt(); + _outboundService.ProOutOrderService.UpdateData(proOutOrder); + } + //if (deleteStockDetails!=null && deleteStockDetails.Count>0) + //{ + // _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(deleteStockDetails, OperateTypeEnum.鑷姩瀹屾垚); + //} + //if (updateStockDetails!=null && updateStockDetails.Count>0) + //{ + _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); + _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); + _outProStockInfoRepository.UpdateData(outProStockInfo); + //} + //else + //{ + //_stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfo, OperateTypeEnum.鑷姩瀹屾垚); + //} + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); + _unitOfWorkManage.CommitTran(); + //MES鎴愬搧鍑哄簱鍚屾 + ShipmentOrderSync(MesOutSync(outProStockInfo, proOutOrderDetail)); + content.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } } } 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 d130c64..5fde36e 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" @@ -18,6 +18,7 @@ using MailKit.Search; using WIDESEA_External.Model; using WIDESEA_Core.CodeConfigEnum; +using Microsoft.AspNetCore.Mvc; namespace WIDESEA_TaskInfoService { @@ -81,16 +82,16 @@ /// <param name="ProOutNo">鍑哄簱璁㈠崟鍙�</param> /// <param name="StationCode">绔欏彴鍦板潃</param> /// <returns></returns> - public WebResponseContent OutProductTask(string ProOutNo, string StationCode) + public WebResponseContent OutProductTask(int[] keys, 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) + List<Dt_ProOutOrderDetail> _ProOutOrderDetails = _outboundRepository.ProOutOrderDetailRepository.QueryData(x => keys.Contains(x.Id)); + if (_ProOutOrderDetails.Count<=0) { - return content.Error("鍑哄簱璁㈠崟涓嶅瓨鍦�"); + return content.Error("鍕鹃�夎鍗曟槑缁嗕笉瀛樺湪"); } List<Dt_Task> tasks = new List<Dt_Task>(); List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>(); @@ -99,7 +100,7 @@ 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(proOutOrder); + OutProductTaskDataHandle(_ProOutOrderDetails); if (result.Item2 != null && result.Item2.Count > 0) { proStockInfos.AddRange(result.Item2); @@ -180,17 +181,23 @@ /// 澶勭悊鎴愬搧鍑哄簱鏁版嵁 /// </summary> /// <returns></returns> - public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProductTaskDataHandle(Dt_ProOutOrder proOutOrder) + public (List<Dt_Task>, List<Dt_ProStockInfo>?, List<Dt_ProOutOrderDetail>?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>?) OutProductTaskDataHandle(List<Dt_ProOutOrderDetail> proOutOrderDetails) { 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_ProOutOrderDetail> assignOutOrderDetails = 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); + (List<Dt_ProStockInfo>, List<Dt_ProOutOrderDetail>, List<Dt_OutProStockInfo>, List<Dt_LocationInfo>) result = _outboundService.ProOutOrderDetailService.AssignProStockOut(proOutOrderDetails); if (result.Item1!=null&&result.Item1.Count>0) { + //鑾峰彇鎴愬搧鍗� + Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.QueryFirst(x => x.Id == proOutOrderDetails.FirstOrDefault().ProOrderId); + if (proOutOrder==null) + { + throw new Exception("鏈壘鍒版垚鍝佽鍗�"); + } TaskTypeEnum typeEnum = proOutOrder.ProOrderType switch { (int)OutProTypeEnum.ProOut => TaskTypeEnum.OutProduct, diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs" index 8350a8f..1438bd1 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs" @@ -125,7 +125,7 @@ else return Instance.Error(content.Message); } /// <summary> - /// 鎺ユ敹ERP鎴愬搧鍑哄簱鍗曚俊鎭� + /// 鎺ユ敹ERP鎴愬搧鍑哄簱鍗曚俊鎭�(璁㈠崟鍑哄簱/瀵勫敭鍑哄簱) /// </summary> /// <returns></returns> [HttpPost, Route("ProductDeliveryOrder"), AllowAnonymous, MethodParamsValidate] @@ -134,6 +134,54 @@ WebResponseContent content = _outboundService.ProOutOrderService.ProductDeliveryOrder(erpProOutOrder.Content); if (content.Status) return Instance.OK(); else return Instance.Error(content.Message); + } + /// <summary> + /// 鎴愬搧瀵勫敭杞叆/璋冩嫧鍏ュ簱 + /// </summary> + /// <param name="root"></param> + /// <returns></returns> + [HttpPost, Route("ProductWarehousingOrder"), AllowAnonymous, MethodParamsValidate] + public ErpResponseContent ProductWarehousingOrder([FromBody] Root<ErpProductWarehousingOrderDTO> root) + { + return Instance.OK(); + } + /// <summary> + /// 鎴愬搧璋冩嫧鍑猴紙鐮斿彂锛� + /// </summary> + /// <param name="root"></param> + /// <returns></returns> + [HttpPost, Route("ProductTransferOrder"), AllowAnonymous, MethodParamsValidate] + public ErpResponseContent ProductTransferOrder([FromBody] Root<ErpProductTransferOrder> root) + { + return Instance.OK(); + } + /// <summary> + /// 鎴愬搧鎶ュ簾鍑哄簱鍗曟帴鏀� + /// </summary> + /// <param name="root"></param> + /// <returns></returns> + [HttpPost, Route("ProductScrappedOrder"), AllowAnonymous, MethodParamsValidate] + public ErpResponseContent ProductScrappedOrder([FromBody] Root<ErpProductScrappedOrderDTO> root) + { + return Instance.OK(); + } + /// <summary> + /// 鎴愬搧棰嗘枡鍑哄簱鍗曟帴鏀� + /// </summary> + /// <param name="root"></param> + /// <returns></returns> + [HttpPost, Route("ProductOutOrder"), AllowAnonymous, MethodParamsValidate] + public ErpResponseContent ProductOutOrder([FromBody] Root<ErpProOutLingOrder> root) + { + return Instance.OK(); + } + /// <summary> + /// 閿�鍞寚娲惧崟鎺ユ敹 + /// </summary> + [HttpPost, Route("ProductSpecifyVer"), AllowAnonymous, MethodParamsValidate] + public ErpResponseContent ProductSpecifyVer([FromBody] Root<ErpProductSpecifyVerDTO> root) + { + return Instance.OK(); } /// <summary> /// 鎺ユ敹ERP閫�鏂欏崟淇℃伅 @@ -216,5 +264,35 @@ { return _invokeERPService.InvokeProOutApi(outOrderModel); } + /// <summary> + /// 鎴愬搧浠撴鎶ュ簾鍑哄簱鎺ㄩ�丒RP + /// </summary> + /// <param name="checkModel"></param> + /// <returns></returns> + [HttpPost, Route("InvokeProCheckApi"), AllowAnonymous] + public string InvokeProCheckApi([FromBody] ERPProductCheckModel checkModel) + { + return _invokeERPService.InvokeProCheckApi(checkModel); + } + /// <summary> + /// 鎴愬搧瓒呭懆鏈熸姤搴熸帹閫丒Rp + /// </summary> + /// <param name="sheetModel"></param> + /// <returns></returns> + [HttpPost, Route("InvokeProScrapSheetApi"), AllowAnonymous] + public string InvokeProScrapSheetApi([FromBody] ERPScrapSheetModel sheetModel) + { + return _invokeERPService.InvokeProScrapSheetApi(sheetModel); + } + /// <summary> + /// 鎴愬搧鐩樼偣鐩樿耽/鐩樹簭 + /// </summary> + /// <param name="stockCheckModel"></param> + /// <returns></returns> + [HttpPost, Route("InvokeProStockCheckApi"), AllowAnonymous] + public string InvokeProStockCheckApi([FromBody] ERPProStockCheckModel stockCheckModel) + { + return _invokeERPService.InvokeProStockCheckApi(stockCheckModel); + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs" index 8ccb89d..4ab23d9 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/MES/MesController.cs" @@ -186,9 +186,19 @@ /// <param name="model"></param> /// <returns></returns> [HttpPost,Route("RworkTask"),AllowAnonymous] - public MesResponseContent RworkTask([FromBody] RworkTaskModel model) + public MesResponseContent RworkTask([FromBody] Root<RworkTaskModel> model) { - return _taskService.RworkTask(model); + return _taskService.RworkTask(model.Content); + } + /// <summary> + /// 搴撳瓨鏉垮嚭搴撳悓姝ユ帴鍙� + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + [HttpPost, Route("ProductOutBoundSync"), AllowAnonymous] + public WebResponseContent ProductOutBoundSync([FromBody] MesProductOutBound model) + { + return _taskService.ProductOutBoundSync(model); } /// <summary> /// 鐢熸垚MESPP浠撳ぇ鍗峰嚭搴撲换鍔� diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs" index 9ddad80..49e980c 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/ProOutOrderController.cs" @@ -1,4 +1,6 @@ -锘縰sing Microsoft.AspNetCore.Mvc; +锘縰sing Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using WIDESEA_Core; using WIDESEA_Core.BaseController; using WIDESEA_IOutboundService; using WIDESEA_Model.Models; @@ -15,5 +17,14 @@ public ProOutOrderController(IProOutOrderService service) : base(service) { } + /// <summary> + /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱 + /// </summary> + /// <returns></returns> + [HttpPost, Route("OutProductPK"), AllowAnonymous] + public WebResponseContent OutProductPK([FromBody] string[] OutPKCodes, string ProOutNo) + { + return Service.OutProductPK(OutPKCodes, ProOutNo); + } } } 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 e381dba..f9d4178 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" @@ -42,7 +42,7 @@ { return Service.RequestInboundTask(saveModel); } - + /// <summary> /// 绌虹鍏ュ簱 /// </summary> @@ -183,9 +183,18 @@ /// <param name="StationCode">绔欏彴鍦板潃</param> /// <returns></returns> [HttpPost, HttpGet, Route("OutProductTask"), AllowAnonymous] - public WebResponseContent OutProductTask(string ProOutNo, string StationCode) + public WebResponseContent OutProductTask([FromBody] int[] keys, string StationCode) { - return Service.OutProductTask(ProOutNo, StationCode); + return Service.OutProductTask(keys, StationCode); + } + + /// <summary> + /// 鐢熸垚鎴愬搧鎻愬簱浠诲姟 + /// </summary> + [HttpPost, HttpGet, Route("OutProRworkTask"), AllowAnonymous] + public WebResponseContent OutProRworkTask([FromBody] int[] keys, string StationCode) + { + return Service.OutProductTask(keys, StationCode); } ///// <summary> ///// 鐢熸垚MESPP浠撳ぇ鍗峰嚭搴撲换鍔� -- Gitblit v1.9.3