using DBHelper; using System.Linq; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol; using WCS.Service.Extensions; namespace WCS.Service.Works.Station { [WorkTitle(typeof(ProductHandler), "一楼出库堆垛机放货完成后分配下一个地址")] public class 一楼出库 : DeviceWork { protected override void Do(StationDevice obj) { obj.EX(obj => { obj.WhetherToExecute(IstationRequest.堆垛机放货完成请求目标地址); //找到当前站台为当前设备且任务为堆垛机完成的任务 DB.Do(db => { var task = db.Default.Set().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == obj.Entity.CODE && v.STATUS == TaskStatus.堆垛机完成); if (task == null) throw new WarnException("WCS无该任务信息"); if (task.SRMSTATION != obj.Entity.CODE && task.STATUS != TaskStatus.堆垛机完成) throw new WarnException("任务状态不是堆垛机完成"); task.STATUS = TaskStatus.执行中; db.Default.SaveChanges(); task.CreateStatusLog(db, $"状态由[{TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{obj.Entity.Code}", this.GetType()); //开始写入目标地址 obj.Data.Tasknum = task.ID; obj.Data.Goodsstart = obj.Entity.CODE.ToShort(); obj.Data.Goodsend = task.ADDRNEXT.ToShort(); obj.Data.CmdType = IstationCmdType.堆垛机放货完成请求目标地址; obj.Data.VoucherNo++; }); }); } protected override bool SelectDevice(WCS_DEVICE dev) { return dev.Is(DF.SRM放货); } } [WorkTitle(typeof(ProductHandler), "月台出货口完成任务")] public class 月台完成任务 : Work { protected override void Do(StationDeviceGroup obj) { obj.EX(obj => { //找到当前站台为当前设备且任务为堆垛机完成的任务 DB.Do(db => { foreach (var dev in obj.Items) { //当前组有一个运行的设备就停止执行 if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException("设备运行中"); if (dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new WarnException("有光电,产品未离开设备"); if (dev.Data2.Tasknum < 10000) throw new DoException("无任务号"); if (dev.Data2.Request != IstationRequest.月台出库口任务完成) throw new WarnException("无完成任务请求"); if (dev.Data2.Tasknum < 10000) throw new WarnException("任务号错误"); var task = db.Default.Set().Where(v => v.ID == dev.Data2.Tasknum).FirstOrDefault(); if (task.STATUS != TaskStatus.执行中) throw new WarnException($"{task.ID}任务状态错误"); task.STATUS = TaskStatus.已完成; db.Default.SaveChanges(); task.CreateStatusLog(db, $"状态由[{TaskStatus.执行中}]变更为[{task.STATUS}]-{dev.Entity.CODE}", this.GetType()); dev.Data.CmdType = IstationCmdType.月台出库口任务完成; dev.Data.VoucherNo++; } }); }); } protected override bool SelectDevice(WCS_DEVICE dev) { return dev.Is(DF.月台); } } }