using iWareCommon.Common.Globle; using iWareCommon.Utils; using iWareModel; using iWareSql; using iWareSql.DBModel; using iWareSql.Entity.ViewMode; using iWareSql.Orm; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; using XiGang.Core.Model; namespace iWareSql.DataAccess { /// /// 设备任务处理类 /// public class PartTaskHandler { /// /// 获取设备任务 /// /// public static Task_Part GetPartTask(DbModel edm, string taskId) { return edm.Task_Part.Where(x => x.Id == taskId).FirstOrDefault(); } /// /// 获取当前正在执行的设备任务 /// /// public static Task_Part GetCurrentDoingTask(int deviceId) { using (DbModel edm = new DbModel()) { return edm.Task_Part.Where(x => x.TaskState == (int)DeviceTaskStatusEnum.已下发 && x.DeviceId == deviceId).FirstOrDefault(); } } /// /// 是否存在 托盘 有任务占用 /// /// /// 托盘号 /// public static bool IsExistOtherTaskDoingForSalverCode(string salverCode) { using (DbModel edm = new DbModel()) { int num = edm.Task_Part.Where(x => (x.TaskState == (int)DeviceTaskStatusEnum.未开始 || x.TaskState == (int)DeviceTaskStatusEnum.已下发) && (x.SalverCode == salverCode ) ).Count(); return num > 0 ? true : false; } } /// /// 是否存在其他设备任务在占用该站点 /// /// /// 站点编号 /// public static bool IsExistOtherTaskDoing(string stationCode) { using (DbModel edm = new DbModel()) { int num = edm.Task_Part.Where(x => (x.TaskState == (int)DeviceTaskStatusEnum.未开始 || x.TaskState == (int)DeviceTaskStatusEnum.已下发) && (x.RealToPlace == stationCode || x.RealSourcePlace == stationCode) ).Count(); return num > 0 ? true : false; } } /// /// 是否存在其他设备任务在占用该站点 /// /// /// 站点编号 /// public static bool IsExistOtherTaskDoing(int stationId) { using (DbModel edm = new DbModel()) { int num = edm.Task_Part.Where(x => (x.TaskState == (int)DeviceTaskStatusEnum.未开始 || x.TaskState == (int)DeviceTaskStatusEnum.已下发) && (x.SourcePlace == stationId || x.ToPlace == stationId) ).Count(); return num > 0 ? true : false; } } /// /// 是否存在其他设备任务在占用该站点 /// /// /// /// public static bool IsExistOtherTaskDoing(DbModel edm, int placeId) { int num = edm.Task_Part.Where(x => (x.TaskState == (int)DeviceTaskStatusEnum.未开始 || x.TaskState == (int)DeviceTaskStatusEnum.已下发) && (x.SourcePlace == placeId || x.ToPlace == placeId) ).Count(); return num > 0 ? true : false; } /// /// 是否存在其他设备任务(根据任务类型) /// /// /// /// true:有任务占用,false:没有任务占用 public static bool IsExistOtherTaskDoingForDeviceTaskTypeEnum(DeviceTaskTypeEnum _deviceTaskTypeEnum) { using (DbModel edm = new DbModel()) { var queryTaskType = (int)_deviceTaskTypeEnum; int num = edm.Task_Part.Where(x => (x.TaskState == (int)DeviceTaskStatusEnum.未开始 || x.TaskState == (int)DeviceTaskStatusEnum.已下发) && (x.TaskType == queryTaskType) ).Count(); return num > 0 ? true : false; } } /// /// 创建一个设备任务 /// /// /// /// /// /// /// /// /// /// /// /// public static FunRetEntity CreatePartTask(DateTime createTime, string plcTaskNo, DbModel edm, EDeviceType deviceType, string userName, int taskSequence, DeviceTaskTypeEnum _DeviceTaskTypeEnum, Task_Main mainTask, Base_Salver salver, Base_Station sourcePlace, Base_Station toPlace, string description) { var validate_deviceByPlace = ""; switch (_DeviceTaskTypeEnum) { case DeviceTaskTypeEnum.出库: case DeviceTaskTypeEnum.立库空托到拆盘机入口: validate_deviceByPlace = sourcePlace.SrmStationCode; break; case DeviceTaskTypeEnum.组盘入库: case DeviceTaskTypeEnum.空托转运到立体库: validate_deviceByPlace = toPlace.SrmStationCode; break; } EDevice device = BusinessHelper.GetDeviceByPlaceNo(deviceType, validate_deviceByPlace); var sourcePlaceNo = StationHandler.GetStationCodeByDeviceType(sourcePlace, deviceType); var toPlaceNo = StationHandler.GetStationCodeByDeviceType(toPlace, deviceType); FunRetEntity fre = new FunRetEntity(); fre.result = true; var isEquipmentBreakdown1 = Wms_EquipmentSituationHandler.IsEquipmentBreakdown((int)device); if (isEquipmentBreakdown1.result) {//如果设备已经设定为 故障状态,不允许下发任务!!! [EditBy shaocx,2020-12-07] fre.result = false; fre.resMsg = isEquipmentBreakdown1.resMsg; return fre; } StationHandler.SetPlaceLockStatus(true, userName, ref sourcePlace, description); StationHandler.SetPlaceLockStatus(true, userName, ref toPlace, description); StationHandler.SetPlaceTaskDoingStatus(true, userName, ref sourcePlace, description); StationHandler.SetPlaceTaskDoingStatus(true, userName, ref toPlace, description); Task_Part tsk = new Task_Part() { Id = Guid.NewGuid().ToString(), InOutFlag = mainTask.InOutFlag, InOutFlagName = mainTask.InOutFlagName, DeviceType = (int)deviceType, DeviceTypeName = deviceType.ToString(), DeviceId = Convert.ToInt16(device), DeviceName = Convert.ToString(device), TaskSequence = taskSequence, MainTaskSequence = mainTask.TaskSequence,//增加主任务优先级 TaskDescribe = description, MainTaskId = mainTask.Id, MainTaskNo = mainTask.TaskNo, MaterialId = mainTask.MaterialId, Qty = mainTask.Qty,//增加数量 【EditBy shaocx,2022-05-01】 //增加 订货号和序列号的赋值 [Editby shaocx,2022-04-21] SerialNumber = mainTask.SerialNumber, OrderNo = mainTask.OrderNo, //ToNumber = toNumber, //TaskGuid = taskGuid, //MatID = MatID, //MatName = MatName, //Remark = "手动入库创建设备任务" + description, //Creator = "手动入库创建设备任务" + "," + Dns.GetHostName(), //UpdateUser = "手动入库创建设备任务" + "," + Dns.GetHostName(), CreateTime = createTime, ModifyTime = createTime, PlcTaskId = plcTaskNo, //ContainerId = ctn.ContainerId, SalverId = salver.Id, SalverCode = salver.SalverCode, SourcePlace = sourcePlace.Id, ToPlace = toPlace.Id, RealSourcePlace = sourcePlaceNo, RealToPlace = toPlaceNo, TaskName = string.Format("(来源:id-{0} no-{1},目标:id-{2} no-{3})", sourcePlace.Id, sourcePlaceNo, toPlace.Id, toPlaceNo), IsReleased = false, // IsCurrentTask = 0, IsFinished = false, //IsLastTask = 0, //Void = 0, TaskState = (int)DeviceTaskStatusEnum.未开始, TaskStateName = DeviceTaskStatusEnum.未开始.ToString(), TaskType = (int)_DeviceTaskTypeEnum, TaskTypeName = _DeviceTaskTypeEnum.ToString(), //增加物料类型 【EditBy shaocx,2022-05-04】 MaterialType = mainTask.MaterialType, MaterialTypeName = mainTask.MaterialTypeName, }; DoCreateSrmTask(edm, tsk); return fre; } private static bool DoCreateSrmTask(DbModel edm, Task_Part tsk) { edm.Task_Part.Add(tsk); return true; } /// /// 移除30天前的任务 /// /// public static void DeletePartTask(DbModel edm) { var queryTime = DateTime.Now.AddDays(-30); var queryTaskStaus1 = (int)DeviceTaskStatusEnum.已完成; var queryTaskStaus2 = (int)DeviceTaskStatusEnum.已取消; var removeList = edm.Task_Part.Where(x => x.CreateTime <= queryTime && (x.TaskState == queryTaskStaus1 || x.TaskState == queryTaskStaus2)).ToList(); if (removeList != null && removeList.Count > 0) { edm.Task_Part.RemoveRange(removeList); } var removeRecordList = edm.Task_RequestLog.Where(x => x.CreateTime <= queryTime).ToList(); if (removeRecordList != null && removeRecordList.Count > 0) { edm.Task_RequestLog.RemoveRange(removeRecordList); } } #region 更新 OperationRemark /// /// 表PartTask写入OperationRemark /// /// /// public static void WriteOperationRemarkForPartTask(string partTaskId, string errMsg) { try { using (DbModel edm = new DbModel()) { var item = edm.Task_Part.Where(x => x.Id == partTaskId).FirstOrDefault(); if (item != null) { item.OperationRemark = errMsg; item.ModifyTime = DateTime.Now; item.ModifyBy = SysGloble.WCSSystem; edm.SaveChanges(); } } } catch (Exception) { throw; } } ///// ///// 表PartTask写入OperationRemark ///// ///// ///// //private void WriteOperationRemarkForPartTaskList(string errMsg) //{ // try // { // using (DbModel edm = new DbModel()) // { // var queryLesTaskStatus = Convert.ToInt16(LesTaskStatusEnum.新建任务); // var pisList = edm.Task_Part.Where(x => // x.LesTaskStatus == queryLesTaskStatus).ToList(); // if (pisList != null && pisList.Count > 0) // { // foreach (var item in pisList) // { // item.OperationRemark = errMsg; // item.ModifyTime = DateTime.Now; // item.ModifyBy = SysGloble.WCSSystem; // } // edm.SaveChanges(); // } // } // } // catch (Exception) // { // throw; // } //} #endregion } }