using System;
using System.Linq;
using HH.WCS.Mobox3.HaiCheng.Controller.Service;
using HH.WCS.Mobox3.HaiCheng.Entity;
using HH.WCS.Mobox3.HaiCheng.Entity.Dto;
using HH.WCS.Mobox3.HaiCheng.Util.EquipmentCommunication;
using HH.WCS.Mobox3.HaiCheng.Util.Helper;
namespace HH.WCS.Mobox3.HaiCheng.Procss
{
///
/// 线体任务
///
public static class ThreadTask
{
#region 读取各个线体信息
///
/// 读取各个线体信息 - 主方法
///
public static void ReadLines()
{
var conveyorlinesInfoDtos = Settings.ConveyorlinesInfos.Where(p => p.enable == 1).ToList();
foreach (var conveyorlinesInfoDto in conveyorlinesInfoDtos)
{
OperationLines(conveyorlinesInfoDto);
}
}
///
/// 操作线体信息
///
///
private static void OperationLines(ConveyorlinesInfoDto conveyorlinesInfoDto)
{
if (conveyorlinesInfoDto.purpose == "入库口")
{
// 如果是入库口,说明任务提前创建了,不需要额外操作
}
else if (conveyorlinesInfoDto.purpose == "扫码称重")
{
// 读取条形码
var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001);
// 清除空格
barCode = barCode.Replace("\0","");
// 读取申请任务信号
var request = S7Helper.ReadPipelinePlcForInt(452, conveyorlinesInfoDto, 2001, "Int");
// 有条形码且申请成功
if (!string.IsNullOrEmpty(barCode) && request == 1)
{
// 获取该托盘的任务号(入库任务且状态为0)
var task = AdoSqlHelper.QueryFirst(p =>
p.N_TYPE == 1 && p.S_CNTR_CODE == barCode);
if (task != null)
{
var lineTask = new LineTaskDto
{
Task_No = Convert.ToInt32(task.S_CODE.Substring(8)),
Pallet_No = task.S_CNTR_CODE,
Source_Station = 1001,
Destination_Station = 1002,
};
// 满足条件,往输送线写数据
if (S7Helper.SendTaskPipelinePlc(conveyorlinesInfoDto, lineTask, conveyorlinesInfoDto.writeAddr,
2000))
{
task.N_B_STATE = 1;
task.S_B_STATE = "已推送";
task.T_START_TIME = DateTime.Now;
AdoSqlHelper.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME });
}
}
else
{
// 任务不存在,调用创建接口
// FourWayCarService.CallWMSOperationCreate();
}
}
}
else if (conveyorlinesInfoDto.purpose == "提升机前线体")
{
// 读取条形码
var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001);
// 清除空格
barCode = barCode.Replace("\0","");
// 获取该托盘的任务号(入库任务且状态为0)
var task = AdoSqlHelper.QueryFirst(p => p.S_CNTR_CODE == barCode);
if (task != null)
{
// 入库
if (task.N_TYPE == 1)
{
// 判断当前终点在几层
Location location = AdoSqlHelper.QueryFirst(p => p.S_CODE == task.S_END_LOC);
var fourWayCarCreateDto = new FourWayCarCreateDto()
{
order_name = task.S_OP_CODE,
src = conveyorlinesInfoDto.location,
dst = location.S_AGV_SITE,
para1 = task.S_CNTR_CODE
};
// 推送小车任务
if (FourWayCarService.CreateOrder(fourWayCarCreateDto))
{
task.N_B_STATE = 2;
task.S_B_STATE = "执行中";
AdoSqlHelper.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE });
}
}
// 出库
else if (task.N_TYPE == 2)
{
var lineTask = new LineTaskDto
{
Task_No = Convert.ToInt32(task.S_CODE.Substring(8)),
Pallet_No = task.S_CNTR_CODE,
Source_Station = 1001,
Destination_Station = 1002,
};
// 满足条件,往输送线写数据
if (S7Helper.SendTaskPipelinePlc(conveyorlinesInfoDto, lineTask, conveyorlinesInfoDto.writeAddr,
2000))
{
task.N_B_STATE = 3;
task.S_B_STATE = "完成";
task.T_END_TIME = DateTime.Now;
AdoSqlHelper.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_START_TIME });
// 调用wms完成接口
}
}
}
}
else if (conveyorlinesInfoDto.purpose == "出库口")
{
// 读取条形码
var barCode = S7Helper.ReadPipelinePlcForString(434, conveyorlinesInfoDto, 2001);
// 清除空格
barCode = barCode.Replace("\0","");
// 获取该托盘的任务号(入库任务且状态为0)
var task = AdoSqlHelper.QueryFirst(p => p.S_CNTR_CODE == barCode);
if (task != null)
{
task.N_B_STATE = 3;
task.S_B_STATE = "完成";
task.T_END_TIME = DateTime.Now;
AdoSqlHelper.UpdateFirst(task, p => new { p.N_B_STATE, p.S_B_STATE, p.T_END_TIME });
}
}
}
#endregion
}
}