using iWareCc.Cache.Entity;
using iWareCc.DecomposeTask.Entity;
using iWareCcTest.Properties;
using iWareCc.Srm.Entity;
using iWareCommon.Common.Entity;
using iWareCommon.Common.EnumType;
using iWareCommon.Utils;
using iWareDataCore.BASE.EnumType;
using iWareDataCore.DEV.EnumType;
using iWareDataCore.ORM;
using iWareDataCore.TASK.Dao;
using iWareDataCore.TASK.Entity;
using iWareDataCore.TASK.EnumType;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace iWareCc.FinishStackerTask.Chain
{
public class 将完成结果更新至数据库 : IHandler
{
///
/// 该节点的下一个节点
///
private IHandler nextHandler = null;
public IHandler NextHandler
{
set { nextHandler = value; }
}
private StackerEntity Stacker;
///
/// 任务容器
///
private PartTaskContainer DecompositionTaskContainer;
public 将完成结果更新至数据库(StackerEntity stacker, PartTaskContainer decompositionTaskContainer)
{
this.Stacker = stacker;
this.DecompositionTaskContainer = decompositionTaskContainer;
}
public void Handle()
{
using (var dbModel = new DbModelCore())
{
try
{
var task = DecompositionTaskContainer.PartTask;
var parttasklst=dbModel.TASKPartTasks.Where(x => x.isfinished == (int)EYesOrNo.否 && x.islots == 1).ToList();
if (parttasklst != null && parttasklst.Count>0)
{
if (parttasklst.Count == 1 && parttasklst[0].id == task.Id)//如果批次入的只剩下当前的任务则退出批次模式
{
CacheEntity.IsLots = false;
}
else
{
CacheEntity.IsLots = true;
}
}
task.IsFinished = (int)EYesOrNo.是;
task.Status = (int)EPartTaskStatus.已完成;
task.UpdateTime = DateTime.Now;
task.IsCurrent = (int)EYesOrNo.否;
///如果当前任务的排数在
if (task.IsLots==0&& !CacheEntity.IsLots)//不是批次
{
if (((task.ToPosx == 2 || task.ToPosx == 6) && task.ToPosy <= 7) || task.MainTaskType == (int)EMainTaskType.出库任务)
{
BASEPlace toplace = new BASEPlace();
BASEPlace sorplace = new BASEPlace();
int soueplaceid = task.ToPlaceId;
sorplace = dbModel.BASEPlaces.FirstOrDefault(x => x.id == soueplaceid);
if (task.ToPosx == 2)//2154
{
toplace = dbModel.BASEPlaces.FirstOrDefault(x => x.code == "21004");
}
else if (task.ToPosx == 6) //61512
{
toplace = dbModel.BASEPlaces.FirstOrDefault(x => x.code == "61012");
}
else
{
toplace = dbModel.BASEPlaces.FirstOrDefault(x => x.code == "21004");
sorplace = dbModel.BASEPlaces.FirstOrDefault(x => x.code == "20104");
}
string stackerName = Enum.GetName(typeof(EEquipmentCnName), EEquipmentCnName.stacker1);
var PartTask = new PartTaskEntity
{
Type = (int)EPartTaskType.堆垛机任务,
MainTaskId = -1,
MainTaskType = 4,//代表仅升高货叉,不实际放货的任务
TaskNo = DateTime.Now.ToFileTimeUtc().ToString(),
SysCode = "1",
ExecutionSequence = 1,
SourcePlace = sorplace.code,
SourcePlaceId = sorplace.id,
SourcePosx = sorplace.row,
SourcePosy = sorplace.layer,
SourcePosz = sorplace.col,
ToPlace = toplace.code,
ToPlaceId = toplace.id,
ToPosx = (int)toplace.row,
ToPosy = (int)toplace.layer,
ToPosz = (int)toplace.col,
Status = (int)EPartTaskStatus.未开始,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
EquipId = 1,
EquipName = stackerName,
TaskProcessStatus = (int)ESrmState.未知,
VoidLabel = (int)EYesOrNo.否,
Priority = 200,
IsMoveTask = (int)EYesOrNo.否,
ProcessCardNumber = "",
PackageNo = "",
MaterialCode ="",
Quantity = 1
};
dbModel.TASKPartTasks.Add(PartTask.ToOrm());
}
}
if (task.MainTaskType!=4)
{
var fromPlace = dbModel.BASEPlaces.FirstOrDefault(y => y.id == task.SourcePlaceId);
if (fromPlace != null)
{
fromPlace.isexecute = (int)EYesOrNo.否;
fromPlace.islock = (int)EYesOrNo.否;
fromPlace.status = (int)EPlaceStatus.空库位;
}
var toPlace = dbModel.BASEPlaces.FirstOrDefault(y => y.id == task.ToPlaceId);
if (toPlace != null)
{
toPlace.isexecute = (int)EYesOrNo.否;
toPlace.islock = (int)EYesOrNo.否;
toPlace.status = (int)EPlaceStatus.有货;
}
var placeMaterialViews = dbModel.BASEPlaceMaterialViews.FirstOrDefault(y => y.placeid == task.SourcePlaceId && y.materialcode == task.MaterialCode);
if (placeMaterialViews != null)
{
var placeMaterial = dbModel.BASEPlaceMaterials.FirstOrDefault(x => x.placeid == placeMaterialViews.placeid && x.materialid == placeMaterialViews.materialid);
placeMaterial.placeid = task.ToPlaceId;
placeMaterial.updatetime = DateTime.Now;
}
}
PartTaskDao.GetInstance().Update(task, dbModel);
LogTextHelper.WriteLine(Resources.LogDir + @"/完成堆垛机任务/" + Stacker.Equipment.EquipName, "将完成结果更新至数据库:{0}", "保存成功");
if (nextHandler != null)
{
nextHandler.Handle();
}
}
catch (Exception ex)
{
LogTextHelper.WriteLine(Resources.LogDir + @"/完成堆垛机任务/" + Stacker.Equipment.EquipName, "将完成结果更新至数据库:{0}", ex.Message);
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message);
}
}
}
}
}