using IWareCC.CacheInfo.Container;
using IWareCC.Conveyor.Entity;
using IWareCC.Extend;
using IWareCC.ORM;
using IWareCC.Properties;
using IWareCC.wmsService;
using IWareCommon.Enum.Common;
using IWareCommon.Help;
using IWareCommon.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IWareCC.Conveyor.Handle.FinishConveyorTaskAuto
{
public class 将输送线完成结果更新至数据库 : IHandler
{
///
/// 该节点的下一个节点
///
private IHandler nextHandler = null;
public IHandler NextHandler
{
set { nextHandler = value; }
}
private ConveyorEntity Conveyor;
///
/// 任务容器
///
private PartTaskContainer DecompositionTaskContainer;
public 将输送线完成结果更新至数据库(PartTaskContainer decompositionTaskContainer)
{
this.DecompositionTaskContainer = decompositionTaskContainer;
}
public void Handle()
{
using (var dbModel = new DbModel())
{
try
{
var task = DecompositionTaskContainer.DecompositionTask;
var parttask = dbModel.PartTasks.FirstOrDefault(x => x.isfinished == (int)EYesOrNo.否 && x.id == task.id);
parttask.isfinished = (int)EYesOrNo.是;
parttask.status = (int)EPartTaskStatus.已完成;
parttask.finishTime = DateTime.Now;//完成时间 【EditBy shaocx,2022-09-18】
parttask.updatetime = DateTime.Now;
parttask.iscurrent = (int)EYesOrNo.否;
parttask.filereason = "";
var maintask = dbModel.MainTasks.OrderByDescending(x => x.id).FirstOrDefault(x => x.id == parttask.maintaskid);
if (maintask != null)
{
if (parttask.nexthandel == (int)ENextHandelTask.已全部完成)
{
maintask.finishstatus = 1;//任务已经全部完成,使用枚举 EMainTaskFinishstatus
}
#region 入库高度检测处理
if ((parttask.sourceplace == "1021" && parttask.toplace == "1022") || (parttask.sourceplace == "1026" && parttask.toplace == "1027"))
{
if (task.heighttype != 0)//根据接收到的获取高度调取接口获取目标库位信息以及那个立库
{
IapitestClient iapservice = new IapitestClient();
//发送wms的任务ID 【EditBy shaocx,2022-09-22】
int wmsTaskId = 0;
if (maintask.wmsTaskId != null)
{
wmsTaskId = Convert.ToInt32(maintask.wmsTaskId);
}
string toplace = iapservice.getToPlace(int.Parse(maintask.taskno), task.containertype, task.heighttype, wmsTaskId);
LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送线任务/" + "Line" + parttask.sourceplace, "高度是{0}Wcf返回位置{1}", task.heighttype, string.IsNullOrEmpty(toplace) ? "无目标位置" : toplace);
if (!string.IsNullOrEmpty(toplace))//获取到了目标库位任务号和目标库位
{
maintask.heighttype = task.heighttype;
maintask.toplace = toplace.Substring(2);
maintask.storageno = int.Parse(toplace.Substring(0, 1));
parttask.targetplace = toplace.Substring(2);
parttask.storageno = int.Parse(toplace.Substring(0, 1));
parttask.heighttype = task.heighttype;
}
else
{
maintask.finishstatus = 3;//,使用枚举 EMainTaskFinishstatus
parttask.nexthandel = (int)ENextHandelTask.已全部完成;
parttask.ishandled = (int)EYesOrNo.是;
PartTask otparttask = new PartTask
{
maintaskid = task.id,
maintasktype = task.maintasktype,
executionsequence = 1,
sourceplace = task.toplace,
status = (int)EPartTaskStatus.开始执行,
createtime = DateTime.Now,
updatetime = DateTime.Now,
voidlabel = (int)EYesOrNo.否,
priority = 100,
ismovetask = (int)EYesOrNo.否,
packageno = "0000",
taskcode = NumberHelp.GenerateRandomCode(),
targetplace = "0",
containertype = task.containertype,
toplace = task.sourceplace,
heighttype = (int)task.heighttype,
storageno = task.storageno,
ishandled = (int)EYesOrNo.是,
eqtype = (int)EPartTaskType.输送线任务,
type = (int)ENextHandelTask.入库处库口出库输送线任务,
nexthandel = (int)ENextHandelTask.已全部完成
};
if (task.toplace == "1027")
{
otparttask.toplace = "1026";
otparttask.eqid = (int)EDeviceId.Line1027号输送线;
otparttask.eqname = EDeviceId.Line1027号输送线.ToString();
}
else
{
otparttask.toplace = "1021";
otparttask.eqid = (int)EDeviceId.Line1022号输送线;
otparttask.eqname = EDeviceId.Line1022号输送线.ToString();
}
dbModel.PartTasks.Add(otparttask);
}
}
LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送线任务/" + "Line" + parttask.sourceplace, "高度是{0}位置{1}", task.heighttype, parttask.toplace);
}
#endregion
}
dbModel.SaveChanges();
LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送线任务/" + "Line" + parttask.sourceplace, "将完成结果更新至数据库:{0}", "保存成功");
if (nextHandler != null)
{
nextHandler.Handle();
}
}
catch (Exception ex)
{
//LogTextHelper.WriteLine(Resources.LogDir + @"/完成输送线任务/" + Conveyor.ConveyorName, "将完成结果更新至数据库:{0}", ex.Message);
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "Handle", ex.Message);
}
}
}
}
}