From b2fc93e15a14847141b0a0a8bd591b945c9fa0a3 Mon Sep 17 00:00:00 2001
From: test <15284381150@163.com>
Date: 星期四, 21 八月 2025 18:44:34 +0800
Subject: [PATCH] 添加赋码实体类和修改箱码方法,改正拣货拼托

---
 Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs |  324 ++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 304 insertions(+), 20 deletions(-)

diff --git a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
index e08dffd..657aebb 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -29,6 +29,8 @@
 using Model.ModelVm.SysVm;
 using System.Security.Cryptography.X509Certificates;
 using AutoMapper.Configuration.Annotations;
+using Utility;
+using System.Diagnostics.Metrics;
 
 namespace WMS.BLL.BllPdaServer
 {
@@ -110,7 +112,15 @@
                     throw new Exception("鏈煡璇㈠埌鎵樼洏淇℃伅锛岃鏍稿疄锛�");
                 }
                 //楠岃瘉鍏ュ簱鍗曟槑缁嗘槸鍚﹀瓨鍦�
-                var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo && m.LotNo.Contains(model.LotNo));
+                var detail = new BllArrivalNoticeDetail();
+                if (string.IsNullOrEmpty(model.LotNo))
+                {
+                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo);
+                }
+                else
+                {
+                    detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo && m.LotNo.Contains(model.LotNo));
+                }
                 if (detail == null)
                 {
                     throw new Exception("褰撳墠鐗╂枡鍙婃壒娆′笌鍗曟嵁鏃犲叧鑱旓紝璇锋牳瀹�!");
@@ -132,13 +142,20 @@
                 #region 鍖呰 
 
                 var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo);
-                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);
-
+                if (sku == null)
+                {
+                    throw new Exception("褰撳墠鐗╂枡淇℃伅涓嶅瓨鍦紝璇锋牳瀹�!");
+                }                
+                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
+                if (pack == null)
+                {
+                    throw new Exception("褰撳墠鐗╂枡鍖呰淇℃伅涓嶅瓨鍦紝璇锋牳瀹�!");
+                }
                 var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 
                 var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 
 
                 //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
-                new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
+                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
 
                 #endregion
 
@@ -187,9 +204,9 @@
                 //缁戝畾绠辨�绘暟閲�
                 //model.SkuQty = boxInfoList.Sum(s => s.Qty);
                 //鍜岄�夋嫨鐨勬壒娆″悓鎵规鐨勭鐮佷俊鎭�
-                var sameBoxInfoList = boxInfoList.Where(w => w.LotNo == model.LotNo && w.Status == "0").ToList();
+                var sameBoxInfoList = boxInfoList.Where(w => (w.LotNo ?? "") == model.LotNo && w.Status == "0").ToList();
                 //鍜岄�夋嫨鐨勬壒娆′笉鍚屾壒娆$殑绠辩爜淇℃伅锛堟嫾绠辨壒娆★級
-                var notBoxInfoList = boxInfoList.Where(w => w.LotNo != model.LotNo).ToList();
+                var notBoxInfoList = boxInfoList.Where(w => (w.LotNo ?? "") != model.LotNo).ToList();
                 #endregion
 
                 if (sameBoxInfoList.Count <= 0)
@@ -300,7 +317,7 @@
                             InspectMark = bind.InspectMark,
                             InspectStatus = sku.IsInspect,
                             BitPalletMark = bind.BitPalletMark,
-                            PackagNo = detail.PackagNo,                    //liudl 鐢眘ku鐨勫寘瑁呯紪鍙峰彉涓哄叆搴撳崟鏄庣粏鐨勫寘瑁呯紪鐮�       
+                            PackagNo = sku.PackagNo,                    
                             IsBale = bind.IsBale,
                             IsBelt = bind.IsBelt,
 
@@ -359,7 +376,7 @@
                                 continue;
                             }
                             //绠卞唴鐗╂枡鎵规涓庡崟鎹槑缁嗕笉绗﹀悎
-                            if (box.SkuNo != detail.SkuNo || box.LotNo != model.LotNo)
+                            if (box.SkuNo != detail.SkuNo || (box.LotNo ?? "") != model.LotNo)
                             {
                                 throw new Exception($"-1:{box.BoxNo}绠卞唴鐗╂枡鍙婃壒娆′笌鍗曟嵁涓嶄竴鑷达紝璇锋牳瀹�!");
                             }
@@ -1163,7 +1180,7 @@
                 }
                 //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱澶�
                 var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
-                if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo))
+                if (stockDetail != null && !string.IsNullOrEmpty(stockDetail.WareHouseNo) && stockDetail.WareHouseNo != "W04")
                 {
                     throw new Exception("璇ユ墭鐩樺凡鏈夊偍浣嶄俊鎭紝璇锋牳瀹烇紒");
                 }
@@ -1177,12 +1194,20 @@
                 #region 鍖呰
 
                 var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo);
-                //var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);    // liudl 鐢盨ku鍖呰缂栧彿鍙樻洿涓哄叆搴撳崟鏄庣粏鍖呰缂栧彿
+                if (sku == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ョ墿鏂欎俊鎭紝璇锋牳瀹烇紒");
+                }
+                var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
+                if (pack == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ョ墿鏂欏寘瑁呬俊鎭紝璇锋牳瀹烇紒");
+                }
 
                 var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 
                 var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 
                 //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
-                new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
+                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
                  
 
                 #endregion
@@ -1339,7 +1364,7 @@
                         InspectMark = bind.InspectMark,
                         InspectStatus = inspectStatusStr,
                         BitPalletMark = bind.BitPalletMark,
-                        PackagNo = detail.PackagNo,                    //liudl 鐢眘ku鐨勫寘瑁呯紪鍙峰彉涓哄叆搴撳崟鏄庣粏鐨勫寘瑁呯紪鐮�       
+                        PackagNo = sku.PackagNo,                    //liudl 鐢眘ku鐨勫寘瑁呯紪鍙峰彉涓哄叆搴撳崟鏄庣粏鐨勫寘瑁呯紪鐮�       
                         IsBale = bind.IsBale,
                         IsBelt = bind.IsBelt,
 
@@ -1347,6 +1372,13 @@
                         CreateUser = 0,
                         CreateTime = comTime
                     };
+                    if (stockDetail != null)
+                    {
+                        sd1.WareHouseNo = stockDetail.WareHouseNo;
+                        sd1.AreaNo = stockDetail.AreaNo;
+                        sd1.RoadwayNo = stockDetail.RoadwayNo;
+                        sd1.LocatNo = stockDetail.LocatNo;
+                    }
 
                     //缁存姢搴撳瓨鏄庣粏璐т富/渚涘簲鍟嗕俊鎭� //0:鎴愬搧鍏ュ簱锛�2:涓棿鍝佸叆搴�,4:杞﹂棿浣欐枡鍏ュ簱,6:浠e偍鍏ュ簱,7:瀵勫瓨鍏ュ簱
                     if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")
@@ -2050,7 +2082,7 @@
         /// </summary>
         /// <param name="model"></param>
         /// <returns></returns>
-        public List<BoxInfoDto> GetFMBindBoxInfos(string boxno,string url)
+        /*public List<BoxInfoDto> GetFMBindBoxInfos(string boxno,string url)
         {
             try
             {
@@ -2147,6 +2179,132 @@
                     throw new Exception("绠辩爜淇℃伅涓嶅瓨鍦�!");
                 }
 
+                return models;
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }*/
+
+        public List<BoxInfoDto> GetFMBindBoxInfos(string boxno, string url)
+        {
+            try
+            {
+                #region 绠辩爜璇锋眰鎺ュ彛锛屾寮忕郴缁熸斁寮�
+                var data = new
+                {
+                    BoxNo = boxno
+                };
+                var jsonData = JsonConvert.SerializeObject(data);
+
+                var response = HttpHelper.DoPost(url, jsonData, "绠辩爜淇℃伅璇锋眰", "FM");
+
+                var obj = JsonConvert.DeserializeObject<FuMaPostModel>(response);//瑙f瀽杩斿洖鏁版嵁
+                if (obj.Success != true)
+                {
+                    throw new Exception("璇锋眰澶辫触" + obj.Message);
+                }
+                #endregion
+                
+                if (string.IsNullOrEmpty(obj.Data.SkuNo))
+                {
+                    //娴嬭瘯鐢紝鍙戝竷姝e紡鍓嶅垹闄ゆ娈典唬鐮�
+                    //obj.Data.SkuNo = "50004632";
+                    throw new Exception($"鐗╂枡缂栫爜涓嶈兘涓虹┖");
+                }
+
+                //鏌ユ壘鐗╂枡淇℃伅
+                var sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == obj.Data.SkuNo);
+                if (sku == null)
+                {
+                    throw new Exception($"鏈煡璇㈠埌鐗╂枡{obj.Data.SkuNo}淇℃伅");
+                }
+
+                var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 
+                var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 
+                //鑾峰彇鍖呰淇℃伅
+                new Common().GetPackQtyInfo(sku.PackagNo, ref pNum, ref bNum);
+                if (pNum == 0 || bNum == 0)
+                {
+                    throw new Exception($"{sku.SkuNo}鐗╁搧鍖呰鏈壘鍒帮紒");
+                }
+
+                var boxList = new List<BllBoxInfo>();
+                var comTime = DateTime.Now;
+                //娣诲姞绠辩爜淇℃伅
+                foreach (var box in obj.Data.DetailList)
+                {
+                    foreach (var box2 in box.DetailList2)
+                    {
+                        var boxInfo = new BllBoxInfo()
+                        {
+                            BoxNo = obj.Data.BoxNo,
+                            BoxNo2 = box.BoxNo2,
+                            BoxNo3 = box2.BoxNo3,
+                            Qty = obj.Data.Qty,
+                            BitBoxMark = obj.Data.BitBoxMark,
+
+                            ASNNo = "",
+                            //ASNDetailNo = noticeDetail.Id,
+                            OrderCode = "",//notice.OrderCode
+                                           //BindNo = bindId,
+                                           //PalletNo = model.PallNo,
+                            FullQty = bNum,
+                            Status = "0",
+                            SkuNo = sku.SkuNo,
+                            SkuName = sku.SkuName,
+                            LotNo = box2.LotNo,
+                            LotText = obj.Data.LotNoBoxNum,
+                            ProductionTime = DateTime.Parse(box2.ProductionTime),
+                            ExpirationTime = DateTime.Parse(box2.ExpirationTime),
+                            //CompleteTime = "",
+                            InspectMark = "0",
+                            InspectStatus = "0",
+                            Origin = "璧嬬爜",
+                            CreateTime = comTime,
+                            CreateUser = 0
+                        };
+                        boxList.Add(boxInfo);
+                    };
+                }
+                try
+                {
+                    //寮�鍚簨鍔�
+                    Db.BeginTran();
+
+                    Db.Fastest<BllBoxInfo>().BulkCopy(boxList);
+
+                    //鎻愪氦浜嬪姟
+                    Db.CommitTran();
+                }
+                catch (Exception ex)
+                {
+                    //鍥炴粴浜嬪姟
+                    Db.RollbackTran();
+                    throw new Exception("鎻掑叆绠辩爜澶辫触锛�" + ex.Message);
+                }
+                
+                string sqlString = $@"SELECT 
+                                        ASNNo,
+                                        BoxNo, 
+                                        SkuNo,
+                                        SkuName, 
+                                        LotNo,
+                                        BitBoxMark,
+                                        SUM(Qty) as Qty 
+                                      FROM BllBoxInfo 
+                                      WHERE IsDel = '0' 
+                                        AND Status='0'  
+                                        AND BoxNo = '{boxno}'
+                                      GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo,BitBoxMark; ";
+
+                var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); 
+
+                if (models.Count == 0)
+                {
+                    throw new Exception("绠辩爜淇℃伅涓嶅瓨鍦�!");
+                }
                 return models;
             }
             catch (Exception ex)
@@ -2644,7 +2802,7 @@
                         Db.Insertable(box2).ExecuteCommand();
                         #endregion
 
-                        #region
+                        #region  鎻掑叆杞﹂棿鍑哄叆搴撹褰曡〃
                         //鎻掑叆鍏ュ簱鏃ュ織
                         var _log = new LogWorkShop
                         {
@@ -4286,10 +4444,18 @@
             try
             {
                 string strMsg = "";
-                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo && w.Status == "0" && w.WareHouseNo == "W04");
+                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo && w.WareHouseNo == "W04");
                 if (storageLocat == null)
                 {
-                    throw new Exception("-1:鍦扮爜(鍌ㄤ綅淇℃伅)涓嶅瓨鍦ㄦ垨闈炵┖闂茬姸鎬侊紝璇锋牳鏌�!");
+                    throw new Exception("-1:鍦扮爜(鍌ㄤ綅淇℃伅)涓嶅瓨鍦紝璇锋牳鏌�!");
+                }
+                if (storageLocat.Status != "0")
+                {
+                    var detailInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == storageLocat.LocatNo);
+                    if (detailInfo != null)
+                    {
+                        throw new Exception("-1:鍦扮爜(鍌ㄤ綅淇℃伅)闈炵┖闂诧紝璇锋牳鏌�!");
+                    }
                 }
 
                 return strMsg;
@@ -6073,9 +6239,12 @@
                 {
                     foreach (var item in stockDetail)
                     {
-                        if (!string.IsNullOrEmpty(item.WareHouseNo))
+                        if (!string.IsNullOrEmpty(item.WareHouseNo) && !string.IsNullOrEmpty(item.AreaNo))
                         {
-                            throw new Exception("璇ユ墭鐩樻湭鍦ㄥ簱澶栵紝璇锋牳鏌�!");
+                            if (item.AreaNo != "B06" && item.AreaNo != "B07" && item.AreaNo != "B09") 
+                            {
+                                throw new Exception("璇ユ墭鐩樻湭鍦ㄥ簱澶栵紝璇锋牳鏌�!");
+                            }
                         }
                     }
                     iscount = 1; //鍥炴祦鍏ュ簱
@@ -6083,10 +6252,18 @@
                 #endregion
 
                 #region 鍦扮爜淇℃伅(鍌ㄤ綅淇℃伅)
-                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == model.LocatNo && w.Status == "0");
+                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == model.LocatNo);
                 if (storageLocat == null)
                 {
-                    throw new Exception("鍌ㄤ綅淇℃伅涓嶅瓨鍦ㄦ垨闈炵┖闂茬姸鎬侊紝璇锋牳鏌�!");
+                    throw new Exception("鍌ㄤ綅淇℃伅涓嶅瓨锛岃鏍告煡!");
+                }
+                if (storageLocat.Status != "0")
+                { 
+                    var detailInfo=Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == storageLocat.LocatNo);
+                    if (detailInfo != null)
+                    {
+                        throw new Exception("鍌ㄤ綅涓嶆槸绌洪棽鐘舵�侊紝璇锋牳鏌�!");
+                    }
                 }
                 #endregion
 
@@ -6512,6 +6689,113 @@
         }
         #endregion
 
+        #region 浠撳簱鏀惰揣
+        /// <summary>
+        /// 浠撳簱纭鏀惰揣
+        /// </summary>
+        /// <param name="model"></param>
+        public void ConfirmTakeOf(string palletNo,int userId)
+        {
+            try
+            {
+                #region 楠岃瘉淇℃伅
+                if (string.IsNullOrEmpty(palletNo))
+                {
+                    throw new Exception("鎵樼洏鏉$爜涓嶈兘涓虹┖!");
+                }
+
+                //鑾峰彇鎵樼洏淇℃伅
+                var pallet = Db.Queryable<SysPallets>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
+                //楠岃瘉鎵樼洏淇℃伅鏄惁涓虹┖
+                if (pallet == null)
+                {
+                    throw new Exception("鎵樼洏淇℃伅涓嶅瓨鍦紝璇锋鏌�!");
+                }
+                if (pallet.Status == "0")
+                {
+                    throw new Exception("鎵樼洏鏈娇鐢紝璇锋鏌�!");
+                }
+                #endregion
+
+                //鑾峰彇搴撳瓨鏄庣粏淇℃伅
+                var stockDetailList = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList();
+                //楠岃瘉搴撳瓨鏄庣粏淇℃伅鏄惁瀛樺湪
+                if (stockDetailList.Count<=0)
+                {
+                    throw new Exception("搴撳瓨鏄庣粏涓嶅瓨鍦紝璇锋鏌ュ簱瀛樹俊鎭�!");
+                }
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+
+                foreach (var item in stockDetailList)
+                {
+                    //if (item.AreaNo != "B06" && item.AreaNo != "B07" && item.AreaNo != "B09")
+                    //{
+                    //    throw new Exception("璇ユ墭鐩橀潪绾胯竟鍥炲簱鎵樼洏!");
+                    //}
+                    //搴撳瓨鎬昏〃
+                    var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo);
+                    if (stock == null)
+                    {
+                        throw new Exception($"鏈煡璇㈠埌璇ユ墭鐩樹笂鐗╂枡缂栫爜涓�:{item.SkuNo}鐨勫簱瀛樹俊鎭�!");
+                    }
+
+                    var boxInfoList = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == palletNo && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo).ToList();
+                    if (boxInfoList.Count > 0)
+                    {
+                        foreach (var box in boxInfoList)
+                        {
+                            var bllBox = Db.Queryable<BllBoxInfo>().First(w => w.IsDel == "0" && w.Status != "0" && w.BoxNo == box.BoxNo);
+                            if (bllBox != null)
+                            {
+                                bllBox.Status = "0";
+                                bllBox.ASNDetailNo = null;
+                                bllBox.BindNo = null;
+                                bllBox.PalletNo = "";
+                                //鏇存柊绠辨敮鏄庣粏琛�
+                                Db.Updateable(bllBox).ExecuteCommand();
+                            }
+                        }
+                        //鍒犻櫎搴撳瓨绠辩爜淇℃伅
+                        Db.Deleteable(boxInfoList).ExecuteCommand();
+                    }
+                    
+                    //鍒犻櫎鎴栦慨鏀瑰簱瀛�
+                    stock.Qty -= (decimal)item.Qty;
+                    if (stock.Qty <= 0)
+                    {
+                        Db.Deleteable(stock).ExecuteCommand();
+                    }
+                    else
+                    {
+                        Db.Updateable(stock).ExecuteCommand();
+                    }
+                    //鍒犻櫎搴撳瓨鏄庣粏
+                    Db.Deleteable(item).ExecuteCommand();
+
+                    //鍒ゆ柇鎵樼洏涓婅繕鏈夋病鏈夊叾浠栫墿鏂�
+                    var palletData = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo && w.Id != item.Id);
+                    if (palletData == null)
+                    {
+                        pallet.Status = "0";
+                        Db.Updateable(pallet).ExecuteCommand();
+                    }
+                }
+
+                new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "浠撳簱鏀惰揣", palletNo, "瀹屾垚", $"鍦≒DA涓婂畬鎴愭墭鐩樼爜涓猴細{palletNo}鐨勪粨搴撴敹璐ф搷浣�", userId);
+
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
+            }
+            catch (Exception ex)
+            {
+                //鍥炴粴浜嬪姟
+                Db.RollbackTran();
+                throw ex;
+            }
+        }
+        #endregion
+
         #region JC23鍙栨牱涓氬姟鎺ュ彛
 
         //鑾峰彇鏈粍鎵樻垨宸茬粍鎵樼殑绠辩爜绾у埆

--
Gitblit v1.8.0