using HH.WCS.Mobox3.DoubleCoin.device;
using HH.WCS.Mobox3.DoubleCoin.dispatch;
using HH.WCS.Mobox3.DoubleCoin.process;
using HH.WCS.Mobox3.DoubleCoin.util;
using HH.WCS.Mobox3.DoubleCoin.wms;
using Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using static HH.WCS.Mobox3.DoubleCoin.api.ApiModel;
namespace HH.WCS.Mobox3.DoubleCoin.core
{
internal class WCSCore
{
public static ReturnResult OperateAgvTaskStatus(AgvTaskState model)
{
var result = new ReturnResult();
try
{
if (model.state == 1023 || model.state == 1025)
{
//无任务号请求(交管,交通管理-开门关门,无任务号)
if(!DeviceProcess.OpenOrCloseDoor(model.lock_no, model.state))
{
result.ResultCode = 2;
result.ResultMsg = $"TCP通讯写入失败,安全门编号{model.lock_no},状态{model.state}";
LogHelper.Info(result.ResultMsg, "API");
return result;
}
}
else if (model.state == 1012)
{
Task task5 = Task.Run(() =>
{
PostScanCode(model.task_no, model.forklift_no);//反馈扫码结果
});
}
else if (model.state == 1004)//称重货位起点终点更改(余料回库和拆盘回库)
{
Task task6 = Task.Run(() =>
{
UpdateStartEnd(model.forklift_no);
});
}
else if (model.state == 1103)
{
Task task7 = Task.Run(() =>
{
CheckWeightDevice(model.forklift_no);
});
}
else
{
var TN_Task = WCSHelper.GetTask(model.task_no);//根据当前model编号查询任务
if (TN_Task != null)
{
if (model.state <= 8)
{
//有任务状态请求
switch (model.state)
{
case 1:
WCSHelper.Begin(TN_Task, model.forklift_no);//已推送的任务的状态改成执行
Task task4 = Task.Run(() =>
{
OpenScanCode(model.task_no, model.forklift_no);//开启扫码
});
break;
case 3:
WCSHelper.UpdateStatus(TN_Task, "开始取货");//任务状态改成开始取货
break;
case 4:
WCSHelper.UpdateStatus(TN_Task, "取货完成");//任务状态改成取货完成
TaskProcess.OperateStatus(TN_Task, 4);//起点容器货位解绑,解锁起点
Task task3 = Task.Run(() =>
{
EmptyInStackArea(TN_Task);
});
Task task1 = Task.Run(() =>
{
returnS7Ok(TN_Task);
});
break;
case 5:
WCSHelper.UpdateStatus(TN_Task, "开始卸货");//任务状态改成开始卸货
break;
case 6:
WCSHelper.UpdateStatus(TN_Task, "卸货完成");//任务状态改成卸货完成
TaskProcess.OperateStatus(TN_Task, 6);//终点容器货位绑定,解锁终点
Task task2 = Task.Run(() =>
{
if (TN_Task.S_TYPE == "空托出库入线")
{
var ip = Settings.ProductionLines.FirstOrDefault(a => a.PointIn == TN_Task.S_END_LOC).ProductionLine_IP;
if (!Settings.S7TestMoni)
{
S7Helper.WriteBytes(ip, 10, 2, new byte[] { 0, 11, 1 });
}
}
});
Task task29 = Task.Run(() =>
{
if (TN_Task.S_TYPE == "余料下线入库")
{
SpecHelper.UpdateSurplusDetail(TN_Task.S_CODE);
}
});
Task task30 = Task.Run(() =>
{
if (TN_Task.S_TYPE.Contains("回炉"))
{
SpecHelper.UpdateRemeltDetail(TN_Task.S_CODE);
}
});
Task task31 = Task.Run(() =>
{
if (TN_Task.S_TYPE == "满托出库上线")
{
SpecHelper.UpdateComponentDetail(TN_Task.S_CODE);
}
});
Task task12 = Task.Run(() =>
{
if (TN_Task.S_TYPE == "PDA满托下线入库" || TN_Task.S_TYPE == "PLC满托下线入库")
{
SpecHelper.UpdateComponentDetail(TN_Task.S_CODE);
}
});
break;
case 2:
WCSHelper.End(TN_Task);//任务状态改成结束
break;
case 7:
Task task10 = Task.Run(() =>
{
if (TN_Task.S_TYPE == "满托下线入库")
{
TaskProcess.OperateStatus(TN_Task, 7);//异常处理
}
else if(TN_Task.S_TYPE == "满托出库上线")
{
WCSHelper.Fail(TN_Task);//任务状态改成错误
LocationHelper.UnLockLoc(TN_Task.S_END_LOC);
if (!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 4))
{
LocationHelper.UnLockLoc(TN_Task.S_START_LOC);
}
}
});
break;
case 8:
Task task11 = Task.Run(() =>
{
if (TN_Task.S_TYPE == "满托下线入库")
{
var res = NDCApi.CancelOrder(TN_Task.S_CODE);
if (res != null && (res.err_code ==50002 || res.err_code == 0))
{
TaskProcess.OperateStatus(TN_Task, 7);//异常处理
}
else
{
LogHelper.Info($"异常和取消操作 请求结果失败{res}");
}
}
else
{
var res = NDCApi.CancelOrder(TN_Task.S_CODE);
if (res != null && (res.err_code == 50002 || res.err_code == 0))
{
WCSHelper.Fail(TN_Task);//任务状态改成错误
LocationHelper.UnLockLoc(TN_Task.S_END_LOC);
if (!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 4))
{
LocationHelper.UnLockLoc(TN_Task.S_START_LOC);
}
}
else
{
LogHelper.Info($"异常和取消操作 请求结果失败{res}");
}
}
});
break;
}
WCSHelper.AddActionRecord(model.task_no, model.state, model.forklift_no, model.ext_data);
//调用第三方接口(如果有)TaskProcess.ReportStatus,添加任务动作关系表
}
else
{
//安全请求等
TaskProcess.OperateReq(model.task_no, model.state, model.forklift_no, model.ext_data);
}
}
else
{
result.ResultCode = 1;
result.ResultMsg = $"根据Model.No未找到对应的任务,{model.task_no}";
LogHelper.Info(result.ResultMsg,"API");
return result;
}
}
result.ResultCode = 0;
result.ResultMsg = "success";
LogHelper.Info(result.ResultMsg, "API");
return result;
}
catch(Exception ex)
{
result.ResultCode = -1;
result.ResultMsg = $"发生了异常:+{ex.Message}";
LogHelper.Info(result.ResultMsg, "Error");
return result;
}
}
///
/// 校验称重设备
///
///
private static void CheckWeightDevice(string forklift_no)
{
try
{
var db = new SqlHelper