From 571289345cb09c809de244fc61065971e0e5cdee Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期二, 11 三月 2025 11:40:23 +0800 Subject: [PATCH] 送货单事务增加生成收货单逻辑 --- Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs | 373 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 324 insertions(+), 49 deletions(-) diff --git a/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs b/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs index cf6b9c1..3d4ec59 100644 --- a/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs +++ b/Tiger.Business.WMS/Transaction/Yada/Count_BIZ_U9_ASN.cs @@ -13,6 +13,13 @@ using Tiger.Business.WMS.Sharetronic.Shelf; using Tiger.Model.MES.Yada; using static IronPython.SQLite.PythonSQLite; +using static Community.CsharpSqlite.Sqlite3; +using Tiger.Model.Entitys.MES.Position; +using MailKit.Search; +using static IronPython.Modules._ast; +using Tiger.Model.Entitys.MES.U9C; +using System.Security.Policy; +using Org.BouncyCastle.Asn1.X509; namespace Tiger.Business.WMS.Transaction { @@ -33,14 +40,15 @@ #region Propertys & Variables //private List<WmsOrder<BIZ_U9_ASN>> _OrderList { get; set; } = new(); private List<string> OrderList = new(); - private BIZ_U9_ASN_SN CurSn { get; set; } - #endregion + private BIZ_U9_ASN_SN CurSn = new(); + private List<BIZ_U9_ASN_SN> ScanList = new(); + #endregion - #region Functions - /// <summary> - /// 鍒濆鍖栨竻鐐规暟鎹� - /// </summary> - private void LoadData() + #region Functions + /// <summary> + /// 鍒濆鍖栨竻鐐规暟鎹� + /// </summary> + private void LoadData() { var orders = MainDB.Queryable<BIZ_U9_ASN>().Where(q => ("," + q.RECEIVER + ",").Contains("," + UserCode + ",")).ToList(); OrderList = orders.Select(q => q.ORDER_NO).ToList(); @@ -146,7 +154,6 @@ if (inv.Items.Count == 0) { - List<WMS_ITEM_HIS> ItemHistorys = new List<WMS_ITEM_HIS>(); WMS_ITEM Item; WMS_ITEM_PKG ItemPkgs; @@ -162,8 +169,6 @@ UNIT = inv.Barcode.Unit, }; - WMS_ITEM_HIS his = new(Item, $"閫佽揣鍗�(U9)娓呯偣"); - ItemHistorys.Add(his); ItemPkgs = new() { SN = inv.Barcode.SN, @@ -187,7 +192,6 @@ } inv.Items.Add(Item); - inv.History.Add(his); inv.Packages.Add(ItemPkgs); } //闆呰揪涓嶄粠鏉$爜涓婃洿鏂版暟閲� @@ -265,34 +269,42 @@ //鎵ц娓呯偣鏁版嵁澶勭悊 CurSn.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); CurSn.QTY = CurInvItem.Items.Sum(q => q.QTY); - foreach (var item in CurInvItem.Items) - { - item.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); - item.TRANS_CODE = nameof(BIZ_U9_ASN); - item.TRANS_NO = CurSn.ORDER_NO; - item.TRANS_LINE = CurSn.LINE_NO; - item.AUTH_ORG = CurSn.AUTH_ORG; - CurInvItem.History.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{CurInvItem.SN}]娓呯偣鎴愬姛锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); - } + foreach (var item in CurInvItem.Items) + { + item.AUTH_ORG = CurSn.AUTH_ORG; + item.STATUS = WMS_ITEM.STATUSs.Counted.GetValue(); + item.SOURCE_CODE = item.TRANS_CODE; + item.SOURCE_ORDER = item.TRANS_NO; + item.SOURCE_LINE = item.TRANS_LINE; + item.TRANS_CODE = nameof(BIZ_U9_ASN); + item.TRANS_NO = CurSn.ORDER_NO; + item.TRANS_LINE = CurSn.LINE_NO; + CurInvItem.History.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{CurInvItem.SN}]娓呯偣瀹屾垚锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); + } - //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� - var _CurSn = CurSn.Clone(); + //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� + var _CurSn = CurSn.Clone(); var _Items = CurInvItem.Items.Clone(); var _Packages = CurInvItem.Packages.Clone(); var _History = CurInvItem.History.Clone(); - AddCommitAction("Counted", () => + var _ItemsExt = CurInvItem.ItemsExt.Clone(); + AddCommitAction("Counted", () => { //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 var db = GetCommitDB(); //鏁版嵁淇濆瓨閫昏緫 var t = db.Storageable(_Items, UserCode).ToStorage(); t.AsInsertable.ExecuteCommand(); - t.AsUpdateable.UpdateColumns(q => new { q.STATUS, q.TRANS_CODE, q.TRANS_NO, q.TRANS_LINE, q.AUTH_ORG, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); - db.Storageable(_Packages, UserCode).ToStorage().AsInsertable.ExecuteCommand(); + t.AsUpdateable.UpdateColumns(q => new { q.QTY, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + var p = db.Storageable(_Packages, UserCode).ToStorage(); + p.AsInsertable.ExecuteCommand(); + p.AsUpdateable.UpdateColumns(q => new { q.QTY, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); + db.Storageable(_Packages, UserCode).ToStorage().AsInsertable.ExecuteCommand(); db.Insertable(_History, UserCode).ExecuteCommand(); - db.Storageable(_CurSn, UserCode).ExecuteCommand(); + var e = db.Storageable(_ItemsExt, UserCode).ToStorage().AsInsertable.ExecuteCommand();//涓嶅瓨鍦ㄦ彃鍏� + db.Updateable<BIZ_U9_ASN>(UserCode).SetColumns(q => q.STATUS == BIZ_U9_ASN.STATUSs.Counting.GetValue()).Where(q => q.ORDER_NO == _CurSn.ORDER_NO).ExecuteCommand(); + db.Storageable(_CurSn, UserCode).ExecuteCommand(); }); - //瀹屾垚鎵�鏈夊鐞嗗悗浣跨敤浜嬪姟淇濆瓨鏁版嵁 action = DoIfFinish(action, input.Locale); @@ -301,7 +313,7 @@ { //鍙栨秷褰撳墠鎿嶄綔 ResetScan(); - //action.CatchExceptionWithLog(ex, $"鎵弿鏉$爜[{input.SN}]澶嶆牳寮傚父"); + //action.CatchExceptionWithLog(ex, $"鎵弿鏉$爜[{0}]澶嶆牳寮傚父"); action.CatchExceptionWithLog(ex, Biz.L("WMS.Default.ScanItem.ScanException", input.SN)); } return action; @@ -317,35 +329,298 @@ //淇濆瓨鏁版嵁搴� SaveCommitListToDB(); - // 杩斿洖鏁版嵁 - action.Data.Data = new DefaultInStoreOutput - { - Barcode = CurInvItem.SN, - MaterialCode = CurInvItem.ItemInfo.ITEM_CODE, - MaterialName = CurInvItem.ItemInfo.ITEM_NAME, - CurrentQty = CurInvItem.Items[0].QTY, - Unit = CurInvItem.Items[0].UNIT, - DateCode = CurInvItem.Items[0].PROD_DATE, - WarehouseCode = CurInvItem.Warehouse.WH_CODE, - RegionCode = CurInvItem.Region.REGION_CODE, - ShelfCode = CurInvItem.Shelf.SHELF_CODE, - LocationCode = CurInvItem.Location.LOCATION_CODE, - }; + if (!OrderList.Contains(CurSn.ORDER_NO)) + { + OrderList.Add(CurSn.ORDER_NO); + } + ScanList.Add(CurSn); - //action.LocaleMsg = Biz.L($"鎵弿鏉$爜[{0}]涓婃灦鍒板偍浣峓{1}]鎴愬姛"); - action.LocaleMsg = Biz.L("WMS.Default.ScanItem.PutOnSucceeded", CurInvItem.SN, CurInvItem.Location.LOCATION_CODE); + // 杩斿洖鏁版嵁 + action.Data.Data = ScanList; + + //action.LocaleMsg = Biz.L($"鏉$爜[{0}]娓呯偣鎴愬姛锛�"); + action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.CountSuccess", CurInvItem.SN); //閲嶇疆宸ュ簭 ResetScan(); return action; } - #endregion + /// <summary> + /// 鍒犻櫎褰撳墠鎵�鏈夊凡娓呯偣璁板綍 + /// </summary> + /// <returns></returns> + public async Task<ApiAction> DeleteScannedList() + { + var action = new ApiAction(); + try + { + foreach (var sn in ScanList) + { + sn.STATUS = WMS_ITEM.STATUSs.Incoming.GetValue(); + } - /// <summary> - /// 閲嶇疆褰撳墠鎿嶄綔锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉� - /// </summary> - public override void ResetScan() + var historys = new List<WMS_ITEM_HIS>(); + var items = await Biz.Db.Queryable<WMS_ITEM>().Where(q => ScanList.Select(s => s.SN).Contains(q.SN)).ToListAsync(); + foreach (var item in items) + { + var order = item.TRANS_CODE; + item.STATUS = WMS_ITEM.STATUSs.Incoming.GetValue(); + item.TRANS_CODE = item.SOURCE_CODE; + item.TRANS_NO = item.SOURCE_ORDER; + item.TRANS_LINE = item.SOURCE_LINE; + item.SOURCE_CODE = ""; + item.SOURCE_ORDER = ""; + item.SOURCE_LINE = ""; + historys.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鍙栨秷娓呯偣锛屾搷浣滃崟鎹甗{order}]")); + } + + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + var dbTran = db.UseTran(() => + { + db.Updateable(ScanList, UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommandAsync(); + db.Updateable(items, UserCode).ExecuteCommand(); + db.Insertable(historys, UserCode).ExecuteCommand(); + }); + if (dbTran.IsSuccess) + { + ScanList.Clear(); + } + else + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + } + catch (System.Exception ex) + { + //return action.CatchExceptionWithLog(ex, Biz.L("鍒犻櫎褰撳墠鎵�鏈夊凡娓呯偣璁板綍寮傚父")); + return action.CatchExceptionWithLog(ex, Biz.L("WMS.Count_BIZ_U9_ASN.DeleteScanListException")); + } + return action; + } + + /// <summary> + /// 鍒犻櫎褰撳墠鐢ㄦ埛鐨勫凡鎵崟涓褰� + /// </summary> + /// <returns></returns> + public async Task<ApiAction> DeleteScannedSn(BaseInput input) + { + var action = new ApiAction(); + try + { + var item = await Biz.Db.Queryable<WMS_ITEM>().Where(q => q.SN == input.SN).FirstAsync(); + var order = item.TRANS_CODE; + item.STATUS = WMS_ITEM.STATUSs.Incoming.GetValue(); + item.TRANS_CODE = item.SOURCE_CODE; + item.TRANS_NO = item.SOURCE_ORDER; + item.TRANS_LINE = item.SOURCE_LINE; + item.SOURCE_CODE = ""; + item.SOURCE_ORDER = ""; + item.SOURCE_LINE = ""; + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + var dbTran = db.UseTran(() => + { + db.Updateable<BIZ_U9_ASN_SN>(UserCode).SetColumns(q => q.STATUS == WMS_ITEM.STATUSs.Incoming.GetValue()) + .Where(q => q.SN == input.SN).ExecuteCommand(); + db.Updateable(item, UserCode).ExecuteCommand(); + db.Insertable(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鍙栨秷娓呯偣锛屾搷浣滃崟鎹甗{order}]"), UserCode).ExecuteCommand(); + }); + if (dbTran.IsSuccess) + { + ScanList.RemoveAll(q => q.SN == input.SN); + } + else + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + } + catch (System.Exception ex) + { + //return action.CatchExceptionWithLog(ex, Biz.L("鍒犻櫎宸叉竻鐐规潯鐮乕{0}]寮傚父")); + return action.CatchExceptionWithLog(ex, Biz.L("WMS.Count_BIZ_U9_ASN.DeleteScannedSnException", input.SN)); + } + return action; + } + + /// <summary> + /// 鑾峰彇鏈宸叉竻鐐圭殑鐗╂枡鍒楄〃锛堝甫鍒嗛〉锛� + /// </summary> + /// <returns></returns> + public async Task<PageAble<BIZ_U9_ASN_SN>> GetScannedList() + { + return await Task.FromResult(new PageAble<BIZ_U9_ASN_SN>() + { + data = ScanList, + totals = ScanList.Count(), + }); + } + + /// <summary> + /// 鑾峰彇褰撳墠鎵�鏈夊崟鎹俊鎭� + /// </summary> + /// <returns></returns> + public async Task<List<BIZ_U9_ASN>> GetOrderList() + { + var Orders = await Biz.Db.Queryable<BIZ_U9_ASN>().Where(q => OrderList.Contains(q.ORDER_NO)).IncludesAllFirstLayer().ToListAsync(); + if (!Orders.IsNullOrEmpty()) + { + foreach (var order in Orders) + { + foreach (var dtl in order.Details) + { + dtl.SnList = order.SnList.Where(q => q.LINE_NO == dtl.LINE_NO).ToList(); + dtl.QTY_COUNTED = dtl.SnList.Where(q => q.STATUS == WMS_ITEM.STATUSs.Counted.GetValue()).Sum(q => q.QTY); + } + } + } + return Orders; + } + + /// <summary> + /// 璁剧疆鏀惰揣鍗曟槑缁嗚禒鍝佹暟閲� + /// </summary> + /// <returns></returns> + public async Task<ApiAction> SetGiftQty(BaseInput input) + { + var action = new ApiAction(); + try + { + var dtl = input?.Data?.JsonToObject<BIZ_U9_ASN_DTL>(); + if ((dtl?.ID ?? "").IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L($"鎻愪氦鐨勬敹璐у崟鏄庣粏ID涓嶈兘涓虹┖"); + action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.SetGiftQty.DetailIDIsNull"); + return action; + } + + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + await db.Updateable(dtl, UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_GIFT }).ExecuteCommandAsync(); + } + catch (System.Exception ex) + { + //return action.CatchExceptionWithLog(ex, Biz.L("璁剧疆鏀惰揣鍗曟槑缁嗚禒鍝佹暟閲忎负寮傚父")); + return action.CatchExceptionWithLog(ex, Biz.L("WMS.Count_BIZ_U9_ASN.SetGiftQtyException")); + } + return action; + } + + /// <summary> + /// 鐢熸垚鏀惰揣鍗曪細璋冪敤U9鏂板鏀惰揣鍗曟帴鍙� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public async Task<ApiAction> GenerateReceipt(BaseInput input) + { + var action = new ApiAction(); + var orderNo = input.Data; + try + { + var order = await Biz.Db.Queryable<BIZ_U9_ASN>().Where(q => q.ORDER_NO == orderNo).IncludesAllFirstLayer().FirstAsync(); + if (order.IsNullOrEmpty()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L($"鎵句笉鍒伴�佽揣鍗昜{0}]鐨勫崟鎹俊鎭紝璇锋彁浜ゆ纭殑鍗曞彿"); + action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.GenerateReceipt.ASNNotExists", orderNo); + return action; + } + //楠岃瘉鏉$爜鏄惁姝g‘ + if (order.STATUS != BIZ_U9_ASN.STATUSs.Counting.GetValue()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("鐢熸垚鏀惰揣鍗曪細閫佽揣鍗曠姸鎬乕{0}]寮傚父"); + action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.GenerateReceipt.StatusException", order.STATUS.GetEnumDesc<BIZ_U9_ASN.STATUSs>()); + return action; + } + + //鏌ヨ鏄惁娓呯偣瀹屾垚 + var noFinish = order.Details.Where(q => q.QTY != order.SnList.Sum(s => s.QTY)); + if (noFinish.Any()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("娓呯偣鏁伴噺涓嶅");// Biz.L("WMS.InReceipt.ScanItem.CheckingDataToSubmit"); //$"娓呯偣鏁伴噺涓嶅"; + action.LocaleMsg = Biz.L($"閫佽揣鍗昜{0}]鏈竻鐐瑰畬鎴愶紝璇峰厛娓呯偣瀹屾垚"); + return action; + } + + var iInput = new CreateRcvBySrcASNInput + { + userId = UserCode, + IsLogin = true, + CreateRcvBySrcASNParam = new () + { + aSNToRcvTransDTOs = order.Details.Select(q => new ASNToRcvTransDTO { ASNLineKey = q.ID, TransQty = new() { m_amount1 = q.QTY + q.QTY_GIFT } }).ToList(), + } + }; + var result = await DI.Resolve<WMS_U9C>().CreateRcvBySrcASN(iInput); + if (!result.IsSuccessed) + { + action.IsSuccessed = false; + action.LocaleMsg = result.LocaleMsg; + return action; + } + + //鏍规嵁鎺ュ彛杩斿洖鏀惰揣鍗曞崟鍙锋煡璇㈠崟鎹槑缁嗭紝骞跺垱寤烘潯鐮佹槑缁� + var receipt = new BIZ_U9_RECEIPT(); + throw new NotImplementedException(); + + //鏇存柊搴撳瓨琛ㄤ俊鎭� + var items = Biz.Db.Queryable<WMS_ITEM>().Where(q => SqlFunc.Subqueryable<BIZ_U9_ASN_SN>().Where(s => s.SN == q.SN && s.ORDER_NO == order.ORDER_NO).Any()).ToList(); + var historys = new List<WMS_ITEM_HIS>(); + foreach (var item in items) + { + item.AUTH_ORG = CurSn.AUTH_ORG; + item.STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(); + item.TRANS_CODE = nameof(BIZ_U9_RECEIPT); + item.TRANS_NO = receipt.ORDER_NO; + item.TRANS_LINE = receipt.SnList.First(q => q.SN == item.SN).LINE_NO; + item.SOURCE_CODE = item.TRANS_CODE; + item.SOURCE_ORDER = item.TRANS_NO; + item.SOURCE_LINE = item.TRANS_LINE; + historys.Add(new WMS_ITEM_HIS(item, $"閫佽揣鍗昜{order.ORDER_NO}]鐨勬潯鐮乕{item.SN}]鐢熸垚鏀惰揣鍗昜{receipt.ORDER_NO}]锛屽緟妫�楠屽畬鎴愬悗鍙叆搴�")); + } + + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = GetCommitDB(); + var dbTran = db.UseTran(() => + { + db.Insertable(receipt, UserCode).ExecuteCommand(); + db.Insertable(receipt.Details, UserCode).ExecuteCommand(); + db.Insertable(receipt.SnList, UserCode).ExecuteCommand(); + }); + if (dbTran.IsSuccess) + { + //action.LocaleMsg = Biz.L($"閫佽揣鍗昜{0}]鐢熸垚鏀惰揣鍗昜{1}]鎴愬姛"); + action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.GenerateReceipt.Success", order.ORDER_NO, receipt.ORDER_NO); + } + else + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + } + catch (System.Exception ex) + { + //return action.CatchExceptionWithLog(ex, Biz.L("閫佽揣鍗昜{0}]鐢熸垚鏀惰揣鍗曞紓甯�")); + return action.CatchExceptionWithLog(ex, Biz.L("WMS.Count_BIZ_U9_ASN.GenerateReceiptException", orderNo)); + } + return action; + } + + #endregion + + /// <summary> + /// 閲嶇疆褰撳墠鎿嶄綔锛屾湁闇�瑕佸垯閲嶅啓姝ゆ柟娉� + /// </summary> + public override void ResetScan() { base.ResetScan(); Command = null; -- Gitblit v1.9.3