From 966d1fe6077c885db064fcea98bb48cbccb464d6 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期一, 14 十月 2024 17:23:02 +0800 Subject: [PATCH] WCS --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/OutboundOrder/Dt_OutOrderService.cs | 346 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 333 insertions(+), 13 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/OutboundOrder/Dt_OutOrderService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/OutboundOrder/Dt_OutOrderService.cs" index 551b0a2..258aa0d 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/OutboundOrder/Dt_OutOrderService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageOutOrderServices/OutboundOrder/Dt_OutOrderService.cs" @@ -2,12 +2,17 @@ public class Dt_OutOrderService : ServiceBase<Dt_OutOrder, IDt_OutOrderRepository>, IDt_OutOrderService { + private readonly LogFactory LogFactory = new LogFactory(); private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IDt_OutOrderProductionService _outOrderProductionService; private readonly IDt_OutOrderProductionDetailService _outOrderProductionDetailService; private readonly IDt_OutOrderDtailService _outOrderDtailService; private readonly IDt_OutOrderTransferRepository _OutOrderTransferRepository; private readonly IDt_OutOrderTransferDetailRepository _OutOrderTransferDetailRepository; + private readonly IDt_MaterielInfoRepository _materielInfoRepository; + private readonly IDt_BillGroupStockRepository _billGroupStockRepository; + private readonly IDt_OutOrderAndStockRepository _outOrderAndStockRepository; + private readonly IDt_TaskRepository _taskRepository; public Dt_OutOrderService(IDt_OutOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, @@ -15,7 +20,11 @@ IDt_OutOrderProductionDetailService outOrderProductionDetailService, IDt_OutOrderDtailService outOrderDtailService, IDt_OutOrderTransferDetailRepository outOrderTransferDetailRepository, - IDt_OutOrderTransferRepository outOrderTransferRepository) : base(BaseDal) + IDt_OutOrderTransferRepository outOrderTransferRepository, + IDt_MaterielInfoRepository materielInfoRepository, + IDt_BillGroupStockRepository billGroupStockRepository, + IDt_OutOrderAndStockRepository outOrderAndStockRepository, + IDt_TaskRepository taskRepository) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _outOrderProductionService = outOrderProductionService; @@ -23,6 +32,10 @@ _outOrderDtailService = outOrderDtailService; _OutOrderTransferDetailRepository = outOrderTransferDetailRepository; _OutOrderTransferRepository = outOrderTransferRepository; + _materielInfoRepository = materielInfoRepository; + _billGroupStockRepository = billGroupStockRepository; + _outOrderAndStockRepository = outOrderAndStockRepository; + _taskRepository = taskRepository; } /// <summary> @@ -35,51 +48,76 @@ WebResponseContent content = new WebResponseContent(); try { + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "璇锋眰", JsonConvert.SerializeObject(model)); // 1. 鏋勫缓鐢熶骇鍑哄簱鍗曞璞� var production = CreateProductionOrder(model.MainData); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "鏋勫缓鐢熶骇鍑哄簱鍗曞璞�", JsonConvert.SerializeObject(production)); // 2. 鏋勫缓鐢熶骇鍑哄簱鍗曟槑缁嗗垪琛� var productionDetails = CreateProductionDetails(model.DetailData); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "鏋勫缓鐢熶骇鍑哄簱鍗曟槑缁嗗璞�", JsonConvert.SerializeObject(productionDetails)); // 3. 鏋勫缓绯荤粺鍑哄簱鍗曞璞� var order = CreateSystemOrder(production); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "鏋勫缓绯荤粺鍑哄簱鍗曞璞�", JsonConvert.SerializeObject(order)); // 4. 鏋勫缓绯荤粺鍑哄簱鍗曟槑缁嗗垪琛� var orderDetails = CreateSystemOrderDetails(productionDetails); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "鏋勫缓绯荤粺鍑哄簱鍗曟槑缁嗗璞�", JsonConvert.SerializeObject(orderDetails)); // 寮�鍚簨鍔� _unitOfWorkManage.BeginTran(); + // 5. 娣诲姞鐢熶骇鍑哄簱鍗曞苟鑾峰彇涓婚敭ID var productionId = _outOrderProductionService.AddOrderProduction(production); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "娣诲姞鐢熶骇鍑哄簱鍗曞苟鑾峰彇涓婚敭ID", productionId); // 6. 鐢熶骇鍑哄簱鍗曟槑缁嗙粦瀹氫富琛↖D productionDetails.ForEach(item => { item.ProductionOutOrderId = productionId; }); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "鐢熶骇鍑哄簱鍗曟槑缁嗙粦瀹氫富琛↖D", productionId); // 7. 娣诲姞鐢熶骇鍑哄簱鍗曟槑缁� var detailAddResult = _outOrderProductionDetailService.AddData(productionDetails); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "娣诲姞鐢熶骇鍑哄簱鍗曟槑缁�", detailAddResult.Status); // 8. 绯荤粺鍑哄簱鍗曠粦瀹氱敓浜у嚭搴撳崟ID order.UpperOutOrderId = productionId; + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "绯荤粺鍑哄簱鍗曠粦瀹氱敓浜у嚭搴撳崟ID", productionId); // 9. 娣诲姞绯荤粺鍑哄簱鍗曞苟鑾峰彇涓婚敭ID var orderId = BaseDal.AddData(order); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "娣诲姞绯荤粺鍑哄簱鍗曞苟鑾峰彇涓婚敭ID", orderId); // 10 . 绯荤粺鍑哄簱鍗曟槑缁嗙粦瀹氫富琛↖D orderDetails.ForEach(item => { item.OutOrderId = orderId; }); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "绯荤粺鍑哄簱鍗曟槑缁嗙粦瀹氫富琛↖D", orderId); // 11. 娣诲姞绯荤粺鍑哄簱鍗曟槑缁嗗苟杩斿洖缁撴灉 content = _outOrderDtailService.AddData(orderDetails); + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "娣诲姞绯荤粺鍑哄簱鍗曟槑缁嗗苟杩斿洖缁撴灉", content.Status); + if (content.Status && productionId > 0 && detailAddResult.Status && orderId > 0) + { + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "鎵�鏈夋搷浣滄墽琛屽畬鎴愭彁浜や簨鍔�", "鏃犲弬鏁�"); _unitOfWorkManage.CommitTran(); // 鎻愪氦浜嬪姟 + } else - throw new Exception("鍑哄簱鍗曟坊鍔犲け璐�"); + { + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "娣诲姞鏁版嵁搴撳け璐�,璇锋鏌ユ暟鎹槸鍚︽纭�", $"绯荤粺鍑哄簱鍗曟槑缁�:{content.Status},娣诲姞绯荤粺鍑哄簱鍗�:{orderId > 0},鐢熶骇鍑哄簱鍗�:{productionId > 0},鐢熶骇鍑哄簱鍗曟槑缁�:{detailAddResult.Status}"); + throw new Exception("鍑哄簱鍗曟坊鍔犲け璐�" + $"绯荤粺鍑哄簱鍗曟槑缁�:{content.Status},娣诲姞绯荤粺鍑哄簱鍗�:{orderId > 0},鐢熶骇鍑哄簱鍗�:{productionId > 0},鐢熶骇鍑哄簱鍗曟槑缁�:{detailAddResult.Status}"); + } return content; } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); // 鍥炴粴浜嬪姟 + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, $"绯荤粺寮傚父锛屽紓甯镐俊鎭細{ex.Message}", "鏃犲弬鏁�"); return content.Error(ex.Message); + } + finally + { + LogFactory.GetLog("娣诲姞鐢熶骇鍑哄簱鍗�").InfoFormat(true, "鍝嶅簲", JsonConvert.SerializeObject(content)); } } @@ -95,48 +133,67 @@ { // 1. 鏋勫缓璋冩嫧鍑哄簱鍗曞璞� var transfer = CreateTransferOrder(model.MainData); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "鏋勫缓璋冩嫧鍑哄簱鍗曞璞�", JsonConvert.SerializeObject(transfer)); // 2. 鏋勫缓璋冩嫧鍑哄簱鍗曟槑缁嗗垪琛� var transferDetail = CreateTransferDetails(model.DetailData); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "鏋勫缓璋冩嫧鍑哄簱鍗曟槑缁嗗璞�", JsonConvert.SerializeObject(transferDetail)); // 3. 鏋勫缓绯荤粺鍑哄簱鍗曞璞� var order = CreateSystemOrder(transfer); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "鏋勫缓绯荤粺鍑哄簱鍗曞璞�", JsonConvert.SerializeObject(order)); // 4. 鏋勫缓绯荤粺鍑哄簱鍗曟槑缁嗗垪琛� var orderDetails = CreateSystemOrderDetails(transferDetail); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "鏋勫缓绯荤粺鍑哄簱鍗曟槑缁嗗璞�", JsonConvert.SerializeObject(orderDetails)); // 娣诲姞浜嬪姟 _unitOfWorkManage.BeginTran(); // 5. 娣诲姞璋冩嫧鍑哄簱鍗曞苟鑾峰彇涓婚敭ID var transferId = _OutOrderTransferRepository.AddData(transfer); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "娣诲姞璋冩嫧鍑哄簱鍗曞苟鑾峰彇涓婚敭ID", transferId); // 6. 璋冩嫧鍑哄簱鍗曟槑缁嗙粦瀹氫富琛↖D transferDetail.ForEach(item => { item.TransferOutOrderId = transferId; }); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "璋冩嫧鍑哄簱鍗曟槑缁嗙粦瀹氫富琛↖D", transferId); // 7. 娣诲姞鐢熶骇鍑哄簱鍗曟槑缁� var detailAddResult = _OutOrderTransferDetailRepository.AddData(transferDetail); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "娣诲姞鐢熶骇鍑哄簱鍗曟槑缁�", detailAddResult); // 8. 绯荤粺鍑哄簱鍗曠粦瀹氳皟鎷ㄥ嚭搴撳崟ID order.UpperOutOrderId = transferId; + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "绯荤粺鍑哄簱鍗曠粦瀹氳皟鎷ㄥ嚭搴撳崟ID", transferId); // 9. 娣诲姞绯荤粺鍑哄簱鍗曞苟鑾峰彇涓婚敭ID var orderId = BaseDal.AddData(order); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "娣诲姞绯荤粺鍑哄簱鍗曞苟鑾峰彇涓婚敭ID", orderId); // 10 . 绯荤粺鍑哄簱鍗曟槑缁嗙粦瀹氫富琛↖D orderDetails.ForEach(item => { item.OutOrderId = orderId; }); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "绯荤粺鍑哄簱鍗曟槑缁嗙粦瀹氫富琛↖D", orderId); // 11. 娣诲姞绯荤粺鍑哄簱鍗曟槑缁嗗苟杩斿洖缁撴灉 content = _outOrderDtailService.AddData(orderDetails); + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "娣诲姞绯荤粺鍑哄簱鍗曟槑缁嗗苟杩斿洖缁撴灉", content.Status); + if (content.Status && transferId > 0 && detailAddResult > 0 && orderId > 0) + { + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "鎵�鏈夋搷浣滄墽琛屽畬鎴愭彁浜や簨鍔�", "鏃犲弬鏁�"); _unitOfWorkManage.CommitTran(); // 鎻愪氦浜嬪姟 + } else - throw new Exception("鍑哄簱鍗曟坊鍔犲け璐�"); + { + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, "娣诲姞鏁版嵁搴撳け璐�,璇锋鏌ユ暟鎹槸鍚︽纭�", $"绯荤粺鍑哄簱鍗曟槑缁�:{content.Status},娣诲姞绯荤粺鍑哄簱鍗�:{orderId > 0},鐢熶骇鍑哄簱鍗�:{transferId > 0},鐢熶骇鍑哄簱鍗曟槑缁�:{detailAddResult > 0}"); + throw new Exception("娣诲姞璋冩嫧鍑哄簱鍗�"); + } return content; } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); // 鍥炴粴浜嬪姟 + LogFactory.GetLog("娣诲姞璋冩嫧鍑哄簱鍗�").InfoFormat(true, $"绯荤粺寮傚父锛屽紓甯镐俊鎭細{ex.Message}", "鏃犲弬鏁�"); return content.Error(ex.Message); } } @@ -160,14 +217,163 @@ } /// <summary> + /// 鏍规嵁璁㈠崟鍒嗛厤鍑哄簱搴撳瓨 + /// </summary> + /// <param name="orderNo">璁㈠崟缂栧彿</param> + /// <returns></returns> + public async Task<WebResponseContent> GetOutboundStockAsync(string orderNo) + { + WebResponseContent content = new WebResponseContent(); + try + { + // 鑾峰彇璁㈠崟 + var order = await BaseDal.GetOutOrderByNumberAsync(orderNo); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "鏍规嵁璁㈠崟缂栧彿鑾峰彇璁㈠崟鏁版嵁", JsonConvert.SerializeObject(order)); + + // 妫�鏌ヨ鍗曟槸鍚﹁幏鍙栨垚鍔� + if (order == null) + { + return content.Error("鑾峰彇璁㈠崟澶辫触"); + } + + // 鑾峰彇璁㈠崟涓殑绗竴涓墿鏂欑紪鍙� + var materielInfo = await _materielInfoRepository.QueryFirstAsync(x => x.MaterielID == order.OrderDetailList.MaterialId); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "鑾峰彇璁㈠崟鐗╂枡缂栧彿", JsonConvert.SerializeObject(materielInfo)); + + #region 鍏堝叆鍏堝嚭 + + // 鑾峰彇璇ョ墿鏂欐墍鏈夊彲鍑哄簱搴撳瓨 + var filteredStocks = _billGroupStockRepository.GetOutboundStockList(materielInfo.MaterielCode) + .OrderBy(x => x.CreateDate).ToList(); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "鑾峰彇璇ョ墿鏂欐墍鏈夊彲鍑哄簱搴撳瓨", JsonConvert.SerializeObject(filteredStocks)); + + #endregion 鍏堝叆鍏堝嚭 + + #region 鏌ユ壘闈犺繎鍑哄簱鍙e簱瀛� + + // 榛樿鍒楄秺澶ц秺闈犺繎鍑哄簱鍙� + filteredStocks = filteredStocks.OrderByDescending(x => x.LocationInfo.Column).OrderBy(x => x.CreateDate).ToList(); + + #endregion 鏌ユ壘闈犺繎鍑哄簱鍙e簱瀛� + + #region 涓�娣变綅浼樺厛鏌ユ壘锛屽啀鏌ユ壘鍚屽垪浜屾繁浣� + + filteredStocks = PickStocks(filteredStocks); + + #endregion 涓�娣变綅浼樺厛鏌ユ壘锛屽啀鏌ユ壘鍚屽垪浜屾繁浣� + + // 鍒涘缓浠诲姟鍒楄〃 + var (tasks, updateOrder, stock) = CreateTasks(order, filteredStocks); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "鍒涘缓浠诲姟鍒楄〃锛屼慨鏀硅鍗曞垎閰嶆暟閲忥紝鑾峰彇鍑哄簱鍒嗛厤搴撳瓨", + $"浠诲姟鍒楄〃:{JsonConvert.SerializeObject(tasks)},璁㈠崟鍒楄〃锛歿JsonConvert.SerializeObject(updateOrder)},宸插垎閰嶅簱瀛橈細{JsonConvert.SerializeObject(stock)}"); + + // 鏇存柊搴撳瓨鐘舵�� + var stockList = UpdateStocks(stock); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "鏇存柊搴撳瓨鐘舵��", JsonConvert.SerializeObject(stockList)); + + // 鍒涘缓璁㈠崟搴撳瓨鍒楄〃 + List<Dt_OutOrderAndStock>? orderStocks = CreateOrderStock(stock, updateOrder); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "鍒涘缓璁㈠崟搴撳瓨鍒楄〃", JsonConvert.SerializeObject(orderStocks)); + + // 寮�濮嬩簨鍔� + _unitOfWorkManage.BeginTran(); + + // 鏇存柊搴撳瓨 + var isStockUpdated = _billGroupStockRepository.UpdateNavStock(stockList); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "浜嬪姟鏇存柊搴撳瓨", isStockUpdated); + + // 鏇存柊璁㈠崟 + var isOrderUpdated = await BaseDal.OutOrderUpdatedAsync(updateOrder); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "浜嬪姟鏇存柊璁㈠崟", isOrderUpdated); + + //娣诲姞璁㈠崟搴撳瓨 + var isOrderStockCread = await _outOrderAndStockRepository.AddDataAsync(orderStocks) > 0; + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "浜嬪姟娣诲姞璁㈠崟搴撳瓨", isOrderStockCread); + + // 鍒涘缓浠诲姟 + var isTaskCreated = await _taskRepository.Create(tasks); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "浜嬪姟鍒涘缓浠诲姟", isTaskCreated); + + // 鎻愪氦鎴栧洖婊氫簨鍔� + if (isStockUpdated && isTaskCreated && isOrderUpdated && isOrderStockCread) + { + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "鏁版嵁澶勭悊瀹屾垚锛屾彁浜や簨鍔�", "鏃犲弬鏁�"); + _unitOfWorkManage.CommitTran(); + } + else + { + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, "娣诲姞鏁版嵁搴撳け璐�,璇锋鏌ユ暟鎹槸鍚︽纭�,鏁版嵁鍥炴粴", $"鏇存柊搴撳瓨:{isStockUpdated},鏇存柊璁㈠崟:{isOrderUpdated},娣诲姞璁㈠崟搴撳瓨:{isOrderStockCread},鍒涘缓浠诲姟:{isTaskCreated}"); + _unitOfWorkManage.RollbackTran(); + throw new Exception("娣诲姞鏁版嵁搴撳け璐�,璇锋鏌ユ暟鎹槸鍚︽纭�,鏁版嵁鍥炴粴"); + } + + return content.OK(data: orderStocks); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + LogFactory.GetLog("鍑哄簱鍒嗛厤骞跺垱寤轰换鍔�").InfoFormat(true, $"绯荤粺寮傚父锛屽紓甯镐俊鎭細{ex.Message}", "鏃犲弬鏁�"); + return content.Error(ex.Message); + } + } + + /// <summary> /// 淇敼鍑哄簱璁㈠崟锛堝鑸慨鏀癸級 /// </summary> /// <param name="outOrder"></param> /// <returns>鏄惁鎴愬姛</returns> - public async Task<bool> OutOrderUpdated(Dt_OutOrder outOrder) + public async Task<bool> OutOrderUpdatedAsync(Dt_OutOrder outOrder) { - return await BaseDal.OutOrderUpdated(outOrder); + return await BaseDal.OutOrderUpdatedAsync(outOrder); } + + #region 鍐呴儴璋冪敤 + + /// <summary> + /// 涓�娣变綅浼樺厛鏌ユ壘 + /// </summary> + /// <param name="filteredStocks">鍙嚭搴撳簱瀛�</param> + /// <returns>鎺掑簭濂界殑鍑哄簱搴撳瓨</returns> + public List<Dt_BillGroupStock> PickStocks(List<Dt_BillGroupStock> filteredStocks) + { + var oneDepthList = filteredStocks.Where(x => x.LocationInfo.Depth == "涓�娣变綅").ToList(); + var twoDepthList = filteredStocks.Where(x => x.LocationInfo.Depth == "浜屾繁浣�").ToList(); + + var results = new List<Dt_BillGroupStock>(); + foreach (var oneDepth in oneDepthList) + { + // 灏� Line 瀛楃涓茶浆鎹负鏁存暟 + if (!int.TryParse(oneDepth.LocationInfo.Line, out int oneDepthLine)) + { + continue; // 濡傛灉杞崲澶辫触锛岃烦杩囪繖涓褰� + } + + // 璁$畻鐩稿琛� + int relativeLine = oneDepthLine % 2 == 1 ? oneDepthLine + 1 : oneDepthLine - 1; + + // 鏌ユ壘鏈�鎺ヨ繎鐨勪簩娣变綅璁板綍 + var closestTwoDepth = twoDepthList + .Where(t => t.LocationInfo.Line == relativeLine.ToString()) + .Where(x => x.LocationInfo.Column == oneDepth.LocationInfo.Column) + .Where(x => x.LocationInfo.Layer == oneDepth.LocationInfo.Layer) + .FirstOrDefault(); + + // 濡傛灉鎵惧埌浜嗘渶鎺ヨ繎鐨勪簩娣变綅璁板綍锛屽皢鍏朵笌涓�娣变綅涓�璧锋坊鍔犲埌缁撴灉鍒楄〃 + if (closestTwoDepth != null) + { + results.Add(oneDepth); + results.Add(closestTwoDepth); + } + else + { + // 濡傛灉娌℃湁鎵惧埌鏈�鎺ヨ繎鐨勪簩娣变綅璁板綍锛屽皢涓�娣变綅娣诲姞鍒扮粨鏋滃垪琛� + results.Add(oneDepth); + } + } + return results; + } + + #endregion 鍐呴儴璋冪敤 #region 绉佹湁鏂规硶 @@ -182,8 +388,9 @@ { OrderNumber = mainData.GetValueOrDefault("OrderNumber")?.ToString(), WarehouseId = mainData.GetValueOrDefault("WarehouseId")?.ObjToInt() ?? 0, - Status = mainData.GetValueOrDefault("Status")?.ToString(), + Status = (int)OutOrderTypeEnum.Issue, Remarks = mainData.GetValueOrDefault("Remarks")?.ToString(), + CreateID = 1, Creater = mainData.GetValueOrDefault("Creater")?.ToString(), CreateDate = mainData.GetValueOrDefault("CreateDate")?.ObjToDate() ?? DateTime.Now, OrderDate = mainData.GetValueOrDefault("OrderDate")?.ObjToDate() ?? DateTime.Now, @@ -202,11 +409,10 @@ { MaterialId = item.GetValueOrDefault("MaterialId")?.ObjToInt() ?? 0, Quantity = item.GetValueOrDefault("Quantity")?.ObjToInt() ?? 0, - UnitPrice = item.GetValueOrDefault("UnitPrice")?.ObjToDecimal(), - TotalPrice = item.GetValueOrDefault("TotalPrice")?.ObjToDecimal(), Remarks = item.GetValueOrDefault("Remarks")?.ToString(), CreateDate = item.GetValueOrDefault("CreateDate")?.ObjToDate() ?? DateTime.Now, Creater = item.GetValueOrDefault("Creater")?.ToString(), + CreateID = 1, BatchNumber = item.GetValueOrDefault("BatchNumber")?.ToString(), }; details.Add(detail); @@ -227,6 +433,7 @@ OrderDate = DateTime.Now, OrderNumber = production.OrderNumber, Remarks = production.Remarks, + CreateID = 1, WarehouseId = production.WarehouseId, }; } @@ -249,6 +456,7 @@ MaterialId = item.MaterialId, OutboundQuantity = item.Quantity, Remarks = item.Remarks, + CreateID = 1, MaterialName = item.Remarks // 鐗╂枡鍚嶇О }; orderDetails.Add(detail); @@ -261,7 +469,7 @@ #region 璋冩嫧鍑哄簱鍗� /// <summary> - /// 鏍规嵁涓绘暟鎹瀯寤虹敓浜у嚭搴撳崟瀵硅薄銆� + /// 鏍规嵁涓绘暟鎹瀯寤鸿皟鎷ㄥ嚭搴撳崟瀵硅薄銆� /// </summary> private Dt_OutOrderTransfer CreateTransferOrder(Dictionary<string, object> mainData) { @@ -270,7 +478,8 @@ OrderNumber = mainData.GetValueOrDefault("OrderNumber")?.ToString(), SourceWarehouseId = mainData.GetValueOrDefault("SourceWarehouseId")?.ObjToInt() ?? 0, DestinationWarehouseId = mainData.GetValueOrDefault("WarehouseId")?.ObjToInt() ?? 0, - Status = mainData.GetValueOrDefault("Status")?.ToString(), + Status = (int)OutOrderTypeEnum.Allocate, + CreateID = 1, Remarks = mainData.GetValueOrDefault("Remarks")?.ToString(), Creater = mainData.GetValueOrDefault("Creater")?.ToString(), CreateDate = mainData.GetValueOrDefault("CreateDate")?.ObjToDate() ?? DateTime.Now, @@ -279,7 +488,7 @@ } /// <summary> - /// 鏍规嵁鏄庣粏鏁版嵁鍜岀敓浜у嚭搴撳崟ID鏋勫缓鐢熶骇鍑哄簱鍗曟槑缁嗗垪琛ㄣ�� + /// 鏍规嵁鏄庣粏鏁版嵁鍜岃皟鎷ㄥ嚭搴撳崟ID鏋勫缓璋冩嫧鍑哄簱鍗曟槑缁嗗垪琛ㄣ�� /// </summary> private List<Dt_OutOrderTransferDetail> CreateTransferDetails(List<Dictionary<string, object>> detailData) { @@ -290,11 +499,10 @@ { MaterialId = item.GetValueOrDefault("MaterialId")?.ObjToInt() ?? 0, Quantity = item.GetValueOrDefault("Quantity")?.ObjToInt() ?? 0, - UnitPrice = item.GetValueOrDefault("UnitPrice")?.ObjToDecimal(), - TotalPrice = item.GetValueOrDefault("TotalPrice")?.ObjToDecimal(), Remarks = item.GetValueOrDefault("Remarks")?.ToString(), CreateDate = item.GetValueOrDefault("CreateDate")?.ObjToDate() ?? DateTime.Now, Creater = item.GetValueOrDefault("Creater")?.ToString(), + CreateID = 1, BatchNumber = item.GetValueOrDefault("BatchNumber")?.ToString(), }; details.Add(detail); @@ -312,6 +520,7 @@ Status = transfer.Status, CreateDate = DateTime.Now, Creater = transfer.Creater, + CreateID = 1, OrderDate = DateTime.Now, OrderNumber = transfer.OrderNumber, Remarks = transfer.Remarks, @@ -334,6 +543,7 @@ CompletedQuantity = 0, CreateDate = item.CreateDate, Creater = item.Creater, + CreateID = 1, MaterialId = item.MaterialId, OutboundQuantity = item.Quantity, Remarks = item.Remarks, @@ -346,5 +556,115 @@ #endregion 璋冩嫧鍑哄簱鍗� + #region 鍑哄簱鍒嗛厤 + + /// <summary> + /// 鍒涘缓浠诲姟鍒楄〃 + /// </summary> + /// <param name="order">璁㈠崟瀵硅薄</param> + /// <param name="filteredStocks">绛涢�夊悗鐨勫簱瀛樺垪琛�</param> + /// <returns>銆愪换鍔″垪琛�,鏇存柊鍒嗛厤鏁伴噺璁㈠崟,鍒涘缓浠诲姟鐨勫簱瀛樸��</returns> + private (List<Dt_Task>, Dt_OutOrder, List<Dt_BillGroupStock>) CreateTasks(Dt_OutOrder order, List<Dt_BillGroupStock> filteredStocks) + { + var tasks = new List<Dt_Task>(); + var stocks = new List<Dt_BillGroupStock>(); + + foreach (var stock in filteredStocks) + { + // 濡傛灉宸插垎閰嶆暟閲忚揪鍒板嚭搴撴暟閲忥紝鍋滄鍒嗛厤 + if (order.OrderDetailList.AllocatedQuantity >= order.OrderDetailList.OutboundQuantity) + break; + + // 濡傛灉鎵樼洏浠诲姟宸插瓨鍦紝璺宠繃 + if (_taskRepository.QueryFirst(x => x.PalletCode == stock.PalletCode) != null) + continue; + + // 鍒涘缓浠诲姟 + tasks.Add(new Dt_Task + { + CreateDate = DateTime.Now, // 鍒涘缓鏃堕棿 + Creater = App.User.UserName, // 鍒涘缓浜� + CurrentAddress = stock.LocationCode, //褰撳墠浣嶇疆 + Dispatchertime = DateTime.Now, //璋冨害鏃堕棿锛堜换鍔′笅鍙戞椂闂达級 + Grade = 1, // 绛夌骇 + InboundNo = stock.OrderNo, //鍗曟嵁缂栧彿 + MaterialNo = stock.MaterialNo, // 鐗╂枡鍙� + NextAddress = stock.LocationCode, // 涓嬩竴浣嶇疆 + PalletCode = stock.PalletCode, //鎵樼洏鍙� + Remark = stock.Remark, //澶囨敞 + Roadway = stock.LocationInfo.Roadway, //宸烽亾 + SourceAddress = stock.LocationCode, //鏉ユ簮浣嶇疆 + TargetAddress = order.OrderDetailList.Remarks, //鐩爣鍦板潃 + TaskNum = _taskRepository.GetTaskNo().Result, //浠诲姟鍙� + TaskState = (int)OutTaskStatusEnum.OutNew, //浠诲姟鐘舵�� + TaskType = (int)TaskTypeEnum.Outbound, //浠诲姟绫诲瀷 + }); + + // 鏇存柊宸插垎閰嶆暟閲� + order.OrderDetailList.AllocatedQuantity += stock.Dt_BillGroupStockDetailList.Sum(x => x.PalletQuantity).Value; + stocks.Add(stock); + } + + return (tasks, order, stocks); + } + + /// <summary> + /// 鏇存柊搴撳瓨鐘舵�� + /// </summary> + /// <param name="filteredStocks">绛涢�夊悗鐨勫簱瀛樺垪琛�</param> + /// <returns>鏇存柊鍚庣殑搴撳瓨鍒楄〃</returns> + private List<Dt_BillGroupStock> UpdateStocks(List<Dt_BillGroupStock> filteredStocks) + { + var updatedStocks = new List<Dt_BillGroupStock>(); + + foreach (var stock in filteredStocks) + { + // 鏇存柊搴撳瓨鐘舵�� + stock.LocationInfo.IsLocked = true; + stock.LocationInfo.Status = (int)LocationEnum.Lock; + stock.State = (int)StockStateEmun.鍑哄簱閿佸畾; + updatedStocks.Add(stock); + } + + return updatedStocks; + } + + /// <summary> + /// 鍒涘缓璁㈠崟搴撳瓨鍒楄〃 + /// </summary> + /// <param name="stock">绛涢�夊悗鐨勫簱瀛樺垪琛�</param> + /// <param name="order">璁㈠崟瀵硅薄</param> + /// <returns>璁㈠崟搴撳瓨鍒楄〃</returns> + private List<Dt_OutOrderAndStock> CreateOrderStock(List<Dt_BillGroupStock> stock, Dt_OutOrder order) + { + var orderStocks = new List<Dt_OutOrderAndStock>(); + foreach (var item in stock) + { + orderStocks.Add(new Dt_OutOrderAndStock() + { + AllocatedQuantity = order.OrderDetailList.AllocatedQuantity, + MaterialNo = item.MaterialNo, + MaterialName = order.OrderDetailList.MaterialName, + OrderNumber = order.OrderNumber, + OutboundQuantity = order.OrderDetailList.OutboundQuantity, + PalletCode = item.PalletCode, + PalletQuantity = item.Dt_BillGroupStockDetailList.Sum(x => x.PalletQuantity), + State = item.State, + BatchNumber = order.OrderDetailList.BatchNumber, + CompletedQuantity = order.OrderDetailList.CompletedQuantity, + Creater = App.User.UserName, + CreateDate = DateTime.Now, + CreateID = App.User.UserId, + GroupId = item.GroupId, + LocationCode = item.LocationInfo.LocationCode, + OutOrderId = order.Id, + }); + } + + return orderStocks; + } + + #endregion 鍑哄簱鍒嗛厤 + #endregion 绉佹湁鏂规硶 } \ No newline at end of file -- Gitblit v1.9.3