From 83a7b2db0150d30576461055707367e8189ebc6e Mon Sep 17 00:00:00 2001
From: 海波 张 <2956280567@qq.com>
Date: 星期三, 25 六月 2025 17:29:08 +0800
Subject: [PATCH] 交互修改

---
 core/Monitor.cs |  369 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 366 insertions(+), 3 deletions(-)

diff --git a/core/Monitor.cs b/core/Monitor.cs
index 0cf5ad4..5480a47 100644
--- a/core/Monitor.cs
+++ b/core/Monitor.cs
@@ -1,12 +1,15 @@
-锘縰sing HH.WCS.ZhongCeJinTan.api;
+锘縰sing HH.WCS.Mobox3.ZhongCeJinTan.dispatch;
+using HH.WCS.ZhongCeJinTan.api;
 using HH.WCS.ZhongCeJinTan.dispatch;
 using HH.WCS.ZhongCeJinTan.process;
 using HH.WCS.ZhongCeJinTan.util;
 using HH.WCS.ZhongCeJinTan.wms;
 using Newtonsoft.Json;
+using SqlSugar;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
@@ -51,14 +54,22 @@
                 var tasks = db.Queryable<WMSTask>().Where(p => p.S_OP_CODE == operation.S_CODE).ToList();
 
 
+
+                if (tasks.Count > 1 && tasks.Count(p => p.N_B_STATE == 3) == 1)
+                {
+                    operation.S_B_STATE = "瀹屾垚涓�崐";
+                    operation.T_MODIFY = DateTime.Now;
+                    db.Updateable(operation).UpdateColumns(it => new { it.S_B_STATE, it.T_MODIFY }).ExecuteCommand();
+                }
+
                 if (tasks.Count == tasks.Count(p => p.N_B_STATE == 3))
                 {
                     operation.N_B_STATE = 2;
                     operation.S_B_STATE = "瀹屾垚";
                     operation.T_MODIFY = DateTime.Now;
                     operation.T_END_TIME = DateTime.Now;
-                    db.Updateable(operation).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE,it.T_MODIFY,it.T_END_TIME }).ExecuteCommand();
-                  
+                    db.Updateable(operation).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_MODIFY, it.T_END_TIME }).ExecuteCommand();
+
                 }
                 else if (tasks.Count(p => p.N_B_STATE == 5) > 0)
                 {
@@ -72,8 +83,360 @@
             }
         }
 
+        //鍑哄簱浠诲姟 鍔ㄤ綔鐮佹湁1鏃� 姣忛殧涓�鏃堕棿鎻愰珮涓�浼樺厛绾�+
+        public static void UpdateOutTaskPriority()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            var st = Settings.outMinutePriority;
+            var list = TaskHelper.GetWcsTaskListByState("鎵ц", "agv", "鍑哄簱");
+
+            foreach (var item in list)
+            {
+                var action = db.Queryable<WmsTaskAction>().Where(p => p.S_TASK_CODE==item.S_CODE && p.N_ACTION_CODE == 1).First();
+                if (action != null)
+                {
+                    var action3 = db.Queryable<WmsTaskAction>().Where(p => p.S_TASK_CODE == item.S_CODE && p.N_ACTION_CODE == 3).First();
+                    if (action3 == null)
+                    {
+                        if (DateTime.Now.Subtract(action.T_CREATE).TotalMinutes > st.Minute)
+                        {
+                            item.N_PRIORITY += st.Priority;
+                            db.Updateable(item).UpdateColumns(it => new { it.N_PRIORITY }).ExecuteCommand();
+                            NDCApi.ChangeOrderPri(item.S_CODE, item.N_PRIORITY);
+                        }
+                    }
+                }
+            }
+            int sp = st.Minute * 60000;
+            Thread.Sleep(sp);
+        }
+
+        private static object locker1 = new object();
+
+
+        /// <summary>
+        /// agv鍔ㄤ綔缂撳瓨澶勭悊
+        /// </summary>
+        /// <param name="model"></param>
+        public static void agvActionManage()
+        {
+
+            var db = new SqlHelper<object>().GetInstance();
+
+
+            try
+            {
+                lock (locker1)
+                {
+                    var operations = db.Queryable<AgvActionState>().OrderBy(a => a.T_CREATE).ToList().Take(50);
+                    foreach (var model in operations)
+                    {
+                        var wmsTask = TaskHelper.GetTask(model.task_no);
+                        LogHelper.Info("agvActionManage--浠诲姟淇℃伅" + JsonConvert.SerializeObject(wmsTask), "agv鍔ㄤ綔缂撳瓨");
+                        LogHelper.Info("agvActionManage--鍙傛暟淇℃伅" + JsonConvert.SerializeObject(model), "agv鍔ㄤ綔缂撳瓨");
+                        if (wmsTask != null)
+                        {
+                            if (model.state <= 7)
+                            {
+                                //鏈変换鍔″彿璇锋眰
+                                switch (model.state)
+                                {
+                                    case 1:
+                                        TaskHelper.Begin(wmsTask, model.forklift_no);
+                                        //鑳庨潰浜や簰
+                                        TaskHelper.TmSafety(wmsTask);
+                                        break;
+                                    case 3:
+                                        TaskHelper.UpdateStatus(wmsTask, "寮�鍙栬揣");
+                                        break;
+                                    case 4:
+                                        TaskHelper.UpdateStatus(wmsTask, "鍙栬揣瀹屾垚");
+                                        LocationHelper.UnLockLoc(wmsTask.S_START_LOC);
+                                        TaskProcess.OperateStatus(wmsTask, 4);
+                                        break;
+                                    case 5:
+                                        TaskHelper.UpdateStatus(wmsTask, "寮�鍗歌揣");
+                                        break;
+                                    case 6:
+                                        TaskHelper.UpdateStatus(wmsTask, "鍗歌揣瀹屾垚");
+                                        LocationHelper.UnLockLoc(wmsTask.S_END_LOC);
+                                        TaskProcess.OperateStatus(wmsTask, 6);
+
+                                        //濡傛灉鏄簩娈典换鍔″垯涓嬪彂绔嬪簱浠诲姟
+                                        var wcsTask = TaskHelper.GetTaskByState("鏈墽琛�, "wcs", wmsTask.S_OP_CODE, "鍏ュ簱");
+                                        if (wcsTask != null)
+                                        {
+                                            LocationHelper.LockLoc(wcsTask.S_START_LOC, "鍑哄簱閿�, 2);
+                                            WcsTask.WcsTaskEntity(wcsTask);
+                                        }
+                                        break;
+                                    case 2:
+                                        //绌烘墭鍑烘垨鑰呮弧鎵樺嚭浠诲姟瀹屾垚鍒ゆ柇鏄惁瑕佹彁楂樺叆搴撲紭鍏堢骇
+
+                                        LogHelper.Info($"浠诲姟{wmsTask.S_CODE}瀹屾垚锛屽垽鏂叆搴撲紭鍏堢骇", "鍏ュ簱浼樺厛绾�);
+                                        TaskProcess.inPri(wmsTask);
+                                        TaskHelper.End(wmsTask);
+                                        break;
+                                    case 7:
+
+                                        var wcsTask1 = TaskHelper.GetTaskByWorkNo(wmsTask.S_OP_CODE, "wcs");
+                                        if (wcsTask1 != null)
+                                        {
+                                            //agv鎵ц閫氱煡 wcs鍙栨秷
+                                            WcsTask.WcsCallback(wmsTask, model.state, model.forklift_no);
+                                            if (!TaskHelper.CheckActionRecordExist(wcsTask1.S_CODE, "6"))
+                                            {
+                                                TaskHelper.Fail(wcsTask1);
+                                                TaskProcess.OperateStatus(wcsTask1, 7);
+                                            }
+                                        }
+
+                                        TaskHelper.Fail(wmsTask);
+                                        TaskProcess.OperateStatus(wmsTask, 7);
+                                        //鍏ュ簱鎴栬�鍥炲簱浠诲姟鍙栨秷鍒犻櫎鎵樼洏鐗╂枡
+                                        if (wmsTask.S_TYPE.Contains("鍏ュ簱") || wmsTask.S_TYPE.Contains("鍥炲簱"))
+                                        {
+                                            ContainerHelper.delCntr(wmsTask.S_CNTR_CODE);
+                                            ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE);
+                                        }
+
+                                        //鍑哄簱鍙栨秷鍒ゆ柇鎺ラ┏浣嶆槸鍚︽湁璐э紝鏈夎揣闇�瑙g粦
+                                        if (!WcsTask.WcsCvstate(wmsTask))
+                                        {
+                                            LogHelper.Info($"Wcs绔嬪簱鎺ラ┏浣嶆棤璐э紝瑙g粦璐т綅:{wmsTask.S_START_LOC}", "绔嬪簱");
+                                            TaskProcess.OperateStatus(wmsTask, 4);
+                                            ContainerHelper.delCntr(wmsTask.S_CNTR_CODE);
+                                            ContainerHelper.delCntrItem(wmsTask.S_CNTR_CODE);
+                                        }
+                                        break;
+
+                                }
+                                TaskHelper.AddActionRecord(wmsTask.S_CODE, model.state, model.forklift_no, model.ext_data);
+                            }
+                            else
+                            {
+                                //瀹夊叏璇锋眰绛�+                                TaskProcess.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data);
+                            }
+                            db.Deleteable(model).ExecuteCommand();
+                        }
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info("agvActionManage--寮傚父淇℃伅" + ex.Message, "agv鍔ㄤ綔缂撳瓨");
+                throw;
+            }
+
+        }
+
+
+          
+            
 
 
 
+
+        private static object locker = new object();
+        /// <summary>
+        /// 鑷姩鍑哄簱绌烘墭
+        /// </summary>
+        public static void ktAuto() {
+            var db = new SqlHelper<object>().GetInstance();
+
+            try
+            {
+                lock (locker)
+                {
+                    var ktTaskList = db.Queryable<MesKtTask>().Where(a => a.Status == "N").OrderBy(b => b.CreateDate).ToList();
+                    foreach (var kt in ktTaskList)
+                    {
+                        LogHelper.Info($"绌烘墭鍑哄簱缂撳瓨淇℃伅" + JsonConvert.SerializeObject(kt), "绌烘墭鍑哄簱");
+
+                        var tm = DateTime.Now.Subtract(kt.CreateDate).TotalMinutes;
+                        LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱缂撳瓨鏃堕棿闂撮殧淇℃伅锛歿tm}", "绌烘墭鍑哄簱");
+                        if (tm < 1)
+                        {
+                            continue;
+                        }
+
+                        var workFlow = TaskHelper.selectWorkFlowByType(kt.BUSI_TYPE, kt.TOOLS_TPYE);
+
+
+                        if (workFlow == null)
+                        {
+                            LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛屾祦绋嬬紪鍙�{kt.BUSI_TYPE},宸ヨ绫诲瀷{kt.TOOLS_TPYE},娌℃壘鍒板搴斾綔涓氭祦绋�, "绌烘墭鍑哄簱");
+                            continue;
+                        }
+                        else
+                        {
+                            LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浣滀笟娴佺▼淇℃伅" + JsonConvert.SerializeObject(workFlow), "绌烘墭鍑哄簱");
+                        }
+
+
+
+                        //鍑哄簱浠诲姟
+
+                        //鎺ラ┏浣�+                        var connection = "";
+
+                        //鎺ラ┏浣嶅簱鍖�+                        var connectionArea = "";
+
+
+                        //鏌ユ壘缁欏畾缁堢偣
+                        var end = LocationHelper.GetLoc(kt.Location_To);
+                        LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂缁堢偣淇℃伅" + JsonConvert.SerializeObject(end), "绌烘墭鍑哄簱");
+
+
+                        if (end == null)
+                        {
+                            LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛岀粓鐐�{kt.Location_To},娌℃壘鍒�, "绌烘墭鍑哄簱");
+                            continue;
+                        }
+
+
+
+
+
+                            //鏌ユ壘璧风偣
+                            List<Location> strrtList;
+
+                        Location start = null;
+
+
+                        if (!string.IsNullOrEmpty(workFlow.ZONECODE))
+                        {
+                            strrtList = LocationHelper.GetZoneLoc(workFlow.ZONECODE);
+                        }
+                        else
+                        {
+                            strrtList = LocationHelper.GetAllLocList2(workFlow.STARTAREA);
+                        }
+
+
+
+
+                        //瀵绘壘绔嬪簱鍖虹┖鎵�+                        start = LocationHelper.FindStartcolByLoclistAndcntr(strrtList, workFlow.STARTAREA);
+
+
+                        LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂璧风偣淇℃伅" + JsonConvert.SerializeObject(start), "绌烘墭鍑哄簱");
+
+                        if (start == null )
+                        {
+                            LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛岃捣鐐瑰簱鍖簕workFlow.STARTAREA},娌℃壘鍒拌捣鐐�, "绌烘墭鍑哄簱");
+                            continue;
+                        }
+                        if (start.S_LOCK_STATE!="鏃�)
+                        {
+                            LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛岃捣鐐箋start.S_CODE}鏈夐攣", "绌烘墭鍑哄簱");
+                            continue;
+                        }
+
+
+
+                        //鑾峰彇鎵樼洏鐮�+                        var cntrCode = LocationHelper.GetLocCntrCode(start.S_CODE);
+
+                        if (workFlow.SENDWCS == "Y")
+                        {
+
+                            //姝e紡浠g爜锛岃皟鐢ㄦ帴鍙e鎵惧彲鐢ㄦ帴椹充綅
+                            var connectionList = LocationHelper.GetConnectionList(workFlow.CONNECTION);
+
+                            var balanceConnectionList = LocationHelper.GetBalanceConnectionList(connectionList);
+                            foreach (var item in balanceConnectionList)
+                            {
+                                if (item.loc.N_CURRENT_NUM < 2)
+                                {
+                                    connection = item.loc.S_CODE;
+                                    connectionArea = item.loc.S_AREA_Name;
+                                    LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂瀵绘壘鍒板彲鐢ㄦ帴椹充綅{connection}", "绌烘墭鍑哄簱");
+                                    break;
+                                }
+                            }
+
+                            if (connection == "")
+                            {
+                                LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂瀵绘壘鎺ラ┏浣嶅け璐�, "Mes浠荤┖鎵樺嚭搴撳姟涓嬪彂");
+                                continue;
+                            }
+                        }
+
+
+                        var startTask = TaskHelper.GetTaskByStartLoc(start.S_CODE);
+                        if (startTask != null)
+                        {
+                            LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂澶辫触锛岃捣鐐箋start.S_CODE}鏈夋墽琛屼腑浠诲姟{startTask.S_CODE}", "绌烘墭鍑哄簱");
+                            continue;
+                        }
+
+
+
+                        LocationHelper.LockLoc(start.S_CODE, "鍑哄簱閿�, 2);
+                      
+
+
+                        //璧风偣缁堢偣鏌ユ壘鎴愬姛锛屽垱寤轰綔涓�+
+                        var taskType = int.Parse(workFlow.FLOWCODE);
+
+                        var operation = new WmsWork
+                        {
+                            // 浣滀笟鍙�+                            S_CODE = kt.task_no,
+                            // 浣滀笟绫诲瀷
+                            N_TYPE = taskType,
+                            // 浣滀笟绫诲瀷
+                            S_TYPE = workFlow.FLOWNAME,
+                            // 璧风偣璐т綅
+                            S_START_LOC = start.S_CODE,
+                            // 璧风偣搴撳尯缂栫爜
+                            S_START_AREA = start.S_AREA_CODE,
+                            //鎺ラ┏浣�+                            CONNECTION = connection,
+                            // 缁堢偣璐т綅
+                            S_END_LOC = end.S_CODE,
+                            // 缁堢偣搴撳尯缂栫爜
+                            S_END_AREA = end.S_AREA_CODE,
+                            // 瀹瑰櫒缂栫爜
+                            S_CNTR_CODE = cntrCode,
+                            // 浣滀笟瀹氫箟鍚嶇О
+                            S_OP_DEF_NAME = workFlow.FLOWNAME,
+                            //浼樺厛绾�+                            N_PRIORITY = kt.Priority,
+                            //宸ヨ绫诲瀷
+                            TOOLSTYPE = kt.TOOLS_TPYE,
+                            //璧风偣搴撳尯鍚嶇О
+                            S_START_AREA_NAME = start.S_AREA_Name,
+                            //璧风偣搴撳尯鍚嶇О
+                            S_END_AREA_NAME = end.S_AREA_Name,
+                            //璧风偣搴撳尯鍚嶇О
+                            CONNECTION_AREA = connectionArea
+                        };
+
+                        //鍒涘缓浣滀笟
+                        if (WMSHelper.CreateWmsWork(operation) && TaskHelper.ChangeMesKtTask(kt))
+                        {
+
+                            LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浣滀笟鍒涘缓鎴愬姛{operation.S_CODE}", "绌烘墭鍑哄簱");
+                        }
+                        else
+                        {
+                            LogHelper.Info($"绌烘墭{kt.task_no}鍑哄簱浠诲姟涓嬪彂鍒涘缓浣滀笟澶辫触", "绌烘墭鍑哄簱");
+                            continue;
+                        }
+
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"绌烘墭鍑哄簱寮傚父淇℃伅" + ex.Message, "绌烘墭鍑哄簱");
+            }
+        }
     }
 }

--
Gitblit v1.9.1