From a0beecb00c6c0c8247b0c9b29c440369f583eb40 Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期一, 17 二月 2025 08:55:59 +0800 Subject: [PATCH] 退料,调拨优化等 --- 代码管理/淮安PDA/uview-ui/libs/request/index.js | 2 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/辅料仓/AGV_FLExtend.cs | 2 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReturnOrderDetailService.cs | 16 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReturnOrderRepository.cs | 18 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderDetailService.cs | 21 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs | 56 + 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs | 4 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPReturnModel.cs | 102 +++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReturnOrderRepository.cs | 17 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs | 3 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs | 53 + 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReturnOrderEnum.cs | 49 + 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs | 7 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Core/CodeConfigEnum/RuleCodeEnum.cs | 7 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs | 2 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs | 2 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/78f8b249-7154-4dec-a3ca-180499c24279.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs | 9 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReturnOrderService.cs | 31 + 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs | 412 +++++++++++++- 代码管理/淮安PDA/common/config.js | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs | 15 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReturnOrderDetail.cs | 109 +++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReturnOrderDetailRepository.cs | 17 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0f114663-dce3-4d0e-9b27-bfeaa6dfe2c7.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8a5ddf5d-8657-4a5f-ac29-bc17a0fcefb0.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReturnOrder.cs | 75 ++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs | 6 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs | 235 ++++++++ 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpReturnOrderDTO.cs | 127 ++++ 代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/637a2026-85ca-4ce6-92b0-9adf059b8fc4.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj | 1 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReturnOrderController.cs | 40 + 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/IERPService/IInvokeERPService.cs | 7 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_External/ERPService/InvokeERPService.cs | 17 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs | 16 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs | 8 代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3e9cc858-6ac2-443f-971a-ce566dc6ef41.vsidx | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json | 2 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs | 12 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 87 +- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs | 34 + /dev/null | 0 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReturnOrderDetailRepository.cs | 18 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/TaskEnum/TaskTypeEnum.cs | 11 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpInOrderDTO.cs | 2 52 files changed, 1,556 insertions(+), 118 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/054489bd-234b-4089-9947-38a13fcde750.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/054489bd-234b-4089-9947-38a13fcde750.vsidx" deleted file mode 100644 index 64ba42e..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/054489bd-234b-4089-9947-38a13fcde750.vsidx" +++ /dev/null Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3e9cc858-6ac2-443f-971a-ce566dc6ef41.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3e9cc858-6ac2-443f-971a-ce566dc6ef41.vsidx" new file mode 100644 index 0000000..fb3c762 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/3e9cc858-6ac2-443f-971a-ce566dc6ef41.vsidx" Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9dd1bf7a-dee2-4f6e-8ac4-0b6e1e963918.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9dd1bf7a-dee2-4f6e-8ac4-0b6e1e963918.vsidx" deleted file mode 100644 index cb9d878..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9dd1bf7a-dee2-4f6e-8ac4-0b6e1e963918.vsidx" +++ /dev/null Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/fb1ebcba-9e21-4a69-97c4-99bc37244eb9.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/fb1ebcba-9e21-4a69-97c4-99bc37244eb9.vsidx" deleted file mode 100644 index a522fd9..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/fb1ebcba-9e21-4a69-97c4-99bc37244eb9.vsidx" +++ /dev/null Binary files differ 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 add9188..0e971ec 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" @@ -35,6 +35,11 @@ [Description("绌虹鍑哄簱")] OutEmpty = 140, /// <summary> + /// 璋冩嫧鍑哄簱 + /// </summary> + [Description("璋冩嫧鍑哄簱")] + OutAllocate = 150, + /// <summary> /// MES鍑哄簱 /// </summary> [Description("MES鍑哄簱")] @@ -86,6 +91,12 @@ MesMatReturn = 560, /// <summary> + /// 璋冩嫧鍏ュ簱 + /// </summary> + [Description("璋冩嫧鍏ュ簱")] + InAllocate = 570, + + /// <summary> /// 绾胯竟浠撳叆搴� /// </summary> [Description("绾胯竟浠撳叆搴�")] diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" index 16fbf0e..8b17b85 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs" @@ -109,7 +109,7 @@ if (agvUpdateModel.Method == "end") { - if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt()) PutFinish(task.NextAddress); + if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) PutFinish(task.NextAddress); _taskService.TaskCompleted(task.TaskNum); } agvResponseContent.Code = "0"; diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" index c8769f0..9f46db2 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Program.cs" @@ -148,6 +148,6 @@ app.MapControllers(); -BarcodeScanner.StartServer(); +//BarcodeScanner.StartServer(); app.Run(); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\350\276\205\346\226\231\344\273\223/AGV_FLExtend.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\350\276\205\346\226\231\344\273\223/AGV_FLExtend.cs" index 5770b32..1a07ce5 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\350\276\205\346\226\231\344\273\223/AGV_FLExtend.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/\350\276\205\346\226\231\344\273\223/AGV_FLExtend.cs" @@ -27,7 +27,7 @@ { try { - if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt()) + if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) task.CurrentAddress = GetAGVAddress(task.CurrentAddress); else task.NextAddress = GetAGVAddress(task.NextAddress); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0f114663-dce3-4d0e-9b27-bfeaa6dfe2c7.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0f114663-dce3-4d0e-9b27-bfeaa6dfe2c7.vsidx" new file mode 100644 index 0000000..8ba20f3 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0f114663-dce3-4d0e-9b27-bfeaa6dfe2c7.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/1f069ca3-0197-4b08-8580-6ad491643add.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1f069ca3-0197-4b08-8580-6ad491643add.vsidx" deleted file mode 100644 index 5ead7aa..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/1f069ca3-0197-4b08-8580-6ad491643add.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/5d432982-08c1-4c2c-9cb4-199bb27be3a0.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5d432982-08c1-4c2c-9cb4-199bb27be3a0.vsidx" deleted file mode 100644 index 99f5f88..0000000 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/5d432982-08c1-4c2c-9cb4-199bb27be3a0.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/637a2026-85ca-4ce6-92b0-9adf059b8fc4.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/637a2026-85ca-4ce6-92b0-9adf059b8fc4.vsidx" new file mode 100644 index 0000000..c7e9ff1 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/637a2026-85ca-4ce6-92b0-9adf059b8fc4.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/78f8b249-7154-4dec-a3ca-180499c24279.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/78f8b249-7154-4dec-a3ca-180499c24279.vsidx" new file mode 100644 index 0000000..3e5a8e7 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/78f8b249-7154-4dec-a3ca-180499c24279.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/8a5ddf5d-8657-4a5f-ac29-bc17a0fcefb0.vsidx" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8a5ddf5d-8657-4a5f-ac29-bc17a0fcefb0.vsidx" new file mode 100644 index 0000000..d6c2eff --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8a5ddf5d-8657-4a5f-ac29-bc17a0fcefb0.vsidx" Binary files differ diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs" index 904222d..2d4174a 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/InboundOrderMenu.cs" @@ -88,6 +88,11 @@ /// 鍏朵粬鍏ュ簱鍗� /// </summary> [Description("鍏朵粬鍏ュ簱鍗�")] - Other = 130 + Other = 130, + /// <summary> + /// 瀹緵鍥炴敹 + /// </summary> + [Description("瀹緵鍥炴敹")] + CustomerRecovery=135 } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs" index 3b43f33..6e3d2e7 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/OutboundOrderEnum.cs" @@ -91,6 +91,12 @@ /// 鍏朵粬鍑哄簱鍗� /// </summary> [Description("鍏朵粬鍑哄簱鍗�")] - Other = 235 + Other = 235, + + /// <summary> + /// 缁翠慨鍙戞枡鍗� + /// </summary> + [Description("缁翠慨鍙戞枡鍗�")] + MaintenanceIssue = 240, } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReturnOrderEnum.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReturnOrderEnum.cs" new file mode 100644 index 0000000..1a04ffb --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Common/OrderEnum/ReturnOrderEnum.cs" @@ -0,0 +1,49 @@ +锘縰sing System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEA_Common.OrderEnum +{ + /// <summary> + /// 閫�鏂欑姸鎬� + /// </summary> + public enum ReturnOrderStatusEnum + { + /// <summary> + /// 鏈��鏂� + /// </summary> + [Description("鏈��鏂�")] + NotReturn = 0, + + /// <summary> + /// 閫�鏂欎腑 + /// </summary> + [Description("閫�鏂欎腑")] + Returning = 1, + + /// <summary> + /// 閫�鏂欏畬鎴� + /// </summary> + [Description("閫�鏂欏畬鎴�")] + Returned = 2 + } + /// <summary> + /// 閫�鏂欑被鍨� + /// </summary> + public enum ReturnOrderTypeEnum + { + /// <summary> + /// 鏍囧噯閫�鏂� + /// </summary> + [Description("鏍囧噯閫�鏂�")] + StandardReturn = 1, + /// <summary> + /// Bom閫�鏂� + /// </summary> + [Description("Bom閫�鏂�")] + BomReturn = 2 + } +} 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 1013730..bd83eec 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" @@ -37,6 +37,12 @@ OutEmpty = 140, /// <summary> + /// 璋冩嫧鍑哄簱 + /// </summary> + [Description("璋冩嫧鍑哄簱")] + OutAllocate = 150, + + /// <summary> /// MES鍑哄簱 /// </summary> [Description("MES鍑哄簱")] @@ -88,6 +94,12 @@ MesMatReturn = 560, /// <summary> + /// 璋冩嫧鍏ュ簱 + /// </summary> + [Description("璋冩嫧鍏ュ簱")] + InAllocate = 570, + + /// <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 f270e87..5692d8d 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" @@ -44,6 +44,11 @@ /// 鍏ユ枡鍗曞彿缂栫爜瑙勫垯 /// </summary> [Description("鍏ユ枡鍗曞彿缂栫爜瑙勫垯")] - RLCodeRule + RLCodeRule, + /// <summary> + /// 閫�鏂欏崟鍙风紪鐮佽鍒� + /// </summary> + [Description("閫�鏂欏崟鍙风紪鐮佽鍒�")] + TLCodeRule, } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpInOrderDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpInOrderDTO.cs" index 25ccfa0..2846683 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpInOrderDTO.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpInOrderDTO.cs" @@ -78,7 +78,7 @@ /// 澶囨敞 /// </summary> [PropertyValidate("澶囨敞")] - public string Node { get; set; } + public string Note { get; set; } /// <summary> /// 鍥炴敹绫诲瀷 diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpReturnOrderDTO.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpReturnOrderDTO.cs" new file mode 100644 index 0000000..6a3c68f --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpReturnOrderDTO.cs" @@ -0,0 +1,127 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.Attributes; + +namespace WIDESEA_DTO.ERP +{ + /// <summary> + /// 鏍囧噯/bom閫�鏂� + /// </summary> + [ModelValidate] + public class ErpReturnOrderDTO + { + /// <summary> + /// 鎿嶄綔绫诲瀷<br/> + /// 1锛氭柊澧�<br/> + /// 2锛氫慨鏀�<br/> + /// 3锛氬垹闄�(鍒犻櫎鍙鏄庣粏琛屽彿鍜岄鏂欏崟鍙�) + /// </summary> + [PropertyValidate("鎿嶄綔绫诲瀷", NotNullAndEmpty = true, Check = new object[] { 1, 2, 3 })] + public int Way { get; set; } + + /// <summary> + /// 閫�鏂欒鍗曞彿 + /// </summary> + [PropertyValidate("閫�鏂欒鍗曞彿", NotNullAndEmpty = true)] + public string OrderNo { get; set; } + + /// <summary> + /// 浠撳簱缂栧彿 + /// </summary> + [PropertyValidate("浠撳簱缂栧彿", NotNullAndEmpty = true)] + public string WaCode { get; set; } + + /// <summary> + /// 鍗曟嵁澶囨敞 + /// </summary> + public string? Note { get; set; } + + /// <summary> + /// 璁㈠崟绫诲瀷<br/> + /// 1锛氭爣鍑嗛��鏂�<br/> + /// 2锛歜om閫�鏂�<br/> + /// </summary> + [PropertyValidate("璁㈠崟绫诲瀷", NotNullAndEmpty = true, Check = new object[] { 1, 2 })] + public int OrderType { get; set; } + + /// <summary> + /// 鏄惁鐮斿彂 + /// 0:鍚� + /// 1:鏄� + /// </summary> + [PropertyValidate("鏄惁鐮斿彂", NotNullAndEmpty = true, Check = new object[] { 0, 1 })] + public int IsDev { get; set; } + + /// <summary> + /// 鍒楄〃 + /// </summary> + [PropertyValidate("鍒楄〃", NotNullAndEmpty = true)] + public List<ReturnDetail> Issitem { get; set; } + } + /// <summary> + /// 閫�鏂欐槑缁� + /// </summary> + [ModelValidate] + public class ReturnDetail + { + /// <summary> + /// 鐢宠鍗曞彿(鍙戞枡鍗�) + /// </summary> + [PropertyValidate("鐢宠鍗曞彿", NotNullAndEmpty = true)] + public string PickCode { get; set; } + + /// <summary> + /// 鐢宠鍗曞彿琛屽彿(鍙戞枡鍗曟槑缁嗚鍙�) + /// </summary> + [PropertyValidate("鐢宠鍗曞彿琛屽彿", NotNullAndEmpty = false)] + public int? ApplyRow { get; set; } + + /// <summary> + /// 閫�鏂欒鍙� + /// </summary> + [PropertyValidate("閫�鏂欒鍙�", NotNullAndEmpty = true)] + public int RowId { get; set; } + + /// <summary> + /// 閫�鏂欎俊鎭� + /// </summary> + [PropertyValidate("閫�鏂欎俊鎭�", NotNullAndEmpty = true)] + public List<ReturnInfo> PickList { get; set; } + } + /// <summary> + /// 閫�鏂欎俊鎭� + /// </summary> + [ModelValidate] + public class ReturnInfo + { + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + [PropertyValidate("鐗╂枡缂栫爜", NotNullAndEmpty = true)] + public string MCode { get; set; } + + /// <summary> + /// 鍙��鏁伴噺 + /// </summary> + [PropertyValidate("鍙��鏁伴噺", NotNullAndEmpty = true)] + public float Qty { get; set; } + + /// <summary> + /// 鍗曚綅 + /// </summary> + [PropertyValidate("鍗曚綅", NotNullAndEmpty = true)] + public string Unit { get; set; } + + /// <summary> + /// 閫�鍥炴暟閲� + /// </summary> + [PropertyValidate("閫�鍥炴暟閲�", NotNullAndEmpty = true)] + public float ReturnQty { get; set; } + + public string? Code { 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 59750dd..92f9b70 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" @@ -108,6 +108,23 @@ return response; } /// <summary> + /// ERP閫�鏂欎笂鎶ユ帴鍙h皟鐢� + /// </summary> + public string InvokeReturnApi(ERPReturnModel returnModel) + { + Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.InvokeErpApi.ToString()); + ERPBaseModel<ERPReturnModel> model = new ERPBaseModel<ERPReturnModel>() + { + Data = returnModel, + Desc = "鏉愭枡閫�搴�", + Type = "importMaterialsIssueNoteWMS", + SecurityCode = "TeChuang" + }; + string request = JsonConvert.SerializeObject(model, settings).Replace("issitem", "Issitem"); + 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 c8ff954..2748335 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" @@ -36,9 +36,10 @@ /// <summary> /// ERP鐗╂枡鍑哄簱鎺ュ彛璋冪敤 /// </summary> - /// <param name="outboundModel"></param> - /// <returns></returns> - //string InvokeOutboundOrderApi(ERPOutboundModel outboundModel); string InvokeOutStandardsApi(ERPIssueModel issueModel); + /// <summary> + /// ERP閫�鏂欎笂鎶ユ帴鍙h皟鐢� + /// </summary> + string InvokeReturnApi(ERPReturnModel returnModel); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPReturnModel.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPReturnModel.cs" new file mode 100644 index 0000000..c9ed632 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_External/Model/ERPReturnModel.cs" @@ -0,0 +1,102 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WIDESEA_External.Model +{ + /// <summary> + /// 閫�鏂欏崟鍥炰紶ERP + /// </summary> + public class ERPReturnModel + { + /// <summary> + /// 鎿嶄綔鍊� + /// </summary> + public int Way { get; set; } + /// <summary> + /// 涓婚敭鍊� + /// </summary> + public string UniqueTag { get; set; } + /// <summary> + /// 閫�鏂欏崟鍙� + /// </summary> + public string Code { get; set; } + /// <summary> + /// 浠撳簱缂栫爜 + /// </summary> + public string WarehouseCode { get; set; } + /// <summary> + /// 鍗曟嵁澶囨敞 + /// </summary> + public string Docremark { get; set; } + /// <summary> + /// 閫�鏂欐椂闂� + /// </summary> + public string Createtime { get; set; } + /// <summary> + /// 閫�鏂欎汉鍛� + /// </summary> + public string Createuser { get; set; } + /// <summary> + /// 鏄惁鐮斿彂 + /// </summary> + public int IsDev { get; set; } + /// <summary> + /// + /// </summary> + public List<ReturnItem> Issitem { get; set; } + } + public class ReturnItem + { + /// <summary> + /// 閫�鏂欑敵璇峰崟鍙� + /// </summary> + public string Pickcode { get; set; } + /// <summary> + /// 閫�鏂欒鍙� + /// </summary> + public int Rowindex { get; set; } + /// <summary> + /// 閫�鏂欎俊鎭� + /// </summary> + public List<ReturnPickItem> PickList { get; set; } + } + + public class ReturnPickItem + { + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + public string Material { get; set; } + /// <summary> + /// 鎵规鏁伴噺鎬诲拰 + /// </summary> + public float Qty { get; set; } + /// <summary> + /// + /// </summary> + public List<ReturnDataItem> Dataitem { get; set; } + } + + public class ReturnDataItem + { + /// <summary> + /// 鎵规鍙� + /// </summary> + public string Lotno { get; set; } + /// <summary> + /// 閫�鍥炴暟閲� + /// </summary> + public float Qty { get; set; } + /// <summary> + /// 鍌ㄥ尯 + /// </summary> + public string Location { get; set; } + /// <summary> + /// 鍒堕�犻儴浠� + /// </summary> + public string Msfpart { get; set; } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs" index ec7fdbe..f1c6ac1 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IInboundRepository.cs" @@ -20,5 +20,7 @@ IPurchaseOrderDetailRepository PurchaseOrderDetailRepository { get; } IPurchaseOrderRepository PurchaseOrderRepository { get; } + IReturnOrderRepository ReturnOrderRepository { get; } + IReturnOrderDetailRepository ReturnOrderDetailRepository { get; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReturnOrderDetailRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReturnOrderDetailRepository.cs" new file mode 100644 index 0000000..d48ac9d --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReturnOrderDetailRepository.cs" @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IInboundRepository +{ + /// <summary> + /// 閫�鏂欏崟鏄庣粏浠撳偍鎺ュ彛灞� + /// </summary> + public interface IReturnOrderDetailRepository : IRepository<Dt_ReturnOrderDetail> + { + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReturnOrderRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReturnOrderRepository.cs" new file mode 100644 index 0000000..a4d689e --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundRepository/IReturnOrderRepository.cs" @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IInboundRepository +{ + /// <summary> + /// 閫�鏂欏崟浠撳偍鎺ュ彛灞� + /// </summary> + public interface IReturnOrderRepository : IRepository<Dt_ReturnOrder> + { + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" index 23a51f2..26760b3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs" @@ -6,6 +6,7 @@ using WIDESEA_Core; using WIDESEA_Core.BaseServices; using WIDESEA_DTO; +using WIDESEA_DTO.ERP; using WIDESEA_DTO.Inbound; using WIDESEA_External.Model; using WIDESEA_IInboundRepository; @@ -33,12 +34,18 @@ /// <returns></returns> WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder); /// <summary> - /// + /// 閫�鏂欏畬鎴愪笂鎶ヨ嚦ERP /// </summary> - /// <param name="warehouse"></param> - /// <param name="palletCode"></param> - /// <param name="materielInfo"></param> + public WebResponseContent FeedbackReturnOrder(Dt_InboundOrder inboundOrder,Dt_ReturnOrder returnOrder); + /// <summary> + /// 鏍规嵁浠撳簱鍜屾墭鐩樺彿鑾峰彇鎵樼洏绫诲瀷 + /// </summary> /// <returns></returns> int GetPalletType(Dt_Warehouse warehouse, string palletCode); + /// <summary> + /// 鍏朵粬鍏ュ簱鍗曟帴鏀�(璋冩嫈鍏ヤ粨,瀹緵鍥炴敹,鐗╂枡閿�鍞��璐�) + /// </summary> + /// <returns></returns> + WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO model); } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReturnOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReturnOrderDetailService.cs" new file mode 100644 index 0000000..233ee1c --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReturnOrderDetailService.cs" @@ -0,0 +1,16 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseServices; +using WIDESEA_IInboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IInboundService +{ + public interface IReturnOrderDetailService : IService<Dt_ReturnOrderDetail> + { + IReturnOrderDetailRepository Repository { get; } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReturnOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReturnOrderService.cs" new file mode 100644 index 0000000..4b470a0 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReturnOrderService.cs" @@ -0,0 +1,31 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core; +using WIDESEA_Core.BaseServices; +using WIDESEA_DTO.ERP; +using WIDESEA_IInboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_IInboundService +{ + public interface IReturnOrderService : IService<Dt_ReturnOrder> + { + IReturnOrderRepository Repository { get; } + /// <summary> + /// 鑾峰彇鎺ユ敹閫�鏂欏崟 + /// </summary> + WebResponseContent ReturnOrder(ErpReturnOrderDTO model); + /// <summary> + /// 鑾峰彇閫�鏂欏崟 + /// </summary> + WebResponseContent GetReturnOrders(SaveModel saveModel); + /// <summary> + /// 纭閫�搴撴牴鎹��搴撳崟鐢熸垚鍏ュ簱鍗� + /// </summary> + /// <returns></returns> + WebResponseContent IsReturnCreateInOrder(int returnId); + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs" index b5d5b45..79e272f 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/InboundRepository.cs" @@ -20,8 +20,10 @@ public IPurchaseOrderDetailRepository PurchaseOrderDetailRepository { get; } public IPurchaseOrderRepository PurchaseOrderRepository { get; } + public IReturnOrderRepository ReturnOrderRepository { get; } + public IReturnOrderDetailRepository ReturnOrderDetailRepository { get; } - public InboundRepository(IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository, IReceiveOrderDetailRepository receiveOrderDetailRepository, IReceiveOrderRepository receiveOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IPurchaseOrderRepository purchaseOrderRepository) + public InboundRepository(IInboundOrderDetailRepository inboundOrderDetailRepository, IInboundOrderRepository inboundOrderRepository, IReceiveOrderDetailRepository receiveOrderDetailRepository, IReceiveOrderRepository receiveOrderRepository, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IPurchaseOrderRepository purchaseOrderRepository, IReturnOrderRepository returnOrderRepository, IReturnOrderDetailRepository returnOrderDetailRepository) { InboundOrderDetailRepository = inboundOrderDetailRepository; InboundOrderRepository = inboundOrderRepository; @@ -29,6 +31,8 @@ ReceiveOrderRepository = receiveOrderRepository; PurchaseOrderDetailRepository = purchaseOrderDetailRepository; PurchaseOrderRepository = purchaseOrderRepository; + ReturnOrderRepository = returnOrderRepository; + ReturnOrderDetailRepository = returnOrderDetailRepository; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReturnOrderDetailRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReturnOrderDetailRepository.cs" new file mode 100644 index 0000000..09ed473 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReturnOrderDetailRepository.cs" @@ -0,0 +1,18 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_IInboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_InboundRepository +{ + public class ReturnOrderDetailRepository : RepositoryBase<Dt_ReturnOrderDetail>, IReturnOrderDetailRepository + { + public ReturnOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) + { + } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReturnOrderRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReturnOrderRepository.cs" new file mode 100644 index 0000000..a72ab45 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundRepository/ReturnOrderRepository.cs" @@ -0,0 +1,18 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseRepository; +using WIDESEA_IInboundRepository; +using WIDESEA_Model.Models; + +namespace WIDESEA_InboundRepository +{ + public class ReturnOrderRepository : RepositoryBase<Dt_ReturnOrder>, IReturnOrderRepository + { + public ReturnOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage) + { + } + } +} 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 e7acce2..4d71ad1 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" @@ -71,43 +71,158 @@ _palletTypeInfoRepository = palletTypeInfoRepository; } /// <summary> - /// 鍏朵粬鍏ュ簱鍗曞垱寤� + /// 鍏朵粬鍏ュ簱鍗曟帴鏀�(璋冩嫈鍏ヤ粨,瀹緵鍥炴敹,鐗╂枡閿�鍞��璐�) /// </summary> /// <returns></returns> - public WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO erpInOrder) + public WebResponseContent ReceiveWarehousingOrder(ErpInOrderDTO model) + { + try + { + return model.Way switch + { + 1 => AddSingOrder(model), + 2 => UpdateSingOrder(model), + 3 => DeleteSingOrder(model), + _ => WebResponseContent.Instance.Error($"鎿嶄綔绫诲瀷涓嶅瓨鍦�,Way:{model.Way}"), + }; + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + /// <summary> + /// 鏂板鍗曟嵁 + /// </summary> + public WebResponseContent AddSingOrder(ErpInOrderDTO model) { WebResponseContent content = new WebResponseContent(); try { - //鑾峰彇浠撳簱淇℃伅 - Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseCode == erpInOrder.WaId); + //鑾峰彇鐗╂枡淇℃伅 + Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode==model.MCode); + if (materielInfo==null) + { + return content.Error($"鐗╂枡{model.MCode}涓嶅瓨鍦�!"); + } + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaId); if (warehouse == null) { - return content.Error("鏈壘鍒颁粨搴撲俊鎭�"); + return content.Error($"鏈壘鍒颁粨搴撲俊鎭�"); } - //鑾峰彇鏄惁瀛樺湪璁㈠崟 - Dt_InboundOrder inboundOrder = BaseDal.QueryFirst(x => x.InboundOrderNo == erpInOrder.OrderNo); - if (erpInOrder.Way == 1) + Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).Includes(x=>x.Details).First(); + if (inboundOrderOld!=null) { - if (inboundOrder != null) + if (inboundOrderOld.OrderStatus!= OrderDetailStatusEnum.New.ObjToInt()) { - + return content.Error($"{model.OrderNo}鍗曟嵁宸插紑濮�!"); } - } - else if (erpInOrder.Way == 2) - { - + Dt_InboundOrderDetail? inboundOrderDetailOld = inboundOrderOld.Details?.FirstOrDefault(x => x.RowNo == model.RowNo.ObjToInt() && x.MaterielCode == model.MCode); + if (inboundOrderDetailOld!=null) + { + inboundOrderDetailOld.OrderQuantity += model.Qty; + _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetailOld); + } + else + { + Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail() + { + OrderId= inboundOrderOld.Id, + MaterielCode = model.MCode, + BatchNo = "", + OrderQuantity = model.Qty, + ReceiptQuantity = 0, + OverInQuantity = 0, + OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), + Unit = materielInfo.MaterielUnit, + RowNo = model.RowNo.ObjToInt(), + MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec + }; + _inboundRepository.InboundOrderDetailRepository.AddData(orderDetail); + } } else { + Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail() + { + MaterielCode = model.MCode, + BatchNo = "", + OrderQuantity = model.Qty, + ReceiptQuantity = 0, + OverInQuantity = 0, + OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), + Unit = materielInfo.MaterielUnit, + RowNo = model.RowNo.ObjToInt(), + MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec + }; + Dt_InboundOrder inboundOrder = new Dt_InboundOrder() + { + UpperOrderNo = model.OrderNo, + WarehouseId = warehouse.WarehouseId, + SupplierId = "", + OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(), + CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), + Remark = model.Note, + Details = new List<Dt_InboundOrderDetail> { orderDetail } + }; + switch (model.OType) + { + case 1: + inboundOrder.OrderType = InOrderTypeEnum.Allocat.ObjToInt(); + break; + case 3: + inboundOrder.OrderType = InOrderTypeEnum.CustomerRecovery.ObjToInt(); + break; + case 6: + inboundOrder.OrderType = InOrderTypeEnum.SaleReturn.ObjToInt(); + break; + default: + break; + }; + Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand(); } - return content.OK(); + return content.OK("鎴愬姛"); } catch (Exception ex) { content.Error(ex.Message); } + return content; + } + /// <summary> + /// 淇敼鍗曟嵁 + /// </summary> + public WebResponseContent UpdateSingOrder(ErpInOrderDTO model) + { + WebResponseContent content = new WebResponseContent(); + try + { + //鑾峰彇鍗曟嵁淇℃伅 + Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.OrderNo).First(); + if (inboundOrder == null) + { + return content.Error($"鍗曟嵁{model.OrderNo}涓嶅瓨鍦�!"); + } + if (inboundOrder.OrderStatus>=InOrderStatusEnum.鍏ュ簱涓�.ObjToInt()) + { + return content.Error($"鍗曟嵁{model.OrderNo}鍏ュ簱涓垨宸插畬鎴�"); + } + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + /// <summary> + /// 鍒犻櫎鍗曟嵁 + /// </summary> + public WebResponseContent DeleteSingOrder(ErpInOrderDTO model) + { + WebResponseContent content = new WebResponseContent(); return content; } public WebResponseContent GetInboundOrders(SaveModel saveModel) @@ -289,16 +404,16 @@ int oldCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count; Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); - if (receiveOrder == null) + if (receiveOrder == null && inboundOrder.OrderType==InOrderTypeEnum.Purchase.ObjToInt()) { return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗�"); } - if (receiveOrder.Details == null || receiveOrder.Details.Count <= 0) + if ((receiveOrder?.Details == null || receiveOrder?.Details.Count <= 0) && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt()) { return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鏀惰揣鍗曟槑缁�"); } - List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList(); + List<string> purchaseOrderNos = receiveOrder?.Details.Select(x => x.PurchaseOrderNo).ToList(); List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); @@ -325,7 +440,7 @@ if (!inboundOrderDetails.Any(x => x.BatchNo == model.LotNo)) return WebResponseContent.Instance.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欐壒娆°�恵model.LotNo}銆�"); } - if (receiveOrder.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null) + if (receiveOrder?.Details.FirstOrDefault(x => x.MaterielCode == materielCode) == null && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt()) { return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�"); } @@ -342,9 +457,10 @@ List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); List<int> detailKeys = new List<int>(); + Dt_ReturnOrder? returnOrder = null; foreach (var model in models) { - if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null) + if (purchaseOrderNos?.FirstOrDefault(x => x == model.PurchaseOrderNo) == null && inboundOrder.OrderType == InOrderTypeEnum.Purchase.ObjToInt()) { return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟"); } @@ -392,6 +508,21 @@ if (inboundOrder.Details.Count == oldCount) { inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt(); + //鍒ゆ柇鏄惁涓洪��鏂欏叆搴撳崟 + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); + returnOrder.ReturnOrderStatus = ReturnOrderStatusEnum.Returned.ObjToInt(); + foreach (var item in inboundOrder.Details) + { + Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x => x.MCode == item.MaterielCode); + if (returnOrderDetail != null) + { + returnOrderDetail.OverReturnQty = item.OverInQuantity; + returnOrderDetail.OrderDetailStatus = ReturnOrderStatusEnum.Returned.ObjToInt(); + } + } + } } else inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt(); @@ -408,12 +539,26 @@ } _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails); _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); + if (returnOrder != null) + { + _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder); + _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details); + } _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.Inbound); _unitOfWorkManage.CommitTran(); #region 鍏ュ簱瀹屾垚涓婃姤ERP - if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()) - FeedbackInboundOrder(inboundOrder); + if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt()) + { + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + FeedbackReturnOrder(inboundOrder, returnOrder); + } + else + { + FeedbackInboundOrder(inboundOrder); + } + } #endregion content.OK(); } @@ -541,7 +686,12 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); } - + List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); + //闄ら噰璐叆搴撳崟浠ュ鍏朵粬鍏ュ簱鍗曠粍鐩樻暟鎹鐞� + if (inboundOrder.OrderType != InOrderTypeEnum.Purchase.ObjToInt()) + { + return OtherInGroup(inboundOrder, palletCode, Initiallife, warehouse, models); + } Dt_ReceiveOrder receiveOrder = _inboundRepository.ReceiveOrderRepository.Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); if (receiveOrder == null) { @@ -553,8 +703,6 @@ } List<string> purchaseOrderNos = receiveOrder.Details.Select(x => x.PurchaseOrderNo).ToList(); - - List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); if (models.Select(x => x.MaterielCode).Distinct().Count() > 1) { @@ -637,10 +785,10 @@ { if (purchaseOrderNos.FirstOrDefault(x => x == model.PurchaseOrderNo) == null) { - return WebResponseContent.Instance.Error($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟"); + return WebResponseContent.Instance.Error($"鏈湪閲囪喘鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟"); } - Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus < OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode==model.MaterielCode && x.BatchNo==model.LotNo && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault(); + Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus <= OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode==model.MaterielCode && x.BatchNo==model.LotNo && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault(); if (notGroupDetail == null) { @@ -704,7 +852,149 @@ } return content; } + public WebResponseContent OtherInGroup(Dt_InboundOrder inboundOrder,string? palletCode,int Initiallife,Dt_Warehouse warehouse,List<MatSerNumAnalysisModel> models) + { + WebResponseContent content = new WebResponseContent(); + try + { + if (models.Select(x => x.MaterielCode).Distinct().Count() > 1) + { + return content.Error($"鐗╂枡涓嶅彲娣锋斁"); + } + string materielCode = models.FirstOrDefault()?.MaterielCode ?? ""; + Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode); + if (materielInfo == null) + { + return content.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�"); + } + + List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode).ToList(); + + if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0) + { + return content.Error($"鏈湪鍏ュ簱鍗曟槑缁嗕腑鎵惧埌璇ョ墿鏂欎俊鎭�"); + } + + float beforeQuantity = 0; + + Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); + if (stockInfo == null) + { + stockInfo = new Dt_StockInfo() + { + PalletCode = palletCode, + StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(), + WarehouseId = inboundOrder.WarehouseId, + PalletType = GetPalletType(warehouse, palletCode), + Details = new List<Dt_StockInfoDetail>() + }; + } + else + { + if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) + { + return content.Error($"鎵樼洏鍙烽噸澶�"); + } + beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity); + } + + if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) + { + stockInfo.Remark = Initiallife.ToString(); + string batchNo = models.FirstOrDefault()?.LotNo ?? ""; + Dt_StockInfoDetail existDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == batchNo); + if (existDetail != null) + { + return content.Error($"{batchNo}娴嬭瘯鏋跺凡瀛樺湪"); + } + if (models.Count >= 2) + { + return content.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + if (palletCode.Substring(0, 1) == "6") + { + stockInfo.PalletType = PalletTypeEnum.MediumPallet.ObjToInt(); + } + else + { + stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); + } + } + else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ToString()) + { + if (models.Count >= 2) + { + return content.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + } + + List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); + foreach (var model in models) + { + Dt_InboundOrderDetail? notGroupDetail = inboundOrderDetails.Where(x => x.OrderDetailStatus <= OrderDetailStatusEnum.Inbounding.ObjToInt() && x.MaterielCode == model.MaterielCode && x.OrderQuantity > x.ReceiptQuantity).FirstOrDefault(); + + if (notGroupDetail == null) + { + return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚"); + } + Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() + { + BatchNo = model.LotNo, + MaterielCode = materielInfo.MaterielCode, + MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec, + OrderNo = inboundOrder.InboundOrderNo, + SerialNumber = model.SerialNumber, + StockQuantity = model.Quantity, + OutboundQuantity = 0, + Unit = materielInfo.MaterielUnit, + Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(), + ProductionDate = model.ProductionDate, + EffectiveDate = model.EffectiveDate, + InboundOrderRowNo = notGroupDetail.RowNo, + }; + + if (stockInfo.Id > 0) + { + stockInfoDetail.StockId = stockInfo.Id; + } + stockInfo.Details.Add(stockInfoDetail); + + stockInfoDetails.Add(stockInfoDetail); + + notGroupDetail.ReceiptQuantity += model.Quantity; + if (notGroupDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt(); + } + } + + float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity); + + inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt(); + + _unitOfWorkManage.BeginTran(); + if (stockInfo.Id == 0) + { + _stockRepository.StockInfoRepository.Db.InsertNav(stockInfo).Include(x => x.Details).ExecuteCommand(); + } + else + { + _stockRepository.StockInfoRepository.Db.UpdateNav(stockInfo).Include(x => x.Details, new UpdateNavOptions() { OneToManyInsertOrUpdate = true }).ExecuteCommand(); + } + _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetails); + _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); + _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup); + _unitOfWorkManage.CommitTran(); + content.OK(); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } public WebResponseContent MaterielGroup(string palletCode, int Initiallife, int warehouseId, List<string> serNums) { @@ -909,6 +1199,70 @@ } return content; } + /// <summary> + /// 閫�鏂欏畬鎴愪笂鎶ヨ嚦ERP + /// </summary> + public WebResponseContent FeedbackReturnOrder(Dt_InboundOrder inboundOrder,Dt_ReturnOrder returnOrder) + { + WebResponseContent content= new WebResponseContent(); + try + { + if (returnOrder==null) + { + return content.OK(); + } + //鑾峰彇浠撳簱缂栫爜 + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==inboundOrder.WarehouseId); + + var groupedDetails = returnOrder.Details.GroupBy(d => new { d.PickCode, d.RowId }) + .Select(g => new + { + PickCode = returnOrder.OrderNo, + RowIndex = g.Key.RowId, + Details = g.ToList() + }) + .ToList(); + // 鏋勫缓宓屽缁撴瀯 + var issitems = groupedDetails.Select(g => new ReturnItem + { + Pickcode = g.PickCode, + Rowindex = g.RowIndex, + PickList = g.Details + .GroupBy(d => d.MCode) + .Select(mg => new ReturnPickItem + { + Material = mg.Key, + Qty = mg.Sum(x => x.Qty), + Dataitem = mg.Select(d => new ReturnDataItem + { + Lotno = d.BatchNo, + Qty = d.Qty, + Location = warehouse.WarehouseCode, + Msfpart = d.Code + }).ToList() + }).ToList() + }).ToList(); + //鑾峰彇瀵瑰簲閫�鏂欏崟 + ERPReturnModel returnModel = new ERPReturnModel() + { + Way = 1, + UniqueTag = returnOrder.Id.ToString(), + Code = CreateCodeByRule(nameof(RuleCodeEnum.TLCodeRule)), + WarehouseCode = warehouse.WarehouseCode, + Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Createuser=inboundOrder.Creater, + IsDev=returnOrder.IsDev, + Issitem= issitems + }; + _invokeERPService.InvokeReturnApi(returnModel); + return content.OK(); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } static object lock_code = new object(); public string CreateCodeByRule(string ruleCode) { @@ -968,7 +1322,7 @@ return code; } } - + #region 寮冪敤 /// <summary> /// 鍏ュ簱瀹屾垚鍥炰紶鍒癊RP /// </summary> @@ -1051,7 +1405,7 @@ // return WebResponseContent.Instance.Error(ex.Message); // } //} - + #endregion public int GetPalletType(Dt_Warehouse warehouse, string palletCode) { if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderDetailService.cs" new file mode 100644 index 0000000..653ced1 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderDetailService.cs" @@ -0,0 +1,21 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseServices; +using WIDESEA_IInboundRepository; +using WIDESEA_IInboundService; +using WIDESEA_Model.Models; + +namespace WIDESEA_InboundService +{ + public class ReturnOrderDetailService : ServiceBase<Dt_ReturnOrderDetail, IReturnOrderDetailRepository>, IReturnOrderDetailService + { + public IReturnOrderDetailRepository Repository => BaseDal; + + public ReturnOrderDetailService(IReturnOrderDetailRepository BaseDal) : base(BaseDal) + { + } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs" new file mode 100644 index 0000000..6d5f190 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReturnOrderService.cs" @@ -0,0 +1,235 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.BaseServices; +using WIDESEA_Core; +using WIDESEA_IInboundRepository; +using WIDESEA_IInboundService; +using WIDESEA_Model.Models; +using WIDESEA_DTO.ERP; +using WIDESEA_Core.BaseRepository; +using WIDESEA_IBasicRepository; +using WIDESEA_IOutboundService; +using WIDESEA_Common.OrderEnum; +using SqlSugar.Extensions; +using WIDESEA_Common.CommonEnum; + +namespace WIDESEA_InboundService +{ + public class ReturnOrderService : ServiceBase<Dt_ReturnOrder, IReturnOrderRepository>, IReturnOrderService + { + public IReturnOrderRepository Repository => BaseDal; + private readonly IUnitOfWorkManage _unitOfWorkManage; + private readonly IBasicRepository _basicRepository; + private readonly IOutboundService _outboundService; + public ReturnOrderService(IReturnOrderRepository BaseDal,IUnitOfWorkManage unitOfWorkManage,IBasicRepository basicRepository, + IOutboundService outboundService) : base(BaseDal) + { + _unitOfWorkManage = unitOfWorkManage; + _basicRepository = basicRepository; + _outboundService = outboundService; + } + /// <summary> + /// 鑾峰彇閫�鏂欏崟 + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + public WebResponseContent GetReturnOrders(SaveModel saveModel) + { + WebResponseContent content = new WebResponseContent(); + try + { + int pageNo = saveModel.MainData["pageNo"].ObjToInt(); + string? orderNo = saveModel.MainData["orderNo"].ToString(); + int warehouseId = saveModel.MainData["warehouseId"].ObjToInt(); + List<Dt_ReturnOrder> returnOrders = new List<Dt_ReturnOrder>(); + if (string.IsNullOrEmpty(orderNo)) + { + returnOrders = Db.Queryable<Dt_ReturnOrder>().Where(x => x.ReturnOrderStatus < ReturnOrderStatusEnum.Returning.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); + } + else + { + returnOrders = Db.Queryable<Dt_ReturnOrder>().Where(x => (x.OrderNo.Contains(orderNo)) && x.ReturnOrderStatus < ReturnOrderStatusEnum.Returning.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); + } + + content.OK(data: returnOrders); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + /// <summary> + /// 鑾峰彇鎺ユ敹閫�鏂欏崟 + /// </summary> + public WebResponseContent ReturnOrder(ErpReturnOrderDTO model) + { + try + { + return model.Way switch + { + 1 => AddReturnOrder(model), + 2 => UpdateReturnOrder(model), + 3 => DeleteReturnOrder(model), + _ => WebResponseContent.Instance.Error($"鎿嶄綔绫诲瀷涓嶅瓨鍦�,Way:{model.Way}"), + }; + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + /// <summary> + /// 鏂板缓閫�鏂欏崟 + /// </summary> + public WebResponseContent AddReturnOrder(ErpReturnOrderDTO model) + { + WebResponseContent content = new WebResponseContent(); + try + { + if (BaseDal.QueryFirst(x => x.OrderNo == model.OrderNo) != null) + { + return content.Error($"閫�鏂欏崟鍙穥model.OrderNo}宸插瓨鍦�!"); + } + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == model.WaCode); + if (warehouse == null) + { + return content.Error($"鏈壘鍒颁粨搴撲俊鎭�"); + } + List<Dt_ReturnOrderDetail> returnOrderDetails = new List<Dt_ReturnOrderDetail>(); + foreach (var item in model.Issitem) + { + //鍒ゆ柇鍙戞枡鍗曞彿 + Dt_OutboundOrder outboundOrder = _outboundService.OutboundOrderService.Repository.Db.Queryable<Dt_OutboundOrder>().Where(x=>x.UpFLOrderNo==item.PickCode).Includes(x=>x.Details).First() ?? throw new Exception($"鐢宠鍗曞彿(鍙戞枡鍗�){item.PickCode}涓嶅瓨鍦�"); + + foreach (var pickitem in item.PickList) + { + Dt_OutboundOrderDetail outboundOrderDetail = outboundOrder.Details.Find(x => x.MaterielCode == pickitem.MCode) ?? throw new Exception($"{item.PickCode}鐢宠鍗曞彿涓墿鏂檣pickitem.MCode}涓嶅瓨鍦�"); + //鑾峰彇瀵瑰簲鍑哄簱鍗曡鎯� + Dt_OutStockLockInfo outStockLockInfo = _outboundService.OutboundStockLockInfoService.Repository.QueryFirst(x => x.OrderDetailId == outboundOrderDetail.Id); + + Dt_ReturnOrderDetail returnOrderDetail = new Dt_ReturnOrderDetail() + { + PickCode = item.PickCode, + ApplyRow = item.ApplyRow ?? 0, + RowId = item.RowId, + OrderDetailStatus = ReturnOrderStatusEnum.NotReturn.ObjToInt(), + MCode = pickitem.MCode, + MaterielName = outboundOrderDetail.MaterielName, + MaterielSpec = outboundOrderDetail.MaterielSpec ?? "", + BatchNo = outStockLockInfo.BatchNo, + Qty = pickitem.Qty, + ReturnQty = pickitem.ReturnQty, + OverReturnQty = 0, + Unit = pickitem.Unit, + Code = pickitem.Code + }; + returnOrderDetails.Add(returnOrderDetail); + } + } + Dt_ReturnOrder returnOrder = new Dt_ReturnOrder() + { + OrderNo=model.OrderNo, + WarehouseId=warehouse.WarehouseId, + ReturnOrderType=model.OrderType, + ReturnOrderStatus=ReturnOrderStatusEnum.NotReturn.ObjToInt(), + UploadStatus= WhetherEnum.False.ObjToInt(), + IsDev=model.IsDev, + Remark=model.Note, + Details= returnOrderDetails + }; + Db.InsertNav(returnOrder).Include(x => x.Details).ExecuteCommand(); + + content.OK("鎴愬姛"); + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + /// <summary> + /// 淇敼閫�鏂欏崟 + /// </summary> + public WebResponseContent UpdateReturnOrder(ErpReturnOrderDTO model) + { + WebResponseContent content = new WebResponseContent(); + return content; + } + /// <summary> + /// 鍒犻櫎閫�鏂欏崟 + /// </summary> + public WebResponseContent DeleteReturnOrder(ErpReturnOrderDTO model) + { + WebResponseContent content = new WebResponseContent(); + return content; + } + /// <summary> + /// 纭閫�搴撴牴鎹��搴撳崟鐢熸垚鍏ュ簱鍗� + /// </summary> + /// <returns></returns> + public WebResponseContent IsReturnCreateInOrder(int returnId) + { + WebResponseContent content = new WebResponseContent(); + try + { + Dt_ReturnOrder returnOrder = Db.Queryable<Dt_ReturnOrder>().Where(x => x.Id == returnId).Includes(x => x.Details).First(); + if (returnOrder==null) + { + return content.Error("鏈壘鍒伴��鏂欒淇℃伅"); + } + if (returnOrder.Details==null || returnOrder.Details.Count<=0) + { + return content.Error("鏈壘鍒拌閫�鏂欏崟淇℃伅"); + } + if (returnOrder.ReturnOrderStatus!=ReturnOrderStatusEnum.NotReturn.ObjToInt()) + { + return content.Error("璇ラ��鏂欏崟宸插畬鎴愭垨閫�鏂欎腑"); + } + List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>(); + foreach (var item in returnOrder.Details) + { + Dt_InboundOrderDetail orderDetail = new Dt_InboundOrderDetail() + { + MaterielCode=item.MCode, + BatchNo=item.BatchNo, + OrderQuantity=item.ReturnQty, + ReceiptQuantity=0, + OverInQuantity=0, + OrderDetailStatus= OrderDetailStatusEnum.New.ObjToInt(), + Unit=item.Unit, + RowNo=item.RowId, + MaterielName=item.MaterielName, + MaterielSpec=item.MaterielSpec, + }; + inboundOrderDetails.Add(orderDetail); + } + Dt_InboundOrder inboundOrder = new Dt_InboundOrder() + { + WarehouseId=returnOrder.WarehouseId, + UpperOrderNo=returnOrder.OrderNo, + SupplierId="", + OrderType= InOrderTypeEnum.Return.ObjToInt(), + OrderStatus= InOrderStatusEnum.鏈紑濮�.ObjToInt(), + CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), + Remark=returnOrder.Remark, + Details= inboundOrderDetails + }; + returnOrder.ReturnOrderStatus=ReturnOrderStatusEnum.Returning.ObjToInt(); + _unitOfWorkManage.BeginTran(); + BaseDal.UpdateData(returnOrder); + Db.InsertNav(inboundOrder).Include(x=>x.Details).ExecuteCommand(); + _unitOfWorkManage.CommitTran(); + return content.OK("鎴愬姛"); + } + 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_InboundService/WIDESEA_InboundService.csproj" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj" index 9b1e176..5023950 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/WIDESEA_InboundService.csproj" @@ -11,6 +11,7 @@ <ProjectReference Include="..\WIDESEA_IBasicService\WIDESEA_IBasicService.csproj" /> <ProjectReference Include="..\WIDESEA_ICheckRepository\WIDESEA_ICheckRepository.csproj" /> <ProjectReference Include="..\WIDESEA_IInboundService\WIDESEA_IInboundService.csproj" /> + <ProjectReference Include="..\WIDESEA_IOutboundService\WIDESEA_IOutboundService.csproj" /> <ProjectReference Include="..\WIDESEA_IRecordService\WIDESEA_IRecordService.csproj" /> <ProjectReference Include="..\WIDESEA_IStockService\WIDESEA_IStockService.csproj" /> <ProjectReference Include="..\WIDESEA_ITaskInfoRepository\WIDESEA_ITaskInfoRepository.csproj" /> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs" index 7a3a1fa..16aea96 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_InboundOrderDetail.cs" @@ -35,7 +35,7 @@ /// <summary> /// 鐗╂枡鍚嶇О /// </summary> - [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡鍚嶇О")] + [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")] public string MaterielName { get; set; } /// <summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs" index 4a6a5cc..7b7efc4 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrderDetail.cs" @@ -77,7 +77,7 @@ /// <summary> /// 鐗╂枡鍚嶇О /// </summary> - [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "鐗╂枡鍚嶇О")] + [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")] public string MaterielName { get; set; } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs" index 7756011..428bb28 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReceiveOrderDetail.cs" @@ -101,7 +101,7 @@ /// <summary> /// 鐗╂枡鍚嶇О /// </summary> - [SugarColumn(IsNullable = true, Length = 100, ColumnDescription = "鐗╂枡鍚嶇О")] + [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")] public string MaterielName { get; set; } /// <summary> diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReturnOrder.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReturnOrder.cs" new file mode 100644 index 0000000..49ef233 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReturnOrder.cs" @@ -0,0 +1,75 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.Attributes; +using WIDESEA_Core.CodeConfigEnum; +using WIDESEA_Core.DB.Models; + +namespace WIDESEA_Model.Models +{ + /// <summary> + /// 閫�鏂欏崟 + /// </summary> + [SugarTable(nameof(Dt_ReturnOrder), "閫�鏂欏崟")] + public class Dt_ReturnOrder : BaseEntity + { + /// <summary> + /// 涓婚敭 + /// </summary> + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")] + public int Id { get; set; } + + /// <summary> + /// 閫�鏂欏崟鍙� + /// </summary> + [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "閫�鏂欏崟鍙�")] + public string OrderNo { get; set; } + + /// <summary> + /// 浠撳簱涓婚敭 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "浠撳簱涓婚敭")] + public int WarehouseId { get; set; } + + /// <summary> + /// 璁㈠崟绫诲瀷<br/> + /// 1锛氭爣鍑嗛��鏂�<br/> + /// 2锛歜om閫�鏂�<br/> + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟绫诲瀷")] + public int ReturnOrderType { get; set; } + + /// <summary> + /// 璁㈠崟鐘舵�� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟鐘舵��")] + public int ReturnOrderStatus { get; set; } + + /// <summary> + /// 涓婁紶鐘舵�� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "涓婁紶鐘舵��")] + public int UploadStatus { get; set; } + + /// <summary> + /// 鏄惁鐮斿彂 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鏄惁鐮斿彂")] + public int IsDev { get; set; } + + /// <summary> + /// 澶囨敞 + /// </summary> + [SugarColumn(IsNullable = true, Length = 500, ColumnDescription = "澶囨敞")] + public string Remark { get; set; } + + /// <summary> + /// 閫�鏂欏崟鏄庣粏 + /// </summary> + [PropertyValidate("閫�鏂欏崟鏄庣粏", NotNullAndEmpty = true), Navigate(NavigateType.OneToMany, nameof(Dt_ReturnOrderDetail.ReturnId), nameof(Id))] + public List<Dt_ReturnOrderDetail> Details { get; set; } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReturnOrderDetail.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReturnOrderDetail.cs" new file mode 100644 index 0000000..85fb400 --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_ReturnOrderDetail.cs" @@ -0,0 +1,109 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WIDESEA_Core.Attributes; +using WIDESEA_Core.CodeConfigEnum; +using WIDESEA_Core.DB.Models; + +namespace WIDESEA_Model.Models +{ + /// <summary> + /// 閫�鏂欏崟鏄庣粏 + /// </summary> + [SugarTable(nameof(Dt_ReturnOrderDetail), "閫�鏂欏崟鏄庣粏")] + public class Dt_ReturnOrderDetail : BaseEntity + { + /// <summary> + /// 涓婚敭 + /// </summary> + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")] + public int Id { get; set; } + + /// <summary> + /// 閫�鏂欏崟涓婚敭 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鏂欏崟涓婚敭")] + public int ReturnId { get; set; } + + /// <summary> + /// 鐢宠鍗曞彿(鍙戞枡鍗�) + /// </summary> + [SugarColumn(IsNullable = false,Length =50, ColumnDescription = "鐢宠鍗曞彿(鍙戞枡鍗�)")] + public string PickCode { get; set; } + + /// <summary> + /// 鐢宠鍗曞彿琛屽彿(鍙戞枡鍗曟槑缁嗚鍙�) + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鐢宠鍗曞彿琛屽彿(鍙戞枡鍗曟槑缁嗚鍙�)")] + public int ApplyRow { get; set; } + + /// <summary> + /// 閫�鏂欒鍙� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鏂欒鍙�")] + public int RowId { get; set; } + + /// <summary> + /// 鏄庣粏鍗曠姸鎬� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鏄庣粏鍗曠姸鎬�")] + public int OrderDetailStatus { get; set; } + + /// <summary> + /// 鐗╂枡缂栫爜 + /// </summary> + [SugarColumn(IsNullable = false,Length =50, ColumnDescription = "鐗╂枡缂栫爜")] + public string MCode { get; set; } + + /// <summary> + /// 鐗╂枡鍚嶇О + /// </summary> + [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")] + public string MaterielName { get; set; } + + /// <summary> + /// 鐗╂枡瑙勬牸 + /// </summary> + [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡瑙勬牸")] + public string MaterielSpec { get; set; } + + /// <summary> + /// 鎵规鍙� + /// </summary> + [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鎵规鍙�")] + public string BatchNo { get; set; } + + /// <summary> + /// 鍙��鏁伴噺 + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "鍙��鏁伴噺")] + public float Qty { get; set; } + + /// <summary> + /// 閫�鍥炴暟閲� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "閫�鍥炴暟閲�")] + public float ReturnQty { get; set; } + + /// <summary> + /// 宸查��鍥炴暟閲� + /// </summary> + [SugarColumn(IsNullable = false, ColumnDescription = "宸查��鍥炴暟閲�")] + public float OverReturnQty { get; set; } + + /// <summary> + /// 鍗曚綅 + /// </summary> + [SugarColumn(IsNullable = false,Length =20, ColumnDescription = "鍗曚綅")] + public string Unit { get; set; } + + /// <summary> + /// 鍒堕�犻儴浠禼ode + /// </summary> + [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍒堕�犻儴浠禼ode")] + public string Code { get; set; } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs" index c5aff01..35aae57 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrder.cs" @@ -42,6 +42,12 @@ public string UpperOrderNo { get; set; } /// <summary> + /// 鍙戞枡鎺ㄩ�佸崟鎹紪鍙� + /// </summary> + [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鍙戞枡鎺ㄩ�佸崟鎹紪鍙�")] + public string UpFLOrderNo { get; set; } + + /// <summary> /// 鍗曟嵁绫诲瀷 /// </summary> [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷", IsOnlyIgnoreUpdate = true)] diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs" index 78a2c67..500f310 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_OutboundOrderDetail.cs" @@ -39,6 +39,12 @@ public string MaterielName { get; set; } /// <summary> + /// 鐗╂枡瑙勬牸 + /// </summary> + [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡瑙勬牸")] + public string MaterielSpec { get; set; } + + /// <summary> /// 鎵规鍙� /// </summary> [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "鎵规鍙�")] diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" index 8cb1176..132956c 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" @@ -210,7 +210,8 @@ _unitOfWorkManage.CommitTran(); #region 鍑哄簱瀹屾垚涓婃姤ERP - if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + //鐢熶骇棰嗘枡,鐮斿彂棰嗘枡锛屾爣鍑嗛鏂欙紝鎺ㄩ�丒RP鍑哄簱 + if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && outboundOrder.OrderType==OutOrderTypeEnum.Issue.ObjToInt()) _invokeERPService.InvokeOutStandardsApi(GetERPIssueModel(outboundOrder, warehouse.WarehouseCode)); #endregion content.OK(); @@ -268,6 +269,9 @@ Createuser = string.IsNullOrEmpty(Createuser) ? Createuser : "admin", Issitem = new List<ERPIssueItemModel>() { issueItemModel }, }; + //鏇存柊鍙戞枡鍗曞彿 + outboundOrder.UpFLOrderNo = issueModel.Code; + BaseDal.UpdateData(outboundOrder); } catch (Exception ex) { @@ -313,6 +317,7 @@ BatchNo = model.MLot, MaterielCode = model.MCode, MaterielName = materielInfo.MaterielName, + MaterielSpec=materielInfo.MaterielSpec, OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), OrderQuantity = model.Qty, OrderId = oldOutboundOrder.Id @@ -327,6 +332,7 @@ RowNo = Convert.ToInt32(model.RowNo), BatchNo = model.MLot, MaterielCode = model.MCode, + MaterielSpec = materielInfo.MaterielSpec, MaterielName = materielInfo.MaterielName, OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), OrderQuantity = model.Qty, @@ -343,7 +349,16 @@ DepartmentName = model.DepartmentName, Details = new List<Dt_OutboundOrderDetail> { outboundOrderDetail }, Remark = model.Node - + }; + outboundOrder.OrderType = model.OType switch + { + 1 or 2 or 3=> OutOrderTypeEnum.Issue.ObjToInt(), + 4=>OutOrderTypeEnum.Quality.ObjToInt(), + 5=>OutOrderTypeEnum.Allocate.ObjToInt(), + 6=>OutOrderTypeEnum.MaintenanceIssue.ObjToInt(), + 7=>OutOrderTypeEnum.SaleOut.ObjToInt(), + 8=>OutOrderTypeEnum.Rework.ObjToInt(), + _=>0 }; Db.InsertNav(outboundOrder).Include(x => x.Details).ExecuteCommand(); } @@ -368,6 +383,7 @@ RowNo = Convert.ToInt32(model.RowNo), BatchNo = model.MLot, MaterielCode = model.MCode, + MaterielSpec = materielInfo.MaterielSpec, MaterielName = materielInfo.MaterielName, OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(), OrderQuantity = model.Qty, @@ -382,6 +398,10 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒拌鍑哄簱鍗�"); } + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteData(oldOutboundOrder); + _outboundOrderDetailRepository.DeleteData(oldOutboundOrder.Details); + _unitOfWorkManage.CommitTran(); } return WebResponseContent.Instance.OK(); @@ -463,6 +483,9 @@ Createuser = outboundOrder.Creater, Issitem = new List<ERPIssueItemModel>() { issueItemModel }, }; + //鏇存柊鍙戞枡鍗曞彿 + outboundOrder.UpFLOrderNo = issueModel.Code; + BaseDal.UpdateData(outboundOrder); _invokeERPService.InvokeOutStandardsApi(issueModel); } else @@ -524,21 +547,20 @@ // Issitem = new List<ERPIssueItemModel>() { issueItemModel }, //}; #endregion - } - - if (stockInfos.Count > 0) - { - _stockService.StockInfoService.Repository.UpdateData(stockInfos); - } - else - { - _outStockLockInfoService.Repository.UpdateData(_OutStockLockInfos); - } - //鍑哄簱瀹屾垚涓婃姤ERP 娴嬭瘯娉ㄩ噴 - if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) - { - issueModel = GetERPIssueModel(outboundOrder, warehouse.WarehouseCode); - _invokeERPService.InvokeOutStandardsApi(issueModel); + if (stockInfos.Count > 0) + { + _stockService.StockInfoService.Repository.UpdateData(stockInfos); + } + else + { + _outStockLockInfoService.Repository.UpdateData(_OutStockLockInfos); + } + //鍑哄簱瀹屾垚涓婃姤ERP 娴嬭瘯娉ㄩ噴 + if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + { + issueModel = GetERPIssueModel(outboundOrder, warehouse.WarehouseCode); + _invokeERPService.InvokeOutStandardsApi(issueModel); + } } return WebResponseContent.Instance.OK(); } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs" index 67d7666..229dea3 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/StockInfoRepository.cs" @@ -67,16 +67,19 @@ public List<Dt_StockInfo> GetStockInfos(string materielCode, string lotNo, List<string> locationCodes) { + List<Dt_StockInfo> stockInfos = null; if (!string.IsNullOrEmpty(lotNo)) { - return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode && v.BatchNo == lotNo)).ToList(); + var stockSort = Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode && v.BatchNo == lotNo)).ToList(); + stockInfos = stockSort.OrderBy(x=>x.Details.FirstOrDefault()?.EffectiveDate).ToList(); } else { - return Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList(); + var stockSort = Db.Queryable<Dt_StockInfo>().Where(x => locationCodes.Contains(x.LocationCode)).Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)).ToList(); + stockInfos = stockSort.OrderBy(x => x.Details.FirstOrDefault()?.EffectiveDate).ToList(); } - + return stockInfos; //ISugarQueryable<Dt_LocationInfo> sugarQueryable = Db.Queryable<Dt_LocationInfo>().Where(x => locationCodes.Contains(x.LocationCode)); //ISugarQueryable<Dt_StockInfo> sugarQueryable1 = Db.Queryable<Dt_StockInfo>().Includes(x => x.Details).Where(x => x.Details.Any(v => v.MaterielCode == materielCode)); //return sugarQueryable.InnerJoin(sugarQueryable1, (a, b) => a.LocationCode == b.LocationCode).Select((a, b) => b).OrderBy(a => a.CreateDate).Includes(a => a.Details).ToList(); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" index 0e31f7b..680641d 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" @@ -7,6 +7,7 @@ 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; @@ -141,7 +142,7 @@ { List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>(); float stockTotalQuantity = stockInfos.Select(x => x.Details.Sum(v => v.StockQuantity - v.OutboundQuantity)).Sum(x => x); - stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); + //stockInfos = stockInfos.OrderBy(x => x.Id).ToList(); if (stockTotalQuantity >= needQuantity)//搴撳瓨澶� { int index = 0; 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 af36c1b..48e4a4f 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" @@ -440,8 +440,8 @@ WarehouseId = warehouse.WarehouseId, StockStatus = StockStatusEmun.MES閫�搴�.ObjToInt() }; - - Dt_StockInfoDetail_Hty stockInfoDetail_Hty = _stockRepository.StockInfoDetail_HtyRepository.QueryFirst(x => x.BatchNo == model.MaterialLot && x.MaterielCode == model.MaterialCode); + Dt_StockInfo_Hty stockInfo_Hty = _stockRepository.StockInfo_HtyRepository.QueryData(x=>x.PalletCode== model.CarrierCode).OrderByDescending(x=>x.SourceId).First(); + Dt_StockInfoDetail_Hty stockInfoDetail_Hty = _stockRepository.StockInfoDetail_HtyRepository.QueryFirst(x => x.StockId==stockInfo_Hty.SourceId); Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() { 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 1edf744..3cf8d6e 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" @@ -199,7 +199,7 @@ stockInfo.LocationCode = locationInfo.LocationCode; #region 绌虹鍏ュ簱/鎷i�夊洖搴�/鐢熶骇閫�鏂� - if (task.TaskType == TaskTypeEnum.InEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.InPick.ObjToInt() || task.TaskType==TaskTypeEnum.ProductionReturn.ObjToInt()) + if (task.TaskType == TaskTypeEnum.InEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.InPick.ObjToInt() || (task.TaskType==TaskTypeEnum.ProductionReturn.ObjToInt() && warehouse.WarehouseCode==WarehouseEnum.HA64.ToString())) { stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); @@ -220,49 +220,50 @@ Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First(); Dt_InboundOrderDetail? inboundOrderDetail = null; + Dt_ReturnOrder? returnOrder = null; //鏍囧噯鍏ュ簱娴佺▼鏌ユ壘鍏ュ簱鍗曟嵁 if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()) { //鏌ヨ鍘熷畬鎴愮殑鍏ュ簱鏄庣粏鏁伴噺 int overCount = inboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count; - if (stockInfo.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()) + inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo); + foreach (var item in stockInfo.Details) { - inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo); - foreach (var item in stockInfo.Details) + if (inboundOrderDetail == null) { - if (inboundOrderDetail == null) - { - continue; - } - ERPInboundDetailModel detailModel = new ERPInboundDetailModel() - { - ExpiryDate = item.EffectiveDate ?? "", - LocationCode = warehouse.WarehouseCode, - MaterialsCode = item.MaterielCode, - MfgDate = item.ProductionDate ?? "", - QtyCustoms = "0", - Quantity = item.StockQuantity.ToString(), - Rack = stockInfo.LocationCode, - ReceiptCode = inboundOrder.UpperOrderNo, - ReceiptSerNo = item.InboundOrderRowNo.ToString() - }; - inboundOrderDetail.OverInQuantity += item.StockQuantity; - if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity) - { - inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); - overCount += 1; - } - else if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) - { - inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt(); - } + continue; + } + inboundOrderDetail.OverInQuantity += item.StockQuantity; + if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity) + { + inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); + overCount += 1; + } + else if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt(); } } if (inboundOrder.Details.Count == overCount) { inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt(); + //鍒ゆ柇鏄惁涓洪��鏂欏叆搴撳崟 + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); + returnOrder.ReturnOrderStatus=ReturnOrderStatusEnum.Returned.ObjToInt(); + foreach (var item in inboundOrder.Details) + { + Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x=>x.MCode==item.MaterielCode); + if (returnOrderDetail != null) + { + returnOrderDetail.OverReturnQty = item.OverInQuantity; + returnOrderDetail.OrderDetailStatus = ReturnOrderStatusEnum.Returned.ObjToInt(); + } + } + } } - if (inboundOrder.OrderStatus == InOrderStatusEnum.鏈紑濮�.ObjToInt()) + else if (inboundOrder.OrderStatus == InOrderStatusEnum.鏈紑濮�.ObjToInt()) { inboundOrder.OrderStatus = InOrderStatusEnum.鍏ュ簱涓�.ObjToInt(); } @@ -301,10 +302,24 @@ _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail); } + if (returnOrder!=null) + { + _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder); + _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details); + } _unitOfWorkManage.CommitTran(); //瀛樺湪鍏ュ簱鍗曞苟鐘舵�佷负瀹屾垚鐘舵�佹帹閫佽嚦ERP - if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()) - _inboundOrderService.FeedbackInboundOrder(inboundOrder); + if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt()) + { + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + _inboundOrderService.FeedbackReturnOrder(inboundOrder, returnOrder); + } + else + { + _inboundOrderService.FeedbackInboundOrder(inboundOrder); + } + } return WebResponseContent.Instance.OK(); } catch (Exception ex) @@ -345,7 +360,7 @@ List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>(); List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>(); - if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt()) + if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt())) { return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撹鎯呬俊鎭�"); } @@ -386,13 +401,13 @@ task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); - if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt()) + if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt()|| task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt()) { + //澶勭悊鍑哄簱璇︽儏 if (outboundOrderDetails.Count > 0) { _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails); } - stockInfo.LocationCode = ""; stockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); _stockService.StockInfoService.Repository.UpdateData(stockInfo); diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" index 5d14e40..edeee12 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Inbound.cs" @@ -7,6 +7,7 @@ using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.LocationEnum; +using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Common.WareHouseEnum; @@ -48,7 +49,7 @@ return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�"); } - Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); + Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.PalletCode== palletCode).Includes(x=>x.Details).First(); if (stockInfo == null) { return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�"); @@ -82,21 +83,43 @@ Roadway = "", SourceAddress = stationCode, TargetAddress = "", - TaskType = stockInfo.StockStatus == StockStatusEmun.鎷i�夊畬鎴�.ObjToInt() ? TaskTypeEnum.InPick.ObjToInt() : TaskTypeEnum.Inbound.ObjToInt(), + TaskType = TaskTypeEnum.Inbound.ObjToInt(), TaskStatus = TaskStatusEnum.New.ObjToInt(), WarehouseId = stockInfo.WarehouseId, PalletType = stockInfo.PalletType }; - + //鑾峰彇鏄惁瀛樺湪鍏ュ簱鍗� + Dt_InboundOrder? inboundOrder = null; + if (stockInfo!=null && stockInfo.Details.Count>0) + { + string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? ""; + inboundOrder =_inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()); + } + + if (inboundOrder != null) + { + if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt()) + { + newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt(); + } + else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt(); + } + } if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) { stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(); + } + else if (stockInfo.StockStatus == StockStatusEmun.鎷i�夊畬鎴�.ObjToInt()) + { + stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(); + newTask.TaskType = TaskTypeEnum.InPick.ObjToInt(); } else { stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(); } - _unitOfWorkManage.BeginTran(); int taskId = BaseDal.AddData(newTask); newTask.TaskId = taskId; @@ -254,7 +277,7 @@ return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�"); } - Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); + Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); if (stockInfo == null) { return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�"); @@ -289,7 +312,25 @@ PalletType = stockInfo.PalletType }; + //鑾峰彇鏄惁瀛樺湪鍏ュ簱鍗� + Dt_InboundOrder? inboundOrder = null; + if (stockInfo != null && stockInfo.Details.Count > 0) + { + string? orderNo = stockInfo.Details.FirstOrDefault()?.OrderNo ?? ""; + inboundOrder = _inboundOrderService.Repository.QueryFirst(x => x.InboundOrderNo == orderNo && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()); + } + if (inboundOrder != null) + { + if (inboundOrder.OrderType == InOrderTypeEnum.Allocat.ObjToInt()) + { + newTask.TaskType = TaskTypeEnum.InAllocate.ObjToInt(); + } + else if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + newTask.TaskType = TaskTypeEnum.ProductionReturn.ObjToInt(); + } + } if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) { stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(); @@ -300,13 +341,13 @@ } else if (stockInfo.StockStatus == StockStatusEmun.鎷i�夊畬鎴�.ObjToInt()) { - stockInfo.StockStatus = StockStatusEmun.鎷i�夊畬鎴�.ObjToInt(); newTask.TaskType = TaskTypeEnum.InPick.ObjToInt(); } else { stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(); } + LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; _unitOfWorkManage.BeginTran(); _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation); 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 6ec106d..ebba105 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" @@ -203,7 +203,15 @@ (List<Dt_StockInfo>, List<Dt_OutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.OutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails); if (result.Item1 != null && result.Item1.Count > 0) { - tasks = GetTasks(result.Item1, TaskTypeEnum.Outbound); + Dt_OutboundOrder outboundOrder =_outboundService.OutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId); + TaskTypeEnum typeEnum = outboundOrder.OrderType switch + { + (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound, + (int)OutOrderTypeEnum.Allocate=> TaskTypeEnum.OutAllocate, + (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality, + _ =>new TaskTypeEnum() + }; + tasks = GetTasks(result.Item1, typeEnum); result.Item2.ForEach(x => { x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); @@ -360,7 +368,7 @@ #endregion #region 涓婃姤ERP - if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()) + if (outboundOrder.OrderStatus == OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && outboundOrder.OrderType==OutOrderTypeEnum.Issue.ObjToInt()) { //List<ERPPickModel> eRPPickModels = new List<ERPPickModel>(); //outStockLockInfos.ForEach(x => @@ -427,6 +435,10 @@ BaseDal.AddData(tasks); if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) { + stockInfos.ForEach(x => + { + x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + }); WebResponseContent content = _outboundService.OutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks); if (!content.Status) 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 405fe83..9abaca5 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" @@ -35,14 +35,16 @@ private readonly IOutboundService _outboundService; private readonly IInboundService _inboundService; private readonly IInvokeERPService _invokeERPService; + private readonly IReturnOrderService _returnOrderService; public ErpController(IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, - IInvokeERPService invokeERPService) + IInvokeERPService invokeERPService, IReturnOrderService returnOrderService) { _basicService = basicService; _outboundService = outboundService; _inboundService = inboundService; _invokeERPService = invokeERPService; + _returnOrderService = returnOrderService; } /// <summary> @@ -122,6 +124,28 @@ if (content.Status) return Instance.OK(); else return Instance.Error(content.Message); } + + /// <summary> + /// 鎺ユ敹ERP閫�鏂欏崟淇℃伅 + /// </summary> + [HttpPost, Route("ReturnOrder"), AllowAnonymous, MethodParamsValidate] + public ErpResponseContent ReturnOrder([FromBody] Root<ErpReturnOrderDTO> model) + { + WebResponseContent content = _returnOrderService.ReturnOrder(model.Content); + if (content.Status) return Instance.OK(); + else return Instance.Error(content.Message); + } + /// <summary> + /// 鍏朵粬鍏ュ簱鍗曟帴鏀�(璋冩嫈鍏ヤ粨,瀹緵鍥炴敹,鐗╂枡閿�鍞��璐�) + /// </summary> + /// <returns></returns> + [HttpPost, Route("ReceiveWarehousingOrder"), AllowAnonymous, MethodParamsValidate] + public ErpResponseContent ReceiveWarehousingOrder([FromBody] Root<ErpInOrderDTO> model) + { + WebResponseContent content = _inboundService.InbounOrderService.ReceiveWarehousingOrder(model.Content); + if (content.Status) return Instance.OK(); + else return Instance.Error(content.Message); + } /// <summary> /// 鎺ㄩ�丒RP鍑哄簱 /// </summary> @@ -149,5 +173,13 @@ { return _invokeERPService.InvokeInboundOrderApi(inboundModel); } + /// <summary> + /// 鎺ㄩ�丒RP閫�鏂欎笂鎶� + /// </summary> + [HttpPost, Route("InvokeReturnApi"), AllowAnonymous] + public string InvokeReturnApi([FromBody] ERPReturnModel returnModel) + { + return _invokeERPService.InvokeReturnApi(returnModel); + } } } diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReturnOrderController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReturnOrderController.cs" new file mode 100644 index 0000000..b513b3d --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReturnOrderController.cs" @@ -0,0 +1,40 @@ +锘縰sing Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using WIDESEA_Core; +using WIDESEA_Core.BaseController; +using WIDESEA_IInboundService; +using WIDESEA_Model.Models; + +namespace WIDESEA_WMSServer.Controllers.Inbound +{ + /// <summary> + /// 閫�鏂欏崟 + /// </summary> + [Route("api/ReturnOrder")] + [ApiController] + public class ReturnOrderController : ApiBaseController<IReturnOrderService, Dt_ReturnOrder> + { + public ReturnOrderController(IReturnOrderService service) : base(service) + { + } + /// <summary> + /// 鑾峰彇閫�鏂欏崟 + /// </summary> + [HttpPost,Route("GetReturnOrders")] + public WebResponseContent GetReturnOrders([FromBody] SaveModel saveModel) + { + return Service.GetReturnOrders(saveModel); + } + /// <summary> + /// 纭閫�搴撴牴鎹��搴撳崟鐢熸垚鍏ュ簱鍗� + /// </summary> + /// <param name="returnId">閫�鏂欏崟ID</param> + /// <returns></returns> + [HttpPost, Route("IsReturnCreateInOrder")] + public WebResponseContent IsReturnCreateInOrder(int returnId) + { + return Service.IsReturnCreateInOrder(returnId); + } + } +} diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" index 0896fa9..283c8be 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/appsettings.json" @@ -13,7 +13,7 @@ //杩炴帴瀛楃涓� //"ConnectionString": "HTI6FB1H05Krd07mNm9yBCNhofW6edA5zLs9TY~MNthRYW3kn0qKbMIsGp~3yyPDF1YZUCPBQx8U0Jfk4PH~ajNFXVIwlH85M3F~v_qKYQ3CeAz3q1mLVDn8O5uWt1~3Ut2V3KRkEwYHvW2oMDN~QIDXPxDgXN0R2oTIhc9dNu7QNaLEknblqmHhjaNSSpERdDVZIgHnMKejU_SL49tralBkZmDNi0hmkbL~837j1NWe37u9fJKmv91QPb~16JsuI9uu0EvNZ06g6PuZfOSAeFH9GMMIZiketdcJG3tHelo=", //"ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=P@ssw0rd;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", - "ConnectionString": "Data Source=10.30.4.92;Initial Catalog=WMS_TC;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", + "ConnectionString": "Data Source=.;Initial Catalog=WIDESEAWMS_HUAIAN;User ID=sa;Password=123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //鏃MS鏁版嵁搴撹繛鎺� //"TeConnectionString": "Data Source=10.30.4.92;Initial Catalog=TeChuang;User ID=sa;Password=duo123456;Integrated Security=False;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", //璺ㄥ煙 diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/common/config.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/common/config.js" index 0e01f92..2e28318 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/common/config.js" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/common/config.js" @@ -1,5 +1,5 @@ let config = { - baseUrl: 'http://10.30.4.92:9283', + baseUrl: 'http://127.0.0.1:9293', urls: [ 'http://10.30.4.92:9283', 'http://10.30.4.92:9283' diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/uview-ui/libs/request/index.js" "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/uview-ui/libs/request/index.js" index 1f5f471..cc215c1 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/uview-ui/libs/request/index.js" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/\346\267\256\345\256\211PDA/uview-ui/libs/request/index.js" @@ -111,7 +111,7 @@ responseType: 'text', showLoading: true, // 鏄惁鏄剧ず璇锋眰涓殑loading loadingText: '璇锋眰涓�...', - loadingTime: 800, // 鍦ㄦ鏃堕棿鍐咃紝璇锋眰杩樻病鍥炴潵鐨勮瘽锛屽氨鏄剧ず鍔犺浇涓姩鐢伙紝鍗曚綅ms + loadingTime: 1500, // 鍦ㄦ鏃堕棿鍐咃紝璇锋眰杩樻病鍥炴潵鐨勮瘽锛屽氨鏄剧ず鍔犺浇涓姩鐢伙紝鍗曚綅ms timer: null, // 瀹氭椂鍣� originalData: false, // 鏄惁鍦ㄦ嫤鎴櫒涓繑鍥炴湇鍔$鐨勫師濮嬫暟鎹紝瑙佹枃妗h鏄� loadingMask: true, // 灞曠ずloading鐨勬椂鍊欙紝鏄惁缁欎竴涓�忔槑鐨勮挋灞傦紝闃叉瑙︽懜绌块�� -- Gitblit v1.9.3