|
|
@@ -18,43 +18,43 @@ namespace WCS.Service.Works.Station
|
|
|
{
|
|
|
var timer = new Stopwatch();
|
|
|
timer.Start();
|
|
|
- obj.EX(obj =>
|
|
|
+ obj.EX(stationDeviceGroup =>
|
|
|
{
|
|
|
- if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
|
|
|
- if (obj.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("运行中");
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
|
|
|
|
|
|
//成功处理的任务
|
|
|
var finishTaskList = new List<FinishTaskList<int>>();
|
|
|
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
- var devs = new List<FinishTaskList<string>>();
|
|
|
- foreach (var dev in obj.Items)
|
|
|
+ var devise = new List<FinishTaskList<string>>();
|
|
|
+ foreach (var dev in stationDeviceGroup.Items)
|
|
|
{
|
|
|
//没有请求
|
|
|
if (dev.Data2.Request != IstationRequest.堆垛机放货完成请求目标地址)
|
|
|
{
|
|
|
- InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-堆垛机放货完成请求--4");
|
|
|
+ InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-堆垛机放货完成请求--4");
|
|
|
continue;
|
|
|
}
|
|
|
//没有光电
|
|
|
if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
|
|
|
{
|
|
|
- InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
continue;
|
|
|
}
|
|
|
- devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
|
|
|
+ devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
|
|
|
}
|
|
|
- if (!devs.Any()) return;
|
|
|
- foreach (var dev in devs)
|
|
|
+ if (!devise.Any()) return;
|
|
|
+ foreach (var dev in devise)
|
|
|
{
|
|
|
var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == dev.FinishCode && v.STATUS == TaskStatus.堆垛机完成) ?? throw new WarnException("无任务");
|
|
|
var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TaskGroupKey == task.TaskGroupKey);
|
|
|
- if (tasks.Count() != devs.Count) throw new WarnException($"可执行任务数{devs.Count},实际任务数{tasks.Count()}");
|
|
|
+ if (tasks.Count() != devise.Count) throw new WarnException($"可执行任务数{devise.Count},实际任务数{tasks.Count()}");
|
|
|
if (tasks.Any(v => v.STATUS != TaskStatus.堆垛机完成 && v.STATUS != TaskStatus.执行中)) throw new WarnException("任务异常,同组任务状态不为堆垛机完成或执行中");
|
|
|
|
|
|
task.STATUS = TaskStatus.执行中;
|
|
|
- task.CreateStatusLog(db, $"状态由[{TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{obj.Entity.Code}", this.GetType());
|
|
|
+ task.CreateStatusLog(db, $"状态由[{TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{stationDeviceGroup.Entity.CODE}", GetType());
|
|
|
finishTaskList.Add(new FinishTaskList<int>(task.ID, dev.Station));
|
|
|
}
|
|
|
db.Default.SaveChanges();
|
|
|
@@ -73,22 +73,21 @@ namespace WCS.Service.Works.Station
|
|
|
finish.Station.Data.CmdType = IstationCmdType.堆垛机放货完成请求目标地址;
|
|
|
finish.Station.Data.VoucherNo++;
|
|
|
}
|
|
|
- if (finishTaskList.Any())
|
|
|
- {
|
|
|
- timer.Stop();
|
|
|
- InfoLog.INFO_TIMING($"{obj.Entity.CODE}--分配目标地址,耗时{timer.ElapsedMilliseconds}");
|
|
|
- }
|
|
|
+
|
|
|
+ if (!finishTaskList.Any()) return;
|
|
|
+ timer.Stop();
|
|
|
+ InfoLog.INFO_TIMING($"{stationDeviceGroup.Entity.CODE}--分配目标地址,耗时{timer.ElapsedMilliseconds}");
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
protected override bool SelectDevice(WCS_DEVICE dev)
|
|
|
{
|
|
|
- return devCodes.Contains(dev.CODE);
|
|
|
+ return _devCodes.Contains(dev.CODE);
|
|
|
}
|
|
|
|
|
|
//月台堆垛机放货设备组
|
|
|
- private List<string> devCodes = new List<string>() { "G1473", "G1474", "G1493", "G1491", "G1520", "G1522", "G1545", "G1451" };
|
|
|
+ private readonly List<string> _devCodes = new() { "G1473", "G1474", "G1493", "G1491", "G1520", "G1522", "G1545", "G1451" };
|
|
|
}
|
|
|
|
|
|
[WorkTitle(typeof(ProductHandler), "月台出货口完成任务")]
|
|
|
@@ -99,39 +98,39 @@ namespace WCS.Service.Works.Station
|
|
|
var timer = new Stopwatch();
|
|
|
timer.Start();
|
|
|
|
|
|
- obj.EX(obj =>
|
|
|
+ obj.EX(stationDeviceGroup =>
|
|
|
{
|
|
|
//当前组有一个运行的设备就停止执行
|
|
|
- if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("设备运行中");
|
|
|
- if (obj.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态))) throw new DoException("设备停止运行,但有光电");
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("设备运行中");
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data2.Status.HasFlag(IstationStatus.光电状态))) throw new DoException("设备停止运行,但有光电");
|
|
|
//此处逻辑为货物离开后报完成
|
|
|
|
|
|
//成功处理的任务
|
|
|
var finishTaskList = new List<FinishTaskList<int>>();
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
- var devs = new List<FinishTaskList<string>>();
|
|
|
- foreach (var dev in obj.Items)
|
|
|
+ var devise = new List<FinishTaskList<string>>();
|
|
|
+ foreach (var dev in stationDeviceGroup.Items)
|
|
|
{
|
|
|
if (dev.Data2.Request != IstationRequest.月台出库口任务完成)
|
|
|
{
|
|
|
- InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-月台出库口任务完成--3");
|
|
|
+ InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-月台出库口任务完成--3");
|
|
|
continue;
|
|
|
}
|
|
|
if (dev.Data2.Tasknum < 10000)
|
|
|
{
|
|
|
- InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无任务号", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无任务号", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
continue;
|
|
|
};
|
|
|
- devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
|
|
|
+ devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
|
|
|
}
|
|
|
|
|
|
- foreach (var dev in devs)
|
|
|
+ foreach (var dev in devise)
|
|
|
{
|
|
|
- var task = db.Default.Set<WCS_TASK>().Where(v => v.ID == dev.Station.Data2.Tasknum).FirstOrDefault();
|
|
|
- if (task.STATUS == TaskStatus.新建) throw new WarnException($"{task.ID}任务状态错误");
|
|
|
+ var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum);
|
|
|
+ if (task?.STATUS == TaskStatus.新建) throw new WarnException($"{task.ID}任务状态错误");
|
|
|
|
|
|
- task.STATUS = TaskStatus.已完成;
|
|
|
+ task!.STATUS = TaskStatus.已完成;
|
|
|
task.ENDTIME = System.DateTime.Now;
|
|
|
task.UPDATEUSER = "WCS";
|
|
|
task.CreateStatusLog(db, $"状态由[{TaskStatus.执行中}]变更为[{task.STATUS}]-{dev.FinishCode}", this.GetType());
|
|
|
@@ -141,27 +140,25 @@ namespace WCS.Service.Works.Station
|
|
|
});
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
- foreach (var finish in finishTaskList)
|
|
|
+ foreach (var finish in from finish in finishTaskList let task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finish.FinishCode) select finish)
|
|
|
{
|
|
|
- var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finish.FinishCode);
|
|
|
finish.Station.Data.CmdType = IstationCmdType.月台出库口任务完成;
|
|
|
finish.Station.Data.VoucherNo++;
|
|
|
}
|
|
|
- if (finishTaskList.Any())
|
|
|
- {
|
|
|
- timer.Stop();
|
|
|
- InfoLog.INFO_TIMING($"{obj.Entity.CODE}--处理请求到反馈完成信号耗时{timer.ElapsedMilliseconds}");
|
|
|
- }
|
|
|
+
|
|
|
+ if (!finishTaskList.Any()) return;
|
|
|
+ timer.Stop();
|
|
|
+ InfoLog.INFO_TIMING($"{stationDeviceGroup.Entity.CODE}--处理请求到反馈完成信号耗时{timer.ElapsedMilliseconds}");
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
protected override bool SelectDevice(WCS_DEVICE dev)
|
|
|
{
|
|
|
- return devCodes.Contains(dev.CODE);
|
|
|
+ return _devCodes.Contains(dev.CODE);
|
|
|
}
|
|
|
|
|
|
- private List<string> devCodes = new List<string>() { "G1469", "G1561", "G1538", "G1574", "G1509" };
|
|
|
+ private readonly List<string> _devCodes = new() { "G1469", "G1561", "G1538", "G1574", "G1509" };
|
|
|
}
|
|
|
|
|
|
[WorkTitle(typeof(ProductHandler), "转圈交互点分配目标地址")]
|
|
|
@@ -169,45 +166,45 @@ namespace WCS.Service.Works.Station
|
|
|
{
|
|
|
protected override void Do(StationDeviceGroup obj)
|
|
|
{
|
|
|
- obj.EX(obj =>
|
|
|
+ obj.EX(stationDeviceGroup =>
|
|
|
{
|
|
|
- if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new DoException("运行中");
|
|
|
- if (obj.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("运行中");
|
|
|
+ if (stationDeviceGroup.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
|
|
|
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
- var devs = new List<FinishTaskList<string>>();
|
|
|
- foreach (var dev in obj.Items)
|
|
|
+ var devise = new List<FinishTaskList<string>>();
|
|
|
+ foreach (var dev in stationDeviceGroup.Items)
|
|
|
{
|
|
|
//没有请求
|
|
|
if (dev.Data2.Request != IstationRequest.请求分配目标地址)
|
|
|
{
|
|
|
- InfoLog.INFO_INFO($"{obj.Entity.CODE}无请求-分配目标地址--2");
|
|
|
+ InfoLog.INFO_INFO($"{stationDeviceGroup.Entity.CODE}无请求-分配目标地址--2");
|
|
|
continue;
|
|
|
}
|
|
|
//没有光电
|
|
|
if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态))
|
|
|
{
|
|
|
- InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求无光电", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
continue;
|
|
|
};
|
|
|
if (dev.Data2.Tasknum < 10000)
|
|
|
{
|
|
|
- InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求有光电无任务", obj.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
+ InfoLog.INFO_WarnDb($"{dev.Entity.CODE}有请求有光电无任务", stationDeviceGroup.Entity.CODE, WCS_EXCEPTIONTYPE.设备异常);
|
|
|
continue;
|
|
|
}
|
|
|
- devs.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
|
|
|
+ devise.Add(new FinishTaskList<string>(dev.Entity.CODE, dev.Entity.Create<StationDevice>()));
|
|
|
}
|
|
|
|
|
|
- foreach (var dev in devs)
|
|
|
+ foreach (var dev in devise)
|
|
|
{
|
|
|
var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == dev.Station.Data2.Tasknum) ?? throw new WarnException("无任务");
|
|
|
var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TaskGroupKey == task.TaskGroupKey);
|
|
|
- if (devs.Count != tasks.Count()) throw new WarnException($"可执行任务数{devs.Count},实际任务数{tasks.Count()}");
|
|
|
+ if (devise.Count != tasks.Count()) throw new WarnException($"可执行任务数{devise.Count},实际任务数{tasks.Count()}");
|
|
|
dev.Station.Data.Tasknum = task.ID;
|
|
|
dev.Station.Data.Goodsstart = dev.Station.Entity.CODE.ToShort();
|
|
|
dev.Station.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
|
- dev.Station.Data.Goodsnum = devs.Count.ToShort();
|
|
|
+ dev.Station.Data.Goodsnum = devise.Count.ToShort();
|
|
|
dev.Station.Data.CmdType = IstationCmdType.分配目标地址;
|
|
|
dev.Station.Data.VoucherNo++;
|
|
|
}
|
|
|
@@ -220,4 +217,4 @@ namespace WCS.Service.Works.Station
|
|
|
return dev.CODE == "G1589";
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+}
|