123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- using DbHelper;
- using Log;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using WCS.BaseExtensions;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol;
- using WCS.Service.Extensions;
- using WCS.Service.Handlers;
- using WCS.Service.Helpers;
- namespace WCS.Service.Works.Station
- {
- [WorkTitle(typeof(ProductHandler), "扫码入库")]
- internal class 扫码入库 : Work<StationDeviceGroup>
- {
- protected override void Do(StationDeviceGroup obj)
- {
- InfoLog.INFO_WARN("测试");
- 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";
- }
- }
- }
|