From 157abc191c34e57c1b958ae74fc3de6518ca8a30 Mon Sep 17 00:00:00 2001
From: zhaowc <526854230@qq.com>
Date: 星期五, 28 二月 2025 11:06:36 +0800
Subject: [PATCH] 修改客户需求

---
 Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs |  632 +++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 539 insertions(+), 93 deletions(-)

diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index bccc202..68367c9 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -24,6 +24,12 @@
 using WMS.IBLL.IBllSoServer;
 using Model.ModelVm;
 using System.Runtime.Intrinsics.X86;
+using WMS.Entity.BllAsnEntity;
+using Model.ModelDto;
+using WMS.BLL.BllPdaServer;
+using WMS.IBLL.IPdaServer;
+using System.DirectoryServices.Protocols;
+using Model.ModelDto.SysDto;
 
 namespace WMS.BLL.BllSoServer
 {
@@ -49,11 +55,11 @@
                 {
                     throw new Exception("鍗曟嵁绫诲瀷涓嶅彲涓虹┖!");
                 }
-                if (string.IsNullOrEmpty(model.Customer))
-                {
-                    throw new Exception("瀹㈡埛涓嶅彲涓虹┖!");
-                }
-                if (string.IsNullOrEmpty(model.OrderCode))
+                //if (string.IsNullOrEmpty(model.Customer))
+                //{
+                //    throw new Exception("瀹㈡埛涓嶅彲涓虹┖!");
+                //}
+                if (string.IsNullOrEmpty(model.OrderNo))
                 {
                     throw new Exception("绯荤粺鍗曞彿涓嶅彲涓虹┖!");
                 }
@@ -68,10 +74,10 @@
 
                 //瀹㈡埛淇℃伅
                 var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer);
-                if (customer == null)
-                {
-                    throw new Exception("瀹㈡埛涓嶅彲涓虹┖!");
-                }
+                //if (customer == null)
+                //{
+                //    throw new Exception("瀹㈡埛涓嶅彲涓虹┖!");
+                //}
                 var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo);
                 int? logisticsId = null;
                 if (logistics != null)
@@ -127,8 +133,9 @@
                             }
                             if (qty > d.Qty - q1)
                             {
-                                q1 += d.Qty - q1;
                                 dic.Add(stocks.First().Id, d.Qty - q1);
+
+                                q1 += d.Qty - q1;
                             }
                             else
                             {
@@ -149,10 +156,11 @@
                                 }
                                 var q2 = demo.Qty - demo.LockQty - demo.FrozenQty;
 
-                                if (q2 > d.Qty - q1)
+                                if (q2 >= d.Qty - q1)
                                 {
-                                    q1 += d.Qty - q1;
                                     dic.Add(demo.Id, d.Qty - q1);
+
+                                    q1 += d.Qty - q1;
                                 }
                                 else
                                 {
@@ -161,7 +169,7 @@
                                 }
 
                             }
-                            if (d.Qty >= q1)
+                            if (d.Qty > q1)
                             {
                                 stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
                                 if (stocks.Count == 0)
@@ -169,10 +177,11 @@
                                     throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}搴撳瓨鏁伴噺涓嶈冻");
                                 }
                                 var q2 = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty;
-                                if (q2 > d.Qty - q1)
+                                if (q2 >= d.Qty - q1)
                                 {
-                                    q1 += d.Qty - q1;
                                     dic.Add(stocks.First().Id, d.Qty - q1);
+
+                                    q1 += d.Qty - q1;
                                 }
                                 else
                                 {
@@ -227,8 +236,9 @@
                         Type = model.SoType,
                         Status = "0",
                         Origin = model.Origin,
-                        CustomerNo = model.Customer,
-                        CustomerName = customer.CustomerName,
+                        OrderCode = model.OrderNo,
+                        //CustomerNo = model.Customer,
+                        //CustomerName = customer.CustomerName,
                         LogisticsId = logisticsId,
                         IsWave = "0",
                         WaveNo = "",
@@ -262,10 +272,22 @@
         }
 
         //鍥炰紶鍑哄簱鍗�
-        public bool FinishSo(int id, string url, int userId)
+        public bool FinishSo(int id, string url, string userNo, string pwd, int userId)
         {
             try
             {
+                var loginPwd = Md5Tools.CalcMd5(pwd);
+                var date = Db.Queryable<SysUserInfor>().First(m => m.IsDel == "0" && m.UserName == userNo && m.PassWord == loginPwd);
+
+                if (date == null) //璐﹀彿瀵嗙爜鏄惁姝g‘
+                {
+                    throw new Exception("璐﹀彿瀵嗙爜涓嶆纭垨娌℃湁姝よ处鍙�");
+                }
+                if (date.Status != "0") //褰撳墠璐﹀彿鏄惁姝e父鍚敤
+                {
+                    throw new Exception("褰撳墠璐﹀彿闈炲惎鐢ㄧ姸鎬�");
+                }
+
                 var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id && m.IsDel == "0");
                 if (notice == null)
                 {
@@ -280,7 +302,7 @@
                 {
                     throw new Exception("鏈煡璇㈠埌鍗曟嵁鏄庣粏淇℃伅");
                 }
-                if (userId == notice.UpdateUser)
+                if (date.Id == notice.UpdateUser)
                 {
                     throw new Exception("澶嶆牳澶辫触锛屽鏍镐汉鍛樺拰鍏抽棴璁㈠崟浜哄憳涓嶈兘鐩稿悓锛�");
                 }
@@ -297,7 +319,7 @@
                 }
                 var soInfo = new SoInfo()
                 {
-                    OrderCode = notice.OrderCode,
+                    OrderNo = notice.OrderCode,
                     SoDetails = list
                 };
                 #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp
@@ -315,10 +337,10 @@
 
                 notice.Status = "6";
                 notice.CheckTime = DateTime.Now;
-                notice.CheckUser = userId;
+                notice.CheckUser = date.Id;
                 Db.Updateable(notice).ExecuteCommand();
 
-                new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "澶嶆牳", $"澶嶆牳浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
+                new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "澶嶆牳", $"{date.RealName}澶嶆牳浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
                 return true;
             }
             catch (Exception e)
@@ -438,7 +460,7 @@
                         break;
                     case "5"://涓棿鍝佸嚭搴�
                         skuType = "(4)";
-                        inspectStatus = "1";
+                        inspectStatus = "0,1";
                         break;
                     case "6"://浠e偍鍑哄簱
                         skuType = "(0,1,2,3,4)";
@@ -579,7 +601,7 @@
                     //娣诲姞鍑哄簱鍗�
                     foreach (var d in model.Detail)
                     {
-                        if (d.Qty < 1)
+                        if (d.Qty <=0)
                         {
                             throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0");
                         }
@@ -1231,9 +1253,9 @@
                 {
                     throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
                 }
-                if (notice.Status != "4")
+                if (notice.Status != "4" && notice.Status != "3")
                 {
-                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负鎵ц瀹屾垚鎴栬鍗曞叧闂�");
+                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负姝e湪鎵ц鎴栨墽琛屽畬鎴�");
                 }
                 //鎬诲簱瀛樹俊鎭�
                 var stockList = Db.Queryable<DataStock>().ToList();
@@ -1254,64 +1276,67 @@
 
                     foreach (var d in noticeDetail)
                     {
-                        //鏇存敼搴撳瓨鏄庣粏閿佸畾鏁伴噺
-                        //var orders = dataContext.WmsExportOrder.Where(o => o.ExportDetailId == d.Id
-                        //                && o.ExportExecuteFlag != "4" && o.ExportExecuteFlag == "3" && o.pickingType == 0).ToList();
-                        //foreach (var o in orders)
-                        //{
-                        //    if (o.ExportQuantity > o.PickedNum) //鍒ゆ柇鎷h揣鏄惁宸叉嫞瀹�
-                        //    {
-                        //        var pq = dataContext.WmsStockTray.Where(t => t.StockGoodId == o.ExportGoodsCode && t.StockStockCode == o.ExportStockCode);
-
-                        //        if (string.IsNullOrWhiteSpace(o.ExportLotNo))
-                        //        {
-                        //            pq = pq.Where(t => t.StockLotNo == null || t.StockLotNo == "");
-                        //        }
-                        //        else
-                        //        {
-                        //            pq = pq.Where(t => t.StockLotNo == o.ExportLotNo);
-                        //        }
-                        //        var pallet = pq.FirstOrDefault();
-                        //        //搴撳瓨鎵樼洏淇℃伅閿佸畾鏁伴噺杩樺師涓烘湭閿佸畾
-                        //        if (pq != null)
-                        //        {
-                        //            pallet.LockQuantity -= o.ExportQuantity.Value - o.PickedNum;
-                        //            pallet.StockQuantity += o.ExportQuantity.Value - o.PickedNum;
-                        //        }
-                        //    }
-                        //}
-
-                        if (d.Qty != d.CompleteQty)
+                        if (notice.Type == "0")//鎴愬搧鍑哄簱
                         {
-                            throw new Exception("褰撳墠鍗曟嵁鏄庣粏涓鍒掓暟閲忎笌鎷h揣鏁伴噺涓嶇锛岃鏍稿疄");
-                        }
-                        #region 搴撳瓨琛ㄥ噺鍘婚攣瀹氭暟閲忎笌鎬绘暟閲�(PDA鎷h揣鐨勬椂鍊欏凡缁忓噺鍘绘暟閲忎簡)
-                        /*var sq = stocks.Where(s => s.SkuNo == d.SkuNo);
-                        if (!string.IsNullOrWhiteSpace(d.LotNo))
-                        {
-                            sq = sq.Where(s => s.LotNo == d.LotNo);
-                        }
-                        else
-                        {
-                            sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo));
-                        }
-                        var st = sq.FirstOrDefault();
-                        if (st != null)
-                        {
-                            if (d.CompleteQty <= d.Qty)
+                            if (d.Qty != d.CompleteQty)
                             {
-                                st.Qty += d.Qty - d.CompleteQty.Value;
+                                throw new Exception("褰撳墠鍗曟嵁鏄庣粏涓鍒掓暟閲忎笌鎷h揣鏁伴噺涓嶇锛岃鏍稿疄");
+                            }
+                        }
+                        if (d.Qty < d.CompleteQty)
+                        {
+                            //鏇存敼搴撳瓨鏄庣粏閿佸畾鏁伴噺
+                            var allotList = Db.Queryable<BllExportAllot>().Where(o => o.SODetailNo == d.Id && o.Status == "3" && o.IsDel == "0").ToList();
+                            foreach (var o in allotList)
+                            {
+                                if (o.Qty > o.CompleteQty) //鍒ゆ柇鎷h揣鏄惁宸叉嫞瀹�
+                                {
+                                    var pq = Db.Queryable<DataStockDetail>().Where(t => t.IsDel == "0" && t.Id == o.StockId && t.SkuNo == o.SkuNo);
+
+                                    if (string.IsNullOrWhiteSpace(o.LotNo))
+                                    {
+                                        pq = pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo));
+                                    }
+                                    else
+                                    {
+                                        pq = pq.Where(t => t.LotNo == o.LotNo);
+                                    }
+                                    var pallet = pq.First();
+                                    //搴撳瓨鎵樼洏淇℃伅閿佸畾鏁伴噺杩樺師涓烘湭閿佸畾
+                                    if (pq != null)
+                                    {
+                                        //pallet.Qty -= o.CompleteQty.Value - o.Qty;
+                                        pallet.LockQty -= o.Qty - o.CompleteQty.Value;
+                                        Db.Updateable(pallet).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
+                                    }
+                                }
+                            }
+
+
+                            #region 搴撳瓨琛ㄥ噺鍘婚攣瀹氭暟閲忎笌鎬绘暟閲�(PDA鎷h揣鐨勬椂鍊欏凡缁忓噺鍘绘暟閲忎簡)
+                            var sq = stocks.Where(s => s.SkuNo == d.SkuNo);
+                            if (!string.IsNullOrWhiteSpace(d.LotNo))
+                            {
+                                sq = sq.Where(s => s.LotNo == d.LotNo);
                             }
                             else
                             {
-                                st.Qty -= d.CompleteQty.Value - d.Qty;
+                                sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo));
                             }
-                            st.LockQty -= d.Qty;
-                            st.Qty -= d.Qty;
-                            //淇敼鎬诲簱瀛樿〃
-                            Db.Updateable(st).UpdateColumns(it => new { it.Qty, it.LockQty }).ExecuteCommand();
-                        }*/
-                        #endregion
+                            if (notice.Type == "6")//浠e偍
+                            {
+                                sq = sq.Where(s => s.OwnerNo == notice.CustomerNo);
+                            }
+                            var st = sq.FirstOrDefault();
+                            if (st != null)
+                            {
+                                st.LockQty -= d.Qty - d.CompleteQty.Value;
+                                //淇敼鎬诲簱瀛樿〃
+                                Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
+                            }
+                            #endregion
+                        }
+
                     }
                     //娣诲姞鎿嶄綔鏃ュ織璁板綍
                     var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍏冲崟", $"鍏抽棴浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
@@ -1733,7 +1758,7 @@
                             if (isChai == "0")
                             {
                                 var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == item.PalletNo && w.BitBoxMark == "1").ToList();
-                                if (boxInfo != null)//鎵樼洏涓婃湁闆剁闇�瑕佹媶绠�
+                                if (boxInfo.Count>0)//鎵樼洏涓婃湁闆剁闇�瑕佹媶绠�
                                 {
                                     isChai = "1";
                                     unstackingMode2 = "1";//闇�瑕佹媶绠遍渶璧癙DA鎷嗗灈
@@ -1742,7 +1767,7 @@
 
                             if (unstackingMode2 == "0")//鏈哄櫒浜烘媶鍨�
                             {
-                                toLocation = loadingAddre;//瑁呰溅鍙�
+                                toLocation = "009";//鏈哄櫒浜烘媶鍨涚粺涓�鍙戦�佸埌009宸ヤ綅锛岀敱PLC鑷姩鍒嗛厤鎷嗗灈浣�
                             }
                             else //PDA鎷嗗灈
                             {
@@ -2216,16 +2241,24 @@
             }
         }
 
-        //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛�
-        public void ExportSuccess(string taskNo, int userId)
+        //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛� 
+        public void ExportSuccess(string taskNo, int userId,string url)
         {
             try
             {
+                //鍑哄簱浠诲姟鍙锋洿鏀癸紝濡傛灉鐢盤LC鍑哄簱锛屽垯PLC鍥炰紶浠诲姟鍙蜂负锛氫换鍔″彿+瀹為檯鍑哄簱鍙�
+                var TtaskNo = taskNo;
+                var outLine = "";
+                if (taskNo.Length == 18)
+                {
+                    TtaskNo = taskNo.Substring(0, taskNo.Length - 3);
+                    outLine = taskNo.Substring(taskNo.Length - 3, 3);
+                }
                 //褰撳墠浠诲姟淇℃伅
-                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
+                var task = Db.Queryable<LogTask>().First(m => m.TaskNo == TtaskNo && m.IsDel == "0");
                 if (task == null)
                 {
-                    throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅");
+                    throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹TtaskNo}鈥欑殑浠诲姟淇℃伅");
                 }
                 if (task.Status == "2")
                 {
@@ -2341,7 +2374,7 @@
                         Db.Updateable(item).ExecuteCommand();
                     }
                     //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級
-                    var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList();
+                    var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == TtaskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList();
 
                     foreach (var item in allot)
                     {
@@ -2360,7 +2393,151 @@
                     if (userId != 0)
                     {
                         //娣诲姞鎿嶄綔鏃ュ織璁板綍
-                        var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId);
+                        var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", TtaskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{TtaskNo}鐨勪换鍔�", userId);
+                    }
+                    if (outLine != "" && outLine != "009" && outLine != "013" && outLine != "018" && outLine != "022")
+                    {
+                        #region 鍒嗛厤鍑哄簱鐩殑浣�
+                        string positionStart = outLine, positionEnd = "", type = "D00";
+                        var type1 = Db.Queryable<BllExportNotice>().Where(m => m.SONo == allot.First().SONo && m.IsDel == "0" && m.Status == "3").First();
+                        if (type1 == null)
+                        {
+                            var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B13").ToList();
+                            type = "D02"; //绌烘墭鐩樺灈鍑哄簱
+                            if (outLine == "443")//瑗夸晶鍑哄簱
+                            {
+                                positionEnd = locateno.First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo;
+                            }
+                            else if (outLine == "440")  //涓滀晶鍑哄簱
+                            {
+                                positionEnd = locateno.First(m => m.Row == 2 && m.Status == "0" && m.Flag == "0").LocatNo; //涓滀晶鎴块棿搴撲綅
+                            }
+                            else  //1妤肩┖鎵樼洏鍑哄簱涓嶈皟鐢ˋGV
+                            {
+                                Db.CommitTran();
+                                return;
+                            }
+
+                        }
+                        else 
+                        { 
+                            if (type1.Type == "1" || (type1.Type == "5" && (positionStart == "440" || positionStart == "443")))  //3妤奸鏂欏嚭搴� /3L涓棿鍝佸嚭搴�
+                            {
+                                var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B11").ToList();
+                                if (outLine == "443")//瑗夸晶鍑哄簱
+                                {
+
+                                    positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo; //瑗夸晶鎴块棿搴撲綅鍜屽闈㈡埧闂�
+                                }
+                                else if (outLine == "440")  //涓滀晶鍑哄簱
+                                {
+                                    positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 2  && m.Status == "0" && m.Flag == "0").LocatNo; //涓滀晶鎴块棿搴撲綅
+                                }
+                            }
+                            else if (type1.Type == "2" || type1.Type == "3") //鎶芥鍑哄簱 /鍙栨牱鍑哄簱
+                            {
+                                positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m=>m.LocatNo).First(m => m.AreaNo == "B04" && m.Status == "0" && m.Flag == "0").LocatNo;
+                            }
+                            else if (type1.Type == "4")//涓嶅悎鏍煎搧鍑哄簱
+                            {
+
+                                positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B03" && m.Status == "0" && m.Flag == "0").LocatNo;
+                            }
+                            else //鍏朵粬鍗曟嵁绫诲瀷閮藉瓨鏀惧彂璐х紦瀛樺尯
+                            {
+                                positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B02" && m.Status == "0" && m.Flag == "0").LocatNo;
+                            }
+                        }
+                        #endregion
+
+                        #region AGV璋冪敤
+                        var storageLocatEnd = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == positionEnd && w.Flag == "0" && w.Status == "0");
+                        if (storageLocatEnd == null)
+                        {
+                            throw new Exception("鐢熸垚鐨凙GV浠诲姟鐩殑鍦板潃涓嶆纭�");
+                        }
+                        List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>();
+
+                        object[] position = new object[2];
+                        position[0] = new
+                        {
+                            positionCode = positionStart,
+                            type = "00"
+                        };
+                        position[1] = new
+                        {
+                            positionCode = positionEnd,
+                            type = "00"
+                        };
+
+                        AgvSchedulingTask agvTask = new AgvSchedulingTask();
+                        Random r = new Random();
+                        long ran = DateTime.Now.Ticks;
+                        agvTask.ReqCode = ran.ToString();
+                        //agvTask.ReqCode = TtaskNo;         //agv璇锋眰缂栧彿锛岄渶瑕侀殢鏈虹敓鎴�  锛堟渶澶�32浣嶏級
+                        agvTask.TaskCode = TtaskNo;         //浠诲姟鍙�
+                        agvTask.TaskTyp = type;           //鎼繍绫诲瀷
+                        agvTask.PositionCodePath = position;      //璧峰鍜岀洰鐨勪綅闆嗗悎
+                        agvTask.CtnrTyp = "1";            //瀹瑰櫒绫诲瀷锛屽�间负1
+                        if (type == "D02")
+                        {
+                            var palnoNum = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo);
+                            agvTask.CtnrNum = palnoNum.Qty.ToString();     //鍙犳墭浠诲姟闇�瑕佷笅鍙戠┖鎵樼洏鏁伴噺
+                        }
+
+                        agvTaskList.Add(agvTask);
+
+                        string str = "";
+                        var list2 = agvTaskList.Select(m => m.TaskCode).ToList();
+                        var jsonData = JsonConvert.SerializeObject(agvTaskList);
+                        jsonData = jsonData.Substring(1, jsonData.Length - 1);
+                        jsonData = jsonData.Substring(0, jsonData.Length - 1);
+                        var response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橝GV杞繍鍛戒护", "AGV");
+                        var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response);
+                        if (agvModel.Code != "0")
+                        {
+                            //璁板綍log
+                            var logStr = $@".\log\AGV\浠诲姟鍙嶉" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
+                            jsonData = JsonConvert.SerializeObject(agvModel);
+                            LogFile.SaveLogToFile($"AGV浠诲姟鍙嶉鎵ц閫氱煡锛�( {jsonData} ),", logStr);
+                        }
+
+                        #endregion
+
+                        #region 娣诲姞鍑哄簱浠诲姟淇℃伅
+
+                        var taskNonew = new Common().GetMaxNo("TK");
+                        var exTask = new LogTask    //灏忚溅绉诲簱浠诲姟
+                        {
+                            TaskNo = TtaskNo,
+                            Sender = "WMS",
+                            Receiver = "AGV",
+                            IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+
+                            StartLocat = positionStart,//璧峰浣嶇疆
+                            EndLocat = positionEnd,//鐩爣浣嶇疆
+                            PalletNo = task.PalletNo,//鎵樼洏鐮�
+                            IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                            IsCancel = 1,//鏄惁鍙彇娑�
+                            IsFinish = 1,//鏄惁鍙畬鎴�
+                            Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                            Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                            OrderType = "3",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗�
+                            CreateTime = DateTime.Now, //鍒涘缓鏃堕棿
+                            CreateUser = userId, //鍒涘缓浜�
+                            Msg = "灏忚溅浠�" + positionStart  + "鍒�" + positionEnd + "鐨勭Щ搴撲换鍔�", //鍏抽敭淇℃伅
+                                                                                                             //FinishDate = serverTime, //瀹屾垚鏃堕棿
+                        };
+                        Db.Insertable(exTask).ExecuteCommand();
+
+                        #endregion
+
+                        #region 鍌ㄤ綅鐘舵�佸彉鏇�
+                        //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓�
+                        var locat = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == positionEnd);
+                        locat.Status = "4"; //4 绉诲叆涓�
+                        Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅
+                        #endregion
                     }
                     Db.CommitTran();
                 }
@@ -2381,7 +2558,7 @@
         /// </summary>
         /// <param name="taskNo">浠诲姟鍙�</param>
         /// <param name="userId">鎿嶄綔浜�</param>
-        /// <exception cref="Exception"></exception>
+        /// <exception cref="Exception"></exception>          
         public void RelocationSuccess(string taskNo, int userId)
         {
             try
@@ -2747,7 +2924,15 @@
 
                     // 鍑哄簱鎬昏〃  鐘舵�佹敼涓洪儴鍒嗗垎閰�
                     var noticeModel = Db.Queryable<BllExportNotice>().First(m => m.SONo == noticeDetailModel.SONo && m.IsDel == "0");
-                    noticeModel.Status = "1";
+                    if (noticeDetailModel.AllotQty<=0)
+                    {
+                        noticeModel.Status = "0";
+                    }
+                    else
+                    {
+                        noticeModel.Status = "1";
+                    }
+                   
                     Db.Updateable(noticeModel).ExecuteCommand();
 
                     // 搴撳瓨鏄庣粏琛� 鐘舵�佷慨鏀逛负寮傚父閿佸畾 閿佸畾鏁伴噺淇敼涓烘墭鐩樹笂鏁伴噺
@@ -2761,7 +2946,7 @@
 
                     // 搴撳瓨鎬昏〃 閿佸畾鏁伴噺=褰撳墠閿佸畾鏁伴噺 +  (搴撳瓨鏄庣粏鎵樼洏涓婃暟閲�-搴撳瓨鏄庣粏鎵樼洏涓婂凡閿佸畾鐨勬暟閲�)
                     var stockModel = Db.Queryable<DataStock>().First(m => m.LotNo == stockDetailModel.LotNo && m.SkuNo == stockDetailModel.SkuNo && m.IsDel == "0");
-                    stockModel.LockQty = stockModel.LockQty + (int)(stockDetailModel.Qty - lockQty);
+                    stockModel.LockQty = stockModel.LockQty + (decimal)(stockDetailModel.Qty - lockQty);
                     Db.Updateable(stockModel).ExecuteCommand();
 
                     // 鎷h揣鏄庣粏琛� 鍒犻櫎
@@ -3342,9 +3527,9 @@
                     var needQty = detail.Qty - detail.AllotQty;
                     //鍒嗛厤鐨勫嚭搴撴暟閲�
                     var outQty = model.StockList.Select(s => s.Qty).ToList().Sum();
-                    if (outQty != needQty)
+                    if (outQty < needQty)
                     {
-                        throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忎笌璁″垝鏁伴噺涓嶄竴鑷达紒");
+                        throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忎笉鑳藉ぇ浜庤鍒掓暟閲忥紒");
                     }
                 }
                 
@@ -3446,7 +3631,7 @@
                     foreach (var item in detailList)
                     {
                         totalQty += item.Qty;
-                        totalAllotQty += Convert.ToInt32(item.AllotQty);
+                        totalAllotQty += Convert.ToDecimal(item.AllotQty);
                     }
 
                     if (totalAllotQty >= totalQty)
@@ -3520,7 +3705,7 @@
                         }
                     }
                     var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == item.PalletNo && w.BitBoxMark == "1").ToList();
-                    if (boxInfo != null)//鎵樼洏涓婃湁闆剁闇�瑕佹媶绠�
+                    if (boxInfo.Count>0)//鎵樼洏涓婃湁闆剁闇�瑕佹媶绠�
                     {
                         result = "1";//闇�瑕佹媶绠�
                         break;
@@ -3602,5 +3787,266 @@
 
             return nowAddress;
         }
+
+        /// <summary>
+        /// 鑾峰彇鎷嗗灈鎵樼洏鎷嗗灈淇℃伅
+        /// </summary>
+        /// <param name="model">鎷嗗灈鎵樼洏鍙峰拰WCS浠诲姟鍙�</param>
+        /// <returns>鎷嗗灈鎵樼洏淇℃伅</returns>
+        public RequestBoxInfoCheck BoxInfoCheckWcs (BoxInfoCheck model)
+        {
+            try
+            {
+                // 鍒ゆ柇褰撳墠浠诲姟鐘舵��  Status 1:姝e湪鎵ц 3:寮傚父缁撴潫
+                var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" );
+                if (taskModel == null)
+                {
+                    throw new Exception("姝や换鍔′笉瀛樺湪鎴栦换鍔$姸鎬佸凡鍙樻洿!");
+                }
+                // 楠岃瘉鎵樼洏鍒嗛厤淇℃伅
+                var palletBindModel = Db.Queryable<BllExportAllot>().First(m => m.PalletNo == model.PalletNo && m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "2");
+                if (palletBindModel == null)
+                {
+                    throw new Exception("鏈壘鍒板綋鍓嶆墭鐩樺垎閰嶄换鍔′俊鎭�!");
+                }
+                //璁$畻褰撳墠褰撳墠鎵樼洏涓婄鏁板拰鎷嗗灈绠辨暟
+                var storcklist = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletBindModel.PalletNo && m.SkuNo == palletBindModel.SkuNo && m.LotNo == palletBindModel.LotNo);
+
+                string level = "1";
+                int qty = 0, qtycount = 0;
+                var packlist = Db.Queryable<SysPackag>().First(m => m.PackagNo == palletBindModel.SkuNo && m.IsDel == "0");
+                if (packlist.L2Name == "绠�")
+                {
+                    level = "2";
+                }
+                switch (level)
+                {
+                    case "1":
+                        qty = (int)(palletBindModel.Qty / packlist.L1Num);
+                        qtycount = (int)(storcklist.Qty / packlist.L1Num);
+                        break;
+                    case "2":
+                        qty = (int)(palletBindModel.Qty / packlist.L2Num);
+                        qtycount = (int)(storcklist.Qty / packlist.L2Num);
+                        break;
+
+                }
+                
+                var list = new RequestBoxInfoCheck
+                {
+                    PalletNo = model.PalletNo,
+                    TaskNo = model.TaskNo,
+                    SkuNo = palletBindModel.SkuNo,
+                    SkuName  = palletBindModel.SkuName,
+                    LotNo = palletBindModel.LotNo,
+                    OrderNo = palletBindModel.SONo,
+                    Standard = palletBindModel.Standard,
+                    Qty = qty,//鎷嗗灈绠辨暟
+                    QtyCount = qtycount   //鎵樼洏涓婄鏁�
+                };
+                return list;
+            }
+            catch (Exception e)
+            {
+
+                throw new Exception(e.Message);
+            }
+        }
+
+        /// <summary>
+        /// 鎷嗗灈鍒嗘嫞涓绘壂绠辩爜鍑哄簱
+        /// </summary>
+        /// <param name="model">绠卞彿</param>
+        /// <returns>鍑哄簱鍒嗘嫞鍙�</returns>
+        public string BoxInfoExportWcs(string boxno)
+        {
+            try
+            {
+                if (string.IsNullOrWhiteSpace(boxno))
+                {
+                    throw new Exception("涓绘壂鍒嗘嫞绠辩爜涓虹┖");
+                }
+                //绠辩爜鎵�鍦ㄦ媶鍨涙嫞璐т俊鎭�
+                var boxModel = Db.Queryable<DataBoxInfo>().First(m=>m.BoxNo == boxno);
+                if (boxModel == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅");
+                }
+                //鍑哄簱鍒嗛厤淇℃伅
+                var allot = Db.Queryable<BllExportAllot>().First(m =>
+                    m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == boxModel.PalletNo);
+                if (allot == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樼殑鍒嗛厤淇℃伅");
+                }
+                //鍑哄簱鍗�
+                var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == allot.SONo);
+                if (notice == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�");
+                }
+                //鍑哄簱鍗曟槑缁�
+                var noticeDetail = Db.Queryable<BllExportNoticeDetail>()
+                    .First(m => m.IsDel == "0" && m.Id == allot.SODetailNo);
+                if (noticeDetail == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鏄庣粏鐨勪俊鎭�");
+                }
+                
+                //鍓╀綑鎷h揣鏁伴噺锛堝緟鎷e噺鍘诲凡鎷o級
+                var needQty = allot.Qty - allot.CompleteQty;
+
+                //搴撳瓨鏄庣粏
+                var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId);
+                if (stockDetail == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�");
+                }
+                //搴撳瓨鎬昏〃
+                var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo);
+                if (stock == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�");
+                }
+
+                List<DataBoxInfo> boxInfos;
+                var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxno && m.StockDetailId == stockDetail.Id);
+                if (boxInfo.Count() == 0)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅");
+                }
+                boxInfos = boxInfo.ToList();
+
+                var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == boxModel.PalletNo).ToList();
+                if (boxInfo.Count() == 0)
+                {
+                    throw new Exception("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅");
+                }
+                if (boxInfo.Any(m => m.PalletNo != boxModel.PalletNo))
+                {
+                    throw new Exception("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴");
+                }
+                var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList();
+                if (boxQty[0] > needQty)
+                {
+                    throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺");
+                }
+                decimal pickQty = 0;//鎷h揣鐨勬暟閲�
+                Db.BeginTran();
+                var comList = new List<BllCompleteDetail>();
+                foreach (var item in boxInfos)
+                {
+                    //娣诲姞鎷h揣鏄庣粏
+                    var completeDetail = new BllCompleteDetail()
+                    {
+                        SONo = allot.SONo,
+                        SODetailNo = allot.SODetailNo,
+                        ExportAllotId = allot.Id,
+                        StockId = allot.StockId,
+                        BoxNo = item.BoxNo,
+                        BoxNo2 = item.BoxNo2,
+                        BoxNo3 = item.BoxNo3,
+
+                        LotNo = allot.LotNo,
+                        LotText = allot.LotText,
+                        SupplierLot = allot.SupplierLot,
+                        SkuNo = allot.SkuNo,
+                        SkuName = allot.SkuName,
+                        Standard = allot.Standard,
+                        PalletNo = boxModel.PalletNo,
+                        CompleteQty = item.Qty,
+
+                    };
+                    comList.Add(completeDetail);
+
+                    
+                    pickQty += item.Qty;
+                    //鍒犻櫎搴撳瓨绠辩爜鏄庣粏
+                    Db.Deleteable(item).ExecuteCommand();
+                }
+
+                Db.Insertable(comList).ExecuteCommand();
+                //淇敼鍑哄簱鍒嗛厤淇℃伅
+                allot.CompleteQty += pickQty;
+                allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3";
+                allot.UpdateTime = DateTime.Now;
+                if (allot.Status == "5")
+                {
+                    //鍒ゆ柇璇ユ墭鐩樻槸鍚﹁繕瀛樺湪鐗╂枡 瀛樺湪鏀逛负寰呭洖搴� 寰呭洖搴撳畬鎴愬悗鏀逛负宸插畬鎴�
+                }
+                Db.Updateable(allot).ExecuteCommand();
+
+                //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁�
+                stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇�
+                stockDetail.Qty -= pickQty;
+                stockDetail.LockQty -= pickQty;
+                if (stockDetail.Qty == stockDetail.LockQty)
+                {
+                    stockDetail.Status = "2";
+                }
+                else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0)
+                {
+                    stockDetail.Status = "1";
+                }
+                else
+                {
+                    stockDetail.Status = "0";
+                }
+
+                if (stockDetail.Qty <= 0)
+                {
+                    Db.Deleteable(stockDetail).ExecuteCommand();
+                }
+                else
+                {
+                    Db.Updateable(stockDetail).ExecuteCommand();
+                }
+                stock.Qty -= pickQty;
+                stock.LockQty -= pickQty;
+                if (stock.Qty <= 0)
+                {
+                    Db.Deleteable(stock).ExecuteCommand();
+                }
+                else
+                {
+                    Db.Updateable(stock).ExecuteCommand();
+                }
+                var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == boxModel.PalletNo);
+                if (num2 <= 0)
+                {
+                    //鏀瑰彉鎵樼洏鐘舵��
+                    var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == boxModel.PalletNo && m.IsDel == "0");
+                    if (pallet == null)
+                    {
+                        throw new Exception("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�");
+                    }
+                    pallet.Status = "0";
+                    Db.Updateable(pallet).ExecuteCommand();
+                }
+                //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲�
+                noticeDetail.CompleteQty += pickQty;
+                noticeDetail.Status = "2";
+                Db.Updateable(noticeDetail).ExecuteCommand();
+
+                var num = Db.Queryable<BllExportNoticeDetail>()
+                    .Count(m => m.IsDel == "0" && m.SONo == allot.SONo && m.CompleteQty < m.Qty);
+                if (num <= 0)
+                {
+                    notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴�
+
+                    noticeDetail.Status = "3";
+                    Db.Updateable(noticeDetail).ExecuteCommand();
+                }
+                //淇敼鍑哄簱鍗曚俊鎭�
+                Db.Updateable(notice).ExecuteCommand();
+                Db.CommitTran();
+                return allot.LoadingAddre;
+            }
+            catch (Exception e)
+            {
+                Db.RollbackTran();
+                throw new Exception(e.Message);
+            }
+        }
     }
 }

--
Gitblit v1.8.0