| | |
| | | using HslCommunication; |
| | | using MailKit.Search; |
| | | using Microsoft.Data.SqlClient; |
| | | using Microsoft.IdentityModel.Tokens; |
| | | using Newtonsoft.Json; |
| | | using System; |
| | | using System.Collections.Generic; |
| | |
| | | /// <summary> |
| | | /// è·å䏿¸¸åºåºå 0æå1失败 |
| | | /// </summary> |
| | | /// <param name="searchDate"></param> |
| | | /// <returns></returns> |
| | | //public WebResponseContent GetUpstreamOutOrder() |
| | | //{ |
| | | // var responseContent = new WebResponseContent(); |
| | | // try |
| | | // { |
| | | // // 请æ±å°å |
| | | // var url = "http://121.37.118.63:80/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))//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) |
| | | // { |
| | | // var entityOrder = new Dt_DeliveryOrder |
| | | // { |
| | | // Out_no = outorder.order_no, |
| | | // Out_type = outorder.order_type, |
| | | // Client_no = outorder.client_no, |
| | | // Client_name = outorder.client_name, |
| | | // Account_time = outorder.account_time, |
| | | // Warehouse_no=outorder.warehouse_no, |
| | | // OutStatus = "æªå®æ", |
| | | // //Details = outorder.details.Select(d => new Dt_DeliveryOrderDetail |
| | | // //{ |
| | | // // // InsertNav ä¼èªå¨è®¾ç½®å
³èåæ®µ DeliveryOrderId |
| | | // // Goods_no = d.goods_no, |
| | | // // Order_qty = d.order_qty, |
| | | // // Batch_num = d.batch_num, |
| | | // // Exp_date = d.exp_date, |
| | | // // OotDetailStatus = "æ°å»º", |
| | | // // Status = outorder.warehouse_no == "001" ? 0 : 2, //妿æ¯001æ¿é£ä¹å°ç¶æè®¾ç½®ä¸º0ï¼2为人工å¤ç |
| | | // //}).ToList() |
| | | // }; |
| | | // #region æ ¹æ®åºåºå详æ
æ¥æ¾ç©æåç§°ãæ¹æ¬¡çåºåä¿¡æ¯(Dt_InventoryInfo)ï¼æ ¹æ®å
å
¥å
åº,CreateDate |
| | | // //æ ¹æ®ç©æåç§°æ¥æ¾ç©æä¿¡æ¯ |
| | | // foreach (var item in outorder.details) |
| | | // { |
| | | // // å°ä¸æ¸¸åºåºæ°éè½¬ä¸ºæ£æ° |
| | | // item.order_qty = Math.Abs(item.order_qty); |
| | | // var medication = BaseDal.Db.Queryable<Dt_MedicineGoods>() |
| | | // .Where(m => m.Goods_no == item.goods_no) |
| | | // .First(); |
| | | |
| | | |
| | | // } |
| | | |
| | | // //æ ¹æ®ç®±è§å¤ææ¯å¦ææ£ä»¶ï¼è®¡ç®åºæ£ä»¶æ°éåæ´ä»¶æ° |
| | | |
| | | // //æ ¹æ®å
¥åºæ¶é´åç»ï¼ææ£ä»¶å°±ä¼å
åé
ç«åºæ°éï¼æ´ä»¶ä¼å
åé
å¹³åºæ°é |
| | | |
| | | |
| | | // #endregion |
| | | // _DeliveryOrders.Add(entityOrder); |
| | | |
| | | // }; |
| | | |
| | | // // ä½¿ç¨ InsertNav 䏿¬¡æ§æå
¥ä¸»è¡¨ååè¡¨æ°æ® |
| | | // BaseDal.Db.InsertNav(_DeliveryOrders).Include(x => x.Details).ExecuteCommand(); |
| | | |
| | | // // è¿éå¯ä»¥æ·»å ä¸åå° WCS çé»è¾ |
| | | // // var result = EdiOut(); // åç»ä¸æ¸¸ |
| | | |
| | | // Db.Ado.CommitTran(); |
| | | // return responseContent.OK("忥åºåºåæå"); |
| | | // } |
| | | // 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); |
| | | // } |
| | | //} |
| | | |
| | | |
| | | |
| | | /// <param name = "searchDate" ></ param > |
| | | /// < returns ></ returns > |
| | | public WebResponseContent GetUpstreamOutOrder() |
| | | { |
| | | var responseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | var url = "http://121.37.118.63:80/GYZ2/95fck/outOrder"; |
| | | |
| | | //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"; |
| | | var requestData = new |
| | | { |
| | | searchDate = "2022-10-10 20:45:16" |
| | |
| | | .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("ææåºåºåå·²åå¨ï¼æ éæ°å¢"); |
| | |
| | | try |
| | | { |
| | | List<Dt_DeliveryOrder> _DeliveryOrders = new List<Dt_DeliveryOrder>(); |
| | | List<string> orderNos = new List<string>(); |
| | | |
| | | foreach (var outorder in newOutOrders) |
| | | { |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | bool skipOrder = false; // æ è®°æ¯å¦è·³è¿è¯¥åºåºå |
| | | |
| | | // 妿è¿ä¸ªåºåºåç±»åä¸çäº1ï¼å±äºåºåºéè´§ï¼è¦å
¥è´§ä¸æ¸¸ä¼ è¿æ¥çæ°éä¸ºè´æ°ï¼ |
| | | if (outorder.order_type != "1") |
| | | { |
| | | Out_no = outorder.order_no, |
| | | Out_type = outorder.order_type, |
| | | Client_no = outorder.client_no, |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Warehouse_no = outorder.warehouse_no, |
| | | OutStatus = "æªå®æ", |
| | | Details = new List<Dt_DeliveryOrderDetail>() |
| | | }; |
| | | |
| | | // éååºåºæç» |
| | | foreach (var item in outorder.details) |
| | | { |
| | | // 1ï¸â£ è½¬ä¸ºæ£æ°ï¼ä¸æ¸¸å¯è½ä¼ è´æ°ï¼ |
| | | item.order_qty = Math.Abs(item.order_qty); |
| | | decimal orderQty = (decimal)item.order_qty; |
| | | |
| | | // 2ï¸â£ æ¥ç©æåºç¡ä¿¡æ¯ï¼è·åç®±è§ï¼ |
| | | var medication = BaseDal.Db.Queryable<Dt_MedicineGoods>() |
| | | .Where(m => m.Goods_no == item.goods_no) |
| | | .First(); |
| | | |
| | | if (medication == null) |
| | | { |
| | | SendErrorToUpstream(3, "", $"æ¾ä¸å°ç©æä¿¡æ¯ï¼{item.goods_no}", ""); |
| | | continue; |
| | | } |
| | | |
| | | decimal boxQty = medication.BoxQty <= 0 ? 1 : medication.BoxQty; |
| | | |
| | | // 3ï¸â£ è®¡ç®æ´ä»¶ä¸æ£ä»¶æ°é |
| | | var fullBoxes = (int)(orderQty / boxQty); // æ´ä»¶ç®±æ° |
| | | var partialQty = orderQty % boxQty; // æ£ä»¶æ°é |
| | | |
| | | // è¥ä¸æ¸¸ç»äºæ¹æ¬¡å·ï¼åä¼å
å¹é
|
| | | string requestedBatch = string.IsNullOrEmpty(item.batch_num) ? null : item.batch_num; |
| | | |
| | | // helper: æ¥è¯¢åºå彿°ï¼æå
¥åºæ¶é´ååºï¼ |
| | | Func<int, List<Dt_InventoryInfo>> queryInventoryByStockStatus = (stockStatus) => |
| | | { |
| | | var q = BaseDal.Db.Queryable<Dt_InventoryInfo>() |
| | | .Where(i => i.MaterielCode == item.goods_no && |
| | | (i.StockQuantity - i.OutboundQuantity) > 0 && |
| | | i.StockStatus == stockStatus); |
| | | |
| | | if (!string.IsNullOrEmpty(requestedBatch)) |
| | | q = q.Where(i => i.BatchNo == requestedBatch); |
| | | |
| | | return q.OrderBy(i => i.InDate).ToList(); |
| | | }; |
| | | |
| | | // 4ï¸â£åé
æ£ä»¶ï¼ä¼å
ç«åº Status=0ï¼ |
| | | decimal remainingPartial = partialQty; |
| | | if (remainingPartial > 0) |
| | | { |
| | | var invList_ly = queryInventoryByStockStatus(1); |
| | | foreach (var inv in invList_ly) |
| | | { |
| | | if (remainingPartial <= 0) break; |
| | | |
| | | decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity); |
| | | if (available <= 0) continue; |
| | | |
| | | decimal use = Math.Min(available, remainingPartial); |
| | | |
| | | var detail = new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = item.goods_no, |
| | | Order_qty = use, |
| | | Batch_num = inv.BatchNo, |
| | | Exp_date = inv.ValidityPeriod, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 0, //ç«åº |
| | | Reservoirarea = inv.LocationCode |
| | | }; |
| | | entityOrder.Details.Add(detail); |
| | | |
| | | inv.OutboundQuantity += use; |
| | | BaseDal.Db.Updateable(inv).ExecuteCommand(); |
| | | |
| | | remainingPartial -= use; |
| | | } |
| | | |
| | | // ç«åºä¸å¤ â å¹³åºè¡¥ (Status=2) |
| | | if (remainingPartial > 0) |
| | | { |
| | | var invList_pk = queryInventoryByStockStatus(2); |
| | | foreach (var inv in invList_pk) |
| | | { |
| | | if (remainingPartial <= 0) break; |
| | | |
| | | decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity); |
| | | if (available <= 0) continue; |
| | | |
| | | decimal use = Math.Min(available, remainingPartial); |
| | | |
| | | var detail = new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = item.goods_no, |
| | | Order_qty = use, |
| | | Batch_num = inv.BatchNo, |
| | | Exp_date = inv.ValidityPeriod, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2, //å¹³åº |
| | | Reservoirarea = inv.LocationCode |
| | | }; |
| | | entityOrder.Details.Add(detail); |
| | | |
| | | inv.OutboundQuantity += use; |
| | | BaseDal.Db.Updateable(inv).ExecuteCommand(); |
| | | |
| | | remainingPartial -= use; |
| | | } |
| | | } |
| | | |
| | | if (remainingPartial > 0) |
| | | { |
| | | SendErrorToUpstream(3, "", $"åºåºå[{outorder.order_no}]ç©æ[{item.goods_no}]æ£ä»¶åºåä¸è¶³ï¼æªåé
ï¼{remainingPartial}", ""); |
| | | } |
| | | } |
| | | |
| | | //åé
æ´ä»¶ï¼ä¼å
å¹³åº Status=2ï¼ |
| | | int remainingFullBoxes = fullBoxes; |
| | | if (remainingFullBoxes > 0) |
| | | { |
| | | var invList_pk = queryInventoryByStockStatus(2); |
| | | foreach (var inv in invList_pk) |
| | | { |
| | | if (remainingFullBoxes <= 0) break; |
| | | |
| | | decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity); |
| | | if (available < boxQty) continue; |
| | | |
| | | int canProvideBoxes = (int)(available / boxQty); |
| | | if (canProvideBoxes <= 0) continue; |
| | | |
| | | int useBoxes = Math.Min(canProvideBoxes, remainingFullBoxes); |
| | | decimal useQty = useBoxes * boxQty; |
| | | |
| | | var detail = new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = item.goods_no, |
| | | Order_qty = useQty, |
| | | Batch_num = inv.BatchNo, |
| | | Exp_date = inv.ValidityPeriod, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2, //å¹³åº |
| | | Reservoirarea = inv.LocationCode |
| | | }; |
| | | entityOrder.Details.Add(detail); |
| | | |
| | | inv.OutboundQuantity += useQty; |
| | | BaseDal.Db.Updateable(inv).ExecuteCommand(); |
| | | |
| | | remainingFullBoxes -= useBoxes; |
| | | } |
| | | |
| | | // å¹³åºä¸å¤ â ç«åºè¡¥ (Status=1) |
| | | if (remainingFullBoxes > 0) |
| | | { |
| | | var invList_ly = queryInventoryByStockStatus(1); |
| | | foreach (var inv in invList_ly) |
| | | { |
| | | if (remainingFullBoxes <= 0) break; |
| | | |
| | | decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity); |
| | | if (available < boxQty) continue; |
| | | |
| | | int canProvideBoxes = (int)(available / boxQty); |
| | | if (canProvideBoxes <= 0) continue; |
| | | |
| | | int useBoxes = Math.Min(canProvideBoxes, remainingFullBoxes); |
| | | decimal useQty = useBoxes * boxQty; |
| | | |
| | | var detail = new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = item.goods_no, |
| | | Order_qty = useQty, |
| | | Batch_num = inv.BatchNo, |
| | | Exp_date = inv.ValidityPeriod, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 0, //ç«åºï¼è¡¥æ´ç®±ï¼ |
| | | Reservoirarea = inv.LocationCode |
| | | }; |
| | | entityOrder.Details.Add(detail); |
| | | |
| | | inv.OutboundQuantity += useQty; |
| | | BaseDal.Db.Updateable(inv).ExecuteCommand(); |
| | | |
| | | remainingFullBoxes -= useBoxes; |
| | | } |
| | | } |
| | | |
| | | if (remainingFullBoxes > 0) |
| | | { |
| | | decimal unfilledQty = remainingFullBoxes * boxQty; |
| | | SendErrorToUpstream(3, "", $"åºåºå[{outorder.order_no}]ç©æ[{item.goods_no}]æ´ç®±åºåä¸è¶³ï¼æªåé
æ°éï¼{unfilledQty}", ""); |
| | | } |
| | | } |
| | | // å建åºåºéè´§å - è¿ééè¦æ ¹æ®ä¸å¡é»è¾å®ç° |
| | | // ææ¶è·³è¿æå®ç°éè´§é»è¾ |
| | | continue; |
| | | } |
| | | |
| | | _DeliveryOrders.Add(entityOrder); |
| | | } |
| | | |
| | | // æå
¥ä¸»è¡¨+æç» |
| | | BaseDal.Db.InsertNav(_DeliveryOrders) |
| | | .Include(x => x.Details) |
| | | .ExecuteCommand(); |
| | | |
| | | Db.Ado.CommitTran(); |
| | | return responseContent.OK("忥åºåºåæå"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Db.Ado.RollbackTran(); |
| | | SendErrorToUpstream(3, "", ex.Message, ""); |
| | | return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | SendErrorToUpstream(3, "", ex.Message, ""); |
| | | return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è¿æ»¤æ²¡æå¯¹ååè¿è¡ç»´æ¤çåºåºåè¿è¡è¿æ»¤ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetUpstreamOutOrder2() |
| | | { |
| | | var responseContent = new WebResponseContent(); |
| | | try |
| | | { |
| | | var url = "http://121.37.118.63:80/GYZ2/95fck/outOrder"; |
| | | |
| | | var requestData = new |
| | | { |
| | | searchDate = "2022-10-10 20:45:16" |
| | | }; |
| | | |
| | | 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(); |
| | | |
| | | if (!newOutOrders.Any()) |
| | | { |
| | | return responseContent.OK("ææåºåºåå·²åå¨ï¼æ éæ°å¢"); |
| | | } |
| | | |
| | | Db.Ado.BeginTran(); |
| | | try |
| | | { |
| | | List<Dt_DeliveryOrder> _DeliveryOrders = new List<Dt_DeliveryOrder>(); |
| | | List<string> orderNos = new(); |
| | | |
| | | foreach (var outorder in newOutOrders) |
| | | { |
| | | |
| | | bool skipOrder = false; // æ è®°æ¯å¦è·³è¿è¯¥å
¥åºå |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | else if (outorder.order_type == "1") // æ£å¸¸åºåºå |
| | | { |
| | | Out_no = outorder.order_no, |
| | | Out_type = outorder.order_type, |
| | | Client_no = outorder.client_no, |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Warehouse_no = outorder.warehouse_no, |
| | | OutStatus = "æªå®æ", |
| | | Details = new List<Dt_DeliveryOrderDetail>() |
| | | }; |
| | | |
| | | // éååºåºæç» |
| | | foreach (var item in outorder.details) |
| | | { |
| | | // 1ï¸â£ è½¬ä¸ºæ£æ°ï¼ä¸æ¸¸å¯è½ä¼ è´æ°ï¼ |
| | | item.order_qty = Math.Abs(item.order_qty); |
| | | decimal orderQty = (decimal)item.order_qty; |
| | | |
| | | // 2ï¸â£ æ¥ç©æåºç¡ä¿¡æ¯ï¼è·åç®±è§ï¼ |
| | | var medication = BaseDal.Db.Queryable<Dt_MaterielInfo>() |
| | | .Where(m => m.MaterielCode == item.goods_no) |
| | | .First(); |
| | | //å¦æç©æä¿¡æ¯ä¸åå¨ï¼è·³è¿æ´ä¸ªå
¥åºå |
| | | if (medication == null) |
| | | // æé¤ç¹æ®è¯å,ç¹æ®è¯åç´æ¥æå
¥ |
| | | if (outorder.warehouse_no != "001" && outorder.warehouse_no != "大件平åº") |
| | | { |
| | | skipOrder = true; |
| | | Console.WriteLine($"è·³è¿å
¥åºå {outorder.order_no}ï¼åå ï¼æªæ¾å°åå [{item.goods_no}] çç©æä¿¡æ¯ã"); |
| | | break; |
| | | } |
| | | |
| | | |
| | | // è¥ç©æä¸å卿 MaterielSourceType 为空ï¼åè·³è¿æ´ä¸ªåºåºå |
| | | if (medication == null || !Enum.IsDefined(typeof(MaterielSourceTypeEnum), medication.MaterielSourceType)) |
| | | { |
| | | skipOrder = true; |
| | | break; |
| | | } |
| | | |
| | | if (medication == null) |
| | | { |
| | | SendErrorToUpstream(3, "", $"æ¾ä¸å°ç©æä¿¡æ¯ï¼{item.goods_no}", ""); |
| | | continue; |
| | | } |
| | | |
| | | decimal boxQty = medication.BoxQty <= 0 ? 1 : medication.BoxQty; |
| | | |
| | | // 3ï¸â£ è®¡ç®æ´ä»¶ä¸æ£ä»¶æ°é |
| | | var fullBoxes = (int)(orderQty / boxQty); // æ´ä»¶ç®±æ° |
| | | var partialQty = orderQty % boxQty; // æ£ä»¶æ°é |
| | | |
| | | // è¥ä¸æ¸¸ç»äºæ¹æ¬¡å·ï¼åä¼å
å¹é
|
| | | string requestedBatch = string.IsNullOrEmpty(item.batch_num) ? null : item.batch_num; |
| | | |
| | | // helper: æ¥è¯¢åºå彿°ï¼æå
¥åºæ¶é´ååºï¼ |
| | | // å®ä¹ä¸ä¸ªå§æåéï¼è¾å
¥intåæ°ï¼è¿åList<Dt_InventoryInfo> |
| | | Func<int, List<Dt_InventoryInfo>> queryInventoryByStockStatus = (stockStatus) => |
| | | { |
| | | // 1. å建åºç¡æ¥è¯¢ |
| | | var q = BaseDal.Db.Queryable<Dt_InventoryInfo>() |
| | | .Where(i => i.MaterielCode == item.goods_no && // ç©æç¼å·å¹é
|
| | | (i.StockQuantity - i.OutboundQuantity) > 0 && // å¯ç¨åºå>0 |
| | | i.StockStatus == stockStatus); // åºåç¶æå¹é
|
| | | |
| | | // 2. æ¡ä»¶çéï¼å¦æææ¹æ¬¡å·è¦æ±ï¼ |
| | | if (!string.IsNullOrEmpty(requestedBatch)) |
| | | q = q.Where(i => i.BatchNo == requestedBatch); |
| | | |
| | | // 3. æ§è¡æ¥è¯¢å¹¶è¿åç»æ |
| | | return q.OrderBy(i => i.InDate).ToList(); // æå
¥åºæ¶é´æåº |
| | | }; |
| | | // 4ï¸â£åé
æ£ä»¶ï¼ä¼å
ç«åº Status=0ï¼ |
| | | decimal remainingPartial = partialQty; |
| | | if (remainingPartial > 0) |
| | | { |
| | | var invList_ly = queryInventoryByStockStatus(0); |
| | | foreach (var inv in invList_ly) |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | { |
| | | if (remainingPartial <= 0) break; |
| | | |
| | | decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity); |
| | | if (available <= 0) continue; |
| | | |
| | | decimal use = Math.Min(available, remainingPartial); |
| | | |
| | | var detail = new Dt_DeliveryOrderDetail |
| | | Out_no = outorder.order_no, |
| | | Out_type = outorder.order_type, |
| | | Client_no = outorder.client_no, |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Warehouse_no = outorder.warehouse_no, |
| | | OutStatus = "æ°å»º", |
| | | Details = outorder.details.Select(d => new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = item.goods_no, |
| | | Order_qty = use, |
| | | Batch_num = inv.BatchNo, |
| | | Exp_date = inv.ValidityPeriod, |
| | | Goods_no = d.goods_no, |
| | | Order_qty = Math.Abs(d.order_qty), // åºåºæ°éè½¬ä¸ºæ£æ° |
| | | Batch_num = d.batch_num, |
| | | Exp_date = d.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 0, //ç«åº |
| | | Reservoirarea = inv.LocationCode |
| | | }; |
| | | entityOrder.Details.Add(detail); |
| | | |
| | | inv.OutboundQuantity += use; |
| | | BaseDal.Db.Updateable(inv).ExecuteCommand(); |
| | | |
| | | remainingPartial -= use; |
| | | } |
| | | |
| | | // ç«åºä¸å¤ â å¹³åºè¡¥ (Status=2) |
| | | if (remainingPartial > 0) |
| | | { |
| | | var invList_pk = queryInventoryByStockStatus(2); |
| | | foreach (var inv in invList_pk) |
| | | { |
| | | if (remainingPartial <= 0) break; |
| | | |
| | | decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity); |
| | | if (available <= 0) continue; |
| | | |
| | | decimal use = Math.Min(available, remainingPartial); |
| | | |
| | | var detail = new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = item.goods_no, |
| | | Order_qty = use, |
| | | Batch_num = inv.BatchNo, |
| | | Exp_date = inv.ValidityPeriod, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2, //å¹³åº |
| | | Reservoirarea = inv.LocationCode |
| | | }; |
| | | entityOrder.Details.Add(detail); |
| | | |
| | | inv.OutboundQuantity += use; |
| | | BaseDal.Db.Updateable(inv).ExecuteCommand(); |
| | | |
| | | remainingPartial -= use; |
| | | } |
| | | } |
| | | |
| | | if (remainingPartial > 0) |
| | | { |
| | | SendErrorToUpstream(3, "", $"åºåºå[{outorder.order_no}]ç©æ[{item.goods_no}]æ£ä»¶åºåä¸è¶³ï¼æªåé
ï¼{remainingPartial}", ""); |
| | | } |
| | | Status = 2, // padå¹³åºï¼æ é忥 |
| | | }).ToList() |
| | | }; |
| | | _DeliveryOrders.Add(entityOrder); |
| | | } |
| | | |
| | | //åé
æ´ä»¶ï¼ä¼å
å¹³åº Status=2ï¼ |
| | | int remainingFullBoxes = fullBoxes; |
| | | if (remainingFullBoxes > 0) |
| | | else // 常è§è¯å001æ¿ç»ç«åº,è¦æ¯ææ´ç®±å°±ç»å¹³åº |
| | | { |
| | | var invList_pk = queryInventoryByStockStatus(2); |
| | | foreach (var inv in invList_pk) |
| | | var entityOrder = new Dt_DeliveryOrder |
| | | { |
| | | if (remainingFullBoxes <= 0) break; |
| | | Out_no = outorder.order_no, |
| | | Out_type = outorder.order_type, |
| | | Client_no = outorder.client_no, |
| | | Client_name = outorder.client_name, |
| | | Account_time = outorder.account_time, |
| | | Warehouse_no = outorder.warehouse_no, |
| | | OutStatus = "æ°å»º", |
| | | Details = new List<Dt_DeliveryOrderDetail>() |
| | | }; |
| | | |
| | | decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity); |
| | | if (available < boxQty) continue; |
| | | |
| | | int canProvideBoxes = (int)(available / boxQty); |
| | | if (canProvideBoxes <= 0) continue; |
| | | |
| | | int useBoxes = Math.Min(canProvideBoxes, remainingFullBoxes); |
| | | decimal useQty = useBoxes * boxQty; |
| | | |
| | | var detail = new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = item.goods_no, |
| | | Order_qty = useQty, |
| | | Batch_num = inv.BatchNo, |
| | | Exp_date = inv.ValidityPeriod, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2, //å¹³åº |
| | | Reservoirarea = inv.LocationCode |
| | | }; |
| | | entityOrder.Details.Add(detail); |
| | | |
| | | inv.OutboundQuantity += useQty; |
| | | BaseDal.Db.Updateable(inv).ExecuteCommand(); |
| | | |
| | | remainingFullBoxes -= useBoxes; |
| | | } |
| | | |
| | | // å¹³åºä¸å¤ â ç«åºè¡¥ (Status=1) |
| | | if (remainingFullBoxes > 0) |
| | | // éååºåºæç» |
| | | foreach (var item in outorder.details) |
| | | { |
| | | var invList_ly = queryInventoryByStockStatus(1); |
| | | foreach (var inv in invList_ly) |
| | | // å°ä¸æ¸¸åºåºæ°éè½¬ä¸ºæ£æ° |
| | | decimal orderQty = Math.Abs((decimal)item.order_qty); |
| | | |
| | | #region æ ¹æ®ç©æç¼ç æ¥è¯¢ç©æä¿¡æ¯ |
| | | var medication = BaseDal.Db.Queryable<Dt_MaterielInfo>() |
| | | .Where(m => m.MaterielCode == item.goods_no) |
| | | .First(); |
| | | |
| | | // å¦æç©æä¿¡æ¯ä¸åå¨ï¼è·³è¿æ´ä¸ªåºåºå |
| | | if (medication == null) |
| | | { |
| | | if (remainingFullBoxes <= 0) break; |
| | | |
| | | decimal available = (decimal)(inv.StockQuantity - inv.OutboundQuantity); |
| | | if (available < boxQty) continue; |
| | | |
| | | int canProvideBoxes = (int)(available / boxQty); |
| | | if (canProvideBoxes <= 0) continue; |
| | | |
| | | int useBoxes = Math.Min(canProvideBoxes, remainingFullBoxes); |
| | | decimal useQty = useBoxes * boxQty; |
| | | |
| | | var detail = new Dt_DeliveryOrderDetail |
| | | { |
| | | Goods_no = item.goods_no, |
| | | Order_qty = useQty, |
| | | Batch_num = inv.BatchNo, |
| | | Exp_date = inv.ValidityPeriod, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 0, //ç«åºï¼è¡¥æ´ç®±ï¼ |
| | | Reservoirarea = inv.LocationCode |
| | | }; |
| | | entityOrder.Details.Add(detail); |
| | | |
| | | inv.OutboundQuantity += useQty; |
| | | BaseDal.Db.Updateable(inv).ExecuteCommand(); |
| | | |
| | | remainingFullBoxes -= useBoxes; |
| | | skipOrder = true; |
| | | Console.WriteLine($"è·³åºå¤åºå {outorder.order_no}ï¼åå ï¼æªæ¾å°åå [{item.goods_no}] çç©æä¿¡æ¯ã"); |
| | | break; |
| | | } |
| | | |
| | | // è¥ç©æä¸å卿 MaterielSourceType 为空ï¼åè·³è¿æ´ä¸ªåºåºå |
| | | if (medication == null || !Enum.IsDefined(typeof(MaterielSourceTypeEnum), medication.MaterielSourceType)) |
| | | { |
| | | skipOrder = true; |
| | | break; |
| | | } |
| | | #endregion |
| | | |
| | | /// æ ¹æ®ç©æä¿¡æ¯å¤§å°ä»¶å±æ§åºåæ¯å¦ä»ç«åºåºåº // 大件ä»å¹³åºåºåº |
| | | if (medication.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart) // å¦æç©ææ¯å¤§ä»¶ |
| | | { |
| | | var orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = orderQty, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2 // å¹³åºï¼æ é忥 |
| | | }; |
| | | entityOrder.Details.Add(orderDetail); |
| | | } |
| | | else |
| | | { |
| | | Dt_DeliveryOrderDetail orderDetail = null; |
| | | |
| | | // è®¡ç®æ´ç®±åæ£ä»¶æ°é |
| | | var ys = orderQty % medication.BoxQty; // ä¸è½æ´é¤ç®±è§çæ£ä»¶æ° |
| | | var xs = (int)(orderQty / medication.BoxQty); // æ´ç®±æ°éï¼ä¿çæ´æ°ï¼ |
| | | |
| | | #region ä»ç«åºåºåºæ£ä»¶ |
| | | |
| | | #region 夿æ¯å¦ææ£ä»¶ |
| | | if (ys > 0 && medication.Business_qty >= ys) |
| | | { |
| | | orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = ys, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 0 // ç«åºï¼éè¦åæ¥ç»WCS |
| | | }; |
| | | medication.Business_qty -= ys; |
| | | } |
| | | else |
| | | { |
| | | // ç«åºåºåä¸è¶³ï¼æ£ä»¶ä¹ä»å¹³åºåº |
| | | orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = ys, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2 // å¹³åº |
| | | }; |
| | | } |
| | | #endregion |
| | | |
| | | #region 夿ç«åºåºåæ¯å¦è¶³å¤åºæ´ç®± |
| | | while (medication.Business_qty >= medication.BoxQty && xs > 0) |
| | | { |
| | | xs--; |
| | | if (orderDetail == null) |
| | | { |
| | | orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = medication.BoxQty, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 0 // ç«åº |
| | | }; |
| | | medication.Business_qty -= medication.BoxQty; |
| | | } |
| | | else |
| | | { |
| | | orderDetail.Order_qty += medication.BoxQty; |
| | | medication.Business_qty -= medication.BoxQty; |
| | | } |
| | | } |
| | | |
| | | if (orderDetail != null) |
| | | entityOrder.Details.Add(orderDetail); |
| | | #endregion |
| | | |
| | | #endregion |
| | | |
| | | #region å©ä½æ´ä»¶ä»å¹³åºåºåº |
| | | if (xs > 0) |
| | | { |
| | | orderDetail = new Dt_DeliveryOrderDetail() |
| | | { |
| | | Reservoirarea = outorder.warehouse_no, |
| | | Goods_no = item.goods_no, |
| | | Order_qty = medication.BoxQty * xs, |
| | | Batch_num = item.batch_num, |
| | | Exp_date = item.exp_date, |
| | | OotDetailStatus = "æ°å»º", |
| | | Status = 2 // å¹³åº |
| | | }; |
| | | entityOrder.Details.Add(orderDetail); |
| | | } |
| | | #endregion |
| | | } |
| | | |
| | | // æ´æ°ç©æä¿¡æ¯ |
| | | _basicService.MaterielInfoService.Repository.UpdateData(medication); |
| | | |
| | | } |
| | | // âå¦æè·³è¿è¯¥åï¼åç´æ¥continueï¼ä¸ä¿å |
| | | |
| | | // å¦æè·³è¿è¯¥åï¼åç´æ¥continueï¼ä¸ä¿å |
| | | if (skipOrder) |
| | | { |
| | | Console.WriteLine($"è·³è¿å
¥åºå {outorder.order_no}ï¼å 为å卿ªå®ä¹ç©æå±æ§çååã"); |
| | | Console.WriteLine($"è·³åºå¤åºå {outorder.order_no}ï¼å 为å卿ªå®ä¹ç©æå±æ§çååã"); |
| | | continue; |
| | | } |
| | | |
| | | if (remainingFullBoxes > 0) |
| | | // ç¡®ä¿åºåºåææç»ææ·»å |
| | | if (entityOrder.Details.Any()) |
| | | { |
| | | decimal unfilledQty = remainingFullBoxes * boxQty; |
| | | SendErrorToUpstream(3, "", $"åºåºå[{outorder.order_no}]ç©æ[{item.goods_no}]æ´ç®±åºåä¸è¶³ï¼æªåé
æ°éï¼{unfilledQty}", ""); |
| | | _DeliveryOrders.Add(entityOrder); |
| | | orderNos.Add(outorder.order_no); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | _DeliveryOrders.Add(entityOrder); |
| | | } |
| | | |
| | | // æå
¥ä¸»è¡¨+æç» |
| | | BaseDal.Db.InsertNav(_DeliveryOrders) |
| | | .Include(x => x.Details) |
| | | .ExecuteCommand(); |
| | | // æ¹éæå
¥åºåºååæç» |
| | | if (_DeliveryOrders.Any()) |
| | | { |
| | | BaseDal.Db.InsertNav(_DeliveryOrders).Include(x => x.Details).ExecuteCommand(); |
| | | } |
| | | |
| | | Db.Ado.CommitTran(); |
| | | return responseContent.OK("忥åºåºåæå"); |
| | | var tex= CreateSupplyTask(order_no); |
| | | if (!tex) |
| | | { |
| | | return responseContent.Error("å建ä¾åºä»»å¡å¤±è´¥"); |
| | | } |
| | | return responseContent.OK($"忥åºåºåæåï¼å
±{_DeliveryOrders.Count}æ¡"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | return responseContent.Error("åæ¥å¤±è´¥: " + ex.Message); |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// å建ä¾åºä»»å¡ |
| | | /// </summary> |
| | | /// <param name="outorder">åºåºåä¿¡æ¯</param> |
| | | /// <param name="item">åºåºæç»é¡¹</param> |
| | | /// <param name="medication">ç©æä¿¡æ¯</param> |
| | | /// <param name="quantity">任塿°é</param> |
| | | /// <param name="taskType">ä»»å¡ç±»åï¼0ï¼åºåºï¼1ï¼å
¥åºï¼2ï¼çç¹çï¼</param> |
| | | /// <param name="remark">夿³¨</param> |
| | | /// <returns>ä»»å¡å¯¹è±¡</returns> |
| | | //private bool CreateSupplyTask(List<string> order_no) |
| | | //{ |
| | | // // å
è·åç¬¦åæ¡ä»¶ç主表ID |
| | | // var mainOrderIds = BaseDal.Db.Queryable<Dt_DeliveryOrder>() |
| | | // .Where(x => order_no.Contains(x.Out_no)) |
| | | // .Select(x => x.Id) |
| | | // .ToList(); |
| | | |
| | | // // ç´æ¥æ¥è¯¢åè¡¨æ°æ® |
| | | // List<Dt_DeliveryOrderDetail> filteredDetails = BaseDal.Db.Queryable<Dt_DeliveryOrderDetail>() |
| | | // .Where(d => mainOrderIds.Contains(d.DeliveryOrderId) && d.OotDetailStatus == "æ°å»º") |
| | | // .ToList(); |
| | | |
| | | // foreach (var item in filteredDetails) |
| | | // { |
| | | // new Dt_SupplyTask |
| | | // { |
| | | // TaskNum = GetNextTaskNum(), // éè¦å®ç°è·åä¸ä¸ä¸ªä»»å¡ç¼å·çæ¹æ³ |
| | | // PalletCode = null, // æ ¹æ®ä¸å¡é»è¾è®¾ç½®æçç¼å· |
| | | // BatchNo = item.Batch_num, |
| | | // MaterielCode = item.Goods_no, |
| | | // MaterielName = medication?.MaterielName, // ä»ç©æä¿¡æ¯è·å |
| | | // MaterielSpec = medication?.MaterielSpec, // ä»ç©æä¿¡æ¯è·å |
| | | // TaskType = 0, // 0-åºåºä»»å¡ |
| | | // TaskStatus = item.Status ==0 ? 0:1, // 0-æ°å»º |
| | | // WarehouseCode = outorder.warehouse_no, |
| | | // LocationCode = "ç«åº", // ç«åºä»»å¡çè´§ä½ç¼å·åºå®ä¸º"ç«åº" |
| | | // StockQuantity = quantity, |
| | | // SupplyQuantity = 0, // åå§çç¹æ°ä¸º0 |
| | | // OrderNo = outorder.order_no, // å
³èåºåºåå· |
| | | // Dispatchertime = DateTime.Now, |
| | | // Remark = remark |
| | | // }; |
| | | // } |
| | | |
| | | //} |
| | | |
| | | private bool CreateSupplyTask(List<string> order_no) |
| | | { |
| | | 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) |
| | | { |
| | | // æ ¹æ®åè¡¨ç©æç¼ç æ¥è¯¢ç©æä¿¡æ¯ |
| | | var medication = materielList.FirstOrDefault(x => x.MaterielCode == item.Goods_no); |
| | | |
| | | // æ¥æ¾å¯¹åºçä¸»è¡¨ä¿¡æ¯ |
| | | var mainOrder = mainOrders.FirstOrDefault(x => x.Id == item.DeliveryOrderId); |
| | | //éæºçæä»»å¡ç¼å·å æ¶é´æ³ |
| | | |
| | | |
| | | if (mainOrder == null) continue; |
| | | |
| | | var supplyTask = new Dt_SupplyTask |
| | | { |
| | | 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> |
| | | /// å建ä¾åºä»»å¡ |
| | | /// </summary> |
| | | /// <param name="outorder">åºåºåä¿¡æ¯</param> |
| | | /// <param name="item">åºåºæç»é¡¹</param> |
| | | /// <param name="medication">ç©æä¿¡æ¯</param> |
| | | /// <param name="quantity">任塿°é</param> |
| | | /// <param name="taskType">ä»»å¡ç±»åï¼0ï¼åºåºï¼1ï¼å
¥åºï¼2ï¼çç¹çï¼</param> |
| | | /// <param name="remark">夿³¨</param> |
| | | /// <returns>ä»»å¡å¯¹è±¡</returns> |
| | | //private Dt_SupplyTask CreateSupplyTask(UpstramOutOrderInfo outorder, dynamic item, Dt_MaterielInfo medication, decimal quantity, int taskType, string remark) |
| | | //{ |
| | | // return new Dt_SupplyTask |
| | | // { |
| | | // TaskNum = GetNextTaskNum(), // éè¦å®ç°è·åä¸ä¸ä¸ªä»»å¡ç¼å·çæ¹æ³ |
| | | // PalletCode = null, // æ ¹æ®ä¸å¡é»è¾è®¾ç½®æçç¼å· |
| | | // BatchNo = item.batch_num, |
| | | // MaterielCode = item.goods_no, |
| | | // MaterielName = medication?.MaterielName, // ä»ç©æä¿¡æ¯è·å |
| | | // MaterielSpec = medication?.MaterielSpec, // ä»ç©æä¿¡æ¯è·å |
| | | // TaskType = taskType, // 0-åºåºä»»å¡ |
| | | // TaskStatus = 0, // 0-æ°å»º |
| | | // WarehouseCode = outorder.warehouse_no, |
| | | // LocationCode = "ç«åº", // ç«åºä»»å¡çè´§ä½ç¼å·åºå®ä¸º"ç«åº" |
| | | // StockQuantity = quantity, |
| | | // SupplyQuantity = 0, // åå§çç¹æ°ä¸º0 |
| | | // OrderNo = outorder.order_no, // å
³èåºåºåå· |
| | | // Dispatchertime = DateTime.Now, |
| | | // Remark = remark |
| | | // }; |
| | | //} |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// è·åä¸ä¸ä¸ªä»»å¡ç¼å· |
| | | /// </summary> |
| | | /// <returns>ä»»å¡ç¼å·</returns> |
| | | private int GetNextTaskNum() |
| | | { |
| | | // è¿ééè¦æ ¹æ®æ¨çåºåçæé»è¾æ¥å®ç° |
| | | // åè®¾ä½¿ç¨æ°æ®åºåºå |
| | | return BaseDal.Db.Ado.GetInt("SELECT NEXT VALUE FOR SeqTaskNum"); |
| | | // æè
妿æ¯èªå¢IDï¼å¯ä»¥æå
¥åè·å |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// åºåºåæ¨éç» WCS |
| | |
| | | }; |
| | | |
| | | // 4. è°ç¨æ¥å£ |
| | | var url = "http://172.16.1.2:9357/file-admin/api/out/ediOut"; |
| | | //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); |
| | | |
| | |
| | | .SetColumns(d => new Dt_DeliveryOrderDetail { Status = 1, OotDetailStatus = "已宿" }) |
| | | .Where(d => d.DeliveryOrderId == order.Id && d.Status == 0) |
| | | .ExecuteCommand(); |
| | | |
| | | Console.WriteLine($"订å {order.Out_no} æ¨éæå"); |
| | | } |
| | | else |
| | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// æ¥è¯¢åºåºåå表 |
| | | /// </summary> |
| | | /// <param name="saveModel"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetDeliveryOrders(SaveModel saveModel) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ¥è¯¢åºåº/çç¹å详æ
|
| | | /// æ¥è¯¢åºåº/çç¹å详æ
çåºåºåæç»ã |
| | | /// </summary> |
| | | /// <param name="pageNo"></param> |
| | | /// <param name="orderNo"></param> |
| | |
| | | cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type == "3"); |
| | | else |
| | | cabinOrder = Db.Queryable<Dt_DeliveryOrder>().Includes(x => x.Details).First(x => x.Out_no == orderNo && x.Out_type != "3"); |
| | | List<Dt_DeliveryOrderDetail>? cabinOrderDetails = cabinOrder.Details?.Where(x => x.Reservoirarea == pageNo.ToString()).ToList(); |
| | | content.OK(data: cabinOrderDetails); |
| | | //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); |
| | | return content; |
| | | } |
| | | |
| | | public WebResponseContent OutFinish(SaveModel saveModel) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | |
| | | return content; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// å¹³åºäººå·¥æ£æåºåºå¤çï¼å³äººå·¥æ«ç åºåºæ¶è°ç¨ï¼ |
| | | /// </summary> |
| | | /// <param name="saveModel"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent MatPicking(SaveModel saveModel) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |