From 9556c5fc2168b71e5aba4bd5353fcd70e681ee46 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期一, 09 十二月 2024 01:54:25 +0800
Subject: [PATCH] 调用U9C接口生成入库单更新

---
 Tiger.Business.MES/Transaction/InStoreOrderNo.cs |  268 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 208 insertions(+), 60 deletions(-)

diff --git a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs
index f4ee422..78bb79d 100644
--- a/Tiger.Business.MES/Transaction/InStoreOrderNo.cs
+++ b/Tiger.Business.MES/Transaction/InStoreOrderNo.cs
@@ -17,6 +17,9 @@
 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
 {
@@ -34,6 +37,8 @@
             ApiHost = apiHost;
             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;
         }
@@ -44,20 +49,26 @@
         public long UserId { get; set; }
         public string OrgCode { 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
 
+        public ApiAction<InStoreInfos> GetInStoreInfos() {
+            return new() { Data= inStoreInfos };
+        }
         /// <summary>
         /// 鎵弿鏉$爜
         /// </summary>
@@ -86,6 +97,7 @@
                 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;
@@ -94,7 +106,19 @@
                     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
                 {
@@ -104,7 +128,7 @@
                         if (!erpbth.IsNullOrEmpty())
                         {
                             erpbth.SCAN_QTY += Info.InStoreScanInfo.SCAN_QTY.ToDouble();
-                            Info.ErpProdInBth.CartonQty++;
+                            erpbth.CartonQty = n + 1;
                         }
                     }
                 }
@@ -139,7 +163,7 @@
                             isAdded = true;
                         }
                     }
-                    if (isAdded)
+                    if (!isAdded)
                     {
                         RcvRptInput.PrintJsons.Add(new()
                         {
@@ -154,14 +178,16 @@
                 //鏆傚瓨鎵爜鏁版嵁
                 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))
+                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,
@@ -200,10 +226,16 @@
                     this.Close(!dbTran.IsSuccess);
                     throw dbTran.ErrorException;
                 }
-                action.Data = new() { 
+                RcvRptInput.RcvRptDocBases = new();
+                RcvRptInput.labels = new();
+                RcvRptInput.ErpProdInBths = ErpProdInBths;
+                RcvRptInput.userId = UserCode;
+                inStoreInfos= new()
+                {
                     ErpProdInBths = ErpProdInBths,
                     InStoreScanInfos = InStoreScanInfos,
                 };
+                action.Data = inStoreInfos;
             }
             catch (Exception ex)
             {
@@ -217,48 +249,88 @@
         /// </summary>
         /// <param name="code"></param>
         /// <returns></returns>
-        public async Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder(RcvRptDocCreateInput input)
+        public async Task<ApiAction<RcvRptDocCreateInput>> GenerateInStoreOrder()
         {
             var action = new ApiAction<RcvRptDocCreateInput>();
             try
             {
-                //input.RcvRptDocBases = new()
-                //{
-                //    new(){
-                //    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"
-                //    }
-                //};
-                action = await _IMES_U9C.RcvRptDocCreate(input);
-
-                //淇濆瓨鏁版嵁搴�
-                var db = Business.Biz.Db;
-                var dbTran = db.UseTran(() =>
+                //濡傛灉鎵弿璁板綍涓�0
+                if (!RcvRptInput.ErpProdInBths.Any(q => q.IS_HANDLED == "N"))
                 {
-                    //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)
+                    action.IsSuccessed = false;
+                    action.LocaleMsg = Biz.L($"娌℃湁瑕佸叆搴撶殑浜у搧鏁版嵁锛岃鎵弿鍖呰瀹屾垚鐨勭浜岀淮鐮侀噸鏂扮敓鎴愬叆搴撳崟鎹紒");
+                    return action;
+                }
+                if (RcvRptInput.RcvRptDocBases.IsNullOrEmpty() || RcvRptInput.RcvRptDocBases.Count == 0)
                 {
-                    Logger.Default.Fatal(dbTran.ErrorException, "Database transaction save exception");
-                    this.Close(!dbTran.IsSuccess);
-                    throw dbTran.ErrorException;
+                    foreach (var item in RcvRptInput.ErpProdInBths)
+                    {
+                        var DocBase = new RcvRptDocBase()
+                        {
+                            WorkOrder = item.WORK_ORDER,
+                            ItemCode = item.ITEM_CODE,
+                            WhCode = "10105",
+                            PkgQty = item.SCAN_QTY.ToInt32(),
+                            CompleteQty = item.SCAN_QTY.ToInt32(),
+                            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;
+                    }
                 }
 
             }
@@ -270,39 +342,115 @@
         }
 
         /// <summary>
-        /// 鏌ヨ瀵瑰簲鐨勬潯鐮�
+        /// 鏌ヨ宸叉壂鎻忓垪琛�
         /// </summary>
         /// <returns></returns>
-        public async Task<ApiAction<RcvRptDocCreateInput>> GetScannedBarcodes()
+        public async Task<ApiAction<RcvRptDocCreateInput>> GetScannedList()
         {
             var action = new ApiAction<RcvRptDocCreateInput>();
             try
             {
-                //var query = await Biz.Db.Queryable<BIZ_ERP_RECEIPT_SN, BAS_ITEM>((t, m) =>
-                //                        new JoinQueryInfos(
-                //                            JoinType.Left, t.ITEM_CODE == m.ITEM_CODE
-                //                            ))
-                //    .Where((t, m) => t.CREATE_USER == UserCode
-                //        //&& t.WAREHOUSECODE.ToUpper() == WarehouseCode.ToUpper()
-                //        && t.STATUS == WMS_ITEM.STATUSs.Counted.GetValue()
-                //        && t.ITEM_CODE.ToUpper() == MaterialCode.ToUpper()
-                //        && t.BILLCODE == UserCode
-                //        && t.AUTH_ORG == OrgCode)
-                //    .Select((t, m) => new Model.Minsun.CustSupplyCheckDetail
-                //    {
-                //        Barcode = t.SN,
-                //        BarcodeQty = t.SCANQTY,
-                //        Unit = m.UNIT
-                //    })
-                //    .ToListAsync();
+                action.Data = _GetScannedList();
             }
             catch (Exception ex)
             {
-                action.CatchExceptionWithLog(ex, $"鏌ヨ瀵瑰簲鐨勬潯鐮佸紓甯�");
+                action.CatchExceptionWithLog(ex, $"鏌ヨ宸叉壂鎻忓垪琛ㄥ紓甯�");
             }
             return action;
         }
 
+        /// <summary>
+        /// 浠庢暟鎹簱璇诲洖鎿嶄綔鑰呭師鏈搷浣滅殑璁板綍
+        /// </summary>
+        /// <returns></returns>
+        private RcvRptDocCreateInput _GetScannedList()
+        {
+            RcvRptInput.RcvRptDocBases = new();
+            RcvRptInput.PrintJsons = new();
+            RcvRptInput.labels = new();
+            RcvRptInput.userId = UserCode;
+            if (RcvRptInput.ErpProdInBths.Count == 0)
+            {
+                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).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();
+
+                    BIZ_ERP_PROD_IN prodIn = new()
+                    {
+                        AUTH_ORG = OrgCode,
+                        BILLCODE = UserCode,
+                        BILLDATE = DateTime.Now,
+                        STATUS = 0,
+                        HANDLED = -1,
+                        WAREHOUSECODE = "",
+                        SOURCECODE = item.WORK_ORDER,
+                        HANDLED_DATE = DateTime.Now,
+                    };
+                    ErpProdIns.Add(prodIn);
+                    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;
+        }
+
         #endregion Functions
 
         public override bool Close(bool needSaveHistoryLog = false)

--
Gitblit v1.9.3