|
|
@@ -57,7 +57,7 @@ namespace WCS.Service.Works.Station
|
|
|
if (tasks.Any(v => v.STATUS != TaskStatus.堆垛机完成 && v.STATUS != TaskStatus.执行中)) throw new WarnException("任务异常,同组任务状态不为堆垛机完成或执行中");
|
|
|
|
|
|
task.STATUS = TaskStatus.执行中;
|
|
|
- task.CreateStatusLog(db,$"堆垛机放货点分配目标地址{task.ADDRNEXT}", this.GetType());
|
|
|
+ task.CreateStatusLog(db, $"堆垛机放货点分配目标地址{task.ADDRNEXT}", this.GetType());
|
|
|
finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
|
|
|
}
|
|
|
db.Default.SaveChanges();
|
|
|
@@ -101,7 +101,7 @@ namespace WCS.Service.Works.Station
|
|
|
const string key = $"WCS:Lock:CoatingAllocationOutboundDeliveryPoint";
|
|
|
try
|
|
|
{
|
|
|
- if (ProtocolProxy.YG150Redis.Get(key) != null) throw new WarnException($"[CoatingAllocationOutboundDeliveryPoint]--触发并发管控");
|
|
|
+ if (ProtocolProxy.YG150Redis.Get(key) != null) return; //并发管控
|
|
|
ProtocolProxy.YG150Redis.Set(key, key);
|
|
|
if (stationDeviceGroup.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException("等待执行任务,凭证号不一致");
|
|
|
if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
|
|
|
@@ -126,12 +126,21 @@ namespace WCS.Service.Works.Station
|
|
|
devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
|
|
|
}
|
|
|
var finishTaskList = new List<FinishTaskList<int>>();
|
|
|
-
|
|
|
+ const string key1 = $"WCS:Lock:FirstOut";
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
//验证总数
|
|
|
if (db.Default.Set<WCS_TASK>().Count(v => v.STATUS < TaskStatus.已完成 && v.ADDRNEXT == "G1") >= 3) throw new WarnException("总数已达3,流量管控");
|
|
|
|
|
|
+ #region 开始进行优先判断
|
|
|
+
|
|
|
+ string value = ProtocolProxy.YG150Redis.Get(obj.Entity.CODE);
|
|
|
+ //当前被锁定的不是当前设备
|
|
|
+ if (value != key1 && value != obj.Entity.CODE) return;
|
|
|
+ ProtocolProxy.YG150Redis.Set(key1, obj.Entity.CODE); //锁定当前设备,输送线是不是并行执行,所以不用增加redis事务锁
|
|
|
+
|
|
|
+ #endregion 开始进行优先判断
|
|
|
+
|
|
|
foreach (var dev in devise)
|
|
|
{
|
|
|
var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum) ?? throw new WarnException("无任务");
|
|
|
@@ -149,7 +158,7 @@ namespace WCS.Service.Works.Station
|
|
|
{
|
|
|
task.ADDRNEXT = "G1";
|
|
|
}
|
|
|
- task.CreateStatusLog(db,$"涂布出库分配出库口{task.ADDRNEXT}", this.GetType());
|
|
|
+ task.CreateStatusLog(db, $"涂布出库分配出库口{task.ADDRNEXT}", this.GetType());
|
|
|
finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
|
|
|
}
|
|
|
db.Default.SaveChanges();
|
|
|
@@ -168,6 +177,17 @@ namespace WCS.Service.Works.Station
|
|
|
finish.Station.Data.GoodsSize = task.Length.ToShort();
|
|
|
finish.Station.Data.CmdType = IstationCmdType.分配目标地址;
|
|
|
finish.Station.Data.VoucherNo++;
|
|
|
+
|
|
|
+ #region 结束锁定
|
|
|
+
|
|
|
+ string value = ProtocolProxy.YG150Redis.Get(obj.Entity.CODE);
|
|
|
+ //当前设备任然被锁定
|
|
|
+ if (value == obj.Entity.CODE)
|
|
|
+ {
|
|
|
+ ProtocolProxy.YG150Redis.Set(key1, key1);
|
|
|
+ };
|
|
|
+
|
|
|
+ #endregion 结束锁定
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
@@ -273,7 +293,7 @@ namespace WCS.Service.Works.Station
|
|
|
}
|
|
|
|
|
|
task.ADDRNEXT = addNext;
|
|
|
- task.CreateStatusLog(db,$"涂布出库分配AGV取货点{addNext}", this.GetType());
|
|
|
+ task.CreateStatusLog(db, $"涂布出库分配AGV取货点{addNext}", this.GetType());
|
|
|
finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
|
|
|
stationList.Add(new FinishTaskList<WCS_TASK>(task, dev.Station));
|
|
|
}
|