|
|
@@ -1,7 +1,9 @@
|
|
|
using DBHelper_SqlSugar;
|
|
|
using Logs;
|
|
|
+using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Diagnostics;
|
|
|
+using System.Linq;
|
|
|
using WCS.Core;
|
|
|
using WCS.Entity;
|
|
|
using WCS.Entity.Protocol;
|
|
|
@@ -11,7 +13,7 @@ using WCS.Service.Helpers;
|
|
|
|
|
|
namespace WCS.Service.Works.Station
|
|
|
{
|
|
|
- //[WorkTitle(typeof(ProductHandler), "扫码入库")]
|
|
|
+ [WorkTitle(typeof(ProductHandler), "扫码入库")]
|
|
|
internal class 扫码入库 : Work<StationDeviceGroup>
|
|
|
{
|
|
|
protected override void Do(StationDeviceGroup obj)
|
|
|
@@ -20,50 +22,55 @@ namespace WCS.Service.Works.Station
|
|
|
timer.Start();
|
|
|
obj.EX(obj =>
|
|
|
{
|
|
|
+ obj.BcrStationIsForbid();
|
|
|
+ //设备组无论单卷还是双卷都必须满足的条件
|
|
|
+ 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.Items;
|
|
|
- //var devs = obj.GetBcrValid();
|
|
|
- //devs.Valid();
|
|
|
- //var infos = devs.GetWMSInTask();
|
|
|
+ var devs = obj.GetBcrValid();
|
|
|
+ devs.Valid();
|
|
|
+ var infos = devs.GetWMSInTask();
|
|
|
+
|
|
|
foreach (var item in devs)
|
|
|
{
|
|
|
- //var dev = item.Station;
|
|
|
- //var next = dev.Entity.GetPath("SRM").CODE;
|
|
|
- //var info = infos.FirstOrDefault(v => item.FinishCode.Contains(v.ContainerCode + "}"));
|
|
|
- //if (db.Default.Queryable<WCS_TASK>().Any(v => v.BARCODE == info.ContainerCode && v.STATUS < TaskStatus.已完成 && v.TYPE == TaskType.入库))
|
|
|
- // throw new WarnException($"生产条码{info.ContainerCode}存在未完成任务,请检查是否为标签卡重复使用");
|
|
|
-
|
|
|
- //var task = new WCS_TASK
|
|
|
- //{
|
|
|
- // BARCODE = info.ContainerCode,
|
|
|
- // TYPE = TaskType.入库,
|
|
|
- // STATUS = TaskStatus.执行中,
|
|
|
- // ADDRFROM = dev.Entity.CODE,
|
|
|
- // ADDRTO = info.EndPostion,
|
|
|
- // STARTTIME = DateTime.Now,
|
|
|
- // UPDATEUSER = "WCS",
|
|
|
- // UPDATETIME = DateTime.Now,
|
|
|
- // WMSTASK = int.Parse(info.WMSTaskNum),
|
|
|
- // TaskGroupKey = info.TaskGroupKey,
|
|
|
- // ADDRNEXT = next,
|
|
|
- // HEIGHT = dev.Data2.GoodsSize,
|
|
|
- // FLOOR = 1
|
|
|
- //};
|
|
|
-
|
|
|
- //db.Default.Updateable(task).AddQueue();
|
|
|
- finishTaskList.Add(new FinishTaskList<int>(0, item.Entity.Create<StationDevice>()));
|
|
|
-
|
|
|
- //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());
|
|
|
+ var dev = item.Station;
|
|
|
+ var next = dev.Entity.GetPath("SRM").CODE;
|
|
|
+ var info = infos.FirstOrDefault(v => item.FinishCode.Contains(v.ContainerCode + "}"));
|
|
|
+ if (db.Default.Queryable<WCS_TASK>().Any(v => v.BARCODE == info.ContainerCode && v.STATUS < TaskStatus.已完成 && v.TYPE == TaskType.入库))
|
|
|
+ throw new WarnException($"生产条码{info.ContainerCode}存在未完成任务,请检查是否为标签卡重复使用");
|
|
|
+
|
|
|
+ var task = new WCS_TASK
|
|
|
+ {
|
|
|
+ BARCODE = info.ContainerCode,
|
|
|
+ TYPE = TaskType.入库,
|
|
|
+ STATUS = TaskStatus.执行中,
|
|
|
+ ADDRFROM = dev.Entity.CODE,
|
|
|
+ ADDRTO = info.EndPostion,
|
|
|
+ STARTTIME = DateTime.Now,
|
|
|
+ UPDATEUSER = "WCS",
|
|
|
+ UPDATETIME = DateTime.Now,
|
|
|
+ WMSTASK = int.Parse(info.WMSTaskNum),
|
|
|
+ TaskGroupKey = info.TaskGroupKey,
|
|
|
+ ADDRNEXT = next,
|
|
|
+ HEIGHT = dev.Data2.GoodsSize,
|
|
|
+ FLOOR = 1
|
|
|
+ };
|
|
|
+
|
|
|
+ db.Default.Updateable(task).AddQueue();
|
|
|
+ finishTaskList.Add(new FinishTaskList<int>(task.WMSTASK, 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.SaveQueues();
|
|
|
+ db.Default.SaveQueues();
|
|
|
});
|
|
|
|
|
|
//检查对应的任务是否已创建成功
|
|
|
@@ -71,115 +78,21 @@ namespace WCS.Service.Works.Station
|
|
|
{
|
|
|
foreach (var finishTask in finishTaskList)
|
|
|
{
|
|
|
- //var task = db.Default.Queryable<WCS_TASK>().First(v => v.WMSTASK == finishTask.FinishCode);
|
|
|
- //if (task == null) continue;
|
|
|
-
|
|
|
- //finishTask.Station.Data2.Status = finishTask.Station.Data2.Status | IstationStatus.光电状态;
|
|
|
- //finishTask.Station.Data.Goodsstart = 2222;
|
|
|
- //finishTask.Station.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
|
- //finishTask.Station.Data.Goodsnum = finishTaskList.Count.ToShort();
|
|
|
- //finishTask.Station.Data.CmdType = IstationCmdType.扫码入库;
|
|
|
- //finishTask.Station.Data.VoucherNo++;
|
|
|
+ var task = db.Default.Queryable<WCS_TASK>().First(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 = finishTaskList.Count.ToShort();
|
|
|
+ finishTask.Station.Data.CmdType = IstationCmdType.扫码入库;
|
|
|
+ finishTask.Station.Data.VoucherNo++;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
timer.Stop();
|
|
|
InfoLog.INFO_TIMING($"{obj.Entity.CODE}--扫码入库,耗时{timer.ElapsedMilliseconds}");
|
|
|
});
|
|
|
-
|
|
|
- //var timer = new Stopwatch();
|
|
|
- //timer.Start();
|
|
|
- //obj.EX(obj =>
|
|
|
- //{
|
|
|
- // obj.BcrStationIsForbid();
|
|
|
- // //设备组无论单卷还是双卷都必须满足的条件
|
|
|
- // 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();
|
|
|
-
|
|
|
- // foreach (var item in devs)
|
|
|
- // {
|
|
|
- // var dev = item.Station;
|
|
|
- // var next = dev.Entity.GetPath("SRM").CODE;
|
|
|
- // var info = infos.FirstOrDefault(v => item.FinishCode.Contains(v.ContainerCode + "}"));
|
|
|
- // if (db.Default.Queryable<WCS_TASK>().Any(v => v.BARCODE == info.ContainerCode && v.STATUS < TaskStatus.已完成 && v.TYPE == TaskType.入库))
|
|
|
- // throw new WarnException($"生产条码{info.ContainerCode}存在未完成任务,请检查是否为标签卡重复使用");
|
|
|
-
|
|
|
- // var task = new WCS_TASK
|
|
|
- // {
|
|
|
- // BARCODE = info.ContainerCode,
|
|
|
- // TYPE = TaskType.入库,
|
|
|
- // STATUS = TaskStatus.执行中,
|
|
|
- // ADDRFROM = dev.Entity.CODE,
|
|
|
- // ADDRTO = info.EndPostion,
|
|
|
- // STARTTIME = DateTime.Now,
|
|
|
- // UPDATEUSER = "WCS",
|
|
|
- // UPDATETIME = DateTime.Now,
|
|
|
- // WMSTASK = int.Parse(info.WMSTaskNum),
|
|
|
- // TaskGroupKey = info.TaskGroupKey,
|
|
|
- // ADDRNEXT = next,
|
|
|
- // HEIGHT = dev.Data2.GoodsSize,
|
|
|
- // FLOOR = 1
|
|
|
- // };
|
|
|
-
|
|
|
- // db.Default.Updateable(task).AddQueue();
|
|
|
- // finishTaskList.Add(new FinishTaskList<int>(task.WMSTASK, 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.SaveQueues();
|
|
|
- // });
|
|
|
-
|
|
|
- // //检查对应的任务是否已创建成功
|
|
|
- // Db.Do(db =>
|
|
|
- // {
|
|
|
- // foreach (var finishTask in finishTaskList)
|
|
|
- // {
|
|
|
- // var task = db.Default.Queryable<WCS_TASK>().First(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 = finishTaskList.Count.ToShort();
|
|
|
- // finishTask.Station.Data.CmdType = IstationCmdType.扫码入库;
|
|
|
- // finishTask.Station.Data.VoucherNo++;
|
|
|
- // }
|
|
|
- // });
|
|
|
-
|
|
|
- // timer.Stop();
|
|
|
- // InfoLog.INFO_TIMING($"{obj.Entity.CODE}--扫码入库,耗时{timer.ElapsedMilliseconds}");
|
|
|
- //});
|
|
|
- }
|
|
|
-
|
|
|
- protected override bool SelectDevice(WCS_DEVICE dev)
|
|
|
- {
|
|
|
- return dev.CODE == "G1028";
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- [WorkTitle(typeof(ProductHandler), "扫码入库")]
|
|
|
- internal class 扫码入库1 : Work<StationDeviceGroup>
|
|
|
- {
|
|
|
- protected override void Do(StationDeviceGroup obj)
|
|
|
- {
|
|
|
- var a = Device.Find("1028").Create<StationDevice>();
|
|
|
- foreach (var dev in obj.Items)
|
|
|
- {
|
|
|
- dev.Data2.Status = dev.Data2.Status | IstationStatus.光电状态;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
protected override bool SelectDevice(WCS_DEVICE dev)
|