|
@@ -7,9 +7,9 @@ using WCS.Core;
|
|
|
using WCS.Entity;
|
|
using WCS.Entity;
|
|
|
using WCS.Entity.Protocol;
|
|
using WCS.Entity.Protocol;
|
|
|
using WCS.Entity.Protocol.SRM;
|
|
using WCS.Entity.Protocol.SRM;
|
|
|
-using WCS.Service.Entity;
|
|
|
|
|
using WCS.Service.Extensions;
|
|
using WCS.Service.Extensions;
|
|
|
using WCS.Service.Handlers;
|
|
using WCS.Service.Handlers;
|
|
|
|
|
+using WCS.Service.Helpers;
|
|
|
|
|
|
|
|
namespace WCS.Service.Works.Station
|
|
namespace WCS.Service.Works.Station
|
|
|
{
|
|
{
|
|
@@ -160,37 +160,16 @@ namespace WCS.Service.Works.Station
|
|
|
if (obj.Items.Any(v => !v.Data3.Status.HasFlag(StationStatus.低位))) throw new DoException("不在低位");
|
|
if (obj.Items.Any(v => !v.Data3.Status.HasFlag(StationStatus.低位))) throw new DoException("不在低位");
|
|
|
|
|
|
|
|
//成功创建的任务
|
|
//成功创建的任务
|
|
|
- var finishTaskList = new List<Tuple<int, StationDevice>>();
|
|
|
|
|
|
|
+ var finishTaskList = new List<FinishTaskList<int>>();
|
|
|
|
|
|
|
|
//创建对应的任务
|
|
//创建对应的任务
|
|
|
DB.Do(db =>
|
|
DB.Do(db =>
|
|
|
{
|
|
{
|
|
|
- var devs = new List<Tuple<StationDevice, string>>();
|
|
|
|
|
-
|
|
|
|
|
- //获取需要执行的设备信息
|
|
|
|
|
- foreach (var dev in obj.Items)
|
|
|
|
|
- {
|
|
|
|
|
- if (dev.Data2.Request != IstationRequest.扫码入库) continue; //没有请求
|
|
|
|
|
- if (dev.Data2.Tasknum > 10000) continue; //没有任务号
|
|
|
|
|
- if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) continue; //没有光电
|
|
|
|
|
-
|
|
|
|
|
- var bcr = dev.Entity.BCR();
|
|
|
|
|
- var barcode = bcr.Content.Trim('\r');
|
|
|
|
|
- if (barcode == "") continue; //扫码失败
|
|
|
|
|
- devs.Add(new Tuple<StationDevice, string>(dev.Entity.Create<StationDevice>(), barcode));
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ var devs = obj.GetBcrValid();
|
|
|
|
|
+ devs.Valid();
|
|
|
|
|
+ var infos = devs.GetWMSInTask();
|
|
|
|
|
|
|
|
- if (!devs.Any()) return;
|
|
|
|
|
- var items = devs.ToArray();
|
|
|
|
|
- var maxGoodsnum = devs.Select(v => v.Item1.Data2.Goodsnum).OrderByDescending(v => v).FirstOrDefault();
|
|
|
|
|
- if (devs.Count != maxGoodsnum) throw new WarnException($"可用货物数{devs.Count},实际货物数{maxGoodsnum}");
|
|
|
|
|
- List<I_WCS_GetInTaskResponseItem> Infos = items.Length switch
|
|
|
|
|
- {
|
|
|
|
|
- 1 => WMS.I_WCS_GetInTask(items[0].Item2, items[0].Item1.Entity.CODE),
|
|
|
|
|
- 2 => WMS.I_WCS_GetInTask(items[0].Item2, items[0].Item1.Entity.CODE, items[1].Item2, items[1].Item1.Entity.CODE),
|
|
|
|
|
- _ => throw new WarnException($"一组任务数量最大为2,当前{items.Length}"),
|
|
|
|
|
- };
|
|
|
|
|
- var agvTask = db.Default.Set<WCS_AGVTask>().Where(v => v.ID == items[0].Item1.Data.Goodscode).FirstOrDefault() ?? throw new WarnException("无完成AGV任务");
|
|
|
|
|
|
|
+ var agvTask = db.Default.Set<WCS_AGVTask>().Where(v => v.ID == devs[0].Station.Data.Goodscode).FirstOrDefault() ?? throw new WarnException("无完成AGV任务");
|
|
|
|
|
|
|
|
if (agvTask.Status != AGVTaskStatus.完成扫码)
|
|
if (agvTask.Status != AGVTaskStatus.完成扫码)
|
|
|
{
|
|
{
|
|
@@ -200,9 +179,9 @@ namespace WCS.Service.Works.Station
|
|
|
|
|
|
|
|
foreach (var item in devs)
|
|
foreach (var item in devs)
|
|
|
{
|
|
{
|
|
|
- var dev = item.Item1;
|
|
|
|
|
|
|
+ var dev = item.Station;
|
|
|
var next = dev.Entity.GetPath("SRM");
|
|
var next = dev.Entity.GetPath("SRM");
|
|
|
- var info = Infos.FirstOrDefault(v => item.Item2.Contains(v.ContainerCode));
|
|
|
|
|
|
|
+ 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.入库))
|
|
if (db.Default.Set<WCS_TASK>().AsNoTracking().Any(v => v.BARCODE == info.ContainerCode && v.STATUS < TaskStatus.已完成 && v.TYPE == TaskType.入库))
|
|
|
throw new WarnException($"生产条码{info.ContainerCode}存在未完成任务,请检查是否为标签卡重复使用");
|
|
throw new WarnException($"生产条码{info.ContainerCode}存在未完成任务,请检查是否为标签卡重复使用");
|
|
|
|
|
|
|
@@ -222,7 +201,7 @@ namespace WCS.Service.Works.Station
|
|
|
task.AgvTask = agvTask.ID;
|
|
task.AgvTask = agvTask.ID;
|
|
|
|
|
|
|
|
db.Default.Set<WCS_TASK>().Add(task);
|
|
db.Default.Set<WCS_TASK>().Add(task);
|
|
|
- finishTaskList.Add(new Tuple<int, StationDevice>(task.WMSTASK, dev.Entity.Create<StationDevice>()));
|
|
|
|
|
|
|
+ finishTaskList.Add(new FinishTaskList<int> { FinishCode = task.WMSTASK, Station = item.Station });
|
|
|
|
|
|
|
|
var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
|
|
var msg = $"下达从{dev.Entity.CODE}移动至{next}的PLC指令。";
|
|
|
msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
|
|
msg += $"[{dev.Data.Tasknum}][{dev.Data.Goodsstart}][{dev.Data.Goodsend}][{dev.Data.VoucherNo}[{dev.Data2.VoucherNo}]";
|
|
@@ -237,15 +216,15 @@ namespace WCS.Service.Works.Station
|
|
|
{
|
|
{
|
|
|
foreach (var finishTask in finishTaskList)
|
|
foreach (var finishTask in finishTaskList)
|
|
|
{
|
|
{
|
|
|
- var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.WMSTASK == finishTask.Item1);
|
|
|
|
|
|
|
+ var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.WMSTASK == finishTask.FinishCode);
|
|
|
if (task == null) continue;
|
|
if (task == null) continue;
|
|
|
|
|
|
|
|
- finishTask.Item2.Data.Tasknum = task.ID;
|
|
|
|
|
- finishTask.Item2.Data.Goodsstart = task.ADDRFROM.ToShort();
|
|
|
|
|
- finishTask.Item2.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
|
|
|
- finishTask.Item2.Data.Goodsnum = (short)finishTaskList.Count;
|
|
|
|
|
- finishTask.Item2.Data.CmdType = IstationCmdType.扫码入库;
|
|
|
|
|
- finishTask.Item2.Data.VoucherNo++;
|
|
|
|
|
|
|
+ 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++;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|