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<Dt_FillingOrder> _FillingRepository;
|
private readonly IRepository<Dt_FillingOrder_Hty> _FillingHtyRepository;
|
|
public FillingJob(IRepository<Dt_FillingOrder> FillingRepository, IRepository<Dt_FillingOrder_Hty> 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, short>(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, short>(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.QueryFirst(x => x.BarStatus == (int)FillingStatusEnum.Queue);
|
|
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;
|
}
|
}
|
}
|