From beca28ecb3a730ffb33c21e0c55c729774725faf Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期五, 25 四月 2025 16:51:28 +0800 Subject: [PATCH] 优化备料单发料逻辑 --- Tiger.Api/Language.db | 0 Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_HIS.cs | 2 Tiger.Model.Net/Entitys/WMS/V_ITEM_BIZ_ERP_RECEIPT_SN.cs | 2 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_DTL.cs | 8 Tiger.Business.WMS/Extensions/Yada/OutExtension.cs | 282 ++++++++++++-- Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_Y.cs | 2 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_BTH.cs | 213 +++++----- Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs | 42 - Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM.cs | 2 Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs | 43 ++ Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs | 7 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs | 80 ++- Tiger.Model.Net/Entitys/WMS/WMS_ITEM.cs | 7 Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs | 180 ++++---- Tiger.Model.Net/Entitys/WMS/WMS_ITEM_HIS.cs | 2 Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_X.cs | 2 Tiger.Business.WMS/Common/Preparation.cs | 29 - Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_D.cs | 2 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs | 2 Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_A.cs | 2 Tiger.Business.WMS/Common/WmsTask.cs | 137 ++---- Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs | 46 ++ 22 files changed, 683 insertions(+), 409 deletions(-) diff --git a/Tiger.Api/Language.db b/Tiger.Api/Language.db index 7b31385..0a86bb1 100644 --- a/Tiger.Api/Language.db +++ b/Tiger.Api/Language.db Binary files differ diff --git a/Tiger.Business.WMS/Common/Preparation.cs b/Tiger.Business.WMS/Common/Preparation.cs index 9862cc5..f942fbc 100644 --- a/Tiger.Business.WMS/Common/Preparation.cs +++ b/Tiger.Business.WMS/Common/Preparation.cs @@ -1,21 +1,18 @@ -锘縰sing MailKit.Search; -using Rhea.Common; +锘縰sing Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; -using System.Threading.Tasks; using Tiger.Business.WMS.Extensions; -using Tiger.Business.WMS.Transaction; using Tiger.IBusiness; using Tiger.Model; -using Tiger.Model.Entitys.MES.Position; using Tiger.Model.Extensions; namespace Tiger.Business.WMS.Common { + /// <summary> /// 澶囨枡浠诲姟鍗曟嵁 /// </summary> @@ -30,11 +27,13 @@ #region Propertys & Variables private static object AddOrderLock { get; } = new object(); + private static object AddBatchLock { get; } = new object(); public DbClient MainDB { get; set; } public string UserCode { get; set; } public string OrgCode { get; set; } public BIZ_WMS_PREP Order { get; set; } public BIZ_WMS_PREP.BIZ_TYPEs BizType => Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>(); + public SuggestOption Option { get; set; } #endregion Propertys & Variables #region Functions @@ -120,7 +119,6 @@ Order.SourceOrders = Order.SourceOrders ?? new(); Order.SourceDetails = Order.SourceDetails ?? new(); Order.Details = Order.Details ?? new(); - Order.Batchs = Order.Batchs ?? new(); Order.SnList = Order.SnList ?? new(); var srcOrder = new BIZ_WMS_PREP_SRC() { @@ -172,23 +170,7 @@ var srcInfo = Order.SourceOrders.Select(q => new { q.SOURCE_CODE, q.SOURCE_ORDER }).DistinctBy(q => q.SOURCE_ORDER).OrderBy(q => q.SOURCE_ORDER); Order.SOURCE_CODE = string.Join(",", srcInfo.Select(q => q.SOURCE_CODE)); Order.SOURCE_ORDER = string.Join(",", srcInfo.Select(q => q.SOURCE_ORDER)); - if (Order.CurBatch.IsNullOrEmpty()) - { - var bacth = new BIZ_WMS_PREP_BTH() - { - AUTH_ORG = OrgCode, - ORDER_NO = Order.ORDER_NO, - BATCH = Order.Batchs.Max(q => q.BATCH) + 1, - PREP_MODE = BIZ_WMS_PREP_BTH.PREP_MODEs.Whole.GetValue(), - DLVY_MODE = BIZ_WMS_PREP_BTH.DLVY_MODEs.Supply.GetValue(), - STATUS = BIZ_WMS_PREP_BTH.STATUSs.WaitPick.GetValue(), - CALL_TIME = DateTime.Now, - PRIORITY = 4, - }; - bacth.PLAN_TIME = bacth.CALL_TIME.AddHours(1); - Order.Batchs.Add(bacth); - } - + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 var db = Biz.Db; var dbTran = db.UseTran(() => @@ -201,7 +183,6 @@ var d = db.Storageable(Order.Details, UserCode).WhereColumns(t => new { t.ORDER_NO, t.ITEM_CODE, t.GHOST_ROW }).ToStorage(); d.AsInsertable.ExecuteCommand(); d.AsUpdateable.IgnoreColumns(q => q.ID).UpdateColumns(q => new { q.QTY_REQ, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); - db.Storageable(Order.Batchs, UserCode).WhereColumns(t => new { t.ORDER_NO, t.BATCH, t.GHOST_ROW }).ToStorage().AsInsertable.ExecuteCommand(); }); if (dbTran.IsSuccess) { diff --git a/Tiger.Business.WMS/Common/WmsTask.cs b/Tiger.Business.WMS/Common/WmsTask.cs index ea0da0c..518fb91 100644 --- a/Tiger.Business.WMS/Common/WmsTask.cs +++ b/Tiger.Business.WMS/Common/WmsTask.cs @@ -1,4 +1,5 @@ -锘縰sing Rhea.Common; +锘縰sing Microsoft.Extensions.Options; +using Rhea.Common; using SqlSugar; using System; using System.Collections.Generic; @@ -323,28 +324,25 @@ /// </summary> /// <param name="order">棰嗘枡鍗曞彿</param> /// <param name="itemCode">鐗╂枡缂栫爜</param> - /// <param name="erpWH">鐗╂枡鐨凟RP搴撲綅</param> - /// <param name="whID">鐗╂枡鎵�鍦ㄧ殑浠撳簱缂栫爜</param> - /// <param name="regionID">鐗╂枡鎵�鍦ㄧ殑鍌ㄥ尯缂栫爜</param> - /// <param name="shelfID">鐗╂枡鎵�鍦ㄧ殑璐ф灦缂栫爜</param> - /// <param name="option">鎺堟潈鏌ヨ閫夐」</param> + /// <param name="option">澶囨枡鐗╂枡鎺ㄨ崘閫夐」</param> + /// <param name="auth">鎺堟潈鏌ヨ閫夐」</param> /// <param name="returnCount">杩斿洖鐨勬渶灏忓寘瑁呯墿鏂欎釜鏁帮紝榛樿杩斿洖1涓�</param> /// <returns></returns> - public Result<List<SuggestItem>> Suggest(string order, string itemCode, string erpWH, string whID, string regionID, string shelfID, AuthOption option, int returnCount = 1) + public Result<List<SuggestItem>> Suggest(string order, string itemCode, SuggestOption option, AuthOption auth, int returnCount = 1) { var result = new Result<List<SuggestItem>>(Result.Flags.Success, new List<SuggestItem>()) { LocaleMsg = new("WMS.WmsItem.Suggest.Success") }; try { - var items = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( + var query = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( JoinType.Left, q.SN == p.SN, JoinType.Left, q.WH_ID == w.ID, JoinType.Left, q.REGION_ID == r.ID, JoinType.Left, q.SHELF_ID == s.ID, JoinType.Left, q.LOCATION_ID == l.ID)) //妫�鏌ョ敤鎴锋潈闄� - .ByAuth(option) - //鍏佽浣跨敤宸茬粡鍒嗛厤鍒板簱瀛樻睜涓殑鐗╂枡 - .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order)) + .ByAuth(auth) + //鍏佽浣跨敤宸茬粡鍒嗛厤鍒板簱瀛樻睜涓悓涓�涓崟鎹殑鐗╂枡 + .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.TRANS_NO == order) || p.IS_LOCKED == "N") //鍙厑璁告湭閿佸畾鐨� .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N") //鍙厑璁哥墿鏂欑姸鎬佹槸鍦ㄥ簱鐨� @@ -352,30 +350,32 @@ //濡傛灉鏈変紶鍏ユ枡鍙凤紝鍒欏彧鍏佽鏂欏彿鐨勭墿鏂� .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode) //濡傛灉鏈変紶鍏ュ簱浣嶏紝鍒欏彧鍏佽搴撲綅涓殑鐗╂枡 - .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg) + .WhereIF(!option.ErpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == option.ErpWH && q.AUTH_ORG == auth.CurOrg) //濡傛灉鏈変紶鍏ヤ粨搴擄紝鍒欏彧鍏佽浠撳簱鐨勭墿鏂� - .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg) + .WhereIF(!option.WHID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == option.WHID && q.AUTH_ORG == auth.CurOrg) //濡傛灉鏈変紶鍏ュ偍鍖猴紝鍒欏彧鍏佽鍌ㄥ尯鐨勭墿鏂� - .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg) + .WhereIF(!option.RegionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == option.RegionID && q.AUTH_ORG == auth.CurOrg) //濡傛灉鏈変紶鍏ヨ揣鏋讹紝鍒欏彧鍏佽璐ф灦鐨勭墿鏂� - .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg) + .WhereIF(!option.ShelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == option.ShelfID && q.AUTH_ORG == auth.CurOrg) //浼樺厛浣跨敤搴撳瓨姹犱腑鐨勭墿鏂� .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID)) //浼樺厛浣跨敤灏炬暟鐗╂枡(鎴枡鎴栬�呴��鏂欎箣鍚庣殑鐗╂枡) - .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) - //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛屾渶鍚庢寜鏉$爜鎺掑簭 - .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN) - .Select((q, p, w, r, s, l) => new SuggestItem - { - Item = q, - poolItem = null, - Warehouse = w, - Region = r, - Shelf = s, - Location = l, - }) - //妫�鏌ョ敤鎴锋潈闄� - .Take(returnCount).ToList(); + //.OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) + //澶囨枡绛栫暐锛氭寜鐢熶骇鏃ユ湡鍏堣繘鍏堝嚭 + .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FIFO), (q, p, w, r, s, l) => q.PROD_DATE) + //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛� + .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FSFO), q => q.QTY) + //鏈�鍚庢寜鏉$爜鎺掑簭 + .OrderBy(q => q.SN); + var items = query.Select((q, p, w, r, s, l) => new SuggestItem + { + Item = q, + poolItem = null, + Warehouse = w, + Region = r, + Shelf = s, + Location = l, + }).Take(returnCount).ToList(); //foreach (var item in items) //{ // var inv = Get(item.SN, option, false); @@ -410,34 +410,25 @@ /// </summary> /// <param name="order">棰嗘枡鍗曞彿</param> /// <param name="itemCode">鐗╂枡缂栫爜</param> - /// <param name="erpWH">鐗╂枡鐨凟RP搴撲綅</param> - /// <param name="whID">鐗╂枡鎵�鍦ㄧ殑浠撳簱缂栫爜</param> - /// <param name="regionID">鐗╂枡鎵�鍦ㄧ殑鍌ㄥ尯缂栫爜</param> - /// <param name="shelfID">鐗╂枡鎵�鍦ㄧ殑璐ф灦缂栫爜</param> - /// <param name="option">鎺堟潈鏌ヨ閫夐」</param> + /// <param name="option">澶囨枡鐗╂枡鎺ㄨ崘閫夐」</param> + /// <param name="auth">鎺堟潈鏌ヨ閫夐」</param> /// <param name="reqQty">闇�姹傛暟閲忥紝浼氳繑鍥炴弧瓒抽渶姹傜殑鐗╂枡涓暟</param> /// <returns></returns> - public Result<List<SuggestItem>> Suggest(string order, string itemCode, string erpWH, string whID, string regionID, string shelfID, AuthOption option, double reqQty) + public Result<List<SuggestItem>> Suggest(string order, string itemCode, SuggestOption option, AuthOption auth, double reqQty) { var result = new Result<List<SuggestItem>>(Result.Flags.Success, new List<SuggestItem>()) { LocaleMsg = new("WMS.WmsItem.Suggest.Success") }; try { - var takeCount = 0; - var checkSum = 0.0; - var checkCount = 0; - do - { - takeCount += 50; - var check = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( + var query = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( JoinType.Left, q.SN == p.SN, JoinType.Left, q.WH_ID == w.ID, JoinType.Left, q.REGION_ID == r.ID, JoinType.Left, q.SHELF_ID == s.ID, JoinType.Left, q.LOCATION_ID == l.ID)) //妫�鏌ョ敤鎴锋潈闄� - .ByAuth(option) + .ByAuth(auth) //鍏佽浣跨敤宸茬粡鍒嗛厤鍒板簱瀛樻睜涓殑鐗╂枡 - .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order)) + .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.TRANS_NO == order) || p.IS_LOCKED == "N") //鍙厑璁告湭閿佸畾鐨� .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N") //鍙厑璁哥墿鏂欑姸鎬佹槸鍦ㄥ簱鐨� @@ -445,20 +436,30 @@ //濡傛灉鏈変紶鍏ユ枡鍙凤紝鍒欏彧鍏佽鏂欏彿鐨勭墿鏂� .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode) //濡傛灉鏈変紶鍏ュ簱浣嶏紝鍒欏彧鍏佽搴撲綅涓殑鐗╂枡 - .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg) + .WhereIF(!option.ErpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == option.ErpWH && q.AUTH_ORG == auth.CurOrg) //濡傛灉鏈変紶鍏ヤ粨搴擄紝鍒欏彧鍏佽浠撳簱鐨勭墿鏂� - .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg) + .WhereIF(!option.WHID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == option.WHID && q.AUTH_ORG == auth.CurOrg) //濡傛灉鏈変紶鍏ュ偍鍖猴紝鍒欏彧鍏佽鍌ㄥ尯鐨勭墿鏂� - .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg) + .WhereIF(!option.RegionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == option.RegionID && q.AUTH_ORG == auth.CurOrg) //濡傛灉鏈変紶鍏ヨ揣鏋讹紝鍒欏彧鍏佽璐ф灦鐨勭墿鏂� - .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg) + .WhereIF(!option.ShelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == option.ShelfID && q.AUTH_ORG == auth.CurOrg) //浼樺厛浣跨敤搴撳瓨姹犱腑鐨勭墿鏂� .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID)) //浼樺厛浣跨敤灏炬暟鐗╂枡(鎴枡鎴栬�呴��鏂欎箣鍚庣殑鐗╂枡) - .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) - //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛屾渶鍚庢寜鏉$爜鎺掑簭 - .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN) - .Select((q, p, w, r, s, l) => new + //.OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) + //澶囨枡绛栫暐锛氭寜鐢熶骇鏃ユ湡鍏堣繘鍏堝嚭 + .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FIFO), (q, p, w, r, s, l) => q.PROD_DATE) + //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛� + .OrderByIF(option.Strategy.HasFlag(WMS_ITEM_POOL.STRATEGYs.FSFO), q => q.QTY) + //鏈�鍚庢寜鏉$爜鎺掑簭 + .OrderBy(q => q.SN); + var takeCount = 0; + var checkSum = 0.0; + var checkCount = 0; + do + { + takeCount += 50; + var check = query.Select((q, p, w, r, s, l) => new { ItemCode = q.ITEM_CODE, Sn = q.SN, @@ -484,37 +485,7 @@ } } while (checkSum < reqQty && checkCount >= takeCount); - var items = Biz.Db.Queryable<WMS_ITEM, WMS_ITEM_POOL, WMS_WAREHOUSE, WMS_REGION, WMS_SHELF, WMS_LOCATION>((q, p, w, r, s, l) => new JoinQueryInfos( - JoinType.Left, q.SN == p.SN, - JoinType.Left, q.WH_ID == w.ID, - JoinType.Left, q.REGION_ID == r.ID, - JoinType.Left, q.SHELF_ID == s.ID, - JoinType.Left, q.LOCATION_ID == l.ID)) - //妫�鏌ョ敤鎴锋潈闄� - .ByAuth(option) - //鍏佽浣跨敤宸茬粡鍒嗛厤鍒板簱瀛樻睜涓殑鐗╂枡 - .Where((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID) || (!SqlFunc.IsNullOrEmpty(order) && p.STATUS <= WMS_ITEM_POOL.STATUSs.WaitPick.GetValue() && p.TRANS_NO == order)) - //鍙厑璁告湭閿佸畾鐨� - .Where((q, p, w, r, s, l) => q.IS_LOCKED == "N") - //鍙厑璁哥墿鏂欑姸鎬佹槸鍦ㄥ簱鐨� - .Where((q, p, w, r, s, l) => q.STATUS == WMS_ITEM.STATUSs.InStore.GetValue()) - //濡傛灉鏈変紶鍏ユ枡鍙凤紝鍒欏彧鍏佽鏂欏彿鐨勭墿鏂� - .WhereIF(!itemCode.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ITEM_CODE == itemCode) - //濡傛灉鏈変紶鍏ュ簱浣嶏紝鍒欏彧鍏佽搴撲綅涓殑鐗╂枡 - .WhereIF(!erpWH.IsNullOrEmpty(), (q, p, w, r, s, l) => q.ERP_WH == erpWH && q.AUTH_ORG == option.CurOrg) - //濡傛灉鏈変紶鍏ヤ粨搴擄紝鍒欏彧鍏佽浠撳簱鐨勭墿鏂� - .WhereIF(!whID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.WH_ID == whID && q.AUTH_ORG == option.CurOrg) - //濡傛灉鏈変紶鍏ュ偍鍖猴紝鍒欏彧鍏佽鍌ㄥ尯鐨勭墿鏂� - .WhereIF(!regionID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.REGION_ID == regionID && q.AUTH_ORG == option.CurOrg) - //濡傛灉鏈変紶鍏ヨ揣鏋讹紝鍒欏彧鍏佽璐ф灦鐨勭墿鏂� - .WhereIF(!shelfID.IsNullOrEmpty(), (q, p, w, r, s, l) => q.SHELF_ID == shelfID && q.AUTH_ORG == option.CurOrg) - //浼樺厛浣跨敤搴撳瓨姹犱腑鐨勭墿鏂� - .OrderBy((q, p, w, r, s, l) => SqlFunc.IsNullOrEmpty(p.ID)) - //浼樺厛浣跨敤灏炬暟鐗╂枡(鎴枡鎴栬�呴��鏂欎箣鍚庣殑鐗╂枡) - .OrderByDescending((q, p, w, r, s, l) => q.SN.Contains("_C") || q.SN.Contains("_T")) - //鎸夌敓浜ф棩鏈熷厛杩涘厛鍑猴紝鍐嶆寜鐗╂枡鏁伴噺浠庡皬鍒板ぇ锛屾渶鍚庢寜鏉$爜鎺掑簭 - .OrderBy((q, p, w, r, s, l) => q.PROD_DATE).OrderBy(q => q.QTY).OrderBy(q => q.SN) - .Select((q, p, w, r, s, l) => new SuggestItem + var items = query.Select((q, p, w, r, s, l) => new SuggestItem { Item = q, poolItem = null, diff --git a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs index 425f56c..4b64fe3 100644 --- a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs +++ b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs @@ -1,4 +1,5 @@ 锘縰sing MailKit.Search; +using Microsoft.Scripting.Utils; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using Org.BouncyCastle.Asn1.X509; @@ -41,6 +42,48 @@ default: return ""; } + } + + /// <summary> + /// 鏍规嵁鍙戞枡绫诲瀷锛岃幏鍙栧彂鏂欏崟鎹殑閫夋嫨鍒楄〃锛堝甫鍒嗛〉锛� + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public static PageAble<BIZ_WMS_PREP_SRC> GetPickList(this BIZ_WMS_PREP.BIZ_TYPEs type, BaseInputWithPage input) + { + // 鏌ヨ鍗曟嵁鏄庣粏 + var pickList = new PageAble<BIZ_WMS_PREP_SRC>(); + switch (type) + { + //case BIZ_WMS_PREP.BIZ_TYPEs.Others: + // { + // var dtls = Biz.Db.Queryable<BIZ_U9_MISC_OUT_DTL>().Where(q => q.ORDER_NO == orderNo).ToList(); + // pickList = dtls.Select(q => q.GetPickItem()).ToList(); + // } + // break; + //case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder: + // { + // var dtls = Biz.DataSource["YadaU9C"].Client.Queryable<mes_MOPickList>().Where(q => q.MoDocNo == orderNo).ToList(); + // pickList = dtls.Select(q => q.GetPickItem()).ToList(); + // } + // break; + //case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: + // { + // var dtls = Biz.DataSource["YadaU9C"].Client.Queryable<mes_SCMPickList>().Where(q => q.PoDocNo == orderNo).ToList(); + // pickList = dtls.Select(q => q.GetPickItem()).ToList(); + // } + // break; + //case BIZ_WMS_PREP.BIZ_TYPEs.Transfer: + // { + // var dtls = Biz.Db.Queryable<BIZ_WMS_TRANSFER_DTL>().Where(q => q.ORDER_NO == orderNo).ToList(); + // pickList = dtls.Select(q => q.GetPickItem()).ToList(); + // } + // break; + case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: + default: + break; + } + return pickList; } /// <summary> @@ -113,17 +156,18 @@ /// <param name="trans"></param> /// <param name="input"></param> /// <returns></returns> - public static async Task<ApiAction> CommitToERP(this BIZ_WMS_PREP.BIZ_TYPEs type, Out_BIZ_WMS_PREP trans, BaseInput input) + public static async Task<ApiAction> GenerateDlvyBatch(this BIZ_WMS_PREP.BIZ_TYPEs type, Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) { switch (type) { case BIZ_WMS_PREP.BIZ_TYPEs.Others: - return await MiscShipApprove(trans, input); + return await MiscShipApprove(trans, range); case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder: - return await CreateIssueDoc(trans, input); + return await CreateIssueDoc(trans, range); case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing: - return await CreatePMIssueDoc(trans, input); + return await CreatePMIssueDoc(trans, range); case BIZ_WMS_PREP.BIZ_TYPEs.Transfer: + return await TransferComplete(trans, range); case BIZ_WMS_PREP.BIZ_TYPEs.Requisition: default: throw new NotImplementedException($"鍙戞枡鍗曟嵁绫诲瀷[{type.GetDesc()}]鏈疄鐜癊RP鎺ュ彛璋冪敤"); @@ -134,9 +178,9 @@ /// U9鏉傚彂鍗曞鏍� /// </summary> /// <param name="trans"></param> - /// <param name="input"></param> + /// <param name="range"></param> /// <returns></returns> - private static async Task<ApiAction> MiscShipApprove(Out_BIZ_WMS_PREP trans, BaseInput input) + private static async Task<ApiAction> MiscShipApprove(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) { var action = new ApiAction(); @@ -159,12 +203,19 @@ return action; } - var curBatch = trans.CurPREP.Order.CurBatch; - curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); - curBatch.PREP_PERSON = trans.UserCode; - curBatch.FINISH_TIME = DateTime.Now; - curBatch.REQ_PERSON = trans.UserCode; - curBatch.DLVY_TIME = DateTime.Now; + var batch = new BIZ_WMS_PREP_BTH() + { + AUTH_ORG = trans.CurPREP.Order.AUTH_ORG, + ORDER_NO = trans.CurPREP.Order.ORDER_NO, + DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}", + STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(), + PREP_PERSON = trans.UserCode, + FINISH_TIME = DateTime.Now, + REQ_PERSON = trans.UserCode, + DLVY_TIME = DateTime.Now, + }; + trans.CurPREP.Order.Batchs.Add(batch); + foreach (var item in trans.CurPREP.Order.SourceDetails) { item.QTY_ACT_DLVY = item.QTY_ACT_REQ; @@ -179,6 +230,13 @@ item.REQ_PERSON = trans.UserCode; item.DLVY_TIME = DateTime.Now; } + var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => q.TRANS_NO == trans.CurPREP.Order.ORDER_NO).ToList(); + var history = new List<WMS_ITEM_HIS>(); + foreach (var item in items) + { + item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); + history.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鍙戞枡杩囪处鎴愬姛锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); + } //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 var db = trans.GetCommitDB(); @@ -186,7 +244,11 @@ { db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); db.Updateable(trans.CurPREP.Order.SourceDetails, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); - db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); + db.Insertable(batch, trans.UserCode).ExecuteCommand(); + db.Updateable<BIZ_WMS_PREP_SN>(trans.UserCode).Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO) + .SetColumns(q => q.DLVY_BATCH == batch.DLVY_BATCH).SetColumns(q => q.STATUS == WMS_ITEM.STATUSs.Sended.GetValue()).ExecuteCommand(); + db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); + db.Insertable(history, trans.UserCode).ExecuteCommand(); db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); }); if (dbTran.IsSuccess) @@ -207,18 +269,21 @@ /// U9鍒涘缓鐢熶骇棰嗘枡鍗� /// </summary> /// <param name="trans"></param> - /// <param name="input"></param> + /// <param name="range"></param> /// <returns></returns> - private static async Task<ApiAction> CreateIssueDoc(Out_BIZ_WMS_PREP trans, BaseInput input) + private static async Task<ApiAction> CreateIssueDoc(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) { var action = new ApiAction(); - var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.ORDER_BATCH == trans.CurPREP.Order.CurBatch.BATCH.ToString()).ToList(); + var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.STATUS == WMS_ITEM.STATUSs.OffShelf.GetValue()) + .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurTrans, q => q.TRACE_ID == trans.TransID) + .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurWH, q => q.WH_ID == trans.CurPREP.Option.WHID) + .ToList(); if (!sns.Any()) { action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鍒涘缓鐢熶骇棰嗘枡鍗曞け璐ワ紝澶囨枡浠诲姟[{0}]鎵规[{1}]鏈壘鍒板凡涓嬫灦鐨勭墿鏂欐暟鎹�"); - action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, trans.CurPREP.Order.CurBatch.BATCH); + //action.LocaleMsg = Biz.L("鍒涘缓鐢熶骇棰嗘枡鍗曞け璐ワ紝澶囨枡浠诲姟[{0}]鏈壘鍒皗1}宸蹭笅鏋剁殑鐗╂枡鏁版嵁"); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, range.GetDesc()); return action; } var wos = Biz.DataSource["YadaU9C"].Client.Queryable<mes_Mo>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.DocNo)).ToList(); @@ -280,14 +345,34 @@ return action; } - var curBatch = trans.CurPREP.Order.CurBatch; - curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); - curBatch.PREP_PERSON = trans.UserCode; - curBatch.FINISH_TIME = DateTime.Now; - curBatch.REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)); - curBatch.REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)); - curBatch.REQ_PERSON = trans.UserCode; - curBatch.DLVY_TIME = DateTime.Now; + + var batch = new BIZ_WMS_PREP_BTH() + { + AUTH_ORG = trans.CurPREP.Order.AUTH_ORG, + ORDER_NO = trans.CurPREP.Order.ORDER_NO, + DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}", + STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(), + PREP_PERSON = trans.UserCode, + FINISH_TIME = DateTime.Now, + REQ_PERSON = trans.UserCode, + REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)), + REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)), + DLVY_TIME = DateTime.Now, + }; + trans.CurPREP.Order.Batchs.Add(batch); + foreach (var sn in sns) + { + sn.DLVY_BATCH = batch.DLVY_BATCH; + sn.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); + } + + var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => sns.Select(s => s.SN).Contains(q.SN)).ToList(); + var history = new List<WMS_ITEM_HIS>(); + foreach (var item in items) + { + item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); + history.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鍙戞枡杩囪处鎴愬姛锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); + } var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q)); @@ -302,12 +387,15 @@ { db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); db.Updateable(prepSrcList, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); - db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_ID, q.REQ_ORDER, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); + db.Insertable(batch, trans.UserCode).ExecuteCommand(); + db.Updateable(sns, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.DLVY_BATCH }).ExecuteCommand(); + db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); + db.Insertable(history, trans.UserCode).ExecuteCommand(); }); if (dbTran.IsSuccess) { //action.LocaleMsg = Biz.L($"鍒涘缓鐢熶骇棰嗘枡鍗昜{0}]鎴愬姛锛屾潵婧愬崟鍙峰涓嬶細{1}"); - action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.Success", curBatch.REQ_ORDER, string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreateIssueDoc.Success", batch.REQ_ORDER, string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); } else { @@ -322,18 +410,21 @@ /// U9鍒涘缓濮斿鐢熶骇棰嗘枡鍗� /// </summary> /// <param name="trans"></param> - /// <param name="input"></param> + /// <param name="range"></param> /// <returns></returns> - private static async Task<ApiAction> CreatePMIssueDoc(Out_BIZ_WMS_PREP trans, BaseInput input) + private static async Task<ApiAction> CreatePMIssueDoc(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) { var action = new ApiAction(); - var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.ORDER_BATCH == trans.CurPREP.Order.CurBatch.BATCH.ToString()).ToList(); + var sns = trans.MainDB.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO && q.STATUS == WMS_ITEM.STATUSs.OffShelf.GetValue()) + .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurTrans, q => q.TRACE_ID == trans.TransID) + .WhereIF(range == BIZ_WMS_PREP_BTH.BATCH_RANGEs.CurWH, q => q.WH_ID == trans.CurPREP.Option.WHID) + .ToList(); if (!sns.Any()) { action.IsSuccessed = false; - //action.LocaleMsg = Biz.L("鍒涘缓濮斿鐢熶骇棰嗘枡鍗曞け璐ワ紝澶囨枡浠诲姟[{0}]鎵规[{1}]鏈壘鍒板凡涓嬫灦鐨勭墿鏂欐暟鎹�"); - action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, trans.CurPREP.Order.CurBatch.BATCH); + //action.LocaleMsg = Biz.L("鍒涘缓濮斿鐢熶骇棰嗘枡鍗曞け璐ワ紝澶囨枡浠诲姟[{0}]鏈壘鍒皗1}宸蹭笅鏋剁殑鐗╂枡鏁版嵁"); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.NoSns", trans.CurPREP.Order.ORDER_NO, range.GetDesc()); return action; } var temp = sns.GroupBy(q => new { q.ITEM_CODE, q.UNIT, q.WH_CODE, q.LOCATION_CODE }) @@ -395,14 +486,33 @@ return action; } - var curBatch = trans.CurPREP.Order.CurBatch; - curBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(); - curBatch.PREP_PERSON = trans.UserCode; - curBatch.FINISH_TIME = DateTime.Now; - curBatch.REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)); - curBatch.REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)); - curBatch.REQ_PERSON = trans.UserCode; - curBatch.DLVY_TIME = DateTime.Now; + var batch = new BIZ_WMS_PREP_BTH() + { + AUTH_ORG = trans.CurPREP.Order.AUTH_ORG, + ORDER_NO = trans.CurPREP.Order.ORDER_NO, + DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}", + STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(), + PREP_PERSON = trans.UserCode, + FINISH_TIME = DateTime.Now, + REQ_PERSON = trans.UserCode, + REQ_ID = string.Join(",", result.Data.Select(q => q.m_iD)), + REQ_ORDER = string.Join(",", result.Data.Select(q => q.m_code)), + DLVY_TIME = DateTime.Now, + }; + trans.CurPREP.Order.Batchs.Add(batch); + foreach (var sn in sns) + { + sn.DLVY_BATCH = batch.DLVY_BATCH; + sn.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); + } + + var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => sns.Select(s => s.SN).Contains(q.SN)).ToList(); + var history = new List<WMS_ITEM_HIS>(); + foreach (var item in items) + { + item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); + history.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鍙戞枡杩囪处鎴愬姛锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); + } var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Others.GetActReqQty(q)); @@ -427,7 +537,10 @@ { db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); db.Updateable(prepSrcList, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); - db.Updateable(curBatch, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_ID, q.REQ_ORDER, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); + db.Insertable(batch, trans.UserCode).ExecuteCommand(); + db.Updateable(sns, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.DLVY_BATCH }).ExecuteCommand(); + db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); + db.Insertable(history, trans.UserCode).ExecuteCommand(); if (orders.Any()) { db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); @@ -436,7 +549,7 @@ if (dbTran.IsSuccess) { //action.LocaleMsg = Biz.L($"鍒涘缓濮斿鐢熶骇棰嗘枡鍗昜{0}]鎴愬姛锛屾潵婧愬崟鍙峰涓嬶細{1}"); - action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.Success", curBatch.REQ_ORDER, string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.CreatePMIssueDoc.Success", batch.REQ_ORDER, string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); } else { @@ -446,5 +559,88 @@ } return action; } + + /// <summary> + /// 璋冩嫧鍗曞畬鎴愬彂鏂� + /// </summary> + /// <param name="trans"></param> + /// <param name="range"></param> + /// <returns></returns> + private static async Task<ApiAction> TransferComplete(Out_BIZ_WMS_PREP trans, BIZ_WMS_PREP_BTH.BATCH_RANGEs range) + { + var action = new ApiAction(); + + var dtls = trans.MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO).ToList(); + var noFinish = dtls.Where(q => q.QTY_PREP < BIZ_WMS_PREP.BIZ_TYPEs.Transfer.GetActReqQty(q)); + if (noFinish.Any()) + { + action.IsSuccessed = false; + //action.LocaleMsg = Biz.L("澶囨枡浠诲姟[{0}]鏈兘鎻愪氦瀹℃牳锛屾湭澶囨枡瀹屾垚鐨勮濡備笅锛歿1}"); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.TransferComplete.NoFinish", trans.CurPREP.Order.ORDER_NO, string.Join("锛�", noFinish.Select(q => q.ORDER_LINE))); + return action; + } + + var batch = new BIZ_WMS_PREP_BTH() + { + AUTH_ORG = trans.CurPREP.Order.AUTH_ORG, + ORDER_NO = trans.CurPREP.Order.ORDER_NO, + DLVY_BATCH = $"{DateTime.Now:yyMMddHHmmssfff}", + STATUS = BIZ_WMS_PREP_BTH.STATUSs.Sended.GetValue(), + PREP_PERSON = trans.UserCode, + FINISH_TIME = DateTime.Now, + REQ_PERSON = trans.UserCode, + DLVY_TIME = DateTime.Now, + }; + trans.CurPREP.Order.Batchs.Add(batch); + + foreach (var item in trans.CurPREP.Order.SourceDetails) + { + item.QTY_ACT_DLVY = item.QTY_ACT_REQ; + } + trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue(); + //var orders = trans.MainDB.Queryable<BIZ_WMS_TRANSFER>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).ToList(); + //foreach (var item in orders) + //{ + // item.STATUS = BIZ_WMS_TRANSFER.STATUSs.Sended.GetValue(); + // item.PREP_PERSON = trans.UserCode; + // item.FINISH_TIME = DateTime.Now; + // item.REQ_PERSON = trans.UserCode; + // item.DLVY_TIME = DateTime.Now; + //} + var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => q.TRANS_NO == trans.CurPREP.Order.ORDER_NO).ToList(); + var history = new List<WMS_ITEM_HIS>(); + foreach(var item in items) + { + item.STATUS = WMS_ITEM.STATUSs.Sended.GetValue(); + history.Add(new WMS_ITEM_HIS(item, $"鏉$爜[{item.SN}]鍙戞枡鎴愬姛锛屾搷浣滃崟鎹甗{item.TRANS_NO}]")); + } + + //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 + var db = trans.GetCommitDB(); + var dbTran = db.UseTran(() => + { + db.Updateable(trans.CurPREP.Order, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); + db.Updateable(trans.CurPREP.Order.SourceDetails, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.QTY_ACT_DLVY }).ExecuteCommand(); + db.Insertable(batch, trans.UserCode).ExecuteCommand(); + db.Updateable<BIZ_WMS_PREP_SN>(trans.UserCode).Where(q => q.ORDER_NO == trans.CurPREP.Order.ORDER_NO) + .SetColumns(q => q.DLVY_BATCH == batch.DLVY_BATCH).SetColumns(q => q.STATUS == WMS_ITEM.STATUSs.Sended.GetValue()).ExecuteCommand(); + db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand(); + db.Insertable(history, trans.UserCode).ExecuteCommand(); + //db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.PREP_PERSON, q.FINISH_TIME, q.REQ_PERSON, q.DLVY_TIME }).ExecuteCommand(); + }); + if (dbTran.IsSuccess) + { + //action.LocaleMsg = Biz.L($"璋冩嫧鍗曞彂鏂欏畬鎴愶紝鍗曞彿濡備笅锛歿0}"); + action.LocaleMsg = Biz.L("WMS.BIZ_WMS_PREP.MiscShipApprove.Success", string.Join("锛�", trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER))); + } + else + { + Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception"); + //鎶涘嚭寮傚父 + throw dbTran.ErrorException; + } + return action; + } + }//endClass } \ No newline at end of file diff --git a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs index 243c7dc..9abb932 100644 --- a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs +++ b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs @@ -14,6 +14,7 @@ using Tiger.Model.Sharetronic.Shelf; using MailKit.Search; using Tiger.Business.WMS.Extensions; +using static Tiger.Model.BIZ_WMS_PREP_BTH; namespace Tiger.Business.WMS.Transaction { @@ -171,8 +172,8 @@ var action = new ApiAction<ScanOutput>(new ScanOutput()); try { - var inputDtl = input?.Data?.JsonToObject<BIZ_WMS_PREP_DTL>(); - var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == inputDtl.ID).First(); + var option = CurPREP.Option = new BaseInput<SuggestOption>(input).Data; + var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == option.LineID).First(); if (prepDtl.IsNullOrEmpty()) { action.IsSuccessed = false; @@ -202,10 +203,10 @@ } //濡傛灉鏄濂楀彂鏂欙紝鍒欏彧鎺ㄨ崘褰撳墠鐗╂枡琛岀殑涓�鐩樼墿鏂� - if (CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.First.GetValue()) + if (option.DlvyMode == WMS_ITEM_POOL.DLVY_MODEs.First) { //鎺ㄨ崘鐗╂枡 - Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, null, inputDtl.WH_ID, inputDtl.REGION_ID, inputDtl.SHELF_ID, input.AuthOption, 1); + Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, option, input.AuthOption, 1); action.LocaleMsg = result.LocaleMsg; if (result.IsException) { @@ -232,11 +233,11 @@ } //濡傛灉鏄甯稿彂鏂欙紝鍒欐寜瀹為檯闇�姹傛暟閲忔帹鑽愬綋鍓嶇墿鏂欒鐨勬墍鏈夌墿鏂� - if (CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.Supply.GetValue()) + if (option.DlvyMode == WMS_ITEM_POOL.DLVY_MODEs.Supply) { //鎺ㄨ崘鐗╂枡 var actQty = CurPrepDtl.QTY_PREP > CurPREP.BizType.GetActReqQty(CurPrepDtl) ? 0 : (CurPREP.BizType.GetActReqQty(CurPrepDtl) - CurPrepDtl.QTY_PREP); - Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, null, inputDtl.WH_ID, inputDtl.REGION_ID, inputDtl.SHELF_ID, input.AuthOption, actQty); + Result<List<SuggestItem>> result = Suggest(CurPrepDtl.ORDER_NO, CurPrepDtl.ITEM_CODE, option, input.AuthOption, actQty); action.LocaleMsg = result.LocaleMsg; if (result.IsException) { @@ -290,10 +291,6 @@ { var action = new ApiAction<BIZ_WMS_PREP_DTL>(); var prepDtl = MainDB.Queryable<BIZ_WMS_PREP_DTL>().Where(q => q.ID == CurPrepDtl.ID).First(); - prepDtl.ERP_WH = CurPrepDtl.ERP_WH; - prepDtl.WH_ID = CurPrepDtl.WH_ID; - prepDtl.REGION_ID = CurPrepDtl.REGION_ID; - prepDtl.SHELF_ID = CurPrepDtl.SHELF_ID; prepDtl.Suggests = Suggests; CurPrepDtl = prepDtl; CurPREP.Order.Details.RemoveAll(q => q.ID == CurPrepDtl.ID); @@ -467,7 +464,6 @@ CurSn = CurInvItem.Items.Select(q => new BIZ_WMS_PREP_SN() { ORDER_NO = CurPREP.Order.ORDER_NO, ORDER_LINE = CurPrepDtl.ORDER_LINE, - ORDER_BATCH = CurPREP.Order.CurBatch.BATCH.ToString(), SN = q.SN, ITEM_CODE = q.ITEM_CODE, UNIT = q.UNIT, @@ -475,22 +471,21 @@ QTY_DLVY = q.QTY, STATUS = q.STATUS, LOTNO = q.LOTNO, + WH_ID = CurInvItem.Warehouse.ID, WH_CODE = CurInvItem.Warehouse.WH_CODE, + REGION_ID = CurInvItem.Region.ID, REGION_CODE = CurInvItem.Region.REGION_CODE, + SHELF_ID = CurInvItem.Shelf.ID, SHELF_CODE = CurInvItem.Shelf.SHELF_CODE, + LOCATION_ID = CurInvItem.Location.ID, LOCATION_CODE = CurInvItem.Location.LOCATION_CODE, - FTY_CODE = CurPREP.Order.CurBatch.FTY_CODE, - WS_CODE = CurPREP.Order.CurBatch.WS_CODE, - LINE_CODE = CurPREP.Order.CurBatch.LINE_CODE, - POST_CODE = CurPREP.Order.CurBatch.POST_CODE, - OPER_CODE = CurPREP.Order.CurBatch.OPER_CODE, - SEGMENT = CurPREP.Order.CurBatch.SEGMENT, SMT_NO = CurPrepDtl.SMT_NO, STATION_NO = CurPrepDtl.STATION_NO, FEEDER_NO = CurPrepDtl.FEEDER_NO, FEEDER_TYPE = CurPrepDtl.FEEDER_TYPE, - IS_FIRST = CurPREP.Order.CurBatch.DLVY_MODE == BIZ_WMS_PREP_BTH.DLVY_MODEs.First.GetValue() ? "Y" : "N", + IS_FIRST = CurPREP.Option.DlvyMode == WMS_ITEM_POOL.DLVY_MODEs.First ? "Y" : "N", NEED_CUTTING = "N", + TRACE_ID = TransID, }).ToList(); @@ -621,14 +616,11 @@ } CurPrepDtl.QTY_PREP += CurSn.Sum(q => q.QTY_DLVY); CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Picking.GetValue(); - CurPREP.Order.CurBatch.STATUS = BIZ_WMS_PREP_BTH.STATUSs.Picking.GetValue(); - CurPREP.Order.CurBatch.PICK_TIME = CurPREP.Order.CurBatch.PICK_TIME < new DateTime(2000, 1, 1) ? DateTime.Now : CurPREP.Order.CurBatch.PICK_TIME; //鍒涘缓鍙橀噺鍏嬮殕瀵硅薄鐢ㄤ簬浼犲叆DBSubmitAction涓繚瀛樺綋鍓嶉渶瑕佹殏瀛樼殑鏁版嵁鍊� var _CurSn = CurSn.Clone(); var _CurPrepDtl = CurPrepDtl.Clone(); var _CurPREPOrder = CurPREP.Order.Clone(); - var _CurPREPCurBatch = CurPREP.Order.CurBatch.Clone(); AddCommitAction("UpdatePrep", () => { //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄 @@ -638,7 +630,6 @@ _CurPrepDtl.QTY_PREP = db.Queryable<BIZ_WMS_PREP_SN>().Where(q => q.ORDER_NO == _CurPrepDtl.ORDER_NO && q.ORDER_LINE == _CurPrepDtl.ORDER_LINE).Sum(q => q.QTY_DLVY); db.Updateable(_CurPrepDtl, UserCode).UpdateColumns(q => new { q.QTY_PREP, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); db.Updateable(_CurPREPOrder, UserCode).UpdateColumns(q => new { q.STATUS, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); - db.Updateable(_CurPREPCurBatch, UserCode).UpdateColumns(q => new { q.STATUS, q.PICK_TIME, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); }); //鐏伅 @@ -790,13 +781,14 @@ } /// <summary> - /// 璋冪敤鍙戞枡鍗曟嵁鐨凟RP鎺ュ彛 + /// 鍒涘缓鍙戞枡鎵规浠ュ畬鎴愭湰娆″彂鏂欙紝璋冪敤鍙戞枡鍗曟嵁鐨凟RP鎺ュ彛 /// </summary> /// <param name="input"></param> /// <returns></returns> - public async Task<ApiAction> CommitToERP(BaseInput input) + public async Task<ApiAction> GenerateDlvyBatch(BaseInput input) { - var action = await CurPREP.Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>() .CommitToERP(this, input); + var range = input.Data.ToInt32().GetEnum<BATCH_RANGEs>(); + var action = await CurPREP.Order.BIZ_TYPE.GetEnum<BIZ_WMS_PREP.BIZ_TYPEs>() .GenerateDlvyBatch(this, range); return action; } diff --git a/Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs b/Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs index 4ffdf1e..dbed44a 100644 --- a/Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs +++ b/Tiger.Controllers.WMS/Controllers/WMSController.Out_BIZ_WMS_PREP.cs @@ -215,5 +215,51 @@ trans?.AddHistory(Request, action); return Ok(response); } + + /// <summary> + /// GenerateDlvyBatch(ApiAction(BaseInput)) + /// 鍒涘缓鍙戞枡鎵规浠ュ畬鎴愭湰娆″彂鏂欙紝璋冪敤鍙戞枡鍗曟嵁鐨凟RP鎺ュ彛 + /// </summary> + /// <param name="action"></param> + /// <returns></returns> + [HttpPost] + [Route("api/[controller]/Out_PREP/GenerateDlvyBatch")] + public async Task<IActionResult> Out_BIZ_WMS_PREP_GenerateDlvyBatchAsync([FromBody] ApiAction<BaseInput> action) + { + ApiAction response; + IOut_BIZ_WMS_PREP trans = null; + try + { + if (iBiz.WMS.Context.GetTransDic().ContainsKey(action.ID)) + { + trans = iBiz.WMS.Context.GetTransDic()[action.ID] as IOut_BIZ_WMS_PREP; + if (!trans.IsFinished) + { + if (action.IsAsync) + { + response = action.GetResponse(await trans.GenerateDlvyBatch(action.Data)); + } + else + { + lock (trans.TransLock) { response = action.GetResponse(trans.GenerateDlvyBatch(action.Data).Result); } + } + } + else + { + response = action.GetResponse($"Transaction Error: 澶囨枡浠诲姟涓嬫灦浜嬪姟[ID:{action.ID}]宸茬粡鍏抽棴锛岃閲嶆柊鎵撳紑澶囨枡浠诲姟涓嬫灦鍔熻兘", false); + } + } + else + { + response = action.GetResponse($"Transaction Error: 澶囨枡浠诲姟涓嬫灦浜嬪姟[ID:{action.ID}]鏁版嵁涓㈠け锛岃閲嶆柊鎵撳紑澶囨枡浠诲姟涓嬫灦鍔熻兘", false); + } + } + catch (System.Exception ex) + { + response = action.GetResponse().CatchExceptionWithLog(ex); + } + trans?.AddHistory(Request, action); + return Ok(response); + } }//endClass } \ No newline at end of file diff --git a/Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs b/Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs index 55a42fc..a881564 100644 --- a/Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs +++ b/Tiger.IBusiness.WMS/Transaction/IOut_BIZ_WMS_PREP.cs @@ -32,6 +32,13 @@ /// <returns></returns> public Task<ApiAction<BIZ_WMS_PREP_DTL>> GetCurPrepItem(); + /// <summary> + /// 鍒涘缓鍙戞枡鎵规浠ュ畬鎴愭湰娆″彂鏂欙紝璋冪敤鍙戞枡鍗曟嵁鐨凟RP鎺ュ彛 + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + public Task<ApiAction> GenerateDlvyBatch(BaseInput input); + public bool Close(bool needSaveHistoryLog = false); } } diff --git a/Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs b/Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs index 7295a07..a492ca3 100644 --- a/Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs +++ b/Tiger.Model.Net/Entitys/WMS/Api/Input_Entitys.cs @@ -100,6 +100,49 @@ public string Code { get; set; } } + /// <summary> + /// 澶囨枡鐗╂枡鎺ㄨ崘閫夐」 + /// </summary> + public class SuggestOption + { + /// <summary> + /// 褰撳墠澶囨枡琛岀殑琛孖D + /// </summary> + public string LineID { get; set; } + /// <summary> + /// ERP浠撳簱缂栫爜 + /// </summary> + public string ErpWH { get; set; } + /// <summary> + /// 浠撳簱ID + /// </summary> + public string WHID { get; set; } + /// <summary> + /// 鍌ㄥ尯ID + /// </summary> + public string RegionID { get; set; } + /// <summary> + /// 璐ф灦ID + /// </summary> + public string ShelfID { get; set; } + /// <summary> + /// 鍌ㄤ綅ID + /// </summary> + public string LocationID { get; set; } + /// <summary> + /// 鍙戞枡绛栫暐 + /// </summary> + public WMS_ITEM_POOL.STRATEGYs Strategy { get; set; } = WMS_ITEM_POOL.STRATEGYs.FIFO; + /// <summary> + /// 鍙戞枡鏂瑰紡 + /// </summary> + public WMS_ITEM_POOL.DLVY_MODEs DlvyMode { get; set; } = WMS_ITEM_POOL.DLVY_MODEs.Supply; + /// <summary> + /// 鏄惁瑕侀攣瀹氱墿鏂� + /// </summary> + public bool NeedLock { get; set; } = false; + } + public class OutOthDtlInput : BasePageInput { public bool IsItemCodeList { get; set; } diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs index 39e7999..51c6f40 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs @@ -91,8 +91,6 @@ [SugarColumn(IsIgnore = true)] public string FieldName { get; set; } */ - [SugarColumn(IsIgnore = true)] - public BIZ_WMS_PREP_BTH CurBatch => Batchs?.OrderBy(q => q.CALL_TIME).FirstOrDefault(q => q.STATUS < STATUSs.Sended.GetValue()); #endregion #region 澶栭敭灞炴�� diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_BTH.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_BTH.cs index 34ba08e..02c3736 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_BTH.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_BTH.cs @@ -7,240 +7,253 @@ namespace Tiger.Model { /// <summary> - /// 实体:备料任务(WMS)发料批次 + /// 瀹炰綋锛氬鏂欎换鍔�(WMS)鍙戞枡鎵规 /// </summary> [Description("Primary:ID")] - [DisplayName("备料任务(WMS)发料批次")] + [DisplayName("澶囨枡浠诲姟(WMS)鍙戞枡鎵规")] [Serializable] [SugarTable("BIZ_WMS_PREP_BTH")] public class BIZ_WMS_PREP_BTH : DbEntityWithAuth { - #region 构造函数 + #region 鏋勯�犲嚱鏁� /// <summary> - /// 实体:备料任务(WMS)发料批次 + /// 瀹炰綋锛氬鏂欎换鍔�(WMS)鍙戞枡鎵规 /// </summary> public BIZ_WMS_PREP_BTH() {} #endregion - #region 公共属性 + #region 鍏叡灞炴�� /// <summary> - /// 备料任务号 + /// 澶囨枡浠诲姟鍙� /// </summary> - [DisplayName("备料任务号")] + [DisplayName("澶囨枡浠诲姟鍙�")] public string ORDER_NO { get; set; } /// <summary> - /// 发料批次 + /// 鍙戞枡鎵规 /// </summary> - [DisplayName("发料批次")] - public int BATCH { get; set; } + [DisplayName("鍙戞枡鎵规")] + public string DLVY_BATCH { get; set; } /// <summary> - /// 备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料) + /// 澶囨枡鏂瑰紡(0Whole鏁村崟澶囨枡|1SideA/A闈㈠鏂檤2SideB/B闈㈠鏂�) /// </summary> - [DisplayName("备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料)")] + [DisplayName("澶囨枡鏂瑰紡(0Whole鏁村崟澶囨枡|1SideA/A闈㈠鏂檤2SideB/B闈㈠鏂�)")] public int PREP_MODE { get; set; } /// <summary> - /// 发料方式(0Supply正常发料|1First首套发料) + /// 鍙戞枡鏂瑰紡(0Supply姝e父鍙戞枡|1First棣栧鍙戞枡) /// </summary> - [DisplayName("发料方式(0Supply正常发料|1First首套发料)")] + [DisplayName("鍙戞枡鏂瑰紡(0Supply姝e父鍙戞枡|1First棣栧鍙戞枡)")] public int DLVY_MODE { get; set; } /// <summary> - /// 状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废) + /// 鐘舵��(0Init鍒濆鍖東1Called宸插彨鏂檤2WaitPick寰呮崱鏂檤3Picking鎹℃枡涓瓅4Picked宸叉崱瀹寍5Sended宸插彂鏂檤6Close宸插叧闂瓅7Cancel浣滃簾) /// </summary> - [DisplayName("状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废)")] + [DisplayName("鐘舵��(0Init鍒濆鍖東1Called宸插彨鏂檤2WaitPick寰呮崱鏂檤3Picking鎹℃枡涓瓅4Picked宸叉崱瀹寍5Sended宸插彂鏂檤6Close宸插叧闂瓅7Cancel浣滃簾)")] public int STATUS { get; set; } /// <summary> - /// 工厂编码 + /// 宸ュ巶缂栫爜 /// </summary> - [DisplayName("工厂编码")] + [DisplayName("宸ュ巶缂栫爜")] public string FTY_CODE { get; set; } /// <summary> - /// 车间编码 + /// 杞﹂棿缂栫爜 /// </summary> - [DisplayName("车间编码")] + [DisplayName("杞﹂棿缂栫爜")] public string WS_CODE { get; set; } /// <summary> - /// 产线编码 + /// 浜х嚎缂栫爜 /// </summary> - [DisplayName("产线编码")] + [DisplayName("浜х嚎缂栫爜")] public string LINE_CODE { get; set; } /// <summary> - /// 岗位编码 + /// 宀椾綅缂栫爜 /// </summary> - [DisplayName("岗位编码")] + [DisplayName("宀椾綅缂栫爜")] public string POST_CODE { get; set; } /// <summary> - /// 工序编码 + /// 宸ュ簭缂栫爜 /// </summary> - [DisplayName("工序编码")] + [DisplayName("宸ュ簭缂栫爜")] public string OPER_CODE { get; set; } /// <summary> - /// 加工段 + /// 鍔犲伐娈� /// </summary> - [DisplayName("加工段")] + [DisplayName("鍔犲伐娈�")] public string SEGMENT { get; set; } /// <summary> - /// 叫料时间 + /// 鍙枡鏃堕棿 /// </summary> - [DisplayName("叫料时间")] + [DisplayName("鍙枡鏃堕棿")] public DateTime CALL_TIME { get; set; } = DateTime.MinValue; /// <summary> - /// 计划完成时间 + /// 璁″垝瀹屾垚鏃堕棿 /// </summary> - [DisplayName("计划完成时间")] + [DisplayName("璁″垝瀹屾垚鏃堕棿")] public DateTime PLAN_TIME { get; set; } = DateTime.MinValue; /// <summary> - /// 备料开始时间 + /// 澶囨枡寮�濮嬫椂闂� /// </summary> - [DisplayName("备料开始时间")] + [DisplayName("澶囨枡寮�濮嬫椂闂�")] public DateTime PICK_TIME { get; set; } = DateTime.MinValue; /// <summary> - /// 备料优先级(1-7)越小越优先 + /// 澶囨枡浼樺厛绾�(1-7)瓒婂皬瓒婁紭鍏� /// </summary> - [DisplayName("备料优先级(1-7)越小越优先")] + [DisplayName("澶囨枡浼樺厛绾�(1-7)瓒婂皬瓒婁紭鍏�")] public int PRIORITY { get; set; } /// <summary> - /// 备料人 + /// 澶囨枡浜� /// </summary> - [DisplayName("备料人")] + [DisplayName("澶囨枡浜�")] public string PREP_PERSON { get; set; } /// <summary> - /// 备料完成时间 + /// 澶囨枡瀹屾垚鏃堕棿 /// </summary> - [DisplayName("备料完成时间")] + [DisplayName("澶囨枡瀹屾垚鏃堕棿")] public DateTime FINISH_TIME { get; set; } = DateTime.MinValue; /// <summary> - /// 关联领料单ID + /// 鍏宠仈棰嗘枡鍗旾D /// </summary> - [DisplayName("关联领料单ID")] + [DisplayName("鍏宠仈棰嗘枡鍗旾D")] public string REQ_ID { get; set; } /// <summary> - /// 关联领料单号 + /// 鍏宠仈棰嗘枡鍗曞彿 /// </summary> - [DisplayName("关联领料单号")] + [DisplayName("鍏宠仈棰嗘枡鍗曞彿")] public string REQ_ORDER { get; set; } /// <summary> - /// 领料人 + /// 棰嗘枡浜� /// </summary> - [DisplayName("领料人")] + [DisplayName("棰嗘枡浜�")] public string REQ_PERSON { get; set; } /// <summary> - /// 领料部门 + /// 棰嗘枡閮ㄩ棬 /// </summary> - [DisplayName("领料部门")] + [DisplayName("棰嗘枡閮ㄩ棬")] public string REQ_DEPT { get; set; } /// <summary> - /// 领料出库时间 + /// 棰嗘枡鍑哄簱鏃堕棿 /// </summary> - [DisplayName("领料出库时间")] + [DisplayName("棰嗘枡鍑哄簱鏃堕棿")] public DateTime DLVY_TIME { get; set; } = DateTime.MinValue; /// <summary> - /// 备注 + /// 澶囨敞 /// </summary> - [DisplayName("备注")] + [DisplayName("澶囨敞")] public string REMARK { get; set; } /// <summary> - /// -1:未处理,0:同步处理完,>0:同步处理失败次数 + /// -1:鏈鐞嗭紝0:鍚屾澶勭悊瀹岋紝>0:鍚屾澶勭悊澶辫触娆℃暟 /// </summary> - [DisplayName("-1:未处理,0:同步处理完,>0:同步处理失败次数")] + [DisplayName("-1:鏈鐞嗭紝0:鍚屾澶勭悊瀹岋紝>0:鍚屾澶勭悊澶辫触娆℃暟")] public int HANDLED { get; set; } = -1; /// <summary> - /// 最后一次同步处理日期 + /// 鏈�鍚庝竴娆″悓姝ュ鐞嗘棩鏈� /// </summary> - [DisplayName("最后一次同步处理日期")] + [DisplayName("鏈�鍚庝竴娆″悓姝ュ鐞嗘棩鏈�")] public DateTime HANDLED_DATE { get; set; } = DateTime.MinValue; /// <summary> - /// 过账提交的JSON + /// 杩囪处鎻愪氦鐨凧SON /// </summary> - [DisplayName("过账提交的JSON")] + [DisplayName("杩囪处鎻愪氦鐨凧SON")] public string COMMIT_JSON { get; set; } /// <summary> - /// 过账提交的返回信息 + /// 杩囪处鎻愪氦鐨勮繑鍥炰俊鎭� /// </summary> - [DisplayName("过账提交的返回信息")] + [DisplayName("杩囪处鎻愪氦鐨勮繑鍥炰俊鎭�")] public string COMMIT_MSG { get; set; } - #endregion + #endregion - #region 虚拟属性 - /*例子 + #region 铏氭嫙灞炴�� + /*渚嬪瓙 [SugarColumn(IsIgnore = true)] public string FieldName { get; set; } */ - #endregion + #endregion - #region 外键属性 - /*例子 - //一对一外键导航 - [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是BIZ_WMS_PREP_BTH类里面的外键ID字段 - public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null - //一对多外键导航 - [Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_WMS_PREP_BTHId))]//ClassA表中的BIZ_WMS_PREP_BTHId - public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null - //多对多外键导航 - [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_WMS_PREP_BTHId), nameof(MappingClass.ClassAId))]//注意顺序 - public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null + #region 澶栭敭灞炴�� + /*渚嬪瓙 + //涓�瀵逛竴澶栭敭瀵艰埅 + [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//涓�瀵逛竴 ClassAId鏄疊IZ_WMS_PREP_BTH绫婚噷闈㈢殑澶栭敭ID瀛楁 + public ClassA ClassA { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull + //涓�瀵瑰澶栭敭瀵艰埅 + [Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_WMS_PREP_BTHId))]//ClassA琛ㄤ腑鐨凚IZ_WMS_PREP_BTHId + public List<ClassA> ClassAList { get; set; }//娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull + //澶氬澶氬閿鑸� + [Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_WMS_PREP_BTHId), nameof(MappingClass.ClassAId))]//娉ㄦ剰椤哄簭 + public List<ClassA> ClassAList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull */ - #endregion + #endregion - #region 枚举变量 - /*例子 + #region 鏋氫妇鍙橀噺 + /*渚嬪瓙 public enum FieldNames { - [Description("枚举描述0")] + [Description("鏋氫妇鎻忚堪0")] Enum0, - [Description("枚举描述1")] + [Description("鏋氫妇鎻忚堪1")] Enum1, } */ - /// <summary> - /// 枚举:备料方式(0Whole整单备料|1SideA/A面备料|2SideB/B面备料) - /// </summary> - public enum PREP_MODEs + /// <summary> + /// 鏋氫妇锛氱敓鎴愯寖鍥�(0CurTrans鏈鎿嶄綔|1CurWH褰撳墠浠撳簱|2Whole褰撳墠鍗曟嵁) + /// </summary> + public enum BATCH_RANGEs + { + [Description("鏈鎿嶄綔")] + CurTrans = 0, + [Description("褰撳墠浠撳簱")] + CurWH = 1, + [Description("褰撳墠鍗曟嵁")] + Whole = 2, + } + + /// <summary> + /// 鏋氫妇锛氬鏂欐柟寮�(0Whole鏁村崟澶囨枡|1SideA/A闈㈠鏂檤2SideB/B闈㈠鏂�) + /// </summary> + public enum PREP_MODEs { - [Description("整单备料")] + [Description("鏁村崟澶囨枡")] Whole = 0, - [Description("A面备料")] + [Description("A闈㈠鏂�")] SideA = 1, - [Description("B面备料")] + [Description("B闈㈠鏂�")] SideB = 2, } /// <summary> - /// 枚举:发料方式(0Supply正常发料|1First首套发料) + /// 鏋氫妇锛氬彂鏂欐柟寮�(0Supply姝e父鍙戞枡|1First棣栧鍙戞枡) /// </summary> public enum DLVY_MODEs { - [Description("正常发料")] + [Description("姝e父鍙戞枡")] Supply = 0, - [Description("首套发料")] + [Description("棣栧鍙戞枡")] First = 1, } /// <summary> - /// 枚举:状态(0Init初始化|1Called已叫料|2WaitPick待捡料|3Picking捡料中|4Picked已捡完|5Sended已发料|6Close已关闭|7Cancel作废) + /// 鏋氫妇锛氱姸鎬�(0Init鍒濆鍖東1Called宸插彨鏂檤2WaitPick寰呮崱鏂檤3Picking鎹℃枡涓瓅4Picked宸叉崱瀹寍5Sended宸插彂鏂檤6Close宸插叧闂瓅7Cancel浣滃簾) /// </summary> public enum STATUSs { - [Description("初始化")] + [Description("鍒濆鍖�")] Init = 0, - [Description("已叫料")] + [Description("宸插彨鏂�")] Called = 1, - [Description("待捡料")] + [Description("寰呮崱鏂�")] WaitPick = 2, - [Description("捡料中")] + [Description("鎹℃枡涓�")] Picking = 3, - [Description("已捡完")] + [Description("宸叉崱瀹�")] Picked = 4, - [Description("已发料")] + [Description("宸插彂鏂�")] Sended = 5, - [Description("已关闭")] + [Description("宸插叧闂�")] Close = 6, - [Description("作废")] + [Description("浣滃簾")] Cancel = 7, } #endregion - #region 公共方法 + #region 鍏叡鏂规硶 #endregion diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_DTL.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_DTL.cs index 20f7759..d0e0643 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_DTL.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_DTL.cs @@ -176,14 +176,6 @@ public string FieldName { get; set; } */ [SugarColumn(IsIgnore = true)] - public string ERP_WH { get; set; } - [SugarColumn(IsIgnore = true)] - public string WH_ID { get; set; } - [SugarColumn(IsIgnore = true)] - public string REGION_ID { get; set; } - [SugarColumn(IsIgnore = true)] - public string SHELF_ID { get; set; } - [SugarColumn(IsIgnore = true)] public List<SuggestItem> Suggests { get; set; } #endregion diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs index a709798..cdb32ab 100644 --- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs +++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs @@ -37,7 +37,7 @@ /// 鍙戞枡鎵规 /// </summary> [DisplayName("鍙戞枡鎵规")] - public string ORDER_BATCH { get; set; } + public string DLVY_BATCH { get; set; } /// <summary> /// 鐗╁搧鏍囩 /// </summary> @@ -78,30 +78,50 @@ /// </summary> [DisplayName("鐘舵��(鍚學MS_ITEM鐘舵��)")] public int STATUS { get; set; } - /// <summary> - /// 鍙戞枡浠撳簱 - /// </summary> - [DisplayName("鍙戞枡浠撳簱")] - public string WH_CODE { get; set; } - /// <summary> - /// 鍙戞枡鍌ㄥ尯 - /// </summary> - [DisplayName("鍙戞枡鍌ㄥ尯")] - public string REGION_CODE { get; set; } - /// <summary> - /// 鍙戞枡璐ф灦/鏂欒溅 - /// </summary> - [DisplayName("鍙戞枡璐ф灦/鏂欒溅")] - public string SHELF_CODE { get; set; } - /// <summary> - /// 鍙戞枡鍌ㄤ綅 - /// </summary> - [DisplayName("鍙戞枡鍌ㄤ綅")] - public string LOCATION_CODE { get; set; } - /// <summary> - /// 涓嬫灦鏃堕棿 - /// </summary> - [DisplayName("涓嬫灦鏃堕棿")] + /// <summary> + /// 鍙戞枡浠撳簱ID + /// </summary> + [DisplayName("鍙戞枡浠撳簱ID")] + public string WH_ID { get; set; } + /// <summary> + /// 鍙戞枡浠撳簱 + /// </summary> + [DisplayName("鍙戞枡浠撳簱")] + public string WH_CODE { get; set; } + /// <summary> + /// 鍙戞枡鍌ㄥ尯ID + /// </summary> + [DisplayName("鍙戞枡鍌ㄥ尯ID")] + public string REGION_ID { get; set; } + /// <summary> + /// 鍙戞枡鍌ㄥ尯 + /// </summary> + [DisplayName("鍙戞枡鍌ㄥ尯")] + public string REGION_CODE { get; set; } + /// <summary> + /// 鍙戞枡璐ф灦/鏂欒溅ID + /// </summary> + [DisplayName("鍙戞枡璐ф灦/鏂欒溅ID")] + public string SHELF_ID { get; set; } + /// <summary> + /// 鍙戞枡璐ф灦/鏂欒溅 + /// </summary> + [DisplayName("鍙戞枡璐ф灦/鏂欒溅")] + public string SHELF_CODE { get; set; } + /// <summary> + /// 鍙戞枡鍌ㄤ綅ID + /// </summary> + [DisplayName("鍙戞枡鍌ㄤ綅ID")] + public string LOCATION_ID { get; set; } + /// <summary> + /// 鍙戞枡鍌ㄤ綅 + /// </summary> + [DisplayName("鍙戞枡鍌ㄤ綅")] + public string LOCATION_CODE { get; set; } + /// <summary> + /// 涓嬫灦鏃堕棿 + /// </summary> + [DisplayName("涓嬫灦鏃堕棿")] public DateTime DOWN_TIME { get; set; } = DateTime.MinValue; /// <summary> /// 鍑哄簱鏃堕棿 @@ -193,6 +213,16 @@ /// </summary> [DisplayName("澶囨敞")] public string REMARK { get; set; } + /// <summary> + /// 杩芥函ID + /// </summary> + [DisplayName("杩芥函ID")] + public string TRACE_ID { get; set; } + /// <summary> + /// 杩芥函淇℃伅 + /// </summary> + [DisplayName("杩芥函淇℃伅")] + public string TRACE_INFO { get; set; } #endregion #region 铏氭嫙灞炴�� diff --git a/Tiger.Model.Net/Entitys/WMS/V_ITEM_BIZ_ERP_RECEIPT_SN.cs b/Tiger.Model.Net/Entitys/WMS/V_ITEM_BIZ_ERP_RECEIPT_SN.cs index 0a47c86..aa72eb1 100644 --- a/Tiger.Model.Net/Entitys/WMS/V_ITEM_BIZ_ERP_RECEIPT_SN.cs +++ b/Tiger.Model.Net/Entitys/WMS/V_ITEM_BIZ_ERP_RECEIPT_SN.cs @@ -34,7 +34,7 @@ /// </summary> public string ITEM_CODE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM.cs b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM.cs index 23506fe..361789f 100644 --- a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM.cs +++ b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM.cs @@ -46,7 +46,7 @@ /// </summary> public string SN_TYPE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_A.cs b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_A.cs index d6c2f6e..8167edd 100644 --- a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_A.cs +++ b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_A.cs @@ -46,7 +46,7 @@ /// </summary> public string SN_TYPE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_D.cs b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_D.cs index 6da8ce1..ff80ca7 100644 --- a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_D.cs +++ b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_D.cs @@ -46,7 +46,7 @@ /// </summary> public string SN_TYPE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_HIS.cs b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_HIS.cs index 13c1583..e46e7e4 100644 --- a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_HIS.cs +++ b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_HIS.cs @@ -48,7 +48,7 @@ /// </summary> public string SN_TYPE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_X.cs b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_X.cs index b2763cb..d495d80 100644 --- a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_X.cs +++ b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_X.cs @@ -46,7 +46,7 @@ /// </summary> public string SN_TYPE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_Y.cs b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_Y.cs index 7f24072..66397d3 100644 --- a/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_Y.cs +++ b/Tiger.Model.Net/Entitys/WMS/V_WMS_ITEM_Y.cs @@ -46,7 +46,7 @@ /// </summary> public string SN_TYPE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/WMS_ITEM.cs b/Tiger.Model.Net/Entitys/WMS/WMS_ITEM.cs index c398bd2..9732beb 100644 --- a/Tiger.Model.Net/Entitys/WMS/WMS_ITEM.cs +++ b/Tiger.Model.Net/Entitys/WMS/WMS_ITEM.cs @@ -45,7 +45,7 @@ public string SN_TYPE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } @@ -204,7 +204,7 @@ #region 鏋氫妇鍙橀噺 /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public enum STATUSs { @@ -235,6 +235,9 @@ [Description("宸插彂鏂�")] Sended = 60, + [Description("琚帴鏀�")] + Received = 65, + [Description("宸蹭笂鏂�")] Loaded = 70, diff --git a/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_HIS.cs b/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_HIS.cs index 68019d2..7a6b4f0 100644 --- a/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_HIS.cs +++ b/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_HIS.cs @@ -74,7 +74,7 @@ /// </summary> public string SN_TYPE { get; set; } /// <summary> - /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) + /// 鍌ㄥ瓨鐘舵��(0NotExists涓嶅瓨鍦▅10Incoming閫佽揣涓瓅20WaitTest寰呮楠寍21Rejected闇�閫�璐30WaitIn寰呭叆搴搢40InStore鍦ㄥ簱|50OffShelf宸蹭笅鏋秥60Sended宸插彂鏂檤65Received琚帴鏀秥70Loaded宸蹭笂鏂檤80UseUp宸茶�楀敖|90Returned宸查��鏂檤100Shipped宸插嚭璐�) /// </summary> public int STATUS { get; set; } /// <summary> diff --git a/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs b/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs index 57d9b87..72c1180 100644 --- a/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs +++ b/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs @@ -7,235 +7,237 @@ namespace Tiger.Model { /// <summary> - /// 实体:备料库存池 + /// 瀹炰綋锛氬鏂欏簱瀛樻睜 /// </summary> [Description("Primary:ID")] - [DisplayName("备料库存池")] + [DisplayName("澶囨枡搴撳瓨姹�")] [Serializable] [SugarTable("WMS_ITEM_POOL")] public class WMS_ITEM_POOL : DbEntityNoGhostWithAuth { - #region 构造函数 + #region 鏋勯�犲嚱鏁� /// <summary> - /// 实体:备料库存池 + /// 瀹炰綋锛氬鏂欏簱瀛樻睜 /// </summary> public WMS_ITEM_POOL() {} #endregion - #region 公共属性 + #region 鍏叡灞炴�� /// <summary> - /// 事务ID + /// 浜嬪姟ID /// </summary> - [DisplayName("事务ID")] + [DisplayName("浜嬪姟ID")] public string TRANS_ID { get; set; } /// <summary> - /// 业务单据编码 + /// 涓氬姟鍗曟嵁缂栫爜 /// </summary> - [DisplayName("业务单据编码")] + [DisplayName("涓氬姟鍗曟嵁缂栫爜")] public string TRANS_CODE { get; set; } /// <summary> - /// 业务单据号码 + /// 涓氬姟鍗曟嵁鍙风爜 /// </summary> - [DisplayName("业务单据号码")] + [DisplayName("涓氬姟鍗曟嵁鍙风爜")] public string TRANS_NO { get; set; } /// <summary> - /// 业务单据行号 + /// 涓氬姟鍗曟嵁琛屽彿 /// </summary> - [DisplayName("业务单据行号")] + [DisplayName("涓氬姟鍗曟嵁琛屽彿")] public string TRANS_LINE { get; set; } /// <summary> - /// 来源单据编码 + /// 鏉ユ簮鍗曟嵁缂栫爜 /// </summary> - [DisplayName("来源单据编码")] + [DisplayName("鏉ユ簮鍗曟嵁缂栫爜")] public string SOURCE_CODE { get; set; } /// <summary> - /// 来源单据号码 + /// 鏉ユ簮鍗曟嵁鍙风爜 /// </summary> - [DisplayName("来源单据号码")] + [DisplayName("鏉ユ簮鍗曟嵁鍙风爜")] public string SOURCE_ORDER { get; set; } /// <summary> - /// 来源单据行号 + /// 鏉ユ簮鍗曟嵁琛屽彿 /// </summary> - [DisplayName("来源单据行号")] + [DisplayName("鏉ユ簮鍗曟嵁琛屽彿")] public string SOURCE_LINE { get; set; } /// <summary> - /// 备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先) + /// 澶囨枡绛栫暐锛堜綅鏍囧織鏋氫妇锛�(0None涓嶅惎鐢▅1FIFO鍏堣繘鍏堝嚭|2FSFO/灏炬暟浼樺厛) /// </summary> - [DisplayName("备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先)")] + [DisplayName("澶囨枡绛栫暐锛堜綅鏍囧織鏋氫妇锛�(0None涓嶅惎鐢▅1FIFO鍏堣繘鍏堝嚭|2FSFO/灏炬暟浼樺厛)")] public int STRATEGY { get; set; } /// <summary> - /// 发料方式(0Supply正常发料|1First首套发料) + /// 鍙戞枡鏂瑰紡(0Supply姝e父鍙戞枡|1First棣栧鍙戞枡) /// </summary> - [DisplayName("发料方式(0Supply正常发料|1First首套发料)")] + [DisplayName("鍙戞枡鏂瑰紡(0Supply姝e父鍙戞枡|1First棣栧鍙戞枡)")] public int DLVY_MODE { get; set; } /// <summary> - /// 是否被锁定(Y/N),锁定则不允许其他事务分配当前物料 + /// 鏄惁琚攣瀹�(Y/N)锛岄攣瀹氬垯涓嶅厑璁稿叾浠栦簨鍔″垎閰嶅綋鍓嶇墿鏂� /// </summary> - [DisplayName("是否被锁定(Y/N),锁定则不允许其他事务分配当前物料")] + [DisplayName("鏄惁琚攣瀹�(Y/N)锛岄攣瀹氬垯涓嶅厑璁稿叾浠栦簨鍔″垎閰嶅綋鍓嶇墿鏂�")] public string IS_LOCKED { get; set; } /// <summary> - /// 物料编码 + /// 鐗╂枡缂栫爜 /// </summary> - [DisplayName("物料编码")] + [DisplayName("鐗╂枡缂栫爜")] public string ITEM_CODE { get; set; } /// <summary> - /// 物料条码 + /// 鐗╂枡鏉$爜 /// </summary> - [DisplayName("物料条码")] + [DisplayName("鐗╂枡鏉$爜")] public string SN { get; set; } /// <summary> - /// 物料数量 + /// 鐗╂枡鏁伴噺 /// </summary> - [DisplayName("物料数量")] + [DisplayName("鐗╂枡鏁伴噺")] public double QTY { get; set; } /// <summary> - /// 已分配数量 + /// 宸插垎閰嶆暟閲� /// </summary> - [DisplayName("已分配数量")] + [DisplayName("宸插垎閰嶆暟閲�")] public double ALLOC_QTY { get; set; } /// <summary> - /// 生产日期 + /// 鐢熶骇鏃ユ湡 /// </summary> - [DisplayName("生产日期")] + [DisplayName("鐢熶骇鏃ユ湡")] public DateTime PROD_DATE { get; set; } = DateTime.MinValue; /// <summary> - /// 仓库ID + /// 浠撳簱ID /// </summary> - [DisplayName("仓库ID")] + [DisplayName("浠撳簱ID")] public string WH_ID { get; set; } /// <summary> - /// 储区ID + /// 鍌ㄥ尯ID /// </summary> - [DisplayName("储区ID")] + [DisplayName("鍌ㄥ尯ID")] public string REGION_ID { get; set; } /// <summary> - /// 货架/料车ID + /// 璐ф灦/鏂欒溅ID /// </summary> - [DisplayName("货架/料车ID")] + [DisplayName("璐ф灦/鏂欒溅ID")] public string SHELF_ID { get; set; } /// <summary> - /// 储位ID + /// 鍌ㄤ綅ID /// </summary> - [DisplayName("储位ID")] + [DisplayName("鍌ㄤ綅ID")] public string LOCATION_ID { get; set; } /// <summary> - /// 是否首套料(Y/N) + /// 鏄惁棣栧鏂�(Y/N) /// </summary> - [DisplayName("是否首套料(Y/N)")] + [DisplayName("鏄惁棣栧鏂�(Y/N)")] public string IS_FIRST { get; set; } /// <summary> - /// 分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) + /// 鍒嗛厤鐘舵��(0AllAllocated鍏ㄩ儴鍒嗛厤|1PartialAllocate閮ㄥ垎鍒嗛厤) /// </summary> - [DisplayName("分配状态(0AllAllocated全部分配|1PartialAllocate部分分配)")] + [DisplayName("鍒嗛厤鐘舵��(0AllAllocated鍏ㄩ儴鍒嗛厤|1PartialAllocate閮ㄥ垎鍒嗛厤)")] public int ALLOC_MODE { get; set; } /// <summary> - /// 状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废) + /// 鐘舵��(0WaitPick寰呮崱鏂檤1Picking鎹℃枡涓瓅2WaitSend寰呭彂鏂檤3Sended宸插彂鏂檤4Close宸插叧闂瓅5Cancel浣滃簾) /// </summary> - [DisplayName("状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废)")] + [DisplayName("鐘舵��(0WaitPick寰呮崱鏂檤1Picking鎹℃枡涓瓅2WaitSend寰呭彂鏂檤3Sended宸插彂鏂檤4Close宸插叧闂瓅5Cancel浣滃簾)")] public int STATUS { get; set; } /// <summary> - /// 加工段 + /// 鍔犲伐娈� /// </summary> - [DisplayName("加工段")] + [DisplayName("鍔犲伐娈�")] public string SEGMENT { get; set; } /// <summary> - /// 目标产线编码 + /// 鐩爣浜х嚎缂栫爜 /// </summary> - [DisplayName("目标产线编码")] + [DisplayName("鐩爣浜х嚎缂栫爜")] public string LINE_CODE { get; set; } /// <summary> - /// 备注 + /// 澶囨敞 /// </summary> - [DisplayName("备注")] + [DisplayName("澶囨敞")] public string REMARK { get; set; } #endregion - #region 虚拟属性 - /*例子 + #region 铏氭嫙灞炴�� + /*渚嬪瓙 [SugarColumn(IsIgnore = true)] public string FieldName { get; set; } */ #endregion - #region 外键属性 - /*例子 - //一对一外键导航 - [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//一对一 ClassAId是WMS_ITEM_POOL类里面的外键ID字段 - public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null - //一对多外键导航 - [Navigate(NavigateType.OneToMany, nameof(ClassA.WMS_ITEM_POOLId))]//ClassA表中的WMS_ITEM_POOLId - public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null - //多对多外键导航 - [Navigate(typeof(MappingClass), nameof(MappingClass.WMS_ITEM_POOLId), nameof(MappingClass.ClassAId))]//注意顺序 - public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null + #region 澶栭敭灞炴�� + /*渚嬪瓙 + //涓�瀵逛竴澶栭敭瀵艰埅 + [Navigate(NavigateType.OneToOne, nameof(ClassAId))]//涓�瀵逛竴 ClassAId鏄疻MS_ITEM_POOL绫婚噷闈㈢殑澶栭敭ID瀛楁 + public ClassA ClassA { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull + //涓�瀵瑰澶栭敭瀵艰埅 + [Navigate(NavigateType.OneToMany, nameof(ClassA.WMS_ITEM_POOLId))]//ClassA琛ㄤ腑鐨刉MS_ITEM_POOLId + public List<ClassA> ClassAList { get; set; }//娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull + //澶氬澶氬閿鑸� + [Navigate(typeof(MappingClass), nameof(MappingClass.WMS_ITEM_POOLId), nameof(MappingClass.ClassAId))]//娉ㄦ剰椤哄簭 + public List<ClassA> ClassAList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull */ #endregion - #region 枚举变量 - /*例子 + #region 鏋氫妇鍙橀噺 + /*渚嬪瓙 public enum FieldNames { - [Description("枚举描述0")] + [Description("鏋氫妇鎻忚堪0")] Enum0, - [Description("枚举描述1")] + [Description("鏋氫妇鎻忚堪1")] Enum1, } */ /// <summary> - /// 枚举:备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先) + /// 鏋氫妇锛氬鏂欑瓥鐣ワ紙浣嶆爣蹇楁灇涓撅級(0None涓嶅惎鐢▅1FIFO鍏堣繘鍏堝嚭|2FSFO/灏炬暟浼樺厛) /// </summary> public enum STRATEGYs { - [Description("先进先出")] + [Description("涓嶅惎鐢�")] + None = 0, + [Description("鍏堣繘鍏堝嚭")] FIFO = 1, - [Description("尾数优先")] + [Description("灏炬暟浼樺厛")] FSFO = 2, } /// <summary> - /// 枚举:发料方式(0Supply正常发料|1First首套发料) + /// 鏋氫妇锛氬彂鏂欐柟寮�(0Supply姝e父鍙戞枡|1First棣栧鍙戞枡) /// </summary> public enum DLVY_MODEs { - [Description("正常发料")] + [Description("姝e父鍙戞枡")] Supply = 0, - [Description("首套发料")] + [Description("棣栧鍙戞枡")] First = 1, } /// <summary> - /// 枚举:分配状态(0AllAllocated全部分配|1PartialAllocate部分分配) + /// 鏋氫妇锛氬垎閰嶇姸鎬�(0AllAllocated鍏ㄩ儴鍒嗛厤|1PartialAllocate閮ㄥ垎鍒嗛厤) /// </summary> public enum ALLOC_MODEs { - [Description("全部分配")] + [Description("鍏ㄩ儴鍒嗛厤")] AllAllocated = 0, - [Description("部分分配")] + [Description("閮ㄥ垎鍒嗛厤")] PartialAllocate = 1, } /// <summary> - /// 枚举:状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废) + /// 鏋氫妇锛氱姸鎬�(0WaitPick寰呮崱鏂檤1Picking鎹℃枡涓瓅2WaitSend寰呭彂鏂檤3Sended宸插彂鏂檤4Close宸插叧闂瓅5Cancel浣滃簾) /// </summary> public enum STATUSs { - [Description("待捡料")] + [Description("寰呮崱鏂�")] WaitPick = 0, - [Description("捡料中")] + [Description("鎹℃枡涓�")] Picking = 1, - [Description("待发料")] + [Description("寰呭彂鏂�")] WaitSend = 2, - [Description("已发料")] + [Description("宸插彂鏂�")] Sended = 3, - [Description("已关闭")] + [Description("宸插叧闂�")] Close = 4, - [Description("作废")] + [Description("浣滃簾")] Cancel = 5, } #endregion - #region 公共方法 + #region 鍏叡鏂规硶 #endregion -- Gitblit v1.9.3