using System;
|
using System.Linq;
|
using HH.WCS.Mobox3.RiDong.apiMethod;
|
using HH.WCS.Mobox3.RiDong.dto;
|
using HH.WCS.Mobox3.RiDong.models;
|
using HH.WCS.Mobox3.RiDong.models.other;
|
using HH.WCS.Mobox3.RiDong.util;
|
|
namespace HH.WCS.Mobox3.RiDong.generalMethod;
|
|
/// <summary>
|
/// 线体帮助类
|
/// </summary>
|
public class PipeLineHelper
|
{
|
/// <summary>
|
/// 读取各个线体信息
|
/// </summary>
|
/// <remarks>根据不同的线体数据执行不同的逻辑</remarks>
|
/// <param name="conveyorLinesInfo"></param>
|
public static void ReadConveyorlinesMessage(ConveyorLinesInfo conveyorLinesInfo)
|
{
|
if (conveyorLinesInfo != null)
|
{
|
if (conveyorLinesInfo.PURPOSE == "入库口")
|
{
|
// 查找对应的未推送的输送线任务
|
var task = AdoSqlMethod<Task>.QueryFirst(p =>
|
p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE < 3 && p.N_SCHEDULE_TYPE == 1);
|
|
// 判断是否需要创建作业
|
if (conveyorLinesInfo.TASKCREATE == 1)
|
{
|
// 更新容器货品表数据
|
var cntrItemDetails =
|
AdoSqlMethod<CntrItemDetail>.QueryList(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE);
|
|
if (cntrItemDetails.Count > 0)
|
{
|
foreach (var cntrItemDetail in cntrItemDetails)
|
{
|
cntrItemDetail.F_WEIGHT = conveyorLinesInfo.WEIGHT;
|
}
|
|
AdoSqlMethod<CntrItemDetail>.UpdateList(cntrItemDetails, p => new { p.F_WEIGHT });
|
}
|
|
// 任务存在
|
if (task != null)
|
{
|
if (task.N_B_STATE == 0)
|
{
|
// 推送目的地,目的地是当前线体的
|
var infoDto = Settings.ConveyorlinesInfos.First(p => p.enable == 1 && p.location == task.S_END_LOC);
|
|
conveyorLinesInfo.DEVICESIGN = infoDto.devicesign;
|
conveyorLinesInfo.TASKCREATE = 2;
|
AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo, p => new { p.DEVICESIGN, p.TASKCREATE });
|
}
|
}
|
// 任务不存在
|
else
|
{
|
var container = AdoSqlMethod<Container>.QueryFirst(p => p.S_CODE == conveyorLinesInfo.BARCODE);
|
|
if (container != null)
|
{
|
if (container.S_TYPE != "7a" && container.S_TYPE != "8")
|
{
|
container.S_TYPE = conveyorLinesInfo.CONTAINERTYPE;
|
|
AdoSqlMethod<Container>.UpdateFirst(container, p => new { p.S_TYPE });
|
}
|
|
var input = new OperationDto();
|
|
input.cntrCode = container.S_CODE;
|
input.taskType = 1;
|
input.odd = "";
|
|
// 创建对应的任务数据
|
SynthesizeService.AddOperation(input);
|
}
|
else
|
{
|
Console.WriteLine("托盘不存在");
|
}
|
}
|
}
|
else if (conveyorLinesInfo.TASKCREATE == 3)
|
{
|
// 任务存在
|
if (task != null)
|
{
|
// 任务变更为推送状态
|
task.N_B_STATE = 1;
|
task.S_B_STATE = "已推送";
|
task.T_START_TIME = DateTime.Now;
|
AdoSqlMethod<Task>.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME });
|
|
conveyorLinesInfo.TASKCREATE = 4;
|
conveyorLinesInfo.DEVICESIGN = 0;
|
conveyorLinesInfo.BARCODE = "";
|
conveyorLinesInfo.CONTAINERTYPE = "";
|
conveyorLinesInfo.WEIGHT = 0;
|
AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo,
|
p => new { p.DEVICESIGN, p.BARCODE, p.TASKCREATE, p.CONTAINERTYPE, p.WEIGHT });
|
}
|
}
|
}
|
else if (conveyorLinesInfo.PURPOSE == "入库接驳")
|
{
|
// 判断当前线体编号是否为1
|
if (conveyorLinesInfo.LOADSTATE == 1)
|
{
|
// 读取条形码,找到对应的输送线任务
|
var pipeTask = AdoSqlMethod<Task>.QueryFirst(p =>
|
p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 1 && p.N_SCHEDULE_TYPE == 1);
|
|
if (pipeTask != null)
|
{
|
// 修改状态为完成
|
pipeTask.N_B_STATE = 3;
|
pipeTask.S_B_STATE = "完成";
|
pipeTask.T_END_TIME = DateTime.Now;
|
|
// 推送agv任务
|
var agvTask = AdoSqlMethod<Task>.QueryFirst(p =>
|
p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 0 && p.N_SCHEDULE_TYPE == 2 && p.S_OP_CODE == pipeTask.S_OP_CODE);
|
|
// 查询中间表数据
|
var dirFirst = AdoSqlMethod<ConveyorLinesInfo>.QueryFirst(p=>p.PURPOSE == "门禁");
|
|
if (agvTask != null && dirFirst.ACCESS == 0)
|
{
|
// 推送小车的任务
|
if (TaskHelper.SendTaskFromAGV(agvTask))
|
{
|
agvTask.N_B_STATE = 1;
|
agvTask.S_B_STATE = "已推送";
|
|
// 修改中间表数据信号为2
|
conveyorLinesInfo.LOADSTATE = 2;
|
|
AdoSqlMethod<Task>.UpdateFirst(agvTask, p => new { p.N_B_STATE, p.S_B_STATE });
|
AdoSqlMethod<Task>.UpdateFirst(pipeTask, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME });
|
AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo, p => new { p.LOADSTATE });
|
}
|
}
|
}
|
}
|
}
|
else if (conveyorLinesInfo.PURPOSE == "出库口")
|
{
|
if (conveyorLinesInfo.TASKFINISH == 1)
|
{
|
var task = AdoSqlMethod<Task>.QueryFirst(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE && p.N_B_STATE == 1 && p.N_SCHEDULE_TYPE == 1);
|
|
if (task != null)
|
{
|
// 修改任务为完成
|
task.N_B_STATE = 3;
|
task.S_B_STATE = "完成";
|
task.T_END_TIME = DateTime.Now;
|
AdoSqlMethod<Task>.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME });
|
|
Operation queryFirst = AdoSqlMethod<Operation>.QueryFirst(p => p.S_CODE == task.S_OP_CODE);
|
|
conveyorLinesInfo.TASKFINISH = 3;
|
// 出库方向
|
conveyorLinesInfo.DIRECTION = ConveyorLinesInfo.GetDirection(queryFirst.S_OUT_TARGET);
|
AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(conveyorLinesInfo, p => new { p.TASKFINISH, p.DIRECTION });
|
|
// 中间表数据添加
|
// 将数据托盘号插入到中间表2中
|
var ledDemo = AdoSqlMethod<LEDDemo>.QueryFirst(p => p.LCOATIONCODE == "CKK-1");
|
|
// 该任务的类型
|
ledDemo.OUTBOUNDTYPE = task.S_OP_NAME.Trim();
|
|
// 根据配盘单号查下配盘单主表和明细
|
var disc = AdoSqlMethod<TN_Distribution_CNTR>.QueryFirst(p => p.S_DC_NO == task.S_DC_NO);
|
|
if (disc != null)
|
{
|
var outbound = AdoSqlMethod<OutboundOrder>.QueryFirst(p => p.S_NO == disc.S_BS_NO);
|
|
if (outbound != null)
|
{
|
ledDemo.DIRECTION = outbound.S_OUT_TARGET.Trim();
|
}
|
}
|
|
var discd = AdoSqlMethod<TN_Distribution_CNTR_Detail>.QueryFirst(p => p.S_DC_NO == task.S_DC_NO);
|
|
if (discd != null)
|
{
|
ledDemo.FREIGHTTYPE = discd.S_EXT_ATTR1;
|
}
|
|
AdoSqlMethod<LEDDemo>.UpdateFirst(ledDemo, p => new { p.OUTBOUNDTYPE, p.DIRECTION, p.FREIGHTTYPE });
|
}
|
}
|
else if (conveyorLinesInfo.TASKFINISH == 2)
|
{
|
// 目前暂定人工确定
|
}
|
}
|
else if (conveyorLinesInfo.PURPOSE == "门禁")
|
{
|
var dirFirst = AdoSqlMethod<ConveyorLinesInfo>.QueryFirst(p=>p.PURPOSE == "门禁");
|
|
if (dirFirst != null && dirFirst.ACCESS == 2)
|
{
|
dirFirst.ACCESS = 3;
|
AdoSqlMethod<ConveyorLinesInfo>.UpdateFirst(dirFirst, p => new { p.ACCESS });
|
}
|
}
|
}
|
}
|
}
|