using HH.WCS.Mobox3.FJJF.models;
using HH.WCS.Mobox3.FJJT.api;
using HH.WCS.Mobox3.FJJT.device;
using HH.WCS.Mobox3.FJJT.models;
using HH.WCS.Mobox3.FJJT.process;
using HH.WCS.Mobox3.FJJT.util;
using HH.WCS.Mobox3.FJJT.wms;
using NLog.Fluent;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using static HH.WCS.Mobox3.FJJT.api.ApiHelper;
using static HH.WCS.Mobox3.FJJT.util.Settings;
namespace HH.WCS.Mobox3.FJJT.core
{
///
/// 定时轮询任务
///
internal class Monitor
{
///
/// 监听钢包满料下线MES任务
///
public static void MonitorGBOffLineMesTask()
{
var mesTaskList = WMSHelper.GetLjMesTaskList("PENDING");
if (mesTaskList.Count > 0)
{
mesTaskList = mesTaskList.Where(a => a.MSG_TYPE == "1" && a.PALLET_TYPE == "7").ToList();
if (mesTaskList.Count > 0)
{
foreach (var mesTask in mesTaskList)
{
LogHelper.Info("MES钢包满料下线任务", "WMS");
OffLineRequest request = new OffLineRequest() { loc = mesTask.POSITION_ID, cntrNo = mesTask.PALLET_ID };
ApiHelper.offLineProcess(request);
}
}
}
}
///
/// 监听成型机叫料MES任务
///
public static void MonitorCXJCallMaterialMesTask()
{
var mesTaskList = WMSHelper.GetLjMesTaskList("PENDING");
if (mesTaskList.Count > 0)
{
mesTaskList = mesTaskList.Where(a => a.MSG_TYPE == "0").ToList();
if (mesTaskList.Count > 0)
{
foreach (var mesTask in mesTaskList)
{
var lineSideLoc = WMSHelper.GetLineSideLoc(mesTask.EQP);
if (lineSideLoc != null)
{
LogHelper.Info($"成型机叫料任务,MES任务ID:{mesTask.ID}", "WMS");
if (mesTask.PALLET_TYPE == "5" || mesTask.PALLET_TYPE == "6")
{
// 2.1成新机叫料(斜裁)
var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID);
if (xcTask == null)
{
ApiHelper.callMaterialXC(mesTask.MATERIAL_CODE, mesTask.POSITION_ID, mesTask.ID);
}
}
else
{
// 2.2 成新机叫料
ApiHelper.callMaterial(mesTask.MATERIAL_CODE, mesTask.EQP, mesTask.ID);
}
}
}
}
}
}
///
/// 监听任务中间表
///
public static void MonitorXcTask()
{
var ljMesTasks = WMSHelper.GetLjMesTaskListHD();
foreach (var mesTask in ljMesTasks)
{
var xcTask = WMSHelper.GetLjXcTaskById(mesTask.ID);
if (xcTask != null && xcTask.RETURN_CODE != mesTask.RETURN_CODE)
{
if (xcTask.RETURN_CODE == "3")
{
var wcsTask = WCSHelper.GetTask(xcTask.AGVORDER_ID);
if (wcsTask != null)
{
var wmsTask = WMSHelper.GetWmsTask(wcsTask.S_OP_CODE);
if (wmsTask != null)
{
Location startLoc = LocationHelper.GetLoc(xcTask.POSITION_ID);
if (startLoc != null)
{
wcsTask.S_CNTR_CODE = xcTask.PALLET_ID;
wcsTask.S_START_LOC = startLoc.S_CODE;
wcsTask.S_START_AREA = startLoc.S_AREA_CODE;
wcsTask.N_B_STATE = 0;
wcsTask.S_B_STATE = "等待";
WCSHelper.UpdateWcsTask(wcsTask);
wmsTask.S_CNTR_CODE = xcTask.PALLET_ID;
wmsTask.S_START_LOC = startLoc.S_CODE;
wmsTask.S_START_AREA = startLoc.S_AREA_CODE;
wmsTask.N_B_STATE = 1;
wmsTask.S_B_STATE = "执行";
WMSHelper.UpdateWmsTask(wmsTask);
// 查询托盘物料信息表
WMSHelper.updateCarrier(mesTask.PALLET_ID);
}
}
}
}
mesTask.POSITION_ID = xcTask.POSITION_ID;
mesTask.RETURN_CODE = xcTask.RETURN_CODE;
mesTask.YCL_BATCH = xcTask.YCL_BATCH;
mesTask.PALLET_ID = xcTask.PALLET_ID;
WMSHelper.updateLjMesTask(mesTask);
}
}
}
///
/// 自动补充空工装到接驳位
///
public static void AutoReplenishEmptyPallet()
{
var logicConfigs = WMSHelper.getLogicConfigByTaskType("3");
if (logicConfigs != null && logicConfigs.Count > 0)
{
foreach (var item in logicConfigs)
{
var jbLoc = LocationHelper.GetLoc(item.S_LKKTJBLOC);
var wmsTask = WMSHelper.GetWmsTaskByEnd(item.S_LKKTJBLOC);
if (wmsTask == null && jbLoc.N_CURRENT_NUM == 0)
{
LogHelper.Info($"非直连接驳位:{jbLoc.S_CODE},需要补充空工装", "WMS");
Location startLoc = WMSHelper.getOutStockStartLoc(item.S_AREA_CODE, null);
if (startLoc != null)
{
var locCntrRels = LocationHelper.GetLocCntr(startLoc.S_CODE);
wmsTask = new WMSTask()
{
S_CNTR_CODE = locCntrRels[0].S_CNTR_CODE,
S_CODE = WMSHelper.GenerateTaskNo(),
S_START_LOC = startLoc.S_CODE,
S_START_AREA = startLoc.S_AREA_CODE,
S_END_LOC = jbLoc.S_CODE,
S_END_AREA = jbLoc.S_AREA_CODE,
S_TYPE = "空工装自动出库任务",
S_OP_DEF_NAME = "自动补充空工装到接驳位",
T_START_TIME = DateTime.Now,
};
if (WMSHelper.CreateWmsTask(wmsTask))
{
WCSTask wcsTask = new WCSTask()
{
S_OP_NAME = wmsTask.S_OP_DEF_NAME,
S_OP_CODE = wmsTask.S_CODE,
S_CODE = WCSHelper.GenerateTaskNo(),
S_CNTR_CODE = wmsTask.S_CNTR_CODE,
S_TYPE = wmsTask.S_TYPE,
S_START_LOC = startLoc.S_CODE,
S_START_AREA = startLoc.S_AREA_CODE,
S_END_LOC = jbLoc.S_CODE,
S_END_AREA = jbLoc.S_AREA_CODE,
S_SCHEDULE_TYPE = "WCS",
N_PRIORITY = 10,
T_START_TIME = DateTime.Now,
};
if (WCSHelper.CreateTask(wcsTask))
{
// 起点、终点加锁
LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
// 更新作业任务状态
wmsTask.N_B_STATE = 1;
WMSHelper.UpdateTaskState(wmsTask);
}
}
}
else
{
WMSHelper.addAlarmRecord("流程异常", "高", $"非直连接驳位:{jbLoc.S_CODE}补充空工装失败,原因:库区:{item.S_AREA_CODE}没有空工装");
}
}
}
}
}
///
/// 中转库空工装周转c厂
/// 1.监听MES任务,查询入库中转库的任务
/// 2.查询是否创建对应的空工装出库任务
/// 3.没有,则查询中转库数量满足是否创建出库任务
///
public static void ZZKInStockTaskMonitor() {
}
///
/// 监听MES托盘与物料信息表 、基础物料信息表
///
public static void MonitorPalletAndMateral()
{
// 1.监听MES托盘物料绑定关系表,更新容器物料表
LogHelper.Info("监听托盘物料绑定关系表,更新容器物料表", "WMS");
WMSHelper.updatePalletAndMateral();
// 2.监听MES物料表,更新物料信息
LogHelper.Info("监听物料表,更新物料信息", "WMS");
WMSHelper.updateMateral();
}
///
/// 定时更新库存信息 更新频率: 1分钟
///
public static void UpdateInventoryRegularly()
{
var db = new SqlHelper