| | |
| | | using WIDESEA_Core.BaseServices; |
| | | using WIDESEA_Core.Enums; |
| | | using WIDESEA_Core.Helper; |
| | | using WIDESEA_DTO.Outbound; |
| | | using WIDESEA_DTO.SquareCabin; |
| | | using WIDESEA_IBasicService; |
| | | using WIDESEA_ISquareCabinServices; |
| | |
| | | } |
| | | public override WebResponseContent UpdateData(SaveModel saveModel) |
| | | { |
| | | return base.UpdateData(saveModel); |
| | | try |
| | | { |
| | | int id = saveModel.MainData["id"].ObjToInt(); |
| | | var warehouse_no = saveModel.MainData["warehouse_no"].ToString(); |
| | | var out_no = saveModel.MainData["out_no"].ToString(); |
| | | //OutboundOrderAddDTO outboundOrder = saveModel.MainData.DicToModel<OutboundOrderAddDTO>(); |
| | | //Dt_DeliveryOrder deliveryOrder = BaseDal.QueryFirst(x => x.Id == id); |
| | | List<DeliveryOrderDetailAddDTO> orderDetailAddDTOs = saveModel.DetailData.DicToIEnumerable<DeliveryOrderDetailAddDTO>(); |
| | | orderDetailAddDTOs = orderDetailAddDTOs.Where(x => x.id == 0).ToList(); |
| | | if (orderDetailAddDTOs.Count < 1) return WebResponseContent.Instance.OK(); |
| | | if (orderDetailAddDTOs.Where(x => string.IsNullOrEmpty(x.locationCode)).Any()) return WebResponseContent.Instance.Error("è´§ä½å·ä¸ºå¿
å¡«åæ®µ!"); |
| | | if (orderDetailAddDTOs.Where(x => string.IsNullOrEmpty(x.exp_date)).Any()) return WebResponseContent.Instance.Error("ææä¸ºå¿
å¡«åæ®µ!"); |
| | | var LocationCodes = orderDetailAddDTOs.Select(x => x.locationCode); |
| | | List<Dt_LocationInfo> locationInfos = _locationInfoService.Repository.QueryData(x => x.WarehouseCode == warehouse_no && LocationCodes.Contains(x.LocationCode)); |
| | | var diff = LocationCodes.Except(locationInfos.Select(x => x.LocationCode)).ToArray(); |
| | | if (diff.Length > 0) return WebResponseContent.Instance.Error($"è´§ä½ç¼å·ã{string.Join(", ", diff)}ãä¸å±äºå½ååºæ¿"); |
| | | var array1 = orderDetailAddDTOs.Select(x => x.goods_no); |
| | | var MaterielInfos = _materielInfoService.Repository.QueryData(x => array1.Contains(x.MaterielCode)); |
| | | var array2 = MaterielInfos.Select(x => x.MaterielCode); |
| | | diff = array1.Except(array2).ToArray(); |
| | | if (diff.Length > 0) return WebResponseContent.Instance.Error($"请维æ¤ç©æç¼å·ã{string.Join(", ", diff)}ãçç©æä¿¡æ¯"); |
| | | if (warehouse_no == WarehouseEnum.ç«åº.ObjToInt().ToString("000")) |
| | | { |
| | | var MaterielInfos1 = MaterielInfos.Where(x => x.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart).ToList(); |
| | | if (MaterielInfos1.Count > 0) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ç©æç¼å·ã{string.Join(", ", MaterielInfos1.Select(x => x.MaterielCode))}ãçç©æå±æ§å类为大件ï¼ä¸å¯å
¥ç«åº"); |
| | | } |
| | | } |
| | | var InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.WarehouseCode == warehouse_no && array2.ToList().Contains(x.MaterielCode)); |
| | | var Batchs = _inventory_BatchServices.Repository.QueryData(x => array2.Contains(x.MaterielCode)); |
| | | List<Dt_DeliveryOrderDetail> deliveryOrderDetails = new List<Dt_DeliveryOrderDetail>(); |
| | | List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); |
| | | List<Dt_InventoryInfo> inventoryInfos = new List<Dt_InventoryInfo>(); |
| | | List<Dt_Inventory_Batch> inventory_Batches = new List<Dt_Inventory_Batch>(); |
| | | foreach (var item in orderDetailAddDTOs) |
| | | { |
| | | if (InventoryInfos.Where(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num).Any()) |
| | | return WebResponseContent.Instance.Error($"ç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãå·²åå¨åºå"); |
| | | #region æ·»å çç¹å详æ
|
| | | Dt_DeliveryOrderDetail dt_DeliveryOrde = new Dt_DeliveryOrderDetail() |
| | | { |
| | | DeliveryOrderId = id, |
| | | Reservoirarea = warehouse_no, |
| | | Status = 2, |
| | | Order_qty = 0, |
| | | Order_Outqty = item.order_Outqty, |
| | | Goods_no = item.goods_no, |
| | | OotDetailStatus = "æ°å»º", |
| | | Batch_num = item.batch_num, |
| | | Creater = App.User.UserName, |
| | | CreateDate = DateTime.Now, |
| | | }; |
| | | deliveryOrderDetails.Add(dt_DeliveryOrde); |
| | | #endregion |
| | | |
| | | #region æ·»å åºåãæ¹æ¬¡ä¿¡æ¯ãçç¹ä»»å¡ |
| | | var MaterielInfo = MaterielInfos.First(x => x.MaterielCode == item.goods_no); |
| | | Dt_InventoryInfo inventoryInfo = new Dt_InventoryInfo() |
| | | { |
| | | BatchNo = item.batch_num, |
| | | MaterielCode = MaterielInfo.MaterielCode, |
| | | AvailableQuantity = 0, |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName, |
| | | InDate = DateTime.Now, |
| | | LocationCode = item.locationCode, |
| | | MaterielName = MaterielInfo.MaterielName, |
| | | MaterielSpec = MaterielInfo.MaterielSpec, |
| | | OutboundQuantity = 0, |
| | | StockQuantity = 0, |
| | | StockStatus = StockStatusEmun.çç¹éå®.ObjToInt(), |
| | | SupplyQuantity = 0, |
| | | WarehouseCode = warehouse_no, |
| | | ValidityPeriod = item.exp_date |
| | | }; |
| | | inventoryInfos.Add(inventoryInfo); |
| | | Dt_Inventory_Batch? inventory_Batch = Batchs.FirstOrDefault(x => x.BatchNo == item.batch_num && x.MaterielCode == item.goods_no); |
| | | if (inventory_Batch == null) |
| | | { |
| | | inventory_Batch = new Dt_Inventory_Batch() |
| | | { |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | CreateDate = inventoryInfo.CreateDate, |
| | | Creater = inventoryInfo.Creater, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | ERPStockQuantity = 0, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | OutboundQuantity = inventoryInfo.OutboundQuantity, |
| | | ProductionDate = inventoryInfo.ProductionDate, |
| | | Status = false, |
| | | StockQuantity = inventoryInfo.StockQuantity, |
| | | AvailableQuantity = inventoryInfo.AvailableQuantity, |
| | | ValidityPeriod = inventoryInfo.ValidityPeriod.ObjToDate(), |
| | | SupplyQuantity = inventoryInfo.SupplyQuantity, |
| | | }; |
| | | inventory_Batches.Add(inventory_Batch); |
| | | } |
| | | Dt_SupplyTask supplyTask = new Dt_SupplyTask() |
| | | { |
| | | WarehouseCode = warehouse_no, |
| | | TaskStatus = SupplyStatusEnum.NewCheck.ObjToInt(), |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskType = TaskTypeEnum.OutInventory.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName, |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = out_no, |
| | | StockQuantity = inventoryInfo.StockQuantity, |
| | | SupplyQuantity = 0, |
| | | Remark = "çç¹" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | #endregion |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | _deliveryOrderDetailServices.AddData(deliveryOrderDetails); |
| | | _inventoryInfoService.AddData(inventoryInfos); |
| | | if (inventory_Batches.Count > 0) _inventory_BatchServices.AddData(inventory_Batches); |
| | | _supplyTaskService.AddData(supplyTasks); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK("çç¹è¯¦æ
æ·»å æå,请éè¿ERP平账ï¼"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | #region å建åºåºå |
| | |
| | | #region æ·»å åºåºä»»å¡ãä¿®æ¹åºåä¿¡æ¯ |
| | | Dt_InventoryInfo? inventoryInfo = dt_InventoryInfos.FirstOrDefault(x => x.WarehouseCode == WareCodeLK); |
| | | if (inventoryInfo == null) |
| | | throw new Exception($"æªæ¾å°ç©æç¼å·ã{detail.goods_no}ãç©ææ¹æ¬¡ã{detail.batch_num}ãå¨ç«åºä¸çåºåä¿¡æ¯ï¼æéæ°éã{orderDetailLK.Order_qty}ã请补货"); |
| | | throw new Exception($"åºåºåã{outorder.order_no}ã详æ
å卿£ä»¶,ç©æç¼å·ã{detail.goods_no}ãç©ææ¹æ¬¡ã{detail.batch_num}ãæéæ°éã{Convert.ToInt32(orderDetailLK.Order_qty)}ãè¯·äººå·¥è°æ¨è¡¥è´§å
¥ç«åº"); |
| | | inventoryInfo.AvailableQuantity -= orderDetailLK.Order_qty; |
| | | inventoryInfo.OutboundQuantity += orderDetailLK.Order_qty; |
| | | Dt_SupplyTask supplyTask = new Dt_SupplyTask() |
| | |
| | | List<Dt_InventoryInfo> inventoryInfos = _InventoryInfos.Where(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo).ToList(); |
| | | //è·åç«åºçç¹å·®å¼æ°.ãããããããããããã |
| | | var inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First(); |
| | | var LkQty = Math.Abs(inventoryLK.SupplyQuantity); |
| | | //var LkQty = Math.Abs(inventoryLK.SupplyQuantity); |
| | | var LkQty = inventoryLK.SupplyQuantity; |
| | | //è·å大件åºçç¹å·®å¼æ° |
| | | var inventoryDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList(); |
| | | var DJQty = Math.Abs(inventoryDJ.Sum(x => x.SupplyQuantity)); |
| | | if (LkQty + DJQty != Qty) throw new Exception($"ã{order.order_no}ãç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãçç©æä¿¡æ¯ä¸ç©ææ¹æ¬¡ä¿¡æ¯ççæ°éä¸ç¬¦"); |
| | | //var DJQty = Math.Abs(inventoryDJ.Sum(x => x.SupplyQuantity)); |
| | | var DJQty = inventoryDJ.Sum(x => x.SupplyQuantity); |
| | | var count = Math.Abs(LkQty + DJQty); |
| | | if (count != Qty) throw new Exception($"ã{order.order_no}ãç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãçç©æä¿¡æ¯ä¸ç©ææ¹æ¬¡ä¿¡æ¯çäºæ°éä¸ç¬¦"); |
| | | if (LkQty == 0)//ç«åºæ å·®å¼ |
| | | { |
| | | #region åºåãåºåæ¹æ¬¡å¹³è´¦ |
| | |
| | | deliveryOrdersAdd.Add(cabinOrder); |
| | | } |
| | | #endregion |
| | | |
| | | //è¿é |
| | | #region å建ç«åºçç¹å |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | { |
| | |
| | | Details = order.details.Select(d => new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = d.goods_no, |
| | | Order_qty = LkQty, |
| | | Order_qty = Math.Abs(LkQty), //ç»ä¸æ¸¸WCSçæ¯è¦æ´æ° |
| | | Batch_num = d.batch_num, |
| | | Exp_date = d.exp_date, |
| | | Reservoirarea = WareCodeLK, |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask, Dt_DeliveryOrder deliveryOrder) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | public WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |