From 12341214acb7f387413e26057e22f3ca593b2f04 Mon Sep 17 00:00:00 2001
From: zhaowc <526854230@qq.com>
Date: 星期二, 25 六月 2024 08:02:31 +0800
Subject: [PATCH] 接口重新开发,添加创建生成任务类

---
 Wms/WMS.BLL/BllTransServer/RcsServer.cs |  254 +++++++++++++++++++++++++++++++++++---------------
 1 files changed, 179 insertions(+), 75 deletions(-)

diff --git a/Wms/WMS.BLL/BllTransServer/RcsServer.cs b/Wms/WMS.BLL/BllTransServer/RcsServer.cs
index 930861c..67dac3a 100644
--- a/Wms/WMS.BLL/BllTransServer/RcsServer.cs
+++ b/Wms/WMS.BLL/BllTransServer/RcsServer.cs
@@ -6,9 +6,11 @@
 using System.Linq;
 using System.Text;
 using Utility.Tools;
+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;
 using static Model.InterFaceModel.RCSModel;
@@ -24,99 +26,134 @@
         /// <param name="warehouseno">搴撳尯</param>
         /// <param name="type">鍙枡绫诲瀷</param>
         /// <returns></returns>
-        public void GetPalletNo(string warehouseno, string type, out string palletno, out string locatno)
+        public void GetPalletNo(Pallnetmsg pallnetmsg)
         {
-            var sql = "select LocatNo,palletno from SysStorageLocat where status = '1'";
-            SysStorageLocat pallet = new SysStorageLocat();
+            DataStockDetail pallet = new DataStockDetail();
+            SysStorageLocat locat = new SysStorageLocat();
             try
             {
-                switch (type)
+                var house = "W01";//鍙《浣嶇疆锛屽悗缁牴鎹綅缃叧鑱旀垨瀹氫箟锛屾潵鍒ゆ柇鍙《浣嶇疆鎵�灞炶溅闂�
+                var url = "";//鍥炰紶MES鐨勬帴鍙e湴鍧�
+                var noticeno = "";
+                var sql = "select PalletNo,LocatNo from DataStockDetail where Status = '0'";
+                switch (pallnetmsg.Type)
                 {
                     case "0"://鍙噣妗�
-                        sql += $"and WareHouseNo = 'A01' and WareHouseNo = '{warehouseno}' order by updatetime desc";
-                        pallet = Db.Ado.SqlQuery<SysStorageLocat>(sql).FirstOrDefault();
-                        if (pallet == null)
+                        List<DataStockDetail> jtpallet = new List<DataStockDetail>();
+                        sql += $"and  WareHouseNo = '{house}' and AreaNo like '%01' order by CreateTime desc";
+                        jtpallet = Db.Ado.SqlQuery<DataStockDetail>(sql).ToList();
+                        if (jtpallet.Count == 0)
                         {
                             throw new Exception("鏆傛棤鍑�妗跺彲鍒嗛厤");
                         }
-                        break;
-                    case "3"://鍙剰妗�
-                        sql += $"and WareHouseNo = 'A04' and WareHouseNo = '{warehouseno}' order by updatetime desc";
-                        pallet = Db.Ado.SqlQuery<SysStorageLocat>(sql).FirstOrDefault();
-                        if (pallet == null)
+                        //閬嶅巻搴撳瓨鍑�妗讹紝杩斿洖MES楠岃瘉
+                        foreach (var item in jtpallet)
                         {
-                            throw new Exception("鏆傛棤鑴忔《鍙垎閰�");
+                            string jsonReq = JsonConvert.SerializeObject(item.PalletNo);
+                            var response = HttpHelper.DoPost(url, jsonReq, "鍥炰紶MES鍑�妗剁紪鍙�", "RCS").ToString();
+                            var obj = JsonConvert.DeserializeObject<ReMes>(response);//瑙f瀽杩斿洖鏁版嵁
+                            if (obj.Success == "0")
+                            {
+                                if (obj.Result != "0")//鍙敤锛岀敓鎴愬皬杞︽媺鍑�妗朵换鍔�
+                                {
+                                    //鏌ユ壘鏄惁鏈夌┖浣欒剰妗朵綅
+                                    sql = $"select LocatNo from SysStorageLocat where AreaNo like '%04' and WareHouseNo = wareno and Status = 0";
+                                    locat = Db.Ado.SqlQuery<SysStorageLocat>(sql).FirstOrDefault();
+                                    if (locat == null)
+                                    {
+                                        Db.Ado.BeginTran();
+                                        //鑴忔《鍖烘棤绌轰綑搴撲綅锛屽垯閿佸畾姝ゅ噣妗跺簱瀛�,骞堕噸鏂伴亶鍘�
+                                        sql = $"UPDATE DataStockDetail Set Status = '5' Where locat ='{locat.LocatNo}'";
+                                        Db.Ado.ExecuteCommand(sql);
+                                        Db.Ado.CommitTran();
+                                        break;
+                                    }
+                                    //鐢熸垚璋冨害灏忚溅鍑�妗跺幓鑴忔《鍖轰换鍔�
+                                    var ztask = new TaskDetial
+                                    {
+                                        Startport = item.LocatNo,
+                                        Endport = locat.LocatNo,
+                                        Pallno = pallnetmsg.Palletno,
+                                        Type = "4",
+                                        Crtype = "0",
+                                        Noticedetailno = int.Parse(noticeno),
+                                    };
+                                    CreateLotTask(ztask);
+                                    return;
+                                }
+                            }
+                            else
+                            {
+                                throw new Exception("鍥炰紶MES鍑�妗剁紪鍙峰け璐ワ紒");
+                            }
                         }
                         break;
-                }
-                palletno = pallet.PalletNo;
-                locatno = pallet.LocatNo;
-            }
-            catch (Exception)
-            {
-
-                throw;
-            }
-        }
-
-        /// <summary>
-        /// RCS鍙《(娣锋枡妗跺拰涓嬫枡妗�)
-        /// </summary>
-        /// <param name="warehouseno">搴撳尯</param>
-        /// <param name="type">鍙枡绫诲瀷</param>
-        /// <param name="lotno">鍙枡鎵规</param>
-        /// <returns></returns>
-        public void GetPalletNo(string warehouseno, string type, string lotno, out string palletno, out string locatno)
-        {
-            var sql = "";
-            var pallet = "";
-            DataStockDetail SoMes = new DataStockDetail();
-            try
-            {
-                switch (type)
-                {
                     case "1"://鍙枡妗讹紙娣锋枡锛�
+                        //鍒ゆ柇鏄惁鏈夋壒娆″彿
+                        if (string.IsNullOrWhiteSpace(pallnetmsg.LotNo))
+                        {
+                            throw new Exception("鎵规鍙蜂负绌猴紒");
+                        }
                         BllArrivalNoticeDetail ArriveMes = new BllArrivalNoticeDetail();
                         //鍒ゆ柇璇ユ壒娆℃槸鍚︽湁瀵瑰簲鍏ュ簱鍗�
-                        sql += $"select * from BllArrivalNoticeDetail where LotNo =  '{lotno}' order by CreateTime desc";
+                        sql = $"select * from BllArrivalNoticeDetail where LotNo =  '{pallnetmsg.LotNo}' order by CreateTime desc";
                         ArriveMes = Db.Ado.SqlQuery<BllArrivalNoticeDetail>(sql).FirstOrDefault();
                         if (ArriveMes == null)
                         {
                             throw new Exception("璇ユ壒娆℃病鏈夊搴旂殑鍏ュ簱鍗�");
                         }
                         //鏌ユ壘搴撳瓨涓槸鍚︽湁鍙敤鐨勬鎵规鐨勬贩鏂欐《
-                        sql = $"select LocatNo,palletno from DataStockDetail " +
-                            $"left join SysStorageLocat b on a.LocatNo = b.LocatNo " +
-                            $"where a.LotNo =  '{lotno}'and a.WareHouseNo = '{warehouseno}' and b.status = '1' " +
+                        sql += $"where a.LotNo =  '{pallnetmsg.LotNo}'and AreaNo like '%02' and a.WareHouseNo = '{house}' and b.status = '0' " +
                             $"order by CompleteTime desc";
-                        SoMes = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
+                        pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
                         if (pallet == null)
                         {
                             throw new Exception("鏆傛棤娣锋枡妗跺彲鍒嗛厤");
                         }
+
                         break;
                     case "2"://鍙枡妗讹紙涓嬫枡锛�
+                        //鍒ゆ柇鏄惁鏈夋壒娆″彿
+                        if (string.IsNullOrWhiteSpace(pallnetmsg.LotNo))
+                        {
+                            throw new Exception("鎵规鍙蜂负绌猴紒");
+                        }
                         //鏌ユ壘搴撳瓨涓槸鍚︽湁姝ゆ壒娆$殑涓嬫枡妗�
-                        sql = $"select LocatNo,palletno from DataStockDetail" +
-                            $"left join SysStorageLocat b on a.LocatNo = b.LocatNo " +
-                            $"where a.LotNo =  '{lotno}'and a.WareHouseNo = '{warehouseno}' and b.status = '1'" +
-                            $" order by CompleteTime desc";
-                        SoMes = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
+                        sql += $"where a.LotNo =  '{pallnetmsg.LotNo}'and AreaNo like '%03' and a.WareHouseNo = '{house}' and b.status = '0' " +
+                            $"order by CompleteTime desc";
+                        pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
                         if (pallet == null)
                         {
                             throw new Exception("鏆傛棤涓嬫枡妗跺彲鍒嗛厤");
                         }
 
                         break;
+                    case "3"://鍙剰妗�
+                        sql += $"and WareHouseNo = '{house}' and AreaNo like '%04' order by CreateTime desc";
+                        pallet = Db.Ado.SqlQuery<DataStockDetail>(sql).FirstOrDefault();
+                        if (pallet == null)
+                        {
+                            throw new Exception("鏆傛棤鑴忔《鍙垎閰�");
+                        }
+
+                        break;
                 }
-                palletno = SoMes.PalletNo;
-                locatno = SoMes.LocatNo;
-
+                //涓嬪彂灏忚溅浠诲姟
+                var task = new TaskDetial
+                {
+                    Startport = pallnetmsg.Location,
+                    Endport = pallet.LocatNo,
+                    Pallno = pallnetmsg.Palletno,
+                    Type = pallnetmsg.Type,
+                    Crtype = "1",
+                    Noticedetailno = int.Parse(noticeno),
+                };
+                CreateLotTask(task);
             }
-            catch (Exception)
+            catch (Exception ex)
             {
-
-                throw;
+                Db.Ado.RollbackTran();
+                throw ex;
             }
         }
 
@@ -125,16 +162,18 @@
         /// </summary>
         /// <param name="PalletNo"></param>
         /// <returns></returns>
-        public void ApplyLocatNo(string palletno, string type, out string locatno)
+        public void ApplyLocatNo(Pallnetmsg pallnetmsg)
         {
             var sql = $"select LocatNo from SysStorageLocat where status = '0'";
+            var house = "W01";//鈥︹�﹀彨妗朵綅缃紝鍚庣画鏍规嵁浣嶇疆鍏宠仈鎴栧畾涔夛紝鏉ュ垽鏂彨妗朵綅缃墍灞炶溅闂�
+            var noticeno = "";
             SysStorageLocat loction = new SysStorageLocat();
             try
             {
-                switch (type)
+                switch (pallnetmsg.Type)
                 {
                     case "0"://鍑�妗剁敵璇峰偍浣�
-                        sql += $"and WareHouseNo = 'A01'";
+                        sql += $"and AreaNo like '%01' and WareHouseNo = {house}";
                         loction = Db.Ado.SqlQuery<SysStorageLocat>(sql).OrderByDescending(a => a.CreateTime).FirstOrDefault();
                         if (loction == null)
                         {
@@ -142,7 +181,12 @@
                         }
                         break;
                     case "1"://娣锋枡妗剁敵璇峰偍浣�
-                        sql += $"and WareHouseNo = 'A02'";
+                        //鍒ゆ柇鏄惁鏈夋壒娆″彿
+                        if (string.IsNullOrWhiteSpace(pallnetmsg.LotNo))
+                        {
+                            throw new Exception("鎵规鍙蜂负绌猴紒");
+                        }
+                        sql += $"and AreaNo  like '%02' and WareHouseNo = {house}";
                         loction = Db.Ado.SqlQuery<SysStorageLocat>(sql).OrderByDescending(a => a.CreateTime).FirstOrDefault();
                         if (loction == null)
                         {
@@ -150,7 +194,12 @@
                         }
                         break;
                     case "2"://鍗婃垚鍝佹《鐢宠鍌ㄤ綅
-                        sql += $"and WareHouseNo = 'A03'";
+                        //鍒ゆ柇鏄惁鏈夋壒娆″彿
+                        if (string.IsNullOrWhiteSpace(pallnetmsg.LotNo))
+                        {
+                            throw new Exception("鎵规鍙蜂负绌猴紒");
+                        }
+                        sql += $"and AreaNo like '%03' and WareHouseNo = {house}";
                         loction = Db.Ado.SqlQuery<SysStorageLocat>(sql).OrderByDescending(a => a.CreateTime).FirstOrDefault();
                         if (loction == null)
                         {
@@ -158,7 +207,7 @@
                         }
                         break;
                     case "3"://鑴忔《鐢宠鍌ㄤ綅
-                        sql += $"and WareHouseNo = 'A04'";
+                        sql += $"and AreaNo like '%04' and WareHouseNo = {house}";
                         loction = Db.Ado.SqlQuery<SysStorageLocat>(sql).OrderByDescending(a => a.CreateTime).FirstOrDefault();
                         if (loction == null)
                         {
@@ -166,7 +215,16 @@
                         }
                         break;
                 }
-                locatno = loction.PalletNo;
+                var task = new TaskDetial
+                {
+                    Startport = pallnetmsg.Location,
+                    Endport = loction.LocatNo,
+                    Pallno = pallnetmsg.Palletno,
+                    Type = pallnetmsg.Type,
+                    Crtype = "1",
+                    Noticedetailno = int.Parse(noticeno),
+                };
+                CreateLotTask(task);
             }
             catch (Exception)
             {
@@ -186,10 +244,11 @@
         /// <param name="agvCode"></param>
         /// <param name="url">RCS鍦板潃</param>
         /// <returns></returns>
-        public string genAgvSchedulingTask(AgvTask agv,string url, ref genAgvSchedulingTaskRep cbrep)
+        public genAgvSchedulingTaskRep genAgvSchedulingTask(AgvTask agv,string url)
         {
             try
             {
+                genAgvSchedulingTaskRep cbrep = new genAgvSchedulingTaskRep();
                 PositionCodePath pcd1 = new PositionCodePath()
                 {
                     positionCode = agv.startPos.ToString(),
@@ -215,14 +274,10 @@
                     //ctnrCode="2",
 
                 };
-                if (agv.startPos == "50")
-                {
-                    cbreq.ctnrTyp = "4";
-                }
                 cbrep = genAgvSchedulingTask(cbreq,url);
                 
 
-                return cbrep.code;
+                return cbrep;
             }
             catch (Exception ex) { throw ex; }
         }
@@ -266,17 +321,66 @@
         /// </summary>
         /// <param name="req"></param>
         /// <returns></returns>
-        public void CreateLotTask(string startport,string endport,string type,string tasktype)
+        public void CreateLotTask(TaskDetial taskDetial)
         {
             try
             {
-
-
+                var na = taskDetial.Crtype == "0"?"鍏ュ簱":"鍑哄簱";
+                var sql = "";
+                //寮�鍚簨鍔�
+                Db.BeginTran();
+                //鍒ゆ柇浠诲姟鏄惁涓烘柊浠诲姟
+                if (string.IsNullOrWhiteSpace(taskDetial.Taskno))
+                {
+                    taskDetial.Taskno = new Common().GetMaxNo("T");
+                
+                    var logTaskEntry = new LogTask    
+                    {
+                        TaskNo = taskDetial.Taskno,
+                        Sender = "WMS",
+                        Receiver = "RCS",
+                        //IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
+                        SendDate = DateTime.Now,  //鍙戦�佹椂闂�
+                        //BackDate = DateTime.Now,  //杩斿洖鏃堕棿
+                        StartLocat = taskDetial.Startport,//璧峰浣嶇疆
+                        EndLocat = taskDetial.Endport,//鐩爣浣嶇疆
+                        PalletNo = taskDetial.Pallno,//鎵樼洏鐮�
+                        IsSend = 1,//鏄惁鍙啀娆′笅鍙�
+                        IsCancel = 1,//鏄惁鍙彇娑�
+                        IsFinish = 1,//鏄惁鍙畬鎴�
+                        Type = taskDetial.Crtype,//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟  2 绉诲簱浠诲姟
+                        Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚
+                        NoticeDetailNo = int.Parse(taskDetial.Noticedetailno.ToString()),
+                        Msg = $"{taskDetial.Endport}鐨剓na}浠诲姟", //鍏抽敭淇℃伅
+                    };
+                    Db.Insertable(logTaskEntry).ExecuteCommand();
+                }
+                var Agv = new AgvTask
+                {
+                    taskCode = taskDetial.Taskno,
+                    taskType = taskDetial.Type,
+                    startPos = taskDetial.Startport,
+                    endPos = taskDetial.Endport,
+                    agvCode = "1",//鈥︹�﹂渶瑕佸拰AGV纭姝ゅ瓧娈靛��
+                };
+                //璇锋眰灏忚溅
+                genAgvSchedulingTaskRep chrep =genAgvSchedulingTask(Agv, "url");
+                if (chrep.code != "0")
+                {
+                    sql = $"UPDATE LogTask SET IsSuccess = '0' WHERE TaskNo = {taskDetial.Taskno}";
+                    Db.Ado.ExecuteCommand(sql);
+                    Db.CommitTran();
+                    throw new Exception("RCS浠诲姟涓嬪彂閿欒锛孯CS杩斿洖娑堟伅锛�"+chrep.message);
+                }
+                sql = $"UPDATE LogTask SET IsSuccess = 1,BackDate = {DateTime.Now},Status = '1' WHERE TaskNo = {taskDetial.Taskno}";
+                Db.Ado.ExecuteCommand(sql);
+                //鎻愪氦浜嬪姟
+                Db.CommitTran();
             }
-            catch (Exception)
+            catch (Exception ex)
             {
-
-                throw;
+                Db.RollbackTran();
+                throw ex;
             }
 
         }

--
Gitblit v1.8.0