12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- using ServiceCenter.Logs;
- using ServiceCenter.Redis;
- using ServiceCenter.SqlSugars;
- using System.ComponentModel;
- using WCS.Core;
- using WCS.Entity;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.Protocol.Station;
- using WCS.WorkEngineering.WebApi.Controllers;
- using WCS.WorkEngineering.WebApi.Models.AGV.Response;
- using WCS.WorkEngineering.Worlds;
- using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
- namespace WCS.WorkEngineering.Systems
- {
- /// <summary>
- /// 出库站台交互
- /// </summary>
- [BelongTo(typeof(MainWorld))]
- [Description("一楼出库工位处理系统")]
- public class 一楼出库工位处理系统 : DeviceSystem<Station>
- {
- protected override bool ParallelDo => true;
- protected override bool SaveLogsToFile => true;
- public override void Do(Station obj)
- {
- var key = $"WCS:Lock:{obj.Entity.Code}";
- try
- {
- if (RedisHub.Default.Get(key) != null)
- {
- throw new KnownException($"[{obj.Entity.Code}]--触发并发管控", LogLevelEnum.High);
- }
- RedisHub.Default.Set(key, obj.Entity.Code);
- //有任务需要执行
- if (obj.Data3.Status.HasFlag(StationStatus.PH_Status) && obj.Data3.Status.HasFlag(StationStatus.OT_Status))
- {
- SqlSugarHelper.Do(db =>
- {
- //当前站台是否有任务在执行
- var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber && v.Status == Entity.TaskStatus.ConveyorExecution) ?? throw new KnownException("无可执行任务", LogLevelEnum.Mid);
- var agv = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(2)).First(v => v.ID == task.AgvTaskID && v.Status == AGVTaskStatus.NewBuild) ?? throw new KnownException("未找到对应的AGV任务", LogLevelEnum.Mid);
- string endPos = "";
- if (task.AddrTo == "1021" || task.AddrTo == "1022" || task.AddrTo == "1023" || task.AddrTo == "1024")
- {
- endPos = "PT" + task.AddrTo;
- }
- else
- {
- endPos = task.AddrTo;
- }
- GenAgvSchedulingTaskResponse res = null;
- if (endPos.Contains("A") || endPos.Contains("B") || endPos.Contains("C") || endPos.Contains("D"))
- {
- res = AgvApi.搬运_wmsStart("PT", agv.Station, endPos, Guid.NewGuid().ToString().Replace("-", ""), "1");
- }
- else
- {
- res = AgvApi.叫料出库("PT", agv.Station, endPos, Guid.NewGuid().ToString().Replace("-", ""), "1");
- }
- agv.Status = AGVTaskStatus.Confirm;
- agv.AgvID = res.data;
- db.Default.Updateable(agv).SplitTable().ExecuteCommand();
- //更新WCS数据
- task.Status = Entity.TaskStatus.AGVExecution;
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db, task.Device, $"任务下发至AGV-AGV任务ID{agv.AgvID}");
- });
- }
- }
- finally
- {
- RedisHub.Default.Del(key);
- }
- }
- public override bool Select(Device dev)
- {
- return dev.HasFlag(DeviceFlags.一楼出库口);
- }
- }
- }
|