using HH.WCS.Hexafluo.util;
using HH.WCS.Hexafluo.wms;
using HH.WCS.SJML.Bll;
using HH.WCS.SJML.Dto;
using HH.WCS.SJML.Entitys;
using HH.WCS.ZCQTJ.Dto;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
namespace HH.WCS.Hexafluo.core
{
///
/// 定时轮询任务
///
public class MesKtTask
{
private static object locko9 = new object();
///
/// 检查是否有自管任务,自动子任务
///
public static void MesKtTaskIssued()
{
try
{
lock (locko9)
{
var chi = new SqlHelper().GetInstance();
var newDb2 = chi.CopyNew();
DateTime currentTime = DateTime.Now;
TimeSpan fiveMinutes = TimeSpan.FromMinutes(5);
DateTime newTime = currentTime - fiveMinutes;
var transportTask1 = newDb2.Queryable().Where(e => e.NeedTrig == "Y").ToList();
if (transportTask1.Any())
{
//超时的全部处理
//foreach (var item in transportTask1.ToArray())
//{
// if (item.T_CREATE < currentTime.AddDays(-1))
// {
// try
// {
// newDb2.BeginTran();
// var I = newDb2.Updateable().SetColumns(it => new MesKtTaskDto()
// {
// NeedTrig = "N"
// }).Where(x => x.S_ID == item.S_ID).ExecuteCommand();
// LogHelper.DanInfo("任务下发", $"空托缓存任务{item.task_no} 超时1天没处理 系统自动处理");
// newDb2.CommitTran();
// }
// catch (Exception ex)
// {
// newDb2.RollbackTran();
// }
// }
//}
var transportTask = transportTask1.FindAll(e => e.Task_State == "智能空桶").ToList();
if (transportTask.Any())
{
transportTask = transportTask.OrderBy(e => e.T_CREATE).ToList();
foreach (var task in transportTask)
{
var gg = task.CreateDate;
DateTime cfff = gg + fiveMinutes;
if (currentTime > cfff)
{
BLLCreator.Create().MesKtTaskIssued(transportTask);
}
}
}
var transportTask2 = transportTask1.FindAll(e => e.Task_State == "接驳位至线边点对点").ToList();
if (transportTask2.Any())
{
var transportTask4 = transportTask2.GroupBy(e => e.Location_To).Select(d => d.First()).ToList();
transportTask4 = transportTask4.OrderBy(e => e.T_CREATE).ToList();
foreach (var sendTaskEntity in transportTask4)
{
LogHelper.DanInfo("MES", "接驳位至线边点对点 开始执行 任务号:" + JsonConvert.SerializeObject(sendTaskEntity.task_no));
var Kklock = newDb2.Queryable().Where(e => e.Autoindex == "空托自动出库到接驳位")?.First();
if (Kklock != null && Kklock.TransportLock == "Y")
{
var Stabit = newDb2.Queryable().Where(e => e.S_IS_USE == "N").ToList();
//去除有任务的托盘
if (Stabit.Count() > 0)
{
var State = new List { "完成", "取消" };
var tasks = newDb2.Queryable().Where(e => Stabit.Select(c => c.S_CNTR_CODE).ToList().Contains(e.S_CNTRS) && !State.Contains(e.S_B_STATE) && e.S_NOTE == "agv任务").ToList();
if (tasks.Count() > 0)
{
foreach (var item in tasks)
{
Stabit.RemoveAll(e => e.S_CNTR_CODE == item.S_CNTRS);
}
}
}
if (Stabit.Count > 0)
{
var fiff = Stabit.FirstOrDefault();
Stabit = Stabit.OrderBy(e => e.T_CREATE).ToList();
//走点对点
List outWorkAreas = new List
{
new OutWorkAreaEntity() {
taskNo=sendTaskEntity.task_no,
startBit = fiff.S_LOC_CODE,
endBit = sendTaskEntity.Location_To,
priority = sendTaskEntity.Priority,
trayCode= fiff.S_CNTR_CODE,
TaskOrderType = "MES点对点",
NoAssist = "Y",
S_TransAgv = "Y"
}
};
var transport = newDb2.Queryable().Where(e => e.Autoindex == "点对点任务管控")?.First();
List ListString = new List();
if (transport != null)
{
ListString = JsonConvert.DeserializeObject>(transport.TypeJson);
}
if (ListString.Contains(sendTaskEntity.Location_To))
{
List state = new List { "完成", "取消" };
var tasks = newDb2.Queryable().Where(e => e.S_END_LOC == sendTaskEntity.Location_To && !(state.Contains(e.S_B_STATE))).ToList();
if (tasks.Count > 0)
{
LogHelper.DanInfo("MES", "终点货位" + sendTaskEntity.Location_To + ",最多只能同时存在一条任务 任务" + JsonConvert.SerializeObject(tasks?.FirstOrDefault()?.S_TASK_NO));
throw new Exception("终点货位" + sendTaskEntity.Location_To + ",最多只能同时存在一条任务!" + JsonConvert.SerializeObject(tasks?.FirstOrDefault()?.S_TASK_NO));
}
}
var resulte = BLLCreator.CreateSingleton().OutWorkArea(outWorkAreas);
if (resulte.Success)
{
try
{
newDb2.BeginTran();
var I = newDb2.Updateable().SetColumns(it => new JbTrayNumberEntitys()
{
S_IS_USE = "Y"
}).Where(x => x.S_ID == fiff.S_ID).ExecuteCommand();
I = newDb2.Updateable().SetColumns(it => new MesKtTaskDto()
{
NeedTrig = "N"
}).Where(x => x.S_ID == sendTaskEntity.S_ID).ExecuteCommand();
newDb2.CommitTran();
}
catch (Exception ex)
{
LogHelper.DanInfo("MES", "点对点任务管控" + ex.Message);
newDb2.RollbackTran();
}
}
}
}
}
}
//胎圈出库缓存
var transportTask3 = transportTask1.FindAll(e => e.Task_State == "胎圈空托出库缓存").ToList();
if (transportTask3.Any())
{
var transportTask4 = transportTask3.GroupBy(e => e.Location_To).Select(d => d.First()).ToList();
foreach (var receuveTask in transportTask4)
{
MesTaskDto req = new MesTaskDto()
{
task_no = receuveTask.task_no,
Task_type = receuveTask.Task_type,
TurnCardNum = receuveTask.TurnCardNum,
PROD_NO = receuveTask.PROD_NO,
PROD_TECH = receuveTask.PROD_TECH,
PROD_SPEC = receuveTask.PROD_SPEC,
PROD_BOM = receuveTask.PROD_BOM,
PROD_Feature = receuveTask.PROD_Feature,
TOOLS_NO = receuveTask.TOOLS_NO,
ST_AMOUNT = receuveTask.ST_AMOUNT,
CURRENT_AMOUNT = receuveTask.CURRENT_AMOUNT,
Location_From = receuveTask.Location_From,
Location_To = receuveTask.Location_To,
PRODUCE_TIME = receuveTask.PRODUCE_TIME,
SHELF_LIFE_TIME = receuveTask.SHELF_LIFE_TIME,
EXPIRED_TIME = receuveTask.EXPIRED_TIME,
SHELF_REP = receuveTask.SHELF_REP,
EXPIRED_REP = receuveTask.EXPIRED_REP,
CHECK_CODE = receuveTask.CHECK_CODE,
CHECK_INFO = receuveTask.CHECK_INFO,
Priority = receuveTask.Priority,
Data_status = receuveTask.Data_status,
NeedTrig = "Y",
CreateDate = DateTime.Now,
standardWeight = receuveTask.standardWeight,
BUSI_TYPE = receuveTask.BUSI_TYPE,
TOOLS_TPYE = receuveTask.TOOLS_TPYE,
Givewayto = receuveTask.Task_PDA,
applyProdSpecList = receuveTask.applyProdSpecList,
frequency = 0
};
var resulte = BLLCreator.Create().ExecTransferTask(req);
if (resulte.Success)
{
try
{
newDb2.BeginTran();
var I = newDb2.Updateable().SetColumns(it => new MesKtTaskDto()
{
NeedTrig = "N"
}).Where(x => x.S_ID == receuveTask.S_ID).ExecuteCommand();
newDb2.CommitTran();
}
catch (Exception ex)
{
LogHelper.DanInfo("MES", "点对点任务管控" + ex.Message);
newDb2.RollbackTran();
}
}
}
}
}
}
}
catch (System.Exception ex)
{
LogHelper.DanInfo("MES", ex.Message);
}
}
}
}