| | |
| | | { |
| | | public partial class DeliveryOrderServices : ServiceBase<Dt_DeliveryOrder, IRepository<Dt_DeliveryOrder>>, IDeliveryOrderServices |
| | | { |
| | | |
| | | private readonly ICabinOrderServices _cabinOrderServices; |
| | | private readonly IBasicService _basicService; |
| | | private readonly IUnitOfWorkManage _unitOfWorkManage; |
| | | private readonly IInventory_BatchServices _inventory_BatchServices; |
| | | private readonly IInventoryInfoService _inventoryInfoService; |
| | | private readonly IDeliveryOrderDetailServices _deliveryOrderDetailServices; |
| | | private readonly ISupplyTaskService _supplyTaskService; |
| | | private readonly ICabinOrderServices _cabinOrderServices; |
| | | private readonly ITacticsService _tacticsService; |
| | | public IRepository<Dt_DeliveryOrder> Repository => BaseDal; |
| | | public DeliveryOrderServices(IRepository<Dt_DeliveryOrder> BaseDal, IBasicService basicService, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, IDeliveryOrderDetailServices deliveryOrderDetailServices, ISupplyTaskService supplyTaskService, ICabinOrderServices cabinOrderServices, ITacticsService tacticsService) : base(BaseDal) |
| | |
| | | _cabinOrderServices = cabinOrderServices; |
| | | _tacticsService = tacticsService; |
| | | } |
| | | |
| | | |
| | | static string SearchDate = "2025-09-10 00:00:00"; |
| | | public WebResponseContent GetUpstreamOutOrder() |
| | | { |
| | | var responseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | var url = "http://121.37.118.63:80/GYZ2/95fck/outOrder"; |
| | | //var url = "http://127.0.0.1:4523/m1/5660322-5340849-default/GYZ2/95fck/outOrder"; |
| | | if (string.IsNullOrEmpty(SearchDate)) SearchDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); |
| | | //// 请æ±åæ° |
| | | var requestData = new |
| | | { |
| | | searchDate = SearchDate |
| | | //searchDate = "2022-10-10 20:45:16" // æ£ç¡®çæ ¼å¼ |
| | | }; |
| | | SearchDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss"); |
| | | |
| | | var result = HttpHelper.Post(url, requestData.ToJsonString()); |
| | | var response = JsonConvert.DeserializeObject<UpstreamResponse<UpstramOutOrderInfo>>(result); |
| | | |
| | | if (response.resultCode != "0") |
| | | { |
| | | SendErrorToUpstream(3, "", response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败", ""); |
| | | return responseContent.Error(response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败"); |
| | | } |
| | | |
| | | if (response.data == null || !response.data.Any()) |
| | | { |
| | | return responseContent.OK("æ æ°åºåºåæ°æ®"); |
| | | } |
| | | |
| | | // å·²åå¨åºåºåå· |
| | | var existingOutOrderNos = BaseDal.Db.Queryable<Dt_DeliveryOrder>() |
| | | .Select(x => x.Out_no) |
| | | .ToList(); |
| | | |
| | | // æ°åºåºå |
| | | var newOutOrders = response.data |
| | | .Where(outorder => !existingOutOrderNos.Contains(outorder.order_no)) |
| | | .ToList(); |
| | | |
| | | List<string> order_no = newOutOrders.Select(x => x.order_no).ToList(); |
| | | |
| | | if (!newOutOrders.Any()) |
| | | { |
| | | return responseContent.OK("ææåºåºåå·²åå¨ï¼æ éæ°å¢"); |
| | | } |
| | | |
| | | Db.Ado.BeginTran(); |
| | | try |
| | | { |
| | | List<Dt_DeliveryOrder> _DeliveryOrders = new List<Dt_DeliveryOrder>(); |
| | | List<string> orderNos = new List<string>(); |
| | | |
| | | foreach (var outorder in newOutOrders) |
| | | { |
| | | if (outorder.order_type == "1") // æ£å¸¸åºåºå |
| | | { |
| | | CreateOutboundOrder(outorder);//å建åºåºåãå¤çåºåãæ·»å åºåºä»»å¡ |
| | | } |
| | | else if (outorder.order_type == "2")//åºåºéè´§ |
| | | { |
| | | // å建åºåºéè´§å - è¿ééè¦æ ¹æ®ä¸å¡é»è¾å®ç° |
| | | // ææ¶è·³è¿æå®ç°éè´§é»è¾ |
| | | //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 == "3")//æ¥æåºåº |
| | | { |
| | | |
| | | } |
| | | } |
| | | |
| | | // æ¹éæå
¥åºåºååæç» |
| | | //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("å建ä¾åºä»»å¡å¤±è´¥"); |
| | | //} |
| | | return responseContent.OK($"忥åºåºåæåï¼å
±{_DeliveryOrders.Count}æ¡"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | SendErrorToUpstream(3, "", ex.Message, ""); |
| | | return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | SendErrorToUpstream(3, "", ex.Message, ""); |
| | | return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// å建åºåºå |
| | | /// </summary> |
| | |
| | | try |
| | | { |
| | | Dt_Tactics tactics = _tacticsService.Repository.QueryFirst(x => x.TacticeName == "åºåºçç¥"); |
| | | if (outorder.warehouse_no == WarehouseEnum.麻精åº.ObjToInt().ToString("000") || outorder.warehouse_no == WarehouseEnum.å·å»åº.ObjToInt().ToString("000")) |
| | | #region ç¹æ®åºæ¿åºåº |
| | | string WareCodeMJ = WarehouseEnum.麻精åº.ObjToInt().ToString("000"); |
| | | string WareCodeLD = WarehouseEnum.å·å»åº.ObjToInt().ToString("000"); |
| | | if (outorder.warehouse_no == WareCodeMJ || outorder.warehouse_no == WareCodeLD) |
| | | { |
| | | #region æ·»å åºåºå |
| | | var entityOrder = new Dt_DeliveryOrder |
| | |
| | | BaseDal.Db.InsertNav(entityOrder).Include(x => x.Details).ExecuteCommand(); |
| | | #endregion |
| | | #region å¤çåºåãåºåæ¹æ¬¡ãæ·»å åºåºä»»å¡ |
| | | List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); |
| | | foreach (var item in entityOrder.Details) |
| | | { |
| | | Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.Goods_no && x.BatchNo == 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); |
| | | List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == item.Goods_no && x.BatchNo == item.Batch_num && x.StockStatus == StockStatusEmun.å
¥åºå®æ.ObjToInt() && x.AvailableQuantity > 0 && x.WarehouseCode == item.Reservoirarea); |
| | | #region æåºåºçç¥æ¥æ¾åºå |
| | | if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt()) |
| | | dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList(); |
| | |
| | | foreach (var InventoryInfo in dt_InventoryInfos) |
| | | { |
| | | if (Order_qty <= 0) break; |
| | | if (InventoryInfo.AvailableQuantity < Order_qty) |
| | | if (InventoryInfo.AvailableQuantity <= Order_qty) |
| | | { |
| | | InventoryInfo.AvailableQuantity = 0; |
| | | Order_qty -= InventoryInfo.AvailableQuantity; |
| | | InventoryInfo.OutboundQuantity += InventoryInfo.AvailableQuantity; |
| | | InventoryInfo.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | 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.AvailableQuantity, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | InventoryInfo.AvailableQuantity = 0; |
| | | } |
| | | else |
| | | { |
| | | InventoryInfo.AvailableQuantity -= Order_qty; |
| | | Order_qty = 0; |
| | | InventoryInfo.OutboundQuantity += Order_qty; |
| | | InventoryInfo.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | 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 = Order_qty, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | Order_qty = 0; |
| | | } |
| | | } |
| | | 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); |
| | | } |
| | | _supplyTaskService.AddData(supplyTasks); |
| | | #endregion |
| | | } |
| | | #endregion |
| | | else |
| | | { |
| | | string WareCodeDJ = WarehouseEnum.大件åº.ObjToInt().ToString("000"); |
| | | string WareCodeLK = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); |
| | | #region å建大件åºãç«åºåºåºå¤´è¡¨ |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | { |
| | |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Client_no = outorder.client_no, |
| | | Warehouse_no = WarehouseEnum.大件åº.ObjToInt().ToString("000"), |
| | | Warehouse_no = WareCodeDJ, |
| | | Details = new List<Dt_DeliveryOrderDetail>() |
| | | }; |
| | | var entityOrderLK = new Dt_DeliveryOrder |
| | |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Client_no = outorder.client_no, |
| | | Warehouse_no = WarehouseEnum.ç«åº.ObjToInt().ToString("000"), |
| | | Warehouse_no = WareCodeLK, |
| | | Details = new List<Dt_DeliveryOrderDetail>() |
| | | }; |
| | | #endregion |
| | |
| | | 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"))); |
| | | List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo && x.AvailableQuantity > 0 && (x.WarehouseCode == WareCodeDJ || x.WarehouseCode == WareCodeLK)); |
| | | #endregion |
| | | #region æåºåºçç¥æ¥æ¾åºå |
| | | if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt()) |
| | |
| | | entityOrder.Details.Add(orderDetail); |
| | | #endregion |
| | | |
| | | #region 计ç®åºå |
| | | List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); |
| | | #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(); |
| | | 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.AvailableQuantity, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | InventoryInfo.AvailableQuantity = 0; |
| | | } |
| | | else |
| | | { |
| | | InventoryInfo.AvailableQuantity -= Order_qty; |
| | | Order_qty = 0; |
| | | InventoryInfo.OutboundQuantity += Order_qty; |
| | | InventoryInfo.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | 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 = Order_qty, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | Order_qty = 0; |
| | | } |
| | | } |
| | | #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); |
| | |
| | | #endregion |
| | | else |
| | | { |
| | | List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); |
| | | Dt_DeliveryOrderDetail orderDetail = null; |
| | | Dt_DeliveryOrderDetail orderDetailLK = null; |
| | | var ys = Order_qty % materielInfo.BoxQty; //ä¸è½æ´é¤ç®±è§çæ£ä»¶æ° |
| | |
| | | } |
| | | #endregion |
| | | |
| | | #region æ´ä»¶ä¼å
åé
å¤§ä»¶åº |
| | | foreach (var item in dt_InventoryInfos.Where(x => x.WarehouseCode == WarehouseEnum.大件åº.ObjToInt().ToString("000"))) |
| | | #region æ´ä»¶ä¼å
åé
大件åº,计ååºå,æ·»å åºåºä»»å¡ |
| | | foreach (var item in dt_InventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ)) |
| | | { |
| | | if (xs <= 0) break; |
| | | item.StockStatus = StockStatusEmun.åºåºéå®.ObjToInt(); |
| | | decimal outqty = 0; |
| | | while (item.AvailableQuantity > 0 && xs > 0) |
| | | { |
| | | xs--; |
| | |
| | | Exp_date = detail.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Order_Outqty = 0, |
| | | Status = 0 |
| | | Status = 2 |
| | | }; |
| | | item.AvailableQuantity -= materielInfo.BoxQty; |
| | | item.OutboundQuantity += materielInfo.BoxQty; |
| | | outqty += materielInfo.BoxQty; |
| | | } |
| | | else |
| | | { |
| | | orderDetail.Order_qty += materielInfo.BoxQty; |
| | | item.AvailableQuantity -= materielInfo.BoxQty; |
| | | item.OutboundQuantity += materielInfo.BoxQty; |
| | | outqty += materielInfo.BoxQty; |
| | | } |
| | | } |
| | | Dt_SupplyTask supplyTask = new Dt_SupplyTask() |
| | | { |
| | | WarehouseCode = item.WarehouseCode, |
| | | BatchNo = item.BatchNo, |
| | | MaterielName = item.MaterielName, |
| | | MaterielCode = item.MaterielCode, |
| | | MaterielSpec = item.MaterielSpec, |
| | | TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(), |
| | | TaskType = TaskTypeEnum.OutPick.ObjToInt(), |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName ?? "System", |
| | | LocationCode = item.LocationCode, |
| | | OrderNo = entityOrder.Out_no, |
| | | StockQuantity = outqty, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | _inventoryInfoService.Repository.UpdateData(item); |
| | | } |
| | | #endregion |
| | | |
| | | #region åé
å®å¤§ä»¶åºå¦æè¿æç®±æ°ï¼åéæ©åé
ç«åº |
| | | if (orderDetailLK == null) |
| | | if (xs > 0) |
| | | { |
| | | orderDetailLK = new Dt_DeliveryOrderDetail() |
| | | if (orderDetailLK == null) |
| | | { |
| | | 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; |
| | | 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>(); |
| | | |
| | | #region ç«åºåºåºåï¼ä¿®æ¹ç«åºåºåï¼æ·»å ç«åºåºåºä»»å¡ |
| | | if (orderDetailLK != null) |
| | | { |
| | | #region æ·»å åºåºä»»å¡ãä¿®æ¹åºåä¿¡æ¯ |
| | | Dt_InventoryInfo inventoryInfo = dt_InventoryInfos.Where(x => x.WarehouseCode == WarehouseEnum.ç«åº.ObjToInt().ToString("000")).First(); |
| | | Dt_InventoryInfo inventoryInfo = dt_InventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).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, |
| | |
| | | Creater = App.User.UserName ?? "System", |
| | | LocationCode = inventoryInfo.LocationCode, |
| | | OrderNo = entityOrder.Out_no, |
| | | StockQuantity = inventoryInfo.OutboundQuantity, |
| | | StockQuantity = orderDetailLK.Order_qty, |
| | | SupplyQuantity = 0, |
| | | Remark = "åºåº" |
| | | }; |
| | | supplyTasks.Add(supplyTask); |
| | | #endregion |
| | | _inventoryInfoService.Repository.UpdateData(inventoryInfo); |
| | | 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); |
| | | } |
| | | #endregion |
| | | if (orderDetail != null) entityOrder.Details.Add(orderDetail); |
| | | _inventory_BatchServices.Repository.UpdateData(inventory_Batch); |
| | | _inventoryInfoService.Repository.UpdateData(dt_InventoryInfos); |
| | | _supplyTaskService.AddData(supplyTasks); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// åºåºåæ¨éç» WCS |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent EdiOut() |
| | | { |
| | | var responseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | // 1. æ¥è¯¢ç¬¦åæ¡ä»¶ç订åï¼è¡¨å¤´=æ°å»º && å
嫿ææç»ï¼ |
| | | var outOrders = BaseDal.Db.CopyNew().Queryable<Dt_DeliveryOrder>() |
| | | .Where(o => o.OutStatus == "æ°å»º" && o.Warehouse_no == WarehouseEnum.ç«åº.ObjToInt().ToString("000")) |
| | | .Includes(o => o.Details, d => d.MedicineGoods) |
| | | .ToList(); |
| | | |
| | | // 2. åè¿æ»¤æä¸ç¬¦åæ¡ä»¶çæç»ï¼åªä¿ç Status=0 ï¼ |
| | | foreach (var order in outOrders) |
| | | { |
| | | order.Details = order.Details.Where(d => d.Status == 0).ToList(); |
| | | } |
| | | |
| | | if (outOrders == null || !outOrders.Any()) |
| | | { |
| | | Console.WriteLine("没æç¬¦åæ¡ä»¶ç订åéè¦æ¨é"); |
| | | return responseContent.Error("没æç¬¦åæ¡ä»¶ç订åéè¦æ¨é"); |
| | | } |
| | | |
| | | foreach (var order in outOrders) |
| | | { |
| | | try |
| | | { |
| | | string materialCode = "YY";//é»è®¤å¼ |
| | | //è·åå½å订åç第ä¸ä¸ªæç»é¡¹ |
| | | var firstDetail = order.Details.FirstOrDefault(); |
| | | if (firstDetail?.MedicineGoods != null && !string.IsNullOrEmpty(firstDetail.MedicineGoods.MaterielErpType)) |
| | | { |
| | | //妿æ¡ä»¶æ»¡è¶³ï¼å°ç©æä»£ç 设置为第ä¸ä¸ªæç»é¡¹å¯¹åºçè¯åç©æä»£ç |
| | | materialCode = firstDetail.MedicineGoods.MaterielErpType; |
| | | } |
| | | // 3. ç»è£
DTO |
| | | var ediDto = new TowcsDto.ToediOutInfo |
| | | { |
| | | customerCode = "905", |
| | | materialCode = materialCode, |
| | | externalOrderNo = order.Out_no, |
| | | outOrderType = order.Out_type == "1" ? "10" : order.Out_type == "3" ? "20" : "30",//åºåºåç±»åæ¯1å°±æ¯æ£å¸¸çï¼3å°±æ¯çç¹ |
| | | priority = 1, |
| | | Is_cancel = 0, |
| | | details = order.Details.Select(d => new TowcsDto.ToeOutdiInDetail |
| | | { |
| | | batchNo = d.Batch_num, |
| | | productCode = d.Goods_no, |
| | | productName = d.MedicineGoods?.MaterielName, |
| | | productSpecifications = d.MedicineGoods?.MaterielModel, |
| | | quantity = (int)d.Order_qty, |
| | | //stocktakingDetails = order.Out_type == "3" |
| | | // ? new List<ToOutediInStock> |
| | | // { |
| | | // new ToOutediInStock { palletCode = "FC00001", quantity = d.Order_qty.ToString() } |
| | | // } |
| | | // : null |
| | | }).ToList() |
| | | }; |
| | | |
| | | // 4. è°ç¨æ¥å£ |
| | | var url = "http://172.16.1.2:9357/file-admin/api/out/ediOut"; |
| | | //var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363076920"; |
| | | |
| | | var result = HttpHelper.Post(url, ediDto.ToJsonString()); |
| | | var resp = JsonConvert.DeserializeObject<TowcsDto.TowcsResponse<object>>(result); |
| | | |
| | | if (resp != null && resp.code == "0") |
| | | { |
| | | // æ´æ°è¡¨å¤´ç¶æ |
| | | BaseDal.Db.Updateable<Dt_DeliveryOrder>() |
| | | .SetColumns(o => new Dt_DeliveryOrder { OutStatus = "å¼å§" }) |
| | | .Where(o => o.Id == order.Id) |
| | | .ExecuteCommand(); |
| | | |
| | | // æ´æ°æç»ç¶æ |
| | | BaseDal.Db.Updateable<Dt_DeliveryOrderDetail>() |
| | | .SetColumns(d => new Dt_DeliveryOrderDetail { Status = 1, OotDetailStatus = "å¼å§" }) |
| | | .Where(d => d.DeliveryOrderId == order.Id && d.Status == 0) |
| | | .ExecuteCommand(); |
| | | Console.WriteLine($"订å {order.Out_no} æ¨éæå"); |
| | | } |
| | | else |
| | | { |
| | | SendErrorToUpstream(3, order.Out_no, resp?.msg ?? "WCS æ¨é失败", ""); |
| | | Console.WriteLine($"订å {order.Out_no} æ¨é失败ï¼{resp?.msg}"); |
| | | } |
| | | //å é¤å
¨é¨ç¶ä¸ºå·²å®æçæç»å表头ï¼ç§»å
¥åå²è¡¨ |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | SendErrorToUpstream(3, order.Out_no, ex.Message, ""); |
| | | Console.WriteLine($"订å {order.Out_no} æ¨éå¼å¸¸ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | return responseContent.OK("åºåºè®¢åæ¨é宿"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine("EdiOut å¼å¸¸ï¼" + ex.Message); |
| | | return responseContent.Error("åºåºè®¢åæ¨é失败ï¼" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | //çç¹ æ¿æ´ä¸ªæ¹æ¬¡ä¿¡æ¯è¡¨çååæ¹å·åååç¼å·æ¥è¿è¡çç¹ |
| | | public WebResponseContent InventoryGood(string batchNo, string goodsNo) |
| | | { |
| | |
| | | catch (Exception ex) |
| | | { |
| | | return response.Error("çç¹å¤±è´¥ï¼" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// åºåºæ¥å®ææ¥å£ |
| | | /// </summary> |
| | | /// <param name="out_no">åºåºåå·</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent CompleteAllOutOrders() |
| | | { |
| | | var responseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | #region æ¥æ¾ææå·²å®æåºåºå |
| | | var outorders = BaseDal.QueryData(x => x.OutStatus == "已宿").Select(x => x.Out_no).Distinct().ToList(); |
| | | foreach (var outorder in outorders) |
| | | { |
| | | var Orders = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == outorder).Includes(x => x.Details).ToList(); |
| | | if (!Orders.Where(x => x.OutStatus != "已宿").Any()) |
| | | { |
| | | BaseDal.Db.Ado.BeginTran(); |
| | | BaseDal.DeleteAndMoveIntoHty(Orders, OperateTypeEnum.èªå¨å®æ); |
| | | foreach (var item in Orders) |
| | | { |
| | | _deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.èªå¨å®æ); |
| | | } |
| | | var url = "http://121.37.118.63:80/GYZ2/95fck/outOrderOk"; |
| | | var requestDate = new |
| | | { |
| | | order_no = outorder |
| | | }; |
| | | var result = HttpHelper.Post(url, requestDate.ToJsonString()); |
| | | var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result); |
| | | if (response.resultCode == "0") BaseDal.Db.Ado.CommitTran(); |
| | | else |
| | | { |
| | | BaseDal.Db.Ado.RollbackTran(); |
| | | SendErrorToUpstream(4, "", $"䏿¸¸æ¥å£è¿å失败: {response.resultMsg}", outorder); |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | return responseContent.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | BaseDal.Db.Ado.RollbackTran(); |
| | | return responseContent.Error("æ¹éå¤ç失败ï¼" + ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// æ¨éå¼å¸¸ä¿¡æ¯ç»ä¸æ¸¸ç³»ç» 1.å
¥åºåæ¥å£ï¼2.å
¥åºåæ¥å®ææ¥å£ï¼3.åºåºåæ¥å£ï¼4.åºåºæ¥å®ææ¥å£ï¼5.è¯ååºç¡ä¿¡æ¯åæ¥æ¥å£ï¼6.ä¾åºåä¿¡æ¯æ¥å£ï¼7.客æ·ä¿¡æ¯æ¥å£ï¼8.åºåæ¥è¯¢æ¥å£ |
| | | /// </summary> |
| | | public void SendErrorToUpstream(int type, string code, string message, string remark) |
| | | { |
| | | try |
| | | { |
| | | var url = "http://121.37.118.63:80/GYZ2/95fck/exceptionLog"; |
| | | |
| | | var requestData = new |
| | | { |
| | | type = type.ToString(), |
| | | code = code, |
| | | message = message, |
| | | remark = remark |
| | | }; |
| | | |
| | | var result = HttpHelper.Post(url, requestData.ToJsonString()); |
| | | // å¯ä»¥ååºååæ£æ¥ resultCode æ¯å¦ä¸º0 |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | // è¿éä¸è¦åæå¼å¸¸äºï¼é¿å
æ»å¾ªç¯ |
| | | Console.WriteLine("å¼å¸¸æ¥å£æ¨é失败ï¼" + e.Message); |
| | | } |
| | | } |
| | | |