From 36746596927952a6b860129a62eec9059bf083a7 Mon Sep 17 00:00:00 2001
From: Rodney Chen <rodney.chen@hotmail.com>
Date: 星期六, 26 四月 2025 18:06:27 +0800
Subject: [PATCH] 优化了备料逻辑

---
 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_SN.cs      |  123 ++++++-----
 Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT.cs          |  146 +++++++-------
 Tiger.Business.WMS/Extensions/Yada/OutExtension.cs      |  100 ++++++++-
 Tiger.Business.WMS/Common/Preparation.cs                |   56 ++--
 Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs |    2 
 Tiger.Business.WMS/Transaction/Old/OutTransfer.cs       |   20 +-
 Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_SN.cs       |  123 +++++------
 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER.cs         |   16 -
 Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs          |    5 
 9 files changed, 329 insertions(+), 262 deletions(-)

diff --git a/Tiger.Business.WMS/Common/Preparation.cs b/Tiger.Business.WMS/Common/Preparation.cs
index f942fbc..6579a32 100644
--- a/Tiger.Business.WMS/Common/Preparation.cs
+++ b/Tiger.Business.WMS/Common/Preparation.cs
@@ -90,8 +90,8 @@
 	            }
 
                 // 鏌ヨ鍗曟嵁鏄庣粏锛屽苟鍚堝苟鍒板鏂欏崟鐨勫鏂欐槑缁嗕腑
-                var dtls = bizType.GetPickList(orderNo);
-	            if (dtls.Sum(q => q.QTY_ACT_REQ) <= 0)
+                var srcDtls = bizType.GetPickList(orderNo);
+	            if (srcDtls.Sum(q => q.QTY_ACT_REQ) <= 0)
 	            {
 	                action.IsSuccessed = false;
 	                //action.LocaleMsg = Biz.L("鍗曟嵁[{0}]鏈壘鍒伴渶瑕佸鏂欑殑琛屾槑缁嗭紝璇锋壂鎻忔纭殑鍗曟嵁");
@@ -129,10 +129,10 @@
                     ADD_TIME = DateTime.Now,
                 };
                 Order.SourceOrders.Add(srcOrder);
-                foreach (var dtl in dtls)
+                foreach (var sdtl in srcDtls)
                 {
-                    dtl.AUTH_ORG = OrgCode;
-                    var pdtl = Order.Details.Where(q => q.ITEM_CODE == dtl.ITEM_CODE).FirstOrDefault();
+                    sdtl.AUTH_ORG = OrgCode;
+                    var pdtl = Order.Details.Where(q => q.ITEM_CODE == sdtl.ITEM_CODE).FirstOrDefault();
                     if (pdtl.IsNullOrEmpty())
                     {
                         pdtl = new ()
@@ -140,32 +140,34 @@
                             AUTH_ORG = OrgCode,
                             ORDER_NO = Order.ORDER_NO,
                             ORDER_LINE = (Order.Details.Max(q => q.LINE_CODE.ToInt32()) + 1).ToString(),
-                            ITEM_CODE = dtl.ITEM_CODE,
-                            SUBITEM_CODE = dtl.SUBITEM_CODE,
-                            UNIT = dtl.UNIT,
-                            PLAN_LOSS_QTY = dtl.PLAN_LOSS_QTY,
-                            PLAN_LOSS_RATE = dtl.PLAN_LOSS_RATE,
-                            IS_CALC_LOSS = dtl.IS_CALC_LOSS,
-                            IS_WHOLE = dtl.IS_WHOLE,
-                            SOURCE_CODE = dtl.SOURCE_CODE,
-                            SOURCE_ORDER = dtl.SOURCE_ORDER,
-                            SOURCE_LINE = dtl.SOURCE_LINE,
+                            ITEM_CODE = sdtl.ITEM_CODE,
+                            SUBITEM_CODE = sdtl.SUBITEM_CODE,
+                            UNIT = sdtl.UNIT,
+                            PLAN_LOSS_QTY = sdtl.PLAN_LOSS_QTY,
+                            PLAN_LOSS_RATE = sdtl.PLAN_LOSS_RATE,
+                            IS_CALC_LOSS = sdtl.IS_CALC_LOSS,
+                            IS_WHOLE = sdtl.IS_WHOLE,
+                            SOURCE_CODE = sdtl.SOURCE_CODE,
+                            SOURCE_ORDER = sdtl.SOURCE_ORDER,
+                            SOURCE_LINE = sdtl.SOURCE_LINE,
                             STATUS = BIZ_WMS_PREP_DTL.STATUSs.UnCalc.GetValue(),
-                            FTY_CODE = dtl.FTY_CODE,
-                            WS_CODE = dtl.WS_CODE,
-                            LINE_CODE = dtl.LINE_CODE,
-                            POST_CODE = dtl.POST_CODE,
-                            OPER_CODE = dtl.OPER_CODE,
-                            SEGMENT = dtl.SEGMENT,
-                            SMT_NO = dtl.SMT_NO,
-                            STATION_NO = dtl.STATION_NO,
-                            FEEDER_NO = dtl.FEEDER_NO,
-                            FEEDER_TYPE = dtl.FEEDER_TYPE,
+                            FTY_CODE = sdtl.FTY_CODE,
+                            WS_CODE = sdtl.WS_CODE,
+                            LINE_CODE = sdtl.LINE_CODE,
+                            POST_CODE = sdtl.POST_CODE,
+                            OPER_CODE = sdtl.OPER_CODE,
+                            SEGMENT = sdtl.SEGMENT,
+                            SMT_NO = sdtl.SMT_NO,
+                            STATION_NO = sdtl.STATION_NO,
+                            FEEDER_NO = sdtl.FEEDER_NO,
+                            FEEDER_TYPE = sdtl.FEEDER_TYPE,
                         };
                         Order.Details.Add(pdtl);
                     }
-                    pdtl.QTY_REQ += dtl.QTY_ACT_REQ;
-                    Order.SourceDetails.Add(dtl);
+                    pdtl.QTY_REQ += sdtl.QTY_ACT_REQ;
+                    sdtl.ORDER_NO = pdtl.ORDER_NO;
+                    sdtl.ORDER_LINE = pdtl.ORDER_LINE;
+                    Order.SourceDetails.Add(sdtl);
                 }
                 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));
diff --git a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs
index 4b64fe3..5b505b3 100644
--- a/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs
+++ b/Tiger.Business.WMS/Extensions/Yada/OutExtension.cs
@@ -3,6 +3,7 @@
 using Newtonsoft.Json;
 using Newtonsoft.Json.Serialization;
 using Org.BouncyCastle.Asn1.X509;
+using Org.BouncyCastle.Ocsp;
 using Rhea.Common;
 using SqlSugar;
 using System;
@@ -221,14 +222,42 @@
                 item.QTY_ACT_DLVY = item.QTY_ACT_REQ;
             }
             trans.CurPREP.Order.STATUS = BIZ_WMS_PREP.STATUSs.Sended.GetValue();
-            var orders = trans.MainDB.Queryable<BIZ_U9_MISC_OUT>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).ToList();
-            foreach (var item in orders)
+            var orders = trans.MainDB.Queryable<BIZ_U9_MISC_OUT>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).IncludesAllFirstLayer().ToList();
+            foreach (var order in orders)
             {
-                item.STATUS = BIZ_U9_MISC_OUT.STATUSs.Sended.GetValue();
-                item.PREP_PERSON = trans.UserCode;
-                item.FINISH_TIME = DateTime.Now;
-                item.REQ_PERSON = trans.UserCode;
-                item.DLVY_TIME = DateTime.Now;
+                order.STATUS = BIZ_U9_MISC_OUT.STATUSs.Sended.GetValue();
+                order.PREP_PERSON = trans.UserCode;
+                order.FINISH_TIME = DateTime.Now;
+                order.REQ_PERSON = trans.UserCode;
+                order.DLVY_TIME = DateTime.Now;
+                foreach (var dtl in order.Details)
+                {
+                    dtl.STATUS = BIZ_WMS_TRANSFER.STATUSs.Sended.GetValue();
+                }
+                order.SnList ??= new();
+                foreach (var sn in trans.CurPREP.Order.SnList)
+                {
+                    var dtl = order.Details.Where(q => q.ITEM_CODE == sn.ITEM_CODE).First();
+                    order.SnList.Add(new()
+                    {
+                        AUTH_ORG = dtl.AUTH_ORG,
+                        ORDER_NO = dtl.ORDER_NO,
+                        LINE_NO = dtl.LINE_NO,
+                        SN = sn.SN,
+                        STATUS = sn.STATUS,
+                        ITEM_CODE = sn.ITEM_CODE,
+                        QTY = sn.QTY,
+                        UNIT = sn.UNIT,
+                        WH_CODE = sn.WH_CODE,
+                        REGION_CODE = sn.REGION_CODE,
+                        SHELF_CODE = sn.SHELF_CODE,
+                        LOCATION_CODE = sn.LOCATION_CODE,
+                        DOWN_TIME = sn.DOWN_TIME,
+                        DLVY_TIME = DateTime.Now,
+                        IS_OUT = "Y",
+                        LOTNO = sn.LOTNO,
+                    });
+                }
             }
             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>();
@@ -250,6 +279,8 @@
                 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();
+                db.Updateable(orders.SelectMany(q => q.Details).ToList(), trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
+                db.Storageable(orders.SelectMany(q => q.SnList).ToList(), trans.UserCode).ToStorage().AsInsertable.ExecuteCommand();
             });
             if (dbTran.IsSuccess)
             {
@@ -364,6 +395,8 @@
             {
                 sn.DLVY_BATCH = batch.DLVY_BATCH;
                 sn.STATUS = WMS_ITEM.STATUSs.Sended.GetValue();
+                sn.REQ_ID = batch.REQ_ID;
+                sn.REQ_ORDER = batch.REQ_ORDER;
             }
 
             var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => sns.Select(s => s.SN).Contains(q.SN)).ToList();
@@ -388,7 +421,7 @@
                 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.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(sns, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.DLVY_BATCH, q.REQ_ID, q.REQ_ORDER }).ExecuteCommand();
                 db.Updateable(items, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS }).ExecuteCommand();
                 db.Insertable(history, trans.UserCode).ExecuteCommand();
             });
@@ -504,6 +537,8 @@
             {
                 sn.DLVY_BATCH = batch.DLVY_BATCH;
                 sn.STATUS = WMS_ITEM.STATUSs.Sended.GetValue();
+                sn.REQ_ID = batch.REQ_ID;
+                sn.REQ_ORDER = batch.REQ_ORDER;
             }
 
             var items = trans.MainDB.Queryable<WMS_ITEM>().Where(q => sns.Select(s => s.SN).Contains(q.SN)).ToList();
@@ -538,7 +573,7 @@
                 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.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(sns, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.DLVY_BATCH, q.REQ_ID, q.REQ_ORDER }).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())
@@ -598,15 +633,40 @@
                 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 orders = trans.MainDB.Queryable<BIZ_WMS_TRANSFER>().Where(q => trans.CurPREP.Order.SourceOrders.Select(s => s.SOURCE_ORDER).Contains(q.ORDER_NO)).IncludesAllFirstLayer().ToList();
+            foreach (var order in orders)
+            {
+                order.STATUS = BIZ_WMS_TRANSFER.STATUSs.Sended.GetValue();
+                order.OUT_WH_CODE = string.Join(",", trans.CurPREP.Order.SnList.Select(q => q.WH_CODE).Distinct());
+                foreach (var dtl in order.Details)
+                {
+                    dtl.STATUS = BIZ_WMS_TRANSFER.STATUSs.Sended.GetValue();
+                    dtl.OUT_WH_CODE = string.Join(",", trans.CurPREP.Order.SnList.Select(q => q.WH_CODE).Distinct());
+                    dtl.QTY_OUT = dtl.QTY_REQ;
+                    dtl.OUT_LOTNO = string.Join(",", trans.CurPREP.Order.SnList.Select(q => q.LOTNO).Distinct());
+                }
+                order.SnList ??= new();
+                foreach (var sn in trans.CurPREP.Order.SnList)
+                {
+                    var dtl = order.Details.Where(q => q.ITEM_CODE ==  sn.ITEM_CODE).First();
+                    order.SnList.Add(new()
+                    {
+                        AUTH_ORG = dtl.AUTH_ORG,
+                        ORDER_NO = dtl.ORDER_NO,
+                        ORDER_LINE = dtl.ORDER_LINE,
+                        SN = sn.SN,
+                        STATUS = sn.STATUS,
+                        ITEM_CODE = sn.ITEM_CODE,
+                        QTY = sn.QTY,
+                        LOTNO = sn.LOTNO,
+                        OUT_WH_CODE = sn.WH_CODE,
+                        OUT_REGION_CODE = sn.REGION_CODE,
+                        OUT_SHELF_CODE = sn.SHELF_CODE,
+                        OUT_LOCATION_CODE = sn.LOCATION_CODE,
+                        OUT_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)
@@ -626,7 +686,9 @@
                     .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();
+                db.Updateable(orders, trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.OUT_WH_CODE }).ExecuteCommand();
+                db.Updateable(orders.SelectMany(q => q.Details).ToList(), trans.UserCode).UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.STATUS, q.OUT_WH_CODE, q.QTY_OUT, q.OUT_LOTNO }).ExecuteCommand();
+                db.Storageable(orders.SelectMany(q => q.SnList).ToList(), trans.UserCode).ToStorage().AsInsertable.ExecuteCommand();
             });
             if (dbTran.IsSuccess)
             {
diff --git a/Tiger.Business.WMS/Transaction/Old/OutTransfer.cs b/Tiger.Business.WMS/Transaction/Old/OutTransfer.cs
index 9500a4b..e7dd561 100644
--- a/Tiger.Business.WMS/Transaction/Old/OutTransfer.cs
+++ b/Tiger.Business.WMS/Transaction/Old/OutTransfer.cs
@@ -61,9 +61,9 @@
             var action = new ApiAction<ProdReqOutput>();
             try
             {
-                req = await Biz.Db.Queryable<BIZ_WMS_TRANSFER>().Where(x => x.ORDER_NO == input.ReqNo).Includes(q => q.DtlsWithGhost, d => d.ItemInfo).IncludesAllFirstLayer().FirstAsync();
+                req = await Biz.Db.Queryable<BIZ_WMS_TRANSFER>().Where(x => x.ORDER_NO == input.ReqNo).Includes(q => q.Details, d => d.ItemInfo).IncludesAllFirstLayer().FirstAsync();
                 //楠岃瘉鏄庣粏鏄惁姝g‘
-                if (!req.Dtls.Any())
+                if (!req.Details.Any())
                 {
                     action.IsSuccessed = false;
                     action.LocaleMsg = new("WMS.ProdMReq.SelectOrder.DtlsException", input.ReqNo);
@@ -82,7 +82,7 @@
 
                 var begin = DateTime.Now;
                 var ElapsedTime = 0.0;
-                var sumDtls = req.Dtls.Where(q => q.STATUS != BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue())
+                var sumDtls = req.Details.Where(q => q.STATUS != BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue())
                     .GroupBy(x => new { x.ITEM_CODE }).Select(x => new { ItemCode = x.Key.ITEM_CODE.ToString(), WarehouseCode = x.Max(t => t.OUT_WH_CODE), actQty = x.Sum(t => t.QTY_REQ - t.QTY_OUT), lockObj = new object() });
                 var dic = sumDtls.ToDictionary(k => k, v => new Result<List<SuggestItem>>());
                 foreach (var item in dic)
@@ -206,11 +206,11 @@
             var action = new ApiAction();
             try
             {
-                var dtls = req.Dtls.GroupBy(x => new { x.ORDER_LINE, x.ITEM_CODE, x.ItemInfo.ITEM_NAME }).Select(x => new ProdReqDtl() { BillLine = x.Key.ORDER_LINE.ToInt32(), ItemCode = x.Key.ITEM_CODE, ItemName = x.Key.ITEM_NAME, Status = "", Items = new List<ProdReqDtlItems>() }).ToList();
+                var dtls = req.Details.GroupBy(x => new { x.ORDER_LINE, x.ITEM_CODE, x.ItemInfo.ITEM_NAME }).Select(x => new ProdReqDtl() { BillLine = x.Key.ORDER_LINE.ToInt32(), ItemCode = x.Key.ITEM_CODE, ItemName = x.Key.ITEM_NAME, Status = "", Items = new List<ProdReqDtlItems>() }).ToList();
                 foreach (var d in dtls)
                 {
                     d.Items = Suggests.Where(x => x.Item.ITEM_CODE == d.ItemCode).Select(x => new ProdReqDtlItems { WHCode = x.Warehouse.WH_CODE, LocationCode = x.Location.LOCATION_CODE, SN = x.Item.SN, QTY = x.Item.QTY }).ToList();
-                    d.Status = $"{(double)req.Dtls.Where(x => x.ITEM_CODE == d.ItemCode).Sum(x => x.QTY_OUT)} / {(double)req.Dtls.Where(x => x.ITEM_CODE == d.ItemCode).Sum(x => x.QTY_REQ)} {Suggests.FirstOrDefault()?.Item?.UNIT} (杩橀渶{d.Items.Count}涓�)";
+                    d.Status = $"{(double)req.Details.Where(x => x.ITEM_CODE == d.ItemCode).Sum(x => x.QTY_OUT)} / {(double)req.Details.Where(x => x.ITEM_CODE == d.ItemCode).Sum(x => x.QTY_REQ)} {Suggests.FirstOrDefault()?.Item?.UNIT} (杩橀渶{d.Items.Count}涓�)";
                 }
                 action.Data = itemcode.IsNullOrEmpty() ? dtls.OrderBy(q => q.BillLine) : dtls.Where(x => x.ItemCode == itemcode).FirstOrDefault()?.Items.OrderBy(q => q.SN);
             }
@@ -230,7 +230,7 @@
             var action = new ApiAction();
             try
             {
-                action.Data = $"鐗╂枡{itemcode}锛氬凡涓嬫灦[{(double)req.Dtls.Where(x => x.ITEM_CODE == itemcode).Sum(x => x.QTY_OUT)}]锛屽叡{(double)req.Dtls.Where(x => x.ITEM_CODE == itemcode).Sum(x => x.QTY_REQ)} {Suggests.FirstOrDefault()?.Item?.UNIT}";
+                action.Data = $"鐗╂枡{itemcode}锛氬凡涓嬫灦[{(double)req.Details.Where(x => x.ITEM_CODE == itemcode).Sum(x => x.QTY_OUT)}]锛屽叡{(double)req.Details.Where(x => x.ITEM_CODE == itemcode).Sum(x => x.QTY_REQ)} {Suggests.FirstOrDefault()?.Item?.UNIT}";
             }
             catch (Exception ex)
             {
@@ -318,7 +318,7 @@
                 }
 
                 //浠撳簱鍗℃帶
-                if (!req.Dtls.Any(q => q.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE && q.OUT_WH_CODE == CurInv.Warehouse.WH_CODE))
+                if (!req.Details.Any(q => q.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE && q.OUT_WH_CODE == CurInv.Warehouse.WH_CODE))
                 {
                     action.IsSuccessed = false;
                     action.LocaleMsg = Biz.L($"鏉$爜[{CurInv.Barcode.SN}]鐨勬枡鍙锋垨鑰呬粨搴撹窡鍗曟嵁[{req.ORDER_NO}]涓婄殑涓嶄竴鑷�");
@@ -382,8 +382,8 @@
 
                 //2.鏄惁瓒呭彂
                 isExceed = false;
-                req = await Biz.Db.Queryable<BIZ_WMS_TRANSFER>().Where(x => x.ORDER_NO == req.ORDER_NO).Includes(q => q.DtlsWithGhost, d => d.ItemInfo).IncludesAllFirstLayer().FirstAsync();
-                dtls = req.Dtls.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).ToList();
+                req = await Biz.Db.Queryable<BIZ_WMS_TRANSFER>().Where(x => x.ORDER_NO == req.ORDER_NO).Includes(q => q.Details, d => d.ItemInfo).IncludesAllFirstLayer().FirstAsync();
+                dtls = req.Details.Where(x => x.ITEM_CODE == CurInv.ItemInfo.ITEM_CODE).ToList();
                 if (dtls.IsNullOrEmpty())
                 {
                     action.IsSuccessed = false;
@@ -583,7 +583,7 @@
                 };
 
                 //4.鏇存柊涓氬姟鍗曟嵁锛孊IZ_WMS_TRANSFER銆丅IZ_WMS_TRANSFER_DTL銆丅IZ_WMS_TRANSFER_SN 鍒ゆ柇鏄庣粏琛岀姸鎬佹槸鍚﹀畬鎴�
-                var isComplete = !req.Dtls.Any(x => x.STATUS != BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue() && x.STATUS != BIZ_WMS_TRANSFER.STATUSs.Picked.GetValue() && x.QTY_REQ > 0);
+                var isComplete = !req.Details.Any(x => x.STATUS != BIZ_WMS_TRANSFER.STATUSs.Finished.GetValue() && x.STATUS != BIZ_WMS_TRANSFER.STATUSs.Picked.GetValue() && x.QTY_REQ > 0);
                 his_isComplete = isComplete;
                 if (isComplete)
                 {
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 9abb932..a78a02a 100644
--- a/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs
+++ b/Tiger.Business.WMS/Transaction/Yada/Out_BIZ_WMS_PREP.cs
@@ -479,6 +479,8 @@
                     SHELF_CODE = CurInvItem.Shelf.SHELF_CODE,
                     LOCATION_ID = CurInvItem.Location.ID,
                     LOCATION_CODE = CurInvItem.Location.LOCATION_CODE,
+                    PREP_USER = UserCode,
+                    DOWN_TIME = DateTime.Now,
                     SMT_NO = CurPrepDtl.SMT_NO,
                     STATION_NO = CurPrepDtl.STATION_NO,
                     FEEDER_NO = CurPrepDtl.FEEDER_NO,
diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT.cs
index a030a1b..3dda0d4 100644
--- a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT.cs
+++ b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT.cs
@@ -7,164 +7,168 @@
 namespace Tiger.Model
 {
 	/// <summary>
-	/// 实体:杂发单(U9)
+	/// 瀹炰綋锛氭潅鍙戝崟(U9)
 	/// </summary>
 	[Description("Primary:ID")]
-	[DisplayName("杂发单(U9)")]
+	[DisplayName("鏉傚彂鍗�(U9)")]
 	[Serializable]
 	[SugarTable("BIZ_U9_MISC_OUT")]
 	public class BIZ_U9_MISC_OUT : DbEntityWithAuth
 	{
-		#region 构造函数
+		#region 鏋勯�犲嚱鏁�
 		/// <summary>
-		/// 实体:杂发单(U9)
+		/// 瀹炰綋锛氭潅鍙戝崟(U9)
 		/// </summary>
 		public BIZ_U9_MISC_OUT() {}
 		#endregion
 
-		#region 公共属性
+		#region 鍏叡灞炴��
 		/// <summary>
-		/// 单据号
+		/// 鍗曟嵁鍙�
 		/// </summary>
-		[DisplayName("单据号")]
+		[DisplayName("鍗曟嵁鍙�")]
 		public string ORDER_NO { get; set; }
 		/// <summary>
-		/// 状态(0Init初始化|1WaitPick待捡料|2Picking捡料中|3Picked已捡完|4Sended已发料|5Close已关闭|6Cancel作废)
+		/// 鐘舵��(0Init鍒濆鍖東1WaitPick寰呮崱鏂檤2Picking鎹℃枡涓瓅3Picked宸叉崱瀹寍4Sended宸插彂鏂檤5Close宸插叧闂瓅6Cancel浣滃簾)
 		/// </summary>
-		[DisplayName("状态(0Init初始化|1WaitPick待捡料|2Picking捡料中|3Picked已捡完|4Sended已发料|5Close已关闭|6Cancel作废)")]
+		[DisplayName("鐘舵��(0Init鍒濆鍖東1WaitPick寰呮崱鏂檤2Picking鎹℃枡涓瓅3Picked宸叉崱瀹寍4Sended宸插彂鏂檤5Close宸插叧闂瓅6Cancel浣滃簾)")]
 		public int STATUS { get; set; }
 		/// <summary>
-		/// 单据类型编码
+		/// 鍗曟嵁绫诲瀷缂栫爜
 		/// </summary>
-		[DisplayName("单据类型编码")]
+		[DisplayName("鍗曟嵁绫诲瀷缂栫爜")]
 		public string TYPE_CODE { get; set; }
 		/// <summary>
-		/// 单据类型名称
+		/// 鍗曟嵁绫诲瀷鍚嶇О
 		/// </summary>
-		[DisplayName("单据类型名称")]
+		[DisplayName("鍗曟嵁绫诲瀷鍚嶇О")]
 		public string TYPE_NAME { get; set; }
 		/// <summary>
-		/// ERP单据状态
+		/// ERP鍗曟嵁鐘舵��
 		/// </summary>
-		[DisplayName("ERP单据状态")]
+		[DisplayName("ERP鍗曟嵁鐘舵��")]
 		public string ERP_STATUS_CODE { get; set; }
 		/// <summary>
-		/// ERP单据状态名称
+		/// ERP鍗曟嵁鐘舵�佸悕绉�
 		/// </summary>
-		[DisplayName("ERP单据状态名称")]
+		[DisplayName("ERP鍗曟嵁鐘舵�佸悕绉�")]
 		public string ERP_STATUS_NAME { get; set; }
 		/// <summary>
-		/// 单据日期
+		/// 鍗曟嵁鏃ユ湡
 		/// </summary>
-		[DisplayName("单据日期")]
+		[DisplayName("鍗曟嵁鏃ユ湡")]
 		public DateTime ORDER_DATE { get; set; } = DateTime.MinValue;
 		/// <summary>
-		/// 备料人
+		/// 澶囨枡浜�
 		/// </summary>
-		[DisplayName("备料人")]
+		[DisplayName("澶囨枡浜�")]
 		public string PREP_PERSON { get; set; }
 		/// <summary>
-		/// 备料完成时间
+		/// 澶囨枡瀹屾垚鏃堕棿
 		/// </summary>
-		[DisplayName("备料完成时间")]
+		[DisplayName("澶囨枡瀹屾垚鏃堕棿")]
 		public DateTime FINISH_TIME { get; set; } = DateTime.MinValue;
 		/// <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; }
 		/// <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_U9_MISC_OUT类里面的外键ID字段
-		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
-		//一对多外键导航
-		[Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_U9_MISC_OUTId))]//ClassA表中的BIZ_U9_MISC_OUTId
-		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
-		//多对多外键导航
-		[Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_U9_MISC_OUTId), nameof(MappingClass.ClassAId))]//注意顺序
-		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+        #region 澶栭敭灞炴��
+        /*渚嬪瓙
+		//涓�瀵逛竴澶栭敭瀵艰埅
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//涓�瀵逛竴 ClassAId鏄疊IZ_U9_MISC_OUT绫婚噷闈㈢殑澶栭敭ID瀛楁
+		public ClassA ClassA { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+		//涓�瀵瑰澶栭敭瀵艰埅
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_U9_MISC_OUTId))]//ClassA琛ㄤ腑鐨凚IZ_U9_MISC_OUTId
+		public List<ClassA> ClassAList { get; set; }//娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+		//澶氬澶氬閿鑸�
+		[Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_U9_MISC_OUTId), nameof(MappingClass.ClassAId))]//娉ㄦ剰椤哄簭
+		public List<ClassA> ClassAList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
 		*/
-		#endregion
+        [Navigate(NavigateType.OneToMany, nameof(BIZ_U9_MISC_OUT_DTL.ORDER_NO), nameof(ORDER_NO), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_U9_MISC_OUT绫婚噷闈㈢殑澶栭敭ID瀛楁
+        public List<BIZ_U9_MISC_OUT_DTL> Details { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+        [Navigate(NavigateType.OneToMany, nameof(BIZ_U9_MISC_OUT_SN.ORDER_NO), nameof(ORDER_NO), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_U9_MISC_OUT绫婚噷闈㈢殑澶栭敭ID瀛楁
+        public List<BIZ_U9_MISC_OUT_SN> SnList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+        #endregion
 
-		#region 枚举变量
-		/*例子
+        #region 鏋氫妇鍙橀噺
+        /*渚嬪瓙
 		public enum FieldNames
 		{
-			[Description("枚举描述0")]
+			[Description("鏋氫妇鎻忚堪0")]
 			Enum0,
-			[Description("枚举描述1")]
+			[Description("鏋氫妇鎻忚堪1")]
 			Enum1,
 		}
 		*/
 
-		/// <summary>
-		/// 枚举:状态(0Init初始化|1WaitPick待捡料|2Picking捡料中|3Picked已捡完|4Sended已发料|5Close已关闭|6Cancel作废)
-		/// </summary>
-		public enum STATUSs
+        /// <summary>
+        /// 鏋氫妇锛氱姸鎬�(0Init鍒濆鍖東1WaitPick寰呮崱鏂檤2Picking鎹℃枡涓瓅3Picked宸叉崱瀹寍4Sended宸插彂鏂檤5Close宸插叧闂瓅6Cancel浣滃簾)
+        /// </summary>
+        public enum STATUSs
 		{
-			[Description("初始化")]
+			[Description("鍒濆鍖�")]
 			Init = 0,
-			[Description("待捡料")]
+			[Description("寰呮崱鏂�")]
 			WaitPick = 1,
-			[Description("捡料中")]
+			[Description("鎹℃枡涓�")]
 			Picking = 2,
-			[Description("已捡完")]
+			[Description("宸叉崱瀹�")]
 			Picked = 3,
-			[Description("已发料")]
+			[Description("宸插彂鏂�")]
 			Sended = 4,
-			[Description("已关闭")]
+			[Description("宸插叧闂�")]
 			Close = 5,
-			[Description("作废")]
+			[Description("浣滃簾")]
 			Cancel = 6,
 		}
 		#endregion
 
-		#region 公共方法
+		#region 鍏叡鏂规硶
 
 		#endregion
 
diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_SN.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_SN.cs
index 38bd6be..6514ce9 100644
--- a/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_SN.cs
+++ b/Tiger.Model.Net/Entitys/WMS/BIZ_U9_MISC_OUT_SN.cs
@@ -7,153 +7,148 @@
 namespace Tiger.Model
 {
 	/// <summary>
-	/// 实体:杂发单(U9)条码明细
+	/// 瀹炰綋锛氭潅鍙戝崟(U9)鏉$爜鏄庣粏
 	/// </summary>
 	[Description("Primary:ID")]
-	[DisplayName("杂发单(U9)条码明细")]
+	[DisplayName("鏉傚彂鍗�(U9)鏉$爜鏄庣粏")]
 	[Serializable]
 	[SugarTable("BIZ_U9_MISC_OUT_SN")]
 	public class BIZ_U9_MISC_OUT_SN : DbEntityWithAuth
 	{
-		#region 构造函数
+		#region 鏋勯�犲嚱鏁�
 		/// <summary>
-		/// 实体:杂发单(U9)条码明细
+		/// 瀹炰綋锛氭潅鍙戝崟(U9)鏉$爜鏄庣粏
 		/// </summary>
 		public BIZ_U9_MISC_OUT_SN() {}
 		#endregion
 
-		#region 公共属性
+		#region 鍏叡灞炴��
 		/// <summary>
-		/// 单据号
+		/// 鍗曟嵁鍙�
 		/// </summary>
-		[DisplayName("单据号")]
+		[DisplayName("鍗曟嵁鍙�")]
 		public string ORDER_NO { get; set; }
 		/// <summary>
-		/// 单据行号
+		/// 鍗曟嵁琛屽彿
 		/// </summary>
-		[DisplayName("单据行号")]
+		[DisplayName("鍗曟嵁琛屽彿")]
 		public string LINE_NO { get; set; }
 		/// <summary>
-		/// 条码
+		/// 鏉$爜
 		/// </summary>
-		[DisplayName("条码")]
+		[DisplayName("鏉$爜")]
 		public string SN { get; set; }
 		/// <summary>
-		/// 元条码
+		/// 鐗╂枡缂栫爜
 		/// </summary>
-		[DisplayName("元条码")]
-		public string META_SN { get; set; }
-		/// <summary>
-		/// 物料编码
-		/// </summary>
-		[DisplayName("物料编码")]
+		[DisplayName("鐗╂枡缂栫爜")]
 		public string ITEM_CODE { get; set; }
 		/// <summary>
-		/// 状态(同WMS_ITEM状态)
+		/// 鐘舵��(鍚學MS_ITEM鐘舵��)
 		/// </summary>
-		[DisplayName("状态(同WMS_ITEM状态)")]
+		[DisplayName("鐘舵��(鍚學MS_ITEM鐘舵��)")]
 		public int STATUS { get; set; }
 		/// <summary>
-		/// 数量
+		/// 鏁伴噺
 		/// </summary>
-		[DisplayName("数量")]
+		[DisplayName("鏁伴噺")]
 		public double QTY { get; set; }
 		/// <summary>
-		/// 单位
+		/// 鍗曚綅
 		/// </summary>
-		[DisplayName("单位")]
+		[DisplayName("鍗曚綅")]
 		public string UNIT { get; set; }
 		/// <summary>
-		/// 发料仓库
+		/// 鍙戞枡浠撳簱
 		/// </summary>
-		[DisplayName("发料仓库")]
+		[DisplayName("鍙戞枡浠撳簱")]
 		public string WH_CODE { get; set; }
 		/// <summary>
-		/// 发料储区
+		/// 鍙戞枡鍌ㄥ尯
 		/// </summary>
-		[DisplayName("发料储区")]
+		[DisplayName("鍙戞枡鍌ㄥ尯")]
 		public string REGION_CODE { get; set; }
 		/// <summary>
-		/// 发料货架/料车
+		/// 鍙戞枡璐ф灦/鏂欒溅
 		/// </summary>
-		[DisplayName("发料货架/料车")]
+		[DisplayName("鍙戞枡璐ф灦/鏂欒溅")]
 		public string SHELF_CODE { get; set; }
 		/// <summary>
-		/// 发料储位
+		/// 鍙戞枡鍌ㄤ綅
 		/// </summary>
-		[DisplayName("发料储位")]
+		[DisplayName("鍙戞枡鍌ㄤ綅")]
 		public string LOCATION_CODE { get; set; }
 		/// <summary>
-		/// 下架时间
+		/// 涓嬫灦鏃堕棿
 		/// </summary>
-		[DisplayName("下架时间")]
+		[DisplayName("涓嬫灦鏃堕棿")]
 		public DateTime DOWN_TIME { get; set; } = DateTime.MinValue;
 		/// <summary>
-		/// 出库时间
+		/// 鍑哄簱鏃堕棿
 		/// </summary>
-		[DisplayName("出库时间")]
+		[DisplayName("鍑哄簱鏃堕棿")]
 		public DateTime DLVY_TIME { get; set; } = DateTime.MinValue;
 		/// <summary>
-		/// 是否出库(Y/N)
+		/// 鏄惁鍑哄簱(Y/N)
 		/// </summary>
-		[DisplayName("是否出库(Y/N)")]
+		[DisplayName("鏄惁鍑哄簱(Y/N)")]
 		public string IS_OUT { get; set; }
 		/// <summary>
-		/// 批次号
+		/// 鎵规鍙�
 		/// </summary>
-		[DisplayName("批次号")]
+		[DisplayName("鎵规鍙�")]
 		public string LOTNO { get; set; }
 		/// <summary>
-		/// 箱号
+		/// 绠卞彿
 		/// </summary>
-		[DisplayName("箱号")]
+		[DisplayName("绠卞彿")]
 		public string CARTON_NO { get; set; }
 		/// <summary>
-		/// 栈板号
+		/// 鏍堟澘鍙�
 		/// </summary>
-		[DisplayName("栈板号")]
+		[DisplayName("鏍堟澘鍙�")]
 		public string PALLET_NO { 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是BIZ_U9_MISC_OUT_SN类里面的外键ID字段
-		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
-		//一对多外键导航
-		[Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_U9_MISC_OUT_SNId))]//ClassA表中的BIZ_U9_MISC_OUT_SNId
-		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
-		//多对多外键导航
-		[Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_U9_MISC_OUT_SNId), nameof(MappingClass.ClassAId))]//注意顺序
-		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		#region 澶栭敭灞炴��
+		/*渚嬪瓙
+		//涓�瀵逛竴澶栭敭瀵艰埅
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//涓�瀵逛竴 ClassAId鏄疊IZ_U9_MISC_OUT_SN绫婚噷闈㈢殑澶栭敭ID瀛楁
+		public ClassA ClassA { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+		//涓�瀵瑰澶栭敭瀵艰埅
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_U9_MISC_OUT_SNId))]//ClassA琛ㄤ腑鐨凚IZ_U9_MISC_OUT_SNId
+		public List<ClassA> ClassAList { get; set; }//娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+		//澶氬澶氬閿鑸�
+		[Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_U9_MISC_OUT_SNId), 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,
 		}
 		*/
 		#endregion
 
-		#region 公共方法
+		#region 鍏叡鏂规硶
 
 		#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 cdb32ab..919a6d9 100644
--- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs
+++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_PREP_SN.cs
@@ -119,6 +119,11 @@
         [DisplayName("鍙戞枡鍌ㄤ綅")]
         public string LOCATION_CODE { get; set; }
         /// <summary>
+        /// 澶囨枡浜�
+        /// </summary>
+        [DisplayName("澶囨枡浜�")]
+        public string PREP_USER { get; set; }
+        /// <summary>
         /// 涓嬫灦鏃堕棿
         /// </summary>
         [DisplayName("涓嬫灦鏃堕棿")]
diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER.cs
index 44ab5c3..1325cde 100644
--- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER.cs
+++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER.cs
@@ -129,18 +129,10 @@
 		[Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_WMS_TRANSFERId), nameof(MappingClass.ClassAId))]//娉ㄦ剰椤哄簭
 		public List<ClassA> ClassAList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
 		*/
-
-        [Navigate(NavigateType.OneToMany, nameof(BIZ_WMS_TRANSFER_DTL.ORDER_NO), nameof(ORDER_NO))]
-        public List<BIZ_WMS_TRANSFER_DTL> DtlsWithGhost { get; set; }//娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
-
-        [SugarColumn(IsIgnore = true)]
-        public List<BIZ_WMS_TRANSFER_DTL> Dtls => DtlsWithGhost?.Where(q => !q.GHOST_ROW).ToList();
-
-        [Navigate(NavigateType.OneToMany, nameof(BIZ_WMS_TRANSFER_SN.ORDER_NO), nameof(ORDER_NO))]
-        public List<BIZ_WMS_TRANSFER_SN> SnListWithGhost { get; set; }//娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
-
-        [SugarColumn(IsIgnore = true)]
-        public List<BIZ_WMS_TRANSFER_SN> SnList => SnListWithGhost?.Where(q => !q.GHOST_ROW).ToList();
+        [Navigate(NavigateType.OneToMany, nameof(BIZ_WMS_TRANSFER_DTL.ORDER_NO), nameof(ORDER_NO), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_WMS_TRANSFER绫婚噷闈㈢殑澶栭敭ID瀛楁
+        public List<BIZ_WMS_TRANSFER_DTL> Details { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+        [Navigate(NavigateType.OneToMany, nameof(BIZ_WMS_TRANSFER_SN.ORDER_NO), nameof(ORDER_NO), "GHOST_ROW = 0")]//涓�瀵逛竴 ClassAId鏄疊IZ_WMS_TRANSFER绫婚噷闈㈢殑澶栭敭ID瀛楁
+        public List<BIZ_WMS_TRANSFER_SN> SnList { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
 
         #endregion 澶栭敭灞炴��
 
diff --git a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_SN.cs b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_SN.cs
index c0d386d..91554b2 100644
--- a/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_SN.cs
+++ b/Tiger.Model.Net/Entitys/WMS/BIZ_WMS_TRANSFER_SN.cs
@@ -7,143 +7,148 @@
 namespace Tiger.Model
 {
 	/// <summary>
-	/// 实体:调拨单(WMS)条码明细
+	/// 瀹炰綋锛氳皟鎷ㄥ崟(WMS)鏉$爜鏄庣粏
 	/// </summary>
 	[Description("Primary:ID")]
-	[DisplayName("调拨单(WMS)条码明细")]
+	[DisplayName("璋冩嫧鍗�(WMS)鏉$爜鏄庣粏")]
 	[Serializable]
 	[SugarTable("BIZ_WMS_TRANSFER_SN")]
 	public class BIZ_WMS_TRANSFER_SN : DbEntityWithAuth
 	{
-		#region 构造函数
+		#region 鏋勯�犲嚱鏁�
 		/// <summary>
-		/// 实体:调拨单(WMS)条码明细
+		/// 瀹炰綋锛氳皟鎷ㄥ崟(WMS)鏉$爜鏄庣粏
 		/// </summary>
 		public BIZ_WMS_TRANSFER_SN() {}
 		#endregion
 
-		#region 公共属性
+		#region 鍏叡灞炴��
 		/// <summary>
-		/// 调拨单号
+		/// 璋冩嫧鍗曞彿
 		/// </summary>
-		[DisplayName("调拨单号")]
+		[DisplayName("璋冩嫧鍗曞彿")]
 		public string ORDER_NO { get; set; }
 		/// <summary>
-		/// 调拨单行号
+		/// 璋冩嫧鍗曡鍙�
 		/// </summary>
-		[DisplayName("调拨单行号")]
+		[DisplayName("璋冩嫧鍗曡鍙�")]
 		public string ORDER_LINE { get; set; }
 		/// <summary>
-		/// 条码
+		/// 鏉$爜
 		/// </summary>
-		[DisplayName("条码")]
+		[DisplayName("鏉$爜")]
 		public string SN { get; set; }
 		/// <summary>
-		/// 状态(同WMS_ITEM状态)
+		/// 鐘舵��(鍚學MS_ITEM鐘舵��)
 		/// </summary>
-		[DisplayName("状态(同WMS_ITEM状态)")]
+		[DisplayName("鐘舵��(鍚學MS_ITEM鐘舵��)")]
 		public int STATUS { get; set; }
 		/// <summary>
-		/// 物料编码
+		/// 鐗╂枡缂栫爜
 		/// </summary>
-		[DisplayName("物料编码")]
+		[DisplayName("鐗╂枡缂栫爜")]
 		public string ITEM_CODE { get; set; }
 		/// <summary>
-		/// 数量
+		/// 鏁伴噺
 		/// </summary>
-		[DisplayName("数量")]
+		[DisplayName("鏁伴噺")]
 		public double QTY { get; set; }
-		/// <summary>
-		/// 调出仓库
-		/// </summary>
-		[DisplayName("调出仓库")]
+        /// <summary>
+        /// 鎵瑰彿
+        /// </summary>
+        [DisplayName("鎵瑰彿")]
+        public string LOTNO { get; set; }
+        /// <summary>
+        /// 璋冨嚭浠撳簱
+        /// </summary>
+        [DisplayName("璋冨嚭浠撳簱")]
 		public string OUT_WH_CODE { get; set; }
 		/// <summary>
-		/// 调出储区
+		/// 璋冨嚭鍌ㄥ尯
 		/// </summary>
-		[DisplayName("调出储区")]
+		[DisplayName("璋冨嚭鍌ㄥ尯")]
 		public string OUT_REGION_CODE { get; set; }
 		/// <summary>
-		/// 调出货架
+		/// 璋冨嚭璐ф灦
 		/// </summary>
-		[DisplayName("调出货架")]
+		[DisplayName("璋冨嚭璐ф灦")]
 		public string OUT_SHELF_CODE { get; set; }
 		/// <summary>
-		/// 调出储位
+		/// 璋冨嚭鍌ㄤ綅
 		/// </summary>
-		[DisplayName("调出储位")]
+		[DisplayName("璋冨嚭鍌ㄤ綅")]
 		public string OUT_LOCATION_CODE { get; set; }
 		/// <summary>
-		/// 调出时间
+		/// 璋冨嚭鏃堕棿
 		/// </summary>
-		[DisplayName("调出时间")]
+		[DisplayName("璋冨嚭鏃堕棿")]
 		public DateTime OUT_TIME { get; set; } = DateTime.MinValue;
 		/// <summary>
-		/// 拨入仓库
+		/// 鎷ㄥ叆浠撳簱
 		/// </summary>
-		[DisplayName("拨入仓库")]
+		[DisplayName("鎷ㄥ叆浠撳簱")]
 		public string IN_WH_CODE { get; set; }
 		/// <summary>
-		/// 拨入储区
+		/// 鎷ㄥ叆鍌ㄥ尯
 		/// </summary>
-		[DisplayName("拨入储区")]
+		[DisplayName("鎷ㄥ叆鍌ㄥ尯")]
 		public string IN_REGION_CODE { get; set; }
 		/// <summary>
-		/// 拨入货架
+		/// 鎷ㄥ叆璐ф灦
 		/// </summary>
-		[DisplayName("拨入货架")]
+		[DisplayName("鎷ㄥ叆璐ф灦")]
 		public string IN_SHELF_CODE { get; set; }
 		/// <summary>
-		/// 拨入储位
+		/// 鎷ㄥ叆鍌ㄤ綅
 		/// </summary>
-		[DisplayName("拨入储位")]
+		[DisplayName("鎷ㄥ叆鍌ㄤ綅")]
 		public string IN_LOCATION_CODE { get; set; }
 		/// <summary>
-		/// 拨入时间
+		/// 鎷ㄥ叆鏃堕棿
 		/// </summary>
-		[DisplayName("拨入时间")]
+		[DisplayName("鎷ㄥ叆鏃堕棿")]
 		public DateTime IN_TIME { get; set; } = DateTime.MinValue;
 		/// <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是BIZ_WMS_TRANSFER_SN类里面的外键ID字段
-		public ClassA ClassA { get; set; } //注意禁止手动赋值,只能是null
-		//一对多外键导航
-		[Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_WMS_TRANSFER_SNId))]//ClassA表中的BIZ_WMS_TRANSFER_SNId
-		public List<ClassA> ClassAList { get; set; }//注意禁止手动赋值,只能是null
-		//多对多外键导航
-		[Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_WMS_TRANSFER_SNId), nameof(MappingClass.ClassAId))]//注意顺序
-		public List<ClassA> ClassAList { get; set; } //注意禁止手动赋值,只能是null
+		#region 澶栭敭灞炴��
+		/*渚嬪瓙
+		//涓�瀵逛竴澶栭敭瀵艰埅
+		[Navigate(NavigateType.OneToOne, nameof(ClassAId))]//涓�瀵逛竴 ClassAId鏄疊IZ_WMS_TRANSFER_SN绫婚噷闈㈢殑澶栭敭ID瀛楁
+		public ClassA ClassA { get; set; } //娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+		//涓�瀵瑰澶栭敭瀵艰埅
+		[Navigate(NavigateType.OneToMany, nameof(ClassA.BIZ_WMS_TRANSFER_SNId))]//ClassA琛ㄤ腑鐨凚IZ_WMS_TRANSFER_SNId
+		public List<ClassA> ClassAList { get; set; }//娉ㄦ剰绂佹鎵嬪姩璧嬪�硷紝鍙兘鏄痭ull
+		//澶氬澶氬閿鑸�
+		[Navigate(typeof(MappingClass), nameof(MappingClass.BIZ_WMS_TRANSFER_SNId), 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,
 		}
 		*/
 		#endregion
 
-		#region 公共方法
+		#region 鍏叡鏂规硶
 
 		#endregion
 

--
Gitblit v1.9.3