123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using PlcSiemens.Core.Extension;
- using ServiceCenter.Extensions;
- using ServiceCenter.SqlSugars;
- using System.ComponentModel;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol.Station;
- using WCS.WorkEngineering.Worlds;
- using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
- using TaskStatus = WCS.Entity.TaskStatus;
- namespace WCS.WorkEngineering.Systems
- {
- /// <summary>
- /// 桁架码垛区补空托盘任务生成
- /// </summary>
- [BelongTo(typeof(SortingPalletizingWorld))]
- [Description("桁架码垛区补空托盘任务生成")]
- public class 桁架码垛区补空托盘任务生成 : DeviceSystem<Device<IStation520>>
- {
- protected override bool ParallelDo => true;
- protected override bool SaveLogsToFile => true;
- public override void Do(Device<IStation520> obj)
- {
- WCS_Palletizing palletizing = null;
- SqlSugarHelper.Do(_db =>
- {
- var db = _db.Default;
- //取一个时间最靠前的,没有绑定码垛工位的码垛记录
- var palletizingInfo = db.Queryable<WCS_Palletizing>().OrderBy(x => x.AddTime).First(x => x.DeviceCode != "Truss1" && x.PalletizingStation == null && !x.Finish);
- if (palletizingInfo == null) throw new Exception($"没有可用码垛信息");
- var palleTask = db.Queryable<WCS_TaskInfo>().First(x => x.ID == palletizingInfo.TaskId && (x.Status == TaskStatus.FinishOfShunt || x.Status == TaskStatus.ConveyorExecution));
- if (palleTask == null) throw new Exception($"未找到任务{palleTask.ID}");
- //获取可以使用的放货站台信息
- var taskAddNext = Device.All.FirstOrDefault(x => x.Code == palleTask.AddrNext).Targets.FirstOrDefault().Targets.Where(x => x.HasFlag(DeviceFlags.桁架码垛位));
- if (taskAddNext == null) throw new Exception($"未找到{palleTask.AddrNext}可去的码垛工位");
- var devs = Device.All.Where(x => taskAddNext.Contains(x)).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).ToList();
- //获取所有的未结束且有码垛工位的码垛记录
- var palletizingStation = db.Queryable<WCS_Palletizing>().Where(x => !x.Finish && x.PalletizingStation != null).Select(x => x.PalletizingStation).ToList();
- //取一个可用用于码垛的地方
- var dev = devs.Where(x => !palletizingStation.Contains(x.Entity.Code)).FirstOrDefault(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status));
- if (dev == null) throw new Exception($"没有可用码垛工位");
- var addrFromCode = palletizingInfo.WarehouseCode switch
- {
- "1N" => "1606",
- "1S" => "1616",
- "2N" => "1626",
- "2S" => "1636",
- "3N" => "1646",
- "3S" => "1656",
- _ => "9999"
- };
- var endDev = Device.All.Where(x => x.Code == addrFromCode).Select(x => new Device<IStation520>(x, World)).FirstOrDefault();
- if (endDev.Data.TaskNumber != 0 || endDev.Data.GoodsEnd != 0) throw new Exception($"{endDev.Entity.Code}有残留任务信息,请处理!");
- palletizingInfo.PalletizingStation = dev.Entity.Code;
- db.Updateable(palletizingInfo).ExecuteCommand();
- palletizing = palletizingInfo;
- });
- if (palletizing == null) return;
- var addrFromCode = palletizing.WarehouseCode switch
- {
- "1N" => "1606",
- "1S" => "1616",
- "2N" => "1626",
- "2S" => "1636",
- "3N" => "1646",
- "3S" => "1656",
- _ => "9999"
- };
- var dev = Device.All.Where(x => x.Code == addrFromCode).Select(x => new Device<IStation520>(x, World)).FirstOrDefault();
- dev.Data.TaskNumber = palletizing.Id;
- dev.Data.GoodsEnd = palletizing.PalletizingStation!.ToShort();
- }
- public override bool Select(Device dev)
- {
- return dev.Code == nameof(桁架码垛区补空托盘任务生成);
- }
- }
- }
|