From 8a83e6f21af0a764950e45b2565a370fff74daa5 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期四, 08 五月 2025 16:47:45 +0800
Subject: [PATCH] Merge branch 'csc'

---
 Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs |  327 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 246 insertions(+), 81 deletions(-)

diff --git a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
index 9de08a8..c5960a5 100644
--- a/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
+++ b/Wms/WMS.BLL/BllPdaServer/PdaAsnServer.cs
@@ -21,6 +21,7 @@
 using Model.ModelDto.DataDto;
 using System.Xml.Schema;
 using ZXing.OneD;
+using System.Threading.Tasks;
 
 namespace WMS.BLL.BllPdaServer
 {
@@ -128,39 +129,8 @@
                 var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 
                 var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 
 
-                if (pack == null)
-                {
-                    throw new Exception("鑾峰彇鐗╂枡鍖呰淇℃伅澶辫触锛岃鏍稿疄!");
-                }
-                if (pack.L5Num.HasValue)
-                {
-                    pNum = (int)pack.L5Num;
-                    bNum = (int)pack.L4Num;
-                }
-                else if (pack.L4Num.HasValue)
-                {
-                    pNum = (int)pack.L4Num;
-                    bNum = (int)pack.L3Num;
-                }
-                else if (pack.L3Num.HasValue)
-                {
-                    pNum = (int)pack.L3Num;
-                    bNum = (int)pack.L2Num;
-                }
-                else if (pack.L2Num.HasValue)
-                {
-                    pNum = (int)pack.L2Num;
-                    bNum = (int)pack.L1Num;
-                }
-                else if (pack.L1Num.HasValue)
-                {
-                    pNum = (int)pack.L1Num;
-                    bNum = (int)pack.L1Num;
-                }
-                if (pNum == 0 || bNum == 0)
-                {
-                    throw new Exception($"缁戝畾澶辫触锛寋detail.SkuNo}鐗╁搧鍖呰鏈壘鍒帮紒");
-                }
+                //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
+                new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
 
                 #endregion
 
@@ -1123,6 +1093,7 @@
         {
             try
             {
+                Db.BeginTran();
                 #region 鍒ゆ柇
 
                 //0锛氭垚鍝佸叆搴� 1锛氶噰璐叆搴� 3锛氶��璐у叆搴� 4锛氳溅闂翠綑鏂欏叆搴� 8锛氱敓浜ч��鏂欏叆搴�
@@ -1197,44 +1168,13 @@
                 #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鍖呰缂栧彿鍙樻洿涓哄叆搴撳崟鏄庣粏鍖呰缂栧彿
+                //var pack = Db.Queryable<SysPackag>().First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo);    // liudl 鐢盨ku鍖呰缂栧彿鍙樻洿涓哄叆搴撳崟鏄庣粏鍖呰缂栧彿
 
                 var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 
                 var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 
-
-                if (pack == null)
-                {
-                    throw new Exception("鑾峰彇鐗╂枡鍖呰澶辫触锛岃鏍稿疄!");
-                }
-                if (pack.L5Num.HasValue)
-                {
-                    pNum = (int)pack.L5Num;
-                    bNum = (int)pack.L4Num;
-                }
-                else if (pack.L4Num.HasValue)
-                {
-                    pNum = (int)pack.L4Num;
-                    bNum = (int)pack.L3Num;
-                }
-                else if (pack.L3Num.HasValue)
-                {
-                    pNum = (int)pack.L3Num;
-                    bNum = (int)pack.L2Num;
-                }
-                else if (pack.L2Num.HasValue)
-                {
-                    pNum = (int)pack.L2Num;
-                    bNum = (int)pack.L1Num;
-                }
-                else if (pack.L1Num.HasValue)
-                {
-                    pNum = (int)pack.L1Num;
-                    bNum = (int)pack.L1Num;
-                }
-                if (pNum == 0 || bNum == 0)
-                {
-                    throw new Exception($"缁戝畾澶辫触锛寋detail.SkuNo}鐗╁搧鍖呰鏈壘鍒帮紒");
-                }
+                //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
+                new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
+                 
 
                 #endregion
 
@@ -1330,10 +1270,16 @@
                 {
                     tags = "1";
                 }
-
+                //楠岃瘉搴撳瓨鎵樼洏鏄惁鏈夎创鏍囩墿鏂�
+                var skuStr = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0" && m.IsPasteCode == "1").Select(m => m.SkuNo).ToList();
+                var sdHave = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && skuStr.Contains(m.SkuNo));
+                if (sdHave>0)
+                {
+                    throw new Exception("褰撳墠鎵樼洏鍚湁璐存爣鐗╂枡淇℃伅锛屼笉鑳界粍鎵�");
+                }
                 // 鍒ゆ柇搴撳瓨鏄庣粏鏄惁宸叉湁姝ゆ墭鐩樹俊鎭�  
                 var sd1 = Db.Queryable<DataStockDetail>()
-                    .First(m => m.IsDel == "0" && m.ASNDetailNo == bind.ASNDetailNo && m.PalletNo == model.PalletNo && m.LotNo == bind.LotNo);
+                    .First(m => m.IsDel == "0" && m.ASNDetailNo == bind.ASNDetailNo && m.PalletNo == model.PalletNo && m.SkuNo == detail.SkuNo && m.LotNo == bind.LotNo);
                 var sdId1 = 0;
                 if (sd1 != null)
                 {
@@ -1426,8 +1372,6 @@
                 }
                 #endregion
 
-
-
                 #region 鏇存敼缁勬墭淇℃伅
 
                 var isSample = "0";//鏄惁鍙栨牱
@@ -1497,10 +1441,12 @@
                 Db.Updateable(notice).ExecuteCommand();
                 #endregion
 
-                #region 搴撳瓨鏄庣粏
+                #region 鏇存敼搴撳瓨鏄庣粏鏁伴噺
+
                 sd1.Qty = bind.Qty;
                 //鏇存敼搴撳瓨鏄庣粏鏁伴噺
                 Db.Updateable(sd1).Where(m => m.Id == sdId1).ExecuteCommand();
+
                 #endregion
 
                 #region 搴撳瓨
@@ -1574,9 +1520,12 @@
                 sqlStr += $"insert into LogPalletTrack values('{model.PalletNo}','{model.AsnNo}','缁勭洏','0',getDate(),{userId},NULL,NULL);";
                 Db.Ado.ExecuteCommand(sqlStr);
                 new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "鎵樼洏缁戝畾", model.AsnNo, "娣诲姞", $"娣诲姞浜嗘墭鐩樼爜涓猴細{model.PalletNo}鐨勭粍鐩樹俊鎭�", userId);
+
+                Db.CommitTran();
             }
             catch (Exception e)
             {
+                Db.RollbackTran();
                 throw new Exception(e.Message);
             }
         }
@@ -1878,11 +1827,16 @@
                 {
                     if (models[0].Status == "1")
                     {
-                        sqlString = $"select count(id) from DataStockDetail where PalletNo = '{palletNo}' and isnull(LocatNo,'') != '' and isdel = '0';";
-                        int rowNum = Db.Ado.GetInt(sqlString);
-                        if (rowNum > 0)
+                        var detail = Db.Queryable<DataStockDetail>().First(m=>m.PalletNo == palletNo );
+                        
+                        if (detail!= null && !string.IsNullOrWhiteSpace(detail.LocatNo))
                         {
-                            sqlMsg = "-1:鎵樼洏浣跨敤涓紝姝ゆ墭鐩樺簲鍦ㄥ簱鍐呰鏍稿疄!";
+                            var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04" && m.AreaNo != "B06" && m.AreaNo != "B07").Select(m => m.AreaNo).ToList();
+                            var pingLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == detail.LocatNo && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0");
+                            if (pingLocateInfo == null)
+                            {
+                                sqlMsg = "-1:鎵樼洏浣跨敤涓紝姝ゆ墭鐩樺簲鍦ㄥ簱鍐呰鏍稿疄!";
+                            }
                         }
                     }
                 }
@@ -1896,6 +1850,217 @@
             catch (Exception ex)
             {
                 throw ex;
+            }
+        }
+
+        /// <summary>
+        /// 鏍规嵁鍗曟嵁鑾峰彇鏍囩鏁伴噺
+        /// </summary>
+        /// <param name="asnNo">鍏ュ簱鍗�</param>
+        /// <param name="asnDetailId">鍏ュ簱鍗曟槑缁嗗彿</param>
+        /// <returns></returns>
+        public BoxListInfoDto GetBoxCountByAsn(string asnNo,int? asnDetailId)
+        {
+            try
+            {
+               
+                var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == asnDetailId);
+                if (detail == null)
+                {
+                    throw new Exception("娌℃湁鏌ヨ鍒板崟鎹槑缁嗕俊鎭�");
+                }
+                var data = new BoxListInfoDto()
+                {
+                    SkuNo = detail.SkuNo,
+                    SkuName = detail.SkuName,
+                    LotNo = detail.LotNo,
+
+                };
+                //鑾峰彇鐘舵�佹槸鏈粍鎵樼殑鏍囩淇℃伅
+                var models = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.ASNNo == asnNo && m.ASNDetailNo == asnDetailId ).GroupBy(m=> new { m.ProductionTime,m.ExpirationTime }).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();
+                    if (boxNoList.Count > 0)
+                    {
+                        data.BoxNoList = boxNoList;
+                        data.Date1 = item.ProductionTime.ToString();
+                        data.Date2 = item.ExpirationTime.ToString();
+
+                        break;
+                    }
+                }
+                return data;
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
+
+        /// <summary>
+        /// 淇濆瓨鎸囧畾鐨勫偍浣�
+        /// </summary>
+        /// <param name="palletNo"></param>
+        /// <param name="locateNo"></param>
+        /// <param name="userId"></param>
+        /// <exception cref="Exception"></exception>
+        public void SaveAppointLocate(string palletNo, string locateNo, int userId)
+        {
+            try
+            {
+                //鎵樼洏搴撳瓨淇℃伅
+                var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo).ToList();
+                if (stockDetailList.Count(m=> string.IsNullOrWhiteSpace(m.LocatNo)) > 0)
+                {
+                    throw new Exception("鎵樼洏娌℃湁鍦ㄥ钩搴撳偍浣嶄笂");
+                }
+                //鍒ゆ柇鎵樼洏鐨勫偍浣嶆槸鍚︽槸骞冲簱
+                var stockDetail = stockDetailList.First();
+                var oldLocate = stockDetail.LocatNo;
+                var pingAreaStr = Db.Queryable<SysStorageArea>().Where(m => m.IsDel == "0" && m.WareHouseNo == "W04" && m.AreaNo != "B06" && m.AreaNo != "B07").Select(m => m.AreaNo).ToList();
+                var pingLocateInfo = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldLocate && pingAreaStr.Contains(m.AreaNo) && m.IsDel == "0");
+                if (pingLocateInfo == null)
+                {
+                    throw new Exception("褰撳墠鎵樼洏鎵�鍦ㄧ殑鍌ㄤ綅娌℃湁鍦ㄧ郴缁熶腑鎵惧埌淇℃伅");
+                }
+
+                var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList();
+                //楠岃瘉鐗╂枡鏄惁鏈夋垚鍝�
+                foreach (var item in stockDetailList)
+                {
+                    var skuItem = skuList.First(m => m.SkuNo == item.SkuNo);
+                    if (skuItem.Type == "2")
+                    {
+                        throw new Exception("鎴愬搧鐗╂枡璇峰叆鎴愬搧搴�");
+                    }
+                }
+                //鍌ㄤ綅
+                var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateNo);
+                if (locate == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鍌ㄤ綅鐨勪俊鎭�");
+                }
+                if (locate.WareHouseNo != "W02")
+                {
+                    throw new Exception("鍙兘鎸囧畾绔嬪簱鐨勫偍浣�");
+                }
+                if (locate.Status != "0" || locate.Flag != "0")
+                {
+                    throw new Exception("璇ュ偍浣嶇姸鎬佷笉鏄┖鍌ㄤ綅鎴栨爣蹇椾笉鏄甯哥殑");
+                }
+
+
+                Db.BeginTran();
+                try
+                {
+                    var time = DateTime.Now;
+                    //鍒ゆ柇褰撳墠鎵樼洏鏄惁瀛樺湪缁戝畾淇℃伅
+                    var task = Db.Queryable<LogTask>().First(m=> m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1") && m.OrderType == "0" && m.Type == "0");
+                    
+                    var upShelf = Db.Queryable<BllPalletUpShelf>().First(m => m.IsDel == "0" && m.PalletNo == palletNo && (m.Status == "0" || m.Status == "1"));
+                    if (task != null)
+                    {
+                        if (task.Status == "1")
+                        {
+                            throw new Exception("鎵樼洏姝e湪鎵ц浠诲姟锛屼笉鍙寚瀹氬偍浣�");
+                        }
+                        if (task.Status == "0")
+                        {
+                            if (upShelf != null)
+                            {
+                                if (upShelf.Status == "1")
+                                {
+                                    throw new Exception("鎵樼洏姝e湪鎵ц涓婃灦浠诲姟锛屼笉鍙寚瀹氬偍浣�");
+                                }
+                                if (upShelf.Status == "0")
+                                {
+                                    if (locate.LocatNo == task.EndLocat)
+                                    {
+                                        throw new Exception("宸叉寚瀹氬偍浣嶏紝鏃犻渶閲嶅鎸囧畾");
+                                    }
+                                    //閲嶆柊鎸囧畾鍌ㄤ綅
+                                    task.EndLocat = locate.LocatNo;
+                                    task.EndRoadway = locate.RoadwayNo;
+                                    upShelf.LocatNo = locate.LocatNo;
+                                    upShelf.RoadwayNo = locate.RoadwayNo;
+                                    Db.Updateable(task).ExecuteCommand();
+                                    Db.Updateable(upShelf).ExecuteCommand();
+                                    new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "鎸囧畾鍌ㄤ綅", palletNo, "缂栬緫", $"鎸囧畾浜嗗偍浣嶏細{locate.LocatNo}銆佹墭鐩樼爜锛歿palletNo}鐨勪俊鎭�", userId);
+                                    Db.CommitTran();
+                                    return;
+                                }
+                            }
+                            else
+                            {
+                                throw new Exception("鏌ヨ鍑轰换鍔′絾娌℃湁涓婃灦璁板綍锛屼俊鎭敊璇�");
+                            }
+                        }
+                    }
+
+                    // 娣诲姞鍏ュ簱鏃ュ織璁板綍
+                    var taskNo = new Common().GetMaxNo("TK");
+                    var addTask = new LogTask    //鍏ュ簱浠诲姟
+                    {
+                        TaskNo = taskNo,
+                        Sender = "WMS",
+                        Receiver = "WCS",
+                        IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                        SendDate = DateTime.Now,  //鍙戦�佹椂闂�
+                        //BackDate = DateTime.Now,  //杩斿洖鏃堕棿
+                        StartRoadway = "",            // 璧峰宸烽亾
+                        StartLocat = oldLocate,//璧峰浣嶇疆
+                        EndLocat = locate.LocatNo,//鐩爣浣嶇疆
+                        EndRoadway = locate.RoadwayNo,  // 鐩爣宸烽亾
+                        PalletNo = palletNo,//鎵樼洏鐮�
+                        IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                        IsCancel = 1,//鏄惁鍙彇娑�
+                        IsFinish = 1,//鏄惁鍙畬鎴�
+                        Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                        Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                        OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                        Msg = $"{oldLocate}鍒�=>>{locate.LocatNo}鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅
+
+                    };
+                    Db.Insertable(addTask).ExecuteCommand();
+
+                    //娣诲姞鎵樼洏涓婃灦璁板綍
+                    var upShelfAdd = new BllPalletUpShelf()
+                    {
+                        TaskNo = addTask.TaskNo,
+                        TraceNo = "",
+                        PalletNo = palletNo,
+                        SkuNo = stockDetail.SkuNo,
+                        SkuName = stockDetail.SkuName,
+                        LotNo = stockDetail.LotNo,
+                        Status = "0",
+
+                        WareHouseNo = locate.WareHouseNo,
+                        RoadwayNo = locate.RoadwayNo,
+                        AreaNo = locate.AreaNo,
+                        LocatNo = locate.LocatNo,
+
+                        CreateUser = 0,
+                    };
+                    Db.Insertable(upShelfAdd).ExecuteCommand();
+
+                    locate.Status = "2";
+
+                    Db.Updateable(locate).ExecuteCommand();
+
+                    new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "鎸囧畾鍌ㄤ綅", palletNo, "缂栬緫", $"鎸囧畾浜嗗偍浣嶏細{locate.LocatNo}銆佹墭鐩樼爜锛歿palletNo}鐨勪俊鎭�", userId);
+                    Db.CommitTran();
+                }
+                catch (Exception e)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(e.Message);
+                }
+
+            }
+            catch (Exception e)
+            {
+                throw new Exception(e.Message);
             }
         }
 
@@ -3294,7 +3459,7 @@
             try
             {
                 string strMsg = "";
-                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo && w.Status == "0" && w.WareHouseNo == "W02");
+                var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo && w.Status == "0" && w.WareHouseNo == "W04");
                 if (storageLocat == null)
                 {
                     throw new Exception("-1:鍦扮爜(鍌ㄤ綅淇℃伅)涓嶅瓨鍦ㄦ垨闈炵┖闂茬姸鎬侊紝璇锋牳鏌�!");
@@ -5431,7 +5596,7 @@
                     //淇敼搴撳瓨鏄庣粏淇℃伅
                     foreach (var item in stockDetail)
                     {
-                        item.Status = "0";                                  // 鐘舵�佹洿鏀逛负寰呭垎閰�
+                        //item.Status = "0";                                  // 鐘舵�佹洿鏀逛负寰呭垎閰�
                         item.WareHouseNo = storageLocat.WareHouseNo;        // 鎵�灞炰粨搴�
                         item.RoadwayNo = storageLocat.RoadwayNo;            // 鎵�灞炲贩閬�
                         item.AreaNo = storageLocat.AreaNo;                  // 鎵�灞炲尯鍩�
@@ -5463,14 +5628,14 @@
                         SendDate = DateTime.Now,  //鍙戦�佹椂闂�
                         BackDate = DateTime.Now,  //杩斿洖鏃堕棿
                         StartLocat = "",//璧峰浣嶇疆
-                        EndLocat = "骞冲簱",//鐩爣浣嶇疆
+                        EndLocat = model.LocatNo,//鐩爣浣嶇疆
                         PalletNo = model.PalletNo,//鎵樼洏鐮�
                         IsSend = 0,//鏄惁鍙啀娆′笅鍙�
                         IsCancel = 0,//鏄惁鍙彇娑�
                         IsFinish = 0,//鏄惁鍙畬鎴�
                         Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
                         Status = "2",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
-                        OrderType = "3",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                        OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
                         Msg = "骞冲簱鐨勫叆搴撲换鍔�",
                     };
                     Db.Insertable(exTask).ExecuteCommand();

--
Gitblit v1.8.0