Ver código fonte

获取设备信息接口

xu.lu 3 anos atrás
pai
commit
b03c708f7a
1 arquivos alterados com 176 adições e 204 exclusões
  1. 176 204
      Projects/永冠OPP/WCS.Service/WebApi/WCSApi.cs

+ 176 - 204
Projects/永冠OPP/WCS.Service/WebApi/WCSApi.cs

@@ -1,11 +1,14 @@
 using DBHelper;
 using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using WCS.Core;
 using WCS.Entity;
 using WCS.Entity.Protocol;
 using WCS.Service.Entity;
+using WCS.Service.WebApi.ViewModels;
 
 namespace WCS.Service.WebApi
 {
@@ -249,213 +252,182 @@ namespace WCS.Service.WebApi
             return res;
         }
 
-        ///// <summary>
-        ///// 通过该接口获取指定条件设备信息
-        ///// </summary>
-        ///// <param name="model">筛选条件</param>
-        ///// <returns></returns>
-        //[HttpGet]
-        //public List<DeviceStatusViewModel> GetDeviceStatus([FromQuery] DeviceStatusViewModel model)
-        //{
-        //    var result = new List<DeviceStatusViewModel>();
-        //    //找到所有设备的读取协议
-        //    var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
-        //    //var sc = Device.Where(v => v.IsSC()).Select(v => v.Device<ISC521>());
-        //    var conv = Device.Where(v => v.IsConv()).Select(v => v.Device<IStation521>());
-        //    //var robot = Device.Where(v => v.IsRobot()).Select(v => v.Device<IRobot>());
-
-        //    #region 检索分两部分,设备、任务(数据库)
-
-        //    #region 设备信息
-
-        //    if (!string.IsNullOrEmpty(model.CODE))
-        //    {
-        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Entity.CODE == model.CODE));
-        //        //result.AddRange(GetDeviceStatusWhere(sc, v => v.Entity.CODE == model.CODE));
-        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Entity.CODE == model.CODE));
-        //        //result.AddRange(GetDeviceStatusWhere(robot, v => v.Entity.CODE == model.CODE));
-        //    }
-
-        //    if (model.TASKNUM > 10000)
-        //    {
-        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
-        //        //result.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID == model.TASKNUM));
-        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_TaskId == model.TASKNUM));
-        //        //result.AddRange(GetDeviceStatusWhere(robot, v => v.Data.TaskID == model.TASKNUM));
-        //    }
-
-        //    if (model.REQUEST != null)
-        //    {
-        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_Request == model.REQUEST));
-        //    }
-
-        //    if (model.PH_STATUS != null)
-        //    {
-        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
-        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_Request == model.REQUEST));
-        //    }
-
-        //    if (!string.IsNullOrEmpty(model.ADDRFROM))
-        //    {
-        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.StartPosition_1 == short.Parse(model.ADDRFROM)));
-        //        //result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRFROM.Contains(v.Data.SLine.ToString())
-        //        //                                           || model.ADDRFROM.Contains(v.Data.SCol.ToString())
-        //        //                                           || model.ADDRFROM.Contains(v.Data.SLayer.ToString())));
-        //    }
-
-        //    if (!string.IsNullOrEmpty(model.ADDRTO))
-        //    {
-        //        result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.DestPosition_1 == short.Parse(model.ADDRTO)));
-        //        //result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRTO.Contains(v.Data.ELine.ToString())
-        //        //                                           || model.ADDRTO.Contains(v.Data.ECol.ToString())
-        //        //                                           || model.ADDRTO.Contains(v.Data.ELayer.ToString())));
-        //        result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_GoodsEnd == short.Parse(model.ADDRTO)));
-        //        //result.AddRange(GetDeviceStatusWhere(robot, v => v.Data.Target == short.Parse(model.ADDRTO)));
-        //    }
-
-        //    #endregion 设备信息
-
-        //    #region 任务信息
-
-        //    //获取所有设备上的任务信息
-        //    if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE))
-        //    {
-        //        var info = new List<DeviceStatusViewModel>();
-        //        var ids = result.Select(v => v.TASKNUM);
-        //        info.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 > 10000));
-        //        //info.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID > 10000));
-        //        info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.G_TaskId > 10000));
-        //        //info.AddRange(GetDeviceStatusWhere(robot, v => v.Data.TaskID > 10000));
-        //        result.AddRange(info.Where(v => !ids.Any(b => b == v.TASKNUM)));
-        //    }
-
-        //    DB.Do(db =>
-        //    {
-        //        var ids = result.Select(v => v.TASKNUM);
-        //        var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => ids.Any(b => b == v.ID)).ToList();
-        //        tasks.ForEach(task =>
-        //        {
-        //            var info = result.Find(v => v.TASKNUM == task.ID);
-        //            info.TYPE = task.TYPE;
-        //            info.BARCODE = task.BARCODE;
-        //        });
-        //    });
-
-        //    if (model.TYPE != null)
-        //    {
-        //        result = result.Where(v => v.TYPE == model.TYPE).ToList();
-        //    }
-        //    if (!string.IsNullOrEmpty(model.BARCODE))
-        //    {
-        //        result = result.Where(v => v.BARCODE != null && v.BARCODE.Contains(model.BARCODE)).ToList();
-        //    }
-
-        //    #endregion 任务信息
-
-        //    #endregion 检索分两部分,设备、任务(数据库)
-
-        //    return result;
-        //}
+        /// <summary>
+        /// 通过该接口获取指定条件设备信息
+        /// </summary>
+        /// <param name="model">筛选条件</param>
+        /// <returns></returns>
+        [HttpGet]
+        public List<DeviceStatusViewModel> GetDeviceStatus([FromQuery] DeviceStatusViewModel model)
+        {
+            var result = new List<DeviceStatusViewModel>();
+            //找到所有设备的读取协议
+            var rgv = Device.Where(v => v.IsRGV()).Select(v => v.Device<IRGV521>());
+            var sc = Device.Where(v => v.IsSC()).Select(v => v.Device<ISRM521>());
+            var conv = Device.Where(v => v.IsConv()).Select(v => v.Device<IStation521>());
+
+            #region 检索分两部分,设备、任务(数据库)
+
+            #region 设备信息
+
+            if (!string.IsNullOrEmpty(model.CODE))
+            {
+                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Entity.CODE == model.CODE));
+                result.AddRange(GetDeviceStatusWhere(sc, v => v.Entity.CODE == model.CODE));
+                result.AddRange(GetDeviceStatusWhere(conv, v => v.Entity.CODE == model.CODE));
+            }
+
+            if (model.TASKNUM > 10000)
+            {
+                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
+                result.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 == model.TASKNUM));
+                result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum == model.TASKNUM));
+            }
+
+
+            if (model.PH_STATUS != null)
+            {
+                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 == model.TASKNUM));
+            }
+
+            if (!string.IsNullOrEmpty(model.ADDRFROM))
+            {
+                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.StartPosition_1 == short.Parse(model.ADDRFROM)));
+                result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRFROM.Contains(v.Data.SLine_1.ToString())
+                                                           || model.ADDRFROM.Contains(v.Data.SCol_1.ToString())
+                                                           || model.ADDRFROM.Contains(v.Data.SLayer_1.ToString())));
+                result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsstart ==short.Parse(model.ADDRFROM)));
+            }
+
+            if (!string.IsNullOrEmpty(model.ADDRTO))
+            {
+                result.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.DestPosition_1 == short.Parse(model.ADDRTO)));
+                result.AddRange(GetDeviceStatusWhere(sc, v => model.ADDRTO.Contains(v.Data.ELine_1.ToString())
+                                                           || model.ADDRTO.Contains(v.Data.ECol_1.ToString())
+                                                           || model.ADDRTO.Contains(v.Data.ELayer_1.ToString())));
+                result.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Goodsend == short.Parse(model.ADDRTO)));
+            }
+
+            #endregion 设备信息
+
+            #region 任务信息
+
+            //获取所有设备上的任务信息
+            if (model.TYPE != null || !string.IsNullOrEmpty(model.BARCODE))
+            {
+                var info = new List<DeviceStatusViewModel>();
+                var ids = result.Select(v => v.TASKNUM);
+                info.AddRange(GetDeviceStatusWhere(rgv, v => v.Data.TaskID_1 > 10000));
+                info.AddRange(GetDeviceStatusWhere(sc, v => v.Data.TaskID_1 > 10000));
+                info.AddRange(GetDeviceStatusWhere(conv, v => v.Data.Tasknum > 10000));
+                result.AddRange(info.Where(v => !ids.Any(b => b == v.TASKNUM)));
+            }
+
+            DB.Do(db =>
+            {
+                var ids = result.Select(v => v.TASKNUM);
+                var tasks = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => ids.Any(b => b == v.ID)).ToList();
+                tasks.ForEach(task =>
+                {
+                    var info = result.Find(v => v.TASKNUM == task.ID);
+                    info.TYPE = task.TYPE;
+                    info.BARCODE = task.BARCODE;
+                });
+            });
+
+            if (model.TYPE != null)
+            {
+                result = result.Where(v => v.TYPE == model.TYPE).ToList();
+            }
+            if (!string.IsNullOrEmpty(model.BARCODE))
+            {
+                result = result.Where(v => v.BARCODE != null && v.BARCODE.Contains(model.BARCODE)).ToList();
+            }
+
+            #endregion 任务信息
+
+            #endregion 检索分两部分,设备、任务(数据库)
+
+            return result;
+        }
 
         #region 静态方法
 
-        ///// <summary>
-        ///// 获取RGV设备信息
-        ///// </summary>
-        ///// <param name="soue"></param>
-        ///// <param name="func"></param>
-        ///// <returns></returns>
-        //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRGV521>> soue, Func<Device<IRGV521>, bool> func)
-        //{
-        //    var result = new List<DeviceStatusViewModel>();
-        //    result.AddRange(soue.Where(func).Select(device =>
-        //    {
-        //        return new DeviceStatusViewModel
-        //        {
-        //            CODE = device.Entity.CODE,
-        //            TASKNUM = device.Data.TaskID_1,
-        //            PH_STATUS = device.Data.PH_Status_1,
-        //            ADDRFROM = device.Data.StartPosition_1.ToString(),
-        //            ADDRTO = device.Data.DestPosition_1.ToString(),
-        //        };
-        //    }));
-        //    return result;
-        //}
-
-        ///// <summary>
-        ///// 获取堆垛机设备信息
-        ///// </summary>
-        ///// <param name="soue"></param>
-        ///// <param name="func"></param>
-        ///// <returns></returns>
-        //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<ISC521>> soue, Func<Device<ISC521>, bool> func)
-        //{
-        //    var result = new List<DeviceStatusViewModel>();
-
-        //    result.AddRange(soue.Where(func).Select(device =>
-        //    {
-        //        var info = new DeviceStatusViewModel
-        //        {
-        //            CODE = device.Entity.CODE,
-        //            TASKNUM = device.Data.TaskID,
-        //            ADDRFROM = $"{device.Data.SLine}-{device.Data.SCol}-{device.Data.SLayer}",
-        //            ADDRTO = device.Data.ELine.ToString(),
-        //        };
-        //        if (device.Data.ECol != 0 && device.Data.ELayer != 0)
-        //            info.ADDRTO = $"{device.Data.ELine}-{device.Data.ECol}-{device.Data.ELayer}";
-        //        return info;
-        //    }));
-
-        //    return result;
-        //}
-
-        ///// <summary>
-        ///// 获取输送机设备信息
-        ///// </summary>
-        ///// <param name="soue"></param>
-        ///// <param name="func"></param>
-        ///// <returns></returns>
-        //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IStation521>> soue, Func<Device<IStation521>, bool> func)
-        //{
-        //    var result = new List<DeviceStatusViewModel>();
-
-        //    result.AddRange(soue.Where(func).Select(device =>
-        //    {
-        //        return new DeviceStatusViewModel
-        //        {
-        //            CODE = device.Entity.CODE,
-        //            TASKNUM = device.Data.G_TaskId,
-        //            REQUEST = device.Data.G_Request,
-        //            PH_STATUS = device.Data.G_PhStatus,
-        //            ADDRTO = device.Data.G_GoodsEnd.ToString(),
-        //        };
-        //    }));
-
-        //    return result;
-        //}
-
-        ///// <summary>
-        ///// 获取机械臂设备信息
-        ///// </summary>
-        ///// <param name="soue"></param>
-        ///// <param name="func"></param>
-        ///// <returns></returns>
-        //public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRobot>> soue, Func<Device<IRobot>, bool> func)
-        //{
-        //    var result = new List<DeviceStatusViewModel>();
-
-        //    result.AddRange(soue.Where(func).Select(device =>
-        //    {
-        //        return new DeviceStatusViewModel
-        //        {
-        //            CODE = device.Entity.CODE,
-        //            TASKNUM = device.Data.TaskID,
-        //            ADDRTO = device.Data.Trigger.ToString(),
-        //        };
-        //    }));
-
-        //    return result;
-        //}
+        /// <summary>
+        /// 获取RGV设备信息
+        /// </summary>
+        /// <param name="soue"></param>
+        /// <param name="func"></param>
+        /// <returns></returns>
+        public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IRGV521>> soue, Func<Device<IRGV521>, bool> func)
+        {
+            var result = new List<DeviceStatusViewModel>();
+            result.AddRange(soue.Where(func).Select(device =>
+            {
+                return new DeviceStatusViewModel
+                {
+                    CODE = device.Entity.CODE,
+                    TASKNUM = device.Data.TaskID_1 ,
+                    PH_STATUS = device.Data.SystemStatus.HasFlag(RGVStatus.光电),
+                    ADDRFROM = device.Data.StartPosition_1.ToString(),
+                    ADDRTO = device.Data.DestPosition_1.ToString(),
+                };
+            }));
+            return result;
+        }
+
+        /// <summary>
+        /// 获取堆垛机设备信息
+        /// </summary>
+        /// <param name="soue"></param>
+        /// <param name="func"></param>
+        /// <returns></returns>
+        public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<ISRM521>> soue, Func<Device<ISRM521>, bool> func)
+        {
+            var result = new List<DeviceStatusViewModel>();
+
+            result.AddRange(soue.Where(func).Select(device =>
+            {
+                var info = new DeviceStatusViewModel
+                {
+                    CODE = device.Entity.CODE,
+                    TASKNUM = device.Data.TaskID_1,
+                    ADDRFROM = $"{device.Data.SLine_1}-{device.Data.SCol_1}-{device.Data.SLayer_1}",
+                    ADDRTO = device.Data.ELine_1.ToString(),
+                };
+                if (device.Data.ECol_1 != 0 && device.Data.ELayer_1 != 0)
+                    info.ADDRTO = $"{device.Data.ELine_1}-{device.Data.ECol_1}-{device.Data.ELayer_1}";
+                return info;
+            }));
+
+            return result;
+        }
+
+        /// <summary>
+        /// 获取输送机设备信息
+        /// </summary>
+        /// <param name="soue"></param>
+        /// <param name="func"></param>
+        /// <returns></returns>
+        public static List<DeviceStatusViewModel> GetDeviceStatusWhere(IEnumerable<Device<IStation521>> soue, Func<Device<IStation521>, bool> func)
+        {
+            var result = new List<DeviceStatusViewModel>();
+
+            result.AddRange(soue.Where(func).Select(device =>
+            {
+                return new DeviceStatusViewModel
+                {
+                    CODE = device.Entity.CODE,
+                    TASKNUM = device.Data.Tasknum,
+                    ADDRFROM =device.Data.Goodsstart.ToString(),
+                    ADDRTO = device.Data.Goodsend.ToString(),
+                };
+            }));
+
+            return result;
+        }
+
+       
 
         #endregion 静态方法
     }