using iWareCc.Cache.Entity;
using iWareCc.Conveyor.Entity;
using iWareCc.DecomposeTask.Entity;
using iWareCcTest.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 = Conveyor.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.isfinished = (int)EYesOrNo.是;
dTask.status = (int)EPartTaskStatus.已完成;
dTask.iscurrent = (int)EYesOrNo.否;
dTask.updatetime = DateTime.Now;
if (!string.IsNullOrEmpty(materila.wide))
{
sc.SendMaterialWindTask(materila.wide, materila.thick);
}
//删除库位物料绑定信息
var placeMaterial = dbModel.BASEPlaceMaterials.FirstOrDefault(x => x.materialid == materila.id && x.placeid == task.SourcePlaceId);
dbModel.BASEPlaceMaterials.Remove(placeMaterial);
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();
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);
}
}
}
}
}