From 734f49c3f74e4a46cfb5892ce60dbf1bb86e74ab Mon Sep 17 00:00:00 2001 From: wankeda <Administrator@DESKTOP-HAU3ST3> Date: 星期二, 22 七月 2025 19:14:39 +0800 Subject: [PATCH] 出入库流程 --- WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Service/InboundOrderService.cs | 185 ++++++++++++++-------------------------------- 1 files changed, 56 insertions(+), 129 deletions(-) diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Service/InboundOrderService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Service/InboundOrderService.cs index 1f0db15..936e7bf 100644 --- a/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Service/InboundOrderService.cs +++ b/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Service/InboundOrderService.cs @@ -9,6 +9,7 @@ using SqlSugar; using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using System.Reflection; using System.Reflection.Metadata; @@ -18,10 +19,12 @@ using WIDESEA_Core.Attributes; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; +using WIDESEA_Core.CodeConfigEnum; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_Core.Utilities; using WIDESEA_DTO; +using WIDESEA_DTO.Basic; using WIDESEA_DTO.Inbound; using WIDESEA_IBasicService; using WIDESEA_IInboundRepository; @@ -44,82 +47,6 @@ public Dt_InboundOrder GetInboundOrder(string inboundOrderNo) { return BaseDal.Db.Queryable<Dt_InboundOrder>().Includes(x => x.Details).First(x => x.OrderNo == inboundOrderNo); ; - } - - /// <summary> - /// 缁勭洏 - /// </summary> - /// <param name="materielGroupDTO"></param> - /// <returns></returns> - public WebResponseContent MaterielGroup(MaterielGroupDTO materielGroupDTO) - { - WebResponseContent content = new WebResponseContent(); - try - { - List<MatSerialNumberDTO> matSerialNumberDTOs = CodeAnalysisHelper.CodeAnalysis<MatSerialNumberDTO>(AnalysisCode.InnerCode, materielGroupDTO.SerialNumbers); - (bool, string, object?) result2 = ModelValidate.ValidateModelData(matSerialNumberDTOs); - if (!result2.Item1) return content = WebResponseContent.Instance.Error(result2.Item2); - - List<string> materielCodes = matSerialNumberDTOs.GroupBy(x => x.MaterielCode).Select(x => x.Key).ToList(); - - List<Dt_MaterielInfo> materielInfos = _basicService.MaterielInfoService.GetMaterielInfos(materielCodes); - - Dt_InboundOrder inboundOrder = GetInboundOrder(materielGroupDTO.OrderNo); - - - Dt_StockInfo? stockInfo = _stockService.StockInfoService.GetStockByPalletCode(materielGroupDTO.PalletCode); - - (bool, string, object?) result = CheckMaterielGroupParam(materielGroupDTO, matSerialNumberDTOs, materielInfos, materielCodes, inboundOrder, stockInfo); - if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2); - - if (stockInfo == null) - { - stockInfo = new Dt_StockInfo(); - stockInfo.Details = new List<Dt_StockInfoDetail>(); - } - - List<Dt_StockInfoDetail> stockInfoDetails = _mapper.Map<List<Dt_StockInfoDetail>>(matSerialNumberDTOs); - stockInfoDetails.ForEach(x => - { - x.Status = 0; - x.OrderNo = inboundOrder.OrderNo; - x.MaterielName = materielInfos.FirstOrDefault(v => v.MaterielCode == x.MaterielCode)?.MaterielName ?? ""; - x.StockId = stockInfo.Id != 0 ? stockInfo.Id : 0; - }); - if (stockInfo.Id == 0) - { - stockInfo.PalletCode = materielGroupDTO.PalletCode; - stockInfo.StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(); - } - stockInfo.Details.AddRange(stockInfoDetails); - - List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>(); - for (int i = 0; i < materielCodes.Count; i++) - { - //decimal stockQuantity = stockInfoDetails.Where(x => x.MaterielCode == materielCodes[i]).Sum(x => x.StockQuantity); - //inboundOrderDetails.AddRange(_inboundOrderDetailService.UpdateReceiptQuantity(inboundOrder.Details.Where(x => x.MaterielCode == materielCodes[i]).ToList(), stockQuantity)); - } - List<int> updateDetailIds = inboundOrderDetails.Select(x => x.Id).ToList(); - if (inboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()) == null && inboundOrder.Details.FirstOrDefault(x => !updateDetailIds.Contains(x.Id) && x.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()) == null) - { - inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt(); - } - else if (inboundOrder.OrderStatus == InboundStatusEnum.鏈紑濮�.ObjToInt()) - { - inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱涓�.ObjToInt(); - } - - content = MaterielGroupUpdateData(inboundOrder, inboundOrderDetails, stockInfo); - } - catch (Exception ex) - { - content = WebResponseContent.Instance.Error(ex.Message); - } - finally - { - - } - return content; } /// <summary> @@ -157,72 +84,72 @@ /// <param name="inboundOrder">鍏ュ簱鍗曟嵁</param> /// <param name="stockInfo">缁勭洏淇℃伅</param> /// <returns></returns> - public (bool, string, object?) CheckMaterielGroupParam(MaterielGroupDTO materielGroupDTO, List<MatSerialNumberDTO> matSerialNumberDTOs, List<Dt_MaterielInfo> materielInfos, List<string> materielCodes, Dt_InboundOrder inboundOrder, Dt_StockInfo stockInfo) - { - (bool, string, object?) result = ModelValidate.ValidateModelData(materielGroupDTO); - if (!result.Item1) return result; + //public (bool, string, object?) CheckMaterielGroupParam(MaterielGroupDTO materielGroupDTO, List<MatSerialNumberDTO> matSerialNumberDTOs, List<Dt_MaterielInfo> materielInfos, List<string> materielCodes, Dt_InboundOrder inboundOrder, Dt_StockInfo stockInfo) + //{ + // (bool, string, object?) result = ModelValidate.ValidateModelData(materielGroupDTO); + // if (!result.Item1) return result; - if (_taskRepository.QueryFirst(x => x.PalletCode == materielGroupDTO.PalletCode) != null) - { - return (false, "璇ユ墭鐩樺彿宸叉湁浠诲姟", materielGroupDTO); - } + // if (_taskRepository.QueryFirst(x => x.PalletCode == materielGroupDTO.PalletCode) != null) + // { + // return (false, "璇ユ墭鐩樺彿宸叉湁浠诲姟", materielGroupDTO); + // } - if (stockInfo != null && !string.IsNullOrEmpty(stockInfo.LocationCode) && stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt()) - { - return (false, "宸蹭笂鏋剁殑鎵樼洏涓嶈兘鍐嶆缁勭洏", materielGroupDTO); - } + // if (stockInfo != null && !string.IsNullOrEmpty(stockInfo.LocationCode) && stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt()) + // { + // return (false, "宸蹭笂鏋剁殑鎵樼洏涓嶈兘鍐嶆缁勭洏", materielGroupDTO); + // } - if (_stockService.StockInfoDetailService.ExistSerialNumbers(materielGroupDTO.SerialNumbers)) - { - return (false, "鏈夊簭鍒楀彿鍦ㄥ簱瀛樹腑宸插瓨鍦�", materielGroupDTO); - } + // if (_stockService.StockInfoDetailService.ExistSerialNumbers(materielGroupDTO.SerialNumbers)) + // { + // return (false, "鏈夊簭鍒楀彿鍦ㄥ簱瀛樹腑宸插瓨鍦�", materielGroupDTO); + // } - if (materielInfos.Count != materielCodes.Count) - { - return (false, "鏈夌墿鏂欎俊鎭湭褰曞叆锛岃褰曞叆鐗╂枡淇℃伅", materielGroupDTO); - } + // if (materielInfos.Count != materielCodes.Count) + // { + // return (false, "鏈夌墿鏂欎俊鎭湭褰曞叆锛岃褰曞叆鐗╂枡淇℃伅", materielGroupDTO); + // } - if (materielCodes.Count > 1 && materielInfos.FirstOrDefault(x => !x.IsMixMateriel) != null) - { - return (false, "鏈夌墿鏂欎笉鍙贩鏂欑粍鐩�", materielGroupDTO); - } + // if (materielCodes.Count > 1 && materielInfos.FirstOrDefault(x => !x.IsMixMateriel) != null) + // { + // return (false, "鏈夌墿鏂欎笉鍙贩鏂欑粍鐩�", materielGroupDTO); + // } - List<string> batchs = matSerialNumberDTOs.GroupBy(x => x.BatchNo).Select(x => x.Key).ToList(); - if (batchs.Count > 1 && materielInfos.FirstOrDefault(x => !x.IsMixMateriel) != null) - { - return (false, "鏈夌墿鏂欎笉鍙贩鎵圭粍鐩�", materielGroupDTO); - } + // List<string> batchs = matSerialNumberDTOs.GroupBy(x => x.BatchNo).Select(x => x.Key).ToList(); + // if (batchs.Count > 1 && materielInfos.FirstOrDefault(x => !x.IsMixMateriel) != null) + // { + // return (false, "鏈夌墿鏂欎笉鍙贩鎵圭粍鐩�", materielGroupDTO); + // } - if (inboundOrder == null) - { - return (false, "鍗曟嵁涓嶅瓨鍦�", materielGroupDTO); - } + // if (inboundOrder == null) + // { + // return (false, "鍗曟嵁涓嶅瓨鍦�", materielGroupDTO); + // } - if (inboundOrder.Details == null || inboundOrder.Details.Count == 0) - { - return (false, "鏃犲崟鎹槑缁嗕俊鎭�", materielGroupDTO); - } + // if (inboundOrder.Details == null || inboundOrder.Details.Count == 0) + // { + // return (false, "鏃犲崟鎹槑缁嗕俊鎭�", materielGroupDTO); + // } - if (inboundOrder.OrderStatus != InboundStatusEnum.鏈紑濮�.ObjToInt() && inboundOrder.OrderStatus != InboundStatusEnum.鍏ュ簱涓�.ObjToInt()) - { - return (false, "璇ュ崟鎹笉鍙啀缁勭洏", materielGroupDTO); - } + // if (inboundOrder.OrderStatus != InboundStatusEnum.鏈紑濮�.ObjToInt() && inboundOrder.OrderStatus != InboundStatusEnum.鍏ュ簱涓�.ObjToInt()) + // { + // return (false, "璇ュ崟鎹笉鍙啀缁勭洏", materielGroupDTO); + // } - List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => materielCodes.Contains(x.MaterielCode)).ToList(); + // List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => materielCodes.Contains(x.MaterielCode)).ToList(); - if (inboundOrderDetails.GroupBy(x => x.MaterielCode).Count() != materielCodes.Count) - { - return (false, "鏈夌墿鏂欎笉鍦ㄥ崟鎹唴", materielGroupDTO); - } + // if (inboundOrderDetails.GroupBy(x => x.MaterielCode).Count() != materielCodes.Count) + // { + // return (false, "鏈夌墿鏂欎笉鍦ㄥ崟鎹唴", materielGroupDTO); + // } - IGrouping<string, Dt_InboundOrderDetail>? temp = inboundOrder.Details.Where(x => materielCodes.Contains(x.MaterielCode)).GroupBy(x => x.MaterielCode).FirstOrDefault(x => x.Sum(v => v.OverInQuantity) >= x.Sum(v => v.OrderQuantity) || x.Sum(v => v.ReceiptQuantity) >= x.Sum(v => v.OrderQuantity)); - if (temp != null) - { - return (false, "鏈夌墿鏂欒秴鍑哄崟鎹暟閲�", materielGroupDTO); - } + // IGrouping<string, Dt_InboundOrderDetail>? temp = inboundOrder.Details.Where(x => materielCodes.Contains(x.MaterielCode)).GroupBy(x => x.MaterielCode).FirstOrDefault(x => x.Sum(v => v.OverInQuantity) >= x.Sum(v => v.OrderQuantity) || x.Sum(v => v.ReceiptQuantity) >= x.Sum(v => v.OrderQuantity)); + // if (temp != null) + // { + // return (false, "鏈夌墿鏂欒秴鍑哄崟鎹暟閲�", materielGroupDTO); + // } - return (true, "鎴愬姛", materielGroupDTO); - } + // return (true, "鎴愬姛", materielGroupDTO); + //} /// <summary> /// PDA鍒嗛〉鏌ヨ鏁版嵁 -- Gitblit v1.9.3