| | |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_ISquareCabinServices; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_Common; |
| | | using static WIDESEA_DTO.SquareCabin.OrderDto; |
| | | |
| | | namespace WIDESEA_SquareCabinServices |
| | | { |
| | |
| | | List<Dt_SupplyTask_Hty> supplyTask_Hties = new List<Dt_SupplyTask_Hty>(); |
| | | List<Dt_InventoryInfo> infosUp = new List<Dt_InventoryInfo>(); |
| | | List<Dt_Inventory_Batch> batchesUp = new List<Dt_Inventory_Batch>(); |
| | | List<Dt_InventoryInfo> infosDel = new List<Dt_InventoryInfo>();//æ·»å å é¤ |
| | | List<Dt_Inventory_Batch> batchesDel = new List<Dt_Inventory_Batch>(); |
| | | List<Dt_MaterielInfo> materielInfos = _materielInfoService.Repository.QueryData(x => deliveryOrder.Details.Select(x => x.Goods_no).ToList().Contains(x.MaterielCode)); |
| | | List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => deliveryOrder.Warehouse_no == x.WarehouseCode && deliveryOrder.Details.Select(x => x.Goods_no).ToList().Contains(x.MaterielCode)); |
| | | List<Dt_Inventory_Batch> inventory_Batches = _inventory_BatchServices.Repository.QueryData(x => deliveryOrder.Details.Select(x => x.Goods_no).ToList().Contains(x.MaterielCode)); |
| | |
| | | foreach (var detail in request.details) |
| | | { |
| | | Dt_DeliveryOrderDetail? orderDetail = deliveryOrder.Details.FirstOrDefault(x => x.Goods_no == detail.productCode && x.Batch_num == detail.batchNo); |
| | | if (orderDetail == null) throw new Exception($"æªæ¾å°çç¹åã{deliveryOrder.Out_no}ãç©æç¼å·ã{detail.productCode}ãç©ææ¹æ¬¡ã{detail.batchNo}ãçæç»ä¿¡æ¯"); |
| | | if (orderDetail == null) |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "çäºåºåºå", $"æªæ¾å°çç¹åã{deliveryOrder.Out_no}ãç©æç¼å·ã{detail.productCode}ãç©ææ¹æ¬¡ã{detail.batchNo}ãçæç»ä¿¡æ¯"); |
| | | throw new Exception($"æªæ¾å°çç¹åã{deliveryOrder.Out_no}ãç©æç¼å·ã{detail.productCode}ãç©ææ¹æ¬¡ã{detail.batchNo}ãçæç»ä¿¡æ¯"); |
| | | |
| | | } |
| | | decimal orderQty = detail.orderDetails?.Sum(x => decimal.TryParse(x.quantity, out var q) ? Math.Abs(q) : 0) ?? 0; |
| | | Dt_InventoryInfo inventoryInfo = inventoryInfos.Where(x => x.MaterielCode == detail.productCode && x.BatchNo == detail.batchNo).First(); |
| | | if (orderQty != Math.Abs(inventoryInfo.SupplyQuantity)) |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "çäºåºåºå", $"çäºåºåºæ°éä¸ä¸è´,ä¸ä¼ æ°éã{orderQty}ã,åºåçäºæ°éã{Math.Abs(inventoryInfo.SupplyQuantity)}ã"); |
| | | throw new Exception($"çäºåºåºæ°éä¸ä¸è´,ä¸ä¼ æ°éã{orderQty}ã,åºåçäºæ°éã{Math.Abs(inventoryInfo.SupplyQuantity)}ã"); |
| | | |
| | | } |
| | | //æ·»å ç©æä¿¡æ¯ä¸çç«åºä¸å¡åºåä¿¡æ¯ |
| | | var mater = materielInfos.FirstOrDefault(x => x.MaterielCode == detail.productCode); |
| | | if (mater != null) |
| | |
| | | inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity; |
| | | inventoryInfo.SupplyQuantity = 0; |
| | | inventoryInfo.StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | infosUp.Add(inventoryInfo); |
| | | // æ£æ¥åºåæ¯å¦ä¸º0ï¼å¦ææ¯åæ 记为å é¤ |
| | | if (inventoryInfo.StockQuantity <= 0) |
| | | infosDel.Add(inventoryInfo); |
| | | else |
| | | infosUp.Add(inventoryInfo); |
| | | //infosUp.Add(inventoryInfo); |
| | | //åºåæ¹æ¬¡ |
| | | Dt_Inventory_Batch inventory_Batch = inventory_Batches.First(x => x.MaterielCode == inventoryInfo.MaterielCode && x.BatchNo == inventoryInfo.BatchNo); |
| | | inventory_Batch.StockQuantity += inventory_Batch.SupplyQuantity; |
| | | inventory_Batch.AvailableQuantity = inventory_Batch.StockQuantity; |
| | | inventory_Batch.SupplyQuantity = 0; |
| | | batchesUp.Add(inventory_Batch); |
| | | orderDetail.OotDetailStatus = "已宿"; |
| | | orderDetail.Order_Outqty = orderQty; //宿æ°é |
| | | if (inventory_Batch.StockQuantity<=0) |
| | | batchesDel.Add(inventory_Batch); |
| | | else |
| | | batchesUp.Add(inventory_Batch); |
| | | cabinOrderDetailsUp.Add(orderDetail); |
| | | #region æ·»å çäºåºåºä»»å¡ |
| | | Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty() |
| | |
| | | #endregion |
| | | } |
| | | deliveryOrder.OutStatus = "已宿"; |
| | | //仿æåºåºæç»ä¸ï¼çéåºé£äºä¸å¨å·²å®æå表ä¸çæç»é¡¹ |
| | | if (deliveryOrder.Details.Where(x => !cabinOrderDetailsUp.Select(x => x.Id).Contains(x.Id)).Any()) |
| | | deliveryOrder.OutStatus = "å¼å§"; |
| | | _unitOfWorkManage.BeginTran(); |
| | |
| | | { |
| | | decimal orderQty = detail.orderDetails?.Sum(x => decimal.TryParse(x.quantity, out var q) ? Math.Abs(q) : 0) ?? 0; |
| | | Dt_SupplyTask? supplyTask = supplyTasks.FirstOrDefault(x => x.MaterielCode == detail.productCode && x.BatchNo == detail.batchNo); |
| | | if (supplyTask == null) throw new Exception($"æªæ¾å°è®¢åå·ã{request.externalOrderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºä»»å¡"); |
| | | if (supplyTask == null) |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "åºåºå", $"æªæ¾å°è®¢åå·ã{request.externalOrderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºä»»å¡"); |
| | | throw new Exception($"æªæ¾å°è®¢åå·ã{request.externalOrderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºä»»å¡"); |
| | | } |
| | | if (supplyTask.StockQuantity != orderQty) |
| | | { |
| | | _messageInfoService.AddMessageInfo(MessageGroupByEnum.OutOrderAlarm, "åºåºå", $"订åå·ã{request.orderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºæ°éä¸åºåºä»»å¡æ°éä¸ç¸ç"); |
| | | throw new Exception($"订åå·ã{request.orderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºæ°éä¸åºåºä»»å¡æ°éä¸ç¸ç"); |
| | | } |
| | | //å¤çåºåºåãåºåä¿¡æ¯ãåºåºä»»å¡ãè°æ¨ä»»å¡ |
| | | content = OutTaskFinish(supplyTask, deliveryOrder); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | } |