using iWareCc.Cache.Entity;
using iWareCc.Conveyor.Entity;
using iWareCc.DecomposeTask.Entity;
using iWareCc.Properties;
using iWareCommon.Common.Entity;
using iWareCommon.Common.EnumType;
using iWareCommon.Utils;
using iWareDataCore.BASE.Entity;
using iWareDataCore.BASE.EnumType;
using iWareDataCore.ORM;
using iWareDataCore.TASK.EnumType;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace iWareCc.DoConveyorTaskAuto.Chain
{
public class 发送输送机任务 : IHandler
{
///
/// 该节点的下一个节点
///
private IHandler nextHandler = null;
public IHandler NextHandler
{
set { nextHandler = value; }
}
///
/// 任务容器
///
private PartTaskContainer DecompositionTaskContainer;
private ConveyorEntity Conveyor;
///
/// 构造函数
///
/// 结果容器
/// WIP任务容器
public 发送输送机任务(ConveyorEntity conveyor, PartTaskContainer decompositionTaskContainer)
{
this.DecompositionTaskContainer = decompositionTaskContainer;
this.Conveyor = conveyor;
}
public void Handle()
{
using (var dbModel = new DbModelCore())
{
try
{
var task = DecompositionTaskContainer.PartTask;
var gate = Conveyor.Gates.FirstOrDefault(x => x.Place.Id == task.SourcePlaceId);
var dTask = dbModel.TASKPartTasks.FirstOrDefault(x => x.id == task.Id);
if (gate.Place.PlaceTypeName == "gate21")//gate21-gate22的任务并不需要gate22反馈
{
var sc = CacheEntity.Conveyors.First(x => x.Equipment.EquipName == "conveyor1").Gates.FirstOrDefault(x => x.Place.PlaceTypeName == "sc");
var materila = dbModel.BASEMaterials.FirstOrDefault(x => x.code == task.MaterialCode);
dTask.isreleased = (int)EYesOrNo.是;
dTask.ishandled = (int)EYesOrNo.是;
dTask.voidlabel = (int)EYesOrNo.否;
dTask.status = (int)EPartTaskStatus.执行中;
dTask.iscurrent = (int)EYesOrNo.是;
dTask.updatetime = DateTime.Now;
//if (!string.IsNullOrEmpty(materila.wide))
//{
// if (!sc.SendMaterialWindTask(materila.wide, materila.thick))
// {
// sc.SendMaterialWindTask(materila.wide, materila.thick);
// }
//}
//删除库位物料绑定信息
var placeMaterial = dbModel.BASEPlaceMaterials.FirstOrDefault(x => x.materialid == materila.id && x.placeid == task.SourcePlaceId);
if (placeMaterial!=null)
{
dbModel.BASEPlaceMaterials.Remove(placeMaterial);
}
var inoutlistdetail = dbModel.BASEInOutListDetailViews.FirstOrDefault(x => x.isfinish == 0 && x.typename == "出库" && x.materialid == dTask.maintaskid);
if (inoutlistdetail!=null)
{
var inout = dbModel.BASEInOutListDetails.FirstOrDefault(x => x.id == inoutlistdetail.id);
if (inout!=null)
{
inout.isfinish = 1;
}
}
var splace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == task.SourcePlaceId);
splace.status = 0;
splace.isexecute = 0;
splace.islock = 0;
var tplace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == task.ToPlaceId);
tplace.status = 0;
tplace.isexecute = 0;
tplace.islock = 0;
}
else
{
dTask.isreleased = (int)EYesOrNo.是;
dTask.status = (int)EPartTaskStatus.执行中;
dTask.iscurrent = (int)EYesOrNo.是;
dTask.updatetime = DateTime.Now;
var toPlace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == dTask.toplaceid);
toPlace.isexecute = (int)EYesOrNo.是;
toPlace.islock = (int)EYesOrNo.是;
toPlace.status = (int)EPlaceStatus.执行中;
}
var flag=gate.SendGateTask();
if (!flag)
{
gate.WPutFinishSymbol = false;
LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0},{1}", task.Id, flag);
return;
}
gate.TaskId = dTask.id.ToString(); ;
// var flag1 = gate.SendTaskId(task.Id.ToString());
// LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0},{1}", task.Id, "准备发放完成信号");
// Thread.Sleep(1000);
// var flag2 = gate.SendOk();
// LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0},{1}", task.Id, "完成信号发送完毕");
//if (!flag1 || !flag2)
// {
// gate.WPutFinishSymbol = false;
// LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0},{1}", task.Id, flag1 || flag2);
// return;
// }
dbModel.SaveChanges();
if (gate.Place.PlaceTypeName == "gate21")
{
gate.Canceled = true;//临时用来标记给gate22用来发送一次收到到位的确认反馈
}
gate.WPutFinishSymbol = false;
LogTextHelper.WriteLine(Resources.LogDir + @"/自动执行输送机任务流程/" + Conveyor.Equipment.EquipName, "发送输送机任务:{0}", task.Id);
if (nextHandler != null)
{
nextHandler.Handle();
}
}
catch (Exception ex)
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message);
}
}
}
}
}