|
@@ -1,5 +1,4 @@
|
|
|
-using DBHelper;
|
|
|
-using ServiceCenter.Extensions;
|
|
|
+using ServiceCenter.Extensions;
|
|
|
using System.ComponentModel;
|
|
|
using WCS.Core;
|
|
|
using WCS.Entity;
|
|
@@ -63,41 +62,41 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//判断完成任务号是否大于0
|
|
|
if (obj.Data2.TaskFinishiId > 0)
|
|
|
{
|
|
|
- Db.Do(db =>
|
|
|
- {
|
|
|
- //根据DB521任务号获取对应任务
|
|
|
- var task = db.Default.Queryable<WCS_TASK>().First(v => v.ID == obj.Data2.TaskFinishiId) ?? throw new KnownException($"未找到任务{obj.Data2.TaskFinishiId}", LogLevelEnum.High);
|
|
|
- if (task.STATUS != Entity.TaskStatus.StackerExecution)
|
|
|
- throw new KnownException($"任务{task.ID}状态是{task.STATUS.Description()}.堆垛机完成任务需要对应任务状态处于堆垛机执行中", LogLevelEnum.High);
|
|
|
- //根据任务类型做不同的处理
|
|
|
- switch (task.TYPE)
|
|
|
- {
|
|
|
- case TaskType.EnterDepot:
|
|
|
- //完成任务
|
|
|
- task.STATUS = Entity.TaskStatus.Finish;
|
|
|
- task.UPDATETIME = DateTime.Now;
|
|
|
- task.ENDTIME = DateTime.Now;
|
|
|
- task.AddWCS_TASK_DTL(db, task.ADDRTO, "入库任务结束");
|
|
|
- break;
|
|
|
-
|
|
|
- case TaskType.OutDepot:
|
|
|
- task.STATUS = Entity.TaskStatus.ConveyorInProgress;
|
|
|
- task.UPDATETIME = DateTime.Now;
|
|
|
- task.AddWCS_TASK_DTL(db, task.SRMSTATION, "出库任务到达放货站台");
|
|
|
- break;
|
|
|
-
|
|
|
- case TaskType.TransferDepot:
|
|
|
- task.STATUS = Entity.TaskStatus.Finish;
|
|
|
- task.UPDATETIME = DateTime.Now;
|
|
|
- task.ENDTIME = DateTime.Now;
|
|
|
- task.AddWCS_TASK_DTL(db, task.ADDRTO, "移库任务结束");
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- db.Default.Updateable(task).AddQueue();
|
|
|
- db.Default.SaveQueues();
|
|
|
- obj.Data.OkAck = 1;
|
|
|
- });
|
|
|
+ //Db.Do(db =>
|
|
|
+ //{
|
|
|
+ // //根据DB521任务号获取对应任务
|
|
|
+ // var task = db.Default.Queryable<WCS_TASK>().First(v => v.ID == obj.Data2.TaskFinishiId) ?? throw new KnownException($"未找到任务{obj.Data2.TaskFinishiId}", LogLevelEnum.High);
|
|
|
+ // if (task.STATUS != Entity.TaskStatus.StackerExecution)
|
|
|
+ // throw new KnownException($"任务{task.ID}状态是{task.STATUS.Description()}.堆垛机完成任务需要对应任务状态处于堆垛机执行中", LogLevelEnum.High);
|
|
|
+ // //根据任务类型做不同的处理
|
|
|
+ // switch (task.TYPE)
|
|
|
+ // {
|
|
|
+ // case TaskType.EnterDepot:
|
|
|
+ // //完成任务
|
|
|
+ // task.STATUS = Entity.TaskStatus.Finish;
|
|
|
+ // task.UPDATETIME = DateTime.Now;
|
|
|
+ // task.ENDTIME = DateTime.Now;
|
|
|
+ // task.AddWCS_TASK_DTL(db, task.ADDRTO, "入库任务结束");
|
|
|
+ // break;
|
|
|
+
|
|
|
+ // case TaskType.OutDepot:
|
|
|
+ // task.STATUS = Entity.TaskStatus.ConveyorInProgress;
|
|
|
+ // task.UPDATETIME = DateTime.Now;
|
|
|
+ // task.AddWCS_TASK_DTL(db, task.SRMSTATION, "出库任务到达放货站台");
|
|
|
+ // break;
|
|
|
+
|
|
|
+ // case TaskType.TransferDepot:
|
|
|
+ // task.STATUS = Entity.TaskStatus.Finish;
|
|
|
+ // task.UPDATETIME = DateTime.Now;
|
|
|
+ // task.ENDTIME = DateTime.Now;
|
|
|
+ // task.AddWCS_TASK_DTL(db, task.ADDRTO, "移库任务结束");
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // db.Default.Updateable(task).AddQueue();
|
|
|
+ // db.Default.SaveQueues();
|
|
|
+ // obj.Data.OkAck = 1;
|
|
|
+ //});
|
|
|
}
|
|
|
|
|
|
//堆垛机是否可以下发任务
|
|
@@ -112,64 +111,64 @@ namespace WCS.WorkEngineering.Systems
|
|
|
int enterOrOut = 1;
|
|
|
|
|
|
//再检查是否有等待执行的货物
|
|
|
- Db.Do(db =>
|
|
|
- {
|
|
|
- //获取当前堆垛机的所有未完成任务
|
|
|
- var tasks = db.Default.Queryable<WCS_TASK>().Where(v => v.STATUS < Entity.TaskStatus.Finish && (v.DEVICE == obj.Entity.Code));
|
|
|
- //任务集合是否有处于堆垛机执行状态的任务
|
|
|
- if (tasks.Any(v => v.STATUS == Entity.TaskStatus.StackerExecution)) throw new KnownException($"有任务处于堆垛机执行状态", LogLevelEnum.High);
|
|
|
-
|
|
|
- //判断是否存在调整优先级任务
|
|
|
- if (!tasks.Any(v => v.TYPE != TaskType.TransferDepot && v.STATUS < Entity.TaskStatus.StackerExecution && v.Priority > 0))
|
|
|
- {
|
|
|
- //不存在调整优先级任务,判断是否存在移库任务
|
|
|
- isTransfer = tasks.Any(v => v.TYPE == TaskType.TransferDepot && v.STATUS == Entity.TaskStatus.NewBuild);
|
|
|
- }
|
|
|
- else //存在调整优先级任务
|
|
|
- {
|
|
|
- //获取出库任务中新建状态最大优先级
|
|
|
- var outPriorityNewBuild = tasks.Where(v => v.TYPE == TaskType.OutDepot && v.STATUS == Entity.TaskStatus.NewBuild).Max(v => v.Priority);
|
|
|
- //获取入库任务中最后一个交互点是取货点任务的最大优先级
|
|
|
- var enterPriority = tasks.Where(v => v.TYPE == TaskType.EnterDepot && v.STATUS < Entity.TaskStatus.StackerExecution && PickUpDevices.Any(p => p.Entity.Code == v.LastInteractionPoint))
|
|
|
- .Max(v => v.Priority);
|
|
|
- //出入库最大优先级相加大于零
|
|
|
- if (outPriorityNewBuild + enterPriority > 0)
|
|
|
- {
|
|
|
- //出入库优先级任务 1:无优先 2:入库 3:出库
|
|
|
- enterOrOut = enterPriority > outPriorityNewBuild ? 2 : 3;
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
+ //Db.Do(db =>
|
|
|
+ //{
|
|
|
+ // //获取当前堆垛机的所有未完成任务
|
|
|
+ // var tasks = db.Default.Queryable<WCS_TASK>().Where(v => v.STATUS < Entity.TaskStatus.Finish && (v.DEVICE == obj.Entity.Code));
|
|
|
+ // //任务集合是否有处于堆垛机执行状态的任务
|
|
|
+ // if (tasks.Any(v => v.STATUS == Entity.TaskStatus.StackerExecution)) throw new KnownException($"有任务处于堆垛机执行状态", LogLevelEnum.High);
|
|
|
+
|
|
|
+ // //判断是否存在调整优先级任务
|
|
|
+ // if (!tasks.Any(v => v.TYPE != TaskType.TransferDepot && v.STATUS < Entity.TaskStatus.StackerExecution && v.Priority > 0))
|
|
|
+ // {
|
|
|
+ // //不存在调整优先级任务,判断是否存在移库任务
|
|
|
+ // isTransfer = tasks.Any(v => v.TYPE == TaskType.TransferDepot && v.STATUS == Entity.TaskStatus.NewBuild);
|
|
|
+ // }
|
|
|
+ // else //存在调整优先级任务
|
|
|
+ // {
|
|
|
+ // //获取出库任务中新建状态最大优先级
|
|
|
+ // var outPriorityNewBuild = tasks.Where(v => v.TYPE == TaskType.OutDepot && v.STATUS == Entity.TaskStatus.NewBuild).Max(v => v.Priority);
|
|
|
+ // //获取入库任务中最后一个交互点是取货点任务的最大优先级
|
|
|
+ // var enterPriority = tasks.Where(v => v.TYPE == TaskType.EnterDepot && v.STATUS < Entity.TaskStatus.StackerExecution && PickUpDevices.Any(p => p.Entity.Code == v.LastInteractionPoint))
|
|
|
+ // .Max(v => v.Priority);
|
|
|
+ // //出入库最大优先级相加大于零
|
|
|
+ // if (outPriorityNewBuild + enterPriority > 0)
|
|
|
+ // {
|
|
|
+ // //出入库优先级任务 1:无优先 2:入库 3:出库
|
|
|
+ // enterOrOut = enterPriority > outPriorityNewBuild ? 2 : 3;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //});
|
|
|
|
|
|
#region 移库
|
|
|
|
|
|
if (isTransfer)
|
|
|
{
|
|
|
- Db.Do(db =>
|
|
|
- {
|
|
|
- //获取一条当前堆垛机优先级最高的新建移库任务
|
|
|
- var task = db.Default.Queryable<WCS_TASK>().Where(v => v.DEVICE == obj.Entity.Code && v.TYPE == TaskType.TransferDepot && v.STATUS == Entity.TaskStatus.NewBuild)
|
|
|
- .OrderByDescending(v => v.Priority)
|
|
|
- .First() ?? throw new KnownException("未找到移库任务", LogLevelEnum.High);
|
|
|
- //任务状态改为堆垛机执行中
|
|
|
- task.STATUS = Entity.TaskStatus.StackerExecution;
|
|
|
- task.STARTTIME = DateTime.Now;
|
|
|
- task.UPDATETIME = DateTime.Now;
|
|
|
- task.AddWCS_TASK_DTL(db, task.ADDRFROM, task.DEVICE, $"堆垛机{obj.Entity.Code}开始执行任务");
|
|
|
- db.Default.Updateable(task).AddQueue();
|
|
|
- db.Default.SaveQueues();
|
|
|
- var addrFrom = task.ADDRFROM.Split("-");
|
|
|
- var addrTo = task.ADDRTO.Split("-");
|
|
|
- //下发任务
|
|
|
- obj.Data.TaskNumber = task.ID;
|
|
|
- obj.Data.RowPos1 = addrFrom[0].ToShort();
|
|
|
- obj.Data.TravelPos1 = addrFrom[1].ToShort();
|
|
|
- obj.Data.LiftPos1 = addrFrom[2].ToShort();
|
|
|
- obj.Data.RowPos2 = addrTo[0].ToShort();
|
|
|
- obj.Data.TravelPos2 = addrTo[1].ToShort();
|
|
|
- obj.Data.LiftPos2 = addrTo[2].ToShort();
|
|
|
- obj.Data.VoucherNo++;
|
|
|
- });
|
|
|
+ //Db.Do(db =>
|
|
|
+ //{
|
|
|
+ // //获取一条当前堆垛机优先级最高的新建移库任务
|
|
|
+ // var task = db.Default.Queryable<WCS_TASK>().Where(v => v.DEVICE == obj.Entity.Code && v.TYPE == TaskType.TransferDepot && v.STATUS == Entity.TaskStatus.NewBuild)
|
|
|
+ // .OrderByDescending(v => v.Priority)
|
|
|
+ // .First() ?? throw new KnownException("未找到移库任务", LogLevelEnum.High);
|
|
|
+ // //任务状态改为堆垛机执行中
|
|
|
+ // task.STATUS = Entity.TaskStatus.StackerExecution;
|
|
|
+ // task.STARTTIME = DateTime.Now;
|
|
|
+ // task.UPDATETIME = DateTime.Now;
|
|
|
+ // task.AddWCS_TASK_DTL(db, task.ADDRFROM, task.DEVICE, $"堆垛机{obj.Entity.Code}开始执行任务");
|
|
|
+ // db.Default.Updateable(task).AddQueue();
|
|
|
+ // db.Default.SaveQueues();
|
|
|
+ // var addrFrom = task.ADDRFROM.Split("-");
|
|
|
+ // var addrTo = task.ADDRTO.Split("-");
|
|
|
+ // //下发任务
|
|
|
+ // obj.Data.TaskNumber = task.ID;
|
|
|
+ // obj.Data.RowPos1 = addrFrom[0].ToShort();
|
|
|
+ // obj.Data.TravelPos1 = addrFrom[1].ToShort();
|
|
|
+ // obj.Data.LiftPos1 = addrFrom[2].ToShort();
|
|
|
+ // obj.Data.RowPos2 = addrTo[0].ToShort();
|
|
|
+ // obj.Data.TravelPos2 = addrTo[1].ToShort();
|
|
|
+ // obj.Data.LiftPos2 = addrTo[2].ToShort();
|
|
|
+ // obj.Data.VoucherNo++;
|
|
|
+ //});
|
|
|
}
|
|
|
|
|
|
#endregion 移库
|