using HH.WCS.ZhongCeJinTan.api;
using HH.WCS.ZhongCeJinTan.core;
using HH.WCS.ZhongCeJinTan.device;
using HH.WCS.ZhongCeJinTan.dispatch;
using HH.WCS.ZhongCeJinTan.util;
using HH.WCS.ZhongCeJinTan.wms;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using static HH.WCS.ZhongCeJinTan.api.ApiModel;
using static System.Net.WebRequestMethods;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Collections;
using System.Threading;
using S7.Net;
using static System.Runtime.CompilerServices.RuntimeHelpers;
using System.Web.UI.WebControls.WebParts;
using static HH.WCS.ZhongCeJinTan.util.Settings;
using System.Security.Policy;
using HH.WCS.Mobox3.ZhongCeJinTan.dispatch;
using S7.Net.Types;
using System.Web.Services.Description;
using Container = HH.WCS.ZhongCeJinTan.wms.Container;
using static HH.WCS.ZhongCeJinTan.wms.WcsModel;
using Top.Api;
namespace HH.WCS.ZhongCeJinTan.process
{
internal class TaskProcess
{
#region 任务相关
//--------------------------------------------------任务相关--------------------------------------------------
///
/// 取货卸货完成,缓存位状态更新
///
///
///
internal static void CacheBitUpdate(WMSTask mst, bool load) {
var trayCarryCount = mst.N_CNTR_COUNT > 0 ? mst.N_CNTR_COUNT : 1;
if (load)
{
Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTR_CODE}");
LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_START_LOC}取货完成,起点解绑容器{mst.S_CNTR_CODE}");
LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList());
}
else
{
Console.WriteLine($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTR_CODE}");
LogHelper.Info($"任务{mst.S_CODE} 货位{mst.S_END_LOC}卸货完成,终点绑定容器{mst.S_CNTR_CODE}");
LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList());
}
}
///
/// 任务取消,缓存位状态更新
///
///
internal static void CacheBitCancelUpdate(WMSTask mst) {
LocationHelper.UnLockLoc(mst.S_START_LOC);
LocationHelper.UnLockLoc(mst.S_END_LOC);
}
///
/// 安全请求
///
///
///
///
///
internal static void OperateReq(string no, int state, string forkliftNo="", string extData="")
{
//1103呼叫空托 卸货 1104 呼叫空托 卸货完成
var mst = TaskHelper.GetTask(no);
if (state == 1103 || state == 1104)
{
LogHelper.Info($"任务号{no},卸货请求:{state}", "安全交互");
if (mst != null)
{
DeviceProcess.XieLiao(mst, forkliftNo, state);
}
else
{
LogHelper.Info($"没找到任务{no},交互请求失败", "安全交互");
}
}
else if (state == 1101 || state == 1102)
{
LogHelper.Info($"任务号{no},取货请求:{state}", "安全交互");
if (mst != null)
{
DeviceProcess.QuLiao(mst, forkliftNo, state);
}
else
{
LogHelper.Info($"没找到任务{no},交互请求失败", "安全交互");
}
}
else if (state == 1003)
{
var workFlow = TaskHelper.selectWorkFlowByType(mst.N_TYPE.ToString(), mst.TOOLSTYPE);
if (workFlow == null)
{
LogHelper.Info($"判断接驳位以及巷道是否可用,BUSI_TYpe:{mst.N_TYPE},没找到对应作业流程", "改道安全交互");
return;
}
var wcsTask = TaskHelper.GetTaskByWorkNo(mst.S_OP_CODE,"wcs");
if (wcsTask == null)
{
LogHelper.Info($"判断巷道可用失败,没找到对应{mst.S_OP_CODE}的wcs任务", "改道安全交互");
return;
}
//判断空托缓存、接驳位和巷道是否可用 不可用需要改道
changeBit(mst,wcsTask,workFlow);
}
else if (state == 1023 || state == 1025)
{
//开关关门申请
DeviceProcess.Door(mst, forkliftNo, state);
}
else if (state == 1004) {
LogHelper.Info($"等待交互,任务号={mst.S_CODE}", "安全交互");
var wcsCode = "";
if (mst.S_TYPE.Contains("入库")|| mst.S_TYPE.Contains("回库"))
{
wcsCode = mst.S_CODE.Replace(@"_1", "_2");
}
if (mst.S_TYPE.Contains("出库"))
{
wcsCode = mst.S_CODE.Replace(@"_2", "_1");
}
LogHelper.Info($"等待交互,查询校验任务号={wcsCode}", "安全交互");
//等待rfid校验
var rfidFlag = TaskHelper.GetRfid(wcsCode);
LogHelper.Info($"等待交互,任务号={mst.S_CODE},RFID校验信息"+JsonConvert.SerializeObject(rfidFlag), "安全交互");
if (rfidFlag!=null)
{
if (rfidFlag.S_RESULT.Contains("成功"))
{
LogHelper.Info($"任务号={mst.S_CODE},等待交管成功,修改参数6为1", "安全交互");
NDCApi.ChangeOrderParam(mst.S_CODE, 6, "1");
}
else {
var startSite = LocationHelper.GetAgvSiteZc(mst.S_START_LOC);
var endSite = LocationHelper.GetAgvSiteZc(mst.S_END_LOC);
LogHelper.Info($"任务{mst.S_CODE}RFID校验失败,改参数1为{startSite},改参数2为{endSite},参数4为0,6为1", "改道安全交互");
NDCApi.ChangeOrderParam(mst.S_CODE, 1, startSite);
NDCApi.ChangeOrderParam(mst.S_CODE, 2, endSite);
NDCApi.ChangeOrderParam(mst.S_CODE, 4, "0");
NDCApi.ChangeOrderParam(mst.S_CODE, 6, "1");
}
}
}
}
internal static bool CreateWmsWork(WmsWork work)
{
try
{
var db = new SqlHelper