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