| | |
| | | using HslCommunication; |
| | | using MailKit.Search; |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using SqlSugar; |
| | | using WIDESEA_Common; |
| | | using WIDESEA_Common.OrderEnum; |
| | | using WIDESEA_Common.StockEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_Common.WareHouseEnum; |
| | |
| | | { |
| | | public class InventoryServices : ServiceBase<Dt_Inventory, IRepository<Dt_Inventory>>, IInventoryServices |
| | | { |
| | | private readonly ICabinOrderServices _cabinOrderServices; |
| | | private readonly IDeliveryOrderServices _deliveryOrderServices; |
| | | public InventoryServices(IRepository<Dt_Inventory> BaseDal, IDeliveryOrderServices deliveryOrderServices) : base(BaseDal) |
| | | private readonly ISupplyTaskService _supplyTaskService; |
| | | private readonly IInventory_BatchServices _inventoryBatchServices; |
| | | private readonly IMessageInfoService _infoService; |
| | | public InventoryServices(IRepository<Dt_Inventory> BaseDal, ICabinOrderServices cabinOrderServices, IDeliveryOrderServices deliveryOrderServices, ISupplyTaskService supplyTaskService, IInventory_BatchServices inventoryBatchServices, IMessageInfoService infoService) : base(BaseDal) |
| | | { |
| | | _cabinOrderServices = cabinOrderServices; |
| | | _deliveryOrderServices = deliveryOrderServices; |
| | | _supplyTaskService = supplyTaskService; |
| | | _inventoryBatchServices = inventoryBatchServices; |
| | | _infoService = infoService; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// è·å䏿¸¸åºåä¿¡æ¯ |
| | |
| | | /// <param name="batch_num">æ¹å·</param> |
| | | /// <returns></returns> |
| | | /// <exception cref="NotImplementedException"></exception> |
| | | public WebResponseContent GetInventoryList(string goods_no, string batch_num) |
| | | public WebResponseContent GetInventoryList(int[] key) |
| | | { |
| | | var responseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | var url = "http://121.37.118.63/GYZ2/95fck/repositoryInfo"; |
| | | var result = HttpHelper.Post(url, new { goods_no, batch_num }.ToJsonString()); |
| | | |
| | | var response = JsonConvert.DeserializeObject<UpstreamResponse<InventoryInfo>>(result); |
| | | List<Dt_Inventory_Batch> UpdateBatches = new List<Dt_Inventory_Batch>(); |
| | | //æ ¹æ®idæ¥è¯¢åºåæ¹æ¬¡ä¿¡æ¯è¡¨ï¼è·åå°ä»ä»¬çååç¼ç åæ¹æ¬¡å· |
| | | var inventoryBatches = _inventoryBatchServices.Repository.QueryData(); //æ¥å
¨é¨ |
| | | |
| | | if (response.resultCode != "0") |
| | | var inventory = inventoryBatches.Where(x => key.Contains(x.Id)).Select(x => new { x.MaterielCode, x.BatchNo }).ToList(); |
| | | if (inventory.Count < 1) |
| | | { |
| | | SendErrorToUpstream(8, "", response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败", ""); |
| | | return responseContent.Error(response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败"); |
| | | return WebResponseContent.Instance.Error("æ²¡ææ¾å°åºåæ¹æ¬¡ä¿¡æ¯"); |
| | | } |
| | | |
| | | if (response.data == null || !response.data.Any()) |
| | | { |
| | | return responseContent.OK("æ æ°åºåæ°æ®"); |
| | | } |
| | | var requestData = inventory.Select(x => new { goods_no = x.MaterielCode, batch_num = x.BatchNo }).Distinct().ToList(); |
| | | |
| | | Db.Ado.BeginTran(); |
| | | foreach (var item in response.data) |
| | | foreach (var item in requestData) |
| | | { |
| | | // ä½¿ç¨ FirstOrDefault é¿å
æ¾ä¸å°è®°å½æ¶æåºå¼å¸¸ |
| | | var Inver = Db.Queryable<Dt_Inventory_Batch>() |
| | | .First(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num); |
| | | |
| | | var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/370999979?apifoxApiId=370999979"; |
| | | var result = HttpHelper.Post(url, new { item.goods_no, item.batch_num }.ToJsonString()); |
| | | |
| | | if (Inver != null) |
| | | var response = JsonConvert.DeserializeObject<UpstreamResponse<InventoryInfo>>(result); |
| | | |
| | | if (response.resultCode != "0") |
| | | { |
| | | Inver.ERPStockQuantity = item.business_qty; |
| | | Db.Updateable(Inver).ExecuteCommand(); |
| | | //return responseContent.Error(response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败"); |
| | | _infoService.AddMessageInfo(MessageGroupByEnum.SynchronismAlarm, "Erpåæ¥å¤±è´¥", "䏿¸¸æ¥å£è¿å失败"); |
| | | continue; |
| | | |
| | | } |
| | | |
| | | if (response.data == null || !response.data.Any()) |
| | | { |
| | | return responseContent.OK("æ æ°åºåæ°æ®"); |
| | | } |
| | | var materialCodes = response.data.Select(x => x.goods_no).Distinct().ToList(); |
| | | var batchNos = response.data.Select(x => x.batch_num).Distinct().ToList(); |
| | | foreach (var inventoryInfo in response.data) |
| | | { |
| | | //// ä½¿ç¨ FirstOrDefault é¿å
æ¾ä¸å°è®°å½æ¶æåºå¼å¸¸ |
| | | var Inver = inventoryBatches.FirstOrDefault(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num); |
| | | |
| | | if (Inver != null) |
| | | { |
| | | Inver.ERPStockQuantity = inventoryInfo.business_qty; |
| | | UpdateBatches.Add(Inver); |
| | | } |
| | | } |
| | | } |
| | | Db.Ado.CommitTran(); |
| | | _inventoryBatchServices.UpdateData(UpdateBatches); |
| | | return responseContent.OK("åºåä¿¡æ¯åæ¥å®æ"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | SendErrorToUpstream(8, "", ex.Message, ""); |
| | | return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public ApiResponse<Dt_InventoryInfo> OrderFeedback(EdiOrderCallbackRequest request) |
| | | { |
| | | try |
| | | { |
| | | if (request == null || request.details == null || request.details.Count < 1) throw new Exception("请æ±åæ°æ æ"); |
| | | var Warecode = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); |
| | | switch (request.orderType) |
| | | { |
| | | case "1": //å
¥åº |
| | | { |
| | | Dt_CabinOrder cabinOrder = _cabinOrderServices.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == request.externalOrderNo && x.Warehouse_no == Warecode).Includes(x => x.Details).First(); |
| | | if (cabinOrder == null) throw new Exception($"æªæ¾å°å
¥åºåå·ã{request.externalOrderNo}ãçå
¥åºåä¿¡æ¯"); |
| | | if (cabinOrder.OdrderStatus == "已宿") |
| | | return new ApiResponse<Dt_InventoryInfo> { code = "0", msg = $"æå" }; |
| | | WebResponseContent content = _cabinOrderServices.CompleteLKInOrder(cabinOrder, request); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | } |
| | | break; |
| | | case "2": |
| | | { |
| | | Dt_DeliveryOrder deliveryOrder = _deliveryOrderServices.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == request.externalOrderNo && x.Warehouse_no == Warecode).Includes(x => x.Details).First(); |
| | | if (deliveryOrder == null) throw new Exception($"æªæ¾å°åºåºåå·ã{request.externalOrderNo}ãçåºåºåä¿¡æ¯"); |
| | | if (deliveryOrder.OutStatus == "已宿") |
| | | return new ApiResponse<Dt_InventoryInfo> { code = "0", msg = $"æå" }; |
| | | WebResponseContent content = _deliveryOrderServices.CompleteLKOutOrder(deliveryOrder, request); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | } |
| | | break; |
| | | case "3": |
| | | { |
| | | #region æ¾çç¹ä»»å¡ |
| | | List<Dt_SupplyTask> supplyTasks = _supplyTaskService.Repository.QueryData(x => x.OrderNo == request.externalOrderNo && x.WarehouseCode == Warecode && x.TaskStatus == SupplyStatusEnum.NewCheck.ObjToInt()); |
| | | foreach (var detail in request.details) |
| | | { |
| | | Dt_SupplyTask? supplyTask = supplyTasks.Where(x => x.MaterielCode == detail.productCode && x.BatchNo == detail.batchNo).FirstOrDefault(); |
| | | if (supplyTask == null) throw new Exception($"æªæ¾å°è®¢åå·ã{request.externalOrderNo}ãç©æç¼å·ã{detail.productCode}ãççç¹ä»»å¡"); |
| | | if (detail.isLossOrProfit == 1) // çäº |
| | | { |
| | | supplyTask.SupplyQuantity = supplyTask.StockQuantity - detail.ea; |
| | | } |
| | | else if (detail.isLossOrProfit == 2) // çç |
| | | { |
| | | supplyTask.SupplyQuantity = supplyTask.StockQuantity + detail.ea; |
| | | } |
| | | else // çä¸ |
| | | { |
| | | supplyTask.SupplyQuantity = supplyTask.StockQuantity; |
| | | } |
| | | var content = _deliveryOrderServices.CheckTaskFinish(supplyTask); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | } |
| | | #endregion |
| | | } |
| | | break; |
| | | default: |
| | | throw new Exception($"æªå®ä¹çç±»åã{request.orderType}ã"); |
| | | } |
| | | return new ApiResponse<Dt_InventoryInfo> |
| | | { |
| | | code = "0", |
| | | msg = $"æå" |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return new ApiResponse<Dt_InventoryInfo> |
| | | { |
| | | code = "500", |
| | | msg = $"å¤ç失败: {ex.Message}" |
| | | }; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// wcsåä¼ ç»æè°ç¨æçæ¹æ³ ä¸ç®¡æ¯å
¥åº åºåº çç¹é½ä¼è°ç¨è¿ä¸ªæ¥å£ |
| | | /// </summary> |
| | | /// <param name="request"></param> |
| | | /// <returns></returns> |
| | | public ApiResponse<Dt_InventoryInfo> OrderFeedback(EdiOrderCallbackRequest request) |
| | | public ApiResponse<Dt_InventoryInfo> OrderFeedback1(EdiOrderCallbackRequest request) |
| | | { |
| | | try |
| | | { |
| | |
| | | { |
| | | return new ApiResponse<Dt_InventoryInfo> { code = "500", msg = "请æ±åæ°æ æ" }; |
| | | } |
| | | |
| | | var reslut = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); |
| | | // 2ï¸â£ å¼å¯äºå¡ |
| | | BaseDal.Db.Ado.BeginTran(); |
| | | //BaseDal.Db.Ado.BeginTran(); |
| | | foreach (var detail in request.details) |
| | | { |
| | | #region æ¥è¯¢ç©æä¿¡æ¯ãè®¡ç®æ»å |
| | |
| | | case "1": //å
¥åº |
| | | { |
| | | #region å¤çå
¥åºè®¢å |
| | | var reslut = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); |
| | | Dt_CabinOrder cabinOrder = Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == request.orderNo && x.Warehouse_no ==reslut).Includes(x => x.Details).First(); |
| | | //Dt_CabinOrder cabinOrder = Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == request.orderNo && x.Warehouse_no == "001").Includes(x => x.Details).First(); |
| | | if (cabinOrder == null || cabinOrder.OdrderStatus == "已宿") |
| | | throw new Exception($"å
¥åºå已宿"); |
| | | Dt_CabinOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Goods_no == detail.productCode && x.Batch_num == detail.batchNo && x.Status == 1).First(); |
| | | if (cabinOrderDetail == null || cabinOrderDetail.OrderDetailStatus == "已宿") |
| | | throw new Exception($"å
¥åºåæç»å·²å®æ"); |
| | | cabinOrderDetail.Order_Inqty += orderQty; |
| | | if (cabinOrderDetail.Order_Inqty > cabinOrderDetail.Order_qty) |
| | | throw new Exception($"å
¥åºæ°éä¸å¯è¶
åºåæ®æ°é"); |
| | | cabinOrder.OdrderStatus = "å¼å§"; |
| | | cabinOrderDetail.OrderDetailStatus = "å¼å§"; |
| | | if (cabinOrderDetail.Order_Inqty == cabinOrderDetail.Order_qty) |
| | | cabinOrderDetail.OrderDetailStatus = "已宿"; |
| | | BaseDal.Db.Updateable(cabinOrderDetail).ExecuteCommand(); |
| | | var cabinOrder1 = BaseDal.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == cabinOrder.Order_no && x.Warehouse_no == reslut).Includes(x => x.Details).First(); |
| | | if (!cabinOrder1.Details.Where(x => x.OrderDetailStatus != "已宿").Any()) |
| | | cabinOrder.OdrderStatus = "已宿"; |
| | | BaseDal.Db.Updateable(cabinOrder).ExecuteCommand(); |
| | | #endregion |
| | | |
| | | #region å建åºåä¿¡æ¯ |
| | | // 5ï¸â£ æ¥è¯¢åºå详æ
|
| | | var inventoryInfo = BaseDal.Db.Queryable<Dt_InventoryInfo>() |
| | | .First(x => x.MaterielCode == cabinOrderDetail.Goods_no && x.BatchNo == cabinOrderDetail.Batch_num && x.LocationCode == "ç«åº"); |
| | | if (inventoryInfo != null) |
| | | Dt_CabinOrder cabinOrder = Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == request.externalOrderNo && x.Warehouse_no == reslut).Includes(x => x.Details).First(); |
| | | if (cabinOrder == null) throw new Exception($"æªæ¾å°å
¥åºåå·ã{request.externalOrderNo}ãçå
¥åºåä¿¡æ¯"); |
| | | #region 夿æ¯å¦ä¸ºççå
¥åºå |
| | | if (cabinOrder.Order_type == "5") |
| | | { |
| | | inventoryInfo.StockQuantity += orderQty; |
| | | inventoryInfo.AvailableQuantity += orderQty; |
| | | inventoryInfo.InDate = DateTime.Now; |
| | | BaseDal.Db.Updateable(inventoryInfo).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | inventoryInfo = new Dt_InventoryInfo |
| | | foreach (var item in cabinOrder.Details) |
| | | { |
| | | PalletCode = detail.orderDetails?.FirstOrDefault()?.palletCode ?? "", |
| | | WarehouseCode = "001", |
| | | LocationCode = "ç«åº", |
| | | StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(), |
| | | MaterielCode = goods.MaterielCode, |
| | | MaterielName = goods.MaterielName, |
| | | MaterielSpec = goods.MaterielSpec, |
| | | BatchNo = detail.batchNo, |
| | | StockQuantity = orderQty, |
| | | OutboundQuantity = 0, |
| | | SupplyQuantity = 0, |
| | | AvailableQuantity = orderQty, |
| | | InDate = DateTime.Now, |
| | | ProductionDate = detail.finishDate.ToString("yyyy-MM-dd"), |
| | | ShelfLife = 0, |
| | | ValidityPeriod = cabinOrderDetail.Exp_date, |
| | | Remark = "WCSåä¼ å建" |
| | | }; |
| | | BaseDal.Db.Insertable(inventoryInfo).ExecuteCommand(); |
| | | Dt_InventoryInfo inventoryInfo = BaseDal.Db.Queryable<Dt_InventoryInfo>() |
| | | .First(x => x.MaterielCode == item.Goods_no && x.BatchNo == item.Batch_num && x.LocationCode == reslut); |
| | | var qty = inventoryInfo.SupplyQuantity - inventoryInfo.StockQuantity; |
| | | if (orderQty != qty) |
| | | throw new Exception($"ççå
¥åºæ°éä¸ä¸è´,ä¸ä¼ æ°éã{orderQty}ã,åºåççæ°éã{qty}ã"); |
| | | inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity; |
| | | inventoryInfo.SupplyQuantity = 0; |
| | | inventoryInfo.StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | #region æ·»å ççå
¥åºä»»å¡ |
| | | Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty() |
| | | { |
| | | WarehouseCode = inventoryInfo.WarehouseCode, |
| | | OperateType = OperateTypeEnum.èªå¨å®æ.ToString(), |
| | | InsertTime = DateTime.Now, |
| | | TaskStatus = SupplyStatusEnum.InFinish.ObjToInt(), |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskType = TaskTypeEnum.ChenckIn.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName, |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = cabinOrder.Order_no, |
| | | StockQuantity = orderQty, |
| | | SupplyQuantity = 0, |
| | | Remark = "ççå
¥åº" |
| | | }; |
| | | #endregion |
| | | var inventory_Batch = BaseDal.Db.Queryable<Dt_Inventory_Batch>() |
| | | .First(x => x.MaterielCode == inventoryInfo.MaterielCode && x.BatchNo == inventoryInfo.BatchNo); |
| | | inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity; |
| | | inventory_Batch.SupplyQuantity = 0; |
| | | item.OrderDetailStatus = "已宿"; |
| | | BaseDal.Db.Updateable(item).ExecuteCommand(); |
| | | BaseDal.Db.Updateable(inventoryInfo).ExecuteCommand(); |
| | | BaseDal.Db.Updateable(inventory_Batch).ExecuteCommand(); |
| | | BaseDal.Db.Insertable(supplyTask_Hty).ExecuteCommand(); |
| | | } |
| | | var cabinOrder1 = BaseDal.Db.Queryable<Dt_CabinOrder>().Where(x => x.Id == cabinOrder.Id).Includes(x => x.Details).First(); |
| | | if (!cabinOrder1.Details.Where(x => x.OrderDetailStatus != "已宿").Any()) |
| | | cabinOrder.OdrderStatus = "已宿"; |
| | | BaseDal.Db.Updateable(cabinOrder).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | #region å建åºåæ¹æ¬¡ä¿¡æ¯ |
| | | // 6ï¸â£ æ¥è¯¢åºåæ¹æ¬¡ä¿¡æ¯ |
| | | var inventory_Batch = BaseDal.Db.Queryable<Dt_Inventory_Batch>() |
| | | .First(x => x.MaterielCode == inventoryInfo.MaterielCode && x.BatchNo == inventoryInfo.BatchNo); |
| | | |
| | | if (inventory_Batch != null) |
| | | { |
| | | inventory_Batch.StockQuantity += orderQty; |
| | | inventory_Batch.AvailableQuantity += orderQty; |
| | | BaseDal.Db.Updateable(inventory_Batch).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | inventory_Batch = new Dt_Inventory_Batch |
| | | if (cabinOrder.OdrderStatus == "已宿") |
| | | return new ApiResponse<Dt_InventoryInfo> |
| | | { |
| | | code = "0", |
| | | msg = "æå" |
| | | }; |
| | | Dt_CabinOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Goods_no == detail.productCode && x.Batch_num == detail.batchNo && x.Status == 1).First(); |
| | | if (cabinOrderDetail == null || cabinOrderDetail.OrderDetailStatus == "已宿") |
| | | throw new Exception($"å
¥åºåæç»å·²å®æ"); |
| | | cabinOrderDetail.Order_Inqty += orderQty; |
| | | if (cabinOrderDetail.Order_Inqty > cabinOrderDetail.Order_qty) |
| | | throw new Exception($"å
¥åºæ°éä¸å¯è¶
åºåæ®æ°é"); |
| | | cabinOrder.OdrderStatus = "å¼å§"; |
| | | cabinOrderDetail.OrderDetailStatus = "å¼å§"; |
| | | if (cabinOrderDetail.Order_Inqty == cabinOrderDetail.Order_qty) |
| | | cabinOrderDetail.OrderDetailStatus = "已宿"; |
| | | BaseDal.Db.Updateable(cabinOrderDetail).ExecuteCommand(); |
| | | var cabinOrder1 = BaseDal.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == cabinOrder.Order_no && x.Warehouse_no == reslut).Includes(x => x.Details).First(); |
| | | if (!cabinOrder1.Details.Where(x => x.OrderDetailStatus != "已宿").Any()) |
| | | cabinOrder.OdrderStatus = "已宿"; |
| | | BaseDal.Db.Updateable(cabinOrder).ExecuteCommand(); |
| | | #endregion |
| | | |
| | | #region å建åºåä¿¡æ¯ |
| | | // 5ï¸â£ æ¥è¯¢åºå详æ
|
| | | var inventoryInfo = BaseDal.Db.Queryable<Dt_InventoryInfo>() |
| | | .First(x => x.MaterielCode == cabinOrderDetail.Goods_no && x.BatchNo == cabinOrderDetail.Batch_num && x.LocationCode == "ç«åº"); |
| | | if (inventoryInfo != null) |
| | | { |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | inventoryInfo.StockQuantity += orderQty; |
| | | inventoryInfo.AvailableQuantity += orderQty; |
| | | inventoryInfo.InDate = DateTime.Now; |
| | | BaseDal.Db.Updateable(inventoryInfo).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | inventoryInfo = new Dt_InventoryInfo |
| | | { |
| | | PalletCode = detail.orderDetails?.FirstOrDefault()?.palletCode ?? "", |
| | | WarehouseCode = "001", |
| | | LocationCode = "ç«åº", |
| | | StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(), |
| | | MaterielCode = goods.MaterielCode, |
| | | MaterielName = goods.MaterielName, |
| | | MaterielSpec = goods.MaterielSpec, |
| | | BatchNo = detail.batchNo, |
| | | StockQuantity = orderQty, |
| | | OutboundQuantity = 0, |
| | | SupplyQuantity = 0, |
| | | AvailableQuantity = orderQty, |
| | | InDate = DateTime.Now, |
| | | ProductionDate = detail.finishDate.ToString("yyyy-MM-dd"), |
| | | ShelfLife = 0, |
| | | ValidityPeriod = cabinOrderDetail.Exp_date, |
| | | Remark = "æºè½ç«åº" |
| | | }; |
| | | BaseDal.Db.Insertable(inventoryInfo).ExecuteCommand(); |
| | | } |
| | | #endregion |
| | | |
| | | #region å建åºåæ¹æ¬¡ä¿¡æ¯ åªæä¸æ¯è°æ¨å
¥åºåï¼115ï¼æå¯¹æ¹æ¬¡ä¿¡æ¯è¿è¡ä¿®æ¹ |
| | | if (cabinOrder.Order_type != InOrderTypeEnum.Allocat.ObjToInt().ToString()) |
| | | { |
| | | // 6ï¸â£ æ¥è¯¢åºåæ¹æ¬¡ä¿¡æ¯ |
| | | var inventory_Batch = BaseDal.Db.Queryable<Dt_Inventory_Batch>() |
| | | .First(x => x.MaterielCode == inventoryInfo.MaterielCode && x.BatchNo == inventoryInfo.BatchNo); |
| | | |
| | | if (inventory_Batch != null) |
| | | { |
| | | inventory_Batch.StockQuantity += orderQty; |
| | | inventory_Batch.AvailableQuantity += orderQty; |
| | | BaseDal.Db.Updateable(inventory_Batch).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | inventory_Batch = new Dt_Inventory_Batch |
| | | { |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | StockQuantity = inventoryInfo.StockQuantity, |
| | | OutboundQuantity = inventoryInfo.OutboundQuantity, |
| | | AvailableQuantity = inventoryInfo.AvailableQuantity, |
| | | SupplyQuantity = inventoryInfo.SupplyQuantity, |
| | | ERPStockQuantity = 0, |
| | | Status = false, |
| | | ProductionDate = detail.finishDate.ToString("yyyy-MM-dd"), |
| | | ValidityPeriod = inventoryInfo.ValidityPeriod.ObjToDate(), |
| | | Remark = "èªå¨å建" |
| | | }; |
| | | BaseDal.Db.Insertable(inventory_Batch).ExecuteCommand(); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region æ·»å å
¥åºä»»å¡åå² |
| | | Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty() |
| | | { |
| | | WarehouseCode = inventoryInfo.WarehouseCode, |
| | | TaskNum = cabinOrderDetail.Id, |
| | | OperateType = OperateTypeEnum.èªå¨å®æ.ToString(), |
| | | InsertTime = DateTime.Now, |
| | | TaskStatus = SupplyStatusEnum.InFinish.ObjToInt(), |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | StockQuantity = inventoryInfo.StockQuantity, |
| | | OutboundQuantity = inventoryInfo.OutboundQuantity, |
| | | AvailableQuantity = inventoryInfo.AvailableQuantity, |
| | | SupplyQuantity = inventoryInfo.SupplyQuantity, |
| | | ERPStockQuantity = 0, |
| | | Status = false, |
| | | ProductionDate = detail.finishDate.ToString("yyyy-MM-dd"), |
| | | ValidityPeriod = inventoryInfo.ValidityPeriod, |
| | | Remark = "èªå¨å建" |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskType = cabinOrder.Order_type == "1" ? TaskTypeEnum.In.ObjToInt() : TaskTypeEnum.OutReturn.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName, |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = cabinOrder.Order_no, |
| | | StockQuantity = orderQty, |
| | | SupplyQuantity = 0, |
| | | Remark = "å
¥åº" |
| | | }; |
| | | BaseDal.Db.Insertable(inventory_Batch).ExecuteCommand(); |
| | | //è¿éè¿éçå
¥åºè°æ¨åç¶ææ¯115ï¼å°±å°è°æ¨ä»»å¡ç¶ææ¹ä¸º7 |
| | | if (cabinOrder.Order_type == InOrderTypeEnum.Allocat.ObjToInt().ToString()) supplyTask_Hty.TaskType = TaskTypeEnum.AllocatIn.ObjToInt(); |
| | | BaseDal.Db.Insertable(supplyTask_Hty).ExecuteCommand(); |
| | | #endregion |
| | | } |
| | | #endregion |
| | | |
| | | #region æ·»å å
¥åºä»»å¡åå² |
| | | Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty() |
| | | { |
| | | WarehouseCode = inventoryInfo.WarehouseCode, |
| | | TaskNum = cabinOrderDetail.Id, |
| | | OperateType = OperateTypeEnum.èªå¨å®æ.ToString(), |
| | | InsertTime = DateTime.Now, |
| | | TaskStatus = SupplyStatusEnum.InFinish.ObjToInt(), |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskType = TaskTypeEnum.InPick.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName, |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = cabinOrder.Order_no, |
| | | StockQuantity = orderQty, |
| | | SupplyQuantity = 0, |
| | | Remark = "å
¥åº" |
| | | }; |
| | | BaseDal.Db.Insertable(supplyTask_Hty).ExecuteCommand(); |
| | | #endregion |
| | | |
| | | //UpdateInboundOrderDetailStatus(request.orderNo, detail.batchNo, detail.productCode); |
| | | break; |
| | | } |
| | | case "2": |
| | | #region æ¾åºåºä»»å¡ |
| | | Dt_SupplyTask supplyTask = Db.Queryable<Dt_SupplyTask>().Where(x => x.MaterielCode == detail.productCode && x.BatchNo == detail.batchNo && x.OrderNo == request.orderNo && x.WarehouseCode == WarehouseEnum.ç«åº.ObjToInt().ToString("000") && x.TaskStatus == SupplyStatusEnum.NewOut.ObjToInt()).First(); |
| | | if (supplyTask == null) throw new Exception($"æªæ¾å°è®¢åå·ã{request.orderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºä»»å¡"); |
| | | #endregion |
| | | |
| | | #region å¤çåºåºåãåºåä¿¡æ¯ãåºåºä»»å¡ãè°æ¨ä»»å¡ |
| | | _deliveryOrderServices.OutTaskFinish(supplyTask); |
| | | #endregion |
| | | break; |
| | | case "2": |
| | | { |
| | | Dt_DeliveryOrder cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == request.externalOrderNo && x.Warehouse_no == reslut).Includes(x => x.Details).First(); |
| | | if (cabinOrder == null) throw new Exception($"æªæ¾å°åºåºåå·ã{request.externalOrderNo}ãçåºåºåä¿¡æ¯"); |
| | | |
| | | if (cabinOrder.Out_type == "6") |
| | | { |
| | | foreach (var item in cabinOrder.Details) |
| | | { |
| | | Dt_InventoryInfo inventoryInfo = BaseDal.Db.Queryable<Dt_InventoryInfo>() |
| | | .First(x => x.MaterielCode == item.Goods_no && x.BatchNo == item.Batch_num && x.LocationCode == reslut); |
| | | var qty = inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity; |
| | | if (orderQty != qty) |
| | | throw new Exception($"çäºåºåºæ°éä¸ä¸è´,ä¸ä¼ æ°éã{orderQty}ã,åºåçäºæ°éã{qty}ã"); |
| | | inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity; |
| | | inventoryInfo.SupplyQuantity = 0; |
| | | inventoryInfo.StockStatus = StockStatusEmun.å
¥åºå®æ.ObjToInt(); |
| | | #region æ·»å çäºåºåºä»»å¡ |
| | | Dt_SupplyTask_Hty supplyTask_Hty = new Dt_SupplyTask_Hty() |
| | | { |
| | | WarehouseCode = inventoryInfo.WarehouseCode, |
| | | OperateType = OperateTypeEnum.èªå¨å®æ.ToString(), |
| | | InsertTime = DateTime.Now, |
| | | TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(), |
| | | BatchNo = inventoryInfo.BatchNo, |
| | | MaterielName = inventoryInfo.MaterielName, |
| | | MaterielCode = inventoryInfo.MaterielCode, |
| | | MaterielSpec = inventoryInfo.MaterielSpec, |
| | | TaskType = TaskTypeEnum.ChenckOut.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName, |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = cabinOrder.Out_no, |
| | | StockQuantity = orderQty, |
| | | SupplyQuantity = 0, |
| | | Remark = "çäºåºåº" |
| | | }; |
| | | #endregion |
| | | var inventory_Batch = BaseDal.Db.Queryable<Dt_Inventory_Batch>() |
| | | .First(x => x.MaterielCode == inventoryInfo.MaterielCode && x.BatchNo == inventoryInfo.BatchNo); |
| | | inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity; |
| | | inventory_Batch.SupplyQuantity = 0; |
| | | item.OotDetailStatus = "已宿"; |
| | | BaseDal.Db.Updateable(item).ExecuteCommand(); |
| | | BaseDal.Db.Updateable(inventoryInfo).ExecuteCommand(); |
| | | BaseDal.Db.Updateable(inventory_Batch).ExecuteCommand(); |
| | | BaseDal.Db.Insertable(supplyTask_Hty).ExecuteCommand(); |
| | | } |
| | | var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Id == cabinOrder.Id).Includes(x => x.Details).First(); |
| | | if (!cabinOrder1.Details.Where(x => x.OotDetailStatus != "已宿").Any()) |
| | | cabinOrder.OutStatus = "已宿"; |
| | | BaseDal.Db.Updateable(cabinOrder).ExecuteCommand(); |
| | | } |
| | | else |
| | | { |
| | | #region æ¾åºåºä»»å¡ |
| | | Dt_SupplyTask supplyTask = Db.Queryable<Dt_SupplyTask>().Where(x => x.MaterielCode == detail.productCode && x.BatchNo == detail.batchNo && x.OrderNo == request.externalOrderNo && x.WarehouseCode == reslut && x.TaskStatus == SupplyStatusEnum.NewOut.ObjToInt()).First(); |
| | | if (supplyTask == null) throw new Exception($"æªæ¾å°è®¢åå·ã{request.externalOrderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºä»»å¡"); |
| | | if (supplyTask.StockQuantity != orderQty) throw new Exception($"订åå·ã{request.orderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºæ°éä¸åºåºä»»å¡æ°éä¸ç¸ç"); |
| | | #endregion |
| | | |
| | | #region å¤çåºåºåãåºåä¿¡æ¯ãåºåºä»»å¡ãè°æ¨ä»»å¡ |
| | | var content = _deliveryOrderServices.OutTaskFinish(supplyTask); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | #endregion |
| | | } |
| | | } |
| | | break; |
| | | case "3": // çç¹ |
| | | decimal diff = detail.ea ?? 0; // 差弿° |
| | | int flag = detail.isLossOrProfit ?? 3; // 1=çäº, 2=çç, 3=çä¸ |
| | | if (flag == 1) // çäº |
| | | { |
| | | //åºåæ°-差弿°=çäº |
| | | //batch.SupplyQuantity += (batch.StockQuantity - diff); |
| | | //batch.Remark = "çç¹ååä¼ - çäº"; |
| | | } |
| | | else if (flag == 2) // çç |
| | | { |
| | | //åºåæ°+差弿°=çç |
| | | //batch.SupplyQuantity += (batch.StockQuantity + diff); |
| | | //batch.Remark = "çç¹ååä¼ - çç"; |
| | | } |
| | | else // çä¸ |
| | | { |
| | | //batch.Remark = "çç¹ååä¼ - çä¸"; |
| | | var WarehouseLK = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); |
| | | #region æ¾çç¹ä»»å¡ |
| | | Dt_SupplyTask supplyTask = Db.Queryable<Dt_SupplyTask>().Where(x => x.MaterielCode == detail.productCode && x.BatchNo == detail.batchNo && x.OrderNo == request.externalOrderNo && x.WarehouseCode == WarehouseLK && x.TaskStatus == SupplyStatusEnum.NewCheck.ObjToInt()).First(); |
| | | if (supplyTask == null) throw new Exception($"æªæ¾å°è®¢åå·ã{request.externalOrderNo}ãç©æç¼å·ã{detail.productCode}ãççç¹ä»»å¡"); |
| | | #endregion |
| | | if (detail.isLossOrProfit == 1) // çäº |
| | | { |
| | | supplyTask.SupplyQuantity = supplyTask.StockQuantity - detail.ea; |
| | | } |
| | | else if (detail.isLossOrProfit == 2) // çç |
| | | { |
| | | supplyTask.SupplyQuantity = supplyTask.StockQuantity + detail.ea; |
| | | } |
| | | else // çä¸ |
| | | { |
| | | supplyTask.SupplyQuantity = supplyTask.StockQuantity; |
| | | } |
| | | var content = _deliveryOrderServices.CheckTaskFinish(supplyTask); |
| | | if (!content.Status) throw new Exception(content.Message); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // 9ï¸â£ æäº¤äºå¡ |
| | | BaseDal.Db.Ado.CommitTran(); |
| | | //BaseDal.Db.Ado.CommitTran(); |
| | | |
| | | return new ApiResponse<Dt_InventoryInfo> |
| | | { |
| | |
| | | catch (Exception ex) |
| | | { |
| | | // ð åæ»äºå¡ |
| | | BaseDal.Db.Ado.RollbackTran(); |
| | | //BaseDal.Db.Ado.RollbackTran(); |
| | | |
| | | return new ApiResponse<Dt_InventoryInfo> |
| | | { |
| | | code = "500", |
| | | msg = $"å¤ç失败: {ex.Message}" |
| | | }; |
| | | |
| | | //Console.WriteLine(ex.Message); |
| | | } |
| | | } |
| | | |