林豪 左 il y a 2 ans
Parent
commit
882f00d02a

+ 1 - 236
WCS.WorkEngineering/Systems/AgvSystems.cs

@@ -1,14 +1,7 @@
-using PlcSiemens.Core.Extension;
-using ServiceCenter.Extensions;
-using ServiceCenter.Logs;
-using ServiceCenter.SqlSugars;
-using System.ComponentModel;
+using System.ComponentModel;
 using WCS.Core;
-using WCS.Entity;
 using WCS.WorkEngineering.Extensions;
 using WCS.WorkEngineering.Protocol.SRM;
-using WCS.WorkEngineering.Protocol.Station;
-using WCS.WorkEngineering.WebApi.Controllers;
 using WCS.WorkEngineering.Worlds;
 using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
 
@@ -36,234 +29,6 @@ namespace WCS.WorkEngineering.Systems
 
         public override void Do(Station obj)
         {
-            if (obj.Entity.HasFlag(DeviceFlags.出库))
-            {
-                List<WCS_AgvTaskInfo> agvTaskInfos = new List<WCS_AgvTaskInfo>();
-                //获取所有未结束的叫料及背负式补空AGV任务
-                SqlSugarHelper.Do(db =>
-                {
-                    agvTaskInfos = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => (v.TaskType == AGVTaskType.CallMaterial || v.TaskType == AGVTaskType.CallForMaterial || v.TaskType == AGVTaskType.ForkliftFilling))
-                                                                         .Where(v => v.Status < AGVTaskStatus.MissionCompleted)
-                                                                         .SplitTable(tabs => tabs.Take(2)).OrderBy(v => v.AddTime).ToList();
-                });
-                //有需要处理的AGV任务
-                if (agvTaskInfos.Any())
-                {
-                    this.ExRecord(obj.Entity.Code, "可用出库AGV任务列表", agvTaskInfos.Select(v => v.ID).ToList());
-                    List<WCS_TaskInfo> taskInfos = new List<WCS_TaskInfo>();
-
-                    foreach (var agv in agvTaskInfos)
-                    {
-                        try
-                        {
-                            SqlSugarHelper.Do(db =>
-                            {
-                                //取货点安全交互
-                                if (agv.AgvStatus == AGVTaskStatus.RequestOrPermission2 && agv.Status != AGVTaskStatus.Complete2)
-                                {
-                                    var taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agv.ID);
-                                    agv.Status = AGVTaskStatus.Complete2;
-                                    db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                                    taskInfo.AddWCS_TASK_DTL(db, "agv", $"允许AGV任务{agv.ID}在站台{agv.Station}取货");
-                                    AgvApi.ContinueTask(agv.AgvID, agv.Station);
-                                }
-                                //完成任务
-                                else if (agv.AgvStatus == AGVTaskStatus.MissionCompleted && agv.Status != AGVTaskStatus.MissionCompleted)
-                                {
-                                    if (agv.TaskType is AGVTaskType.CallForMaterial or AGVTaskType.ForkliftFilling or AGVTaskType.CallMaterial)
-                                    {
-                                        var taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agv.ID);
-                                        if (taskInfo == null) throw new Exception($"未找到AGV任务{agv.ID}对应WCS任务");
-                                        //更新AGV任务状态
-                                        agv.Status = AGVTaskStatus.MissionCompleted;
-                                        db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                                        //更新WCS任务状态
-                                        taskInfo.Status = Entity.TaskStatus.Finish;
-                                        taskInfo.EedTime = DateTime.Now;
-                                        db.Default.Updateable(taskInfo).ExecuteCommand();
-                                        taskInfo.AddWCS_TASK_DTL(db, "agv", "任务完成");
-                                        taskInfo.CompleteOrCancelTasks(db);
-                                        taskInfos.Add(taskInfo);
-                                    }
-                                    else
-                                    {
-                                        agv.Status = AGVTaskStatus.MissionCompleted;
-                                        db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                                    }
-                                }
-                            });
-                        }
-                        catch (Exception ex)
-                        {
-                            World.Log(ex.Message, LogLevelEnum.Mid);
-                            this.ExRecord(obj.Entity.Code, ex.Message);
-                            continue;
-                        }
-                    }
-
-                    foreach (var item in taskInfos)
-                    {
-                        WmsApi.CompleteTask(item.ID);
-                    }
-                }
-            }
-            else if (obj.Entity.HasFlag(DeviceFlags.入库))
-            {
-                List<WCS_AgvTaskInfo> agvTaskInfos = new List<WCS_AgvTaskInfo>();
-                //获取所有未结束的入库AGV任务
-                SqlSugarHelper.Do(db =>
-                {
-                    agvTaskInfos = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot).SplitTable(tabs => tabs.Take(2)).OrderBy(v => v.EditTime).ToList();
-                });
-
-                if (agvTaskInfos.Any())
-                {
-                    this.ExRecord(obj.Entity.Code, "可用入库AGV任务列表", agvTaskInfos.Select(v => v.ID).ToList());
-                    foreach (var agv in agvTaskInfos)
-                    {
-                        try
-                        {
-                            SqlSugarHelper.Do(db =>
-                            {
-                                //找到对应WCS任务
-                                var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.AgvTaskID == agv.ID);
-                                if (task == null) throw new Exception($"AGV任务{agv.ID}未找到对应WCS任务");
-
-                                #region 开始跟据AGV状态做出处理
-
-                                //巷道分配
-                                if (agv.AgvStatus == AGVTaskStatus.RequestOrPermission1 && agv.Status != AGVTaskStatus.Complete1)
-                                {
-                                    this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID}开始进行巷道分配");
-                                    //向WMS获取巷道优先级
-                                    var res = WmsApi.GetTunnelPriorityList(task.ID);
-                                    this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID},WMS返回巷道优先级{res.ResData}");
-                                    var tunnelNo = res.ResData.Split(",").Select(v => "SRM" + v).ToList();
-
-                                    //开始获取堆垛机与可用站台信息
-                                    SRM srm = null;
-                                    List<Station> stations = new List<Station>();
-                                    if (task.Floor == 1) //一楼
-                                    {
-                                        //一楼三个入库口
-                                        stations = devs.Where(v => v.Entity.Code is "1011" or "1013" or "1015").ToList();
-                                        //筛选出可用站台
-                                        stations = stations.Where(v => v.Data.VoucherNo == v.Data2.VoucherNo && v.Data3.Status.HasFlag(StationStatus.Auto))
-                                                           .Where(v => !v.Data3.Status.HasFlag(StationStatus.PH_Status) && !v.Data3.Status.HasFlag(StationStatus.OT_Status))
-                                                           .Where(v => !v.Data3.Status.HasFlag(StationStatus.Run)).ToList(); // 筛选出可用站台
-                                        this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID},可用放货站台", stations.Select(v => v.Entity.Code).ToList());
-                                        //可用堆垛机
-                                        srm = stations.Select(v => v.Entity.Sources).SelectMany(v => v).Where(v => v.IsTunnel()) //上一个地址是巷道的
-                                                      .Select(v => v.Sources).SelectMany(v => v).Where(v => v.HasProtocol(typeof(ISRM520))) //筛选出堆垛机
-                                                      .Select(v => new SRM(v, this.World)) //转换为SRM
-                                                      .Where(v => v != null && !v.Data2.Status.HasFlag(SrmStatus.Alarm) && v.Data2.AutoStatus == SrmAutoStatus.Automatic) //筛选出可用堆垛机
-                                                      .Where(v => tunnelNo.Contains(v.Entity.Code)) //筛选出巷道优先级最高的堆垛机
-                                                      .MinBy(v => tunnelNo.IndexOf(v.Entity.Code));//按照巷道优先级排序
-                                    }
-                                    else //二楼
-                                    {
-                                        //二楼三个入库口
-                                        stations = devs.Where(v => v.Entity.Code is "1021" or "1023" or "1025").ToList();
-                                        //筛选出可用站台
-                                        stations = stations.Where(v => v.Data.VoucherNo == v.Data2.VoucherNo && v.Data3.Status.HasFlag(StationStatus.Auto))
-                                                           .Where(v => !v.Data3.Status.HasFlag(StationStatus.PH_Status) && !v.Data3.Status.HasFlag(StationStatus.OT_Status))
-                                                           .Where(v => !v.Data3.Status.HasFlag(StationStatus.Run)).ToList(); // 筛选出可用站台
-                                        this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID},可用放货站台", stations.Select(v => v.Entity.Code).ToList());
-                                        //可用堆垛机
-                                        srm = stations.Select(v => v.Entity.Sources).SelectMany(v => v).Where(v => v.IsTunnel()) //上一个地址是巷道的
-                                                      .Select(v => v.Sources).SelectMany(v => v).Where(v => v.HasProtocol(typeof(ISRM520))) //筛选出堆垛机
-                                                      .Select(v => new SRM(v, this.World)) //转换为SRM
-                                                      .Where(v => v != null && !v.Data2.Status.HasFlag(SrmStatus.Alarm) && v.Data2.AutoStatus == SrmAutoStatus.Automatic) //筛选出可用堆垛机
-                                                      .Where(v => tunnelNo.Contains(v.Entity.Code)) //筛选出巷道优先级最高的堆垛机
-                                                      .MinBy(v => tunnelNo.IndexOf(v.Entity.Code));//按照巷道优先级排序
-                                    }
-                                    if (srm == null) throw new Exception($"agv任务{agv.ID}无可用堆垛机");
-
-                                    //筛选出堆垛机的放货站台
-                                    var nextPos = stations.FirstOrDefault(v => v.Entity.Sources.Where(t => t.IsTunnel()).Select(t => t.Sources).SelectMany(v => v) //获取所有巷道
-                                                                                               .Where(t => t.HasProtocol(typeof(ISRM520)))//筛选出堆垛机
-                                                                                               .SelectMany(v => v.Sources).Any(t => t.Code == srm.Entity.Parent.Code));
-                                    this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID},放货站台{nextPos}");
-
-                                    bool flag = false;
-                                    if (((task.BusType == "二楼湿拉线退料回立库" || task.BusType == "二楼湿拉线余料回立库") && task.Floor == 2))
-                                    {
-                                        flag = true;
-                                        nextPos.Entity.Code = "1025";
-                                    }
-                                    var agvs = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status < AGVTaskStatus.MissionCompleted && v.Position == nextPos.Entity.Code).SplitTable(v => v.Take(2)).ToList();
-                                    if (agvs.Any())
-                                    {
-                                        var msg = "已无可用放货站台,任务正在执行中:";
-                                        foreach (var ag in agvs)
-                                        {
-                                            msg = msg + $"[任务号:{ag.ID},目标地址:{ag.Position}]";
-                                        }
-                                        throw new Exception(msg);
-                                    }
-
-                                    //更新AGV任务状态
-                                    agv.Status = AGVTaskStatus.Complete1;
-                                    agv.Position = flag == true ? "1025" : nextPos.Entity.Code;
-                                    db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                                    //更新WCS任务状态
-                                    if (flag)
-                                    {
-                                        srm.Entity.Code = "SRM3";
-                                        task.Device = srm.Entity.Code;
-                                        task.Tunnel = "3";
-                                        task.AddrNext = "1025";
-                                    }
-                                    else
-                                    {
-                                        task.Device = srm.Entity.Code;
-                                        task.Tunnel = task.Device.GetLastDigit().ToString();
-                                        task.AddrNext = agv.Position;
-                                    }
-                                    db.Default.Updateable(task).ExecuteCommand();
-                                    task.AddWCS_TASK_DTL(db, "AGV巷道分配点", nextPos.Entity.Code, $"任务分配至堆垛机:{srm.Entity.Code}");
-                                    this.ExRecord(obj.Entity.Code, $"AGV任务{agv.ID}分配至堆垛机:{srm.Entity.Code}");
-                                    //调继续执行任务接口
-                                    AgvApi.ContinueTask(agv.AgvID, nextPos.Entity.Code);
-                                }
-                                //放货站点安全交互
-                                else if (agv.AgvStatus == AGVTaskStatus.RequestOrPermission2 && agv.Status != AGVTaskStatus.Complete2)
-                                {
-                                    if (agv.Position.IsNullOrEmpty()) throw new Exception($"无有效放货地址");
-                                    var dev = devs.Find(v => v.Entity.Code == agv.Position);
-
-                                    if (dev.Data.VoucherNo != dev.Data2.VoucherNo) throw new Exception($"AGV请求放货,但{dev.Entity.Code}凭证号不一致");
-                                    if (!dev.Data3.Status.HasFlag(StationStatus.Auto)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}不在自动状态");
-                                    if (dev.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}光电有货");
-                                    if (dev.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}任务有货");
-                                    if (dev.Data3.Status.HasFlag(StationStatus.Run)) throw new Exception($"AGV请求放货,但{dev.Entity.Code}在运行状态");
-                                    agv.Status = AGVTaskStatus.Complete2;
-                                    db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-
-                                    //调继续执行任务接口
-                                    AgvApi.ContinueTask(agv.AgvID, dev.Entity.Code);
-
-                                    dev.Data.TaskNumber = task.ID;
-                                }
-                                //完成任务
-                                else if (agv.AgvStatus == AGVTaskStatus.MissionCompleted && agv.Status != AGVTaskStatus.MissionCompleted)
-                                {
-                                    agv.Status = AGVTaskStatus.MissionCompleted;
-                                    db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                                }
-
-                                #endregion 开始跟据AGV状态做出处理
-                            });
-                        }
-                        catch (Exception ex)
-                        {
-                            World.Log(ex.Message, LogLevelEnum.Mid);
-                            this.ExRecord(obj.Entity.Code, ex.Message);
-                            continue;
-                        }
-                    }
-                }
-            }
         }
 
         public override bool Select(Device dev)

+ 1 - 238
WCS.WorkEngineering/Systems/NoInteractionSystems.cs

@@ -1,14 +1,6 @@
-using PlcSiemens.Core.Extension;
-using ServiceCenter.Logs;
-using ServiceCenter.Redis;
-using ServiceCenter.SqlSugars;
-using System.ComponentModel;
-using System.Threading.Tasks;
+using System.ComponentModel;
 using WCS.Core;
-using WCS.Entity;
 using WCS.WorkEngineering.Extensions;
-using WCS.WorkEngineering.WebApi.Controllers;
-using WCS.WorkEngineering.WebApi.Models.AGV.Response;
 using WCS.WorkEngineering.Worlds;
 
 namespace WCS.WorkEngineering.Systems
@@ -30,235 +22,6 @@ namespace WCS.WorkEngineering.Systems
 
         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);
-
-                #region 处理所有的新增任务
-
-                try
-                {
-                    List<WCS_TaskInfo> taskInfos = new List<WCS_TaskInfo>();
-                    SqlSugarHelper.Do(db =>
-                    {
-                        taskInfos = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.Status == Entity.TaskStatus.NewBuild).ToList();
-                    });
-                    if (taskInfos.Any())
-                    {
-                        foreach (var item in taskInfos)
-                        {
-                            try
-                            {
-                                SqlSugarHelper.Do(db =>
-                                {
-                                    var task = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.ID == item.ID).First() ?? throw new Exception($"未找到对应的WCS任务[{item.ID}]");
-                                    if (task.Type == TaskType.EnterDepot)
-                                    {
-                                        //创建AGV任务
-                                        var agvTask = new WCS_AgvTaskInfo()
-                                        {
-                                            ID = db.GetAGVTaskId(),
-                                            TaskType = AGVTaskType.EnterDepot,
-                                            Status = AGVTaskStatus.NewBuild,
-                                            Station = task.WorkBench,
-                                            AddWho = "WCS",
-                                            //Position = task.SrmStation
-                                        };
-                                        if (task.Floor == 2)
-                                        {
-                                            task.Tunnel = "3";
-                                            task.Device = "SRM3";
-                                            task.SrmStation = "1025";
-                                        }
-                                        db.Default.Insertable(agvTask).SplitTable().ExecuteCommand();
-                                        //更新任务状态
-                                        task.Status = Entity.TaskStatus.WaitingToExecute;
-                                        task.AgvTaskID = agvTask.ID;
-                                        db.Default.Updateable(task).ExecuteCommand();
-                                        task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息,并创建AGV任务中间表,AGV任务目标地址:{agvTask.Position}");
-                                    }
-                                    else if (task.Type == TaskType.OutDepot)
-                                    {
-                                        #region 二楼非半自动手动出库任务需要创建AGV任务
-
-                                        if (task.Floor == 2 && task.OutType != OutTypeEnum.半自动手动出库任务)
-                                        {
-                                            //创建AGV任务
-                                            var agvTask = new WCS_AgvTaskInfo()
-                                            {
-                                                ID = db.GetAGVTaskId(),
-                                                TaskType = AGVTaskType.CallMaterial,
-                                                Status = AGVTaskStatus.NewBuild,
-                                                Station = task.WorkBench,
-                                                AddWho = "WCS"
-                                            };
-                                            db.Default.Insertable(agvTask).SplitTable().ExecuteCommand();
-                                            task.AgvTaskID = agvTask.ID;
-                                        }
-
-                                        #endregion 二楼非半自动手动出库任务需要创建AGV任务
-
-                                        if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台
-                                        {
-                                            //获取堆垛机到目标地址的路径信息
-                                            var path = DevicePath.GetPath(task.Device, task.AddrTo);
-                                            task.SrmStation = path.Points[1].Code;
-                                        }
-                                        //更新任务状态
-                                        task.Status = Entity.TaskStatus.WaitingToExecute;
-                                        db.Default.Updateable(task).ExecuteCommand();
-                                        task.AddWCS_TASK_DTL(db, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
-                                    }
-                                    else if (task.Type == TaskType.Delivery) //一楼叉车搬运任务
-                                    {
-                                        var agv = new WCS_AgvTaskInfo()
-                                        {
-                                            ID = db.GetAGVTaskId(),
-                                            TaskType = AGVTaskType.ForkliftFilling,
-                                            Status = AGVTaskStatus.NewBuild,
-                                            Station = task.WorkBench,
-                                            AddWho = "WCS"
-                                        };
-                                        db.Default.Insertable(agv).SplitTable().ExecuteCommand();
-                                        //更新WCS数据
-                                        task.Status = Entity.TaskStatus.WaitingToExecute;
-                                        task.AgvTaskID = agv.ID;
-                                        db.Default.Updateable(task).ExecuteCommand();
-                                        task.AddWCS_TASK_DTL(db, task.Device, $"初始化搬运任务信息,并创建AGV任务");
-                                    }
-                                    else if (task.Type == TaskType.EmptyInit)
-                                    {
-                                        //更新任务状态
-                                        task.Status = Entity.TaskStatus.WaitingToExecute;
-                                        db.Default.Updateable(task).ExecuteCommand();
-                                        task.AddWCS_TASK_DTL(db, task.Device, $"初始化任务信息");
-                                    }
-                                });
-                            }
-                            catch (Exception ex)
-                            {
-                                World.Log(ex.Message, LogLevelEnum.Mid);
-                                continue;
-                            }
-                        }
-                    }
-                }
-                catch (Exception ex)
-                {
-                    World.Log(ex.Message, LogLevelEnum.Mid);
-                }
-
-                #endregion 处理所有的新增任务
-
-                #region 下发入库AGV任务
-
-                List<WCS_AgvTaskInfo> agvTaskInfos = new List<WCS_AgvTaskInfo>();
-
-                SqlSugarHelper.Do(db =>
-                {
-                    agvTaskInfos = db.Default.Queryable<WCS_AgvTaskInfo>().Where(t => t.Status == AGVTaskStatus.NewBuild && t.TaskType == AGVTaskType.EnterDepot).SplitTable(v => v.Take(2)).ToList();
-                });
-
-                if (agvTaskInfos.Any())
-                {
-                    foreach (var item in agvTaskInfos)
-                    {
-                        try
-                        {
-                            SqlSugarHelper.Do(db =>
-                            {
-                                var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(t => t.ID == item.ID).SplitTable(v => v.Take(2)).First() ?? throw new Exception($"未找到对应的AGV任务:{item.ID}");
-                                //获取对应wcs任务
-                                var wcs = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.AgvTaskID == agv.ID && t.Status == Entity.TaskStatus.WaitingToExecute).First() ?? throw new Exception($"AGV任务[{item.ID}]未找到对应的WCS任务");
-
-                                switch (wcs.Floor)
-                                {
-                                    case 1: //一楼下发AGV任务
-                                        var res = AgvApi.满轮入库(wcs.BarCode, agv.Station, Guid.NewGuid().ToString().Replace("-", ""), "1");
-                                        agv.Status = AGVTaskStatus.Confirm;
-                                        agv.AgvID = res.data;
-                                        db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                                        break;
-
-                                    case 2:
-                                        var agvRes = IwmsApi.空轮回库(wcs.MatCode, wcs.SrmStation, wcs.IsSurplus, wcs.IsRework, agv.ID, wcs.BarCode);
-                                        agv.Status = AGVTaskStatus.Confirm;
-                                        agv.AgvID = agvRes.data;
-                                        db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                                        break;
-
-                                    default:
-                                        break;
-                                }
-
-                                //更新WCS数据
-                                wcs.Status = Entity.TaskStatus.AGVExecution;
-                                db.Default.Updateable(wcs).ExecuteCommand();
-                                wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV-AGV任务ID{agv.AgvID}");
-                            });
-                        }
-                        catch (Exception ex)
-                        {
-                            World.Log(ex.Message, LogLevelEnum.Mid);
-                            continue;
-                        }
-                    }
-                }
-
-                #endregion 下发入库AGV任务
-
-                #region 一楼叉车补空任务处理
-
-
-                List<WCS_AgvTaskInfo> agvTaskInfos1 = new List<WCS_AgvTaskInfo>();
-
-                SqlSugarHelper.Do(db =>
-                {
-                    agvTaskInfos1 = db.Default.Queryable<WCS_AgvTaskInfo>().Where(t => t.Status == AGVTaskStatus.NewBuild && t.TaskType == AGVTaskType.ForkliftFilling).SplitTable(v => v.Take(2)).ToList();
-                });
-
-                if (agvTaskInfos1.Any())
-                {
-                    foreach (var item in agvTaskInfos1)
-                    {
-                        try
-                        {
-                            GenAgvSchedulingTaskResponse res = new GenAgvSchedulingTaskResponse();
-                            SqlSugarHelper.Do(db =>
-                            {
-                                var agv = db.Default.Queryable<WCS_AgvTaskInfo>().Where(t => t.ID == item.ID).SplitTable(v => v.Take(2)).First() ?? throw new Exception($"未找到对应的AGV任务:{item.ID}");
-                                //获取对应wcs任务
-                                var wcs = db.Default.Queryable<WCS_TaskInfo>().Where(t => t.AgvTaskID == agv.ID && t.Status == Entity.TaskStatus.WaitingToExecute).First() ?? throw new Exception($"AGV任务[{item.ID}]未找到对应的WCS任务");
-                                //下发AGV任务
-                                res = AgvApi.机台补空(agv.Station, Guid.NewGuid().ToString().Replace("-", ""), "1");
-                                agv.Status = AGVTaskStatus.Confirm;
-                                agv.AgvID = res.data;
-                                db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-
-                                wcs.Status = Entity.TaskStatus.AGVExecution;
-                                db.Default.Updateable(wcs).ExecuteCommand();
-                                wcs.AddWCS_TASK_DTL(db, wcs.Device, $"任务下发至AGV,AGV任务号:{res.data}");
-                            });
-                        }
-                        catch (Exception ex)
-                        {
-                            World.Log(ex.Message, LogLevelEnum.Mid);
-                            continue;
-                        }
-                    }
-                }
-
-                #endregion 移动任务处理
-            }
-            finally
-            {
-                RedisHub.Default.Del(key);
-            }
         }
 
         public override bool Select(Device dev)

+ 0 - 44
WCS.WorkEngineering/Systems/RGVSystems.cs

@@ -1,44 +0,0 @@
-using ServiceCenter.Logs;
-using System.ComponentModel;
-using WCS.Core;
-using WCS.WorkEngineering.Extensions;
-using WCS.WorkEngineering.Protocol.RGV;
-using WCS.WorkEngineering.Worlds;
-
-namespace WCS.WorkEngineering.Systems
-{
-    /// <summary>
-    ///  Agv交互系统
-    /// </summary>
-    [BelongTo(typeof(MainWorld))]
-    [Description("RGV交互系统")]
-    public class RGVSystems : DeviceSystem<RGV>
-    {
-        protected override bool ParallelDo => true;
-
-        protected override bool SaveLogsToFile => true;
-
-        public RGVSystems()
-        {
-        }
-
-        public override void Do(RGV obj)
-        {
-            if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
-            if (!obj.Data2.WorkMode.HasFlag(RGVWorkMode.Automatic)) return;
-            if (!obj.Data2.SystemStatus.HasFlag(RGVSystemStatus.空闲)) return;
-            if (obj.Data2.Status.HasFlag(RGVStatus.PH_Status)) throw new KnownException($"有光电", LogLevelEnum.High);
-            obj.Data.TaskNumber = 12345;
-            obj.Data.CmdType = RGVCmdType.PickPutGoods;
-            obj.Data.StartPosition = 1663;
-            obj.Data.DestPosition = 1672;
-            obj.Data.VoucherNo++;
-        }
-
-        public override bool Select(Device dev)
-        {
-            return dev.Code == "RGV1";
-            //return dev.HasFlag(Extensions.DeviceFlags.RGV);
-        }
-    }
-}

+ 0 - 1
WCS.WorkEngineering/Systems/SrmDebugSystem.cs

@@ -1,6 +1,5 @@
 using WCS.Core;
 using WCS.WorkEngineering.Extensions;
-using WCS.WorkEngineering.Protocol.RGV;
 using WCS.WorkEngineering.Protocol.SRM;
 using WCS.WorkEngineering.Worlds;
 

+ 0 - 13
WCS.WorkEngineering/Systems/SrmSystems.cs

@@ -35,19 +35,6 @@ namespace WCS.WorkEngineering.Systems
 
         public SrmSystems()
         {
-            ////获取所有的巷道集合
-            //var devices = Device.All.Where(v => v.HasFlag(DeviceFlags.巷道));
-
-            ////开始分配
-            //foreach (var item in devices)
-            //{
-            //    //取货设备
-            //    var srm = item.Targets.Where(v => v.HasFlag(DeviceFlags.堆垛机)).FirstOrDefault();
-            //    PickUpDevices.Add(srm.Code, item.Targets.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Station(v, this.World)).ToList());
-            //    //放货设备
-            //    srm = item.Sources.Where(v => v.HasFlag(DeviceFlags.堆垛机)).FirstOrDefault();
-            //    PutDevices.Add(srm.Code, item.Sources.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Station(v, this.World)).ToList());
-            //}
         }
 
         protected override bool ParallelDo => true;

+ 0 - 97
WCS.WorkEngineering/Systems/二楼入库工位处理系统.cs

@@ -1,97 +0,0 @@
-using Microsoft.OpenApi.Extensions;
-using ServiceCenter.Logs;
-using ServiceCenter.SqlSugars;
-using System.ComponentModel;
-using WCS.Core;
-using WCS.Entity;
-using WCS.WorkEngineering.Extensions;
-using WCS.WorkEngineering.Protocol.BCR;
-using WCS.WorkEngineering.Protocol.Station;
-using WCS.WorkEngineering.WebApi.Controllers;
-using WCS.WorkEngineering.Worlds;
-using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
-using TaskStatus = WCS.Entity.TaskStatus;
-
-namespace WCS.WorkEngineering.Systems
-{
-    /// <summary>
-    ///  二楼入库工位处理系统
-    /// </summary>
-    [BelongTo(typeof(MainWorld))]
-    [Description("二楼入库工位处理系统")]
-    public class 二楼入库工位处理系统 : DeviceSystem<Station>
-    {
-        protected override bool ParallelDo => false;
-
-        protected override bool SaveLogsToFile => true;
-
-        private List<BCR> BCRS = new List<BCR>();
-
-        public 二楼入库工位处理系统()
-        {
-            BCRS = Device.All.Where(v => v.HasProtocol<IBCR81>()).Select(v => new BCR(v, World)).ToList();
-        }
-
-        public override void Do(Station obj)
-        {
-            obj.入库站点是否被禁止();
-            obj.入库站点是否满足执行条件();
-
-            WCS_TaskInfo task = null; //处理完成的任务
-            SqlSugarHelper.Do(_db =>
-             {
-                 var db = _db.Default;
-                 WCS_TaskInfo taskInfo = null; //需要处理的任务
-
-                 #region 初始化空轮入库任务检索
-
-                 //判断当前站台是否有多条待执行状态的初始化空轮入库任务
-                 if (db.Queryable<WCS_TaskInfo>().Count(v => v.Type == TaskType.EmptyInit && v.Status == TaskStatus.WaitingToExecute && v.SrmStation == obj.Entity.Code) > 1)
-                 {
-                     throw new KnownException($"{obj.Entity.Code}站台存在多个空轮初始化入库任务,请取消RFID不是站台实物的任务", LogLevelEnum.Mid);
-                 }
-                 taskInfo = db.Queryable<WCS_TaskInfo>().First(v => v.Type == TaskType.EmptyInit && v.Status == TaskStatus.WaitingToExecute && v.SrmStation == obj.Entity.Code);
-
-                 #endregion 初始化空轮入库任务检索
-
-                 #region 非空轮初始化入库任务
-
-                 if (taskInfo == null)
-                 {
-                     taskInfo = db.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data.TaskNumber && v.Type == TaskType.EnterDepot);
-                     if (taskInfo == null) throw new KnownException($"未找到任务[{obj.Data.TaskNumber}],或该任务不是入库任务", LogLevelEnum.Mid);
-                     if (taskInfo.Status != Entity.TaskStatus.AGVExecution)
-                     {
-                         if (!db.Queryable<WCS_TaskDtl>().SplitTable(v => v.Take(2)).Any(v => v.ParentTaskCode == taskInfo.ID && v.Desc.Contains("等待分配货位后堆垛机进行取货"))) return;
-                         else throw new KnownException($"任务:{taskInfo.ID}不是AGV执行状态,请检查异常原因", LogLevelEnum.High);
-
-                     }
-                 }
-
-                 #endregion 非空轮初始化入库任务
-
-                 if (obj.Entity.Code == "1025")//获取称重
-                 {
-                     var dev91 = Device.All.Where(v => v.Code == obj.Entity.Code).Select(v => new Device<IStation91>(v, this.World)).FirstOrDefault();
-                     taskInfo.Weight = dev91.Data.Weight;
-                     if (taskInfo.Weight < 140) throw new KnownException($"称重结果错误:{taskInfo.Weight}", LogLevelEnum.Mid);
-                     //上抛重量
-                     try { WmsApi.WcsUploadInfo(taskInfo.ID, (decimal)taskInfo.Weight, taskInfo.BarCode); } catch (Exception ex) { World.Log(ex.Message, LogLevelEnum.Mid); }
-                 }
-
-                 taskInfo.Status = TaskStatus.ConveyorExecution;
-                 db.Updateable(taskInfo).ExecuteCommand();
-                 taskInfo.AddWCS_TASK_DTL(_db, obj.Entity.Code, "SRM", $"状态更新为{TaskStatus.ConveyorExecution.GetDisplayName()},等待分配货位后堆垛机进行取货");
-                 task = taskInfo;
-             });
-            if (task == null) throw new KnownException("数据更新错误", LogLevelEnum.High);
-            obj.Data.TaskNumber = task.ID;
-            obj.Data.VoucherNo++;
-        }
-
-        public override bool Select(Device dev)
-        {
-            return dev.HasFlag(DeviceFlags.二楼入库口);
-        }
-    }
-}

+ 0 - 50
WCS.WorkEngineering/Systems/二楼出库工位处理系统.cs

@@ -1,50 +0,0 @@
-using ServiceCenter.Logs;
-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.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)
-        {
-            if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status)) throw new KnownException("无光电", LogLevelEnum.Low);
-            SqlSugarHelper.Do(db =>
-            {
-                var task = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data.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);
-                var res = IwmsApi.满轮出库(task.MatCode, task.AddrTo, task.ID.ToString(), task.BarCode, task.InvBarCode, task.IsSurplus, task.IsRework, task.IsFast, task.Grade, task.WorkBench);
-                agv.Status = AGVTaskStatus.Confirm;
-                agv.AgvID = res.data;
-                agv.Station = obj.Entity.Code;
-                agv.Position = obj.Entity.Code;
-                db.Default.Updateable(agv).SplitTable().ExecuteCommand();
-                task.Status = Entity.TaskStatus.AGVExecution;
-                db.Default.Updateable(task).ExecuteCommand();
-                task.AddWCS_TASK_DTL(db, obj.Entity.Code, "AGV", $"任务已下发AGV,AGVID:{agv.AgvID}");
-            });
-        }
-
-        public override bool Select(Device dev)
-        {
-            //return dev.Code == "1026";
-            return dev.HasFlag(DeviceFlags.二楼出库口);
-        }
-    }
-}

+ 0 - 60
WCS.WorkEngineering/Systems/桁架.cs

@@ -1,60 +0,0 @@
-using ServiceCenter.Logs;
-using System.ComponentModel;
-using WCS.Core;
-using WCS.WorkEngineering.Extensions;
-using WCS.WorkEngineering.Protocol.Truss;
-using WCS.WorkEngineering.Worlds;
-
-namespace WCS.WorkEngineering.Systems
-{
-    /// <summary>
-    ///  桁架
-    /// </summary>
-    [BelongTo(typeof(MainWorldd))]
-    [Description("桁架")]
-    public class 桁架 : DeviceSystem<Truss>
-    {
-        protected override bool ParallelDo => true;
-
-        protected override bool SaveLogsToFile => true;
-
-        public override void Do(Truss obj)
-        {
-            if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
-            if (obj.Data2.Status != TrussStatus.Idle) return;
-
-            obj.Data.DestPosition_1 = 15;
-            obj.Data.TargetPallte1 = 11;
-            obj.Data.Task1_1 = 1;
-            obj.Data.Dest1_1 = 1;
-            obj.Data.Task1_2 = 2;
-            obj.Data.Dest1_2 = 2;
-            obj.Data.Task1_3 = 3;
-            obj.Data.Dest1_3 = 3;
-            obj.Data.Task1_4 = 4;
-            obj.Data.Dest1_4 = 4;
-            obj.Data.Task1_5 = 5;
-            obj.Data.Dest1_5 = 5;
-            obj.Data.TaskSum1 = 5;
-            obj.Data.DestPosition_2 = 17;
-            obj.Data.TargetPallte2 = 11;
-            obj.Data.Task2_1 = 6;
-            obj.Data.Dest2_1 = 6;
-            obj.Data.Task2_2 = 7;
-            obj.Data.Dest2_2 = 7;
-            obj.Data.Task2_3 = 8;
-            obj.Data.Dest2_3 = 8;
-            obj.Data.Task2_4 = 9;
-            obj.Data.Dest2_4 = 9;
-            obj.Data.Task2_5 = 10;
-            obj.Data.Dest2_5 = 10;
-            obj.Data.TaskSum2 = 5;
-            obj.Data.VoucherNo++;
-        }
-
-        public override bool Select(Device dev)
-        {
-            return dev.HasFlag(Extensions.DeviceFlags.桁架);
-        }
-    }
-}

+ 0 - 39
WCS.WorkEngineering/WorkStart.cs

@@ -34,10 +34,6 @@ namespace WCS.WorkEngineering
 
             List<StationSegmentInfo> segmentInfo = new List<StationSegmentInfo>
             {
-                new StationSegmentInfo(2701, 2734, "10.30.37.89"),
-                new StationSegmentInfo(2501, 2534, "10.30.37.89"),
-                new StationSegmentInfo(1611, 1616, "10.30.37.89"),
-                new StationSegmentInfo(1601, 1606, "10.30.37.89")
             };
 
             foreach (var item in segmentInfo)
@@ -58,7 +54,6 @@ namespace WCS.WorkEngineering
 
             List<BcrInfo> bcrInfo = new List<BcrInfo>
             {
-                new BcrInfo(new int[] {  }, "10.30.37.89")
             };
 
             foreach (var item in bcrInfo)
@@ -78,7 +73,6 @@ namespace WCS.WorkEngineering
 
             List<ShapeInfo> shapeInfo = new List<ShapeInfo>
             {
-                new ShapeInfo(new int[] {  }, "10.30.37.89")
             };
 
             foreach (var item in shapeInfo)
@@ -100,12 +94,6 @@ namespace WCS.WorkEngineering
 
             List<RGVSegmentInfo> RgvInfo = new List<RGVSegmentInfo>
             {
-                new RGVSegmentInfo( 1, "10.30.37.113"),
-                new RGVSegmentInfo( 2, "10.30.37.118"),
-                new RGVSegmentInfo( 3, "10.30.37.123"),
-                new RGVSegmentInfo( 4, "10.30.37.128"),
-                new RGVSegmentInfo( 5, "10.30.37.133"),
-                new RGVSegmentInfo( 6, "10.30.37.138")
             };
 
             foreach (var item in RgvInfo)
@@ -123,7 +111,6 @@ namespace WCS.WorkEngineering
 
             List<TrussSegmentInfo> TrussInfo = new List<TrussSegmentInfo>
             {
-                new TrussSegmentInfo( 1, "10.30.37.211"),
             };
 
             foreach (var item in TrussInfo)
@@ -164,21 +151,6 @@ namespace WCS.WorkEngineering
 
             List<RouteInfo> routeInfos = new List<RouteInfo>
             {
-                ////new RouteInfo("SRM1", new string[] { "TY1" }),
-                //new RouteInfo("SRM2", new string[] { "TY2" }),
-                //new RouteInfo("SRM3", new string[] { "TY3" }),
-                ////new RouteInfo("TY1", new string[] { "SRM1" }),
-                //new RouteInfo("TY2", new string[] { "SRM2" }),
-                //new RouteInfo("TY3", new string[] { "SRM3" }),
-                ////new RouteInfo("TY1", new string[] { "1011", "1021" }),
-                //new RouteInfo("TY2", new string[] { "1013", "1023" }),
-                //new RouteInfo("TY3", new string[] { "1015", "1025" }),
-                ////new RouteInfo("1012", new string[] { "TY1" }),
-                ////new RouteInfo("1022", new string[] { "TY1" }),
-                //new RouteInfo("1014", new string[] { "TY2" }),
-                //new RouteInfo("1024", new string[] { "TY2" }),
-                //new RouteInfo("1016", new string[] { "TY3" }),
-                //new RouteInfo("1026", new string[] { "TY3" })
             };
 
             foreach (var item in routeInfos)
@@ -199,17 +171,6 @@ namespace WCS.WorkEngineering
 
             Dictionary<DeviceFlags, List<string>> devices = new Dictionary<DeviceFlags, List<string>>
             {
-                { DeviceFlags.巷道口, new List<string>() { "1601", "1603", "1605", "1611", "1613", "1615", "2527", "2528", "2532", "2533", "2534", "2727", "2728", "2732", "2733", "2734" } },
-                { DeviceFlags.入库, new List<string>() { "2532", "2533", "2534", "2732", "2733", "2734" } },
-                { DeviceFlags.出库, new List<string>() { "2532", "2533", "2534", "2732", "2733", "2734" } },
-                { DeviceFlags.扫码, new List<string>() { "2532", "2732" } },
-                 //{ DeviceFlags.扫码, new List<string>() { "2532", "2732", "RGV1","RGV2" } },
-                { DeviceFlags.一楼出入库口, new List<string>() { "2532", "2533", "2534", "2732", "2733", "2734" } },
-                { DeviceFlags.二楼出库口, new List<string>() { "1601",  "1605", "1611",  "1615" } },
-                { DeviceFlags.二楼入库口, new List<string>() { "1603", "1613" } },
-                { DeviceFlags.一列堆垛机, new List<string>() { "SRM1"/*, "SRM3", "SRM5"*/} },
-                { DeviceFlags.二列堆垛机, new List<string>() { "SRM2"/*, "SRM4", "SRM6"*/ } },
-                //{ DeviceFlags.称重, new List<string>() { "1011", "1013", "1015", "1025" } }
             };
 
             devices.ForEach(item =>