From e105c505e75286144119ad34f5fcbed6a6571c7e Mon Sep 17 00:00:00 2001
From: zhaowc <526854230@qq.com>
Date: 星期四, 20 六月 2024 16:53:32 +0800
Subject: [PATCH] Merge branch 'master' of http://47.95.120.53:8083/r/JC23WMS-2

---
 Wms/WMS.BLL/BllTransServer/NoticeServer.cs |  494 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 492 insertions(+), 2 deletions(-)

diff --git a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
index 28ead5b..fee3032 100644
--- a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
+++ b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
@@ -6,6 +6,9 @@
 using WMS.DAL;
 using WMS.Entity.BllAsnEntity;
 using WMS.Entity.Context;
+using WMS.Entity.DataEntity;
+using WMS.Entity.LogEntity;
+using WMS.Entity.SysEntity;
 using WMS.IBLL.IBllTransServer;
 
 namespace WMS.BLL.BllTransServer
@@ -16,7 +19,11 @@
         public NoticeServer() : base(Db)
         {
         }
-
+        /// <summary>
+        /// 涓嬪彂鍏ュ簱鍗�
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
         public ErpModel CreateAsn(AsnInfo model)
         {
             try
@@ -78,7 +85,7 @@
                         SkuName = asnDetailModel.SkuName,
                         LotNo = asnDetailModel.LotNo,
                         LotText = "",
-                        Qty = (decimal)asnDetailModel.Qty,
+                        Qty = (decimal)asnDetailModel.Qty,//杩欓噷鏄《鏁伴噺
                         FactQty = 0,
                         CompleteQty = 0,
                         SupplierLot = asnDetailModel.SupplierLot,
@@ -108,5 +115,488 @@
                 throw ex;
             }
         }
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="TaskNo"></param>
+        /// <param name="Status"></param>
+        /// <returns></returns>
+        public ErpModel FinishTask(string TaskNo,string Status)
+        {
+            try
+            {
+                #region 鏉′欢鍒ゆ柇
+                var resultModel = new ErpModel() { Success = -1, Message = "" };
+                if (string.IsNullOrEmpty(TaskNo))
+                {
+                    resultModel.Message = "浠诲姟鍙蜂笉鍙负绌�!";
+                    return resultModel;
+                }
+                //浠诲姟淇℃伅
+                var taskInfo = Db.Queryable<LogTask>().First(w => w.TaskNo == TaskNo);
+                if (taskInfo == null)
+                {
+                    resultModel.Message = $"浠诲姟鍙蜂负:{TaskNo}鐨勪换鍔′笉瀛樺湪!";
+                    return resultModel;
+                }
+                if (taskInfo.Status != "1")
+                {
+                    resultModel.Message = $"浠诲姟鍙蜂负:{TaskNo}鐨勪换鍔$姸鎬佸紓甯�!";
+                    return resultModel;
+                }
+                #endregion
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+                var comTime = DateTime.Now;
+
+                if (Status == "0")
+                {
+                    taskInfo.Status = "3";//寮傚父缁撴潫
+                    //淇敼浠诲姟鐘舵��
+                    Db.Updateable(taskInfo).ExecuteCommand();
+
+                    resultModel.Success = 0;
+                    resultModel.Message = "鎴愬姛";
+                    return resultModel;
+                }
+                switch (taskInfo.OrderType)
+                {
+                    //鍏ュ簱瀹屾垚
+                    case "0":
+                        //鍏ュ簱鍗曟槑缁嗕俊鎭�
+                        var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.ASNDetailNo);
+                        if (noticeDetail == null)
+                        {
+                            resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曟槑缁嗕笉瀛樺湪!";
+                            return resultModel;
+                        }
+                        //鍏ュ簱鍗曚俊鎭�
+                        var notice = Db.Queryable<BllArrivalNotice>().First(w => w.ASNNo == noticeDetail.ASNNo);
+                        if (notice == null)
+                        {
+                            resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曚笉瀛樺湪!";
+                            return resultModel;
+                        }
+                        if (notice.Status == "3" || notice.Status == "4")
+                        {
+                            resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曞凡鎵ц瀹屾垚!";
+                            return resultModel;
+                        }
+                        //鐩爣鍌ㄤ綅淇℃伅
+                        var locatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0");
+                        if (locatInfo == null)
+                        {
+                            resultModel.Message = "鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�!";
+                            return resultModel;
+                        }
+                        //搴撳瓨鏄庣粏
+                        var sd1 = new DataStockDetail()
+                        {
+                            LotNo = noticeDetail.LotNo,
+                            LotText = noticeDetail.LotText,
+                            SupplierLot = noticeDetail.SupplierLot,
+                            SkuNo = noticeDetail.SkuNo,
+                            SkuName = noticeDetail.SkuName,
+                            Standard = noticeDetail.Standard,
+                            Qty = 1,
+                            LockQty = 0,
+                            FrozenQty = 0,
+                            InspectQty = 0,
+                            ASNNo = noticeDetail.ASNNo,
+                            ASNDetailNo = noticeDetail.Id,
+                            WareHouseNo = locatInfo.WareHouseNo,//鎵�灞炰粨搴�
+                            RoadwayNo = locatInfo.RoadwayNo,//鎵�灞炲贩閬�
+                            AreaNo = locatInfo.AreaNo,//鎵�灞炲尯鍩�
+                            LocatNo = locatInfo.LocatNo,//鍌ㄤ綅鍦板潃
+                            PalletNo = taskInfo.PalletNo,
+                            PalletNo2 = "",
+                            PalletNo3 = "",
+                            PalletTags = "0",
+                            CompleteTime = comTime,
+                            ProductionTime = null,
+                            ExpirationTime = null,
+                            Status = "0",
+                            InspectMark = "0",
+                            InspectStatus = "0",//寰呮楠�
+                            BitPalletMark = "0",
+                            PackagNo = "",
+                            IsBale = "0",
+                            IsBelt = "0",
+
+                            IsDel = "0",
+                            CreateUser = 0,
+                            CreateTime = comTime
+                        };
+                        //鎻掑叆搴撳瓨鏄庣粏
+                        Db.Insertable(sd1).ExecuteCommand();
+
+                        noticeDetail.CompleteQty += 1;//瀹屾垚鏁伴噺
+                        noticeDetail.Status = "1";//0锛氱瓑寰呮墽琛� 1锛氭鍦ㄦ墽琛� 2锛氭墽琛屽畬鎴�
+                        if (noticeDetail.CompleteQty >= noticeDetail.Qty)
+                        {
+                            noticeDetail.Status = "2";
+                            noticeDetail.CompleteTime = comTime;
+                        }
+                        noticeDetail.UpdateUser = 0;
+                        noticeDetail.UpdateTime = comTime;
+                        //鏇存柊鍏ュ簱鍗曟槑缁�
+                        Db.Updateable(noticeDetail).ExecuteCommand();
+
+                        notice.UpdateUser = 0;
+                        notice.UpdateTime = comTime;
+                        if (notice.Status == "0")
+                        {
+                            notice.Status = "1";
+                        }
+                        var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo && m.Status != "2");
+                        if (asnDetailNum == 0)
+                        {
+                            notice.Status = "2";
+                            notice.CompleteTime = comTime;//瀹屾垚鏃堕棿
+                        }
+                        //鏇存柊鍏ュ簱鍗�
+                        Db.Updateable(notice).ExecuteCommand();
+
+                        locatInfo.Status = "1";//鏈夌墿鍝�
+                        //鏇存柊鍌ㄤ綅鐘舵��
+                        Db.Updateable(locatInfo).ExecuteCommand();
+                        break;
+                }
+                taskInfo.Status = "2";//鎵ц瀹屾垚
+                //淇敼浠诲姟鐘舵��
+                Db.Updateable(taskInfo).ExecuteCommand();
+
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
+
+                resultModel.Success = 0;
+                resultModel.Message = "鎴愬姛";
+                return resultModel;
+            }
+            catch (Exception ex)
+            {
+                //鍥炴粴浜嬪姟
+                Db.RollbackTran();
+                throw ex;
+            }
+        }
+        /*public SoResInfo ErpAddExportNotice(SoInfo model)
+        {
+            try
+            {
+                if (string.IsNullOrEmpty(model.SoType))
+                {
+                    throw new Exception("鍗曟嵁绫诲瀷涓嶅彲涓虹┖!");
+                }
+                if (string.IsNullOrEmpty(model.OrderCode))
+                {
+                    throw new Exception("绯荤粺鍗曞彿涓嶅彲涓虹┖!");
+                }
+                if (model.SoDetails.Count <= 0)
+                {
+                    throw new Exception("鍑哄簱鍗曟槑缁嗕笉鍙负绌�!");
+                }
+                //杩斿洖淇℃伅
+                SoResInfo result = new SoResInfo();
+
+                //鑾峰彇搴撳瓨鏄庣粏
+                var stockDetailList = Db.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0 && s.InspectStatus == "1").ToList();
+                //鑾峰彇搴撳瓨
+                var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList();
+
+                string CustomerName = string.Empty;
+                if (!string.IsNullOrEmpty(model.Customer))
+                {
+                    //瀹㈡埛淇℃伅
+                    var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer);
+                    if (customer == null)
+                    {
+                        throw new Exception("瀹㈡埛淇℃伅涓嶅瓨鍦�!");
+                    }
+                    CustomerName = customer.CustomerName;
+                }
+                //鎵胯繍鍟嗕俊鎭�
+                var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo);
+                int? logisticsId = null;
+                if (logistics != null)
+                {
+                    logisticsId = logistics.Id;
+                }
+                var billNo = "";
+                var bl = true;
+                do
+                {
+                    //鑾峰彇鑷鍗曟嵁鍙�
+                    billNo = new Common().GetMaxNo("SO");
+                    var no = billNo;
+                    bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no);
+                } while (bl);
+
+                List<SoDetailInfo> soDetailList = new List<SoDetailInfo>();
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+                try
+                {
+                    var list = new List<BllExportNoticeDetail>();
+                    //娣诲姞鍑哄簱鍗�
+                    foreach (var d in model.SoDetails)
+                    {
+                        if (d.Qty < 1)
+                        {
+                            throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0");
+                        }
+                        var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo);
+                        if (sku == null)
+                        {
+                            throw new Exception($"鐗╂枡淇℃伅涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}");
+                        }
+                        //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�3锛氱墿鏂欏彇鏍峰嚭搴撱��4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///2:鎶芥鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱
+                        if (model.SoType == "0" || model.SoType == "3" || model.SoType == "4" || model.SoType == "7")
+                        {
+                            if (string.IsNullOrWhiteSpace(d.LotNo))
+                            {
+                                throw new Exception("鎵规涓嶅彲涓虹┖!");
+                            }
+                        }
+                        //搴撳瓨鏄庣粏
+                        List<DataStockDetail> stockDetails;
+                        //鎸囧畾鎵规
+                        if (!string.IsNullOrWhiteSpace(d.LotNo))
+                        {
+                            stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList();
+                            if (stockDetails.Count < 1)
+                            {
+                                throw new Exception($"搴撳瓨涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}");
+                            }
+                            //鍒ゆ柇鏁伴噺
+                            var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
+                            if (d.Qty > qty)
+                            {
+                                throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻");
+                            }
+                            //搴撳瓨淇℃伅
+                            var stockInfo = stockList.First(w => w.SkuNo == d.SkuNo && w.LotNo == d.LotNo);
+                            if (stockInfo == null)
+                            {
+                                throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}");
+                            }
+                            //鍒ゆ柇鎬诲簱瀛樻暟閲�
+                            if (d.Qty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty)
+                            {
+                                throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻");
+                            }
+                            //娣诲姞鍑哄簱鍗曟槑缁�
+                            var noticeDetail = new BllExportNoticeDetail()
+                            {
+                                SONo = billNo,
+                                SkuNo = sku.SkuNo,
+                                SkuName = sku.SkuName,
+                                Standard = sku.Standard,
+                                LotNo = d.LotNo,
+                                LotText = stockInfo.LotText,
+                                Qty = d.Qty,
+                                AllotQty = 0,
+                                FactQty = 0,
+                                CompleteQty = 0,
+                                PackagNo = sku.PackagNo,
+                                Price = sku.Price,
+                                Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
+                                IsBale = "",
+                                IsBelt = "",
+                                SupplierLot = stockInfo.SupplierLot,
+                                IsWave = "0",
+                                WaveNo = "",
+                                IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
+
+                                OrderDetailCode = d.OrderDetailCode,
+
+                                CreateUser = 0,
+                            };
+                            list.Add(noticeDetail);
+                            //鏇存柊搴撳瓨閿佸畾鏁伴噺
+                            stockInfo.LockQty += d.Qty;
+                            var i = Db.Updateable(stockInfo).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
+
+                            SoDetailInfo soDetail = new SoDetailInfo();
+                            soDetail.OrderDetailCode = d.OrderDetailCode;
+                            soDetail.LockQty = d.Qty;
+                            soDetail.LotNo = d.LotNo;
+
+                            soDetailList.Add(soDetail);
+                        }
+                        else//鏈寚瀹氭壒娆�
+                        {
+                            Dictionary<int, decimal> dic = new Dictionary<int, decimal>();
+                            decimal q1 = 0;
+                            //棣栧厛鏌ヨ褰撳墠杩欑鐗╂枡鎵规鍙蜂负绌虹殑
+                            stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList();
+                            if (stockDetails.Count > 0)
+                            {
+                                q1 = (decimal)stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty);
+                                //搴撳瓨淇℃伅
+                                var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(w.LotNo));
+                                if (stockInfo != null)
+                                {
+                                    var q2 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty;
+                                    if (q2 < q1)
+                                    {
+                                        q1 = q2;
+                                    }
+                                    if (d.Qty > q1)
+                                    {
+                                        dic.Add(stockInfo.Id, q1);
+                                    }
+                                    else
+                                    {
+                                        dic.Add(stockInfo.Id, d.Qty);
+                                    }
+                                }
+                            }
+                            //濡傛灉鎵规鍙蜂负绌虹殑鏁伴噺涓嶅锛屾牴鎹壒娆″厛杩涘厛鍑哄師鍒欐煡鎵惧叾瀹冩壒娆$殑
+                            if (d.Qty > q1)
+                            {
+                                stockDetails = stockDetailList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList();
+                                foreach (var demo in stockDetails)
+                                {
+                                    if (q1 >= d.Qty)
+                                    {
+                                        break;
+                                    }
+                                    var q2 = demo.Qty - demo.FrozenQty - demo.LockQty;
+                                    //搴撳瓨淇℃伅
+                                    var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && w.LotNo == demo.LotNo);
+                                    if (stockInfo == null)
+                                    {
+                                        continue;
+                                    }
+                                    decimal q4 = 0;
+                                    if (dic.ContainsKey(stockInfo.Id))
+                                    {
+                                        q4 = dic[stockInfo.Id];
+                                    }
+                                    var q3 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty - q4;
+                                    if (q3 < q2)
+                                    {
+                                        q2 = q3;
+                                    }
+                                    if (q2 > d.Qty - q1)
+                                    {
+                                        if (!dic.ContainsKey(stockInfo.Id))
+                                        {
+                                            dic.Add(stockInfo.Id, d.Qty - q1);
+                                        }
+                                        else
+                                        {
+                                            //鏇存柊鍊�
+                                            dic[stockInfo.Id] += d.Qty - q1;
+                                        }
+                                        q1 += d.Qty - q1;
+                                    }
+                                    else
+                                    {
+                                        if (!dic.ContainsKey(stockInfo.Id))
+                                        {
+                                            dic.Add(stockInfo.Id, (decimal)q2);
+                                        }
+                                        else
+                                        {
+                                            //鏇存柊鍊�
+                                            dic[stockInfo.Id] = dic[stockInfo.Id] + (decimal)q2;
+                                        }
+                                        q1 += (decimal)q2;
+                                    }
+                                }
+                            }
+                            if (d.Qty > q1)
+                            {
+                                throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo} 搴撳瓨鏁伴噺涓嶈冻");
+                            }
+                            foreach (var s in dic)
+                            {
+                                var st = stockList.First(a => a.Id == s.Key);
+                                var item = new BllExportNoticeDetail()
+                                {
+                                    SONo = billNo,
+                                    OrderDetailCode = d.OrderDetailCode,
+                                    SkuNo = sku.SkuNo,
+                                    SkuName = sku.SkuName,
+                                    Standard = sku.Standard,
+                                    LotNo = st.LotNo,
+                                    LotText = st.LotText,
+                                    Qty = s.Value,
+                                    AllotQty = 0,
+                                    FactQty = 0,
+                                    CompleteQty = 0,
+                                    PackagNo = sku.PackagNo,
+                                    Price = sku.Price,
+                                    Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty,
+                                    IsBale = "",
+                                    IsBelt = "",
+                                    SupplierLot = st.SupplierLot,
+                                    IsWave = "0",
+                                    WaveNo = "",
+                                    IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1",
+
+                                    CreateUser = 0,
+                                };
+                                list.Add(item);
+
+                                st.LockQty += s.Value;//閿佸畾鏁伴噺
+                                var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand();
+
+                                SoDetailInfo soDetail = new SoDetailInfo();
+                                soDetail.OrderDetailCode = d.OrderDetailCode;
+                                soDetail.LockQty = s.Value;
+                                soDetail.LotNo = st.LotNo;
+
+                                soDetailList.Add(soDetail);
+                            }
+                        }
+                    }
+                    var notice = new BllExportNotice()
+                    {
+                        SONo = billNo,
+                        OrderCode = model.OrderCode,
+                        Type = model.SoType,
+                        Status = "0",
+                        Origin = "WMS",
+                        CustomerNo = model.Customer,
+                        CustomerName = CustomerName,
+                        LogisticsId = logisticsId,
+                        IsWave = "0",
+                        WaveNo = "",
+                        IsDespatch = "0",
+
+                        CreateUser = 0,
+                    };
+
+                    var n = Db.Insertable<BllExportNotice>(notice).ExecuteCommand();
+                    var m = Db.Insertable<BllExportNoticeDetail>(list).ExecuteCommand();
+
+                    if (n <= 0 || m <= 0)
+                    {
+                        Db.RollbackTran();
+                        throw new Exception("鎿嶄綔澶辫触");
+                    }
+                    Db.CommitTran();
+                    //鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺淇℃伅
+                    result.Success = "0";
+                    result.Message = "鎿嶄綔鎴愬姛";
+                    result.SoDetails = soDetailList;
+                    return result;
+
+                }
+                catch (Exception ex)
+                {
+                    Db.RollbackTran();
+                    throw new Exception(ex.Message);
+                }
+            }
+            catch (Exception ex)
+            {
+                Db.RollbackTran();
+                throw new Exception(ex.Message);
+            }
+        }*/
     }
 }

--
Gitblit v1.8.0