|
@@ -73,7 +73,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
#region 获取完成任务
|
|
|
|
|
|
//根据DB521任务号获取对应任务
|
|
|
- var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskFinishiId) ?? throw new KnownException($"堆垛机完成任务号{obj.Data2.TaskFinishiId},在WCS当前任务信息中未找到对应任务。", LogLevelEnum.High);
|
|
|
+ var task = db.Default.Queryable<WCS_TaskInfo>().UpdLock().First(v => v.ID == obj.Data2.TaskFinishiId) ?? throw new KnownException($"堆垛机完成任务号{obj.Data2.TaskFinishiId},在WCS当前任务信息中未找到对应任务。", LogLevelEnum.High);
|
|
|
if (task.Status != Entity.TaskStatus.StackerExecution) throw new KnownException($"任务{task.ID}状态是{task.Status.GetDescription()}.堆垛机完成任务需要对应任务状态处于堆垛机执行中", LogLevelEnum.High);
|
|
|
|
|
|
#endregion 获取完成任务
|
|
@@ -85,7 +85,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
//完成任务
|
|
|
task.Status = Entity.TaskStatus.Finish;
|
|
|
task.EndTime = DateTime.Now;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.AddrTo, "入库任务结束");
|
|
|
break;
|
|
|
|
|
@@ -94,7 +94,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
if (devs.Contains(task.SrmStation))
|
|
|
{
|
|
|
task.Status = Entity.TaskStatus.StackerCompleted;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.SrmStation, "出库任务到达放货站台");
|
|
|
}
|
|
|
else
|
|
@@ -107,7 +107,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
task.Status = Entity.TaskStatus.Finish;
|
|
|
var dev = new Station(Device.All.FirstOrDefault(v => v.Code == task.SrmStation) ?? throw new KnownException($"未找到{task.SrmStation}信息", LogLevelEnum.High), this.World);
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.SrmStation, "出库任务到达放货站台");
|
|
|
}
|
|
|
else
|
|
@@ -115,7 +115,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
task.Status = Entity.TaskStatus.ConveyorExecution;
|
|
|
var dev = new Station(Device.All.FirstOrDefault(v => v.Code == task.SrmStation) ?? throw new KnownException($"未找到{task.SrmStation}信息", LogLevelEnum.High), this.World);
|
|
|
dev.Data.TaskNumber = task.ID;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.SrmStation, "出库任务到达放货站台");
|
|
|
}
|
|
|
|
|
@@ -124,7 +124,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
case OutTypeEnum.半自动手动出库任务:
|
|
|
task.Status = Entity.TaskStatus.Finish;
|
|
|
task.EditTime = DateTime.Now;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.SrmStation, "半自动手动出库任务结束");
|
|
|
break;
|
|
|
}
|
|
@@ -135,14 +135,14 @@ namespace WCS.WorkEngineering.Systems
|
|
|
case TaskType.TransferDepot:
|
|
|
task.Status = Entity.TaskStatus.Finish;
|
|
|
task.EndTime = DateTime.Now;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.AddrTo, "移库任务结束");
|
|
|
break;
|
|
|
|
|
|
case TaskType.EmptyInit:
|
|
|
task.Status = Entity.TaskStatus.Finish;
|
|
|
task.EndTime = DateTime.Now;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.AddrTo, "空轮初始化任务结束");
|
|
|
break;
|
|
|
}
|
|
@@ -175,7 +175,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
//获取当前堆垛机的所有未完成任务
|
|
|
- var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Status < Entity.TaskStatus.Finish && (v.Device == obj.Entity.Code));
|
|
|
+ var tasks = db.Default.Queryable<WCS_TaskInfo>().NoLock().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);
|
|
|
|
|
@@ -202,13 +202,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
//获取一条当前堆垛机优先级最高的新建移库任务
|
|
|
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Device == obj.Entity.Code && v.Type == TaskType.TransferDepot && v.Status == Entity.TaskStatus.NewBuild)
|
|
|
+ var task = db.Default.Queryable<WCS_TaskInfo>().UpdLock().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;
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.AddrFrom, task.Device, $"堆垛机{obj.Entity.Code}开始执行任务");
|
|
|
taskInfo = task;
|
|
|
});
|
|
@@ -269,7 +269,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
//根据有货设备的任务号获取所有类型为入库状态为输送机执行中的任务
|
|
|
- var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => (v.Type == TaskType.EnterDepot || v.Type == TaskType.EmptyInit)
|
|
|
+ var tasks = db.Default.Queryable<WCS_TaskInfo>().UpdLock().Where(v => (v.Type == TaskType.EnterDepot || v.Type == TaskType.EmptyInit)
|
|
|
&& (v.Status == TaskStatus.ConveyorExecution || v.Status == TaskStatus.RgvExecution || v.Status == TaskStatus.RgvCompleted)
|
|
|
&& (arrIn.Select(p => p.Data.TaskNumber).Contains(v.ID) || arrIn.Select(p => p.Data2.TaskNumber).Contains(v.ID))).ToList();
|
|
|
if (!tasks.Any()) throw new KnownException("无可用任务", LogLevelEnum.Mid);
|
|
@@ -286,7 +286,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
task.AddrTo = $"{loc[0]}-{loc[1]}-{loc[2]}";
|
|
|
task.LastInteractionPoint = station.Entity.Code;
|
|
|
task.EditWho = "WCS";
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, station.Entity.Code, task.AddrTo, "任务下发堆垛机执行");
|
|
|
|
|
|
taskInfo = task;
|
|
@@ -347,7 +347,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
|
|
|
|
|
|
//按条件先后排序获取一条排序后第一条结果1.优先级2.所在楼层与本次优先执行楼层
|
|
|
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
|
|
|
+ var task = db.Default.Queryable<WCS_TaskInfo>().UpdLock().Where(v => v.Type == TaskType.OutDepot && v.Status == TaskStatus.WaitingToExecute)
|
|
|
.Where(v => allOutCode.Contains(v.SrmStation))
|
|
|
.OrderByDescending(v => v.Priority)
|
|
|
.OrderByDescending(v => v.Floor == floor ? 1 : 0)
|
|
@@ -356,7 +356,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
task.Status = TaskStatus.StackerExecution;
|
|
|
task.LastInteractionPoint = task.Device;
|
|
|
task.EditWho = "WCS";
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ db.Default.UpdateableRowLock(task).ExecuteCommand();
|
|
|
task.AddWCS_TASK_DTL(db.Default, task.Device, task.SrmStation, "任务下发堆垛机执行");
|
|
|
taskInfo = task;
|
|
|
});
|