From 092f6e9efb6e4c2bc401ec134391ab0a25773b47 Mon Sep 17 00:00:00 2001 From: wankeda <Administrator@DESKTOP-HAU3ST3> Date: 星期五, 21 二月 2025 16:41:38 +0800 Subject: [PATCH] PP仓提升机侧输送线流程 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs | 637 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 507 insertions(+), 130 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 bcf23c8..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,10 +457,10 @@ List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); List<int> detailKeys = new List<int>(); - int newCount = 0; + 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($"鏈湪鏀惰揣鍗曟槑缁嗕腑鎵惧埌璇ラ噰璐崟"); } @@ -363,6 +478,7 @@ BatchNo = model.LotNo, MaterielCode = materielInfo.MaterielCode, MaterielName = materielInfo.MaterielName, + MaterielSpec=materielInfo.MaterielSpec, OrderNo = inboundOrder.InboundOrderNo, SerialNumber = model.SerialNumber, StockQuantity = model.Quantity, @@ -373,7 +489,7 @@ EffectiveDate = model.EffectiveDate, InboundOrderRowNo = notGroupDetail.RowNo, }; - newCount++; + oldCount++; if (stockInfo.Id > 0) { @@ -389,10 +505,24 @@ } //鍏ュ簱鏄庣粏鏂板瀹屾垚鏁伴噺 - //int newCount = inboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count; - if (inboundOrder.Details.Count == (newCount + oldCount)) + 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(); @@ -409,42 +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鍏ュ簱瀹屾垚 - List<ERPInboundDetailModel> detailModels = new List<ERPInboundDetailModel>(); - foreach (var item in stockInfo.Details) + #region 鍏ュ簱瀹屾垚涓婃姤ERP + if (inboundOrder != null && inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType != InOrderTypeEnum.Allocat.ObjToInt()) { - ERPInboundDetailModel detailModel = new ERPInboundDetailModel() + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) { - 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() - }; - detailModels.Add(detailModel); + FeedbackReturnOrder(inboundOrder, returnOrder); + } + else + { + FeedbackInboundOrder(inboundOrder); + } } - ERPInboundModel eRPInboundModel = new ERPInboundModel() - { - Code = CreateCodeByRule(nameof(RuleCodeEnum.RLCodeRule)), - 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 = warehouse.WarehouseCode, - Way = 1, - Details = detailModels - }; - //鎺ㄩ�丒RP 娴嬭瘯娉ㄩ噴 - _invokeERPService.InvokeInboundOrderApi(eRPInboundModel); #endregion content.OK(); } @@ -455,7 +569,93 @@ } return content; } + /// <summary> + /// WMS鍏ュ钩搴撲笉鎺ㄥ崟鎹� + /// </summary> + /// <param name="warehouseId"></param> + /// <param name="serNums"></param> + /// <returns></returns> + public WebResponseContent WMSInPinKu(int warehouseId, List<string> serNums) + { + WebResponseContent content = new WebResponseContent(); + try + { + Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == warehouseId); + if (warehouse == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌浠撳簱淇℃伅"); + } + List<MatSerNumAnalysisModel> models = CodeAnalysisHelper.CodeAnalysis<MatSerNumAnalysisModel>(AnalysisCodeEnum.MatSerNumAnalysis, serNums); + if (models.Select(x => x.MaterielCode).Distinct().Count() > 1) + { + return WebResponseContent.Instance.Error($"鐗╂枡涓嶅彲娣锋斁"); + } + string materielCode = models.FirstOrDefault()?.MaterielCode ?? ""; + Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == materielCode); + if (materielInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�"); + } + float beforeQuantity = 0; + Dt_StockInfo stockInfo = new Dt_StockInfo() + { + PalletCode = DateTime.Now.ToString("yyyyMMddHHmmss"), + StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), + WarehouseId = warehouse.WarehouseId, + PalletType = PalletTypeEnum.SmallPallet.ObjToInt(), + LocationCode = "骞冲簱浣�", + Details = new List<Dt_StockInfoDetail>() + }; + List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); + foreach (var model in models) + { + Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail() + { + BatchNo = model.LotNo, + MaterielCode = materielInfo.MaterielCode, + MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec, + SerialNumber = model.SerialNumber, + StockQuantity = model.Quantity, + OutboundQuantity = 0, + OrderNo = "", + Unit = materielInfo.MaterielUnit, + Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), + ProductionDate = model.ProductionDate, + EffectiveDate = model.EffectiveDate, + }; + + if (stockInfo.Id > 0) + { + stockInfoDetail.StockId = stockInfo.Id; + } + stockInfo.Details.Add(stockInfoDetail); + + stockInfoDetails.Add(stockInfoDetail); + + } + float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity); + _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(); + } + _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.Inbound); + _unitOfWorkManage.CommitTran(); + content.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } /// <summary> /// 缁勭洏 /// </summary> @@ -486,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) { @@ -498,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) { @@ -513,7 +716,7 @@ return WebResponseContent.Instance.Error($"鏈壘鍒拌鐗╂枡鐨勪俊鎭�"); } - List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode && x.BatchNo==(models.FirstOrDefault()?.LotNo ?? "")).ToList(); + List<Dt_InboundOrderDetail> inboundOrderDetails = inboundOrder.Details.Where(x => x.MaterielCode == materielCode && x.BatchNo == (models.FirstOrDefault()?.LotNo ?? "")).ToList(); if (inboundOrderDetails == null || inboundOrderDetails.Count <= 0) { @@ -569,28 +772,34 @@ stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); } } + else if(warehouse.WarehouseCode == WarehouseEnum.HA57.ToString()) + { + if (models.Count >= 2) + { + return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + } List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); - List<int> detailKeys = new List<int>(); foreach (var model in models) { 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.New.ObjToInt() && x.OrderQuantity == model.Quantity && !detailKeys.Contains(x.Id) && 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) { return WebResponseContent.Instance.Error($"璇ョ墿鏂欏湪璇ュ叆搴撳崟涓凡鍏ㄩ儴缁勭洏瀹屾垚"); } - detailKeys.Add(notGroupDetail.Id); 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, @@ -610,8 +819,11 @@ stockInfoDetails.Add(stockInfoDetail); - notGroupDetail.ReceiptQuantity = model.Quantity; - notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt(); + notGroupDetail.ReceiptQuantity += model.Quantity; + if (notGroupDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + notGroupDetail.OrderDetailStatus = OrderDetailStatusEnum.GroupAndInbound.ObjToInt(); + } } float totalQuantity = stockInfo.Details.Sum(x => x.StockQuantity); @@ -640,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) { @@ -713,6 +1067,13 @@ stockInfo.PalletType = PalletTypeEnum.LargestPallet.ObjToInt(); } } + else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ToString()) + { + if (models.Count >= 2) + { + return WebResponseContent.Instance.Error($"缁勭洏鏄庣粏涓嶅敮涓�"); + } + } List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); List<int> detailKeys = new List<int>(); @@ -723,6 +1084,7 @@ BatchNo = model.LotNo, MaterielCode = materielInfo.MaterielCode, MaterielName = materielInfo.MaterielName, + MaterielSpec = materielInfo.MaterielSpec, OrderNo = "", SerialNumber = model.SerialNumber, StockQuantity = model.Quantity, @@ -766,11 +1128,10 @@ return content; } /// <summary> - /// 鍏ュ簱瀹屾垚涓婃姤ERP 寮冪敤 + /// 鍏ュ簱瀹屾垚涓婃姤ERP /// </summary> /// <returns></returns> - #region 寮冪敤 - public WebResponseContent FeedbackInboundOrder(Dt_StockInfo stockInfo, Dt_InboundOrder inboundOrder, List<ERPInboundDetailModel> detailModels) + public WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder) { WebResponseContent content = new WebResponseContent(); try @@ -779,20 +1140,45 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); } - if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt()) + + List<Dt_StockInfoDetail> stockInfoDetails = _stockRepository.StockInfoDetailRepository.QueryData(x => x.OrderNo == inboundOrder.InboundOrderNo); + if (stockInfoDetails.Count == 0) { - return WebResponseContent.Instance.Error($"鍏ュ簱鍗曟嵁宸插畬鎴�"); + return WebResponseContent.Instance.Error($"鏈壘鍒板簱瀛樻槑缁嗕俊鎭�"); } - Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId); + //鑾峰彇璇ュ叆搴撳崟鎵�鏈夊簱瀛� + List<Dt_StockInfo> stockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => stockInfoDetails.GroupBy(x => x.StockId).Select(x => x.Key).Contains(x.Id)).Includes(x => x.Details).ToList(); + Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId); if (warehouse == null) { return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); } - + List<ERPInboundDetailModel>? detailModels = new List<ERPInboundDetailModel>(); + foreach (var stockInfo in stockInfos) + { + foreach (var item in stockInfo.Details.GroupBy(x => x.InboundOrderRowNo).Select(x => x.Key)) + { + //鍖哄垎涓嶅悓鎵规 + Dt_StockInfoDetail? dt_StockInfoDetail = stockInfo.Details.Where(x => x.InboundOrderRowNo == item).FirstOrDefault(); + ERPInboundDetailModel detailModel = new ERPInboundDetailModel() + { + ExpiryDate = dt_StockInfoDetail?.EffectiveDate ?? "", + LocationCode = warehouse.WarehouseCode, + MaterialsCode = dt_StockInfoDetail.MaterielCode, + MfgDate = dt_StockInfoDetail.ProductionDate ?? "", + QtyCustoms = "0", + Quantity = stockInfo.Details.Where(x => x.InboundOrderRowNo == item).Sum(x => x.StockQuantity).ToString(), + Rack = stockInfo.LocationCode, + ReceiptCode = inboundOrder.UpperOrderNo, + ReceiptSerNo = item.ToString() + }; + detailModels.Add(detailModel); + } + } ERPInboundModel model = new ERPInboundModel() { Code = CreateCodeByRule(nameof(RuleCodeEnum.RLCodeRule)), - CreatorCode = inboundOrder.Creater,//娴嬭瘯 + 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, @@ -802,7 +1188,7 @@ Way = 1, Details = detailModels }; - //鎺ㄩ�丒RP 娴嬭瘯娉ㄩ噴 + //鎺ㄩ�丒RP _invokeERPService.InvokeInboundOrderApi(model); return WebResponseContent.Instance.OK(); } @@ -813,75 +1199,66 @@ } return content; } - #endregion /// <summary> - /// 鍏ュ簱瀹屾垚涓婃姤ERP + /// 閫�鏂欏畬鎴愪笂鎶ヨ嚦ERP /// </summary> - /// <returns></returns> - public WebResponseContent FeedbackInboundOrder(Dt_InboundOrder inboundOrder, List<Dt_StockInfoDetail> stockInfoDetails) + public WebResponseContent FeedbackReturnOrder(Dt_InboundOrder inboundOrder,Dt_ReturnOrder returnOrder) { - WebResponseContent content = new WebResponseContent(); + WebResponseContent content= new WebResponseContent(); try { - if (inboundOrder.Details.Count == 0) + if (returnOrder==null) { - return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); + return content.OK(); } - if (stockInfoDetails.Count==0) - { - return WebResponseContent.Instance.Error($"鏈壘鍒板簱瀛樻槑缁嗕俊鎭�"); - } - Dt_Warehouse warehouse = _warehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId); - if (warehouse == null) - { - return WebResponseContent.Instance.Error($"鏈壘鍒颁粨搴撲俊鎭�"); - } - List<ERPInboundDetailModel>? detailModels = null; - foreach (var item in stockInfoDetails) - { - Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.Id == item.StockId); - if (detailModels!=null && detailModels.FirstOrDefault(x=>x.Rack==stockInfo.LocationCode)!=null) + //鑾峰彇浠撳簱缂栫爜 + 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 { - var detailModel = detailModels.FirstOrDefault(x => x.Rack == stockInfo.LocationCode); - detailModel.Quantity = (Convert.ToDouble(detailModel.Quantity) + item.StockQuantity).ToString(); - } - else - { - ERPInboundDetailModel detailModel = new ERPInboundDetailModel() + 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 { - 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() - }; - detailModels.Add(detailModel); - } - } - ERPInboundModel model = new ERPInboundModel() + 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() { - Code = CreateCodeByRule(nameof(RuleCodeEnum.RLCodeRule)), - 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 = warehouse.WarehouseCode, Way = 1, - Details = detailModels + 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 }; - //鎺ㄩ�丒RP 娴嬭瘯娉ㄩ噴 - _invokeERPService.InvokeInboundOrderApi(model); - return WebResponseContent.Instance.OK(); + _invokeERPService.InvokeReturnApi(returnModel); + return content.OK(); } catch (Exception ex) { - _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; @@ -901,7 +1278,7 @@ throw new ArgumentNullException(nameof(ruleCode)); SqlSugarClient sugarClient = new SqlSugarClient(new ConnectionConfig { - IsAutoCloseConnection = false, + IsAutoCloseConnection = true, DbType = DbType.SqlServer, ConnectionString = DBContext.ConnectionString }); @@ -945,7 +1322,7 @@ return code; } } - + #region 寮冪敤 /// <summary> /// 鍏ュ簱瀹屾垚鍥炰紶鍒癊RP /// </summary> @@ -1028,7 +1405,7 @@ // return WebResponseContent.Instance.Error(ex.Message); // } //} - + #endregion public int GetPalletType(Dt_Warehouse warehouse, string palletCode) { if (warehouse.WarehouseCode == WarehouseEnum.HA64.ToString()) -- Gitblit v1.9.3