From 4108af346376cce285499336917fd01b2435de06 Mon Sep 17 00:00:00 2001
From: bklLiudl <673013083@qq.com>
Date: 星期六, 21 六月 2025 11:03:55 +0800
Subject: [PATCH] 修改质检请验业务流程。

---
 Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs |  472 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 465 insertions(+), 7 deletions(-)

diff --git a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
index 8bf3ab5..81a389c 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -531,7 +531,7 @@
                     #endregion
 
                     #region 璐ㄦ璇烽獙
-                    if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1")
+                    if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1")
                     {
                         var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot);
                         if (qualityRequest == null)
@@ -1047,7 +1047,7 @@
                         #endregion
 
                         #region 璐ㄦ璇烽獙
-                        if ((arrNotice.Type == "1" || arrNotice.Type == "4" || arrNotice.Type == "5") && sku.IsInspect != "1")
+                        if ((arrNotice.Type == "1" || arrNotice.Type == "4" || arrNotice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1")
                         {
                             var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot);
                             if (qualityRequest == null)
@@ -1497,7 +1497,7 @@
                 #endregion
 
                 #region 璐ㄦ璇烽獙
-                if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1")
+                if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1" && sku.IsControlled != "1")
                 {
                     var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot);
                     if (qualityRequest == null)
@@ -2231,12 +2231,12 @@
                     .Select(m=>new { m.ProductionTime ,m.ExpirationTime}).OrderBy(m=>m.ProductionTime).ToList();//&& m.Status == "0"
                 foreach (var item in models)
                 {
-                    var boxNoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.ProductionTime == item.ProductionTime).Select(m => m.BoxNo).ToList();
+                    var boxNoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.Status == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId && m.ProductionTime == item.ProductionTime).Select(m => m.BoxNo).ToList();
                     if (boxNoList.Count > 0)
                     {
                         data.BoxNoList = boxNoList;
-                        data.Date1 = item.ProductionTime.ToString();
-                        data.Date2 = item.ExpirationTime.ToString();
+                        data.Date1 = item.ProductionTime == null ? "" : Convert.ToDateTime(item.ProductionTime).ToString("yyyy-MM-dd");
+                        data.Date2 = item.ExpirationTime == null ? "" : Convert.ToDateTime(item.ExpirationTime).ToString("yyyy-MM-dd");
 
                         break;
                     }
@@ -2413,6 +2413,464 @@
             {
                 throw new Exception(e.Message);
             }
+        }
+
+        /// <summary>
+        /// 鏍规嵁绠辩爜鑾峰彇鏍囩绠辩爜淇℃伅锛堣溅闂村叆搴�-鑾峰彇WMS鐢熸垚鐨勭淇℃伅锛�
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public List<BoxInfoDto> GetWmsBoxInfos(string boxNo)
+        {
+            try
+            {
+                if (string.IsNullOrEmpty(boxNo))
+                {
+                    throw new Exception("璇锋壂鎻忓绠辨潯鐮�!");
+                }
+                
+                string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo, BitBoxMark, SUM(Qty) as Qty  FROM BllBoxInfo 
+                                        WHERE IsDel = '0' and Status='0' and BoxNo = '{boxNo}'
+                                        GROUP BY BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
+                var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
+
+                if (models.Count != 0)
+                {
+                    return models;
+                }
+                else
+                {
+                    throw new Exception("娌℃湁鏌ヨ鍒扮鐮佷俊鎭�");
+                }
+                
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
+
+
+        public void ChejianIn(string palletNo,string boxNo,decimal qty,string areaNo,int userId)
+        {
+            try
+            {
+                #region MyRegion
+
+                if (string.IsNullOrWhiteSpace(palletNo))
+                {
+                    throw new Exception("鎵樼洏鍙蜂笉鑳戒负绌�");
+                }
+                if (string.IsNullOrWhiteSpace(boxNo))
+                {
+                    throw new Exception("绠卞彿涓嶈兘涓虹┖");
+                }
+                if (qty<=0)
+                {
+                    throw new Exception("鏁伴噺涓嶈兘灏忕瓑0");
+                }
+                var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo).ToList();
+                if (boxInfo.Count == 0)
+                {
+                    throw new Exception("鏈煡璇㈠埌褰撳墠绠卞彿淇℃伅");
+                }
+                var boxInfoOne = boxInfo.First();
+                var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
+                if (pall == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌褰撳墠鎵樼洏淇℃伅");
+                }
+                #endregion
+
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+                //褰撳墠鏃堕棿
+                var comTime = DateTime.Now;
+
+                #region 鍖呰 
+
+                var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == boxInfoOne.SkuNo);
+                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
+
+                var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 
+                var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 
+
+                //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
+                new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum);
+
+                #endregion
+
+                var msgStr = $"绠卞彿涓簕boxNo}";
+                var boxInfoList = new List<BllBoxInfo>();
+
+                
+                boxInfoList.AddRange(boxInfo);
+
+                #region 搴撳瓨鏄庣粏
+
+                var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo);
+                if (area == null)
+                {
+                    throw new Exception("鍏ュ簱鍖哄煙涓嶈兘涓虹┖");
+                }
+                    
+                var tags = "0";
+                    
+                // 鍒ゆ柇搴撳瓨鏄庣粏鏄惁宸叉湁姝ゆ墭鐩樹俊鎭�  
+                var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo== boxInfoOne.SkuNo && m.LotNo == boxInfoOne.LotNo && m.PalletNo == palletNo);
+                var sdId1 = 0;
+                if (sd1 != null)
+                {
+                    if (sd1.AreaNo!= areaNo)
+                    {
+                        throw new Exception("閫夋嫨鐨勫尯鍩熶笌搴撳瓨涓嶅悓");
+                    }
+                    sdId1 = sd1.Id;
+                    // 搴撳瓨宸插瓨鍦� 鏇存柊鏁版嵁
+                    sd1.Qty += qty;
+                    sd1.CompleteTime = comTime;
+                    sd1.UpdateUser = userId;
+                    sd1.UpdateTime = comTime;
+
+                    Db.Updateable(sd1).ExecuteCommand();
+                }
+                else
+                {
+                    var sd2 = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0" && !string.IsNullOrWhiteSpace(m.AreaNo));
+                    if (sd2.Count(m=>m.AreaNo!= areaNo) > 0)
+                    {
+                        throw new Exception("褰撳墠鎵樼洏浣嶇疆涓庨�夋嫨鐨勪笉鍚岋紝璇锋牳瀹�");
+                    }
+                    // 搴撳瓨涓嶅瓨鍦� 鎻掑叆鏁版嵁
+                    sd1 = new DataStockDetail()
+                    {
+                        ASNNo = "",
+                        LotNo = boxInfoOne.LotNo,
+                        LotText = boxInfoOne.LotText,
+                        SupplierLot = boxInfoOne.SupplierLot,
+                        SkuNo = sku.SkuNo,
+                        SkuName = sku.SkuName,
+                        Standard = sku.Standard,
+                        Qty = qty,
+                        LockQty = 0,
+                        FrozenQty = 0,
+                        InspectQty = 0,
+                        WareHouseNo = area.WareHouseNo,//鎵�灞炰粨搴�
+                        RoadwayNo = "",//鎵�灞炲贩閬�
+                        AreaNo = area.AreaNo,//鎵�灞炲尯鍩�
+                        LocatNo = "",//鍌ㄤ綅鍦板潃
+                        PalletNo = palletNo,
+                        PalletTags = tags,
+                        CompleteTime = comTime,
+                        ProductionTime = boxInfoOne.ProductionTime,
+                        ExpirationTime = boxInfoOne.ExpirationTime,
+                        Status = "0",
+                        InspectMark = boxInfoOne.InspectMark,
+                        InspectStatus = sku.IsInspect,
+                        BitPalletMark = "1",
+                        PackagNo = sku.PackagNo,
+
+                        IsDel = "0",
+                        CreateUser = 0,
+                        CreateTime = comTime
+                    };
+
+                    //娣诲姞搴撳瓨鏄庣粏
+                    sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
+                }
+                #endregion
+
+                // 鏇存敼绠辨敮鍏崇郴琛�
+                decimal factQty = 0.00m;//鎵樼洏鎬绘暟閲�
+                     
+
+                //鏍囩缁勬墭
+                var boxGroup = boxInfo.GroupBy(m => m.BoxNo).ToList();
+                foreach (var g in boxGroup)
+                {
+                    decimal boxFullQty = 0;//绠卞唴鎬绘暟閲�
+                    foreach (var box in g)
+                    {
+                        if (box.BindNo != null && box.BindNo != 0)
+                        {
+                            continue;
+                        }
+                            
+                            
+                        box.PalletNo = palletNo;
+                        box.Status = "2";
+                            
+                        box.CompleteTime = comTime;
+                        box.UpdateTime = comTime;
+                        box.UpdateUser = userId;
+
+                        //box.Qty = box.Qty;
+                        //box.BitBoxMark = box.Qty == box.FullQty ? "0" : "1";
+
+                        factQty += box.Qty;
+                        boxFullQty += box.Qty;
+                            
+                        #region 搴撳瓨绠辩爜鏄庣粏
+                        var box2 = new DataBoxInfo()
+                        {
+                            StockDetailId = sdId1,
+                            BoxNo = box.BoxNo,
+                            BoxNo2 = box.BoxNo2,
+                            BoxNo3 = box.BoxNo3,
+                            PalletNo = box.PalletNo,
+                            PalletNo2 = box.PalletNo2,
+                            PalletNo3 = box.PalletNo3,
+                            Qty = box.Qty,
+                            FullQty = box.FullQty,
+                            Status = "2",//0锛氭湭缁勬墭  1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣
+                            LotNo = box.LotNo,
+                            LotText = box.LotText,
+                            SkuNo = box.SkuNo,
+                            SkuName = box.SkuName,
+                            Standard = sku.Standard,
+                            ProductionTime = box.ProductionTime,
+                            SupplierLot = box.SupplierLot,
+                            InspectStatus = sku.IsInspect,
+                            InspectMark = box.InspectMark,
+                            BitBoxMark = box.BitBoxMark,
+                            ExpirationTime = box.ExpirationTime,
+
+                            CreateUser = 0,
+                            CreateTime = comTime
+                        };
+                        //娣诲姞搴撳瓨绠辩爜鏄庣粏
+                        Db.Insertable(box2).ExecuteCommand();
+                        #endregion
+                    }
+                    if (boxFullQty > bNum)
+                    {
+                        throw new Exception($"缁戝畾澶辫触锛寋g.Key}绠辩爜缁戝畾鏁伴噺澶т簬璇ョ墿鍝佸寘瑁呮暟閲忥紒");
+                    }
+                }
+                //鏇存敼绠辨敮鍏崇郴琛ㄤ俊鎭�
+                Db.Updateable(boxInfoList).ExecuteCommand();
+
+
+                #region 搴撳瓨
+                var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == boxInfoOne.LotNo);
+                if (dataStock != null)
+                {
+                    dataStock.Qty += factQty;
+                    Db.Updateable(dataStock).ExecuteCommand();
+                }
+                else
+                {
+                    var stock = new DataStock()
+                    {
+                        SkuNo = sku.SkuNo,
+                        SkuName = sku.SkuName,
+                        Standard = sku.Standard,
+                        LotNo = boxInfoOne.LotNo,
+                        LotText = boxInfoOne.LotText,
+                        Qty = qty,
+                        LockQty = 0,
+                        FrozenQty = 0,
+                        IsSampling = "0",
+                        IsDel = "0",
+                        CreateUser = userId,
+                        CreateTime = comTime
+                    };
+                    Db.Insertable(stock).ExecuteCommand();
+                }
+                #endregion
+
+                // 鏇存敼鎵樼洏浣跨敤鐘舵��
+                var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';";
+                ////娣诲姞鎵樼洏璁板綍琛ㄦ暟鎹�
+                //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','缁勭洏','0',getDate(),{userId},NULL,NULL);";
+                //Db.Ado.ExecuteCommand(sqlStr);
+                new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "杞﹂棿鍏ュ簱", boxNo, "娣诲姞", $"娣诲姞浜嗘墭鐩樼爜涓猴細{palletNo}銆亄msgStr}鐨勫叆搴撲俊鎭�", userId);
+
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
+
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
+
+        /// <summary>
+        /// 杞﹂棿缁戝畾鎵樼洏 涓嶈创鏍囩墿鏂�
+        /// </summary>
+        /// <param name="model"></param>
+        /// <param name="userId"></param>
+        /// <exception cref="Exception"></exception>
+        public void ChejianQtyIn(string palletNo, string skuNo, string lotNo, decimal qty, string areaNo, int userId)
+        {
+            try
+            {
+                #region MyRegion
+
+                if (string.IsNullOrWhiteSpace(palletNo))
+                {
+                    throw new Exception("鎵樼洏鍙蜂笉鑳戒负绌�");
+                }
+                if (string.IsNullOrWhiteSpace(skuNo))
+                {
+                    throw new Exception("鐗╂枡涓嶈兘涓虹┖");
+                }
+                if (qty <= 0)
+                {
+                    throw new Exception("鏁伴噺涓嶈兘灏忕瓑0");
+                }
+                var skuInfo = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == skuNo);
+                if (skuInfo == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鐗╂枡淇℃伅");
+                } 
+                var pall = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNo);
+                if (pall == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌褰撳墠鎵樼洏淇℃伅");
+                }
+                #endregion
+
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+                //褰撳墠鏃堕棿
+                var comTime = DateTime.Now;
+
+                #region 鍖呰 
+                 
+                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == skuInfo.PackagNo);
+
+                var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 
+                var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 
+
+                //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
+                new Common().GetPackQtyInfo(pack.PackagNo, ref pNum, ref bNum);
+
+                #endregion
+
+                 
+
+                #region 搴撳瓨鏄庣粏
+
+                var area = Db.Queryable<SysStorageArea>().First(m => m.IsDel == "0" && m.AreaNo == areaNo);
+                if (area == null)
+                {
+                    throw new Exception("鍏ュ簱鍖哄煙涓嶈兘涓虹┖");
+                }
+
+                var tags = "0";
+
+                // 鍒ゆ柇搴撳瓨鏄庣粏鏄惁宸叉湁姝ゆ墭鐩樹俊鎭�  
+                var sd1 = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.SkuNo == skuNo && m.LotNo == lotNo && m.PalletNo == palletNo);
+                var sdId1 = 0;
+                if (sd1 != null)
+                {
+                    if (sd1.AreaNo != areaNo)
+                    {
+                        throw new Exception("閫夋嫨鐨勫尯鍩熶笌搴撳瓨涓嶅悓");
+                    }
+                    sdId1 = sd1.Id;
+                    // 搴撳瓨宸插瓨鍦� 鏇存柊鏁版嵁
+                    sd1.Qty += qty;
+                    sd1.CompleteTime = comTime;
+                    sd1.UpdateUser = userId;
+                    sd1.UpdateTime = comTime;
+                    if (sd1.Qty >= pNum)
+                    {
+                        sd1.BitPalletMark = "0";
+                    }
+                    Db.Updateable(sd1).ExecuteCommand();
+                }
+                else
+                {
+                    // 搴撳瓨涓嶅瓨鍦� 鎻掑叆鏁版嵁
+                    sd1 = new DataStockDetail()
+                    {
+                        LotNo = lotNo,
+                        SupplierLot = "",
+                        SkuNo = skuInfo.SkuNo,
+                        SkuName = skuInfo.SkuName,
+                        Standard = skuInfo.Standard,
+                        Qty = qty,
+                        LockQty = 0,
+                        FrozenQty = 0,
+                        InspectQty = 0,
+                        WareHouseNo = area.WareHouseNo,//鎵�灞炰粨搴�
+                        RoadwayNo = "",//鎵�灞炲贩閬�
+                        AreaNo = area.AreaNo,//鎵�灞炲尯鍩�
+                        LocatNo = "",//鍌ㄤ綅鍦板潃
+                        PalletNo = palletNo,
+                        PalletTags = tags,
+                        CompleteTime = comTime,
+                        //ProductionTime = boxInfoOne.ProductionTime,
+                        //ExpirationTime = boxInfoOne.ExpirationTime,
+                        Status = "0",
+                        InspectMark = "0",
+                        InspectStatus = "1",
+                        BitPalletMark = qty >= pNum ?"0" :"1",
+                        PackagNo = skuInfo.PackagNo,
+
+                        IsDel = "0",
+                        CreateUser = 0,
+                        CreateTime = comTime
+                    };
+
+                    //娣诲姞搴撳瓨鏄庣粏
+                    sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
+                }
+                #endregion
+
+                // 鏇存敼绠辨敮鍏崇郴琛�
+                decimal factQty = 0.00m;//鎵樼洏鎬绘暟閲�
+
+
+                #region 搴撳瓨
+                var dataStock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == skuInfo.SkuNo && m.LotNo == lotNo);
+                if (dataStock != null)
+                {
+                    dataStock.Qty += factQty;
+                    Db.Updateable(dataStock).ExecuteCommand();
+                }
+                else
+                {
+                    var stock = new DataStock()
+                    {
+                        SkuNo = skuInfo.SkuNo,
+                        SkuName = skuInfo.SkuName,
+                        Standard = skuInfo.Standard,
+                        LotNo = lotNo,
+                        LotText = "",
+                        Qty = qty,
+                        LockQty = 0,
+                        FrozenQty = 0,
+                        IsSampling = "0",
+                        IsDel = "0",
+                        CreateUser = userId,
+                        CreateTime = comTime
+                    };
+                    Db.Insertable(stock).ExecuteCommand();
+                }
+                #endregion
+
+                // 鏇存敼鎵樼洏浣跨敤鐘舵��
+                var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{palletNo}';";
+                ////娣诲姞鎵樼洏璁板綍琛ㄦ暟鎹�
+                //sqlStr += $"insert into LogPalletTrack values('{palletNo}','{boxNo}','缁勭洏','0',getDate(),{userId},NULL,NULL);";
+                Db.Ado.ExecuteCommand(sqlStr);
+                new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "杞﹂棿鍏ュ簱", skuNo, "娣诲姞", $"娣诲姞浜嗘墭鐩樼爜涓猴細{palletNo}鐨勫叆搴撲俊鎭�", userId);
+
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
+
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+
         }
 
         #endregion
@@ -5506,7 +5964,7 @@
                 #endregion
 
                 #region 璐ㄦ璇烽獙
-                if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1")
+                if ((notice.Type == "1" || notice.Type == "4" || notice.Type == "5") && sku.IsInspect != "1"  && sku.IsControlled != "1")
                 {
                     var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo && m.LotNo == bind.LotNo && m.SupplierLot == bind.SupplierLot);
                     if (qualityRequest == null)

--
Gitblit v1.8.0