using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HslCommunication.WebSocket; using Newtonsoft.Json; using Quartz; using WIDESEA_Common.FillingEnum; using WIDESEA_Model.Models.Basic; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models.TaskInfo; using WIDESEAWCS_QuartzJob; using WIDESEAWCS_Tasks.Command; using WIDESEAWCS_Tasks.DBName; namespace WIDESEAWCS_Tasks { [DisallowConcurrentExecution] public class FillingJob : JobBase, IJob { private readonly IRepository _FillingRepository; private readonly IRepository _FillingHtyRepository; public FillingJob(IRepository FillingRepository, IRepository fillingHtyRepository) { _FillingRepository = FillingRepository; _FillingHtyRepository = fillingHtyRepository; } public Task Execute(IJobExecutionContext context) { //连接设备 bool flag = context.JobDetail.JobDataMap.TryGetValue("JobParams", out object? value); if (flag && value != null) { OtherDevice device = (OtherDevice)value; //OtherDevice TCevice = (OtherDevice)Storage.Devices.Find(v => v.DeviceName == "天车"); if (device.Communicator.IsConnected) { ////读 //short a = device.GetValue(FillingDBName.R_ceshi); ////写 //device.SetValue(FillingDBName.W_ceshia, "zy"); //device.SetValue(FillingDBName.W_ceshib, "wq"); //device.SetValue(FillingDBName.W_ceshic, "df"); try { //是否喷码完成 short accomplish = device.GetValue(FillingDBName.R_Accomplish); if (accomplish == 1) { //获取二维码 Dt_FillingOrder FillingOrder = GetFilling(); if (FillingOrder != null) { //任务实体转命令Model FillingCommand? StackerCommand = FillingToCommand(FillingOrder); if (StackerCommand != null) { //发送命令 device.SetValue(FillingDBName.W_QRcode1, StackerCommand.W_QRcode1); device.SetValue(FillingDBName.W_QRcode2, StackerCommand.W_QRcode2); device.SetValue(FillingDBName.W_QRcode3, StackerCommand.W_QRcode3); device.SetValue(FillingDBName.W_QRcode4, StackerCommand.W_QRcode4); device.SetValue(FillingDBName.W_QRcode5, StackerCommand.W_QRcode5); device.SetValue(FillingDBName.W_QRcode6, StackerCommand.W_QRcode6); device.SetValue(FillingDBName.W_QRcode7, StackerCommand.W_QRcode7); device.SetValue(FillingDBName.W_QRcode8, StackerCommand.W_QRcode8); device.SetValue(FillingDBName.W_QRcode9, StackerCommand.W_QRcode9); device.SetValue(FillingDBName.W_QRcode10, StackerCommand.W_QRcode10); device.SetValue(FillingDBName.W_QRcode11, StackerCommand.W_QRcode11); device.SetValue(FillingDBName.W_QRcode12, StackerCommand.W_QRcode12); device.SetValue(FillingDBName.W_QRcode13, StackerCommand.W_QRcode13); device.SetValue(FillingDBName.W_QRcode14, StackerCommand.W_QRcode14); device.SetValue(FillingDBName.W_QRcode15, StackerCommand.W_QRcode15); device.SetValue(FillingDBName.W_Refresh, StackerCommand.W_Refresh); //生成历史二维码信息 FillingOrder.BarStatus = (int)FillingStatusEnum.ExecuteCompleted; Dt_FillingOrder_Hty FillingOrderHty = new Dt_FillingOrder_Hty(); FillingOrderHty.ArticleNum = FillingOrder.ArticleNum; FillingOrderHty.ArticleName = FillingOrder.ArticleName; FillingOrderHty.Specification = FillingOrder.Specification; FillingOrderHty.batchNum = FillingOrder.batchNum; FillingOrderHty.BarCode = FillingOrder.BarCode; FillingOrderHty.WorkOrder = FillingOrder.WorkOrder; FillingOrderHty.BarNum = FillingOrder.BarNum; FillingOrderHty.CreationTime = FillingOrder.CreationTime; FillingOrderHty.WorkID = FillingOrder.WorkID; FillingOrderHty.ProductType = FillingOrder.ProductType; FillingOrderHty.BarStatus = FillingOrder.BarStatus; FillingOrderHty.BarCodeID = FillingOrder.BarCodeID; FillingOrderHty.ArticleNumID = FillingOrder.ArticleNumID; FillingOrderHty.MaterialName = FillingOrder.MaterialName; FillingOrderHty.WarehouseType = FillingOrder.WarehouseType; FillingOrderHty.MaterialCode = FillingOrder.MaterialCode; FillingOrderHty.Standby1 = FillingOrder.Standby1; FillingOrderHty.Standby2 = FillingOrder.Standby2; _FillingHtyRepository.AddData(FillingOrderHty); _FillingRepository.DeleteData(FillingOrder); string address = AppSettings.Get("WMSApiAddress"); if (!string.IsNullOrEmpty(address)) { HttpHelper.Post($"{address}/api/FillingOrder/UpdateFilling?FillingNumber={FillingOrder.BarCode}", ""); } //延迟2s让罐装机更变信号 Thread.Sleep(2000); } } } } catch (Exception ex) { WriteError(nameof(StackerCraneJob), ex.Message); } } } return Task.CompletedTask; } //获取二维码 public Dt_FillingOrder GetFilling() { Dt_FillingOrder FillingOrder = new Dt_FillingOrder(); FillingOrder = _FillingRepository.QueryData(x => x.BarStatus == (int)FillingStatusEnum.Queue).OrderBy(x => x.Id).First(); return FillingOrder; } //任务实体转命令Model public FillingCommand FillingToCommand(Dt_FillingOrder FillingOrder) { FillingCommand fillingCommand = new FillingCommand(); //拆分字符串 int lengths = FillingOrder.BarCode.Length; string BarCodes= FillingOrder.BarCode; for (int i=0;i < 30 - lengths;i++) { BarCodes = BarCodes + "X"; } fillingCommand.W_QRcode1 = BarCodes.Substring(0, 2); fillingCommand.W_QRcode2 = BarCodes.Substring(2, 2); fillingCommand.W_QRcode3 = BarCodes.Substring(4, 2); fillingCommand.W_QRcode4 = BarCodes.Substring(6, 2); fillingCommand.W_QRcode5 = BarCodes.Substring(8, 2); fillingCommand.W_QRcode6 = BarCodes.Substring(10, 2); fillingCommand.W_QRcode7 = BarCodes.Substring(12, 2); fillingCommand.W_QRcode8 = BarCodes.Substring(14, 2); fillingCommand.W_QRcode9 = BarCodes.Substring(16, 2); fillingCommand.W_QRcode10 = BarCodes.Substring(18, 2); fillingCommand.W_QRcode11 = BarCodes.Substring(20, 2); fillingCommand.W_QRcode12 = BarCodes.Substring(22, 2); fillingCommand.W_QRcode13 = BarCodes.Substring(24, 2); fillingCommand.W_QRcode14 = BarCodes.Substring(26, 2); fillingCommand.W_QRcode15 = BarCodes.Substring(28, 2); fillingCommand.W_Refresh = "1"; return fillingCommand; } } }