From 107315a3aec14ff7cffface42c35fa45e2a7688a Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期一, 13 一月 2025 19:58:01 +0800 Subject: [PATCH] 优化接收ERP出库单 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs | 243 ++++++++++++++++++++++++++++++----------------- 1 files changed, 154 insertions(+), 89 deletions(-) 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 9c7ded2..56030ff 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" @@ -52,10 +52,11 @@ private readonly IRecordService _recordService; private readonly IInvokeERPService _invokeERPService; private readonly IWarehouseService _warehouseService; + private readonly IPalletTypeInfoRepository _palletTypeInfoRepository; public IInboundOrderRepository Repository => BaseDal; - public InboundOrderService(IInboundOrderRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, IStockRepository stockRepository, IRecordService recordService, IInvokeERPService invokeERPService, IWarehouseService warehouseService) : base(BaseDal) + public InboundOrderService(IInboundOrderRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IInboundRepository inboundRepository, IBasicRepository basicRepository, IStockRepository stockRepository, IRecordService recordService, IInvokeERPService invokeERPService, IWarehouseService warehouseService, IPalletTypeInfoRepository palletTypeInfoRepository) : base(BaseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; @@ -65,6 +66,7 @@ _recordService = recordService; _invokeERPService = invokeERPService; _warehouseService = warehouseService; + _palletTypeInfoRepository = palletTypeInfoRepository; } /// <summary> /// 鍏朵粬鍏ュ簱鍗曞垱寤� @@ -117,11 +119,11 @@ List<Dt_InboundOrder> dt_ReceiveOrders = new List<Dt_InboundOrder>(); if (string.IsNullOrEmpty(orderNo)) { - dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5); + dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); } else { - dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => (x.InboundOrderNo.Contains(orderNo)) && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5); + dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => (x.InboundOrderNo.Contains(orderNo)) && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); } content.OK(data: dt_ReceiveOrders); @@ -493,7 +495,7 @@ PalletCode = palletCode, StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(), WarehouseId = inboundOrder.WarehouseId, - PalletType = PalletTypeEnum.SmallPallet.ObjToInt(), + PalletType = GetPalletType(warehouse, palletCode, materielInfo), Details = new List<Dt_StockInfoDetail>() }; } @@ -504,7 +506,30 @@ return WebResponseContent.Instance.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 WebResponseContent.Instance.Error($"{batchNo}娴嬭瘯鏋跺凡瀛樺湪"); + } + if (models.Count >= 2) + { + return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + if (palletCode.Substring(0, 1) == "6") + { + stockInfo.PalletType = PalletTypeEnum.MediumPallet.ObjToInt(); + } + else + { + stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); + } + } List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); List<int> detailKeys = new List<int>(); @@ -567,14 +592,6 @@ _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup); _unitOfWorkManage.CommitTran(); - //if (warehouse.WarehouseCode==WarehouseEnum.HA153.ToString()) - //{ - // //鍚屾娴嬭瘯鏋朵俊鎭� - // foreach (var model in models) - // { - // _taskService.TestSynStock(new TestToolSynInfo() { ToolCode = model.LotNo, Life = Initiallife }); - // } - //} content.OK(); } catch (Exception ex) @@ -614,6 +631,7 @@ 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() @@ -621,7 +639,7 @@ PalletCode = palletCode, StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt(), WarehouseId = warehouse.WarehouseId, - PalletType = PalletTypeEnum.SmallPallet.ObjToInt(), + PalletType = GetPalletType(warehouse, palletCode, materielInfo), Details = new List<Dt_StockInfoDetail>() }; } @@ -636,6 +654,16 @@ if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) { + string batchNo = models.FirstOrDefault()?.LotNo ?? ""; + Dt_StockInfoDetail existDetail = _stockRepository.StockInfoDetailRepository.QueryFirst(x => x.BatchNo == batchNo); + if (existDetail != null) + { + return WebResponseContent.Instance.Error($"{batchNo}娴嬭瘯鏋跺凡瀛樺湪"); + } + if (models.Count >= 2) + { + return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } stockInfo.Remark = Initiallife.ToString(); if (palletCode.Substring(0, 1) == "6") { @@ -660,7 +688,7 @@ SerialNumber = model.SerialNumber, StockQuantity = model.Quantity, OutboundQuantity = 0, - Unit= materielInfo.MaterielUnit, + Unit = materielInfo.MaterielUnit, Status = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(), ProductionDate = model.ProductionDate, EffectiveDate = model.EffectiveDate, @@ -689,11 +717,6 @@ } _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup); _unitOfWorkManage.CommitTran(); - //鍚屾娴嬭瘯鏋朵俊鎭� - //foreach (var model in models) - //{ - // _taskService.TestSynStock(new TestToolSynInfo() { ToolCode = model.LotNo, Life = Initiallife }); - //} content.OK(); } catch (Exception ex) @@ -703,7 +726,6 @@ } return content; } - /// <summary> /// 鍏ュ簱瀹屾垚涓婃姤ERP /// </summary> @@ -721,7 +743,6 @@ { return WebResponseContent.Instance.Error($"鍏ュ簱鍗曟嵁宸插畬鎴�"); } - Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId); if (warehouse == null) { @@ -747,6 +768,7 @@ } catch (Exception ex) { + _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; @@ -757,82 +779,125 @@ /// </summary> /// <param name="id"></param> /// <returns></returns> - public WebResponseContent FeedbackInboundOrder(int id) + //public WebResponseContent FeedbackInboundOrder(int id) + //{ + // try + // { + // Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == id).Includes(x => x.Details).First(); + // if (inboundOrder == null) + // { + // return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅"); + // } + // if (inboundOrder.Details == null || inboundOrder.Details.Count == 0) + // { + // return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); + // } + // if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()) + // { + // return WebResponseContent.Instance.Error($"鍏ュ簱鍗曟嵁宸插畬鎴�"); + // } + + // List<Dt_StockInfo> stockInfos = Db.Queryable<Dt_StockInfo>().Where(x => x.Details.Any(v => v.OrderNo == inboundOrder.InboundOrderNo)).Includes(x => x.Details).ToList(); + // List<Dt_Warehouse> warehouses = Db.Queryable<Dt_Warehouse>().ToList(); + + // List<ERPInboundDetailModel> detailModels = new List<ERPInboundDetailModel>(); + // foreach (var item in inboundOrder.Details) + // { + // Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(v => v.InboundOrderRowNo == item.RowNo && v.MaterielCode == item.MaterielCode)); + // if (stockInfo == null) + // { + // return WebResponseContent.Instance.Error($"鏈壘鍒板簱瀛樹俊鎭�"); + // } + + // Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseId == stockInfo.WarehouseId); + // if (warehouse == null) + // { + // return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); + // } + + // ERPInboundDetailModel detailModel = new ERPInboundDetailModel() + // { + // ExpiryDate = stockInfo.Details.FirstOrDefault()?.EffectiveDate ?? "", + // LocationCode = warehouse.WarehouseCode, + // MaterialsCode = item.MaterielCode, + // MfgDate = stockInfo.Details.FirstOrDefault()?.ProductionDate ?? "", + // QtyCustoms = "0", + // Quantity = stockInfo.Details.Sum(x => x.StockQuantity).ToString(), + // Rack = stockInfo.LocationCode, + // ReceiptCode = inboundOrder.UpperOrderNo, + // ReceiptSerNo = item.RowNo.ToString() + // }; + // detailModels.Add(detailModel); + // } + // Dt_Warehouse? warehouse2 = warehouses.FirstOrDefault(x => x.WarehouseId == inboundOrder.WarehouseId); + // if (warehouse2 == null) + // { + // return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); + // } + // ERPInboundModel model = new ERPInboundModel() + // { + // Code = inboundOrder.InboundOrderNo, + // CreatorCode = inboundOrder.Creater,//娴嬭瘯 + // EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), + // StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + // SuppliersId = inboundOrder.SupplierId, + // Type = "S", + // UniqueTag = inboundOrder.Id.ToString(), + // WarehouseCode = warehouse2.WarehouseCode, + // Way = 1, + // Details = detailModels + // }; + // //娴嬭瘯娉ㄩ噴 + // _invokeERPService.InvokeInboundOrderApi(model); + // return WebResponseContent.Instance.OK(); + // } + // catch (Exception ex) + // { + // return WebResponseContent.Instance.Error(ex.Message); + // } + //} + + public int GetPalletType(Dt_Warehouse warehouse, string palletCode, Dt_MaterielInfo materielInfo) { - try + if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) { - Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == id).Includes(x => x.Details).First(); - if (inboundOrder == null) + if (palletCode.Substring(0, 1) == "6") { - return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅"); + return PalletTypeEnum.MediumPallet.ObjToInt(); } - if (inboundOrder.Details == null || inboundOrder.Details.Count == 0) + else { - return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); + return PalletTypeEnum.LargestPallet.ObjToInt(); } - if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()) - { - return WebResponseContent.Instance.Error($"鍏ュ簱鍗曟嵁宸插畬鎴�"); - } - - List<Dt_StockInfo> stockInfos = Db.Queryable<Dt_StockInfo>().Where(x => x.Details.Any(v => v.OrderNo == inboundOrder.InboundOrderNo)).Includes(x => x.Details).ToList(); - List<Dt_Warehouse> warehouses = Db.Queryable<Dt_Warehouse>().ToList(); - - List<ERPInboundDetailModel> detailModels = new List<ERPInboundDetailModel>(); - foreach (var item in inboundOrder.Details) - { - Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.Details.Any(v => v.InboundOrderRowNo == item.RowNo && v.MaterielCode == item.MaterielCode)); - if (stockInfo == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒板簱瀛樹俊鎭�"); - } - - Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseId == stockInfo.WarehouseId); - if (warehouse == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); - } - - ERPInboundDetailModel detailModel = new ERPInboundDetailModel() - { - ExpiryDate = stockInfo.Details.FirstOrDefault()?.EffectiveDate ?? "", - LocationCode = warehouse.WarehouseCode, - MaterialsCode = item.MaterielCode, - MfgDate = stockInfo.Details.FirstOrDefault()?.ProductionDate ?? "", - QtyCustoms = "0", - Quantity = stockInfo.Details.Sum(x => x.StockQuantity).ToString(), - Rack = stockInfo.LocationCode, - ReceiptCode = inboundOrder.UpperOrderNo, - ReceiptSerNo = item.RowNo.ToString() - }; - detailModels.Add(detailModel); - } - Dt_Warehouse? warehouse2 = warehouses.FirstOrDefault(x => x.WarehouseId == inboundOrder.WarehouseId); - if (warehouse2 == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); - } - ERPInboundModel model = new ERPInboundModel() - { - Code = inboundOrder.InboundOrderNo, - CreatorCode = inboundOrder.Creater,//娴嬭瘯 - EntDate = inboundOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"), - StockDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - SuppliersId = inboundOrder.SupplierId, - Type = "S", - UniqueTag = inboundOrder.Id.ToString(), - WarehouseCode = warehouse2.WarehouseCode, - Way = 1, - Details = detailModels - }; - //娴嬭瘯娉ㄩ噴 - _invokeERPService.InvokeInboundOrderApi(model); - return WebResponseContent.Instance.OK(); } - catch (Exception ex) + else if (warehouse.WarehouseCode == WarehouseEnum.HA153.ObjToString()) { - return WebResponseContent.Instance.Error(ex.Message); + Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 1)); + if (palletTypeInfo == null) + { + throw new Exception($"鎵樼洏鍙烽敊璇�"); + } + return palletTypeInfo.PalletType; } + else if (warehouse.WarehouseCode == WarehouseEnum.HA152.ObjToString()) + { + Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 2)); + if (palletTypeInfo == null) + { + throw new Exception($"鎵樼洏鍙烽敊璇�"); + } + return palletTypeInfo.PalletType; + } + else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ObjToString()) + { + Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 3)); + if (palletTypeInfo == null) + { + throw new Exception($"鎵樼洏鍙烽敊璇�"); + } + return palletTypeInfo.PalletType; + } + return -1; } } } -- Gitblit v1.9.3