| | |
| | | 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(); |
| | |
| | | x.SetDescription("hh123"); |
| | | x.SetDisplayName("hh123.wms"); |
| | | x.SetServiceName("hh123.wms"); |
| | | |
| | | }); |
| | | |
| | | |
| | | var exitCode = (int)Convert.ChangeType(rc, rc.GetTypeCode()); |
| | | Environment.ExitCode = exitCode; |
| | | } |
| | |
| | | /// </summary> |
| | | public class WorkThread |
| | | { |
| | | |
| | | public void Start() |
| | | { |
| | | List<Task> tasks = new List<Task> |
| | |
| | | // 出库agv任务推送 |
| | | GetTaskS(ThreadMenthod.DispatchFromAGV), |
| | | // 读取线体信息并做对应的处理 |
| | | GetTask(ThreadMenthod.ReadConveyorlinesMessage) |
| | | GetTask(ThreadMenthod.ReadConveyorlinesMessage), |
| | | }; |
| | | Task.WaitAll(tasks.ToArray()); |
| | | } |
| | | |
| | | |
| | | |
| | | public void Stop() |
| | | { |
New file |
| | |
| | | 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); |
| | | } |
| | | }); |
| | | } |
| | | } |
New file |
| | |
| | | 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(); |
| | | |
| | | //创建一个触发条件:WithCronSchedule,定时,每天哪个时间,或者每个月哪天 |
| | | ITrigger trigger1 = TriggerBuilder.Create() |
| | | .WithIdentity("trigger3", "group1") |
| | | .WithCronSchedule("0 10 17 * * ?") |
| | | .ForJob("HelloQuartzJob", "Test") |
| | | .Build(); |
| | | |
| | | //添加调度(将工作和触发条件添加到调度器中) |
| | | await scheduler.ScheduleJob(job, trigger1); |
| | | } |
| | | } |
New file |
| | |
| | | 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; } |
| | | } |
| | |
| | | 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) |
| | | { |
New file |
| | |
| | | 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; } |
| | | } |
| | |
| | | /// </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> |
| | |
| | | |
| | | 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 }); |
| | | |
| | | // 中间表数据添加 |
| | |
| | | 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; |
| | | |
| | |
| | | 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> |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | /// </summary> |
| | | /// <param name="dir"></param> |
| | | /// <returns></returns> |
| | | public static int GetDirection(string dir) |
| | | public static int GetDirection(string dir, string type) |
| | | { |
| | | switch (dir) |
| | | { |
| | |
| | | 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; |
| | | } |
| | |
| | | task.N_B_STATE = 2; |
| | | task.S_B_STATE = Task.GetStateStr(task.N_B_STATE); |
| | | // task.T_START_TIME = DateTime.Now; |
| | | db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand(); |
| | | db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME }).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |
| | |
| | | { |
| | | if (task.N_B_STATE == 1) |
| | | { |
| | | if (task.T_START_TIME == null) |
| | | { |
| | | task.T_START_TIME = DateTime.Now; |
| | | db.Updateable(task).UpdateColumns(it => new { it.T_START_TIME }).ExecuteCommand(); |
| | | } |
| | | task.T_START_TIME = DateTime.Now; |
| | | db.Updateable(task).UpdateColumns(it => new { it.T_START_TIME }).ExecuteCommand(); |
| | | } |
| | | } |
| | | } |