#region << 版 本 注 释 >>
|
/*----------------------------------------------------------------
|
* 命名空间:WIDESEAWCS_Tasks.ConveyorLineJob
|
* 创建者:胡童庆
|
* 创建时间:2024/8/2 16:13:36
|
* 版本:V1.0.0
|
* 描述:
|
*
|
* ----------------------------------------------------------------
|
* 修改人:
|
* 修改时间:
|
* 版本:V1.0.1
|
* 修改说明:
|
*
|
*----------------------------------------------------------------*/
|
#endregion << 版 本 注 释 >>
|
|
using AutoMapper;
|
using Quartz;
|
using SqlSugar;
|
using System.Threading.Tasks;
|
using WIDESEA_Common.Log;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_ISystemServices;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_Model.Models.System;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.DTO;
|
using WIDESEAWCS_QuartzJob.Models;
|
using WIDESEAWCS_QuartzJob.Service;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
[DisallowConcurrentExecution]
|
public class CommonConveyorLineJob : IJob
|
{
|
private readonly ITaskService _taskService;
|
private readonly ITaskExecuteDetailService _taskExecuteDetailService;
|
private readonly IRouterService _routerService;
|
private readonly IPlatformStationService _PlatformStationService;
|
|
private readonly IMapper _mapper;
|
|
public CommonConveyorLineJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, IRouterService routerService, IMapper mapper, IPlatformStationService platformStation)
|
{
|
_taskService = taskService;
|
_taskExecuteDetailService = taskExecuteDetailService;
|
_routerService = routerService;
|
_mapper = mapper;
|
_PlatformStationService = platformStation;
|
}
|
|
public Task Execute(IJobExecutionContext context)
|
{
|
try
|
{
|
CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
|
if (conveyorLine != null)
|
{
|
//读取输送线入库,空托,检修入库口申请
|
RequestInbound(conveyorLine);
|
|
//获取出库任务,下发至输送线
|
RequestInSCLine(conveyorLine);
|
}
|
}
|
catch (Exception ex)
|
{
|
//Console.Out.WriteLine(nameof(CommonConveyorLineJob) + ":" + ex.ToString());
|
}
|
return Task.CompletedTask;
|
}
|
|
/// <summary>
|
/// 输送线请求入库
|
/// </summary>
|
/// <param name="conveyorLine">输送线实例对象</param>
|
public void RequestInbound(CommonConveyorLine conveyorLine)
|
{
|
try
|
{
|
List<PlatformStation> platformsList = _PlatformStationService.GetPlatformList(conveyorLine.DeviceCode);
|
foreach (var plctationitem in platformsList)
|
{
|
ConveyorTaskCommand command = lineCommand(conveyorLine, plctationitem.Station_code);
|
|
int kd = 1;
|
if (command != null && kd!=1)
|
{
|
//是否需要写入反馈
|
DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == plctationitem.Station_code && x.DeviceProParamName == "HandShake" && x.DeviceProParamType == "DeviceCommand");
|
if (command.HandShake && command.Barcodest != "")
|
{
|
//调取申请
|
WebResponseContent content = _taskService.RequestWMSTask(int.Parse(command.Barcodest), int.Parse(plctationitem.Station_code));
|
if (content.Status)
|
{
|
|
conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)true);
|
wcsWriteLog(plctationitem.Station_code, "成功", $"{command.Barcodest},反馈输送线读取到入库申请信号:true");
|
}
|
}
|
/* else
|
{
|
//conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (bool)false);
|
//未读取到输送线申请
|
wcsWriteLog(plctationitem.Station_code, "错误", $"未读取到输送线入库申请或托盘条码为0,申请:{command.HandShake},托盘条码:{command.Barcodest}");
|
}*/
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
wcsWriteLog("输送线请求错误", "错误", $"错误信息:{ex.Message}");
|
throw;
|
}
|
}
|
|
/// <summary>
|
/// 读取堆垛机出库站台信息,进行任务完成
|
/// </summary>
|
/// <param name="conveyorLine">输送线实例对象</param>
|
public void RequestInSCLine(CommonConveyorLine conveyorLine)
|
{
|
try
|
{
|
PlatformStation platformsList = _PlatformStationService.GetPlatInData();
|
ConveyorTaskCommand command = lineCommand(conveyorLine, platformsList.Station_code);
|
DeviceProDTO? deviceProDTO6 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == platformsList.Station_code && x.DeviceProParamName == "StationNum" && x.DeviceProParamType == "DeviceCommand");
|
DeviceProDTO? deviceProDTO7 = conveyorLine.DeviceProDTOs.Find(x => x.DeviceChildCode == platformsList.Station_code && x.DeviceProParamName == "HandShake" && x.DeviceProParamType == "DeviceCommand");
|
if (command.HandShake && command.Barcodest != "")
|
{
|
//调取申请
|
Dt_Task task = _taskService.QueryConveyorLineTask(int.Parse(platformsList.Station_code), command.Barcodest);
|
if (task != null)
|
{
|
conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (short)int.Parse(task.NextAddress));
|
|
_taskService.StackCraneTaskCompleted(task.TaskNum);
|
conveyorLine.Communicator.Write(deviceProDTO7.DeviceProAddress, (bool)true);
|
|
WriteLog.Write_Log("堆垛机放货站台", platformsList.Station_code + "站台", "成功", new { 信息 = $"写入条码:{command.Barcodest},去向:{task.NextAddress}" });
|
}
|
/* else
|
{
|
WriteLog.Write_Log("堆垛机放货站台", platformsList.Station_code + "站台", "错误", new { 信息 = $"未找到条码:{command.Barcodest}的任务号" });
|
}*/
|
}
|
/* else
|
{
|
//conveyorLine.Communicator.Write(deviceProDTO6.DeviceProAddress, (int)0);
|
WriteLog.Write_Log("堆垛机放货站台", platformsList.Station_code + "站台", "错误", new { 信息 = $"未读取到检修出库放货站台申请或托盘条码,申请:{command.HandShake},托盘条码:{command.Barcodest},并清空写入条码" });
|
}*/
|
}
|
catch (Exception ex)
|
{
|
wcsWriteLog("堆垛机站台进行任务完成", "错误", $"错误信息:{ex.Message}");
|
throw;
|
}
|
}
|
|
/// <summary>
|
/// 读取信息记录
|
/// </summary>
|
/// <param name="SCLLinStack"></param>
|
/// <param name="Logtype"></param>
|
/// <param name="Magessadd"></param>
|
public void wcsWriteLog(string SCLLinStack, string Logtype, string Magessadd)
|
{
|
WriteLog.Write_Log("堆垛机取货站台", SCLLinStack + "站台", Logtype, new { 信息 = Magessadd });
|
}
|
|
|
public ConveyorTaskCommand lineCommand(CommonConveyorLine conveyorLine, string Station_code)
|
{
|
try
|
{
|
ConveyorTaskCommand conveyorLineCommand = new ConveyorTaskCommand();
|
List<DeviceProDTO> deviceProDTO6 = conveyorLine.DeviceProDTOs
|
.Where(x => x.DeviceChildCode == Station_code
|
&& DBLine.ListDBdata.Contains(x.DeviceProParamName)
|
&& x.DeviceProParamType == "ReadDeviceCommand")
|
.ToList();
|
foreach (var item in deviceProDTO6)
|
{
|
var paramName = item.DeviceProParamName;
|
var propertyInfo = typeof(ConveyorTaskCommand).GetProperty(paramName);
|
|
if (propertyInfo != null)
|
{
|
if (item.DeviceDataType == "bool")
|
{
|
var value = conveyorLine.Communicator.Read<bool>(item.DeviceProAddress);
|
propertyInfo.SetValue(conveyorLineCommand, value);
|
}
|
else if (item.DeviceDataType == "string")
|
{
|
var value = conveyorLine.Communicator.Read<string>(item.DeviceProAddress);
|
propertyInfo.SetValue(conveyorLineCommand, value);
|
}
|
}
|
}
|
return conveyorLineCommand;
|
}
|
catch (Exception ex)
|
{
|
wcsWriteLog("出库站台", "错误", $"错误信息:{ex.Message}");
|
throw;
|
}
|
}
|
|
|
}
|
}
|