From 65dac074f71375381eba0a5ff8dc108cacafc3f9 Mon Sep 17 00:00:00 2001
From: Administrator <Administrator@DESKTOP-5BIMHQ3>
Date: 星期二, 25 六月 2024 10:18:16 +0800
Subject: [PATCH] Merge branch 'wxw'

---
 Wms/WMS.BLL/BllTransServer/NoticeServer.cs |  604 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 600 insertions(+), 4 deletions(-)

diff --git a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
index 28ead5b..53992db 100644
--- a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
+++ b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs
@@ -1,11 +1,19 @@
 锘縰sing Model.InterFaceModel;
+using Newtonsoft.Json;
 using SqlSugar;
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
+using WMS.BLL.LogServer;
 using WMS.DAL;
 using WMS.Entity.BllAsnEntity;
+using WMS.Entity.BllQualityEntity;
+using WMS.Entity.BllSoEntity;
 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,8 +24,12 @@
         public NoticeServer() : base(Db)
         {
         }
-
-        public ErpModel CreateAsn(AsnInfo model)
+        /// <summary>
+        /// 涓嬪彂鍏ュ簱鍗�
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public ErpModel CreateAsnWork(AsnInfo model)
         {
             try
             {
@@ -43,7 +55,7 @@
                     Origin = string.IsNullOrEmpty(model.Origin) ? "MES" : model.Origin,
                     CustomerNo = model.Customer,
                     CustomerName = "",
-                    OrderCode = model.OrderCode,
+                    OrderCode = model.OrderCode
                 };
 
                 // 鍏ュ簱鏄庣粏琛ㄤ俊鎭�
@@ -78,7 +90,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 +120,589 @@
                 throw ex;
             }
         }
+
+        /// <summary>
+        /// 浠诲姟瀹屾垚
+        /// </summary>
+        /// <param name="TaskNo"></param>
+        /// <param name="Status"></param>
+        /// <returns></returns>
+        public ErpModel RCSFinishTask(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)
+                {
+                    #region 鍏ュ簱瀹屾垚
+                    case "0":
+                        //鍏ュ簱鍗曟槑缁嗕俊鎭�
+                        var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.NoticeDetailNo);
+                        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 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo);
+                        if (sd1 == null)
+                        {
+                            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",
+
+                                PalletStatus = "1",
+
+                                IsDel = "0",
+                                CreateUser = 0,
+                                CreateTime = comTime
+                            };
+                            //鎻掑叆搴撳瓨鏄庣粏
+                            Db.Insertable(sd1).ExecuteCommand();
+                        }
+                        else
+                        {
+                            sd1.Qty = 1;
+                            sd1.LockQty = 0;
+                            sd1.FrozenQty = 0;
+                            sd1.InspectQty = 0;
+                            sd1.ASNNo = noticeDetail.ASNNo;
+                            sd1.ASNDetailNo = noticeDetail.Id;
+                            sd1.WareHouseNo = locatInfo.WareHouseNo;//鎵�灞炰粨搴�
+                            sd1.RoadwayNo = locatInfo.RoadwayNo;//鎵�灞炲贩閬�
+                            sd1.AreaNo = locatInfo.AreaNo;//鎵�灞炲尯鍩�
+                            sd1.LocatNo = locatInfo.LocatNo;//鍌ㄤ綅鍦板潃
+                            sd1.CompleteTime = comTime;
+                            sd1.InspectStatus = "0";//寰呮楠�
+                            sd1.PalletStatus = "1";//棰勬贩
+
+                            //淇敼搴撳瓨鏄庣粏
+                            Db.Updateable(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();
+
+                        #region 璐ㄦ璇烽獙
+                        var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == noticeDetail.SkuNo && m.LotNo == noticeDetail.LotNo && m.SupplierLot == noticeDetail.SupplierLot);
+                        if (qualityRequest == null)
+                        {
+                            //璐ㄦ璇烽獙鍗曚俊鎭�
+                            string qcNo = new Common().GetMaxNo("QC");
+                            qualityRequest = new BllQualityInspectionRequest();
+                            qualityRequest.QcNo = qcNo;
+                            qualityRequest.Status = "0";
+                            qualityRequest.SkuNo = noticeDetail.SkuNo;
+                            qualityRequest.SkuName = noticeDetail.SkuName;
+                            qualityRequest.LotNo = noticeDetail.LotNo;
+                            qualityRequest.SupplierLot = noticeDetail.SupplierLot;
+                            qualityRequest.Qty = noticeDetail.Qty;
+                            qualityRequest.SamplingQty = 0;
+                            qualityRequest.ASNNo = noticeDetail.ASNNo;
+                            qualityRequest.CreateUser = 0;
+                            qualityRequest.CreateTime = comTime;
+
+                            // 璁板綍浠诲姟鏃ュ織
+                            var taskNo = new Common().GetMaxNo("TK");
+                            var exTask = new LogTask()
+                            {
+                                TaskNo = taskNo,
+                                Sender = "WMS",
+                                Receiver = "Limes",
+                                IsSuccess = 0,//鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                                StartLocat = "",//璧峰浣嶇疆
+                                PalletNo = "",//鎵樼洏鐮�
+                                IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                                IsCancel = 1,//鏄惁鍙彇娑�
+                                IsFinish = 1,//鏄惁鍙畬鎴�    
+                                Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                                OrderType = "5",//0 鍏ュ簱鍗� 1 鍑哄簱鍗�  2 鐩樼偣鍗�  3 绉诲簱鍗� 4 鍙栨牱鍑哄簱鍗� 5 鍏朵粬
+                                EndLocat = "",//鐩爣浣嶇疆
+                                Type = "3",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                                Msg = "璇烽獙浠诲姟"
+                            };
+                            // 鎻掑叆浠诲姟鏃ュ織
+                            Db.Insertable(exTask).ExecuteCommand();
+
+                            // 璋冪敤Limes鎺ュ彛鍙戣捣璇烽獙
+                            var sendModel = new SendLimesModel()
+                            {
+                                QcNo = qualityRequest.QcNo,
+                                SkuNo = qualityRequest.SkuNo,
+                                Qty = qualityRequest.Qty.ToString(),
+                                LotNo = qualityRequest.LotNo,
+                                SupplierLot = qualityRequest.SupplierLot,
+                                RequestUser = "",                       // 璇烽獙浜�
+                            };
+                            var jsonData = JsonConvert.SerializeObject(sendModel);
+                            string response = "";
+                            try
+                            {
+                                var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss")
+                                //response = HttpHelper.DoPost(url, jsonData, "涓婁紶Limes绯荤粺鍙戣捣璇烽獙", "Limes");
+                                var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss")
+
+                                ////瑙f瀽杩斿洖鏁版嵁 
+                                //var limesModel = JsonConvert.DeserializeObject<LimesModel>(response);
+                                List<string> list1 = new List<string>();
+                                list1.Add(taskNo);
+                                //if (limesModel.Success == 0)
+                                //{
+                                //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�//
+                                new TaskServer().EditTaskIssueOk(list1, time1, time2);
+
+                                // 鏇存柊璇烽獙鍗曚俊鎭�
+                                qualityRequest.Status = "1";
+                                qualityRequest.SamplingQty = 10;//decimal.Parse(limesModel.SamplingQty);
+                                qualityRequest.RequestUser = 0;
+                                qualityRequest.RequestTime = DateTime.Now;
+                                qualityRequest.UpdateTime = DateTime.Now;
+                                qualityRequest.UpdateUser = 0;
+                                //娣诲姞璐ㄦ璇烽獙鍗�
+                                Db.Insertable(qualityRequest).ExecuteCommand();
+                                //}
+                                //if (limesModel.Success == -1)
+                                //{
+                                //    new TaskServer().EditTaskIssueNo(list1, time1, time2,limesModel.Message);
+                                //    throw new Exception(limesModel.Message);
+                                //}
+                            }
+                            catch (Exception ex)
+                            {
+                                throw new Exception(ex.Message);
+                            }
+                        }
+                        #endregion
+
+                        break;
+                    #endregion
+
+                    #region 鍑哄簱瀹屾垚
+                    case "1":
+                        //鍑哄簱鍗曟槑缁嗕俊鎭�
+                        var exNoticeDetail = Db.Queryable<BllExportNoticeDetail>().First(w => w.Id == taskInfo.NoticeDetailNo);
+                        if (exNoticeDetail == null)
+                        {
+                            resultModel.Message = "璇ヤ换鍔″搴旂殑鍑哄簱鍗曟槑缁嗕笉瀛樺湪!";
+                            return resultModel;
+                        }
+                        //鍑哄簱鍗曚俊鎭�
+                        var exNotice = Db.Queryable<BllExportNotice>().First(w => w.SONo == exNoticeDetail.SONo);
+                        if (exNotice == null)
+                        {
+                            resultModel.Message = "璇ヤ换鍔″搴旂殑鍑哄簱鍗曚笉瀛樺湪!";
+                            return resultModel;
+                        }
+                        if (exNotice.Status == "4" || exNotice.Status == "5")
+                        {
+                            resultModel.Message = "璇ヤ换鍔″搴旂殑鍑哄簱鍗曞凡鎵ц瀹屾垚!";
+                            return resultModel;
+                        }
+                        //璧峰鍌ㄤ綅淇℃伅
+                        var startLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.StartLocat && w.IsDel == "0");
+                        if (startLocatInfo == null)
+                        {
+                            resultModel.Message = "璧峰鍌ㄤ綅淇℃伅涓嶅瓨鍦�!";
+                            return resultModel;
+                        }
+                        //鐩爣鍌ㄤ綅淇℃伅
+                        var endLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0");
+                        if (endLocatInfo == null)
+                        {
+                            resultModel.Message = "鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�!";
+                            return resultModel;
+                        }
+                        //搴撳瓨鏄庣粏
+                        var sd2 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo);
+                        if (sd2 == null)
+                        {
+                            resultModel.Message = "搴撳瓨淇℃伅涓嶅瓨鍦�!";
+                            return resultModel;
+                        }
+                        //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲�
+                        exNoticeDetail.CompleteQty += sd2.Qty;
+                        Db.Updateable(exNoticeDetail).ExecuteCommand();
+
+                        exNotice.UpdateUser = 0;
+                        exNotice.UpdateTime = comTime;
+                        if (exNotice.Status == "0" || exNotice.Status == "1" || exNotice.Status == "2")
+                        {
+                            exNotice.Status = "3";//鏇存敼涓烘鍦ㄦ墽琛�
+                        }
+                        var num = Db.Queryable<BllExportNoticeDetail>().Count(m => m.IsDel == "0" && m.SONo == exNoticeDetail.SONo && m.CompleteQty < m.Qty);
+                        if (num <= 0)
+                        {
+                            exNotice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴�                            
+                        }
+                        //淇敼鍑哄簱鍗曚俊鎭�
+                        Db.Updateable(exNotice).ExecuteCommand();
+
+                        sd2.Qty = 0;
+                        sd2.LockQty = 0;
+                        sd2.FrozenQty = 0;
+                        sd2.InspectQty = 0;
+                        sd2.ASNNo = "";
+                        sd2.ASNDetailNo = null;
+                        sd2.WareHouseNo = endLocatInfo.WareHouseNo;//鎵�灞炰粨搴�
+                        sd2.RoadwayNo = endLocatInfo.RoadwayNo;//鎵�灞炲贩閬�
+                        sd2.AreaNo = endLocatInfo.AreaNo;//鎵�灞炲尯鍩�
+                        sd2.LocatNo = endLocatInfo.LocatNo;//鍌ㄤ綅鍦板潃
+                        sd2.CompleteTime = comTime;
+                        //淇敼搴撳瓨鏄庣粏
+                        Db.Updateable(sd2).ExecuteCommand();
+
+                        startLocatInfo.Status = "0";//绌哄偍浣�
+                        //淇敼璧峰鍌ㄤ綅鐘舵��
+                        Db.Updateable(startLocatInfo).ExecuteCommand();
+
+                        endLocatInfo.Status = "1";//鏈夌墿鍝�
+                        //淇敼鐩爣鍌ㄤ綅鐘舵��
+                        Db.Updateable(endLocatInfo).ExecuteCommand();
+
+                        break;
+                    #endregion
+
+                    #region 浠诲姟瀹屾垚
+                    case "2":
+                        //璧峰鍌ㄤ綅淇℃伅
+                        var startLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.StartLocat && w.IsDel == "0");
+                        if (startLocatInfo2 == null)
+                        {
+                            resultModel.Message = "璧峰鍌ㄤ綅淇℃伅涓嶅瓨鍦�!";
+                            return resultModel;
+                        }
+                        //鐩爣鍌ㄤ綅淇℃伅
+                        var endLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0");
+                        if (endLocatInfo2 == null)
+                        {
+                            resultModel.Message = "鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�!";
+                            return resultModel;
+                        }
+                        //搴撳瓨鏄庣粏
+                        var sd3 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo);
+                        if (sd3 == null)
+                        {
+                            resultModel.Message = "搴撳瓨淇℃伅涓嶅瓨鍦�!";
+                            return resultModel;
+                        }
+                        sd3.WareHouseNo = endLocatInfo2.WareHouseNo;//鎵�灞炰粨搴�
+                        sd3.RoadwayNo = endLocatInfo2.RoadwayNo;//鎵�灞炲贩閬�
+                        sd3.AreaNo = endLocatInfo2.AreaNo;//鎵�灞炲尯鍩�
+                        sd3.LocatNo = endLocatInfo2.LocatNo;//鍌ㄤ綅鍦板潃
+                        if (endLocatInfo2.AreaNo == "A01")//娲佸噣鍖�
+                        {
+                            sd3.PalletStatus = "0";
+                        }
+                        else if (endLocatInfo2.AreaNo == "A02")//棰勬贩鍖�
+                        {
+                            sd3.PalletStatus = "1";
+                        }
+                        else if (endLocatInfo2.AreaNo == "A03")//鍗婃垚鍝佸尯
+                        {
+                            sd3.PalletStatus = "2";
+                        }
+                        else if (endLocatInfo2.AreaNo == "A04")//鑴忔《鍖�
+                        {
+                            sd3.PalletStatus = "3";
+                        }
+
+                        //淇敼搴撳瓨鏄庣粏
+                        Db.Updateable(sd3).ExecuteCommand();
+
+                        startLocatInfo2.Status = "0";//绌哄偍浣�
+                        //淇敼璧峰鍌ㄤ綅鐘舵��
+                        Db.Updateable(startLocatInfo2).ExecuteCommand();
+
+                        endLocatInfo2.Status = "1";//鏈夌墿鍝�
+                        //淇敼鐩爣鍌ㄤ綅鐘舵��
+                        Db.Updateable(endLocatInfo2).ExecuteCommand();
+                        break;    
+                    #endregion
+                }
+                taskInfo.Status = "2";//鎵ц瀹屾垚
+                //淇敼浠诲姟鐘舵��
+                Db.Updateable(taskInfo).ExecuteCommand();
+
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
+
+                resultModel.Success = 0;
+                resultModel.Message = "鎴愬姛";
+                return resultModel;
+            }
+            catch (Exception ex)
+            {
+                //鍥炴粴浜嬪姟
+                Db.RollbackTran();
+                throw ex;
+            }
+        }
+
+        /// <summary>
+        /// 涓嬪彂鍑哄簱鍗�
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public SoResInfo CreateSoWork(SoInfo model)
+        {
+            try
+            {
+                if (string.IsNullOrEmpty(model.OrderCode))
+                {
+                    throw new Exception("涓婃父绯荤粺鍗曞彿涓嶅彲涓虹┖!");
+                }
+                if (model.SoDetails.Count <= 0)
+                {
+                    throw new Exception("鍑哄簱鍗曟槑缁嗕笉鍙负绌�!");
+                }
+                //杩斿洖淇℃伅
+                SoResInfo result = new SoResInfo();
+
+                var skuNos = model.SoDetails.Select(a => a.SkuNo).Distinct().ToList();
+                //鑾峰彇搴撳瓨鏄庣粏
+                var stockDetailList = Db.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0 && s.InspectStatus == "1").ToList();
+                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();
+
+                var list = new List<BllExportNoticeDetail>();
+                //娣诲姞鍑哄簱鍗�
+                foreach (var d in model.SoDetails)
+                {
+                    if (d.Qty < 1)
+                    {
+                        throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0");
+                    }
+                    if (string.IsNullOrWhiteSpace(d.LotNo))
+                    {
+                        throw new Exception("鎵规涓嶅彲涓虹┖!");
+                    }
+                    //搴撳瓨鏄庣粏
+                    List<DataStockDetail> stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).OrderByDescending(o => o.CompleteTime).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 noticeDetail = new BllExportNoticeDetail()
+                    {
+                        SONo = billNo,
+                        SkuNo = d.SkuNo,
+                        SkuName = d.SkuName,
+                        Standard = "",
+                        LotNo = d.LotNo,
+                        LotText = "",
+                        Qty = d.Qty,
+                        AllotQty = 0,
+                        FactQty = 0,
+                        CompleteQty = 0,
+                        PackagNo = "",
+                        Price = 0,
+                        Money = 0,
+                        IsBale = "",
+                        IsBelt = "",
+                        SupplierLot = "",
+                        IsWave = "0",
+                        WaveNo = "",
+                        IsIssueLotNo = "1",
+
+                        OrderDetailCode = d.OrderDetailCode,
+
+                        CreateUser = 0,
+                    };
+                    list.Add(noticeDetail);
+                    //閿佸畾搴撳瓨鏁伴噺
+                    decimal lockQty = 0;
+                    foreach (var item in stockDetails)
+                    {
+                        if (lockQty >= d.Qty)
+                        {
+                            break;
+                        }
+                        if (item.Qty - item.LockQty - item.FrozenQty <= d.Qty - lockQty)
+                        {
+                            item.LockQty += item.Qty - item.LockQty - item.FrozenQty;
+                            lockQty += (decimal)(item.Qty - item.LockQty - item.FrozenQty);
+                        }
+                        else
+                        {
+                            item.LockQty += d.Qty - lockQty;
+                            lockQty += d.Qty - lockQty;
+                        }
+                        Db.Updateable(item).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);
+                }
+                //鍑哄簱鍗曚俊鎭�
+                var notice = new BllExportNotice()
+                {
+                    SONo = billNo,
+                    OrderCode = model.OrderCode,
+                    Type = model.SoType,
+                    Status = "0",
+                    Origin = "WMS",
+                    CustomerNo = model.Customer,
+                    CustomerName = "",
+                    LogisticsId = null,
+                    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);
+            }
+        }
     }
 }

--
Gitblit v1.8.0