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 Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;
namespace HH.WCS.Hexafluo.core
{
///
/// 自动出库空托
///
public class AutoTransportTask
{
private static object locko2 = new object();
///
/// 自动出库空托
///
public static void CheckCamera()
{
try
{
lock (locko2)
{
var chi = new SqlHelper().GetInstance();
var newDb = chi.CopyNew();
var Kklock = chi.Queryable().Where(e => e.Autoindex == "空托自动出库到接驳位")?.First();
if (Kklock != null && Kklock.TransportLock == "Y")
{
var transportTask = chi.Queryable().Where(e => e.Autoindex == "空托自动出库到接驳位")?.First();
var TaryJb = JsonConvert.DeserializeObject>(transportTask.TypeJson);
LogHelper.DanInfo("出库到接驳位", $"配置 {JsonConvert.SerializeObject(TaryJb)}");
var State = new List { "完成", "取消" };
var TaskList = newDb.Queryable().Where(e => e.S_NOTE == "立库任务" && TaryJb.Select(c => c.S_LOC_CODE).ToList().Contains(e.S_END_LOC) && e.S_TYPE == "出库" && !State.Contains(e.S_B_STATE))
.ToList();
if (TaskList.Count() > 0)
{
TaskList.RemoveAll(e => e.S_TASK_NO.Contains("_"));
}
foreach (var t in TaryJb)
{
var bg = chi.Queryable().Where(e => e.S_LOC_CODE == t.S_LOC_CODE && e.S_IS_USE == "N").ToList();
int fftask = 0;
//查询对应的任务数是多少
if (TaskList.Count > 0)
{
fftask = TaskList.FindAll(e => e.S_END_LOC == t.S_LOC_CODE).ToList().Count();
}
if ((bg.Count() + fftask) < 2)
{
List outWorkAreaList = new List();
OutWorkAreaEntity outWorkArea = new OutWorkAreaEntity();
outWorkArea.endBit = t.S_LOC_CODE;
outWorkArea.TaskFlow = t.S_TASK_FLOWNO;
outWorkArea.TrayType = t.S_TRAY_TYPE;
outWorkAreaList.Add(outWorkArea);
BLLCreator.CreateSingleton().OutWorkArea(outWorkAreaList);
}
var bg2 = chi.Queryable().Where(e => e.S_LOC_CODE == t.S_LOC_CODE && e.S_IS_USE == "Y").ToList();
if (bg.Count > 2)//查询是否是人工将托盘取走
{
var ggf = bg2.OrderBy(e => e.T_CREATE).ToList();
try
{
newDb.BeginTran();
var I = newDb.Deleteable().Where(e => e.S_ID == ggf.FirstOrDefault().S_ID).ExecuteCommand();
if (I == 0)
{
throw new System.Exception("");
}
newDb.CommitTran();
}
catch (System.Exception ex)
{
newDb.RollbackTran();
throw;
}
// AloneWcsTaskUnbingEntitys unbin = new AloneWcsTaskUnbingEntitys();
//unbin.S_TASK_NO = BLLCreator.Create().TaskNo("CK");
//unbin.JbLocation = t.S_LOC_CODE;
//var re = BLLCreator.CreateSingleton().WcsCvstate(unbin);
//if (re.Success)
//{
// try
// {
// newDb.BeginTran();
// var I = newDb.Deleteable().Where(e => e.S_ID == ggf.FirstOrDefault().S_ID).ExecuteCommand();
// if (I == 0)
// {
// throw new System.Exception("");
// }
// newDb.CommitTran();
// }
// catch (System.Exception ex)
// {
// newDb.RollbackTran();
// throw;
// }
//}
}
}
}
if (Kklock == null)
{
FunctionEntitys function = new FunctionEntitys();
function.Autoindex = "空托自动出库到接驳位";
function.TransportLock = "N";
try
{
newDb.BeginTran();
newDb.Insertable(function).ExecuteCommand();
newDb.CommitTran();
}
catch (System.Exception ex)
{
newDb.RollbackTran();
throw;
}
}
}
}
catch (System.Exception ex)
{
LogHelper.DanInfo("出库到接驳位", ex.Message);
}
}
}
}