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;
///
/// 线体帮助类
///
public class PipeLineHelper
{
///
/// 读取各个线体信息
///
/// 根据不同的线体数据执行不同的逻辑
///
public static void ReadConveyorlinesMessage(ConveyorLinesInfo conveyorLinesInfo)
{
if (conveyorLinesInfo != null)
{
if (conveyorLinesInfo.PURPOSE == "入库口")
{
// 查找对应的未推送的输送线任务
var task = AdoSqlMethod.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.QueryList(p => p.S_CNTR_CODE == conveyorLinesInfo.BARCODE);
if (cntrItemDetails.Count > 0)
{
foreach (var cntrItemDetail in cntrItemDetails)
{
cntrItemDetail.F_WEIGHT = conveyorLinesInfo.WEIGHT;
}
AdoSqlMethod.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.UpdateFirst(conveyorLinesInfo, p => new { p.DEVICESIGN, p.TASKCREATE });
}
}
// 任务不存在
else
{
var container = AdoSqlMethod.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.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.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.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.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.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.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.UpdateFirst(agvTask, p => new { p.N_B_STATE, p.S_B_STATE });
AdoSqlMethod.UpdateFirst(pipeTask, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME });
AdoSqlMethod.UpdateFirst(conveyorLinesInfo, p => new { p.LOADSTATE });
}
}
}
}
}
else if (conveyorLinesInfo.PURPOSE == "出库口")
{
if (conveyorLinesInfo.TASKFINISH == 1)
{
var task = AdoSqlMethod.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.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME });
Operation queryFirst = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_OP_CODE);
conveyorLinesInfo.TASKFINISH = 3;
// 出库方向
conveyorLinesInfo.DIRECTION = ConveyorLinesInfo.GetDirection(queryFirst.S_OUT_TARGET, queryFirst.S_OP_DEF_NAME);
AdoSqlMethod.UpdateFirst(conveyorLinesInfo, p => new { p.TASKFINISH, p.DIRECTION });
// 中间表数据添加
// 将数据托盘号插入到中间表2中
var ledDemo = AdoSqlMethod.QueryFirst(p => p.LCOATIONCODE == "CKK-1");
// 该任务的类型
ledDemo.OUTBOUNDTYPE = task.S_OP_NAME.Trim();
// 根据配盘单号查下配盘单主表和明细
var disc = AdoSqlMethod.QueryFirst(p => p.S_DC_NO == task.S_DC_NO);
if (disc != null)
{
var outbound = AdoSqlMethod.QueryFirst(p => p.S_NO == disc.S_BS_NO);
if (outbound != null)
{
ledDemo.DIRECTION = outbound.S_OUT_TARGET.Trim();
}
}
var discd = AdoSqlMethod.QueryFirst(p => p.S_DC_NO == task.S_DC_NO);
if (discd != null)
{
ledDemo.FREIGHTTYPE = discd.S_EXT_ATTR1;
}
AdoSqlMethod.UpdateFirst(ledDemo, p => new { p.OUTBOUNDTYPE, p.DIRECTION, p.FREIGHTTYPE });
}
}
else if (conveyorLinesInfo.TASKFINISH == 2)
{
// 目前暂定人工确定
}
}
else if (conveyorLinesInfo.PURPOSE == "门禁")
{
var dirFirst = AdoSqlMethod.QueryFirst(p=>p.PURPOSE == "门禁");
if (dirFirst != null && dirFirst.ACCESS == 2)
{
dirFirst.ACCESS = 3;
AdoSqlMethod.UpdateFirst(dirFirst, p => new { p.ACCESS });
}
}
}
}
}