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.EnumType;
using iWareDataCore.ORM;
using iWareDataCore.TASK.Dao;
using iWareDataCore.TASK.EnumType;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWareCc.FinishConveyorTask.Chain
{
public class 查看物料是否到输送机末端: IHandler
{
///
/// 该节点的下一个节点
///
private IHandler nextHandler = null;
public IHandler NextHandler
{
set { nextHandler = value; }
}
private ConveyorEntity Conveyor;
///
/// 任务容器
///
private PartTaskContainer DecompositionTaskContainer;
public 查看物料是否到输送机末端(ConveyorEntity conveyor, PartTaskContainer decompositionTaskContainer)
{
this.Conveyor = conveyor;
this.DecompositionTaskContainer = decompositionTaskContainer;
}
public void Handle()
{
using (var dbModel = new DbModelCore())
{
try
{
var task = DecompositionTaskContainer.PartTask;
var gate = Conveyor.Gates.FirstOrDefault(y => y.Place.Id == task.ToPlaceId);
var gatesource = Conveyor.Gates.FirstOrDefault(y => y.Place.Id == task.SourcePlaceId);
gatesource.TaskId = "";
if (gate.Place.PlaceTypeName!="gate12")
{
if (gate == null || !gate.ROccupied)
{
LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送机任务/" + Conveyor.Equipment.EquipName, "查看托盘是否到输送机末端:{0}", "端口未到位");
return;
}
}
if (gate.RIsEmpty)
{
LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送机任务/" + Conveyor.Equipment.EquipName, "查看托盘是否到输送机末端:{0}", "未检测到有钢材");
return;
}
task.IsFinished = (int)EYesOrNo.是;
task.Status = (int)EPartTaskStatus.已完成;
task.UpdateTime = DateTime.Now;
task.IsCurrent = (int)EYesOrNo.否;
LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送机任务/" + Conveyor.Equipment.EquipName, "查看托盘是否到输送机末端:{0}", task.Id.ToString());
var placeMaterialViews = dbModel.BASEPlaceMaterialViews.FirstOrDefault(y => y.placeid == task.SourcePlaceId && y.materialcode == task.MaterialCode);
var sourcePlace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == task.SourcePlaceId);
var toPlace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == task.ToPlaceId);
sourcePlace.isexecute = (int)EYesOrNo.否;
sourcePlace.status = (int)EPlaceStatus.空库位;
sourcePlace.islock = (int)EYesOrNo.否;
toPlace.isexecute = (int)EYesOrNo.否;
toPlace.islock = (int)EYesOrNo.否;
toPlace.status = (int)EPlaceStatus.空库位;
BASEPlaceMaterial pm = new BASEPlaceMaterial();
if (task.MainTaskType == (int)EMainTaskType.出库任务)//出库任务
{
if (placeMaterialViews != null)
{
pm = dbModel.BASEPlaceMaterials.FirstOrDefault(x => x.placeid == placeMaterialViews.placeid && x.materialid == placeMaterialViews.materialid);
}
if (pm.id>0)
{
dbModel.BASEPlaceMaterials.Remove(pm);
}
if (gate.Place.PlaceTypeName == "gate22")//端口有货才发送退库任务
{
if (!gate.RIsEmpty && gate.ROccupied)//gate21已经发送了滚动任务并且已经到了gate22
{
if (!gate.SendGateTask()) //如果发送失败,则发送失败
{
gate.SendGateTask();
}
}
}
}
else//入库任务
{
if (placeMaterialViews != null)
{
pm = dbModel.BASEPlaceMaterials.FirstOrDefault(x => x.placeid == placeMaterialViews.placeid && x.materialid == placeMaterialViews.materialid);
pm.placeid = task.ToPlaceId;
pm.updatetime = DateTime.Now;
}else
{
var material = dbModel.BASEMaterialViews.FirstOrDefault(y => y.code == task.MaterialCode);
pm = new BASEPlaceMaterial()
{
placeid=task.ToPlaceId,
materialid = material.id,
createtime=DateTime.Now,
updatetime = DateTime.Now,
};
dbModel.BASEPlaceMaterials.Add(pm);
}
}
PartTaskDao.GetInstance().Update(task, dbModel);
LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送机任务/" + Conveyor.Equipment.EquipName, "查看托盘是否到输送机末端:{0}", "任务完成");
if (nextHandler != null)
{
nextHandler.Handle();
}
}
catch (Exception ex)
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message);
}
}
}
}
}