| | |
| | | { |
| | | public partial class DeliveryOrderServices : ServiceBase<Dt_DeliveryOrder, IRepository<Dt_DeliveryOrder>>, IDeliveryOrderServices |
| | | { |
| | | static string SearchDate = ""; |
| | | |
| | | private readonly IBasicService _basicService; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IInventory_BatchServices _inventory_BatchServices; |
| | |
| | | _cabinOrderServices = cabinOrderServices; |
| | | _tacticsService = tacticsService; |
| | | } |
| | | |
| | | |
| | | static string SearchDate = "2025-09-10 00:00:00"; |
| | | public WebResponseContent GetUpstreamOutOrder() |
| | | { |
| | | var responseContent = new WebResponseContent(); |
| | |
| | | |
| | | foreach (var outorder in newOutOrders) |
| | | { |
| | | bool skipOrder = false; // æ è®°æ¯å¦è·³è¿è¯¥åºåºå |
| | | |
| | | // 妿è¿ä¸ªåºåºåç±»åä¸çäº1ï¼å±äºåºåºéè´§ï¼è¦å
¥è´§ä¸æ¸¸ä¼ è¿æ¥çæ°éä¸ºè´æ°ï¼ |
| | | if (outorder.order_type != "1") |
| | | if (outorder.order_type == "1") // æ£å¸¸åºåºå |
| | | { |
| | | CreateOutboundOrder(outorder);//å建åºåºåãå¤çåºåãæ·»å åºåºä»»å¡ |
| | | } |
| | | else if (outorder.order_type == "2")//åºåºéè´§ |
| | | { |
| | | // å建åºåºéè´§å - è¿ééè¦æ ¹æ®ä¸å¡é»è¾å®ç° |
| | | // ææ¶è·³è¿æå®ç°éè´§é»è¾ |
| | | continue; |
| | | //continue; |
| | | #region è½¬æ¢æå
¥åºå |
| | | UpstreamOrderInfo order = new UpstreamOrderInfo() |
| | | { |
| | | order_no = outorder.order_no, |
| | | order_type = outorder.order_type, |
| | | warehouse_no = outorder.warehouse_no, |
| | | details = new List<UpstreamOrderDetail>() |
| | | }; |
| | | foreach (var item in outorder.details) |
| | | { |
| | | UpstreamOrderDetail detail = new UpstreamOrderDetail() |
| | | { |
| | | batch_num = item.batch_num, |
| | | goods_no = item.goods_no, |
| | | order_qty = item.order_qty, |
| | | exp_date = item.exp_date, |
| | | }; |
| | | order.details.Add(detail); |
| | | } |
| | | responseContent = _cabinOrderServices.CreateInboundOrder(order); |
| | | List<Dt_CabinOrder>? dt_CabinOrders = responseContent.Data as List<Dt_CabinOrder>; |
| | | if (dt_CabinOrders != null && dt_CabinOrders.Count > 0) |
| | | BaseDal.Db.InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand(); |
| | | #endregion |
| | | } |
| | | else if (outorder.order_type == "1") // æ£å¸¸åºåºå |
| | | else if (outorder.order_type == "3")//æ¥æåºåº |
| | | { |
| | | CreateOutboundOrder(outorder);//å建åºåºåãå¤çåºåãæ·»å åºåºä»»å¡ |
| | | // æé¤ç¹æ®è¯å,ç¹æ®è¯åç´æ¥æå
¥ |
| | | if (outorder.warehouse_no != "001" && (outorder.warehouse_no == "010" || outorder.warehouse_no == "003" || outorder.warehouse_no == "017")) |
| | | { |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | { |
| | | Out_no = outorder.order_no, |
| | | Out_type = outorder.order_type, |
| | | Client_no = outorder.client_no, |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Warehouse_no = outorder.warehouse_no, |
| | | OutStatus = "æ°å»º", |
| | | Details = outorder.details.Select(d => new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = d.goods_no, |
| | | Order_qty = Math.Abs(d.order_qty), // åºåºæ°éè½¬ä¸ºæ£æ° |
| | | Batch_num = d.batch_num, |
| | | Exp_date = d.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2, // padå¹³åºï¼æ é忥 |
| | | }).ToList() |
| | | }; |
| | | _DeliveryOrders.Add(entityOrder); |
| | | } |
| | | else // 常è§è¯å001æ¿ç»ç«åº,è¦æ¯ææ´ç®±å°±ç»å¹³åº |
| | | { |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | { |
| | | Out_no = outorder.order_no, |
| | | Out_type = outorder.order_type, |
| | | Client_no = outorder.client_no, |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Warehouse_no = outorder.warehouse_no, |
| | | OutStatus = "æ°å»º", |
| | | Details = new List<Dt_DeliveryOrderDetail>() |
| | | }; |
| | | |
| | | // éååºåºæç» |
| | | foreach (var item in outorder.details) |
| | | { |
| | | // å°ä¸æ¸¸åºåºæ°éè½¬ä¸ºæ£æ° |
| | | decimal orderQty = Math.Abs((decimal)item.order_qty); |
| | | |
| | | #region æ ¹æ®ç©æç¼ç æ¥è¯¢ç©æä¿¡æ¯ |
| | | var medication = BaseDal.Db.Queryable<Dt_MaterielInfo>() |
| | | .Where(m => m.MaterielCode == item.goods_no) |
| | | .First(); |
| | | |
| | | // å¦æç©æä¿¡æ¯ä¸åå¨ï¼è·³è¿æ´ä¸ªåºåºå |
| | | if (medication == null) |
| | | { |
| | | skipOrder = true; |
| | | Console.WriteLine($"è·³åºå¤åºå {outorder.order_no}ï¼åå ï¼æªæ¾å°åå [{item.goods_no}] çç©æä¿¡æ¯ã"); |
| | | break; |
| | | } |
| | | |
| | | // è¥ç©æä¸å卿 MaterielSourceType 为空ï¼åè·³è¿æ´ä¸ªåºåºå |
| | | if (medication == null || !Enum.IsDefined(typeof(MaterielSourceTypeEnum), medication.MaterielSourceType)) |
| | | { |
| | | skipOrder = true; |
| | | break; |
| | | } |
| | | #endregion |
| | | |
| | | /// æ ¹æ®ç©æä¿¡æ¯å¤§å°ä»¶å±æ§åºåæ¯å¦ä»ç«åºåºåº // 大件ä»å¹³åºåºåº |
| | | if (medication.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart) // å¦æç©ææ¯å¤§ä»¶ |
| | | { |
| | | var orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = orderQty, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2 // å¹³åºï¼æ é忥 |
| | | }; |
| | | entityOrder.Details.Add(orderDetail); |
| | | } |
| | | else |
| | | { |
| | | Dt_DeliveryOrderDetail orderDetail = null; |
| | | |
| | | // è®¡ç®æ´ç®±åæ£ä»¶æ°é |
| | | var ys = orderQty % medication.BoxQty; // ä¸è½æ´é¤ç®±è§çæ£ä»¶æ° |
| | | var xs = (int)(orderQty / medication.BoxQty); // æ´ç®±æ°éï¼ä¿çæ´æ°ï¼ |
| | | |
| | | #region ä»ç«åºåºåºæ£ä»¶ |
| | | |
| | | #region 夿æ¯å¦ææ£ä»¶ |
| | | if (ys > 0 && medication.Business_qty >= ys) |
| | | { |
| | | orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = ys, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 0 // ç«åºï¼éè¦åæ¥ç»WCS |
| | | }; |
| | | medication.Business_qty -= ys; |
| | | } |
| | | #endregion |
| | | |
| | | #region 夿ç«åºåºåæ¯å¦è¶³å¤åºæ´ç®± |
| | | while (medication.Business_qty >= medication.BoxQty && xs > 0) |
| | | { |
| | | xs--; |
| | | if (orderDetail == null) |
| | | { |
| | | orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = medication.BoxQty, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 0 // ç«åº |
| | | }; |
| | | medication.Business_qty -= medication.BoxQty; |
| | | } |
| | | else |
| | | { |
| | | orderDetail.Order_qty += medication.BoxQty; |
| | | medication.Business_qty -= medication.BoxQty; |
| | | } |
| | | } |
| | | |
| | | if (orderDetail != null) |
| | | entityOrder.Details.Add(orderDetail); |
| | | #endregion |
| | | |
| | | #endregion |
| | | |
| | | #region å©ä½æ´ä»¶ä»å¹³åºåºåº |
| | | if (xs > 0) |
| | | { |
| | | orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = medication.BoxQty * xs, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2 // å¹³åº |
| | | }; |
| | | entityOrder.Details.Add(orderDetail); |
| | | } |
| | | #endregion |
| | | } |
| | | |
| | | // æ´æ°ç©æä¿¡æ¯ |
| | | _basicService.MaterielInfoService.Repository.UpdateData(medication); |
| | | |
| | | } |
| | | |
| | | // å¦æè·³è¿è¯¥åï¼åç´æ¥continueï¼ä¸ä¿å |
| | | if (skipOrder) |
| | | { |
| | | Console.WriteLine($"è·³åºå¤åºå {outorder.order_no}ï¼å 为å卿ªå®ä¹ç©æå±æ§çååã"); |
| | | continue; |
| | | } |
| | | |
| | | // ç¡®ä¿åºåºåææç»ææ·»å |
| | | if (entityOrder.Details.Any()) |
| | | { |
| | | _DeliveryOrders.Add(entityOrder); |
| | | orderNos.Add(outorder.order_no); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // æ¹éæå
¥åºåºååæç» |
| | | if (_DeliveryOrders.Any()) |
| | | { |
| | | BaseDal.Db.InsertNav(_DeliveryOrders).Include(x => x.Details).ExecuteCommand(); |
| | | } |
| | | //if (_DeliveryOrders.Any()) |
| | | //{ |
| | | // BaseDal.Db.InsertNav(_DeliveryOrders).Include(x => x.Details).ExecuteCommand(); |
| | | //} |
| | | //ä¸ååºåºåä»»å¡ç»wcs |
| | | |
| | | |
| | | Db.Ado.CommitTran(); |
| | | var tex = CreateSupplyTask(order_no); |
| | | if (!tex) |
| | | { |
| | | return responseContent.Error("å建ä¾åºä»»å¡å¤±è´¥"); |
| | | } |
| | | //var tex = CreateSupplyTask(order_no); |
| | | //if (!tex) |
| | | //{ |
| | | // return responseContent.Error("å建ä¾åºä»»å¡å¤±è´¥"); |
| | | //} |
| | | return responseContent.OK($"忥åºåºåæåï¼å
±{_DeliveryOrders.Count}æ¡"); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | }; |
| | | BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand(); |
| | | #endregion |
| | | List<Dt_InventoryInfo> dt_InventoryInfos = new List<Dt_InventoryInfo>(); |
| | | #region å¤çåºåãæ·»å åºåºä»»å¡ |
| | | #region å¤çåºåãåºåæ¹æ¬¡ãæ·»å åºåºä»»å¡ |
| | | foreach (var item in entityOrder.Details) |
| | | { |
| | | dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == item.Goods_no && x.StockStatus == StockStatusEmun.å
¥åºå®æ.ObjToInt() && x.StockQuantity > x.OutboundQuantity && x.WarehouseCode == item.Reservoirarea); |
| | | Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.Goods_no && x.BatchNo == item.Batch_num); |
| | | if (inventory_Batch == null) throw new Exception($"æªæ¾å°åºåºåå·ã{entityOrder.Out_no}ãä¸ç©æç¼å·ã{item.Goods_no}ãç©ææ¹æ¬¡ã{item.Batch_num}ãçåºåæ¹æ¬¡ä¿¡æ¯"); |
| | | if (inventory_Batch.AvailableQuantity < item.Order_qty) throw new Exception($"åºåºåå·ã{entityOrder.Out_no}ãä¸ç©æç¼å·ã{item.Goods_no}ãç©ææ¹æ¬¡ã{item.Batch_num}ãçåºåæ¹æ¬¡ä¿¡æ¯å¯ç¨æ°éä¸è¶³"); |
| | | inventory_Batch.AvailableQuantity -= item.Order_qty; |
| | | inventory_Batch.OutboundQuantity += item.Order_qty; |
| | | List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == item.Goods_no && x.BatchNo == item.Batch_num && x.StockStatus == StockStatusEmun.å
¥åºå®æ.ObjToInt() && x.StockQuantity > x.OutboundQuantity && x.WarehouseCode == item.Reservoirarea); |
| | | #region æåºåºçç¥æ¥æ¾åºå |
| | | if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt()) |
| | | dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList(); |
| | | else |
| | | dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.InDate).ToList(); |
| | | #endregion |
| | | var Order_qty = item.Order_qty; |
| | | var Order_qty = item.Order_qty;//åºåºåæ°é |
| | | foreach (var InventoryInfo in dt_InventoryInfos) |
| | | { |
| | | if (Order_qty <= 0) break; |
| | | if (InventoryInfo.AvailableQuantity < Order_qty) |
| | | { |
| | | |
| | | InventoryInfo.AvailableQuantity = 0; |
| | | Order_qty -= InventoryInfo.AvailableQuantity; |
| | | InventoryInfo.OutboundQuantity += InventoryInfo.AvailableQuantity; |
| | | InventoryInfo.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | InventoryInfo.AvailableQuantity -= Order_qty; |
| | | Order_qty = 0; |
| | | InventoryInfo.OutboundQuantity += Order_qty; |
| | | InventoryInfo.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | } |
| | | } |
| | | dt_InventoryInfos = dt_InventoryInfos.Where(X => X.StockStatus == StockStatusEmun.åºåºéå®.ObjToInt()).ToList(); |
| | | List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); |
| | | foreach (var inventoryInfo in dt_InventoryInfos) |
| | | { |
| | | Dt_SupplyTask supplyTask = new Dt_SupplyTask() |
| | | { |
| | | WarehouseCode = inventoryInfo.WarehouseCode, |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(), |
| | | TaskType = TaskTypeEnum.OutPick.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName ?? "System", |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = entityOrder.Out_no, |
| | | StockQuantity = inventoryInfo.OutboundQuantity, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | } |
| | | _inventory_BatchServices.Repository.UpdateData(inventory_Batch); |
| | | _inventoryInfoService.Repository.UpdateData(dt_InventoryInfos); |
| | | _supplyTaskService.AddData(supplyTasks); |
| | | } |
| | | #endregion |
| | | } |
| | | else |
| | | { |
| | | #region å建大件åºãç«åºåºåºå¤´è¡¨ |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | { |
| | | Out_no = outorder.order_no, |
| | | Out_type = outorder.order_type, |
| | | OutStatus = "æ°å»º", |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Client_no = outorder.client_no, |
| | | Warehouse_no = WarehouseEnum.大件åº.ObjToInt().ToString("000"), |
| | | Details = new List<Dt_DeliveryOrderDetail>() |
| | | }; |
| | | var entityOrderLK = new Dt_DeliveryOrder |
| | | { |
| | | Out_no = outorder.order_no, |
| | | Out_type = outorder.order_type, |
| | | OutStatus = "æ°å»º", |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Client_no = outorder.client_no, |
| | | Warehouse_no = WarehouseEnum.ç«åº.ObjToInt().ToString("000"), |
| | | Details = new List<Dt_DeliveryOrderDetail>() |
| | | }; |
| | | #endregion |
| | | #region æ¥æ¾åºå |
| | | foreach (var detail in outorder.details) |
| | | { |
| | | #region æ¥è¯¢åºåæ¹æ¬¡ååºå |
| | | Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == detail.goods_no && x.BatchNo == detail.batch_num); |
| | | if (inventory_Batch == null) throw new Exception($"æªæ¾å°åºåºåå·ã{outorder.order_no}ãä¸ç©æç¼å·ã{detail.goods_no}ãç©ææ¹æ¬¡ã{detail.batch_num}ãçåºåæ¹æ¬¡ä¿¡æ¯"); |
| | | if (inventory_Batch.AvailableQuantity < detail.order_qty) throw new Exception($"åºåºåå·ã{outorder.order_no}ãä¸ç©æç¼å·ã{detail.goods_no}ãç©ææ¹æ¬¡ã{detail.batch_num}ãçåºåæ¹æ¬¡ä¿¡æ¯å¯ç¨æ°éä¸è¶³"); |
| | | inventory_Batch.AvailableQuantity -= detail.order_qty; |
| | | inventory_Batch.OutboundQuantity += detail.order_qty; |
| | | List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo && x.StockStatus == StockStatusEmun.å
¥åºå®æ.ObjToInt() && x.StockQuantity > x.OutboundQuantity && (x.WarehouseCode == WarehouseEnum.大件åº.ObjToInt().ToString("000") || x.WarehouseCode == WarehouseEnum.ç«åº.ObjToInt().ToString("000"))); |
| | | #endregion |
| | | #region æåºåºçç¥æ¥æ¾åºå |
| | | if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt()) |
| | | dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList(); |
| | | else |
| | | dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.InDate).ToList(); |
| | | #endregion |
| | | var Order_qty = Math.Abs(detail.order_qty);//åºåºåæ°é |
| | | #region æ ¹æ®ç©æç¼ç æ¥è¯¢ç©æä¿¡æ¯ |
| | | Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == detail.goods_no); |
| | | if (materielInfo == null) throw new Exception($"æªæ¾å°è¯åç¼ç ã{detail.goods_no}ãçä¿¡æ¯"); |
| | | if (!Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType)) |
| | | throw new Exception($"请设置è¯åç¼å·ã{detail.goods_no}ãç屿§åç±»"); |
| | | if (materielInfo.BoxQty < 1) throw new Exception($"请设置è¯åç¼å·ã{detail.goods_no}ãçç®±è§æ°é"); |
| | | #endregion |
| | | #region 大件 |
| | | if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)//å¦æç©ææ¯å¤§ä»¶ |
| | | { |
| | | #region æ·»å åºåºè¯¦æ
|
| | | Dt_DeliveryOrderDetail orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = entityOrder.Warehouse_no, |
| | | Goods_no = detail.goods_no, |
| | | Order_qty = detail.order_qty, |
| | | Batch_num = detail.batch_num, |
| | | Exp_date = detail.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Order_Outqty = 0, |
| | | Status = 2 |
| | | }; |
| | | entityOrder.Details.Add(orderDetail); |
| | | #endregion |
| | | |
| | | #region 计ç®åºå |
| | | foreach (var InventoryInfo in dt_InventoryInfos) |
| | | { |
| | | if (Order_qty <= 0) break; |
| | | if (InventoryInfo.AvailableQuantity < Order_qty) |
| | | { |
| | | InventoryInfo.AvailableQuantity = 0; |
| | | Order_qty -= InventoryInfo.AvailableQuantity; |
| | | InventoryInfo.OutboundQuantity += InventoryInfo.AvailableQuantity; |
| | | InventoryInfo.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | InventoryInfo.AvailableQuantity -= Order_qty; |
| | | Order_qty = 0; |
| | | InventoryInfo.OutboundQuantity += Order_qty; |
| | | InventoryInfo.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region çæåºåºä»»å¡ |
| | | dt_InventoryInfos = dt_InventoryInfos.Where(X => X.StockStatus == StockStatusEmun.åºåºéå®.ObjToInt()).ToList(); |
| | | List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); |
| | | foreach (var inventoryInfo in dt_InventoryInfos) |
| | | { |
| | | Dt_SupplyTask supplyTask = new Dt_SupplyTask() |
| | | { |
| | | WarehouseCode = inventoryInfo.WarehouseCode, |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(), |
| | | TaskType = TaskTypeEnum.OutPick.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName ?? "System", |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = entityOrder.Out_no, |
| | | StockQuantity = inventoryInfo.OutboundQuantity, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | } |
| | | #endregion |
| | | _inventory_BatchServices.Repository.UpdateData(inventory_Batch); |
| | | _inventoryInfoService.Repository.UpdateData(dt_InventoryInfos); |
| | | _supplyTaskService.AddData(supplyTasks); |
| | | } |
| | | #endregion |
| | | else |
| | | { |
| | | Dt_DeliveryOrderDetail orderDetail = null; |
| | | Dt_DeliveryOrderDetail orderDetailLK = null; |
| | | var ys = Order_qty % materielInfo.BoxQty; //ä¸è½æ´é¤ç®±è§çæ£ä»¶æ° |
| | | var xs = (int)(Order_qty / materielInfo.BoxQty);//ä¿çæ´æ° |
| | | #region æ£ä»¶ä¼å
åé
ç«åº |
| | | if (ys > 0) |
| | | { |
| | | orderDetailLK = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = entityOrderLK.Warehouse_no, |
| | | Goods_no = detail.goods_no, |
| | | Order_qty = ys, |
| | | Batch_num = detail.batch_num, |
| | | Exp_date = detail.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Order_Outqty = 0, |
| | | Status = 0 |
| | | }; |
| | | } |
| | | #endregion |
| | | |
| | | #region æ´ä»¶ä¼å
åé
å¤§ä»¶åº |
| | | foreach (var item in dt_InventoryInfos.Where(x => x.WarehouseCode == WarehouseEnum.大件åº.ObjToInt().ToString("000"))) |
| | | { |
| | | if (xs <= 0) break; |
| | | item.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | while (item.AvailableQuantity > 0 && xs > 0) |
| | | { |
| | | xs--; |
| | | if (orderDetail == null) |
| | | { |
| | | orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = entityOrder.Warehouse_no, |
| | | Goods_no = detail.goods_no, |
| | | Order_qty = materielInfo.BoxQty, |
| | | Batch_num = detail.batch_num, |
| | | Exp_date = detail.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Order_Outqty = 0, |
| | | Status = 0 |
| | | }; |
| | | item.AvailableQuantity -= materielInfo.BoxQty; |
| | | item.OutboundQuantity += materielInfo.BoxQty; |
| | | } |
| | | else |
| | | { |
| | | orderDetail.Order_qty += materielInfo.BoxQty; |
| | | item.AvailableQuantity -= materielInfo.BoxQty; |
| | | item.OutboundQuantity += materielInfo.BoxQty; |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region åé
å®å¤§ä»¶åºå¦æè¿æç®±æ°ï¼åéæ©åé
ç«åº |
| | | if (orderDetailLK == null) |
| | | { |
| | | orderDetailLK = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = entityOrderLK.Warehouse_no, |
| | | Goods_no = detail.goods_no, |
| | | Order_qty = xs * materielInfo.BoxQty, |
| | | Batch_num = detail.batch_num, |
| | | Exp_date = detail.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Order_Outqty = 0, |
| | | Status = 0 |
| | | }; |
| | | } |
| | | else |
| | | { |
| | | orderDetailLK.Order_qty += xs * materielInfo.BoxQty; |
| | | } |
| | | #endregion |
| | | List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); |
| | | if (orderDetailLK != null) |
| | | { |
| | | #region æ·»å åºåºä»»å¡ãä¿®æ¹åºåä¿¡æ¯ |
| | | Dt_InventoryInfo inventoryInfo = dt_InventoryInfos.Where(x => x.WarehouseCode == WarehouseEnum.ç«åº.ObjToInt().ToString("000")).First(); |
| | | inventoryInfo.AvailableQuantity -= orderDetailLK.Order_qty; |
| | | inventoryInfo.OutboundQuantity += orderDetailLK.Order_qty; |
| | | inventoryInfo.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | _inventoryInfoService.Repository.UpdateData(inventoryInfo); |
| | | Dt_SupplyTask supplyTask = new Dt_SupplyTask() |
| | | { |
| | | WarehouseCode = inventoryInfo.WarehouseCode, |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(), |
| | | TaskType = TaskTypeEnum.OutPick.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName ?? "System", |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = entityOrder.Out_no, |
| | | StockQuantity = inventoryInfo.OutboundQuantity, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | #endregion |
| | | entityOrderLK.Details.Add(orderDetailLK); |
| | | } |
| | | if (orderDetail != null) |
| | | { |
| | | #region æ·»å åºåºä»»å¡ãä¿®æ¹åºåä¿¡æ¯ |
| | | dt_InventoryInfos = dt_InventoryInfos.Where(X => X.StockStatus == StockStatusEmun.åºåºéå®.ObjToInt()).ToList(); |
| | | foreach (var inventoryInfo in dt_InventoryInfos) |
| | | { |
| | | Dt_SupplyTask supplyTask = new Dt_SupplyTask() |
| | | { |
| | | WarehouseCode = inventoryInfo.WarehouseCode, |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(), |
| | | TaskType = TaskTypeEnum.OutPick.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName ?? "System", |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = entityOrder.Out_no, |
| | | StockQuantity = inventoryInfo.OutboundQuantity, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | } |
| | | #endregion |
| | | entityOrder.Details.Add(orderDetail); |
| | | } |
| | | _inventory_BatchServices.Repository.UpdateData(inventory_Batch); |
| | | _inventoryInfoService.Repository.UpdateData(dt_InventoryInfos); |
| | | _supplyTaskService.AddData(supplyTasks); |
| | | } |
| | | } |
| | | if (entityOrder.Details.Count > 0) |
| | | BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand(); |
| | | if (entityOrderLK.Details.Count > 0) |
| | | BaseDal.Db.InsertNav(entityOrderLK).Include(x => x.Details).ExecuteCommand(); |
| | | #endregion |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | #endregion |
| | | if (supplyTask.WarehouseCode == WarehouseEnum.ç«åº.ObjToInt().ToString("000")) |
| | | CreateAllocatInOut(materielInfo);//åå»ºè°æ¨ä»»å¡ |
| | | { |
| | | materielInfo.Business_qty -= supplyTask.StockQuantity; |
| | | _basicService.MaterielInfoService.Repository.UpdateData(materielInfo); |
| | | if (materielInfo.Business_qty < materielInfo.MinQty) |
| | | CreateAllocatInOut(materielInfo);//åå»ºè°æ¨ä»»å¡ |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | | #endregion |
| | | content.OK(); |