using HH.WCS.NongFuChaYuan.TaskController;
using HH.WCS.NongFuChaYuan.DispatchService;
using HH.WCS.NongFuChaYuan.OtherService;
using HH.WCS.NongFuChaYuan.WmsService;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Threading.Tasks;
using static HH.WCS.NongFuChaYuan.DispatchService.NDC;
using HH.WCS.NongFuChaYuan.DeviceService;
namespace HH.WCS.NongFuChaYuan.TaskController
{
///
/// 任务流程实现类--标准流程,项目流程
///
public class TaskProcess
{
private static HttpHelper httpHelper = new HttpHelper();
private static object JunZhouLocLocker = new object();//均州出入库货位锁
private static object ChunAnLocLocker = new object();//淳安出入库货位锁
private static string enable = Settings.flexibilityenable;
#region 标准任务流程
//--------------------------------------------------任务相关--------------------------------------------------
///
/// 任务分发
///
internal static void Dispatch()
{
//获取所有未执行的任务
var list = TaskHelper.GetTaskListByState("未执行");
if (list.Count > 0)
{
list.ForEach(task =>
{
if (!TaskProcess.Intercept(task))
{
//使用自定义任务推送
TaskProcess.SendTaskStandard(task);
}
});
}
}
///
/// 任务拦截
///
///
///
internal static bool Intercept(WMSTask mst)
{
var result = false;
if (Settings.ProjectName == "农夫均州")
{
//翻斗机叠空筐
//电梯任务不推送,单独处理
if (mst.S_TYPE.Contains("-电梯"))
{
result = true;
}
if (mst.S_TYPE.Trim() == "翻斗机叠空筐" && mst.N_PRIORITY == 90)
{
//判断相同终点的叠托任务是否存在,是否取货完成
var list = TaskHelper.GetTaskByEnd(mst.S_END_LOC);
var otherTask = list.Where(a => a.N_PRIORITY == 99).FirstOrDefault();
if (otherTask != null && !TaskHelper.CheckActionRecordExist(otherTask.S_TASK_NO, "4"))
{
TaskHelper.UpdateStatus(mst, "未执行");
result = true;
}
}
}
return result;
}
///
/// 推送任务-NDC参数标准版
///
/// 任务数据
///
internal static bool SendTaskStandard(WMSTask mst)
{
var result = false;
try
{
int TsNo = 1;//下发任务类型:默认(坯盖)-1,成品任务-5
var Extend1 = 0;//取货站点
var Extend2 = 0;//卸货站点
string Extend3 = "";//功能码 16进制转10进制
string Extend4 = "";//坯盖:托盘类型 即产即用1,非即产即用2 不区分为1 成品:取卸货层数(先单独转换为16进制,再拼接转换为10进制)
string Extend5 = mst.S_NOTE;//物料高度(品相) 根据工单物料到物料表获取下发TS的物料高度
string Extend6 = "";//托盘版型 备注:集化板 1,大板 2,小板 3,超托 4 根据工单版型转换为对应的值
int Extend7 = 0;//起点列
int Extend8 = 0;//终点列
int startLayer = mst.N_START_LAYER;// 起点取货层数
int endLayer = mst.N_END_LAYER;// 终点卸货层数
string workNo = mst.S_SRC_NO;// 工单号
string trayType = mst.S_CNTR_TYPE;//托盘类型-根据各自现场情况获取
var taskType = mst.S_TYPE;// 任务类型
var taskState = mst.S_B_STATE;// 任务状态
if (taskState == "未执行" || taskState == "待推送")
{
var db = new SqlHelper