|
@@ -2,6 +2,7 @@
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Diagnostics;
|
|
|
using System.Linq;
|
|
|
using WCS.Core;
|
|
|
using WCS.Entity;
|
|
@@ -23,78 +24,80 @@ namespace WCS.Service.Works.Station
|
|
|
|
|
|
protected override void Do(StationDeviceGroup obj)
|
|
|
{
|
|
|
- var now = DateTime.Now;
|
|
|
+ var timer = new Stopwatch();
|
|
|
+ timer.Start();
|
|
|
obj.EX(obj =>
|
|
|
- {
|
|
|
- //设备组无论单卷还是双卷都必须满足的条件
|
|
|
- if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
|
|
|
- if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new WarnException($"设备运行中");
|
|
|
-
|
|
|
- //成功创建的任务
|
|
|
- var finishTaskList = new List<FinishTaskList<int>>();
|
|
|
-
|
|
|
- //创建对应的任务
|
|
|
- DB.Do(db =>
|
|
|
{
|
|
|
- var devs = obj.GetBcrValid();
|
|
|
- devs.Valid();
|
|
|
- var infos = devs.GetWMSInTask();
|
|
|
+ //设备组无论单卷还是双卷都必须满足的条件
|
|
|
+ if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
|
|
|
+ if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new WarnException($"设备运行中");
|
|
|
|
|
|
- foreach (var item in devs)
|
|
|
- {
|
|
|
- var dev = item.Station;
|
|
|
- var next = dev.Entity.CODE == "1028" ? "1030" : "1031";
|
|
|
- var info = infos.FirstOrDefault(v => item.FinishCode.Contains(v.ContainerCode));
|
|
|
- if (db.Default.Set<WCS_TASK>().AsNoTracking().Any(v => v.BARCODE == info.ContainerCode && v.STATUS < TaskStatus.已完成 && v.TYPE == TaskType.入库))
|
|
|
- throw new WarnException($"生产条码{info.ContainerCode}存在未完成任务,请检查是否为标签卡重复使用");
|
|
|
+ //成功创建的任务
|
|
|
+ var finishTaskList = new List<FinishTaskList<int>>();
|
|
|
|
|
|
- var task = new WCS_TASK();
|
|
|
- task.BARCODE = info.ContainerCode;
|
|
|
- task.TYPE = TaskType.入库;
|
|
|
- task.STATUS = TaskStatus.执行中;
|
|
|
- task.ADDRFROM = dev.Entity.CODE;
|
|
|
- task.ADDRTO = info.EndPostion;
|
|
|
- task.STARTTIME = DateTime.Now;
|
|
|
- task.UPDATEUSER = "WCS";
|
|
|
- task.UPDATETIME = DateTime.Now;
|
|
|
- task.WMSTASK = int.Parse(info.WMSTaskNum);
|
|
|
- task.TaskGroupKey = info.TaskGroupKey;
|
|
|
- task.ADDRNEXT = next;
|
|
|
- task.HEIGHT = dev.Data2.GoodsSize;
|
|
|
+ //创建对应的任务
|
|
|
+ DB.Do(db =>
|
|
|
+ {
|
|
|
+ var devs = obj.GetBcrValid();
|
|
|
+ devs.Valid();
|
|
|
+ var infos = devs.GetWMSInTask();
|
|
|
|
|
|
- db.Default.Set<WCS_TASK>().Add(task);
|
|
|
- finishTaskList.Add(new FinishTaskList<int>()
|
|
|
+ foreach (var item in devs)
|
|
|
{
|
|
|
- FinishCode = task.WMSTASK,
|
|
|
- Station = item.Station
|
|
|
- });
|
|
|
+ var dev = item.Station;
|
|
|
+ var next = dev.Entity.CODE == "1028" ? "1030" : "1031";
|
|
|
+ var info = infos.FirstOrDefault(v => item.FinishCode.Contains(v.ContainerCode));
|
|
|
+ if (db.Default.Set<WCS_TASK>().AsNoTracking().Any(v => v.BARCODE == info.ContainerCode && v.STATUS < TaskStatus.已完成 && v.TYPE == TaskType.入库))
|
|
|
+ throw new WarnException($"生产条码{info.ContainerCode}存在未完成任务,请检查是否为标签卡重复使用");
|
|
|
|
|
|
- var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
|
|
|
- msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
|
|
|
- task.CreateStatusLog(db, msg, this.GetType());
|
|
|
- }
|
|
|
- //两个任务一起创建
|
|
|
- db.Default.SaveChanges();
|
|
|
- });
|
|
|
+ var task = new WCS_TASK();
|
|
|
+ task.BARCODE = info.ContainerCode;
|
|
|
+ task.TYPE = TaskType.入库;
|
|
|
+ task.STATUS = TaskStatus.执行中;
|
|
|
+ task.ADDRFROM = dev.Entity.CODE;
|
|
|
+ task.ADDRTO = info.EndPostion;
|
|
|
+ task.STARTTIME = DateTime.Now;
|
|
|
+ task.UPDATEUSER = "WCS";
|
|
|
+ task.UPDATETIME = DateTime.Now;
|
|
|
+ task.WMSTASK = int.Parse(info.WMSTaskNum);
|
|
|
+ task.TaskGroupKey = info.TaskGroupKey;
|
|
|
+ task.ADDRNEXT = next;
|
|
|
+ task.HEIGHT = dev.Data2.GoodsSize;
|
|
|
|
|
|
- //检查对应的任务是否已创建成功
|
|
|
- DB.Do(db =>
|
|
|
- {
|
|
|
- foreach (var finishTask in finishTaskList)
|
|
|
+ db.Default.Set<WCS_TASK>().Add(task);
|
|
|
+ finishTaskList.Add(new FinishTaskList<int>()
|
|
|
+ {
|
|
|
+ FinishCode = task.WMSTASK,
|
|
|
+ Station = item.Station
|
|
|
+ });
|
|
|
+
|
|
|
+ var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
|
|
|
+ msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
|
|
|
+ task.CreateStatusLog(db, msg, this.GetType());
|
|
|
+ }
|
|
|
+ //两个任务一起创建
|
|
|
+ db.Default.SaveChanges();
|
|
|
+ });
|
|
|
+
|
|
|
+ //检查对应的任务是否已创建成功
|
|
|
+ DB.Do(db =>
|
|
|
{
|
|
|
- var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.WMSTASK == finishTask.FinishCode);
|
|
|
- if (task == null) continue;
|
|
|
+ foreach (var finishTask in finishTaskList)
|
|
|
+ {
|
|
|
+ var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.WMSTASK == finishTask.FinishCode);
|
|
|
+ if (task == null) continue;
|
|
|
|
|
|
- finishTask.Station.Data.Tasknum = task.ID;
|
|
|
- finishTask.Station.Data.Goodsstart = task.ADDRFROM.ToShort();
|
|
|
- finishTask.Station.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
|
- finishTask.Station.Data.Goodsnum = (short)finishTaskList.Count;
|
|
|
- finishTask.Station.Data.CmdType = IstationCmdType.扫码入库;
|
|
|
- finishTask.Station.Data.VoucherNo++;
|
|
|
- }
|
|
|
- InfoLog.INFO_TIMING($"{obj.Entity.CODE}--扫码入库,耗时{(DateTime.Now - now).TotalMilliseconds}");
|
|
|
+ finishTask.Station.Data.Tasknum = task.ID;
|
|
|
+ finishTask.Station.Data.Goodsstart = task.ADDRFROM.ToShort();
|
|
|
+ finishTask.Station.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
|
+ finishTask.Station.Data.Goodsnum = (short)finishTaskList.Count;
|
|
|
+ finishTask.Station.Data.CmdType = IstationCmdType.扫码入库;
|
|
|
+ finishTask.Station.Data.VoucherNo++;
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
- });
|
|
|
+ timer.Stop();
|
|
|
+ InfoLog.INFO_TIMING($"{obj.Entity.CODE}--扫码入库,耗时{timer.ElapsedMilliseconds}");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -180,7 +183,7 @@ namespace WCS.Service.Works.Station
|
|
|
task.ADDRNEXT = tunnelInfo.taskIN.CODE;
|
|
|
task.TaskGroupKey = res.WMSTaskGroupKey;
|
|
|
task.ADDRTO = task.DEVICE;
|
|
|
- var msg = $"下达从G1030移动至{dev.Data.Goodsend}的PLC指令。同时将任务分配至[{ task.TUNNEL }]-[{task.DEVICE}]";
|
|
|
+ var msg = $"下达从G1030移动至{dev.Data.Goodsend}的PLC指令。同时将任务分配至[{task.TUNNEL}]-[{task.DEVICE}]";
|
|
|
msg += $"[{dev.Data.Tasknum}][G1030][{dev.Data.Goodsend}][{tunnelInfo.SRM.Entity.CODE}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
|
|
|
task.CreateStatusLog(db, msg, this.GetType());
|
|
|
finishTaskList.Add(new Tuple<int, StationDevice>(task.ID, item.Entity.Create<StationDevice>()));
|