using HH.WCS.JunzhouNongfu.device;
using HH.WCS.Mobox3.TSSG.device;
using HH.WCS.Mobox3.TSSG.dispatch;
using HH.WCS.Mobox3.TSSG.models;
using HH.WCS.Mobox3.TSSG.process;
using HH.WCS.Mobox3.TSSG.util;
using HH.WCS.Mobox3.TSSG.wms;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Threading.Tasks;
using static HH.WCS.Mobox3.TSSG.api.ApiModel;
namespace HH.WCS.Mobox3.TSSG.core {
internal class WCSCore {
public static void OperateAgvTaskStatus(AgvTaskState model) {
if (string.IsNullOrEmpty(model.No)) {
var alertorDevice = Settings.alertorLightInfos.Where(a => a.deviceNo == int.Parse(model.LockNo)).FirstOrDefault();
if (model.State == 1023)
{
var result = HH.WCS.Mobox3.TSSG.device.TcpClient.SendHexOnce(alertorDevice.address, 502, alertorDevice.turnLight);
LogHelper.Info("modbus 返回信号:" + result, "TSSG");
}
if (model.State == 1025)
{
var result = HH.WCS.Mobox3.TSSG.device.TcpClient.SendHexOnce(alertorDevice.address, 502, alertorDevice.offLight);
LogHelper.Info("modbus 返回信号:" + result, "TSSG");
}
}
else {
var TN_Task = WCSHelper.GetTask(model.No);
if (TN_Task != null) {
bool isExist = WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, model.State);
if (!isExist) {
if (model.State <= 7)
{
var deviceInfo = Settings.getDeviceInfo(TN_Task.S_START_LOC);
//有任务号请求
switch (model.State)
{
case 1:
if (!model.ForkliftNo.Equals("0"))
{
TN_Task.S_EQ_NO = model.ForkliftNo;
}
WCSHelper.Begin(TN_Task);
break;
#region MyRegion
case 3:
WCSHelper.UpdateStatus(TN_Task, "开始取货");
if (deviceInfo != null)
{
string hexString = "3F 00 11 0D 0A";
byte[] before = hexString
.Split(' ')
.Select(s => Convert.ToByte(s, 16)) // 使用基数16转换
.ToArray();
TcpServer.TcpServerSend(deviceInfo.address, before);
}
break;
case 4:
WCSHelper.UpdateStatus(TN_Task, "取货完成");
TaskProcess.OperateStatus(TN_Task, 4);
if (deviceInfo != null)
{
string hexString = "3F 00 10 0D 0A";
byte[] back = hexString
.Split(' ')
.Select(s => Convert.ToByte(s, 16)) // 使用基数16转换
.ToArray();
TcpServer.TcpServerSend(deviceInfo.address, back);
}
break;
case 5:
WCSHelper.UpdateStatus(TN_Task, "开始卸货");
WCSHelper.UpdateStatus(TN_Task, "卸货完成");
TaskProcess.OperateStatus(TN_Task, 6);
if (TN_Task.S_OP_NAME == "移库单移库")
{
var startLoc = LocationHelper.GetLoc(TN_Task.S_START_LOC);
var endLoc = LocationHelper.GetLoc(TN_Task.S_END_LOC);
TN_YiKuDetail detail = new TN_YiKuDetail()
{
S_NO = TN_Task.S_OP_CODE,
S_START_AREA = startLoc.S_AREA_CODE,
S_START_ROW = startLoc.N_ROW,
S_END_AREA = endLoc.S_AREA_CODE,
S_END_ROW = endLoc.N_ROW
};
WMSHelper.updateShiftOrderDetail(detail);
}
WCSHelper.End(TN_Task);
break;
case 6:
break;
#endregion
case 2:
// 修改工单状态
/* WCSHelper.UpdateWorkOrderStatus(TN_Task.S_OP_CODE, "已完成");*/
break;
case 7:
//判断是否收到过强制取消,有就不做任何处理
if (!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 17))
{
TaskProcess.OperateStatus(TN_Task, 7);
WCSHelper.Cancel(TN_Task);
}
break;
}
WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
//调用第三方接口(如果有)TaskProcess.ReportStatus
}
else
{
//安全请求等
TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData );
}
}
}
}
}
///
/// 任务分发,根据调度类型发给不同的调度系统
///
internal static void Dispatch() {
var db = new SqlHelper