using HH.WCS.JunzhouNongfu.device;
using HH.WCS.Mobox3.YNJT_BZP.api;
using HH.WCS.Mobox3.YNJT_BZP.dispatch;
using HH.WCS.Mobox3.YNJT_BZP.models;
using HH.WCS.Mobox3.YNJT_BZP.process;
using HH.WCS.Mobox3.YNJT_BZP.util;
using HH.WCS.Mobox3.YNJT_BZP.wms;
using Newtonsoft.Json;
using Org.BouncyCastle.Asn1.X509;
using S7.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Threading.Tasks;
using static HH.WCS.Mobox3.YNJT_BZP.api.AgvController;
using static HH.WCS.Mobox3.YNJT_BZP.api.ApiModel;
using static HH.WCS.Mobox3.YNJT_BZP.dispatch.GtDispatch;
namespace HH.WCS.Mobox3.YNJT_BZP.core {
internal class WCSCore {
public static void OperateAgvTaskStatus(AgvTaskState model) {
try
{
if (string.IsNullOrEmpty(model.No))
{
LogHelper.Info("任务号为空", "AGV");
}
else
{
var TN_Task = WCSHelper.GetTask(model.No);
if (TN_Task != null)
{
bool isExist = WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, model.State);
if (!isExist)
{
WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
if (model.State <= 7)
{
//有任务号请求
switch (model.State)
{
case 1:
WCSHelper.Begin(TN_Task);
break;
#region MyRegion
case 3:
WCSHelper.UpdateStatus(TN_Task, "开始取货");
break;
case 4:
WCSHelper.UpdateStatus(TN_Task, "取货完成");
TaskProcess.OperateStatus(TN_Task, 4);
break;
case 5:
WCSHelper.UpdateStatus(TN_Task, "开始卸货");
break;
case 6:
TaskProcess.OperateStatus(TN_Task, 6);
WCSHelper.UpdateStatus(TN_Task, "卸货完成");
break;
#endregion
case 2:
WCSHelper.End(TN_Task);
var cntrItemRels = ContainerHelper.GetCntrItemRel(TN_Task.S_CNTR_CODE);
if (cntrItemRels.Count > 0)
{
string shift = ApiHelper.getShift(DateTime.Now.TimeOfDay);
string ydate_shiftName = "";
if (shift == "III")
{
ydate_shiftName = DateTime.Now.AddDays(-1).ToString("yy/MM/dd") + "-" + shift;
}
else
{
ydate_shiftName = DateTime.Now.ToString("yy/MM/dd") + "-" + shift;
}
WmsToGtLokasiModel wmsToGtLokasiModel = new WmsToGtLokasiModel()
{
ydate_shiftName = ydate_shiftName,
bc_entried = cntrItemRels[0].S_CG_ID,
loc_from = TN_Task.S_START_LOC,
loc_to = TN_Task.S_END_LOC,
qty = 1,
lot = 1,
scantime = TN_Task.T_CREATE.ToString("yyyy-MM-dd HH:mm:ss"),
pic = model.ForkliftNo
};
GtDispatch.agvTaskFeedback(wmsToGtLokasiModel);
}
break;
case 7:
//判断是否收到过强制取消,有就不做任何处理
if (!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 17))
{
TaskProcess.OperateStatus(TN_Task, 7);
WCSHelper.Cancel(TN_Task);
}
break;
}
}
else if (model.State == 2001)
{
//申请新终点
string endLoc = AGVApplyEndLoc(model.No);
}
else
{
//安全请求等
TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
}
}
}
}
}
catch (Exception ex)
{
LogHelper.Info($"agv回报错误,错误原因:{ex.Message}", "AGV");
}
}
///
/// 创建最后一个任务
///
///
///
/// 1.入库 2.出库
///
public static bool createLastTask(string startLocCode , WMSTask mst ,int actType)
{
LogHelper.Info("创建下一段任务", "WMS");
var startLoc = LocationHelper.GetLoc(startLocCode);
if (startLoc != null)
{
string cntrCode = "";
string scheduleType = "";
if (actType == 1)
{
var locCntrRels = LocationHelper.GetLocCntr(startLocCode);
if (locCntrRels.Count > 0)
{
foreach (var cntr in locCntrRels)
{
cntrCode = cntrCode + ","+ cntr.S_CNTR_CODE;
}
cntrCode = cntrCode.Substring(1, cntrCode.Length-1);
}
scheduleType = "WCS";
}
if (actType == 2)
{
cntrCode = mst.S_CNTR_CODE;
scheduleType = "AGV";
}
// 创建一段入库任务
WCSTask wcsTask = new WCSTask()
{
S_OP_NAME = mst.S_OP_DEF_NAME,
S_OP_CODE = mst.S_CODE,
S_CODE = WCSHelper.GenerateTaskNo(),
S_CNTR_CODE = cntrCode,
S_TYPE = mst.S_TYPE + "-2",
S_START_LOC = startLoc.S_CODE,
S_START_AREA = startLoc.S_AREA_CODE,
S_END_LOC = mst.S_END_LOC,
S_END_AREA = mst.S_END_AREA,
S_SCHEDULE_TYPE = scheduleType,
N_PRIORITY = mst.N_PRIORITY,
T_START_TIME = DateTime.Now,
};
if (WCSHelper.CreateTask(wcsTask))
{
// 起点、接驳点、终点加锁
LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
WMSHelper.UpdateTaskEnd(mst);
return true;
}
}
return false;
}
///
/// 任务分发,根据调度类型发给不同的调度系统
///
internal static void Dispatch() {
var db = new SqlHelper