| 2025-10-25 | dengjunjie | ![]() |
| 2025-10-25 | dengjunjie | ![]() |
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Common/TaskEnum/TaskTypeEnum.cs
@@ -10,6 +10,41 @@ public enum TaskTypeEnum { /// <summary> /// æ£å¸¸å ¥åº /// </summary> [Description("æ£å¸¸å ¥åº")] In, /// <summary> /// åºåºéè´§ /// </summary> [Description("åºåºéè´§")] OutReturn, /// <summary> /// æ£å¸¸åºåº /// </summary> [Description("æ£å¸¸åºåº")] Out, /// <summary> /// å ¥åºéè´§ /// </summary> [Description("å ¥åºéè´§")] InReturn, /// <summary> /// çç¹åºåº /// </summary> [Description("çç¹åºåº")] OutInventory, /// <summary> /// ççå ¥åº /// </summary> [Description("ççå ¥åº")] ChenckIn, /// <summary> /// çäºåºåº /// </summary> [Description("çäºåºåº")] ChenckOut, /// <summary> /// è°æ¨å ¥åº /// </summary> [Description("è°æ¨å ¥åº")] @@ -19,96 +54,6 @@ /// </summary> [Description("è°æ¨åºåº")] AllocatOut, /// <summary> /// 颿åºåº /// </summary> [Description("颿åºåº")] Outbound = 100, /// <summary> /// çç¹ /// </summary> [Description("çç¹")] OutInventory = 110, /// <summary> /// 忣åºåº /// </summary> [Description("忣åºåº")] OutPick = 120, /// <summary> /// è´¨æ£åºåº /// </summary> [Description("è´¨æ£åºåº")] OutQuality = 130, /// <summary> /// 空箱åºåº /// </summary> [Description("空箱åºåº")] OutEmpty = 140, /// <summary> /// MESåºåº /// </summary> [Description("MESåºåº")] MesOutbound = 200, /// <summary> /// MESæå¨åºåº /// </summary> [Description("MESæå¨åºåº")] MesHandOutbound = 210, /// <summary> /// MESæå¨æ£éåºåº /// </summary> [Description("MESæå¨æ£éåºåº")] MesHandPickOutbound = 220, /// <summary> /// éè´å ¥åº /// </summary> [Description("éè´å ¥åº")] Inbound = 510, /// <summary> /// çç¹å ¥åº /// </summary> [Description("çç¹å ¥åº")] InInventory = 520, /// <summary> /// åæ£å ¥åº /// </summary> [Description("åæ£å ¥åº")] InPick = 530, /// <summary> /// è´¨æ£å ¥åº /// </summary> [Description("è´¨æ£å ¥åº")] InQuality = 540, /// <summary> /// çäº§éæ /// </summary> [Description("ç产éæ")] ProductionReturn = 550, /// <summary> /// MESéæ /// </summary> [Description("MESéæ")] MesMatReturn = 560, /// <summary> /// ç©ºç®±å ¥åº /// </summary> [Description("ç©ºç®±å ¥åº")] InEmpty = 600, /// <summary> /// å··éå ç§»åº /// </summary> [Description("å··éå ç§»åº")] Relocation = 900 } public enum TaskTypeGroup н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_DTO/SquareCabin/OrderDto.cs
@@ -58,7 +58,7 @@ public string order_no { get; set; } /// <summary> /// å ¥åºåç±»åï¼1ï¼æ£å¸¸å ¥åºï¼3ï¼å ¥åºéè´§ï¼ /// å ¥åºåç±»åï¼1ï¼æ£å¸¸å ¥åºï¼3ï¼å ¥åºéè´§,5:ççå ¥åºï¼ /// </summary> public string order_type { get; set; } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_ISquareCabinServices/IBusiness.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ using WIDESEA_Core; namespace WIDESEA_ISquareCabinServices { public interface IBusiness : IDependency { /// <summary> /// è·å䏿¸¸å ¥åºè®¢å /// </summary> /// <returns></returns> WebResponseContent GetUpstreamOrder(); /// <summary> /// è·å䏿¸¸åºåºåæ°æ® /// </summary> /// <param name="searchDate"></param> /// <returns></returns> WebResponseContent GetUpstreamOutOrder(); /// <summary> /// ç»ä¸æ¸¸wcså ¥åºå /// </summary> /// <returns></returns> WebResponseContent EdiIn(); /// <summary> /// ç»ä¸æ¸¸wcsåºåºå /// </summary> /// <returns></returns> WebResponseContent EdiOut(); /// <summary> /// å ¥åºæ¥å®ææ¥å£ /// </summary> /// <param name="order_no">å ¥åºåå·</param> /// <returns></returns> //WebResponseContent CompleteOrder(string order_no); WebResponseContent CompleteAllOrders(); /// <summary> /// åºåºæ¥å®ææ¥å£ /// </summary> /// <returns></returns> WebResponseContent CompleteAllOutOrders(); } } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_ISquareCabinServices/ICabinOrderServices.cs
@@ -14,33 +14,10 @@ public interface ICabinOrderServices: IService<Dt_CabinOrder> { IRepository<Dt_CabinOrder> Repository { get; } /// <summary> /// è·å䏿¸¸å ¥åºè®¢å /// </summary> /// <returns></returns> WebResponseContent GetUpstreamOrder(); /// <summary> /// å ¥åºæ¥å®ææ¥å£ /// </summary> /// <param name="order_no">å ¥åºåå·</param> /// <returns></returns> //WebResponseContent CompleteOrder(string order_no); WebResponseContent CompleteAllOrders(); /// <summary> /// ç»wcs /// </summary> /// <returns></returns> WebResponseContent EdiIn(); WebResponseContent GetCabinOrders(SaveModel saveModel); WebResponseContent GetCabinOrderDetail(int pageNo, string orderNo); WebResponseContent FeedbackIn(SaveModel saveModel); WebResponseContent CreateInboundOrder(OrderDto.UpstreamOrderInfo order); WebResponseContent CreateCheckInOrder(OrderDto.UpstreamOrderInfo order); } } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_ISquareCabinServices/IDeliveryOrderServices.cs
@@ -4,6 +4,7 @@ using System.Text; using System.Threading.Tasks; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_DTO.SquareCabin; using WIDESEA_Model.Models; @@ -12,36 +13,12 @@ { public interface IDeliveryOrderServices : IService<Dt_DeliveryOrder> { /// <summary> /// è·å䏿¸¸åºåºåæ°æ® /// </summary> /// <param name="searchDate"></param> /// <returns></returns> WebResponseContent GetUpstreamOutOrder(); /// <summary> /// ç»ä¸æ¸¸wcsåºåºå /// </summary> /// <returns></returns> WebResponseContent EdiOut(); IRepository<Dt_DeliveryOrder> Repository { get; } /// <summary> /// çç¹åºåºæ¥å£ /// </summary> /// <returns></returns> public WebResponseContent InventoryGood(string batchNo, string goodsNo); ///// <summary> ///// åºåºæ¥å®ææ¥å£ ///// </summary> ///// <param name="out_no">åºåºåå·</param> ///// <returns></returns> //WebResponseContent CompleteOutOrder(string out_no); /// <summary> /// åºåºæ¥å®ææ¥å£ /// </summary> /// <returns></returns> WebResponseContent CompleteAllOutOrders(); WebResponseContent GetDeliveryOrders(SaveModel saveModel); WebResponseContent GetDeliveryOrderDetail(int pageNo, string orderNo, bool isPick); /// <summary> @@ -86,5 +63,6 @@ WebResponseContent OutTaskFinish(Dt_SupplyTask supplyTask); WebResponseContent CheckTaskFinish(Dt_SupplyTask supplyTask, string LocationCode = null); WebResponseContent CreateOutboundOrder(OrderDto.UpstramOutOrderInfo upstramOutOrderInfo); WebResponseContent CreateCheckOutOrder(OrderDto.UpstramOutOrderInfo outorder); } } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Model/Models/SquareCabin/Dt_CabinOrder.cs
@@ -21,9 +21,9 @@ /// <summary> /// 䏿¸¸å ¥åºåç±»å为ï¼1æ£å¸¸å ¥åº/3å ¥åºéè´§ /// 䏿¸¸å ¥åºåç±»å为ï¼1æ£å¸¸å ¥åº,2åºåºéè´§,5ççå ¥åº /// </summary> [SugarColumn(IsNullable = true, Length = 3, ColumnDescription = "å ¥åºç±»åï¼1æ£å¸¸/3éè´§")] [SugarColumn(IsNullable = true, Length = 3, ColumnDescription = "å ¥åºç±»åï¼1æ£å¸¸å ¥åº,2åºåºéè´§,5ççå ¥åº")] public string Order_type { get; set; } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Model/Models/SquareCabin/Dt_DeliveryOrder.cs
@@ -9,18 +9,18 @@ namespace WIDESEA_Model.Models { [SugarTable("Dt_DeliveryOrder", "åºåºå")] public class Dt_DeliveryOrder: BaseEntity public class Dt_DeliveryOrder : BaseEntity { [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主é®")] public int Id { get; set; } public int Id { get; set; } [SugarColumn(ColumnName = "Out_no", IsNullable = true, Length = 50, ColumnDescription = "åºåºåå·")] public string Out_no{ get; set; } public string Out_no { get; set; } /// <summary> /// çç¹åºåºå¨WMSç³»ç»äººå·¥å建 䏿¸¸ä¼ è¿æ¥çåºåºç±»å为1ï¼æ£å¸¸åºåºï¼2åºåºéè´§ /// 1æ£å¸¸åºåº,3å ¥åºéè´§,6çäºåºåº /// </summary> [SugarColumn(ColumnName = "Out_type", IsNullable = true, Length = 3, ColumnDescription = "åºåºåç±»å1æ£å¸¸ï¼2åºåºéè´§ï¼3çç¹åºåºï¼4ççå ¥åºï¼5çäºåºåº")] public string Out_type { get; set; } [SugarColumn(ColumnName = "Out_type", IsNullable = true, Length = 3, ColumnDescription = "åºåºç±»åï¼1æ£å¸¸åºåº,3å ¥åºéè´§,6çäºåºåº")] public string Out_type { get; set; } [SugarColumn(ColumnName = "Client_no", IsNullable = true, Length = 50, ColumnDescription = "客æ·ä»£ç ")] public string Client_no { get; set; } @@ -38,12 +38,12 @@ [SugarColumn(ColumnName = "Account_time", IsNullable = true, ColumnDescription = "åºåºè®°è´¦æ¶é´")] public DateTime?Account_time { get; set; } public DateTime? Account_time { get; set; } /// <summary> /// è¡¨å¤´ç¶æï¼æ°å»ºï¼å¼å§ï¼å·²å®æ //详æ è¡¨å ¨é¨ç¶æä¸ºå ¨é¨ï¼å¨å°ç¶ææ¹æå®æåæä¼ä¸ä¼ ç»ä¸æ¸¸ç³»ç» /// </summary> [SugarColumn(ColumnName = "OutStatus", IsNullable = true, ColumnDescription = "ç¶æ" )] [SugarColumn(ColumnName = "OutStatus", IsNullable = true, ColumnDescription = "ç¶æ")] public string OutStatus { get; set; } ///// <summary> н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Model/Models/WMSInfo/Dt_InventoryInfo.cs
@@ -107,8 +107,6 @@ [SugarColumn(IsNullable = false, ColumnDescription = "å¯ç¨åºåæ°é", DefaultValue = "0")] public decimal AvailableQuantity { get; set; } /// <summary> /// æ¥è¦ä¿¡æ¯ /// </summary> н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Model/Models/WMSInfo/Dt_MessageInfo.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Core.DB.Models; namespace WIDESEA_Model.Models { /// <summary> /// å¼å¸¸ä¿¡æ¯ /// </summary> [SugarTable(nameof(Dt_MessageInfo), "å¼å¸¸ä¿¡æ¯")] public class Dt_MessageInfo : BaseEntity { /// <summary> /// ä¸»é® /// </summary> [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主é®")] public int Id { get; set; } /// <summary> /// å¼å¸¸ä¿¡æ¯åç§° /// </summary> [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "å¼å¸¸ä¿¡æ¯åç§°")] public string MessageName { get; set; } /// <summary> /// å¼å¸¸ä¿¡æ¯ /// </summary> [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "å¼å¸¸ä¿¡æ¯")] public string MessageInfo { get; set; } /// <summary> /// ç¶æ /// </summary> [SugarColumn(IsNullable = true, DefaultValue = "0", ColumnDescription = "ç¶æ")] public int MessageStatus { get; set; } } } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_Model/Models/WMSInfo/Dt_MessageInfo_Hty.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,44 @@ using Magicodes.ExporterAndImporter.Core; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.OtherEnum; using WIDESEA_Core.Attributes; using WIDESEA_Core.DB.Models; namespace WIDESEA_Model.Models { /// <summary> /// å¼å¸¸ä¿¡æ¯åå² /// </summary> [SugarTable(nameof(Dt_MessageInfo_Hty), "å¼å¸¸ä¿¡æ¯åå²")] public class Dt_MessageInfo_Hty : Dt_MessageInfo, IBaseHistoryEntity { /// <summary> /// åè¡¨ä¸»é® /// </summary> [ImporterHeader(Name = "å表主é®")] [ExporterHeader(DisplayName = "å表主é®")] [SugarColumn(IsNullable = false, DefaultValue = "0", ColumnDescription = "å表主é®")] public int SourceId { get; set; } /// <summary> /// æä½ç±»å /// </summary> [ImporterHeader(Name = "æä½ç±»å")] [ExporterHeader(DisplayName = "æä½ç±»å")] [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "æä½ç±»å")] public string OperateType { get; set; } /// <summary> /// ç§»å ¥å岿¶é´ /// </summary> [ImporterHeader(Name = "ç§»å ¥å岿¶é´")] [ExporterHeader(DisplayName = "ç§»å ¥å岿¶é´")] [SugarColumn(IsNullable = false, ColumnDescription = "ç§»å ¥å岿¶é´")] public DateTime InsertTime { get; set; } } } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/Business.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,661 @@ using HslCommunication; using Newtonsoft.Json; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_IBasicService; using WIDESEA_ISquareCabinServices; using WIDESEA_IWMsInfoServices; using static WIDESEA_DTO.SquareCabin.OrderDto; using WIDESEA_Model.Models; using WIDESEA_SquareCabinServices; using static WIDESEA_DTO.SquareCabin.TowcsDto; using WIDESEA_Common.WareHouseEnum; using WIDESEA_DTO.SquareCabin; namespace WIDESEA_WMSServer { public class Business : IBusiness { private readonly ICabinOrderServices _cabinOrderServices; private readonly ICabinOrderDetailServices _cabinDetailServices; private readonly IDeliveryOrderServices _deliveryOrderServices; private readonly IDeliveryOrderDetailServices _deliveryOrderDetailServices; private readonly IBasicService _basicService; private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IInventory_BatchServices _inventory_BatchServices; private readonly IInventoryInfoService _inventoryInfoService; private readonly ISupplyTaskService _supplyTaskService; private readonly ITacticsService _tacticsService; public Business(IDeliveryOrderServices deliveryOrderServices, IBasicService basicService, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, IDeliveryOrderDetailServices deliveryOrderDetailServices, ISupplyTaskService supplyTaskService, ICabinOrderServices cabinOrderServices, ITacticsService tacticsService, ICabinOrderDetailServices cabinDetailServices) { _deliveryOrderServices = deliveryOrderServices; _basicService = basicService; _unitOfWorkManage = unitOfWorkManage; _inventory_BatchServices = inventory_BatchServices; _inventoryInfoService = inventoryInfoService; _deliveryOrderDetailServices = deliveryOrderDetailServices; _supplyTaskService = supplyTaskService; _cabinOrderServices = cabinOrderServices; _tacticsService = tacticsService; _cabinDetailServices = cabinDetailServices; } #region è·åERPå ¥åºå static string SearchInDate = "2025-09-10 00:00:00"; /// <summary> /// è·å䏿¸¸ç³»ç»çå ¥åºå /// </summary> /// <param name="SearchInDate"></param> /// <returns></returns> public WebResponseContent GetUpstreamOrder() { var responseContent = new WebResponseContent(); try { // 请æ±å°å var url = "http://121.37.118.63:80/GYZ2/95fck/inOrder"; //var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363009261"; if (string.IsNullOrEmpty(SearchInDate)) SearchInDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //// 请æ±åæ° var requestData = new { searchDate = SearchInDate //searchDate = "2022-10-10 20:45:16" // æ£ç¡®çæ ¼å¼ }; SearchInDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss"); // åèµ·è¯·æ± var result = HttpHelper.Post(url, requestData.ToJsonString()); // ååºåå var response = JsonConvert.DeserializeObject<UpstreamResponse<UpstreamOrderInfo>>(result); if (response.resultCode != "0") { // è°ç¨å¼å¸¸æ¥å£ SendErrorToUpstream(1, "", response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败", ""); return responseContent.Error(response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败"); } if (response.data == null || !response.data.Any()) { return responseContent.OK("æ æ°å ¥åºåæ°æ®"); } // è·åææå·²åå¨çå ¥åºåå· var existingOrderNos = _cabinOrderServices.Db.Queryable<Dt_CabinOrder>() .Select(x => x.Order_no) .Distinct().ToList(); // è¿æ»¤æå·²åå¨çå ¥åºå var newOrders = response.data .Where(order => !existingOrderNos.Contains(order.order_no)) .ToList(); if (!newOrders.Any()) { return responseContent.OK("ææå ¥åºåå·²åå¨ï¼æ éæ°å¢"); } _unitOfWorkManage.BeginTran(); try { List<Dt_CabinOrder> _CabinOrders = new List<Dt_CabinOrder>(); //åå¨å ¥åºåå· List<string> orderNos = new List<string>(); foreach (var order in newOrders) { if (order.order_type == "1") //æ£å¸¸å ¥åº { responseContent = _cabinOrderServices.CreateInboundOrder(order); List<Dt_CabinOrder>? dt_CabinOrders = responseContent.Data as List<Dt_CabinOrder>; if (dt_CabinOrders != null) _CabinOrders.AddRange(dt_CabinOrders); } else if (order.order_type == "3")//å ¥åºéæ { //å建åºåºå #region 转æ¢ä¸ºåºåºå UpstramOutOrderInfo upstramOutOrderInfo = new UpstramOutOrderInfo() { order_no = order.order_no, order_type = order.order_type, warehouse_no = order.warehouse_no, details = new List<UpstreamOutOrderDetail>() }; foreach (var item in order.details) { UpstreamOutOrderDetail detail = new UpstreamOutOrderDetail() { batch_num = item.batch_num, goods_no = item.goods_no, order_qty = item.order_qty, exp_date = item.exp_date, }; upstramOutOrderInfo.details.Add(detail); } _deliveryOrderServices.CreateOutboundOrder(upstramOutOrderInfo); #endregion } else if (order.order_type == "5")//æ¥æº¢å ¥åº { _cabinOrderServices.CreateCheckInOrder(order); } }; _cabinOrderServices.Db.InsertNav(_CabinOrders).Include(x => x.Details).ExecuteCommand(); //å¨ä¸åç»wcs //EdiIn(); //åç»ä¸æ¸¸ //妿è¿ä¸ªæ¹æ³æåäºï¼é£ä¹å°±è°ç¨CompleteOrderæ¥å£ï¼ç¶åæ¹å _unitOfWorkManage.CommitTran(); return responseContent.OK("åæ¥å ¥åºåæå"); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); SendErrorToUpstream(1, "", ex.Message, ""); return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); } } catch (Exception ex) { // å ¨å±å¼å¸¸æ¶ï¼ä¹æ¨éå¼å¸¸ç»ä¸æ¸¸ SendErrorToUpstream(1, "", ex.Message, ""); return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); } } #endregion #region è·åERPåºåºå static string SearchOutDate = "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(SearchOutDate)) SearchOutDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //// 请æ±åæ° var requestData = new { searchDate = SearchOutDate //searchDate = "2022-10-10 20:45:16" // æ£ç¡®çæ ¼å¼ }; SearchOutDate = 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 = _deliveryOrderServices.Db.Queryable<Dt_DeliveryOrder>() .Select(x => x.Out_no) .Distinct().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("ææåºåºåå·²åå¨ï¼æ éæ°å¢"); } _unitOfWorkManage.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") // æ£å¸¸åºåºå { _deliveryOrderServices.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) _cabinOrderServices.Db.InsertNav(dt_CabinOrders).Include(x => x.Details).ExecuteCommand(); #endregion } else if (outorder.order_type == "6")//æ¥æåºåº { _deliveryOrderServices.CreateCheckOutOrder(outorder); } } // æ¹éæå ¥åºåºååæç» //if (_DeliveryOrders.Any()) //{ // BaseDal.Db.InsertNav(_DeliveryOrders).Include(x => x.Details).ExecuteCommand(); //} //ä¸ååºåºåä»»å¡ç»wcs _unitOfWorkManage.CommitTran(); //var tex = CreateSupplyTask(order_no); //if (!tex) //{ // return responseContent.Error("å建ä¾åºä»»å¡å¤±è´¥"); //} return responseContent.OK($"忥åºåºåæåï¼å ±{_DeliveryOrders.Count}æ¡"); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); SendErrorToUpstream(3, "", ex.Message, ""); return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); } } catch (Exception ex) { SendErrorToUpstream(3, "", ex.Message, ""); return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); } } #endregion #region ä¸åç«åºå ¥åºå public WebResponseContent EdiIn() { try { //2.æ¥è¯¢ç¬¦åæ¡ä»¶ç订åï¼è¡¨å¤´ = æ°å»º && å 嫿ææç»ï¼ //var orders = BaseDal.Db.Queryable<Dt_CabinOrder>() // .Where(o => o.OdrderStatus == "æ°å»º") // .Includes(o => o.Details, d => d.MedicineGoods) // .ToList(); //æ¥åºå å«å ¨é¨çå ¥åºåï¼å å«å ¨é¨æç»+ä¸ä¸ªæç»å¯¹åºä¸ä¸ªåå var reslut = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); var orders = _cabinOrderServices.Db.CopyNew() .Queryable<Dt_CabinOrder>() .Where(o => o.OdrderStatus == "æ°å»º" && o.Warehouse_no == reslut) .Includes(o => o.Details, d => d.MedicineGoods) .ToList(); // 3. åè¿æ»¤æä¸ç¬¦åæ¡ä»¶çæç»ï¼åªä¿ç Status=0ï¼ foreach (var order in orders) { Console.WriteLine($"订å {order.Order_no} åæç»æ°ï¼{order.Details.Count}"); order.Details = order.Details.Where(d => d.Status == 0).ToList(); Console.WriteLine($"订å {order.Order_no} è¿æ»¤åæç»æ°ï¼{order.Details.Count}"); } if (orders == null || !orders.Any()) { Console.WriteLine("没æç¬¦åæ¡ä»¶ç订åéè¦æ¨é"); return WebResponseContent.Instance.Error("没æç¬¦åæ¡ä»¶ç订åéè¦æ¨é"); } // 4. éå订åï¼ç»è£ DTO å¹¶æ¨é foreach (var order in orders) { // ä»ç¬¬ä¸ä¸ªæ MedicineGoods çæç»ä¸ååº MaterielErpType string materialCode = order.Details .Select(d => d.MedicineGoods?.MaterielErpType) .FirstOrDefault(x => !string.IsNullOrEmpty(x)) ?? "YY"; // é»è®¤å¼YY var ediDto = new ToediInInfo { //客æ·ä»£ç customerCode = "905", //ç©æç±»å materialCode = materialCode, //å ¥åºåå· externalOrderNo = order.Order_no, //å ¥åºåç±»å inOrderType = order.Order_type == "5" ? "20" : "10", //ä¼å 级 priority = 0, //æ¯å¦åæ¶ Is_cancel = 0, details = order.Details.Select(d => new ToediInDetail { //æ¹å· batchNo = d.Batch_num, //产å productCode = d.Goods_no, //skuåç§° productName = d.MedicineGoods?.MaterielName, //skuè§æ ¼ productSpecifications = d.MedicineGoods?.MaterielSpec, //æ°é quantity = (int)d.Order_qty, //ææ validityPeriod = d.Exp_date, //ç产åå®¶ manufacturer = d.MedicineGoods?.Factory, //æ¿å· libraryNo = order.Warehouse_no, }).ToList() }; var url = "http://172.16.1.2:9357/file-admin/api/in/ediIn"; //var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363019549"; var result = HttpHelper.Post(url, ediDto.ToJsonString()); var resp = JsonConvert.DeserializeObject<TowcsResponse<object>>(result); if (resp != null && resp.code == "0") { // æ´æ°è¡¨å¤´ç¶æ _cabinOrderServices.Db.Updateable<Dt_CabinOrder>() .SetColumns(o => new Dt_CabinOrder { OdrderStatus = "å¼å§" }) .Where(o => o.Id == order.Id) .ExecuteCommand(); // æ´æ°æç»ç¶æä¸ºå·²åæ¥ //è¿éè¦æ¯å°æ°å»º--ãå¼å§ç¶æ,å¨å端æ¥å£è¿åæä»¬çæ¶åå¨è¿å已宿 _cabinDetailServices.Db.Updateable<Dt_CabinOrderDetail>() .SetColumns(d => new Dt_CabinOrderDetail { Status = 1, OrderDetailStatus = "å¼å§" }) .Where(d => d.OrderId == order.Id && d.Status == 0) .ExecuteCommand(); Console.WriteLine($"订å {order.Order_no} æ¨éæå"); } else { SendErrorToUpstream(3, order.Order_no, resp?.msg ?? "WCS æ¨é失败", ""); Console.WriteLine($"订å {order.Order_no} æ¨é失败ï¼{resp?.msg}"); return new WebResponseContent { Status = false, Message = "è®¢åæ¨é失败" }; } } return new WebResponseContent { Status = true, Message = "æ¨éæå" }; } catch (Exception ex) { Console.WriteLine("EdiIn å¼å¸¸ï¼" + ex.Message); return new WebResponseContent { Status = false, Message = ex.Message }; } } #endregion #region ä¸åç«åºåºåºå public WebResponseContent EdiOut() { var responseContent = new WebResponseContent(); try { // 1. æ¥è¯¢ç¬¦åæ¡ä»¶ç订åï¼è¡¨å¤´=æ°å»º && å 嫿ææç»ï¼ var outOrders = _deliveryOrderServices.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; } switch (order.Out_type) { case "1"://æ£å¸¸åºåº case "3"://å ¥åºéè´§ order.Out_type = "10";//ä¸è¬äº¤æåºåºå break; case "6"://çäºåºåº order.Out_type = "30";//çäºåºåºå break; } // 3. ç»è£ DTO var ediDto = new TowcsDto.ToediOutInfo { customerCode = "905", materialCode = materialCode, externalOrderNo = order.Out_no, outOrderType = order.Out_type,//20æ¯çç¹åºåºå 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") { // æ´æ°è¡¨å¤´ç¶æ _cabinDetailServices.Db.Updateable<Dt_DeliveryOrder>() .SetColumns(o => new Dt_DeliveryOrder { OutStatus = "å¼å§" }) .Where(o => o.Id == order.Id) .ExecuteCommand(); // æ´æ°æç»ç¶æ _deliveryOrderDetailServices.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); } } #endregion #region å ¥åºå®æä¸æ¥ERP /// <summary> /// å ¥åºæ¥å®ææ¥å£ /// </summary> /// <param name="order_no">å ¥åºåå·</param> //å æ£æ¥æ¯å¦æææç»é½å·²å®æï¼å¦ææ¯ï¼é£ä¹æ´æ°è¡¨å¤´ç¶æä¸ºå·²å®æ /// <returns></returns> public WebResponseContent CompleteAllOrders() { var responseContent = new WebResponseContent(); try { #region æ¥æ¾ææå·²å®æå ¥åºå var inorders = _cabinOrderServices.Repository.QueryData(x => x.OdrderStatus == "已宿").Select(x => x.Order_no).Distinct().ToList(); foreach (var inorder in inorders) { //var Orders = BaseDal.QueryData(x => x.Order_no == inorder); var Orders = _cabinOrderServices.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == inorder).Includes(x => x.Details).ToList(); if (!Orders.Where(x => x.OdrderStatus != "已宿").Any()) { _unitOfWorkManage.BeginTran(); _cabinOrderServices.Repository.DeleteAndMoveIntoHty(Orders, OperateTypeEnum.èªå¨å®æ); foreach (var item in Orders) { _cabinDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.èªå¨å®æ); } // è°ç¨ä¸æ¸¸æ¥å£ var url = "http://121.37.118.63:80/GYZ2/95fck/inOrderOk"; var result = HttpHelper.Post(url, new { order_no = inorder }.ToJsonString()); var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result); if (response.resultCode == "0") { // æäº¤äºå¡ _unitOfWorkManage.CommitTran(); } else { _unitOfWorkManage.RollbackTran(); SendErrorToUpstream(2, "", $"䏿¸¸æ¥å£è¿å失败: {response.resultMsg}", inorder); } } } #endregion return responseContent.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return responseContent.Error("æ¹éå¤ç失败ï¼" + ex.Message); } } #endregion #region åºåºå®æä¸æ¥ERP /// <summary> /// åºåºæ¥å®ææ¥å£ /// </summary> /// <param name="out_no">åºåºåå·</param> /// <returns></returns> public WebResponseContent CompleteAllOutOrders() { var responseContent = new WebResponseContent(); try { #region æ¥æ¾ææå·²å®æåºåºå var outorders = _deliveryOrderServices.Repository.QueryData(x => x.OutStatus == "已宿").Select(x => x.Out_no).Distinct().ToList(); foreach (var outorder in outorders) { var Orders = _deliveryOrderServices.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == outorder).Includes(x => x.Details).ToList(); if (!Orders.Where(x => x.OutStatus != "已宿").Any()) { _unitOfWorkManage.BeginTran(); _deliveryOrderServices.Repository.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") _unitOfWorkManage.CommitTran(); else { _unitOfWorkManage.RollbackTran(); SendErrorToUpstream(4, "", $"䏿¸¸æ¥å£è¿å失败: {response.resultMsg}", outorder); } } } #endregion return responseContent.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return responseContent.Error("æ¹éå¤ç失败ï¼" + ex.Message); } } #endregion #region æ¨éå¼å¸¸ä¸æ¥ERP /// <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/lexceptionLogog"; 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); } } #endregion } } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/CabinOrderServices.cs
@@ -41,12 +41,11 @@ private readonly IInventory_BatchServices _inventory_BatchServices; private readonly IInventoryInfoService _inventoryInfoService; private readonly ICabinOrderDetailServices _cabinOrderDetailServices; private readonly IDeliveryOrderServices _eliveryOrderServices; private readonly ISupplyTaskService _supplyTaskService; private readonly ISupplyTaskHtyService _supplyTaskHtyService; public IRepository<Dt_CabinOrder> Repository => BaseDal; public CabinOrderServices(IRepository<Dt_CabinOrder> BaseDal, IBasicService basicService, IMedicineGoodsServices medicineGoodsServices, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, ICabinOrderDetailServices cabinOrderDetailServices, ICabinOrderHtyServices cabinOrderHtyServices, ICabinOrderDetailHtyServices cabinOrderDetailHtyServices, ISupplyTaskService supplyTaskService, ISupplyTaskHtyService supplyTaskHtyService, IDeliveryOrderServices eliveryOrderServices) : base(BaseDal) public CabinOrderServices(IRepository<Dt_CabinOrder> BaseDal, IBasicService basicService, IMedicineGoodsServices medicineGoodsServices, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, ICabinOrderDetailServices cabinOrderDetailServices, ICabinOrderHtyServices cabinOrderHtyServices, ICabinOrderDetailHtyServices cabinOrderDetailHtyServices, ISupplyTaskService supplyTaskService, ISupplyTaskHtyService supplyTaskHtyService) : base(BaseDal) { _basicService = basicService; _medicineGoodsServices = medicineGoodsServices; @@ -56,7 +55,6 @@ _cabinOrderDetailServices = cabinOrderDetailServices; _supplyTaskService = supplyTaskService; _supplyTaskHtyService = supplyTaskHtyService; _eliveryOrderServices = eliveryOrderServices; } @@ -234,7 +232,7 @@ MaterielName = inventoryInfo.MaterielName, MaterielCode = inventoryInfo.MaterielCode, MaterielSpec = inventoryInfo.MaterielSpec, TaskType = TaskTypeEnum.InPick.ObjToInt(), TaskType = cabinOrder.Order_type == "1" ? TaskTypeEnum.In.ObjToInt() : TaskTypeEnum.OutReturn.ObjToInt(), CreateDate = DateTime.Now, Creater = App.User.UserName, LocationCode = location.LocationCode, @@ -289,129 +287,6 @@ } return content; } static string SearchDate = "2025-09-10 00:00:00"; /// <summary> /// è·å䏿¸¸ç³»ç»çå ¥åºå /// </summary> /// <param name="searchDate"></param> /// <returns></returns> public WebResponseContent GetUpstreamOrder() { var responseContent = new WebResponseContent(); try { // 请æ±å°å var url = "http://121.37.118.63:80/GYZ2/95fck/inOrder"; //var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363009261"; 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<UpstreamOrderInfo>>(result); if (response.resultCode != "0") { // è°ç¨å¼å¸¸æ¥å£ SendErrorToUpstream(1, "", response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败", ""); return responseContent.Error(response.resultMsg ?? "䏿¸¸æ¥å£è¿å失败"); } if (response.data == null || !response.data.Any()) { return responseContent.OK("æ æ°å ¥åºåæ°æ®"); } // è·åææå·²åå¨çå ¥åºåå· var existingOrderNos = BaseDal.Db.Queryable<Dt_CabinOrder>() .Select(x => x.Order_no) .ToList(); // è¿æ»¤æå·²åå¨çå ¥åºå var newOrders = response.data .Where(order => !existingOrderNos.Contains(order.order_no)) .ToList(); if (!newOrders.Any()) { return responseContent.OK("ææå ¥åºåå·²åå¨ï¼æ éæ°å¢"); } Db.Ado.BeginTran(); try { List<Dt_CabinOrder> _CabinOrders = new List<Dt_CabinOrder>(); //åå¨å ¥åºåå· List<string> orderNos = new List<string>(); foreach (var order in newOrders) { if (order.order_type == "1") //æ£å¸¸å ¥åº { responseContent = CreateInboundOrder(order); List<Dt_CabinOrder>? dt_CabinOrders = responseContent.Data as List<Dt_CabinOrder>; if (dt_CabinOrders != null) _CabinOrders.AddRange(dt_CabinOrders); } else if (order.order_type == "3")//å ¥åºéæ { //å建åºåºå #region 转æ¢ä¸ºåºåºå UpstramOutOrderInfo upstramOutOrderInfo = new UpstramOutOrderInfo() { order_no = order.order_no, order_type = order.order_type, warehouse_no = order.warehouse_no, details = new List<UpstreamOutOrderDetail>() }; foreach (var item in order.details) { UpstreamOutOrderDetail detail = new UpstreamOutOrderDetail() { batch_num = item.batch_num, goods_no = item.goods_no, order_qty = item.order_qty, exp_date = item.exp_date, }; upstramOutOrderInfo.details.Add(detail); } _eliveryOrderServices.CreateOutboundOrder(upstramOutOrderInfo); #endregion } else if (order.order_type == "5")//æ¥æº¢å ¥åº { } }; BaseDal.Db.InsertNav(_CabinOrders).Include(x => x.Details).ExecuteCommand(); //å¨ä¸åç»wcs //EdiIn(); //åç»ä¸æ¸¸ //妿è¿ä¸ªæ¹æ³æåäºï¼é£ä¹å°±è°ç¨CompleteOrderæ¥å£ï¼ç¶åæ¹å Db.Ado.CommitTran(); return responseContent.OK("åæ¥å ¥åºåæå"); } catch (Exception ex) { Db.Ado.RollbackTran(); SendErrorToUpstream(1, "", ex.Message, ""); return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); } } catch (Exception ex) { // å ¨å±å¼å¸¸æ¶ï¼ä¹æ¨éå¼å¸¸ç»ä¸æ¸¸ SendErrorToUpstream(1, "", ex.Message, ""); return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); } } #region åå»ºå ¥åºå /// <summary> @@ -422,9 +297,11 @@ WebResponseContent webResponseContent = new WebResponseContent(); try { string WareCodeMJ = WarehouseEnum.麻精åº.ObjToInt().ToString("000"); string WareCodeLD = WarehouseEnum.å·å»åº.ObjToInt().ToString("000"); List<Dt_CabinOrder> dt_CabinOrders = new List<Dt_CabinOrder>(); #region ç¹æ®è¯åå ¥ç¹æ®åºæ¿ if (order.warehouse_no == WarehouseEnum.麻精åº.ObjToInt().ToString("000") || order.warehouse_no == WarehouseEnum.å·å»åº.ObjToInt().ToString("000")) if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD) { var entityOrder = new Dt_CabinOrder { @@ -583,208 +460,274 @@ } #endregion /// <summary> /// ä¼ ç»wcs /// </summary> public WebResponseContent EdiIn() #region å建ççå ¥åºå public WebResponseContent CreateCheckInOrder(UpstreamOrderInfo order) { WebResponseContent content = new WebResponseContent(); try { //2.æ¥è¯¢ç¬¦åæ¡ä»¶ç订åï¼è¡¨å¤´ = æ°å»º && å 嫿ææç»ï¼ //var orders = BaseDal.Db.Queryable<Dt_CabinOrder>() // .Where(o => o.OdrderStatus == "æ°å»º") // .Includes(o => o.Details, d => d.MedicineGoods) // .ToList(); //æ¥åºå å«å ¨é¨çå ¥åºåï¼å å«å ¨é¨æç»+ä¸ä¸ªæç»å¯¹åºä¸ä¸ªåå var reslut = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); var orders = BaseDal.Db.CopyNew() .Queryable<Dt_CabinOrder>() .Where(o => o.OdrderStatus == "æ°å»º" && o.Warehouse_no == reslut) .Includes(o => o.Details, d => d.MedicineGoods) .ToList(); // 3. åè¿æ»¤æä¸ç¬¦åæ¡ä»¶çæç»ï¼åªä¿ç Status=0ï¼ foreach (var order in orders) string WareCodeMJ = WarehouseEnum.麻精åº.ObjToInt().ToString("000"); string WareCodeLD = WarehouseEnum.å·å»åº.ObjToInt().ToString("000"); #region ç¹æ®åºæ¿ if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD) { Console.WriteLine($"订å {order.Order_no} åæç»æ°ï¼{order.Details.Count}"); order.Details = order.Details.Where(d => d.Status == 0).ToList(); Console.WriteLine($"订å {order.Order_no} è¿æ»¤åæç»æ°ï¼{order.Details.Count}"); } if (orders == null || !orders.Any()) { Console.WriteLine("没æç¬¦åæ¡ä»¶ç订åéè¦æ¨é"); return WebResponseContent.Instance.Error("没æç¬¦åæ¡ä»¶ç订åéè¦æ¨é"); } // 4. éå订åï¼ç»è£ DTO å¹¶æ¨é foreach (var order in orders) { // ä»ç¬¬ä¸ä¸ªæ MedicineGoods çæç»ä¸ååº MaterielErpType string materialCode = order.Details .Select(d => d.MedicineGoods?.MaterielErpType) .FirstOrDefault(x => !string.IsNullOrEmpty(x)) ?? "YY"; // é»è®¤å¼YY var ediDto = new ToediInInfo #region åºåãåºåæ¹æ¬¡å¹³è´¦ foreach (var item in order.details) { //客æ·ä»£ç customerCode = "905", //ç©æç±»å materialCode = materialCode, //å ¥åºåå· externalOrderNo = order.Order_no, //å ¥åºåç±»å inOrderType = order.Order_type == "1" ? "10" : "20", //ä¼å 级 priority = 0, //æ¯å¦åæ¶ Is_cancel = 0, details = order.Details.Select(d => new ToediInDetail //æ¾åºåæ¹æ¬¡ä¿¡æ¯ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num); var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity); if (Qty != item.order_qty) throw new Exception($"ççå ¥åºåã{order.order_no}ãç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãçççæ°éæè¯¯"); //æ¾ææåºå List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo); foreach (var inventoryInfo in inventoryInfos) { //æ¹å· batchNo = d.Batch_num, //产å productCode = d.Goods_no, //skuåç§° productName = d.MedicineGoods?.MaterielName, //skuè§æ ¼ productSpecifications = d.MedicineGoods?.MaterielSpec, //æ°é quantity = (int)d.Order_qty, //ææ validityPeriod = d.Exp_date, //ç产åå®¶ manufacturer = d.MedicineGoods?.Factory, //æ¿å· libraryNo = order.Warehouse_no, #region æ·»å ççå ¥åºä»»å¡ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity) { 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 = order.order_no, StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity), SupplyQuantity = 0, Remark = "ççå ¥åº" }; _supplyTaskHtyService.AddData(supplyTask_Hty); } #endregion inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity; inventoryInfo.SupplyQuantity = 0; inventoryInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); } inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity; inventory_Batch.SupplyQuantity = 0; _inventoryInfoService.UpdateData(inventoryInfos); _inventory_BatchServices.UpdateData(inventory_Batch); } #endregion #region å建çç¹å var entityOrder = new Dt_CabinOrder { Order_no = order.order_no, Order_type = order.order_type, Supplier_no = order.supplier_no, Account_tiem = order.account_time, OdrderStatus = "已宿", Supplier_name = order.supplier_name, Warehouse_no = order.warehouse_no, Details = order.details.Select(d => new Dt_CabinOrderDetail { Goods_no = d.goods_no, Order_qty = Math.Abs(d.order_qty), Order_Inqty = Math.Abs(d.order_qty), Batch_num = d.batch_num, Exp_date = d.exp_date, Reservoirarea = order.warehouse_no, OrderDetailStatus = "已宿", Status = 2, }).ToList() }; var url = "http://172.16.1.2:9357/file-admin/api/in/ediIn"; //var url = "http://127.0.0.1:4523/m2/5660322-5340849-default/363019549"; var result = HttpHelper.Post(url, ediDto.ToJsonString()); var resp = JsonConvert.DeserializeObject<TowcsResponse<object>>(result); if (resp != null && resp.code == "0") { // æ´æ°è¡¨å¤´ç¶æ BaseDal.Db.Updateable<Dt_CabinOrder>() .SetColumns(o => new Dt_CabinOrder { OdrderStatus = "å¼å§" }) .Where(o => o.Id == order.Id) .ExecuteCommand(); // æ´æ°æç»ç¶æä¸ºå·²åæ¥ //è¿éè¦æ¯å°æ°å»º--ãå¼å§ç¶æ,å¨å端æ¥å£è¿åæä»¬çæ¶åå¨è¿å已宿 BaseDal.Db.Updateable<Dt_CabinOrderDetail>() .SetColumns(d => new Dt_CabinOrderDetail { Status = 1, OrderDetailStatus = "å¼å§" }) .Where(d => d.OrderId == order.Id && d.Status == 0) .ExecuteCommand(); Console.WriteLine($"订å {order.Order_no} æ¨éæå"); } else { SendErrorToUpstream(3, order.Order_no, resp?.msg ?? "WCS æ¨é失败", ""); Console.WriteLine($"订å {order.Order_no} æ¨é失败ï¼{resp?.msg}"); return new WebResponseContent { Status = false, Message = "è®¢åæ¨é失败" }; } Repository.AddData(entityOrder); #endregion } return new WebResponseContent { Status = true, Message = "æ¨éæå" }; } catch (Exception ex) { Console.WriteLine("EdiIn å¼å¸¸ï¼" + ex.Message); return new WebResponseContent { Status = false, Message = ex.Message }; } } /// <summary> /// å ¥åºæ¥å®ææ¥å£ /// </summary> /// <param name="order_no">å ¥åºåå·</param> //å æ£æ¥æ¯å¦æææç»é½å·²å®æï¼å¦ææ¯ï¼é£ä¹æ´æ°è¡¨å¤´ç¶æä¸ºå·²å®æ /// <returns></returns> public WebResponseContent CompleteAllOrders() { var responseContent = new WebResponseContent(); try { #region æ¥æ¾ææå·²å®æå ¥åºå var inorders = BaseDal.QueryData(x => x.OdrderStatus == "已宿").Select(x => x.Order_no).Distinct().ToList(); foreach (var inorder in inorders) #endregion else { //var Orders = BaseDal.QueryData(x => x.Order_no == inorder); var Orders = BaseDal.Db.Queryable<Dt_CabinOrder>().Where(x => x.Order_no == inorder).Includes(x => x.Details).ToList(); if (!Orders.Where(x => x.OdrderStatus != "已宿").Any()) string WareCodeLK = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); string WareCodeDJ = WarehouseEnum.大件åº.ObjToInt().ToString("000"); foreach (var item in order.details) { BaseDal.Db.Ado.BeginTran(); BaseDal.DeleteAndMoveIntoHty(Orders, OperateTypeEnum.èªå¨å®æ); foreach (var item in Orders) //æ¾åºåæ¹æ¬¡ä¿¡æ¯ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num); var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity); if (Qty != item.order_qty) throw new Exception($"ççå ¥åºåã{order.order_no}ãç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãçççæ°éæè¯¯"); //æ¾ææåºå List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo); //è·åç«åºçç¹å·®å¼æ° var inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First(); var LkQty = Math.Abs(inventoryLK.StockQuantity - inventoryLK.SupplyQuantity); //è·å大件åºçç¹å·®å¼æ° var inventoryDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList(); var DJQty = Math.Abs(inventoryDJ.Sum(x => x.StockQuantity) - inventoryDJ.Sum(x => x.SupplyQuantity)); if (LkQty + DJQty != Qty) throw new Exception($"ã{order.order_no}ãç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãçç©æä¿¡æ¯ä¸ç©ææ¹æ¬¡ä¿¡æ¯ççæ°éä¸ç¬¦"); if (LkQty == 0)//ç«åºæ å·®å¼ { _cabinOrderDetailServices.Repository.DeleteAndMoveIntoHty(item.Details, OperateTypeEnum.èªå¨å®æ); } // è°ç¨ä¸æ¸¸æ¥å£ var url = "http://121.37.118.63:80/GYZ2/95fck/inOrderOk"; var result = HttpHelper.Post(url, new { order_no = inorder }.ToJsonString()); var response = JsonConvert.DeserializeObject<UpstreamOrderResponse>(result); if (response.resultCode == "0") { // æäº¤äºå¡ BaseDal.Db.Ado.CommitTran(); #region åºåãåºåæ¹æ¬¡å¹³è´¦ foreach (var inventoryInfo in inventoryInfos) { #region æ·»å ççå ¥åºä»»å¡ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity) { 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 = order.order_no, StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity), SupplyQuantity = 0, Remark = "ççå ¥åº" }; _supplyTaskHtyService.AddData(supplyTask_Hty); } #endregion inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity; inventoryInfo.SupplyQuantity = 0; inventoryInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); } _inventoryInfoService.UpdateData(inventoryInfos); inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity; inventory_Batch.SupplyQuantity = 0; _inventory_BatchServices.UpdateData(inventory_Batch); #endregion #region å建大件åºçç¹å var entityOrder = new Dt_CabinOrder { Order_no = order.order_no, Order_type = order.order_type, Supplier_no = order.supplier_no, Account_tiem = order.account_time, OdrderStatus = "已宿", Supplier_name = order.supplier_name, Warehouse_no = WareCodeDJ, Details = order.details.Select(d => new Dt_CabinOrderDetail { Goods_no = d.goods_no, Order_qty = Math.Abs(d.order_qty), Order_Inqty = Math.Abs(d.order_qty), Batch_num = d.batch_num, Exp_date = d.exp_date, Reservoirarea = WareCodeDJ, OrderDetailStatus = "已宿", Status = 2, }).ToList() }; Repository.AddData(entityOrder); #endregion } else { BaseDal.Db.Ado.RollbackTran(); SendErrorToUpstream(2, "", $"䏿¸¸æ¥å£è¿å失败: {response.resultMsg}", inorder); #region 大件åºåºå平账 inventoryInfos = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList(); foreach (var inventoryInfo in inventoryInfos) { #region æ·»å ççå ¥åºä»»å¡ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity) { 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 = order.order_no, StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity), SupplyQuantity = 0, Remark = "ççå ¥åº" }; _supplyTaskHtyService.AddData(supplyTask_Hty); } #endregion inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity; inventoryInfo.SupplyQuantity = 0; inventoryInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); } _inventoryInfoService.UpdateData(inventoryInfos); #endregion #region å建大件åºçç¹å if (DJQty != 0) { var cabinOrder = new Dt_CabinOrder { Order_no = order.order_no, Order_type = order.order_type, Supplier_no = order.supplier_no, Account_tiem = order.account_time, OdrderStatus = "已宿", Supplier_name = order.supplier_name, Warehouse_no = WareCodeDJ, Details = order.details.Select(d => new Dt_CabinOrderDetail { Goods_no = d.goods_no, Order_qty = DJQty, Order_Inqty = DJQty, Batch_num = d.batch_num, Exp_date = d.exp_date, Reservoirarea = WareCodeDJ, OrderDetailStatus = "已宿", Status = 2, }).ToList() }; Repository.AddData(cabinOrder); } #endregion #region å建ç«åºçç¹å var entityOrder = new Dt_CabinOrder { Order_no = order.order_no, Order_type = order.order_type, Supplier_no = order.supplier_no, Account_tiem = order.account_time, OdrderStatus = "æ°å»º", Supplier_name = order.supplier_name, Warehouse_no = WareCodeLK, Details = order.details.Select(d => new Dt_CabinOrderDetail { Goods_no = d.goods_no, Order_qty = LkQty, Batch_num = d.batch_num, Exp_date = d.exp_date, Reservoirarea = WareCodeLK, OrderDetailStatus = "æ°å»º", Status = 0, }).ToList() }; Repository.AddData(entityOrder); #endregion } } } #endregion return responseContent.OK(); } catch (Exception ex) { BaseDal.Db.Ado.RollbackTran(); return responseContent.Error("æ¹éå¤ç失败ï¼" + ex.Message); content.Error(ex.Message); } return content; } /// <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/lexceptionLogog"; 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); } } #endregion } } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/DeliveryOrderServices.cs
@@ -34,17 +34,17 @@ { 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 ISupplyTaskHtyService _supplyTaskHtyService; 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) public DeliveryOrderServices(IRepository<Dt_DeliveryOrder> BaseDal, IBasicService basicService, IUnitOfWorkManage unitOfWorkManage, IInventory_BatchServices inventory_BatchServices, IInventoryInfoService inventoryInfoService, IDeliveryOrderDetailServices deliveryOrderDetailServices, ISupplyTaskService supplyTaskService, ICabinOrderServices cabinOrderServices, ITacticsService tacticsService, ISupplyTaskHtyService supplyTaskHtyService) : base(BaseDal) { _basicService = basicService; _unitOfWorkManage = unitOfWorkManage; @@ -54,134 +54,9 @@ _inventoryInfoService = inventoryInfoService; _cabinOrderServices = cabinOrderServices; _tacticsService = tacticsService; _supplyTaskHtyService = supplyTaskHtyService; } 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); } } #region å建åºåºå /// <summary> /// å建åºåºå /// </summary> @@ -193,7 +68,10 @@ 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 @@ -219,6 +97,7 @@ 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); @@ -226,7 +105,8 @@ 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); if (dt_InventoryInfos.Count < 1) throw new Exception($"åºåºåå·ã{entityOrder.Out_no}ãä¸ç©æç¼å·ã{item.Goods_no}ãç©ææ¹æ¬¡ã{item.Batch_num}ãçåºåå½åç¶æä¸å¯åºåº"); #region æåºåºçç¥æ¥æ¾åºå if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt()) dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList(); @@ -237,52 +117,66 @@ 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 = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.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 = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.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 { @@ -292,7 +186,7 @@ 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 @@ -303,7 +197,7 @@ 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 @@ -316,7 +210,8 @@ 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)); if (dt_InventoryInfos.Count < 1) throw new Exception($"åºåºåå·ã{outorder.order_no}ãä¸ç©æç¼å·ã{detail.goods_no}ãç©ææ¹æ¬¡ã{detail.batch_num}ãçåºåå½åç¶æä¸å¯åºåº"); #endregion #region æåºåºçç¥æ¥æ¾åºå if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt()) @@ -350,50 +245,59 @@ 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 = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.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 = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.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); @@ -403,6 +307,7 @@ #endregion else { List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); Dt_DeliveryOrderDetail orderDetail = null; Dt_DeliveryOrderDetail orderDetailLK = null; var ys = Order_qty % materielInfo.BoxQty; //ä¸è½æ´é¤ç®±è§çæ£ä»¶æ° @@ -424,11 +329,11 @@ } #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--; @@ -443,50 +348,73 @@ 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 = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.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, @@ -495,49 +423,23 @@ MaterielCode = inventoryInfo.MaterielCode, MaterielSpec = inventoryInfo.MaterielSpec, TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(), TaskType = TaskTypeEnum.OutPick.ObjToInt(), TaskType = outorder.order_type == "1" ? TaskTypeEnum.Out.ObjToInt() : TaskTypeEnum.InReturn.ObjToInt(), CreateDate = DateTime.Now, 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); } } @@ -554,221 +456,277 @@ } return webResponseContent; } /// <summary> /// çæåºåºåä»»å¡ /// </summary> /// <param name="order_no">åºåºåå·</param> /// <returns></returns> private bool CreateSupplyTask(List<string> order_no) #endregion #region å建çäºåºåºå public WebResponseContent CreateCheckOutOrder(UpstramOutOrderInfo order) { WebResponseContent content = new WebResponseContent(); try { // å è·åç¬¦åæ¡ä»¶çä¸»è¡¨æ°æ® var mainOrders = BaseDal.Db.Queryable<Dt_DeliveryOrder>() .Where(x => order_no.Contains(x.Out_no)) .ToList(); // è·åææä¸»è¡¨ID var mainOrderIds = mainOrders.Select(x => x.Id).ToList(); // ç´æ¥æ¥è¯¢åè¡¨æ°æ® List<Dt_DeliveryOrderDetail> filteredDetails = BaseDal.Db.Queryable<Dt_DeliveryOrderDetail>() .Where(d => mainOrderIds.Contains(d.DeliveryOrderId) && d.OotDetailStatus == "æ°å»º") .ToList(); // è·åææéè¦æ¥è¯¢çç©æç¼ç var materielCodes = filteredDetails.Select(x => x.Goods_no).Distinct().ToList(); // æ¹éæ¥è¯¢ç©æä¿¡æ¯ var materielList = BaseDal.Db.Queryable<Dt_MaterielInfo>() .Where(x => materielCodes.Contains(x.MaterielCode)) .ToList(); List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); foreach (var item in filteredDetails) string WareCodeMJ = WarehouseEnum.麻精åº.ObjToInt().ToString("000"); string WareCodeLD = WarehouseEnum.å·å»åº.ObjToInt().ToString("000"); #region ç¹æ®åºæ¿ if (order.warehouse_no == WareCodeMJ || order.warehouse_no == WareCodeLD) { // æ ¹æ®åè¡¨ç©æç¼ç æ¥è¯¢ç©æä¿¡æ¯ var medication = materielList.FirstOrDefault(x => x.MaterielCode == item.Goods_no); // æ¥æ¾å¯¹åºçä¸»è¡¨ä¿¡æ¯ var mainOrder = mainOrders.FirstOrDefault(x => x.Id == item.DeliveryOrderId); //éæºçæä»»å¡ç¼å·å æ¶é´æ³ if (mainOrder == null) continue; var location = Db.Queryable<Dt_InventoryInfo>() .Where(x => x.MaterielCode == ""//materielCode && x.BatchNo == ""//batchNo && x.StockQuantity > 0) .OrderBy(x => x.InDate) // æå ¥åºæ¶é´æåº .First(); var supplyTask = new Dt_SupplyTask #region åºåãåºåæ¹æ¬¡å¹³è´¦ foreach (var item in order.details) { TaskNum = GenerateTaskNumber(), PalletCode = "0", BatchNo = item.Batch_num, MaterielCode = item.Goods_no, MaterielName = medication?.MaterielName, // å¦æç©æä¿¡æ¯ä¸åå¨ï¼ä½¿ç¨å表çç©æåç§° MaterielSpec = medication?.MaterielSpec, // å¦æç©æä¿¡æ¯ä¸åå¨ï¼ä½¿ç¨å表çç©æè§æ ¼ TaskType = 0, TaskStatus = item.Status == 0 ? 0 : 1, WarehouseCode = mainOrder.Warehouse_no, LocationCode = item.Status == 0 ? "ç«åº" : "å¹³åº", StockQuantity = item.Order_qty, // å设å表æQuantityåæ®µ SupplyQuantity = 0, OrderNo = mainOrder.Out_no, Dispatchertime = DateTime.Now, Remark = "" }; supplyTasks.Add(supplyTask); } // æ¹éæå ¥ä¾åºä»»å¡ if (supplyTasks.Any()) { return BaseDal.Db.Insertable(supplyTasks).ExecuteCommand() > 0; } return false; } catch (Exception ex) { // è®°å½æ¥å¿ Console.WriteLine($"å建ä¾åºä»»å¡å¤±è´¥ï¼{ex.Message}"); return false; } } /// <summary> /// çæéæºä»»å¡ç¼å·ï¼éæºæ° + æ¶é´æ³ï¼ /// </summary> /// <returns>ä»»å¡ç¼å·</returns> private int GenerateTaskNumber() { // çæ4ä½éæºæ° Random random = new Random(Guid.NewGuid().GetHashCode()); int randomNum = random.Next(1000, 9999); // 1000-9999ä¹é´çéæºæ° // ç»åæä»»å¡ç¼å·ï¼TASK + æ¶é´æ³ + éæºæ° return randomNum; } /// <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)) //æ¾åºåæ¹æ¬¡ä¿¡æ¯ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num); var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity); if (Qty != item.order_qty) throw new Exception($"çäºåºåºåã{order.order_no}ãç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãççäºæ°éæè¯¯"); //æ¾ææåºå List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo); foreach (var inventoryInfo in inventoryInfos) { //妿æ¡ä»¶æ»¡è¶³ï¼å°ç©æä»£ç 设置为第ä¸ä¸ªæç»é¡¹å¯¹åºçè¯åç©æä»£ç 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 #region æ·»å çäºåºåºä»»å¡ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity) { 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() }; 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 = order.order_no, StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity), SupplyQuantity = 0, Remark = "çäºå ¥åº" }; _supplyTaskHtyService.AddData(supplyTask_Hty); } #endregion inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity; inventoryInfo.SupplyQuantity = 0; inventoryInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); } inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity; inventory_Batch.SupplyQuantity = 0; _inventoryInfoService.UpdateData(inventoryInfos); _inventory_BatchServices.UpdateData(inventory_Batch); } #endregion // 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") #region å建çç¹å var entityOrder = new Dt_DeliveryOrder { Out_no = order.order_no, Out_type = order.order_type, Client_no = order.client_no, Client_name = order.client_name, OutStatus = "已宿", Account_time = order.account_time, Warehouse_no = order.warehouse_no, Details = order.details.Select(d => new Dt_DeliveryOrderDetail { // æ´æ°è¡¨å¤´ç¶æ BaseDal.Db.Updateable<Dt_DeliveryOrder>() .SetColumns(o => new Dt_DeliveryOrder { OutStatus = "å¼å§" }) .Where(o => o.Id == order.Id) .ExecuteCommand(); Goods_no = d.goods_no, Order_qty = Math.Abs(d.order_qty), Order_Outqty = Math.Abs(d.order_qty), Batch_num = d.batch_num, Exp_date = d.exp_date, Reservoirarea = order.warehouse_no, OotDetailStatus = "已宿", Status = 2, }).ToList() }; Repository.AddData(entityOrder); #endregion } #endregion else { string WareCodeLK = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); string WareCodeDJ = WarehouseEnum.大件åº.ObjToInt().ToString("000"); // æ´æ°æç»ç¶æ 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} æ¨éæå"); foreach (var item in order.details) { //æ¾åºåæ¹æ¬¡ä¿¡æ¯ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.MaterielCode == item.goods_no && x.BatchNo == item.batch_num); var Qty = Math.Abs(inventory_Batch.StockQuantity - inventory_Batch.SupplyQuantity); if (Qty != item.order_qty) throw new Exception($"ççå ¥åºåã{order.order_no}ãç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãçççæ°éæè¯¯"); //æ¾ææåºå List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == inventory_Batch.MaterielCode && x.BatchNo == inventory_Batch.BatchNo); //è·åç«åºçç¹å·®å¼æ° var inventoryLK = inventoryInfos.Where(x => x.WarehouseCode == WareCodeLK).First(); var LkQty = Math.Abs(inventoryLK.StockQuantity - inventoryLK.SupplyQuantity); //è·å大件åºçç¹å·®å¼æ° var inventoryDJ = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList(); var DJQty = Math.Abs(inventoryDJ.Sum(x => x.StockQuantity) - inventoryDJ.Sum(x => x.SupplyQuantity)); if (LkQty + DJQty != Qty) throw new Exception($"ã{order.order_no}ãç©æç¼å·ã{item.goods_no}ãç©ææ¹æ¬¡ã{item.batch_num}ãçç©æä¿¡æ¯ä¸ç©ææ¹æ¬¡ä¿¡æ¯ççæ°éä¸ç¬¦"); if (LkQty == 0)//ç«åºæ å·®å¼ { #region åºåãåºåæ¹æ¬¡å¹³è´¦ foreach (var inventoryInfo in inventoryInfos) { #region æ·»å çäºåºåºä»»å¡ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity) { 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 = order.order_no, StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity), SupplyQuantity = 0, Remark = "çäºå ¥åº" }; _supplyTaskHtyService.AddData(supplyTask_Hty); } #endregion inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity; inventoryInfo.SupplyQuantity = 0; inventoryInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); } _inventoryInfoService.UpdateData(inventoryInfos); inventory_Batch.StockQuantity = inventory_Batch.SupplyQuantity; inventory_Batch.SupplyQuantity = 0; _inventory_BatchServices.UpdateData(inventory_Batch); #endregion #region å建大件åºçç¹å var entityOrder = new Dt_DeliveryOrder { Out_no = order.order_no, Out_type = order.order_type, Client_no = order.client_no, Account_time = order.account_time, OutStatus = "已宿", Client_name = order.client_name, Warehouse_no = WareCodeDJ, Details = order.details.Select(d => new Dt_DeliveryOrderDetail { Goods_no = d.goods_no, Order_qty = Math.Abs(d.order_qty), Order_Outqty = Math.Abs(d.order_qty), Batch_num = d.batch_num, Exp_date = d.exp_date, Reservoirarea = WareCodeDJ, OotDetailStatus = "已宿", Status = 2, }).ToList() }; Repository.AddData(entityOrder); #endregion } else { SendErrorToUpstream(3, order.Out_no, resp?.msg ?? "WCS æ¨é失败", ""); Console.WriteLine($"订å {order.Out_no} æ¨é失败ï¼{resp?.msg}"); #region 大件åºåºå平账 inventoryInfos = inventoryInfos.Where(x => x.WarehouseCode == WareCodeDJ).ToList(); foreach (var inventoryInfo in inventoryInfos) { #region æ·»å çäºåºåºä»»å¡ if (inventoryInfo.StockQuantity != inventoryInfo.SupplyQuantity) { 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 = order.order_no, StockQuantity = Math.Abs(inventoryInfo.StockQuantity - inventoryInfo.SupplyQuantity), SupplyQuantity = 0, Remark = "ççå ¥åº" }; _supplyTaskHtyService.AddData(supplyTask_Hty); } #endregion inventoryInfo.StockQuantity = inventoryInfo.SupplyQuantity; inventoryInfo.SupplyQuantity = 0; inventoryInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); } _inventoryInfoService.UpdateData(inventoryInfos); #endregion #region å建大件åºçç¹å if (DJQty != 0) { var cabinOrder = new Dt_DeliveryOrder { Out_no = order.order_no, Out_type = order.order_type, Client_name = order.client_name, Account_time = order.account_time, OutStatus = "已宿", Client_no = order.client_no, Warehouse_no = WareCodeDJ, Details = order.details.Select(d => new Dt_DeliveryOrderDetail { Goods_no = d.goods_no, Order_qty = DJQty, Order_Outqty = DJQty, Batch_num = d.batch_num, Exp_date = d.exp_date, Reservoirarea = WareCodeDJ, OotDetailStatus = "已宿", Status = 2, }).ToList() }; Repository.AddData(cabinOrder); } #endregion #region å建ç«åºçç¹å var entityOrder = new Dt_DeliveryOrder { Out_no = order.order_no, Out_type = order.order_type, Client_no = order.client_no, Account_time = order.account_time, OutStatus = "æ°å»º", Client_name = order.client_name, Warehouse_no = WareCodeLK, Details = order.details.Select(d => new Dt_DeliveryOrderDetail { Goods_no = d.goods_no, Order_qty = LkQty, Batch_num = d.batch_num, Exp_date = d.exp_date, Reservoirarea = WareCodeLK, OotDetailStatus = "æ°å»º", Status = 0, }).ToList() }; Repository.AddData(entityOrder); #endregion } //å é¤å ¨é¨ç¶ä¸ºå·²å®æçæç»å表头ï¼ç§»å ¥åå²è¡¨ } catch (Exception ex) { SendErrorToUpstream(3, order.Out_no, ex.Message, ""); Console.WriteLine($"订å {order.Out_no} æ¨éå¼å¸¸ï¼{ex.Message}"); } } return responseContent.OK("åºåºè®¢åæ¨é宿"); } catch (Exception ex) catch (Exception e) { Console.WriteLine("EdiOut å¼å¸¸ï¼" + ex.Message); return responseContent.Error("åºåºè®¢åæ¨é失败ï¼" + ex.Message); content.Error(e.Message); } return content; } #endregion //çç¹ æ¿æ´ä¸ªæ¹æ¬¡ä¿¡æ¯è¡¨çååæ¹å·åååç¼å·æ¥è¿è¡çç¹ @@ -836,88 +794,6 @@ } /// <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); } } /// <summary> /// æ¥è¯¢åºåºåå表 /// </summary> @@ -934,11 +810,11 @@ List<Dt_DeliveryOrder> dt_ReceiveOrders = new List<Dt_DeliveryOrder>(); if (string.IsNullOrEmpty(orderNo)) { dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.OutStatus == "æ°å»º" || x.OutStatus == "å¼å§") && x.Warehouse_no == warehouseCode && x.Out_type != "3").Includes(x => x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.OutStatus == "æ°å»º" || x.OutStatus == "å¼å§") && x.Warehouse_no == warehouseCode && x.Out_type != "20").Includes(x => x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); } else { dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.Out_no.Contains(orderNo) || x.Client_no.Contains(orderNo)) && (x.OutStatus == "æ°å»º" || x.OutStatus == "å¼å§") && x.Out_type != "3" && x.Warehouse_no == warehouseCode).OrderByDescending(x => x.CreateDate).Includes(x => x.Details).ToPageList(pageNo, 5); dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.Out_no.Contains(orderNo) || x.Client_no.Contains(orderNo)) && (x.OutStatus == "æ°å»º" || x.OutStatus == "å¼å§") && x.Out_type != "20" && x.Warehouse_no == warehouseCode).OrderByDescending(x => x.CreateDate).Includes(x => x.Details).ToPageList(pageNo, 5); } content.OK(data: dt_ReceiveOrders); @@ -963,9 +839,9 @@ WebResponseContent content = new WebResponseContent(); Dt_DeliveryOrder cabinOrder = new Dt_DeliveryOrder(); if (isPick) cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type == "3"); cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type == "20"); else cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type != "3"); cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type != "20"); //List<Dt_DeliveryOrderDetail>? cabinOrderDetails = cabinOrder.Details?.Where(x => x.Reservoirarea == pageNo.ToString()).ToList(); List<Dt_DeliveryOrderDetail>? cabinOrderDetails = cabinOrder.Details?.Where(x => x.Status == 2).ToList(); content.OK(data: cabinOrderDetails); @@ -1021,7 +897,7 @@ //_deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.èªå¨å®æ); } _deliveryOrderDetailServices.Repository.UpdateData(cabinOrderDetail); var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type != "3").Includes(x => x.Details).First(); var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type != "20").Includes(x => x.Details).First(); if (!cabinOrder1.Details.Where(x => x.OotDetailStatus != "已宿").Any()) cabinOrder.OutStatus = "已宿"; Repository.UpdateData(cabinOrder); @@ -1076,8 +952,8 @@ { materielInfo.Business_qty -= supplyTask.StockQuantity; _basicService.MaterielInfoService.Repository.UpdateData(materielInfo); if (materielInfo.Business_qty < materielInfo.MinQty) CreateAllocatInOut(materielInfo);//åå»ºè°æ¨ä»»å¡ //if (materielInfo.Business_qty < materielInfo.MinQty) // CreateAllocatInOut(materielInfo);//åå»ºè°æ¨ä»»å¡ } _unitOfWorkManage.CommitTran(); #endregion @@ -1085,121 +961,6 @@ } catch (Exception ex) { content.Error(ex.Message); } return content; } /// <summary> /// å¹³åºäººå·¥æ£æåºåºå¤çï¼å³äººå·¥æ«ç åºåºæ¶è°ç¨ï¼ /// </summary> /// <param name="saveModel"></param> /// <returns></returns> public WebResponseContent MatPicking(SaveModel saveModel) { WebResponseContent content = new WebResponseContent(); try { var LocationCode = saveModel.MainData["LocationCode"].ToString(); var orderNo = saveModel.MainData["orderNo"].ToString(); var batchNo = saveModel.MainData["batchNo"].ToString(); var Inqty = saveModel.MainData["Inqty"].ObjToInt(); var warehouseCode = saveModel.MainData["warehouseCode"].ToString(); Dt_DeliveryOrder cabinOrder = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == orderNo && x.Warehouse_no == warehouseCode && x.Out_type != "3").Includes(x => x.Details).First(); if (cabinOrder == null) return WebResponseContent.Instance.Error($"åºåºå已宿"); Dt_DeliveryOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == batchNo && x.Reservoirarea == warehouseCode).First(); if (cabinOrderDetail == null) return WebResponseContent.Instance.Error($"åºåºåæç»å·²å®æ"); Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == cabinOrderDetail.Goods_no); if (materielInfo == null) return WebResponseContent.Instance.Error($"请维æ¤ç©æç¼å·ã{cabinOrderDetail.Goods_no}ãçç©æä¿¡æ¯"); cabinOrderDetail.Order_Outqty += Inqty; if (cabinOrderDetail.Order_Outqty > cabinOrderDetail.Order_qty) return WebResponseContent.Instance.Error($"åºåºæ°éä¸å¯è¶ åºåæ®æ°é"); #region å¤çåºåºåï¼è´§ä½ï¼åºåï¼åºåæ¹æ¬¡ä¿¡æ¯ _unitOfWorkManage.BeginTran(); #region åºåºå cabinOrder.OutStatus = "å¼å§"; cabinOrderDetail.OotDetailStatus = "å¼å§"; if (cabinOrderDetail.Order_Outqty == cabinOrderDetail.Order_qty) { cabinOrderDetail.OotDetailStatus = "已宿"; _deliveryOrderDetailServices.Repository.DeleteAndMoveIntoHty(cabinOrderDetail, OperateTypeEnum.èªå¨å®æ); } else { _deliveryOrderDetailServices.Repository.UpdateData(cabinOrderDetail); } var cabinOrder1 = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == cabinOrder.Out_no && x.Out_type != "3").Includes(x => x.Details).First(); if (cabinOrder1.Details == null || cabinOrder1.Details.Count < 1) cabinOrder.OutStatus = "已宿"; Repository.UpdateData(cabinOrder); #endregion #region åºå Dt_InventoryInfo inventoryInfo = _inventoryInfoService.Repository.QueryFirst(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no && x.LocationCode == LocationCode); if (inventoryInfo == null) return WebResponseContent.Instance.Error($"æªæ¾å°è´§ä½ã{LocationCode}ãçåºåä¿¡æ¯"); inventoryInfo.StockQuantity -= Inqty; if (inventoryInfo.StockQuantity <= 0) _inventoryInfoService.DeleteData(inventoryInfo); else _inventoryInfoService.UpdateData(inventoryInfo); #endregion #region è´§ä½ var location = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode); if (location == null) return WebResponseContent.Instance.Error($"请维æ¤è´§ä½ç¼å·ã{LocationCode}ãçè´§ä½ä¿¡æ¯"); if (location.EnableStatus == EnableStatusEnum.Disable.ObjToInt()) return WebResponseContent.Instance.Error($"è´§ä½ç¼å·ã{LocationCode}ãå·²ç¦ç¨ï¼è¯·æ¢å¤æ£å¸¸å使ç¨"); Dt_InventoryInfo inventoryInfo1 = _inventoryInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode); if (inventoryInfo1 == null) { location.LocationStatus = LocationStatusEnum.Free.ObjToInt(); _basicService.LocationInfoService.UpdateData(location); } #endregion #region ä»»å¡è®°å½ Dt_SupplyTask supplyTask = new Dt_SupplyTask() { WarehouseCode = cabinOrderDetail.Reservoirarea, BatchNo = inventoryInfo.BatchNo, MaterielName = inventoryInfo.MaterielName, MaterielCode = inventoryInfo.MaterielCode, MaterielSpec = inventoryInfo.MaterielSpec, TaskStatus = SupplyStatusEnum.OutFinish.ObjToInt(), TaskType = TaskTypeEnum.OutPick.ObjToInt(), CreateDate = DateTime.Now, Creater = App.User.UserName, LocationCode = location.LocationCode, OrderNo = cabinOrder.Out_no, StockQuantity = Inqty, SupplyQuantity = 0, Remark = "åºåº" }; _supplyTaskService.AddData(supplyTask); #endregion #region åºåæ¹æ¬¡ Dt_Inventory_Batch inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode == inventoryInfo.MaterielCode); if (inventory_Batch != null) { inventory_Batch.StockQuantity -= Inqty; if (inventory_Batch.StockQuantity <= 0) _inventory_BatchServices.DeleteData(inventory_Batch); else _inventory_BatchServices.UpdateData(inventory_Batch); } #endregion _unitOfWorkManage.CommitTran(); #endregion content.OK(cabinOrderDetail.Order_Outqty.ToString()); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/InventoryServices.cs
@@ -101,7 +101,7 @@ { return new ApiResponse<Dt_InventoryInfo> { code = "500", msg = "请æ±åæ°æ æ" }; } var reslut = WarehouseEnum.ç«åº.ObjToInt().ToString("000"); // 2ï¸â£ å¼å¯äºå¡ BaseDal.Db.Ado.BeginTran(); foreach (var detail in request.details) @@ -122,136 +122,238 @@ 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.orderNo && x.Warehouse_no == reslut).Includes(x => x.Details).First(); #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 == 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) { 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 = "WCSåä¼ å建" }; BaseDal.Db.Insertable(inventoryInfo).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 { 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, 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(); 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}ãçåºåºä»»å¡"); if (supplyTask.StockQuantity != orderQty) throw new Exception($"订åå·ã{request.orderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºæ°éä¸åºåºä»»å¡æ°éä¸ç¸ç"); #endregion Dt_DeliveryOrder cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == request.orderNo && x.Warehouse_no == reslut).Includes(x => x.Details).First(); 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.orderNo && x.WarehouseCode == reslut && x.TaskStatus == SupplyStatusEnum.NewOut.ObjToInt()).First(); if (supplyTask == null) throw new Exception($"æªæ¾å°è®¢åå·ã{request.orderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºä»»å¡"); if (supplyTask.StockQuantity != orderQty) throw new Exception($"订åå·ã{request.orderNo}ãç©æç¼å·ã{detail.productCode}ãçåºåºæ°éä¸åºåºä»»å¡æ°éä¸ç¸ç"); #endregion #region å¤çåºåºåãåºåä¿¡æ¯ãåºåºä»»å¡ãè°æ¨ä»»å¡ _deliveryOrderServices.OutTaskFinish(supplyTask); #endregion #region å¤çåºåºåãåºåä¿¡æ¯ãåºåºä»»å¡ãè°æ¨ä»»å¡ _deliveryOrderServices.OutTaskFinish(supplyTask); #endregion } } break; case "3": // çç¹ @@ -272,7 +374,7 @@ { supplyTask.SupplyQuantity = supplyTask.StockQuantity; } _deliveryOrderServices.CheckTaskFinish(supplyTask); _deliveryOrderServices.CheckTaskFinish(supplyTask); } break; } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs
@@ -30,10 +30,11 @@ WebResponseContent response = new WebResponseContent(); try { string WareCode = WarehouseEnum.大件åº.ObjToInt().ToString("000"); if (materielInfo.Business_qty >= materielInfo.MinQty) return response; Dt_Tactics tactics = _tacticsService.Repository.QueryFirst(x => x.TacticeName == "åºåºçç¥"); List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>(); List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == materielInfo.MaterielCode && x.StockStatus == StockStatusEmun.å ¥åºå®æ.ObjToInt() && x.StockQuantity > x.OutboundQuantity && x.WarehouseCode == WarehouseEnum.大件åº.ObjToInt().ToString("000")); List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == materielInfo.MaterielCode && x.StockStatus == StockStatusEmun.å ¥åºå®æ.ObjToInt() && x.StockQuantity > x.OutboundQuantity && x.WarehouseCode == WareCode); if (tactics.SelectTactice == TacticsEnum.ComeOutonFirstTime.ObjToInt()) dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList(); else @@ -122,7 +123,6 @@ Reservoirarea = cabinOrder.Warehouse_no, Goods_no = item.Goods_no, Order_qty = item.Order_qty, Order_Inqty = item.Order_qty, Batch_num = item.Batch_num, OrderDetailStatus = "æ°å»º", Status = 0 н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Check.cs
@@ -44,7 +44,7 @@ Dt_DeliveryOrder deliveryOrder = new Dt_DeliveryOrder() { Out_no = item.MaterielCode + "_" + item.BatchNo, Out_type = "3", Out_type = "20", OutStatus = "æ°å»º", Warehouse_no = items.Key, Details = new List<Dt_DeliveryOrderDetail>() @@ -133,11 +133,11 @@ List<Dt_DeliveryOrder> dt_ReceiveOrders = new List<Dt_DeliveryOrder>(); if (string.IsNullOrEmpty(orderNo)) { dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.OutStatus == "æ°å»º" || x.OutStatus == "å¼å§") && x.Warehouse_no == warehouseCode && x.Out_type == "3").Includes(x => x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.OutStatus == "æ°å»º" || x.OutStatus == "å¼å§") && x.Warehouse_no == warehouseCode && x.Out_type == "20").Includes(x => x.Details).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5); } else { dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.Out_no.Contains(orderNo) || x.Client_no.Contains(orderNo)) && (x.OutStatus == "æ°å»º" || x.OutStatus == "å¼å§") && x.Out_type == "3" && x.Warehouse_no == warehouseCode).OrderByDescending(x => x.CreateDate).Includes(x => x.Details).ToPageList(pageNo, 5); dt_ReceiveOrders = Db.Queryable<Dt_DeliveryOrder>().Where(x => (x.Out_no.Contains(orderNo) || x.Client_no.Contains(orderNo)) && (x.OutStatus == "æ°å»º" || x.OutStatus == "å¼å§") && x.Out_type == "20" && x.Warehouse_no == warehouseCode).OrderByDescending(x => x.CreateDate).Includes(x => x.Details).ToPageList(pageNo, 5); } content.OK(data: dt_ReceiveOrders); @@ -218,13 +218,20 @@ try { supplyTask.TaskStatus = SupplyStatusEnum.CheckFinish.ObjToInt(); Dt_DeliveryOrder cabinOrder = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == supplyTask.OrderNo && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type == "3").Includes(x => x.Details).First(); Dt_DeliveryOrder cabinOrder = BaseDal.Db.Queryable<Dt_DeliveryOrder>().Where(x => x.Out_no == supplyTask.OrderNo && x.Warehouse_no == supplyTask.WarehouseCode && x.Out_type == "20").Includes(x => x.Details).First(); if (cabinOrder == null) return WebResponseContent.Instance.Error($"çç¹å已宿"); Dt_DeliveryOrderDetail cabinOrderDetail = cabinOrder.Details.Where(x => x.Batch_num == supplyTask.BatchNo && x.Reservoirarea == supplyTask.WarehouseCode && x.Goods_no == supplyTask.MaterielCode).First(); if (cabinOrderDetail == null) return WebResponseContent.Instance.Error($"çç¹åæç»å·²å®æ"); Dt_MaterielInfo materielInfo = _basicService.MaterielInfoService.Repository.QueryFirst(x => x.MaterielCode == cabinOrderDetail.Goods_no); if (materielInfo == null) return WebResponseContent.Instance.Error($"请维æ¤ç©æç¼å·ã{cabinOrderDetail.Goods_no}ãçç©æä¿¡æ¯"); cabinOrderDetail.Order_Outqty += supplyTask.SupplyQuantity; #region å¹³åºçç¹åªè½åºç°æ´ç®±å·®å¼ if (supplyTask.WarehouseCode == WarehouseEnum.大件åº.ObjToInt().ToString()) { var Qty = supplyTask.SupplyQuantity % materielInfo.BoxQty; if (Qty != 0) return WebResponseContent.Instance.Error($"大件åºåºå为æ´ç®±ï¼çç¹æ°éä¸è½å卿£ä»¶"); } #endregion //if (cabinOrderDetail.Order_Outqty > cabinOrderDetail.Order_qty) // return WebResponseContent.Instance.Error($"å®çæ°éä¸å¯è¶ åºè´¦é¢æ°é"); @@ -297,12 +304,13 @@ inventory_Batch.SupplyQuantity = SupplyQuantitys; _inventory_BatchServices.UpdateData(inventory_Batch); } #endregion } #endregion _unitOfWorkManage.CommitTran(); #endregion content.OK(); #endregion } catch (Exception ex) { н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/SquareCabin/CabinOrderController.cs
@@ -16,13 +16,6 @@ { } [HttpPost,Route("GetUpstreamOrder"),AllowAnonymous] public WebResponseContent GetUpstreamOrder() { return Service.GetUpstreamOrder(); } /// æ¥è¯¢åä¿¡æ¯ /// </summary> /// <returns></returns> н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/SquareCabin/DeliveryOrderController.cs
@@ -17,13 +17,6 @@ } [HttpPost,Route("GetUpstreamOutOrder"),AllowAnonymous] public WebResponseContent GetUpstreamOutOrder() { return Service.GetUpstreamOutOrder(); } /// <summary> /// å建çç¹ä»»å¡ /// </summary> н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_WMSServer/InOrderJob.cs
@@ -5,18 +5,18 @@ { public class InOrderJob : Job { private readonly ICabinOrderServices _cabinOrderServices; public InOrderJob(ICabinOrderServices cabinOrderServices) private readonly IBusiness _business; public InOrderJob(IBusiness business) { _cabinOrderServices = cabinOrderServices; _business = business; } //æ¯é1ç§æ§è¡ä¸æ¬¡ [Invoke(Begin = "2025-09-01", Interval = 1000 * 5, IsEnabled = false,SkipWhileExecuting = true)] public void Run() { _cabinOrderServices.GetUpstreamOrder(); _cabinOrderServices.EdiIn(); _cabinOrderServices.CompleteAllOrders(); _business.GetUpstreamOrder(); _business.EdiIn(); _business.CompleteAllOrders(); } } } н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_WMSServer/OutOrderJob.cs
@@ -5,20 +5,20 @@ { public class OutOrderJob : Job { private readonly IDeliveryOrderServices _deliveryOrderServices; public OutOrderJob(IDeliveryOrderServices deliveryOrderServices) private readonly IBusiness _business; public OutOrderJob(IBusiness business) { _deliveryOrderServices = deliveryOrderServices; _business = business; } //æ¯é1ç§æ§è¡ä¸æ¬¡ [Invoke(Begin = "2025-09-01", Interval = 1000 * 5, IsEnabled =true, SkipWhileExecuting = true)] [Invoke(Begin = "2025-09-01", Interval = 1000 * 5, IsEnabled = false, SkipWhileExecuting = true)] public void Run() { //è·å䏿¸¸åºåºåæ°æ® _deliveryOrderServices.GetUpstreamOutOrder(); _business.GetUpstreamOutOrder(); //ä¸åwcs //_deliveryOrderServices.EdiOut(); //_deliveryOrderServices.CompleteAllOutOrders(); _business.EdiOut(); _business.CompleteAllOutOrders(); } }