From 990807a09cf35a73b20e213a4df82acddec40f4b Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期二, 04 三月 2025 00:58:15 +0800
Subject: [PATCH] 雅达-更改多个文件中的数据类型和属性

---
 Tiger.Business.MES/Transaction/InStoreOrderNo.cs |  506 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 489 insertions(+), 17 deletions(-)

diff --git a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs
index 40f52ea..e0b0bd4 100644
--- a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs
+++ b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs
@@ -11,6 +11,15 @@
 using Tiger.Model;
 using Tiger.Model.Sharetronic.Shelf;
 using System.ComponentModel;
+using Tiger.Model.Entitys.MES.U9C;
+using ProdInBatch = Tiger.Model.ProdInBatch;
+using Org.BouncyCastle.Ocsp;
+using Tiger.Model.Entitys.MES.BizPrintInstoreDoc;
+using System.Drawing.Printing;
+using Tiger.Model.Entitys.MES.Position;
+using System.Drawing.Drawing2D;
+using static Microsoft.CodeAnalysis.CSharp.SyntaxTokenParser;
+using Tiger.Model.Minsun;
 
 namespace Tiger.Business.MES.Transaction
 {
@@ -20,12 +29,16 @@
     public class InStoreOrderNo : MESTransactionBase, IInStoreOrderNo
     {
         private readonly IMES_U9C _IMES_U9C = DI.Resolve<IMES_U9C>();
-        public IInStoreOrderNo Init(string id, string userCode, string apiHost, string orgCode)
+        private readonly IBIZ_MES_WO _IBIZ_MES_WO = DI.Resolve<IBIZ_MES_WO>();
+        public IInStoreOrderNo Init(string id, string apiHost, InstoreDocInput input)
         {
             TransID = id;
-            UserCode = userCode;
+            UserCode = input.UserCode;
             ApiHost = apiHost;
-            OrgCode = orgCode;
+            OrgCode = input.OrgCode;
+            pageSize = input.pageSize;
+            _GetScannedList();
+            CurBatchNo = !inStoreInfos.IsNullOrEmpty() && inStoreInfos.InStoreScanInfos.Count > 0 ? InStoreScanInfos[0].BATCH_NO : DateTime.Now.ToString("yyyyMMddHHmmss");
             Logger.Console.Info($"Start {this.GetType().Name} Transaction[ID: {TransID}]");
             return this;
         }
@@ -35,40 +48,499 @@
         public string UserCode { get; set; }
         public long UserId { get; set; }
         public string OrgCode { get; set; }
-        public string CurSmtCode { get; set; }
-        public string CurrSlotNo { get; set; }
+        public string CurSN { get; set; }
+        public string CurBatchNo { get; set; }
+        public int pageSize { get; set; }
+        public RcvRptDocCreateInput RcvRptInput { get; set; } = new RcvRptDocCreateInput();
+        public List<ProdInBatch> ProdInBatchs { get; set; } = new List<ProdInBatch>();
+        public List<BIZ_ERP_PROD_IN_BTH> ErpProdInBths { get; set; } = new List<BIZ_ERP_PROD_IN_BTH>();
+        public List<BIZ_ERP_PROD_IN> ErpProdIns { get; set; } = new List<BIZ_ERP_PROD_IN>();
+        /// <summary>
+        /// 鎵弿鍒楄〃 
+        /// </summary>
+        public List<InStoreScanInfo> InStoreScanInfos { get; set; } = new List<InStoreScanInfo>();
+        public List<BIZ_ERP_PROD_IN_SN> ErpProdInSns { get; set; } = new List<BIZ_ERP_PROD_IN_SN>();
+        public InStoreInfos inStoreInfos { get; set; }
 
         #endregion Propertys & Variables
 
         #region Functions
 
-        /// <summary>
-        /// 鎵弿鏉$爜涓婃枡
-        /// </summary>
-        /// <param name="input"></param>
-        /// <returns></returns>
-        public async Task<ApiAction<SmtLoadingReturn>> ScanItem(SmtLoadingInput input)
+        public ApiAction<InStoreInfos> GetInStoreInfos()
         {
-            var action = new ApiAction<SmtLoadingReturn>();
+            return new() { Data = inStoreInfos };
+        }
+        /// <summary>
+        /// 鎵弿鏉$爜
+        /// </summary>
+        /// <param name="code"></param>
+        /// <returns></returns>
+        public async Task<ApiAction<InStoreInfos>> Submit(string code)
+        {
+            var action = new ApiAction<InStoreInfos>();
             try
             {
-                if (input.Code.IsNullOrEmpty())
+                if (code.IsNullOrEmpty())
                 {
                     action.IsSuccessed = false;
-                    //action.LocaleMsg = Biz.L($"{EnumHelper.GetEnum<Step_Types>(input.Step).GetDesc()}涓嶈兘涓虹┖");
+                    action.LocaleMsg = Biz.L($"鏉$爜涓嶈兘涓虹┖");
                     return action;
                 }
+                var apiAction = await _IBIZ_MES_WO.GetErpProdInBth(code);
+                if (!apiAction.IsSuccessed)
+                {
+                    return action;
+                }
+                CurSN = code.Split('|')[0];
+                InStoreInfo Info = apiAction.Data;
+                //瑕佸瓨鍏ョ殑鎵规鍏ュ簱鍗曟暟鎹� 
+                int n = InStoreScanInfos.Where(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER).Count();
+                if (!ErpProdInBths.Any(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER))
+                {
+                    Info.ErpProdInBth.AUTH_ORG = OrgCode;
+                    Info.ErpProdInBth.BATCH_NO = CurBatchNo;
+                    Info.ErpProdInBth.CREATE_USER = UserCode;
+                    Info.ErpProdInBth.CREATE_TIME = DateTime.Now;
+                    Info.ErpProdInBth.SCANED_DATE = DateTime.Now;
+                    Info.ErpProdInBth.HANDLED_DATE = DateTime.Now;
+                    Info.ErpProdInBth.IS_SCANED = "Y";
+                    Info.ErpProdInBth.ORDER_NO = UserCode;
+                    Info.ErpProdInBth.IS_HANDLED = "N";
+                    Info.ErpProdInBth.CartonQty = n == 0 ? 1 : n;
+                    BIZ_ERP_PROD_IN prodIn = new()
+                    {
+                        AUTH_ORG = OrgCode,
+                        BILLCODE = UserCode,
+                        BILLDATE = DateTime.Now,
+                        STATUS = 0,
+                        HANDLED = -1,
+                        WAREHOUSECODE = "",
+                        SOURCECODE = Info.ErpProdInBth.WORK_ORDER,
+                        HANDLED_DATE = DateTime.Now,
+                    };
+                    ErpProdInBths.Add(Info.ErpProdInBth);
+                    ErpProdIns.Add(prodIn);
+                }
+                else
+                {
+                    if (!InStoreScanInfos.Any(q => q.WORK_ORDER == Info?.ErpProdInBth.WORK_ORDER && q.SN == CurSN))
+                    {
+                        var erpbth = ErpProdInBths.Where(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER).FirstOrDefault();
+                        if (!erpbth.IsNullOrEmpty())
+                        {
+                            erpbth.SCAN_QTY += Info.InStoreScanInfo.SCAN_QTY.ToDouble();
+                            erpbth.CartonQty = n + 1;
+                        }
+                    }
+                }
 
-               
+                //鐢熸垚鎵撳嵃瀹炰綋
+                if (RcvRptInput.PrintJsons.Count == 0)
+                {
+                    RcvRptInput.PrintJsons.Add(new()
+                    {
+                        ID = Guid.NewGuid().ToString("N"),
+                        Items = new() {
+                            Info.ErpProdInBth
+                        }
+                    });
+                }
+                else
+                {
+                    //鎷煎垎椤�
+                    bool isAdded = false;
+                    foreach (var item in RcvRptInput.PrintJsons)
+                    {
+                        if (!item.Items.Any(q => q.WORK_ORDER == Info.ErpProdInBth.WORK_ORDER))
+                        {
+                            if (item.Items.Count < pageSize)
+                            {
+                                item.Items.Add(Info.ErpProdInBth);
+                                isAdded = true;
+                            }
+                        }
+                        else
+                        {
+                            isAdded = true;
+                        }
+                    }
+                    if (!isAdded)
+                    {
+                        RcvRptInput.PrintJsons.Add(new()
+                        {
+                            ID = Guid.NewGuid().ToString("N"),
+                            Items = new() {
+                            Info.ErpProdInBth
+                        }
+                        });
+                    }
+                }
+
+                //鏆傚瓨鎵爜鏁版嵁
+                if (!InStoreScanInfos.Any(q => q.WORK_ORDER == Info?.ErpProdInBth.WORK_ORDER && q.SN == CurSN))
+                {
+                    Info.InStoreScanInfo.BATCH_NO = CurBatchNo;
+                    InStoreScanInfos.Add(Info.InStoreScanInfo);
+                }
+                var wipPkgs = Biz.Db.Ado.UseStoredProcedure().SqlQuery<MES_WIP_PKG>("SP_MES_GET_ITEM_PKG", new SugarParameter("root", CurSN));
+                int maxLevel = wipPkgs.Max(p => p.LEVEL);
+                foreach (var item in wipPkgs.Where(q => q.LEVEL == maxLevel))
+                {
+                    var scanResult = new BIZ_ERP_PROD_IN_SN
+                    {
+                        AUTH_ORG = OrgCode,
+                        ID = Guid.NewGuid().ToString(),
+                        CARTONNO = CurSN,
+                        SN = item.SN,
+                        BUSINESSCODE = UserCode,
+                        ITEM_CODE = item.ITEM_CODE,
+                        Qty = item.QTY.ToDecimal(),
+                        SOURCECODE = Info?.ErpProdInBth.WORK_ORDER,
+                        STATUS = WMS_ITEM.STATUSs.Counted.GetValue(),
+                        CREATE_USER = UserCode,
+                        CREATE_TIME = DateTime.Now,
+                        UPDATE_USER = UserCode,
+                        UPDATE_TIME = DateTime.Now,
+                    };
+                    ErpProdInSns.Add(scanResult);
+                }
+
+                //淇濆瓨鏁版嵁搴�
+                var db = Business.Biz.Db;
+                var dbTran = db.UseTran(() =>
+                {
+                    var x = db.Storageable(ErpProdInBths, $"InStoreOrderNo_{UserCode}")
+                             .WhereColumns(t => new { t.ORDER_NO, t.WORK_ORDER, t.GHOST_ROW })
+                             .ToStorage();
+                    x.AsInsertable.ExecuteCommand();
+                    x.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
+
+                    var s = db.Storageable(ErpProdInSns, $"InStoreOrderNo_{UserCode}")
+                                .WhereColumns(t => new { t.CARTONNO, t.SN, t.GHOST_ROW })
+                                .ToStorage();
+                    s.AsInsertable.ExecuteCommand();
+                    s.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
+                });
+                if (!dbTran.IsSuccess)
+                {
+                    Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
+                    this.Close(!dbTran.IsSuccess);
+                    throw dbTran.ErrorException;
+                }
+                RcvRptInput.RcvRptDocBases = new();
+                RcvRptInput.labels = new();
+                RcvRptInput.ErpProdInBths = ErpProdInBths;
+                RcvRptInput.userId = UserCode;
+                inStoreInfos = new()
+                {
+                    ErpProdInBths = ErpProdInBths,
+                    InStoreScanInfos = InStoreScanInfos,
+                };
+                action.Data = inStoreInfos;
             }
             catch (Exception ex)
             {
-                action.CatchExceptionWithLog(ex, $"鎵弿鐗╂枡[{input.Code}]澶嶆牳寮傚父");
+                action.CatchExceptionWithLog(ex, $"鎵弿鏉$爜[{code}]澶嶆牳寮傚父");
             }
             return action;
         }
 
-        
+        /// <summary>
+        /// 璋冪敤U9C鎺ュ彛鐢熸垚鍏ュ簱鍗�
+        /// </summary>
+        /// <param name="code"></param>
+        /// <returns></returns>
+        public async Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder()
+        {
+            var action = new ApiAction<RcvRptDocCreateInput>();
+            try
+            {
+                //濡傛灉鎵弿璁板綍涓�0
+                if (!RcvRptInput.ErpProdInBths.Any(q => q.IS_HANDLED == "N"))
+                {
+                    action.IsSuccessed = false;
+                    action.LocaleMsg = Biz.L($"娌℃湁瑕佸叆搴撶殑浜у搧鏁版嵁锛岃鎵弿鍖呰瀹屾垚鐨勭浜岀淮鐮侀噸鏂扮敓鎴愬叆搴撳崟鎹紒");
+                    return action;
+                }
+                if (RcvRptInput.RcvRptDocBases.IsNullOrEmpty() || RcvRptInput.RcvRptDocBases.Count == 0)
+                {
+                    foreach (var item in RcvRptInput.ErpProdInBths)
+                    {
+                        var DocBase = new RcvRptDocBase()
+                        {
+                            WorkOrder = item.WORK_ORDER,
+                            ItemCode = item.ITEM_CODE,
+                            WhCode = "10105",
+                            PkgQty = item.SCAN_QTY,
+                            CompleteQty = item.SCAN_QTY,
+                            OutputType = 0,
+                            StorageType = 4,
+                            DocState = 1,
+                            Status = "N"
+                        };
+                        if (!RcvRptInput.RcvRptDocBases.Any(q => q.WorkOrder == item.WORK_ORDER))
+                        {
+                            RcvRptInput.RcvRptDocBases.Add(DocBase);
+                        }
+                    }
+                }
+                else
+                {
+                    action.IsSuccessed = false;
+                    action.LocaleMsg = Biz.L($"鏈夊瓨鍦ㄦ湭鎻愪氦鐨勫叆搴撳崟锛屼笉鑳界敓鎴愬叆搴撳崟");
+                    return action;
+                }
+                action = await _IMES_U9C.RcvRptDocCreate(RcvRptInput);
+                if (action.IsSuccessed)
+                {
+                    foreach (var sn in ErpProdInSns)
+                    {
+                        var d = action.Data.ErpProdInBths.Where(q => q.WORK_ORDER == sn.SOURCECODE).FirstOrDefault();
+                        if (!d.IsNullOrEmpty())
+                        {
+                            sn.BUSINESSCODE = d.ORDER_NO;
+                            sn.UPDATE_USER = UserCode;
+                            sn.UPDATE_TIME = DateTime.Now;
+                        }
+                    }
+                    foreach (var p in ErpProdIns)
+                    {
+                        var d = action.Data.ErpProdInBths.Where(q => q.WORK_ORDER == p.SOURCECODE).FirstOrDefault();
+                        if (!d.IsNullOrEmpty())
+                        {
+                            p.BILLCODE = d.ORDER_NO;
+                            p.UPDATE_USER = UserCode;
+                            p.UPDATE_TIME = DateTime.Now;
+                            p.HANDLED = 0;
+                        }
+                    }
+                    //淇濆瓨鏁版嵁搴�
+                    var db = Business.Biz.Db;
+                    var dbTran = db.UseTran(() =>
+                    {
+                        db.Updateable(ErpProdInSns, $"InStoreOrderNo_{UserCode}").UpdateColumns(q => new { q.UPDATE_TIME, q.UPDATE_USER, q.BUSINESSCODE }).ExecuteCommand();
+
+                        var x = db.Storageable(ErpProdIns, $"InStoreOrderNo_{UserCode}")
+                                 .WhereColumns(t => new { t.BILLCODE, t.SOURCECODE, t.GHOST_ROW })
+                                 .ToStorage();
+                        x.AsInsertable.ExecuteCommand();
+                        x.AsUpdateable.IgnoreColumns(x => x.ID).ExecuteCommand();
+                    });
+                    if (!dbTran.IsSuccess)
+                    {
+                        Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
+                        this.Close(!dbTran.IsSuccess);
+                        throw dbTran.ErrorException;
+                    }
+                }
+
+            }
+            catch (Exception ex)
+            {
+                action.CatchExceptionWithLog(ex, $"璋冪敤U9C鎺ュ彛鐢熸垚鍏ュ簱鍗曞紓甯�");
+            }
+            return action;
+        }
+
+        /// <summary>
+        /// 鏌ヨ宸叉壂鎻忓垪琛�
+        /// </summary>
+        /// <returns></returns>
+        public async Task<ApiAction<InStoreInfos>> GetScannedList()
+        {
+            var action = new ApiAction<InStoreInfos>();
+            try
+            {
+                _GetScannedList();
+                action.Data = inStoreInfos;
+            }
+            catch (Exception ex)
+            {
+                action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�");
+            }
+            return action;
+        }
+
+        /// <summary>
+        /// 浠庢暟鎹簱璇诲洖鎿嶄綔鑰呭師鏈搷浣滅殑璁板綍
+        /// </summary>
+        /// <returns></returns>
+        private RcvRptDocCreateInput _GetScannedList()
+        {
+            RcvRptInput.RcvRptDocBases = new();
+            RcvRptInput.ErpProdInBths = new();
+            RcvRptInput.PrintJsons = new();
+            RcvRptInput.labels = new();
+            RcvRptInput.userId = UserCode;
+            ErpProdInSns.Clear();
+            ErpProdIns.Clear();
+            ErpProdInBths.Clear();
+            InStoreScanInfos.Clear();
+            RcvRptInput.ErpProdInBths = Biz.Db.Queryable<BIZ_ERP_PROD_IN_BTH>()
+                .Where(q => q.BATCH_NO == SqlFunc.Subqueryable<BIZ_ERP_PROD_IN_BTH>().Where(s => s.ORDER_NO == UserCode && s.GHOST_ROW == false).Select(s => s.BATCH_NO))
+                .IncludesAllFirstLayer().ToList();
+            foreach (var item in RcvRptInput.ErpProdInBths)
+            {
+                var values = item.ProdInSns.GroupBy(x => x.CARTONNO)
+                    .Select(g => new InStoreScanInfo() { SN = g.Key, SALES_ORDER = item.SALES_ORDER, BATCH_NO = item.BATCH_NO, WORK_ORDER = item.WORK_ORDER, SCAN_QTY = g.Sum(x => x.Qty).ToDouble() });
+                foreach (var t in values)
+                {
+                    InStoreScanInfos.Add(t);
+                }
+                item.CartonQty = values.Count();
+
+                ErpProdIns.Add(new()
+                {
+                    AUTH_ORG = OrgCode,
+                    BILLCODE = UserCode,
+                    BILLDATE = DateTime.Now,
+                    STATUS = 0,
+                    HANDLED = -1,
+                    WAREHOUSECODE = "",
+                    SOURCECODE = item.WORK_ORDER,
+                    HANDLED_DATE = DateTime.Now,
+                });
+                ErpProdInSns.AddRange(item.ProdInSns);
+
+                //鐢熸垚鎵撳嵃瀹炰綋
+                if (RcvRptInput.PrintJsons.Count == 0)
+                {
+                    RcvRptInput.PrintJsons.Add(new()
+                    {
+                        ID = Guid.NewGuid().ToString("N"),
+                        Items = new() {
+                            item
+                        }
+                    });
+                }
+                else
+                {
+                    //鎷煎垎椤�
+                    bool isAdded = false;
+                    foreach (var p in RcvRptInput.PrintJsons)
+                    {
+                        if (!p.Items.Any(q => q.WORK_ORDER == item.WORK_ORDER))
+                        {
+                            if (p.Items.Count < pageSize)
+                            {
+                                p.Items.Add(item);
+                                isAdded = true;
+                            }
+                        }
+                        else
+                        {
+                            isAdded = true;
+                        }
+                    }
+                    if (!isAdded)
+                    {
+                        RcvRptInput.PrintJsons.Add(new()
+                        {
+                            ID = Guid.NewGuid().ToString("N"),
+                            Items = new() {
+                            item
+                        }
+                        });
+                    }
+                }
+            }
+            ErpProdInBths = RcvRptInput.ErpProdInBths;
+
+            inStoreInfos = new()
+            {
+                ErpProdInBths = ErpProdInBths,
+                InStoreScanInfos = InStoreScanInfos,
+            };
+            return RcvRptInput;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎绠�
+        /// </summary>
+        /// <param name="SN"></param>
+        /// <returns></returns>
+        public async Task<ApiAction> Delete(string CartonNo)
+        {
+            var action = new ApiAction();
+            try
+            {
+                var ErpProdInSn = ErpProdInSns.Where(s => s.CARTONNO == CartonNo).ToList();
+                BIZ_ERP_PROD_IN_BTH erpbth = new();
+                if (!ErpProdInSn.IsNullOrEmpty())
+                {
+                    erpbth = ErpProdInBths.Where(q => q.WORK_ORDER == ErpProdInSn[0].SOURCECODE).FirstOrDefault();
+                    if (!erpbth.IsNullOrEmpty())
+                    {
+                        erpbth.SCAN_QTY -= ErpProdInSn.Count(q => q.CARTONNO == CartonNo);
+                        erpbth.CartonQty--;
+                    }
+                }
+
+                //淇濆瓨鏁版嵁搴�
+                var db = Business.Biz.Db;
+                var dbTran = db.UseTran(() =>
+                {
+                    db.Deleteable<BIZ_ERP_PROD_IN_SN>().Where(x => x.BUSINESSCODE == UserCode && x.CARTONNO == CartonNo).ExecuteCommand();
+                    db.Updateable(erpbth, $"InStoreOrderNo_{UserCode}").ExecuteCommand();
+                    if (erpbth.CartonQty == 0)
+                    {
+                        db.Deleteable(erpbth).ExecuteCommand();
+                    }
+                });
+                if (!dbTran.IsSuccess)
+                {
+                    Logger.Default.Fatal(dbTran.ErrorException, "Database transaction delete exception");
+                    this.Close(!dbTran.IsSuccess);
+                    throw dbTran.ErrorException;
+                }
+            }
+            catch (Exception ex)
+            {
+                action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�");
+            }
+            return action;
+        }
+
+        /// <summary>
+        /// 娓呴櫎
+        /// </summary>
+        /// <returns></returns>
+        public async Task<ApiAction> Clear()
+        {
+            var action = new ApiAction();
+            try
+            {
+                RcvRptInput = new();
+                ProdInBatchs = new() { };
+                ErpProdInBths = new() { };
+                ErpProdIns = new();
+                /// <summary>
+                /// 鎵弿鍒楄〃 
+                /// </summary>
+                InStoreScanInfos = new() { };
+                ErpProdInSns = new();
+                inStoreInfos = new() { };
+
+                //淇濆瓨鏁版嵁搴�
+                var db = Business.Biz.Db;
+                var dbTran = db.UseTran(() =>
+                {
+                    db.Deleteable<BIZ_ERP_PROD_IN_BTH>().Where(x => x.ORDER_NO == UserCode && x.IS_HANDLED == "N").ExecuteCommand();
+                    db.Deleteable<BIZ_ERP_PROD_IN_SN>().Where(x => x.BUSINESSCODE == UserCode).ExecuteCommand();
+                });
+                if (!dbTran.IsSuccess)
+                {
+                    Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
+                    this.Close(!dbTran.IsSuccess);
+                    throw dbTran.ErrorException;
+                }
+            }
+            catch (Exception ex)
+            {
+                action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�");
+            }
+            return action;
+        }
 
         #endregion Functions
 

--
Gitblit v1.9.3