using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.ConveyorLineEnum;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_DTO.WMSInfo;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.DTO;
|
using WIDESEAWCS_QuartzJob.Models;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
public partial class CommonConveyorLineJob
|
{
|
/// <summary>
|
/// 输送线
|
/// </summary>
|
/// <param name="conveyorLine"></param>
|
/// <returns></returns>
|
public List<Task> ConveyorLineExtend(CommonConveyorLine conveyorLine)
|
{
|
List<string> childDeviceCodes = _routerService.QueryAllPositions(conveyorLine.DeviceCode);
|
List<Task> tasks = new List<Task>();
|
foreach (string childDeviceCode in childDeviceCodes)
|
{
|
try
|
{
|
ConveyorLineTaskCommandR command = conveyorLine.ReadCustomer<ConveyorLineTaskCommandR>(childDeviceCode);
|
if (command != null)
|
{
|
if (childDeviceCode == "1002" && command.Status == (ushort)ConveyorStatus.Wait)
|
{
|
RequestInbound(conveyorLine, command, childDeviceCode);
|
}
|
else if (childDeviceCode == "1004" && command.Status == (ushort)ConveyorStatus.Stored)
|
{
|
ConveyorLineInFinish(conveyorLine, command, childDeviceCode);
|
}
|
else if (childDeviceCode == "1008" && command.Status == (ushort)ConveyorStatus.Stored)
|
{
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
if (task != null)
|
{
|
List<Dt_Router> routers = _routerRepository.QueryData(x => x.StartPosi == task.NextAddress && x.ChildPosiDeviceCode == "AGV" && x.Remark == "未占用");
|
if (routers != null && routers.Count > 0)
|
{
|
var router = routers.FirstOrDefault();
|
if (router != null)
|
{
|
task.TaskState = TaskOutStatusEnum.Line_OutFinish.ObjToInt();
|
task.CurrentAddress = childDeviceCode;
|
task.NextAddress = router.ChildPosi;
|
router.Remark = "占用";
|
_routerRepository.UpdateData(router);
|
_taskService.UpdateData(task);
|
}
|
}
|
}
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
continue;
|
}
|
}
|
return tasks;
|
}
|
|
|
/// <summary>
|
/// 输送线请求入库
|
/// </summary>
|
/// <param name="conveyorLine">输送线实例对象</param>
|
/// <param name="command">读取的请求信息</param>
|
/// <param name="childDeviceCode">子设备编号</param>
|
public void RequestInbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode)
|
{
|
Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.Barcode);
|
//Dt_Task task = _taskService.QueryConveyorLineTaskNum(conveyorLine.DeviceCode, childDeviceCode, command.TaskNum);
|
if (task != null)
|
{
|
if (command.Spec > 0)
|
{
|
DeviceProtocolDetailDTO? deviceProtocolDetail = conveyorLine.DeviceProtocolDetailDTOs.FirstOrDefault(x => x.ProtocalDetailValue == command.Spec.ToString() && x.DeviceProParamName == nameof(ConveyorLineTaskCommandR.Spec));
|
string? Des = deviceProtocolDetail?.ProtocolDetailDes;
|
if (Des != task.ExceptionMessage)
|
{
|
task.ExceptionMessage = deviceProtocolDetail?.ProtocolDetailDes;
|
_taskService.UpdateData(task);
|
}
|
return;
|
}
|
ConveyorLineDTO lineDTO = new ConveyorLineDTO()
|
{
|
TaskNum = task.TaskNum,
|
stationCode = childDeviceCode,
|
Barcode = command.Barcode,
|
Spec = command.Spec,
|
Weight = command.Weight,
|
};
|
var content = _taskService.RequestWMSTask(lineDTO);
|
if (!content.Status)
|
{
|
task.ExceptionMessage = content?.Message;
|
_taskService.UpdateData(task);
|
return;
|
}
|
//if (content.Status)
|
//{
|
task.CurrentAddress = childDeviceCode;
|
List<Dt_Router> routers = _routerService.QueryNextRoutes(task.CurrentAddress, task.TargetAddress);
|
if (routers.Count > 0)
|
{
|
task.NextAddress = routers.FirstOrDefault().ChildPosi;
|
}
|
//task.NextAddress = AppSettings.Configuration["OKAddress"];
|
task.ExceptionMessage = null;
|
ConveyorLineTaskCommandW taskCommand = _mapper.Map<ConveyorLineTaskCommandW>(task);
|
taskCommand.WriterTrue = (short)command.inRead;
|
|
if (conveyorLine.SendCommand(taskCommand, childDeviceCode))
|
_taskService.UpdateTaskStatusToNext(task);
|
//}
|
//else
|
//{
|
// //if (content.Code == 404)//修改终点地址
|
// //{
|
// task.CurrentAddress = childDeviceCode;
|
// task.NextAddress = AppSettings.Configuration["NGAddress"];
|
// task.ExceptionMessage = content.Message;
|
// task.TaskState = (int)TaskInStatusEnum.InException;
|
// ConveyorLineTaskCommandW taskCommand = _mapper.Map<ConveyorLineTaskCommandW>(task);
|
// taskCommand.WriterTrue = 1;
|
// if (conveyorLine.SendCommand(taskCommand, childDeviceCode)) _taskService.UpdateData(task);
|
// //}
|
//}
|
}
|
}
|
|
/// <summary>
|
/// 输送线请求入库下一地址
|
/// </summary>
|
/// <param name="conveyorLine">输送线实例对象</param>
|
/// <param name="command">读取的请求信息</param>
|
/// <param name="childDeviceCode">子设备编号</param>
|
public void RequestInNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode)
|
{
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
if (task != null)
|
{
|
Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
|
//if (newTask != null)
|
//{
|
// ConveyorLineTaskCommandW taskCommand = _mapper.Map<ConveyorLineTaskCommandW>(newTask);
|
|
// conveyorLine.SendCommand(taskCommand, childDeviceCode);
|
//}
|
}
|
}
|
/// <summary>
|
/// 输送线入库完成
|
/// </summary>
|
/// <param name="conveyorLine">输送线实例对象</param>
|
/// <param name="command">读取的请求信息</param>
|
/// <param name="childDeviceCode">子设备编号</param>
|
public void ConveyorLineInFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode)
|
{
|
//Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.Barcode, childDeviceCode);
|
if (task != null) _taskService.UpdateTaskStatusToNext(task);
|
|
task = _taskService.QueryCompletedConveyorLineTask(command.Barcode, childDeviceCode);
|
if (task != null && string.IsNullOrEmpty(task.TargetAddress))
|
{
|
_taskService.StackerCraneRequestInbound(task);
|
}
|
//if (task != null)
|
//{
|
// //conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
|
// //向WMS更新任务状态,WMS返回入库任务终点
|
// WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
|
// //Console.Out.WriteLine(content.Serialize());
|
//}
|
}
|
|
/// <summary>
|
/// 输送线请求出信息
|
/// </summary>
|
/// <param name="conveyorLine">输送线实例对象</param>
|
/// <param name="command">读取的请求信息</param>
|
/// <param name="childDeviceCode">子设备编号</param>
|
public void RequestOutbound(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode)
|
{
|
Dt_Task task = _taskService.QueryConveyorLineTask(conveyorLine.DeviceCode, childDeviceCode, command.Barcode);
|
if (task != null)
|
{
|
ConveyorLineTaskCommandW taskCommand = _mapper.Map<ConveyorLineTaskCommandW>(task);
|
|
conveyorLine.SendCommand(taskCommand, childDeviceCode);
|
|
_taskService.UpdateTaskStatusToNext(task);
|
}
|
}
|
|
/// <summary>
|
/// 输送线请求出库下一地址
|
/// </summary>
|
/// <param name="conveyorLine">输送线实例对象</param>
|
/// <param name="command">读取的请求信息</param>
|
/// <param name="childDeviceCode">子设备编号</param>
|
public void RequestOutNextAddress(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode)
|
{
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
if (task != null)
|
{
|
Dt_Task? newTask = _taskService.UpdatePosition(task.TaskNum, task.CurrentAddress);
|
//if (newTask != null)
|
//{
|
// ConveyorLineTaskCommandW taskCommand = _mapper.Map<ConveyorLineTaskCommandW>(newTask);
|
|
// conveyorLine.SendCommand(taskCommand, childDeviceCode);
|
//}
|
}
|
}
|
|
/// <summary>
|
/// 输送线出库完成
|
/// </summary>
|
/// <param name="conveyorLine">输送线实例对象</param>
|
/// <param name="command">读取的请求信息</param>
|
/// <param name="childDeviceCode">子设备编号</param>
|
public void ConveyorLineOutFinish(CommonConveyorLine conveyorLine, ConveyorLineTaskCommandR command, string childDeviceCode)
|
{
|
Dt_Task task = _taskService.QueryExecutingConveyorLineTask(command.TaskNum, childDeviceCode);
|
if (task != null)
|
{
|
//conveyorLine.SetValue(ConveyorLineDBName.WriteInteractiveSignal, 0, childDeviceCode);
|
WebResponseContent content = _taskService.UpdateTaskStatusToNext(task);
|
//Console.Out.WriteLine(content.Serialize());
|
}
|
}
|
}
|
}
|