|
@@ -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 静态方法
|
|
|
}
|