|
@@ -1,4 +1,5 @@
|
|
|
using DBHelper;
|
|
|
+using Microsoft.EntityFrameworkCore;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
@@ -10,63 +11,151 @@ using WCS.Service.Extensions;
|
|
|
|
|
|
namespace WCS.Service.Works.Station
|
|
|
{
|
|
|
+ //[WorkTitle(typeof(ProductHandler), "一楼入库扫码")]
|
|
|
+ //internal class 一楼入库 : DeviceWork<StationDevice>
|
|
|
+ //{
|
|
|
+ // private readonly string Conv_1028 = "1028";
|
|
|
+ // private readonly string Conv_1029 = "1029";
|
|
|
+
|
|
|
+ // protected override bool SelectDevice(WCS_DEVICE dev)
|
|
|
+ // {
|
|
|
+ // return dev.CODE == Conv_1028 || dev.CODE == Conv_1029;
|
|
|
+ // }
|
|
|
+
|
|
|
+ // protected override void Do(StationDevice dev)
|
|
|
+ // {
|
|
|
+ // dev.EX(dev =>
|
|
|
+ // {
|
|
|
+ // var code = dev.Entity.CODE;
|
|
|
+ // if (dev.Data.VoucherNo != dev.Data2.VoucherNo)
|
|
|
+ // throw new WarnException($"等待任务[{dev.Data2.Tasknum}]执行--凭证号不一致[{dev.Data.VoucherNo}][{dev.Data2.VoucherNo}]");
|
|
|
+ // if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new DoException("无光电");
|
|
|
+ // if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException("设备运行中");
|
|
|
+ // if (dev.Data2.Request != IstationRequest.扫码入库) throw new WarnException("有光电无请求");
|
|
|
+ // if (dev.Data2.Tasknum > 10000) throw new WarnException("有光电有请求,但已生产任务");
|
|
|
+
|
|
|
+ // var bcr = dev.Entity.BCR();
|
|
|
+ // var barcode = bcr.Content.Trim('\r');
|
|
|
+ // if (barcode == "") throw new WarnException("扫码失败");
|
|
|
+
|
|
|
+ // var info = WMS.I_WCS_GetInTask(barcode, dev.Entity.CODE);
|
|
|
+ // var next = dev.Entity.CODE == Conv_1028 ? "1030" : "1031";
|
|
|
+ // if (db.Default.Set<WCS_TASK>().Any(v => v.BARCODE == info.ContainerCode && v.STATUS<TaskStatus.已完成 && v.TYPE == TaskType.入库))
|
|
|
+ // {
|
|
|
+ // throw new WarnException($"WCS有正在执行的{info.ContainerCode},WMS任务号:{info.WMSTaskNum}");
|
|
|
+ // }
|
|
|
+
|
|
|
+ // var station = dev.Entity.CODE;
|
|
|
+ // DB.Do(db =>
|
|
|
+ // {
|
|
|
+ // 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.Default.Set<WCS_TASK>().Add(task);
|
|
|
+ // db.Default.SaveChanges();
|
|
|
+
|
|
|
+ // dev.Data.Tasknum = task.ID;
|
|
|
+ // dev.Data.Goodsstart = task.ADDRFROM.ToShort();
|
|
|
+ // dev.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
|
+ // dev.Data.CmdType = IstationCmdType.扫码入库;
|
|
|
+ // dev.Data.VoucherNo++;
|
|
|
+ // 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());
|
|
|
+ // });
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ //}
|
|
|
+
|
|
|
[WorkTitle(typeof(ProductHandler), "一楼入库扫码")]
|
|
|
- internal class 一楼入库 : DeviceWork<StationDevice>
|
|
|
+ internal class 一楼入库 : Work<StationDeviceGroup>
|
|
|
{
|
|
|
- private readonly string Conv_1028 = "1028";
|
|
|
- private readonly string Conv_1029 = "1029";
|
|
|
-
|
|
|
protected override bool SelectDevice(WCS_DEVICE dev)
|
|
|
{
|
|
|
- return dev.CODE == Conv_1028 || dev.CODE == Conv_1029;
|
|
|
+ return dev.CODE == "G1028";
|
|
|
}
|
|
|
|
|
|
- protected override void Do(StationDevice dev)
|
|
|
+ protected override void Do(StationDeviceGroup obj)
|
|
|
{
|
|
|
- dev.EX(dev =>
|
|
|
+ obj.EX(obj =>
|
|
|
{
|
|
|
- var code = dev.Entity.CODE;
|
|
|
- if (dev.Data.VoucherNo != dev.Data2.VoucherNo)
|
|
|
- throw new WarnException($"等待任务[{dev.Data2.Tasknum}]执行--凭证号不一致[{dev.Data.VoucherNo}][{dev.Data2.VoucherNo}]");
|
|
|
- if (!dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new DoException("无光电");
|
|
|
- if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException("设备运行中");
|
|
|
- if (dev.Data2.Request != IstationRequest.扫码入库) throw new WarnException("有光电无请求");
|
|
|
- if (dev.Data2.Tasknum > 10000) throw new WarnException("有光电有请求,但已生产任务");
|
|
|
-
|
|
|
- var bcr = dev.Entity.BCR();
|
|
|
- var barcode = bcr.Content.Trim('\r');
|
|
|
- if (barcode == "") throw new WarnException("扫码失败");
|
|
|
-
|
|
|
- var info = WMS.I_WCS_GetInTask(barcode, dev.Entity.CODE);
|
|
|
- var next = dev.Entity.CODE == Conv_1028 ? "1030" : "1031";
|
|
|
- var station = dev.Entity.CODE;
|
|
|
+ //设备组无论单卷还是双卷都必须满足的条件
|
|
|
+ if (obj.Items.Any(v => v.Data.VoucherNo != v.Data2.VoucherNo)) throw new WarnException($"等待任务执行--凭证号不一致");
|
|
|
+ if (obj.Items.Any(v => !v.Data2.Status.HasFlag(IstationStatus.光电状态))) throw new DoException($"无光电");
|
|
|
+ if (obj.Items.Any(v => v.Data3.Status.HasFlag(StationStatus.运行状态位))) throw new WarnException($"设备运行中");
|
|
|
+
|
|
|
+ //成功创建的任务
|
|
|
+ var finishTaskList = new List<Tuple<int, StationDevice>>();
|
|
|
+
|
|
|
+ //创建对应的任务
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
- 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.Default.Set<WCS_TASK>().Add(task);
|
|
|
+ foreach (var dev in obj.Items)
|
|
|
+ {
|
|
|
+ if (dev.Data2.Request != IstationRequest.扫码入库) continue; //没有请求
|
|
|
+ if (dev.Data2.Tasknum > 10000) continue; //没有任务号
|
|
|
+
|
|
|
+ var bcr = dev.Entity.BCR();
|
|
|
+ var barcode = bcr.Content.Trim('\r');
|
|
|
+ if (barcode == "") continue; //扫码失败
|
|
|
+
|
|
|
+ var info = WMS.I_WCS_GetInTask(barcode, dev.Entity.CODE);
|
|
|
+ var next = dev.Entity.CODE == "1028" ? "1030" : "1031";
|
|
|
+ if (db.Default.Set<WCS_TASK>().AsNoTracking().Any(v => v.BARCODE == info.ContainerCode && v.STATUS < TaskStatus.已完成 && v.TYPE == TaskType.入库))
|
|
|
+ {
|
|
|
+ throw new WarnException($"WCS有正在执行的{info.ContainerCode},WMS任务号:{info.WMSTaskNum}");
|
|
|
+ }
|
|
|
+
|
|
|
+ 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.Default.Set<WCS_TASK>().Add(task);
|
|
|
+ finishTaskList.Add(new Tuple<int, StationDevice>(task.ID, dev.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());
|
|
|
+ }
|
|
|
+ //两个任务一起创建
|
|
|
db.Default.SaveChanges();
|
|
|
+ });
|
|
|
|
|
|
- dev.Data.Tasknum = task.ID;
|
|
|
- dev.Data.Goodsstart = task.ADDRFROM.ToShort();
|
|
|
- dev.Data.Goodsend = task.ADDRNEXT.ToShort();
|
|
|
- dev.Data.CmdType = IstationCmdType.扫码入库;
|
|
|
- dev.Data.VoucherNo++;
|
|
|
- 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.Do(db =>
|
|
|
+ {
|
|
|
+ foreach (var finishTask in finishTaskList)
|
|
|
+ {
|
|
|
+ var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.ID == finishTask.Item1);
|
|
|
+ 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.CmdType = IstationCmdType.扫码入库;
|
|
|
+ finishTask.Item2.Data.VoucherNo++;
|
|
|
+ }
|
|
|
});
|
|
|
});
|
|
|
}
|