From 4c49b591b3833a2752634355cb37b0a74923e916 Mon Sep 17 00:00:00 2001
From: wxw <Administrator@DESKTOP-5BIMHQ3>
Date: 星期五, 07 十一月 2025 09:41:17 +0800
Subject: [PATCH] 开发成品出库导出上传码上放心平台xm文件

---
 Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs |  225 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 177 insertions(+), 48 deletions(-)

diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
index 706d873..c9bc7b9 100644
--- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
+++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs
@@ -948,6 +948,7 @@
                     WaveNo = a.WaveNo,
                     IsDespatch = a.IsDespatch,
                     Demo = a.Demo,
+                    OrderCode = a.OrderCode,
 
                     CreateUserName = c.RealName,
                     UpdateUserName = c.RealName,
@@ -996,10 +997,10 @@
                         inspectStatus = "1";
                         break;
                     case "1"://棰嗘枡鍑哄簱
-                        if (house != "W02")
-                        {
-                            throw new Exception("棰嗘枡鍑哄簱鍙兘閫夋嫨鍘熸枡搴�");
-                        }
+                        //if (house != "W02")
+                        //{
+                        //    throw new Exception("棰嗘枡鍑哄簱鍙兘閫夋嫨鍘熸枡搴�");
+                        //}
                         skuType = "(0,1,3)";
                         inspectStatus = "1";
                         break;
@@ -1096,7 +1097,7 @@
                     skuList = skuList.Where(m => m.SkuNo == "100088").ToList();
                 }
                 skuStrList = skuList.Select(m => m.SkuNo).ToList();
-                var areaStr = new List<string>() { "B06", "B07", "B09" };
+                var areaStr = new List<string>() { "B06", "B07", "B09", "B24" };
                 var stockRst = new StockServer();
                 var stockDetailRst = new StockDetailServer();
                 Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>()
@@ -1193,6 +1194,12 @@
                         //}
                         break;
                     case "W02"://鍘熸枡搴�
+                        if (skuList.Any(m => m.Type == "2"))
+                        {
+                            throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�");
+                        }
+                        break;
+                    case "W04"://骞冲簱
                         if (skuList.Any(m => m.Type == "2"))
                         {
                             throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�");
@@ -1830,9 +1837,9 @@
                 {
                     throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
                 }
-                if (notice.Origin != "WMS" || notice.Status != "0")
+                if (notice.Status != "0")//notice.Origin != "WMS" ||
                 {
-                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︽湭绛夊緟鎵ц鎴栨潵婧愭槸鍚︽槸WMS");
+                    throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︽湭绛夊緟鎵ц");
                 }
 
                 //鎬诲簱瀛樹俊鎭�
@@ -2006,6 +2013,13 @@
             }
         }
 
+        /// <summary>
+        /// 瀵煎嚭xml鏂囦欢
+        /// </summary>
+        /// <param name="id"></param>
+        /// <param name="userId"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
         public XmlNode AddExXmlStr(int id, int userId)
         {
             try
@@ -2015,27 +2029,80 @@
                 {
                     throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅");
                 }
+                var noticeDetial = Db.Queryable<BllExportNoticeDetail>().Where(w => w.IsDel == "0" && w.SONo == notice.SONo).First();
+                if (noticeDetial == null)
+                {
+                    throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁鏄庣粏淇℃伅");
+                }
                 var statusLis = new List<string>() { "4", "5", "6" };
                 if (!statusLis.Contains(notice.Status))
                 {
                     throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负鎵ц瀹屾垚鎴栬鍗曞叧闂�/宸蹭笂浼�");
                 }
+                string xmlName = string.Empty;
+                switch (notice.Type)
+                {
+                    case "0"://鎴愬搧鍑哄簱/閿�鍞嚭搴�
+                        xmlName = "SalesWareHouseOut";
+                        break;
+                    case "2"://鎶芥鍑哄簱
+                        xmlName = "CheckWareHouseOut";
+                        break;
+                    default:
+                        throw new Exception("鍗曟嵁绫诲瀷寮傚父");
+                }
+
+                var materiDetial = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == noticeDetial.SkuNo);
+                var packType = Db.Queryable<SysPackag>().First(w => w.IsDel == "0" && w.PackagNo == materiDetial.PackagNo);
+                int level = 0;
+                if (!string.IsNullOrEmpty(packType.L2Name))
+                {
+                    level = 1;
+                }
+                if (!string.IsNullOrEmpty(packType.L3Name))
+                {
+                    level = 2;
+                }
+                if (!string.IsNullOrEmpty(packType.L4Name))
+                {
+                    level = 3;
+                }
                 //鍑哄簱鍗曟槑缁�
-                var comDetail = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.SONo == notice.SONo).Select(m => m.BoxNo3).ToList();
+                var comDetail = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.SONo == notice.SONo).ToList();
+                var userinfo = Db.Queryable<SysUserInfor>().Where(m => m.Id == comDetail.First().CreateUser).First().RealName;
+
                 Db.BeginTran();//寮�鍚簨鍔�
 
                 try
                 {
                     //Hashtable pars = new Hashtable();       //鐢ㄦ潵瀛樻斁鍙傛暟
                     var pars = new List<string>();
-                    //for (int i = 0; i < 10; i++)
-                    //{
-                    //    pars.Add("202203240009000479940290"); 
-                    //} 
+                    string[] strr = new string[comDetail.Count];
 
-                    var dom = HttpHelper.EncodeParsToFuMa(comDetail, "ceshi", "ExInfoXml");
+                    for (int i = 0; i < comDetail.Count(); i++)
+                    {
+                        switch (level)
+                        {
+                            case 1:
+                                strr[i] = comDetail[i].BoxNo + "," + comDetail[i].SONo + "," + userinfo + "," + Convert.ToString(comDetail[i].CreateTime);
+                                break;
+                            case 2:
+                                strr[i] = comDetail[i].BoxNo3 + "," + comDetail[i].SONo + "," + userinfo + "," + Convert.ToString(comDetail[i].CreateTime);
+                                break;
+                            case 3:
+                                strr[i] = comDetail[i].BoxNo2 + "," + comDetail[i].SONo + "," + userinfo + "," + Convert.ToString(comDetail[i].CreateTime);
+                                break;
+                            default:
+                                break;
+                        }
+
+
+                        pars.Add(strr[i]);
+                    }
+                    //string fileName = $"{xmlName}_{notice.OrderCode}_linklink";
+                    var dom = HttpHelper.EncodeParsToFuMa(pars, "", xmlName, "ExInfoXml");
                     ////娣诲姞鎿嶄綔鏃ュ織璁板綍
-                    //var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍏冲崟", $"鍏抽棴浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
+                    var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "涓婁紶", $"涓婁紶浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId);
 
                     Db.CommitTran();
                     return dom;
@@ -2724,7 +2791,9 @@
                         //杩橀渶瑕佸垎閰嶇殑鏁伴噺
                         decimal needQty = detail.Qty - (detail.AllotQty == null ? 0 : decimal.Parse(detail.AllotQty.ToString()));
                         //搴撳瓨鏄庣粏 Status 0锛氬緟鍒嗛厤 1锛氶儴鍒嗗垎閰�  2锛氬凡鍒嗛厤 
-                        var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0").ToList();
+                        var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0"
+                        && m.AreaNo != "B06" && m.AreaNo != "B07" && m.AreaNo != "B09" && m.AreaNo != "B24")//鎺掗櫎杞﹂棿搴撳瓨
+                            .ToList();
 
 
                         //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规
@@ -2764,8 +2833,8 @@
                         }
                         #region 鍖呰淇℃伅
 
-                        var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺
-                        var bNum = 0;//绠辩墿鍝佹暟閲�
+                        var pNum = 0m;//鎵樼洏鐗╁搧鏁伴噺
+                        var bNum = 0m;//绠辩墿鍝佹暟閲�
                         //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺
                         new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum);
 
@@ -2773,7 +2842,8 @@
 
                         //鍙栧悎閫傚簱瀛樺晢鍝�
                         Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟
-                        var qty = 0m;
+                        var qty = 0m;//鍒嗛厤鏁伴噺
+                        var xQty = 0m;//涓嬫灦鏁伴噺
                         var house = "";
 
                         //鍒嗛厤璐х墿
@@ -2809,6 +2879,11 @@
                                 CreateUser = userId,
                                 CreateTime = DateTime.Now
                             };
+                            if (s.WareHouseNo == "W04")
+                            {
+                                allot.Status = "2";//寰呮嫞璐�
+                                xQty += allot.Qty;
+                            }
                             exAllotList.Add(allot);
 
                             s.LockQty += stockQtyDic[s.Id];
@@ -2821,11 +2896,12 @@
                             {
                                 s.Status = "1";
                             }
-
+                           
                             var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand();
 
                         }
-                        detail.AllotQty += qty;
+                        detail.AllotQty += qty;//鍒嗛厤鏁伴噺
+                        detail.FactQty += xQty;//涓嬫灦鏁伴噺
                         detail.UpdateUser = userId;
                         detail.UpdateTime = DateTime.Now;
                         if (detail.Status == "0")
@@ -2891,8 +2967,13 @@
                                 //璇佹槑鎵�鏈夊垎閰嶆暟閲忓叏閮ㄥ皬浜庣瓑浜庡嚭搴撴暟閲� 涓嶅仛淇敼
                                 break;
                         }
-
+                        var outPalletCount = exAllotList.Where(w => w.Status == "0").Count();//鏌ユ壘鏈夋棤闇�瑕佸嚭搴撶殑鎵樼洏
+                        if (outPalletCount <= 0)
+                        {
+                            notice.Status = "3";//姝e湪鎵ц
+                        }
                     }
+                    
                     notice.UpdateUser = userId;
                     notice.UpdateTime = DateTime.Now;
                     var zd = Db.Updateable(notice).ExecuteCommand();
@@ -3004,6 +3085,7 @@
                             soDetailList.Add(soDetail);
                         }
                         d.AllotQty = 0;
+                        d.FactQty = 0;
                         d.Status = "0";
                         d.UpdateUser = userId;
                         d.UpdateTime = DateTime.Now;
@@ -3136,7 +3218,8 @@
                         m => m.SkuNo.Contains(msg.Trim())
                              || m.SkuName.Contains(msg.Trim())
                              || m.LocatNo.Contains(msg.Trim()))
-                    .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1"))
+                    .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1")
+                        && m.AreaNo != "B06" && m.AreaNo != "B07" && m.AreaNo != "B09" && m.AreaNo != "B24")//鎺掗櫎杞﹂棿搴撳瓨
                     .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏�
 
                 var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto
@@ -3209,7 +3292,8 @@
                 //var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo);
 
                 var allotList = new List<BllExportAllot>();
-                decimal outQtys = 0;
+                decimal outQtys = 0;//鍒嗛厤鏁伴噺
+                decimal xQty = 0;//涓嬫灦鏁伴噺
                 foreach (var st in model.StockList)
                 {
                     var stock = stockList.First(a => a.Id == st.StockId);
@@ -3251,6 +3335,11 @@
                             CreateUser = userId,
                             CreateTime = DateTime.Now
                         };
+                        if (stock.WareHouseNo == "W04")
+                        {
+                            allot.Status = "2";//寰呮嫞璐�
+                            xQty += allot.Qty;
+                        }
                         allotList.Add(allot);
                     }
                     else
@@ -3273,7 +3362,8 @@
                 }
                 Db.Insertable(allotList).ExecuteCommand();
                 //淇敼鍗曟嵁鏄庣粏
-                detail.AllotQty += outQtys;
+                detail.AllotQty += outQtys;//鍒嗛厤鏁伴噺
+                detail.FactQty += xQty;//涓嬫灦鏁伴噺
                 detail.UpdateUser = userId;
                 detail.UpdateTime = DateTime.Now;
                 if (detail.Status == "0")
@@ -3302,6 +3392,12 @@
                     else if (totalAllotQty < totalQty && totalAllotQty > 0)
                     {
                         notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺  淇敼涓洪儴鍒嗗垎閰�
+                    }
+
+                    var outPalletCount = allotList.Where(w => w.Status == "0").Count();//鏌ユ壘鏈夋棤闇�瑕佸嚭搴撶殑鎵樼洏
+                    if (outPalletCount <= 0)
+                    {
+                        notice.Status = "3";//姝e湪鎵ц
                     }
                     Db.Updateable(notice).ExecuteCommand();
                 }
@@ -4307,31 +4403,65 @@
 
                         var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo
                             && m.LotNo == item2.LotNo && !slotList.Contains(m.LocatNo) && m.PalletTags == item2.PalletTags && okLan.Contains(m.RoadwayNo)).ToList();
-                        foreach (var s in tray2)
+                        if (tray2.Count > 0)
                         {
-                            if (string.IsNullOrWhiteSpace(s.RoadwayNo))//鍒ゆ柇鏄惁鍦ㄥ簱澶栵紝濡傛槸璺宠繃
+                            foreach (var s in tray2)
                             {
-                                continue;
-                            }
-                            var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList();
-                            //鍒ゆ柇鏄惁鏈夊叆搴撲腑銆佸嚭搴撲腑銆佺Щ鍏ヤ腑銆佺Щ鍑轰腑
-                            if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0)
-                            {
-                                continue;
-                            }
-                            if (lan.Count(m => m.Status == "0") > 0)
-                            {
-
-                                var bol = GetBecomingLocation(s.RoadwayNo, ref location);
-                                if (bol && !string.IsNullOrWhiteSpace(location))
+                                if (string.IsNullOrWhiteSpace(s.RoadwayNo))//鍒ゆ柇鏄惁鍦ㄥ簱澶栵紝濡傛槸璺宠繃
                                 {
-                                    newAddress = location;
-                                    return newAddress;
+                                    continue;
+                                }
+                                var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList();
+                                //鍒ゆ柇鏄惁鏈夊叆搴撲腑銆佸嚭搴撲腑銆佺Щ鍏ヤ腑銆佺Щ鍑轰腑
+                                if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0)
+                                {
+                                    continue;
+                                }
+                                if (lan.Count(m => m.Status == "0") > 0)
+                                {
+
+                                    var bol = GetBecomingLocation(s.RoadwayNo, ref location);
+                                    if (bol && !string.IsNullOrWhiteSpace(location))
+                                    {
+                                        newAddress = location;
+                                        return newAddress;
+                                    }
 
                                 }
-
                             }
                         }
+                        if(string.IsNullOrEmpty(newAddress))
+                        {
+                            //宸叉湁鐗╁搧鐨勫贩閬�
+                            var roadwayHave = Db.Queryable<DataStockDetail>().Where(w => w.IsDel == "0" && w.WareHouseNo == "W01").GroupBy(g => g.RoadwayNo).Select(s => s.RoadwayNo).ToList();
+                            //鏌ユ壘娌℃湁鐗╁搧鐨勫贩閬�
+                            var roadwayNull = Db.Queryable<SysStorageRoadway>().Where(w => w.IsDel == "0" && w.WareHouseNo == "W01" && w.Status == "0" && okLan.Contains(w.RoadwayNo) && !roadwayHave.Contains(w.RoadwayNo)).Select(s => s.RoadwayNo).ToList();
+                            if (roadwayNull.Count > 0)
+                            {
+                                foreach (var itemRoad in roadwayNull)
+                                {
+                                    var bol = GetBecomingLocation(itemRoad, ref location);
+                                    if (bol && !string.IsNullOrWhiteSpace(location))
+                                    {
+                                        newAddress = location;
+                                        return newAddress;
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                foreach (var itemRoad in roadwayHave)
+                                {
+                                    var bol = GetBecomingLocation(itemRoad, ref location);
+                                    if (bol && !string.IsNullOrWhiteSpace(location))
+                                    {
+                                        newAddress = location;
+                                        return newAddress;
+                                    }
+                                }
+                            }
+                        }
+                        
                     }
                 }
 
@@ -4505,16 +4635,15 @@
 
                 if (slotModel[0].Column > aisleRow)
                 {
-                    // 鍙栨渶涓婇潰涓�鎺�
-                    location = slotModel[0].LocatNo;
-
-                }
-                else
-                {
                     // 鍙栨渶涓嬮潰涓�鎺�
 
                     location = slotModel[slotModel.Count - 1].LocatNo;
                 }
+                else
+                {
+                    // 鍙栨渶涓婇潰涓�鎺�
+                    location = slotModel[0].LocatNo;                    
+                }
 
                 bl = true;
             }

--
Gitblit v1.8.0