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 { private static object Lock = new object(); private PartTaskService() : base(PartTaskDao.GetInstance()) { } private static PartTaskService Instance = null; /// /// 获取单例的方法 /// /// 用户服务的单例实体 public static PartTaskService GetInstance() { if (Instance == null) { lock (Lock) { if (Instance == null) { Instance = new PartTaskService(); } } } return Instance; } /// /// 强制完成当前阶段任务 /// /// /// /// 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; } } /// /// 重置当前阶段任务 /// /// /// /// 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; } } /// /// 强制删除当前阶段的任务 /// /// /// /// 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; } } /// /// 保存分阶段的任务 /// /// /// /// /// /// 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; } } } }