using iWareCommon.Common.EnumType;
|
using iWareCommon.Common.Service;
|
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 iWareDataCore.TASK.Service
|
{
|
public class PartTaskService : CommonService<PartTaskEntity, TASKPartTask, DbModelCore>
|
{
|
private static object Lock = new object();
|
|
private PartTaskService() : base(PartTaskDao.GetInstance()) { }
|
|
private static PartTaskService Instance = null;
|
|
/// <summary>
|
/// 获取单例的方法
|
/// </summary>
|
/// <returns>用户服务的单例实体</returns>
|
public static PartTaskService GetInstance()
|
{
|
|
if (Instance == null)
|
{
|
lock (Lock)
|
{
|
if (Instance == null)
|
{
|
Instance = new PartTaskService();
|
}
|
}
|
}
|
return Instance;
|
}
|
|
/// <summary>
|
/// 强制完成当前阶段任务
|
/// </summary>
|
/// <param name="paskid"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool FinishPartTask(int paskid,out string msg)
|
{
|
|
try
|
{
|
using (var dbMode = new DbModelCore())
|
{
|
var parttask = dbMode.TASKPartTasks.FirstOrDefault(x => x.id == paskid);
|
if (parttask != null)
|
{
|
if(parttask.isfinished==(int)EYesOrNo.是)
|
{
|
msg = "已完成的任务,无需强制完成!";
|
return false;
|
}
|
parttask.isfinished = (int)EYesOrNo.是;
|
parttask.status = (int)EPartTaskStatus.已完成;
|
parttask.updatetime = DateTime.Now;
|
parttask.iscurrent = (int)EYesOrNo.否;
|
parttask.isreleased = (int)EYesOrNo.是;
|
|
var placeMaterialViews = dbMode.BASEPlaceMaterialViews.FirstOrDefault(y => y.placeid == parttask.sourceplaceid && y.materialcode == parttask.materialcode);
|
var sourcePlace = dbMode.BASEPlaces.FirstOrDefault(x => x.id == parttask.sourceplaceid);
|
var toPlace = dbMode.BASEPlaces.FirstOrDefault(x => x.id == parttask.toplaceid);
|
sourcePlace.isexecute = (int)EYesOrNo.否;
|
sourcePlace.status = (int)EPlaceStatus.空库位;
|
sourcePlace.islock = (int)EYesOrNo.否;
|
toPlace.isexecute = (int)EYesOrNo.否;
|
toPlace.islock = (int)EYesOrNo.否;
|
|
BASEPlaceMaterial pm = new BASEPlaceMaterial();
|
if (parttask.maintasktype == (int)EMainTaskType.出库任务)//出库任务
|
{
|
toPlace.status = (int)EPlaceStatus.空库位;
|
if (placeMaterialViews != null)
|
{
|
pm = dbMode.BASEPlaceMaterials.FirstOrDefault(x => x.placeid == placeMaterialViews.placeid && x.materialid == placeMaterialViews.materialid);
|
dbMode.BASEPlaceMaterials.Remove(pm);
|
}
|
}
|
else//入库任务
|
{
|
if (placeMaterialViews != null)
|
{
|
pm = dbMode.BASEPlaceMaterials.FirstOrDefault(x => x.placeid == placeMaterialViews.placeid && x.materialid == placeMaterialViews.materialid);
|
pm.placeid = parttask.toplaceid;
|
pm.updatetime = DateTime.Now;
|
|
}
|
else
|
{
|
toPlace.status = (int)EPlaceStatus.有货;
|
var material = dbMode.BASEMaterialViews.FirstOrDefault(y => y.code == parttask.materialcode);
|
pm = new BASEPlaceMaterial()
|
{
|
placeid = parttask.toplaceid,
|
materialid = material.id,
|
createtime = DateTime.Now,
|
updatetime = DateTime.Now,
|
};
|
dbMode.BASEPlaceMaterials.Add(pm);
|
}
|
}
|
msg = "";
|
dbMode.SaveChanges();
|
return true;
|
|
}
|
else
|
{
|
msg = "未找到指定任务!";
|
return false;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 重置当前阶段任务
|
/// </summary>
|
/// <param name="paskid"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool ResetPartTask(int paskid, out string msg)
|
{
|
|
try
|
{
|
using (var dbMode = new DbModelCore())
|
{
|
msg = "";
|
var parttask = dbMode.TASKPartTasks.FirstOrDefault(x => x.id == paskid);
|
if (parttask != null)
|
{
|
if(parttask.isfinished==(int)EYesOrNo.是)
|
{
|
msg = "已完成的任务,不可重置!";
|
return false;
|
}
|
|
parttask.status = (int)EPartTaskStatus.未开始;
|
parttask.updatetime = DateTime.Now;
|
parttask.iscurrent = (int)EYesOrNo.否;
|
parttask.isreleased = (int)EYesOrNo.否;
|
parttask.voidlabel = (int)EYesOrNo.否;
|
parttask.handletimes = 0;
|
dbMode.SaveChanges();
|
return true;
|
|
}
|
else
|
{
|
msg = "未找到指定任务!";
|
return false;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
return false;
|
}
|
}
|
|
|
|
/// <summary>
|
/// 强制删除当前阶段的任务
|
/// </summary>
|
/// <param name="paskid"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool DeletePartTask(int paskid, out string msg)
|
{
|
|
try
|
{
|
using (var dbMode = new DbModelCore())
|
{
|
var parttask = dbMode.TASKPartTasks.FirstOrDefault(x => x.id == paskid);
|
if (parttask != null)
|
{
|
|
msg = "";
|
dbMode.TASKPartTasks.Remove(parttask);
|
dbMode.SaveChanges();
|
return true;
|
|
}
|
else
|
{
|
msg = "未找到指定任务!";
|
return false;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
return false;
|
}
|
}
|
/// <summary>
|
/// 保存分阶段的任务
|
/// </summary>
|
/// <param name="materialcode"></param>
|
/// <param name="toplace"></param>
|
/// <param name="tasktype"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public bool SavePartTask(string materialcode, string toplace, string tasktype, out string msg)
|
{
|
try
|
{
|
using (var dbMode = new DbModelCore())
|
{
|
var material = dbMode.BASEMaterials.FirstOrDefault(x => x.code == materialcode);
|
var placematerial = dbMode.BASEPlaceMaterialViews.FirstOrDefault(x => x.materialcode == materialcode);
|
var chakeemptyplace = dbMode.BASEEmptyPlaceViews.FirstOrDefault(x => x.code == toplace);
|
BASEPlace sourceplaces = new BASEPlace(); ;
|
BASEPlace toplaces = new BASEPlace();
|
if (material == null)
|
{
|
msg = "您输入的物料系统中找不到!";
|
return false;
|
}
|
if (int.Parse(tasktype) == (int)EMainTaskType.出库任务 || int.Parse(tasktype) == (int)EMainTaskType.移库任务)
|
{
|
if (placematerial == null)
|
{
|
msg = "您输入的物料不在库中无法出库或移库!";
|
return false;
|
}
|
}
|
if (int.Parse(tasktype) == (int)EMainTaskType.出库任务)
|
{
|
sourceplaces = dbMode.BASEPlaces.FirstOrDefault(x => x.id == placematerial.placeid);
|
toplaces = dbMode.BASEPlaces.FirstOrDefault(x => x.typeid == 7);
|
|
}
|
if (int.Parse(tasktype) == (int)EMainTaskType.移库任务)
|
{
|
if (chakeemptyplace == null)
|
{
|
msg = "您输入的目标库位不为空!";
|
return false;
|
}
|
else
|
{
|
sourceplaces = dbMode.BASEPlaces.FirstOrDefault(x => x.id == placematerial.placeid);
|
var emptyplace=dbMode.BASEEmptyPlaceViews.FirstOrDefault();
|
toplaces = dbMode.BASEPlaces.FirstOrDefault(x => x.id == emptyplace.id);
|
}
|
}
|
if (int.Parse(tasktype) == (int)EMainTaskType.入库任务)
|
{
|
sourceplaces = dbMode.BASEPlaces.FirstOrDefault(x => x.typeid == 1);
|
var emptyplace = dbMode.BASEEmptyPlaceViews.FirstOrDefault();
|
toplaces = dbMode.BASEPlaces.FirstOrDefault(x => x.id == emptyplace.id);
|
}
|
PartTaskEntity partTask = new PartTaskEntity
|
{
|
Type = (int)EPartTaskType.堆垛机任务,
|
MainTaskId = -1,
|
MainTaskType = int.Parse(tasktype),
|
TaskNo = DateTime.Now.ToFileTimeUtc().ToString(),
|
SysCode = "1",
|
ExecutionSequence = 1,
|
SourcePlace = sourceplaces.code,
|
SourcePlaceId = sourceplaces.id,
|
SourcePosx = (int)sourceplaces.row,
|
SourcePosy = (int)sourceplaces.layer,
|
SourcePosz = (int)sourceplaces.col,
|
ToPlace = toplaces.code,
|
ToPlaceId = toplaces.id,
|
ToPosx = (int)toplaces.row,
|
ToPosy = (int)toplaces.layer,
|
ToPosz = (int)toplaces.col,
|
Status = (int)EPartTaskStatus.未开始,
|
CreateTime = DateTime.Now,
|
UpdateTime = DateTime.Now,
|
EquipId = 1,
|
EquipName = Enum.GetName(typeof(EEquipmentCnName), EEquipmentCnName.stacker1),
|
TaskProcessStatus = (int)ESrmState.未知,
|
VoidLabel = (int)EYesOrNo.否,
|
Priority = 100,
|
IsMoveTask = (int)EYesOrNo.否,
|
ProcessCardNumber = "",
|
PackageNo = "",
|
MaterialCode = materialcode,
|
Quantity = 1
|
};
|
dbMode.TASKPartTasks.Add(partTask.ToOrm());
|
if (dbMode.SaveChanges() > 0)
|
{
|
msg = "";
|
return true;
|
}
|
else
|
{
|
msg = "添加任务失败!";
|
return false;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
msg = ex.Message;
|
return false;
|
}
|
}
|
|
}
|
}
|