From 6b9e8c7ff2eef9b69e37ee383e243497e68d1f3c Mon Sep 17 00:00:00 2001
From: Tjiny <Tjinyu23@163.com>
Date: 星期二, 24 六月 2025 13:40:34 +0800
Subject: [PATCH] 定时充电任务调度流程

---
 HH.WCS.Mobox3.RiDong/generalMethod/AdoSqlMethod.cs   |   13 ++
 HH.WCS.Mobox3.RiDong/Quartz/HelloQuartzJob.cs        |   50 ++++++++++
 HH.WCS.Mobox3.RiDong/Quartz/TaskCD.cs                |   17 +++
 HH.WCS.Mobox3.RiDong/generalMethod/PipeLineHelper.cs |    2 
 HH.WCS.Mobox3.RiDong/dto/ChargingSwitch.cs           |   16 +++
 HH.WCS.Mobox3.RiDong/dispatch/NDC.cs                 |   42 ++++++++
 HH.WCS.Mobox3.RiDong/Quartz/QuartzJobCreate.cs       |   39 +++++++
 HH.WCS.Mobox3.RiDong/generalMethod/TaskHelper.cs     |   26 +++++
 HH.WCS.Mobox3.RiDong/Program.cs                      |   15 ++
 HH.WCS.Mobox3.RiDong/models/ConveyorLinesInfo.cs     |   22 ++++
 10 files changed, 236 insertions(+), 6 deletions(-)

diff --git a/HH.WCS.Mobox3.RiDong/Program.cs b/HH.WCS.Mobox3.RiDong/Program.cs
index 13416e0..c4e366d 100644
--- a/HH.WCS.Mobox3.RiDong/Program.cs
+++ b/HH.WCS.Mobox3.RiDong/Program.cs
@@ -6,16 +6,21 @@
 using System.Threading.Tasks;
 using HH.WCS.Mobox3.RiDong.device;
 using HH.WCS.Mobox3.RiDong.generalMethod;
+using HH.WCS.Mobox3.RiDong.Quartz;
 using HH.WCS.Mobox3.RiDong.util;
 using Microsoft.Owin.Hosting;
+using Quartz;
+using Quartz.Impl;
 using Topshelf;
 
 namespace HH.WCS.Mobox3.RiDong
 {
     internal class Program
     {
-        static void Main(string[] args)
+        static async Task Main(string[] args)
         {
+            // await QuartzJobCreate.CreateJob();
+            
             Settings.Init();
             //1.0 寮�惎api
             Startup();
@@ -35,9 +40,8 @@
                 x.SetDescription("hh123");
                 x.SetDisplayName("hh123.wms");
                 x.SetServiceName("hh123.wms");
-
             });
-
+            
             var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode());
             Environment.ExitCode = exitCode;
         }
@@ -80,6 +84,7 @@
         /// </summary>
         public class  WorkThread
         {
+            
             public void Start()
             {
                 List<Task> tasks = new List<Task>
@@ -99,10 +104,12 @@
                     // 鍑哄簱agv浠诲姟鎺ㄩ�
                     GetTaskS(ThreadMenthod.DispatchFromAGV),
                     // 璇诲彇绾夸綋淇℃伅骞跺仛瀵瑰簲鐨勫鐞�-                    GetTask(ThreadMenthod.ReadConveyorlinesMessage)
+                    GetTask(ThreadMenthod.ReadConveyorlinesMessage),
                 };
                 Task.WaitAll(tasks.ToArray());
             }
+            
+            
 
             public void Stop()
             {
diff --git a/HH.WCS.Mobox3.RiDong/Quartz/HelloQuartzJob.cs b/HH.WCS.Mobox3.RiDong/Quartz/HelloQuartzJob.cs
new file mode 100644
index 0000000..ef6bbdd
--- /dev/null
+++ b/HH.WCS.Mobox3.RiDong/Quartz/HelloQuartzJob.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using HH.WCS.Mobox3.RiDong.dto;
+using HH.WCS.Mobox3.RiDong.generalMethod;
+using HH.WCS.Mobox3.RiDong.util;
+using Quartz;
+
+namespace HH.WCS.Mobox3.RiDong.Quartz;
+
+/// <summary>
+/// 浠诲姟锛堝伐浣溿�闇�瀹屾垚鐨勪簨锛�+/// </summary>
+public class HelloQuartzJob : IJob
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <param name="context"></param>
+    /// <returns></returns>
+    /// <exception cref="NotImplementedException"></exception>
+    public Task Execute(IJobExecutionContext context)
+    {
+        return Task.Factory.StartNew(() =>
+        {
+            var chargingSwitch = AdoSqlMethod<ChargingSwitch>.QueryFirst();
+
+            if (chargingSwitch.IS_ENABLED == "鍚�)
+            {
+                return;
+            }
+            
+            List<TaskCD> taskCDs = new List<TaskCD>
+            {
+                new () {No = DateTime.Now.ToString("yyMMdd") + "001", CarNo = "1"},
+                new () {No = DateTime.Now.ToString("yyMMdd") + "002", CarNo = "2"},
+                new () {No = DateTime.Now.ToString("yyMMdd") + "003", CarNo = "3"}
+            };
+            
+            foreach (var taskCD in taskCDs)
+            {
+                Console.WriteLine($"褰撳墠鍏呯數浠诲姟锛氫换鍔″彿{taskCD.No},杞﹀彿{taskCD.CarNo}");
+                LogHelper.Info($"褰撳墠鍏呯數浠诲姟锛氫换鍔″彿{taskCD.No},杞﹀彿{taskCD.CarNo}");
+                
+                // 缁欒澶囧厖鐢�+                TaskHelper.SendCd(taskCD);
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/HH.WCS.Mobox3.RiDong/Quartz/QuartzJobCreate.cs b/HH.WCS.Mobox3.RiDong/Quartz/QuartzJobCreate.cs
new file mode 100644
index 0000000..f87a7c3
--- /dev/null
+++ b/HH.WCS.Mobox3.RiDong/Quartz/QuartzJobCreate.cs
@@ -0,0 +1,39 @@
+using System.Threading.Tasks;
+using Quartz;
+using Quartz.Impl;
+
+namespace HH.WCS.Mobox3.RiDong.Quartz;
+
+/// <summary>
+/// 鍒涘缓
+/// </summary>
+public static class QuartzJobCreate
+{
+    /// <summary>
+    /// 鍒涘缓浠诲姟
+    /// </summary>
+    public static async Task CreateJob()
+    {
+        //鍒涘缓涓�釜璋冨害鍣ㄥ伐鍘�+        var schedulerFactory = new StdSchedulerFactory();
+        //鑾峰彇璋冨害鍣�+        var scheduler = await schedulerFactory.GetScheduler();
+        //寮�惎璋冨害鍣�+        await scheduler.Start();
+
+        //鍒涘缓涓�釜宸ヤ綔,骞跺垎缁勮繘Test锛屽悕瀛椾负绫诲悕
+        IJobDetail job = JobBuilder.Create<HelloQuartzJob>()
+            .WithIdentity("HelloQuartzJob", "Test")
+            .Build();
+
+        //鍒涘缓涓�釜瑙﹀彂鏉′欢锛歐ithCronSchedule锛屽畾鏃讹紝姣忓ぉ鍝釜鏃堕棿锛屾垨鑰呮瘡涓湀鍝ぉ
+        ITrigger trigger1 = TriggerBuilder.Create()
+            .WithIdentity("trigger3", "group1")
+            .WithCronSchedule("0 10 17 * * ?")
+            .ForJob("HelloQuartzJob", "Test")
+            .Build();
+
+        //娣诲姞璋冨害锛堝皢宸ヤ綔鍜岃Е鍙戞潯浠舵坊鍔犲埌璋冨害鍣ㄤ腑锛�+        await scheduler.ScheduleJob(job, trigger1);
+    }
+}
\ No newline at end of file
diff --git a/HH.WCS.Mobox3.RiDong/Quartz/TaskCD.cs b/HH.WCS.Mobox3.RiDong/Quartz/TaskCD.cs
new file mode 100644
index 0000000..2a05373
--- /dev/null
+++ b/HH.WCS.Mobox3.RiDong/Quartz/TaskCD.cs
@@ -0,0 +1,17 @@
+namespace HH.WCS.Mobox3.RiDong.Quartz;
+
+/// <summary>
+/// 鍏呯數
+/// </summary>
+public class TaskCD
+{
+    /// <summary>
+    /// 浠诲姟鍙�+    /// </summary>
+    public string No { get; set; }
+
+    /// <summary>
+    /// 杞︾紪鍙�+    /// </summary>
+    public string CarNo { get; set; }
+}
\ No newline at end of file
diff --git a/HH.WCS.Mobox3.RiDong/dispatch/NDC.cs b/HH.WCS.Mobox3.RiDong/dispatch/NDC.cs
index f4ced44..0cc454a 100644
--- a/HH.WCS.Mobox3.RiDong/dispatch/NDC.cs
+++ b/HH.WCS.Mobox3.RiDong/dispatch/NDC.cs
@@ -74,6 +74,48 @@
             return new AGVResult { Res = new Res { ErrCode = -1, ErrInfo = e.Message } };
         }
     }
+    
+    public static AGVResult OrderAdd(int ts, Dictionary<string, string> param, Dictionary<string, string> param1)
+    {
+        //< Req >< Order TS = '1' Pri = '1' No = 'TN2302020001' Ext1 = '' Ext2 = '' N_CNTR_COUNT = '' >< Param Name = 'From' Value = '2' />< Param Name = 'To' Value = '1' /></ Order ></ Req >
+
+        var bufin = GetReqStr2(ts, param, param1);
+
+        try
+        {
+            var result = callClient.OrderAdd(bufin);
+            LogHelper.Info($"OrderAdd req={bufin} res={result}", "NDC");
+            //LogHelper.Info(result.bufout, "ts");
+            return GetResult(result);
+        }
+        catch (Exception e)
+        {
+            LogHelper.Info($"OrderAdd req={bufin} res={e.Message}", "NDC");
+            return new AGVResult { Res = new Res { ErrCode = -1, ErrInfo = e.Message } };
+        }
+    }
+    
+    private static string GetReqStr2(int ts, Dictionary<string, string> param, Dictionary<string, string> param1)
+    {
+        //< Order  TS = '60'  Pri = '" + mst.CN_N_PRIORITY.ToString() + "' From = '" + start.CN_N_AGV_LOCATION + "' To = '" + end.CN_N_AGV_LOCATION + "'  No = '" + mst.S_TASK_NO + "_1' Ext1 = '1' Ext2 = '" + Constants.TN_MID_COMMANDEQ_CALLAGVOrderCommandType + "'  N_CNTR_COUNT = ''   FRow = '" + sFloor + "'  TRow = '" + eFloor + "' />
+        var sb = new StringBuilder();
+        sb.Append($"<Req><Order ");
+        if (ts != 0)
+        {
+            sb.Append($"TS='{ts}'");
+        }
+        foreach (var kv in param)
+        {
+            sb.Append($" {kv.Key}='{kv.Value}'");
+        }
+        sb.Append($" NoCallback='0' >");
+        foreach (var p1 in param1)
+        {
+            sb.Append($"<Param Name='{p1.Key}' Value='{p1.Value}' />");
+        }
+        sb.Append("</Order></Req>");
+        return sb.ToString();
+    }
 
     private static string GetReqStr(int ts, Dictionary<string, string> param)
     {
diff --git a/HH.WCS.Mobox3.RiDong/dto/ChargingSwitch.cs b/HH.WCS.Mobox3.RiDong/dto/ChargingSwitch.cs
new file mode 100644
index 0000000..745051a
--- /dev/null
+++ b/HH.WCS.Mobox3.RiDong/dto/ChargingSwitch.cs
@@ -0,0 +1,16 @@
+using HH.WCS.Mobox3.RiDong.models;
+using SqlSugar;
+
+namespace HH.WCS.Mobox3.RiDong.dto;
+
+/// <summary>
+/// 
+/// </summary>
+[SugarTable("TN_charging_switch")]
+public class ChargingSwitch : BaseModel
+{
+    /// <summary>
+    /// 鏄惁寮�惎
+    /// </summary>
+    public string IS_ENABLED { get; set; }
+}
\ No newline at end of file
diff --git a/HH.WCS.Mobox3.RiDong/generalMethod/AdoSqlMethod.cs b/HH.WCS.Mobox3.RiDong/generalMethod/AdoSqlMethod.cs
index 686602b..876e9e2 100644
--- a/HH.WCS.Mobox3.RiDong/generalMethod/AdoSqlMethod.cs
+++ b/HH.WCS.Mobox3.RiDong/generalMethod/AdoSqlMethod.cs
@@ -12,6 +12,19 @@
 /// </summary>
 public static class AdoSqlMethod<T> where T : class, new()
 {
+    
+    /// <summary>
+    /// 鏌ヨ涓�潯鏁版嵁
+    /// </summary>
+    /// <returns></returns>
+    public static T QueryFirst()
+    {
+        var db = new SqlHelper<object>().GetInstance();
+
+        // 杩斿洖鏁版嵁
+        return db.Queryable<T>().First();
+    }
+    
     /// <summary>
     /// 鏍规嵁鏉′欢鏌ヨ涓�潯鏁版嵁
     /// </summary>
diff --git a/HH.WCS.Mobox3.RiDong/generalMethod/PipeLineHelper.cs b/HH.WCS.Mobox3.RiDong/generalMethod/PipeLineHelper.cs
index e25bd5d..a65041b 100644
--- a/HH.WCS.Mobox3.RiDong/generalMethod/PipeLineHelper.cs
+++ b/HH.WCS.Mobox3.RiDong/generalMethod/PipeLineHelper.cs
@@ -168,7 +168,7 @@
 
                         conveyorLinesInfo.TASKFINISH = 3;
                         // 鍑哄簱鏂瑰悜
-                        conveyorLinesInfo.DIRECTION = ConveyorLinesInfo.GetDirection(queryFirst.S_OUT_TARGET);
+                        conveyorLinesInfo.DIRECTION = ConveyorLinesInfo.GetDirection(queryFirst.S_OUT_TARGET, queryFirst.S_OP_DEF_NAME);
                         AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo, p => new { p.TASKFINISH, p.DIRECTION });
 
                         // 涓棿琛ㄦ暟鎹坊鍔�diff --git a/HH.WCS.Mobox3.RiDong/generalMethod/TaskHelper.cs b/HH.WCS.Mobox3.RiDong/generalMethod/TaskHelper.cs
index f0472df..ee8b496 100644
--- a/HH.WCS.Mobox3.RiDong/generalMethod/TaskHelper.cs
+++ b/HH.WCS.Mobox3.RiDong/generalMethod/TaskHelper.cs
@@ -4,6 +4,7 @@
 using HH.WCS.Mobox3.RiDong.dispatch;
 using HH.WCS.Mobox3.RiDong.dto;
 using HH.WCS.Mobox3.RiDong.models;
+using HH.WCS.Mobox3.RiDong.Quartz;
 using HH.WCS.Mobox3.RiDong.util;
 using HH.WCS.Mobox3.RiDong.wms;
 
@@ -341,7 +342,29 @@
         dic.Add("Door", lockNo);
         NDC.StartNewOrderWithQCmd(164, DateTime.Now.Ticks.ToString(), dic);
     }
+    
+    /// <summary>
+    /// 鍙戦�鍏呯數
+    /// </summary>
+    /// <returns></returns>
+    public static void SendCd(TaskCD task)
+    {
+        var dic = new Dictionary<string, string>();
+        var dic1 = new Dictionary<string, string>();
+        dic.Add("No", task.No);
+        dic.Add("Pri", "0");
+        dic1.Add("ExtDeviceNo", task.CarNo);
 
+        //鍒ゆ柇
+        var res = NDC.OrderAdd(99, dic, dic1);
+        if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009))
+        {
+            //    dstart.N_STATE = 1;
+            //    db.Updateable<TN_CD>(dstart).UpdateColumns(a => new { a.N_STATE }).ExecuteCommand();
+
+        }
+    }
+    
     /// <summary>  
     /// 淇敼浠诲姟鐘舵�  
     /// </summary>  
@@ -503,4 +526,7 @@
             }
         }
     }
+
+
+    
 }
\ No newline at end of file
diff --git a/HH.WCS.Mobox3.RiDong/models/ConveyorLinesInfo.cs b/HH.WCS.Mobox3.RiDong/models/ConveyorLinesInfo.cs
index 97ab8cb..4a0eb55 100644
--- a/HH.WCS.Mobox3.RiDong/models/ConveyorLinesInfo.cs
+++ b/HH.WCS.Mobox3.RiDong/models/ConveyorLinesInfo.cs
@@ -126,7 +126,7 @@
         /// </summary>
         /// <param name="dir"></param>
         /// <returns></returns>
-        public static int GetDirection(string dir)
+        public static int GetDirection(string dir, string type)
         {
             switch (dir)
             {
@@ -138,6 +138,26 @@
                     return 3;
                 case "浜х嚎鍥�:
                     return 4;
+                case "鍥藉绾�:
+                    switch (type)
+                    {
+                        case "鏁存墭鍑哄簱":
+                            return 5;
+                        case "鍒嗘嫞鍑哄簱":
+                            return 7;
+                        default:
+                            return 0;
+                    }
+                case "鍥藉唴绾�:
+                    switch (type)
+                    {
+                        case "鏁存墭鍑哄簱":
+                            return 6;
+                        case "鍒嗘嫞鍑哄簱":
+                            return 8;
+                        default:
+                            return 0;
+                    }
                 default:
                     return 0;
             }

--
Gitblit v1.9.1