From 806b3cb3448ad15a5d563937fdac2ffae37342a7 Mon Sep 17 00:00:00 2001
From: YangYuGang <1378265336@qq.com>
Date: 星期三, 23 四月 2025 22:11:25 +0800
Subject: [PATCH] Merge branch 'master' of http://47.115.28.255:8110/r/TigerClouds-Tech/Server/TigerApi6_2024

---
 Tiger.Business.MES/iERP/U9C_MES.cs                      |   15 +
 Tiger.Business.WMS/Transaction/Yada/Print_BIZ_U9_ASN.cs |   57 +++++--
 Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs            |  284 +++++++++++++++++++++++------------
 Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_DTL.cs      |    2 
 Tiger.Api/Language.db                                   |    0 
 Tiger.Business.WMS/Extensions/Yada/OutExtension.cs      |   12 +
 Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs |   23 ++
 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs             |    8 
 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_DTL.cs     |   33 +++-
 9 files changed, 296 insertions(+), 138 deletions(-)

diff --git a/Tiger.Api/Language.db b/Tiger.Api/Language.db
index d73a9a9..7b31385 100644
--- a/Tiger.Api/Language.db
+++ b/Tiger.Api/Language.db
Binary files differ
diff --git a/Tiger.Business.MES/iERP/U9C_MES.cs b/Tiger.Business.MES/iERP/U9C_MES.cs
index 5f517ad..c10ace7 100644
--- a/Tiger.Business.MES/iERP/U9C_MES.cs
+++ b/Tiger.Business.MES/iERP/U9C_MES.cs
@@ -31,11 +31,11 @@
         public ApiAction GetBasItem(U9C_Base_Input input)
         {
             var action = new ApiAction();
+            var db = Biz.Db;
             Logger.Scheduler.Info($"鐗╂枡淇℃伅寮�濮嬪悓姝ャ�傘�傘�傛暟鎹鏌ヨ繘琛屼腑銆傘�傘��");
             Logger.Scheduler.Info($"{input.triggerDetail}");
-            DbClient db = Biz.DataSource["YadaU9C"].Client;
-            var list = db.Queryable<dynamic>().AS("mes_ItemMaster").Where("ModifiedOn > @startTime And ModifiedOn < @endTime", new { startTime = input.startTime, endTime = input.endTime }).ToList();
-            var orgs = Biz.Db.Queryable<SYS_ORGANIZATION>().ToList();
+            var list = Biz.DataSource["YadaU9C"].Client.Queryable<dynamic>().AS("mes_ItemMaster").Where("ModifiedOn > @startTime And ModifiedOn < @endTime", new { startTime = input.startTime, endTime = input.endTime }).ToList();
+            var orgs = db.Queryable<SYS_ORGANIZATION>().ToList();
             List<BAS_ITEM> items = new();
             var itemExts = new List<BAS_ITEM_EXT>();
             if (list != null && list.Count > 0)
@@ -67,6 +67,13 @@
                             RULE_CODE = di["BarRule"] == null ? "" : di["BarRule"].ToString(),
                             DEFAULT_LOCATION = di["BinCode"] == null ? "" : di["BinCode"].ToString(),
                         };
+                        var whUnit = db.Queryable<V_WH_UNIT>().Where(t => t.LOCATION_CODE == basItem.DEFAULT_LOCATION && t.AUTH_ORG == basItem.AUTH_ORG).First();
+                        if (!whUnit.IsNullOrEmpty())
+                        {
+                            basItem.DEFAULT_WH = whUnit.WH_CODE;
+                            basItem.DEFAULT_REGION = whUnit.REGION_CODE;
+                            basItem.DEFAULT_SHELF = whUnit.SHELF_CODE;
+                        }
                         items.Add(basItem);
                         var extInfo = new BAS_ITEM_EXT()
                         {
@@ -88,7 +95,7 @@
                 }
             }
             Logger.Scheduler.Info($"鐗╂枡淇℃伅瀛樺叆瀹炰綋涓紝鎬绘暟锛歔{items.Count}]");
-            db = Biz.Db;
+
             //var dbTran = db.UseTran(() =>
             //{
             if (items.Any())
diff --git a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs
index c66af5a..425f56c 100644
--- a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs
+++ b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs
@@ -12,8 +12,6 @@
 using Tiger.Model.Base;
 using Tiger.Model.Entitys.MES.U9C;
 using Tiger.Model.MES.Yada;
-using static IronPython.SQLite.PythonSQLite;
-using static Microsoft.Scripting.Hosting.Shell.ConsoleHostOptions;
 
 namespace Tiger.Business.WMS.Extensions
 {
@@ -37,6 +35,8 @@
                     return nameof(BIZ_MES_WO);
                 case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing:
                     return nameof(BIZ_U9_SCM_OUT);
+                case BIZ_WMS_PREP.BIZ_TYPEs.Transfer:
+                    return nameof(BIZ_WMS_TRANSFER);
                 case BIZ_WMS_PREP.BIZ_TYPEs.Requisition:
                 default:
                     return "";
@@ -73,6 +73,12 @@
                         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;
@@ -93,6 +99,7 @@
                 case BIZ_WMS_PREP.BIZ_TYPEs.Others:
                 case BIZ_WMS_PREP.BIZ_TYPEs.WorkOrder:
                 case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing:
+                case BIZ_WMS_PREP.BIZ_TYPEs.Transfer:
                 case BIZ_WMS_PREP.BIZ_TYPEs.Requisition:
                 default:
                     return dtl.QTY_REQ;
@@ -116,6 +123,7 @@
                     return await CreateIssueDoc(trans, input);
                 case BIZ_WMS_PREP.BIZ_TYPEs.Outsourcing:
                     return await CreatePMIssueDoc(trans, input);
+                case BIZ_WMS_PREP.BIZ_TYPEs.Transfer:
                 case BIZ_WMS_PREP.BIZ_TYPEs.Requisition:
                 default:
                     throw new NotImplementedException($"鍙戞枡鍗曟嵁绫诲瀷[{type.GetDesc()}]鏈疄鐜癊RP鎺ュ彛璋冪敤");
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 ab6b7ef..243c7dc 100644
--- a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs
+++ b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs
@@ -415,6 +415,14 @@
                     action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemIsLock", inv.CurPkg.SN);
                     return SetOutPutMqttMsg(action, input.Locale);
                 }
+                //楠岃瘉鏉$爜鏄惁琚叾浠栫敤鎴峰拰鍗曟嵁閿佸畾
+                if (inv.Items.Any(q => q.IS_LOCKED == "Y"))
+                {
+                    action.IsSuccessed = false;
+                    //action.LocaleMsg = Biz.L("鏉$爜[{0}]宸茶閿佸畾锛岃閲嶆柊鎵弿");
+                    action.LocaleMsg = Biz.L("WMS.Default.ScanItem.ItemIsLock", inv.CurPkg.SN);
+                    return SetOutPutMqttMsg(action, input.Locale);
+                }
                 //鍌ㄤ綅楠岃瘉
                 if (inv.Location.IsNullOrEmpty())
                 {
@@ -432,13 +440,22 @@
                     return SetOutPutMqttMsg(action, input.Locale);
                 }
                 //鍒ゆ柇鏄惁鍦ㄥ鏂欎腑鐨勭墿鏂�
-                if (!CurPREP.Order.Details.Any(q => q.ITEM_CODE == inv.ItemInfo.ITEM_CODE))
+                if (inv.ItemInfo.ITEM_CODE != CurPrepDtl.ITEM_CODE)
                 {
                     action.IsSuccessed = false;
-                    //action.LocaleMsg = Biz.L($"褰撳墠澶囨枡浠诲姟[{0}]涓嶅寘鍚潯鐮乕{1}]鐨勭墿鏂欑紪鐮乕{2}]锛岃鏀惧洖鍘熷偍浣�");
-                    action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NoNeedItemCode", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode));
+                    //action.LocaleMsg = Biz.L($"鏉$爜[{0}]涓嶆槸褰撳墠閫変腑鐨勭墿鏂欒[{1}]锛岃鏀惧洖鍘熷偍浣嶆垨鑰呴噸鏂伴�夋嫨涓嬫灦鐗╂枡琛�");
+                    action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NoNeedItemCode", inv.CurPkg.SN, CurPrepDtl.ITEM_CODE);
                     return action;
                 }
+                //鍒ゆ柇鏄惁鍦ㄥ鏂欎腑鐨勭墿鏂�
+                //if (!CurPREP.Order.Details.Any(q => q.ITEM_CODE == inv.ItemInfo.ITEM_CODE))
+                //{
+                //    action.IsSuccessed = false;
+                //    //action.LocaleMsg = Biz.L($"褰撳墠澶囨枡浠诲姟[{0}]涓嶅寘鍚潯鐮乕{1}]鐨勭墿鏂欑紪鐮乕{2}]锛岃鏀惧洖鍘熷偍浣�");
+                //    action.LocaleMsg = Biz.L("WMS.Out_BIZ_WMS_PREP.ScanItem.NoNeedItemCode", inv.ItemInfo.ITEM_CODE.IsNullOrEmpty(inv.Barcode.ItemCode));
+                //    return action;
+                //}
+                
                 //ProcessingOrderDetail = input.SN;
                 //if (WMSContext.TransactionDic.Where(q => !string.IsNullOrWhiteSpace(q.Value.ProcessingSn)).Any(q => q.Value.ProcessingSn == ProcessingSn && q.Value.TransID != this.TransID))
                 //{
diff --git a/Tiger.Business.WMS/Transaction/Yada/Print_BIZ_U9_ASN.cs b/Tiger.Business.WMS/Transaction/Yada/Print_BIZ_U9_ASN.cs
index aad7928..4e2370d 100644
--- a/Tiger.Business.WMS/Transaction/Yada/Print_BIZ_U9_ASN.cs
+++ b/Tiger.Business.WMS/Transaction/Yada/Print_BIZ_U9_ASN.cs
@@ -44,6 +44,7 @@
         private List<BIZ_U9_ASN_SN> CurSn = new();
         List<string> SnList = new();
         private string rcvDocType = "RCV03"; //榛樿鏃犲崟
+        private string CurReqType = "0"; 
         #endregion
 
         #region Functions
@@ -140,9 +141,9 @@
             var action = new ApiAction<ScanOutput>(new ScanOutput());
             try
             {
-                var reqType = input.Options["reqType"].ToString();
+                CurReqType = input.Options["reqType"].ToString();
                 rcvDocType = "RCV01";
-                if (reqType != "1")
+                if (CurReqType != "1")
                 {
                     action.IsSuccessed = false;
                     action.LocaleMsg = Biz.L($"涓嶆槸闅忓崟璧犲搧锛屼笉鐢ㄦ壂鎻忔潯鐮�");
@@ -166,17 +167,17 @@
                 if (CurSn.Count > 0 && _sns.Any())
                 {
                     action.LocaleMsg = Biz.L($"鎵规[{AsnSn.LOTNO}]宸茬粡鎻愪氦锛岃缁х画涓嬩竴姝ユ搷浣�");
-                    var _Order = await MainDB.Queryable<BIZ_U9_ASN>().Where(q => q.ORDER_NO == _sns[0].ORDER_NO).Includes(q => q.Details, d => d._ItemInfos).IncludesAllFirstLayer().FirstAsync();
-                    if (_Order == null)
+                    CurOrder = await MainDB.Queryable<BIZ_U9_ASN>().Where(q => q.ORDER_NO == _sns[0].ORDER_NO).Includes(q => q.Details, d => d._ItemInfos).IncludesAllFirstLayer().FirstAsync();
+                    if (CurOrder == null)
                     {
                         action.IsSuccessed = false;
-                        action.LocaleMsg = Biz.L($"鏌ヤ笉鍒癆SN鍗昜{_Order.ORDER_NO}]鐨勬暟鎹�");
+                        action.LocaleMsg = Biz.L($"鏌ヤ笉鍒癆SN鍗昜{CurOrder.ORDER_NO}]鐨勬暟鎹�");
                         return action;
                     }
-                    _Order.Details = _Order.Details.Where(q => _sns[0].LINE_NO == q.LINE_NO).ToList();
+                    CurOrder.Details = CurOrder.Details.Where(q => _sns[0].LINE_NO == q.LINE_NO).ToList();
                     SnList.AddRange(_sns.Select(q => q.SN).ToList());
-                    _Order.BarcodeList = SnList;
-                    action.Data.Data = _Order;
+                    CurOrder.BarcodeList = SnList;
+                    action.Data.Data = CurOrder;
                     return action;
                 }
                 if (CurSn.Any(q=> q.ORDER_NO == AsnSn.ORDER_NO && q.LINE_NO == AsnSn.LINE_NO))
@@ -186,11 +187,14 @@
                     return action;
                 }
                 CurSn.Add(AsnSn);
-                var _order = CurOrder.Clone();
-                CurOrder.ORDER_NO = $"WASN{DateTime.Now.ToString("yyyyMMddHHmmss")}";
-                _order.Details = _order.Details.Where(q => CurSn.Any(s => s.LINE_NO == q.LINE_NO)).ToList();
+                if (!CurOrder.ORDER_NO.StartsWith("WASN"))
+                {
+                    CurOrder.ORDER_NO = $"WASN{DateTime.Now.ToString("yyyyMMddHHmmss")}";
+                    CurOrder.STATUS = BIZ_U9_ASN.STATUSs.Arrived.GetValue();
+                }
+                CurOrder.Details = CurOrder.Details.Where(q => CurSn.Any(s => s.LINE_NO == q.LINE_NO)).ToList();
                 action.LocaleMsg = Biz.L($"鎴愬姛鑾峰彇ASN鍗昜{AsnSn.ORDER_NO}]鐨勪俊鎭�");
-                action.Data.Data = _order;
+                action.Data.Data = CurOrder;
             }
             catch (Exception ex)
             {
@@ -212,14 +216,26 @@
             try
             {
                 var reqType = input.Options["reqType"].ToString();
+                //濡傛灉绫诲瀷涓嶄竴鏍凤紝鍒欐竻闄urOrder
+                if (CurReqType != reqType) {
+                    CurOrder = null;
+                    CurReqType = reqType;
+                }
                 var dtl = input.Options["record"].ToString().JsonToObject<BIZ_U9_ASN_DTL>();
                 CurOrder = CurOrder??new() { 
+                    ORDER_NO= $"WASN{DateTime.Now.ToString("yyyyMMddHHmmss")}",
                     SUPP_CODE = dtl.SUPP_CODE,
                     DELIVERY_DATE = DateTime.Now,
                     PLANARRIVED_DATE = DateTime.Now,
                     AUTH_ORG = OrgCode,
                 };
-                CurOrder.ORDER_NO = $"WASN{DateTime.Now.ToString("yyyyMMddHHmmss")}";
+                if (!CurOrder.ORDER_NO.IsNullOrEmpty() && CurOrder.ORDER_NO.StartsWith("WASN") && CurOrder.STATUS == BIZ_U9_ASN.STATUSs.Counting.GetValue())
+                {
+                    action.IsSuccessed = false;
+                    action.LocaleMsg = Biz.L($"宸茬粡鐢熸垚ASN鍗昜{CurOrder.ORDER_NO}]锛岃缁х画涓嬩竴姝ユ搷浣�");
+                    return action;
+                }
+
                 dtl.UPDATE_USER = $"GenerateASN_{UserCode}";
                 dtl.REMARK = CurSn.Where(q => q.ORDER_NO == dtl.ORDER_NO && q.LINE_NO == dtl.LINE_NO).FirstOrDefault()?.SN;
                 dtl.ORDER_NO = CurOrder.ORDER_NO;
@@ -244,6 +260,7 @@
                 _dtl.ID = Guid.NewGuid().ToString("N");
                 _dtl.IS_GIFT = reqType == "1" ? "Y" : "N";
                 _dtl.AUTH_ORG = CurOrder.AUTH_ORG;
+                _dtl.LINE_NO = _dtl.LINE_NO ?? "10";
                 input.Options["record"] = _dtl.ToJson();
                 var _Asn = Asn.Clone();
                 AddCommitAction("GenerateASN", () =>
@@ -282,10 +299,12 @@
                 var dtl = input.Options["record"].ToString().JsonToObject<BIZ_U9_ASN_DTL>();
                 action.LocaleMsg = Biz.L($"鎴愬姛鎻愪氦ASN鍗昜{dtl.ORDER_NO}]琛屾暟鎹紝璇风偣鍑绘墦鍗版寜閽墦鍗版爣绛�");
 
-                if (MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.ORDER_NO == dtl.ORDER_NO && q.LINE_NO == dtl.LINE_NO && (q.STATUS == WMS_ITEM.STATUSs.Counted.GetValue() || q.STATUS == WMS_ITEM.STATUSs.Rejected.GetValue())).Sum(q => q.QTY) == dtl.QTY)
+                var asnSn = MainDB.Queryable<BIZ_U9_ASN_SN>().Where(q => q.ORDER_NO == dtl.ORDER_NO && q.LINE_NO == dtl.LINE_NO && (q.STATUS == WMS_ITEM.STATUSs.Counted.GetValue() || q.STATUS == WMS_ITEM.STATUSs.Rejected.GetValue())).ToList();
+                if (asnSn.Count>0 && asnSn.Sum(q => q.QTY) == dtl.QTY)
                 {
                     action.IsSuccessed = false;
                     action.LocaleMsg = dtl.ORDER_NO.IsNullOrEmpty() ? Biz.L($"鏁版嵁涓嶅瓨鍦紒") : Biz.L($"ASN鍗昜{dtl.ORDER_NO}]琛孾{dtl.LINE_NO}]鏁版嵁宸插叏閮ㄦ彁浜ゅ畬鎴愶紝濡傛灉鏈墦鍗版爣绛捐鐐瑰嚮鎵撳嵃鎸夐挳鎵撳嵃鏍囩");
+                    SnList.AddRange(asnSn.Select(q=>q.SN));
                     return action;
                 }
                 List<BIZ_U9_ASN_SN> sns = new();
@@ -296,7 +315,8 @@
                 SnList.Clear();
                 foreach (var sn in snlist)
                 {
-                    var metaSn = DI.Resolve<ICodeRuleCache>()["NoSourceBarcode"]?.Generate($"{sn.SN}").Data.ToString() ?? "";
+                    var strs = sn.SN.Split('/');
+                    var metaSn = reqType == "2" ? $"{DI.Resolve<ICodeRuleCache>()["SampleBarcode"]?.Generate(strs[0],"/", strs[1], "/").Data.ToString() ?? ""}" : DI.Resolve<ICodeRuleCache>()["NoSourceBarcode"]?.Generate($"{sn.SN}").Data.ToString() ?? "";
                     SnList.Add(metaSn);
                     var barcode = new Barcode(metaSn);
                     BIZ_U9_ASN_SN info = new()
@@ -364,6 +384,7 @@
                 {
                     sn.STATUS = WMS_ITEM.STATUSs.Counted.GetValue();
                 }
+                CurOrder.STATUS = BIZ_U9_ASN.STATUSs.Counting.GetValue();
 
                 AddCommitAction("CountedAndPrint", () =>
                 {
@@ -404,7 +425,7 @@
         public async Task<ApiAction> GenerateReceipt(BaseInput input)
         {
             var action = new ApiAction();
-            var orderNo = input.Data;
+            var orderNo = CurOrder.ORDER_NO;
             try
             {
                 var reqType = input.Options["reqType"].ToString();
@@ -614,6 +635,8 @@
                     order.STATUS = BIZ_U9_ASN.STATUSs.Finished.GetValue();
                     order.RECEIVER = UserCode;
                     order.RECEIVE_DATE = DateTime.Now;
+                    order.UPDATE_USER = UserCode;
+                    order.REMARK = "";
                 }
 
                 //浣跨敤缁熶竴鐨勪簨鍔B瀵硅薄
@@ -665,7 +688,7 @@
             doAfterSave?.Invoke();
 
             // 杩斿洖鏁版嵁
-            action.Data.Data = SnList;
+            action.Data.Data = new { OrderNo = CurOrder.ORDER_NO, Sns = SnList };
 
             //action.LocaleMsg = Biz.L($"鏉$爜[{0}]娓呯偣鎴愬姛锛�");
             //action.LocaleMsg = Biz.L("WMS.Count_BIZ_U9_ASN.CountSuccess", string.Join(",", SnList));
diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_DTL.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_DTL.cs
index f4d1014..cfbd226 100644
--- a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_DTL.cs
+++ b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_DTL.cs
@@ -155,7 +155,7 @@
                 AUTH_ORG = AUTH_ORG,
                 ITEM_CODE = ITEM_CODE,
                 UNIT = UNIT,
-                SOURCE_CODE = nameof(BIZ_U9_SCM_OUT),
+                SOURCE_CODE = nameof(BIZ_U9_MISC_OUT),
                 SOURCE_ORDER = ORDER_NO,
                 SOURCE_LINE = LINE_NO,
                 QTY_REQ = QTY,
diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs
index d7dbb93..43389ff 100644
--- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs
+++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP.cs
@@ -141,9 +141,11 @@
 			Requisition = 1,
 			[Description("宸ュ崟澶囨枡")]
 			WorkOrder = 2,
-			[Description("濮斿澶囨枡")]
-			Outsourcing = 3,
-		}
+            [Description("濮斿澶囨枡")]
+            Outsourcing = 3,
+            [Description("璋冩嫧澶囨枡")]
+            Transfer = 4,
+        }
 
 		/// <summary>
 		/// 鏋氫妇锛氱姸鎬�(0Init鍒濆鍖東1Called宸插彨鏂檤2WaitPick寰呮崱鏂檤3Picking鎹℃枡涓瓅4Picked宸叉崱瀹寍5Sended宸插彂鏂檤6Close宸插叧闂瓅7Cancel浣滃簾)
diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_DTL.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_DTL.cs
index 058d424..c6fbd36 100644
--- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_DTL.cs
+++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_DTL.cs
@@ -3,6 +3,7 @@
 using System.Linq;
 using System.ComponentModel;
 using System.Collections.Generic;
+using Tiger.Model.Base;
 
 namespace Tiger.Model
 {
@@ -13,8 +14,8 @@
 	[DisplayName("璋冩嫧鍗�(WMS)鏄庣粏")]
 	[Serializable]
 	[SugarTable("BIZ_WMS_TRANSFER_DTL")]
-	public class BIZ_WMS_TRANSFER_DTL : DbEntityWithAuth
-	{
+	public class BIZ_WMS_TRANSFER_DTL : DbEntityWithAuth, iPrepPickItem
+    {
 		#region 鏋勯�犲嚱鏁�
 		/// <summary>
 		/// 瀹炰綋锛氳皟鎷ㄥ崟(WMS)鏄庣粏
@@ -145,8 +146,8 @@
         public BAS_ITEM ItemInfo => _ItemInfos?.FirstOrDefault(q => q.AUTH_ORG == AUTH_ORG);
         #endregion
 
-		#region 鏋氫妇鍙橀噺
-		/*渚嬪瓙
+        #region 鏋氫妇鍙橀噺
+        /*渚嬪瓙
 		public enum FieldNames
 		{
 			[Description("鏋氫妇鎻忚堪0")]
@@ -155,11 +156,25 @@
 			Enum1,
 		}
 		*/
-		#endregion
+        #endregion
 
-		#region 鍏叡鏂规硶
+        #region 鍏叡鏂规硶
+        public BIZ_WMS_PREP_SRC_DTL GetPickItem()
+        {
+            return new BIZ_WMS_PREP_SRC_DTL()
+            {
+                Source = this,
+                AUTH_ORG = AUTH_ORG,
+                ITEM_CODE = ITEM_CODE,
+                UNIT = UNIT,
+                SOURCE_CODE = nameof(BIZ_WMS_TRANSFER),
+                SOURCE_ORDER = ORDER_NO,
+                SOURCE_LINE = ORDER_LINE,
+                QTY_REQ = QTY_REQ,
+                QTY_ACT_REQ = QTY_REQ - QTY_OUT,
+            };
+        }
+        #endregion
 
-		#endregion
-
-	}//endClass
+    }//endClass
 }
\ No newline at end of file
diff --git a/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs b/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs
index f4a0660..57d9b87 100644
--- a/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs
+++ b/Tiger.Model.Net/Entitys/WMS/WMS_ITEM_POOL.cs
@@ -7,151 +7,237 @@
 namespace Tiger.Model
 {
 	/// <summary>
-	/// 瀹炰綋锛氬鏂欏簱瀛樻睜
+	/// 实体:备料库存池
 	/// </summary>
 	[Description("Primary:ID")]
+	[DisplayName("备料库存池")]
 	[Serializable]
 	[SugarTable("WMS_ITEM_POOL")]
 	public class WMS_ITEM_POOL : DbEntityNoGhostWithAuth
-    {
-		#region 鏋勯�犲嚱鏁�
+	{
+		#region 构造函数
 		/// <summary>
-		/// 瀹炰綋锛氬鏂欏簱瀛樻睜
+		/// 实体:备料库存池
 		/// </summary>
 		public WMS_ITEM_POOL() {}
-        #endregion
+		#endregion
 
-        #region 鍏叡灞炴��
-        /// <summary>
-        /// 涓氬姟鍗曟嵁缂栫爜
-        /// </summary>
-        public string TRANS_CODE { get; set; }
-        /// <summary>
-        /// 涓氬姟鍗曟嵁鍙风爜
-        /// </summary>
-        public string TRANS_NO { get; set; }
-        /// <summary>
-        /// 涓氬姟鍗曟嵁琛屽彿
-        /// </summary>
-        public string TRANS_LINE { get; set; }
-        /// <summary>
-        /// 鏉ユ簮鍗曟嵁缂栫爜
-        /// </summary>
-        public string SOURCE_CODE { get; set; }
-        /// <summary>
-        /// 鏉ユ簮鍗曟嵁鍙风爜
-        /// </summary>
-        public string SOURCE_ORDER { get; set; }
-        /// <summary>
-        /// 鏉ユ簮鍗曟嵁琛屽彿
-        /// </summary>
-        public string SOURCE_LINE { get; set; }
+		#region 公共属性
 		/// <summary>
-		/// 鐗╂枡缂栫爜
+		/// 事务ID
 		/// </summary>
+		[DisplayName("事务ID")]
+		public string TRANS_ID { get; set; }
+		/// <summary>
+		/// 业务单据编码
+		/// </summary>
+		[DisplayName("业务单据编码")]
+		public string TRANS_CODE { get; set; }
+		/// <summary>
+		/// 业务单据号码
+		/// </summary>
+		[DisplayName("业务单据号码")]
+		public string TRANS_NO { get; set; }
+		/// <summary>
+		/// 业务单据行号
+		/// </summary>
+		[DisplayName("业务单据行号")]
+		public string TRANS_LINE { get; set; }
+		/// <summary>
+		/// 来源单据编码
+		/// </summary>
+		[DisplayName("来源单据编码")]
+		public string SOURCE_CODE { get; set; }
+		/// <summary>
+		/// 来源单据号码
+		/// </summary>
+		[DisplayName("来源单据号码")]
+		public string SOURCE_ORDER { get; set; }
+		/// <summary>
+		/// 来源单据行号
+		/// </summary>
+		[DisplayName("来源单据行号")]
+		public string SOURCE_LINE { get; set; }
+		/// <summary>
+		/// 备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先)
+		/// </summary>
+		[DisplayName("备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先)")]
+		public int STRATEGY { get; set; }
+		/// <summary>
+		/// 发料方式(0Supply正常发料|1First首套发料)
+		/// </summary>
+		[DisplayName("发料方式(0Supply正常发料|1First首套发料)")]
+		public int DLVY_MODE { get; set; }
+		/// <summary>
+		/// 是否被锁定(Y/N),锁定则不允许其他事务分配当前物料
+		/// </summary>
+		[DisplayName("是否被锁定(Y/N),锁定则不允许其他事务分配当前物料")]
+		public string IS_LOCKED { get; set; }
+		/// <summary>
+		/// 物料编码
+		/// </summary>
+		[DisplayName("物料编码")]
 		public string ITEM_CODE { get; set; }
 		/// <summary>
-		/// 鐗╂枡鏉$爜
+		/// 物料条码
 		/// </summary>
+		[DisplayName("物料条码")]
 		public string SN { get; set; }
 		/// <summary>
-		/// 鐗╂枡鏁伴噺
+		/// 物料数量
 		/// </summary>
+		[DisplayName("物料数量")]
 		public double QTY { get; set; }
 		/// <summary>
-		/// 宸插垎閰嶆暟閲�
+		/// 已分配数量
 		/// </summary>
+		[DisplayName("已分配数量")]
 		public double ALLOC_QTY { get; set; }
-        /// <summary>
-		/// 鐢熶骇鏃ユ湡
-		/// </summary>
-		public DateTime PROD_DATE { get; set; } = DateTime.MinValue;
-        /// <summary>
-        /// 鍌ㄤ綅ID
-        /// </summary>
-        public string LOCATION_ID { get; set; }
-        /// <summary>
-        /// 鏄惁棣栧鏂�(Y/N)
-        /// </summary>
-        public string IS_FIRST { get; set; }
 		/// <summary>
-		/// 鍒嗛厤鐘舵��(0AllAllocated鍏ㄩ儴鍒嗛厤|1PartialAllocate閮ㄥ垎鍒嗛厤)
+		/// 生产日期
 		/// </summary>
+		[DisplayName("生产日期")]
+		public DateTime PROD_DATE { get; set; } = DateTime.MinValue;
+		/// <summary>
+		/// 仓库ID
+		/// </summary>
+		[DisplayName("仓库ID")]
+		public string WH_ID { get; set; }
+		/// <summary>
+		/// 储区ID
+		/// </summary>
+		[DisplayName("储区ID")]
+		public string REGION_ID { get; set; }
+		/// <summary>
+		/// 货架/料车ID
+		/// </summary>
+		[DisplayName("货架/料车ID")]
+		public string SHELF_ID { get; set; }
+		/// <summary>
+		/// 储位ID
+		/// </summary>
+		[DisplayName("储位ID")]
+		public string LOCATION_ID { get; set; }
+		/// <summary>
+		/// 是否首套料(Y/N)
+		/// </summary>
+		[DisplayName("是否首套料(Y/N)")]
+		public string IS_FIRST { get; set; }
+		/// <summary>
+		/// 分配状态(0AllAllocated全部分配|1PartialAllocate部分分配)
+		/// </summary>
+		[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作废)")]
 		public int STATUS { get; set; }
 		/// <summary>
-		/// 鍔犲伐娈�
+		/// 加工段
 		/// </summary>
+		[DisplayName("加工段")]
 		public string SEGMENT { get; set; }
 		/// <summary>
-		/// 鐩爣浜х嚎浠g爜
+		/// 目标产线编码
 		/// </summary>
+		[DisplayName("目标产线编码")]
 		public string LINE_CODE { get; set; }
 		/// <summary>
-		/// 澶囨敞
+		/// 备注
 		/// </summary>
+		[DisplayName("备注")]
 		public string REMARK { get; set; }
-        #endregion
+		#endregion
 
-        #region 铏氭嫙灞炴��
-        /*渚嬪瓙
+		#region 虚拟属性
+		/*例子
 		[SugarColumn(IsIgnore = true)]
 		public string FieldName { get; set; }
 		*/
-        #endregion
+		#endregion
 
-        #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
+		#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
 		*/
-        #endregion
+		#endregion
 
-        #region 鏋氫妇鍙橀噺
-        /// <summary>
-		/// 鍒嗛厤鐘舵��(0AllAllocated鍏ㄩ儴鍒嗛厤|1PartialAllocate閮ㄥ垎鍒嗛厤)
+		#region 枚举变量
+		/*例子
+		public enum FieldNames
+		{
+			[Description("枚举描述0")]
+			Enum0,
+			[Description("枚举描述1")]
+			Enum1,
+		}
+		*/
+
+		/// <summary>
+		/// 枚举:备料策略(位标志枚举)(1FIFO先进先出|2FSFO/尾数优先)
 		/// </summary>
-        public enum ALLOC_MODEs
-        {
-            [Description("鍏ㄩ儴鍒嗛厤")]
-            AllAllocated,
-            [Description("閮ㄥ垎鍒嗛厤")]
-            PartialAllocate,
-        }
+		public enum STRATEGYs
+		{
+			[Description("先进先出")]
+			FIFO = 1,
+			[Description("尾数优先")]
+			FSFO = 2,
+		}
 
-        /// <summary>
-        /// 鐘舵��(0WaitPick寰呮崱鏂檤1Picking鎹℃枡涓瓅2WaitSend寰呭彂鏂檤3Sended宸插彂鏂檤4Close宸插叧闂瓅5Cancel浣滃簾)
-        /// </summary>
-        public enum STATUSs
-        {
-            [Description("寰呮崱鏂�")]
-            WaitPick,
-            [Description("鎹℃枡涓�")]
-            Picking,
-            [Description("寰呭彂鏂�")]
-            WaitSend,
-            [Description("宸插彂鏂�")]
-            Sended,
-            [Description("宸插叧闂�")]
-            Close,
-            [Description("浣滃簾")]
-            Cancel,
-        }
-        #endregion
+		/// <summary>
+		/// 枚举:发料方式(0Supply正常发料|1First首套发料)
+		/// </summary>
+		public enum DLVY_MODEs
+		{
+			[Description("正常发料")]
+			Supply = 0,
+			[Description("首套发料")]
+			First = 1,
+		}
 
-        #region 鍏叡鏂规硶
+		/// <summary>
+		/// 枚举:分配状态(0AllAllocated全部分配|1PartialAllocate部分分配)
+		/// </summary>
+		public enum ALLOC_MODEs
+		{
+			[Description("全部分配")]
+			AllAllocated = 0,
+			[Description("部分分配")]
+			PartialAllocate = 1,
+		}
 
-        #endregion
+		/// <summary>
+		/// 枚举:状态(0WaitPick待捡料|1Picking捡料中|2WaitSend待发料|3Sended已发料|4Close已关闭|5Cancel作废)
+		/// </summary>
+		public enum STATUSs
+		{
+			[Description("待捡料")]
+			WaitPick = 0,
+			[Description("捡料中")]
+			Picking = 1,
+			[Description("待发料")]
+			WaitSend = 2,
+			[Description("已发料")]
+			Sended = 3,
+			[Description("已关闭")]
+			Close = 4,
+			[Description("作废")]
+			Cancel = 5,
+		}
+		#endregion
 
-    }//endClass
+		#region 公共方法
+
+		#endregion
+
+	}//endClass
 }
\ No newline at end of file

--
Gitblit v1.9.3