using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Mvc;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Information;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Dynamic;
|
using System.Reflection;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.StackerCraneEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.Caches;
|
using WIDESEAWCS_Core.Utilities;
|
using WIDESEAWCS_DTO.System;
|
using WIDESEAWCS_ITaskInfoRepository;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEAWCS_QuartzJob.Repository;
|
using WIDESEAWCS_QuartzJob.Service;
|
using WIDESEAWCS_Server.Controllers.System;
|
using WIDESEAWCS_Tasks.ConveyorLineJob;
|
using WIDESEAWCS_Tasks.ShuttleCarJob;
|
using WIDESEAWCS_Tasks.StackerCraneJob;
|
using static WIDESEAWCS_Server.Controllers.LargeScreenController;
|
|
namespace WIDESEAWCS_Server.Controllers
|
{
|
[Route("api/LargeScreen")]
|
[ApiController, AllowAnonymous]
|
public class LargeScreenController : Controller
|
{
|
private readonly IDeviceInfoRepository _deviceInfoRepository;
|
private readonly IRouterService _routerService;
|
private readonly ICacheService _cacheService;
|
private readonly ITaskRepository _taskRepository;
|
private readonly ITaskService _taskService;
|
public LargeScreenController(ICacheService cacheService, IRouterService routerService, IDeviceInfoRepository deviceInfoRepository, ITaskRepository taskRepository, ITaskService taskService)
|
{
|
_deviceInfoRepository = deviceInfoRepository;
|
_routerService = routerService;
|
_cacheService = cacheService;
|
_taskRepository = taskRepository;
|
_taskService = taskService;
|
}
|
|
[HttpPost, Route("GetTaskInfos")]
|
public WebResponseContent GetTaskInfos([FromBody] SaveModel model)
|
{
|
WebResponseContent webResponseContent = new WebResponseContent();
|
List<TaskInfo> taskInfos = new List<TaskInfo>();
|
List<DictionaryDTO> dictionaryDTOs = new List<DictionaryDTO>();
|
try
|
{
|
var name = model.MainData["Name"].ToString();
|
List<Dt_Task> dt_Tasks = new List<Dt_Task>();
|
if (name == "入库")
|
{
|
dt_Tasks = _taskRepository.QueryData(x => !_taskService.TaskOutboundTypes.Contains(x.TaskType) && !_taskService.TaskRelocationTypes.Contains(x.TaskType));
|
dt_Tasks = dt_Tasks.OrderByDescending(x => x.TaskType).Take(10).ToList();
|
}
|
else
|
{
|
dt_Tasks = _taskRepository.QueryData(x => !_taskService.TaskInboundTypes.Contains(x.TaskType));
|
dt_Tasks = dt_Tasks.OrderByDescending(x => x.TaskType).Take(10).ToList();
|
}
|
if (dt_Tasks.Count > 0)
|
{
|
List<DictionaryDTO> taskTypeDTOs = GetDictionary(Sys_DictionaryController.GetVueDictionary("taskType").Data);
|
List<DictionaryDTO> taskStateDTOs = GetDictionary(Sys_DictionaryController.GetVueDictionary("taskState").Data);
|
foreach (var dt_Task in dt_Tasks)
|
{
|
TaskInfo taskInfo = new TaskInfo()
|
{
|
PalletCode = dt_Task.PalletCode,
|
ShuttleCarCode = dt_Task.ShuttleCarCode,
|
TaskState = taskStateDTOs.Where(x => x.name == dt_Task.TaskType.ToString()).First().remark,
|
TaskType = taskTypeDTOs.Where(x => x.name == dt_Task.TaskType.ToString()).First().remark,
|
SourceAddress = dt_Task.SourceAddress,
|
TargetAddress = dt_Task.TargetAddress,
|
TaskNum = dt_Task.TaskNum,
|
};
|
taskInfos.Add(taskInfo);
|
}
|
}
|
webResponseContent.OK(data: taskInfos);
|
}
|
catch (Exception ex)
|
{
|
webResponseContent.Error(ex.Message);
|
}
|
return webResponseContent;
|
}
|
/// <summary>
|
/// 获取穿梭车电量
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost, Route("GetShuttleCarInfos")]
|
public WebResponseContent GetShuttleCarInfos()
|
{
|
WebResponseContent webResponseContent = new WebResponseContent();
|
int ElectricQuantity1 = 0;
|
int ElectricQuantity2 = 0;
|
try
|
{
|
var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), "RGV01");
|
if (Device != null)
|
{
|
ShuttleCarTaskCommandR? shuttleCar = Device as ShuttleCarTaskCommandR;
|
if (shuttleCar != null) ElectricQuantity1 = shuttleCar.ElectricQuantity;
|
}
|
Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), "RGV02");
|
if (Device != null)
|
{
|
ShuttleCarTaskCommandR? shuttleCar = Device as ShuttleCarTaskCommandR;
|
if (shuttleCar != null) ElectricQuantity2 = shuttleCar.ElectricQuantity;
|
}
|
}
|
catch (Exception ex)
|
{
|
webResponseContent.Error(ex.Message);
|
}
|
return webResponseContent.OK(data: new
|
{
|
ElectricQuantity1,
|
ElectricQuantity2
|
});
|
}
|
/// <summary>
|
/// 获取设备信息
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost, Route("GetDeviceInfos")]
|
public WebResponseContent GetDeviceInfos()
|
{
|
WebResponseContent webResponseContent = new WebResponseContent();
|
try
|
{
|
List<DeviceInfo> devices = new List<DeviceInfo>();
|
var DeviceInfos = _deviceInfoRepository.QueryData(x => x.DeviceStatus == "1").ToList();
|
foreach (var item in DeviceInfos)
|
{
|
switch (item.DeviceType)
|
{
|
case "SpeStackerCrane"://堆垛机
|
{
|
var Device = _cacheService.Get(typeof(StackerCraneTaskCommandR), item.DeviceCode) as StackerCraneTaskCommandR;
|
if (Device != null)
|
{
|
DeviceInfo deviceInfo = new DeviceInfo()
|
{
|
DeviceName = item.DeviceName,
|
DeviceCode = item.DeviceCode,
|
DeviceStatus = Device.Onlinestate == 1 ? "在线" : "离线",
|
DeviceMachine = GetRunStatus(Device.RunStatus),
|
Err_Status = GetErr_Status(Device.Err_Status),
|
TaskID = Device.CurrentTaskNum
|
};
|
devices.Add(deviceInfo);
|
}
|
}
|
break;
|
case "CommonConveyorLine"://输送线
|
{
|
List<string> childDeviceCodes = _routerService.QueryAllPositions(item.DeviceCode);
|
List<string> strings = new List<string>() { "1003", "1006", "1007" };
|
childDeviceCodes.AddRange(strings);
|
foreach (var childDeviceCode in childDeviceCodes.OrderBy(x => x))
|
{
|
var Device = _cacheService.Get(typeof(ConveyorLineTaskCommandR), childDeviceCode) as ConveyorLineTaskCommandR;
|
if (Device != null)
|
{
|
DeviceInfo deviceInfo = new DeviceInfo()
|
{
|
DeviceName = item.DeviceName,
|
DeviceCode = childDeviceCode,
|
DeviceStatus = Device.inRead == 1 ? "可写" : "不可写",
|
DeviceMachine = GetMachine(Device.Status),
|
TaskID = Device.TaskNum,
|
Err_Status = GetSpec(Device.Spec)
|
};
|
devices.Add(deviceInfo);
|
}
|
}
|
}
|
break;
|
case "ShuttleCar"://穿梭车
|
{
|
var Device = _cacheService.Get(typeof(ShuttleCarTaskCommandR), item.DeviceCode) as ShuttleCarTaskCommandR;
|
if (Device != null)
|
{
|
DeviceInfo deviceInfo = new DeviceInfo()
|
{
|
DeviceName = item.DeviceName,
|
DeviceCode = item.DeviceCode,
|
DeviceStatus = Device.JoinStatus == 1 ? "在线" : "离线",
|
DeviceMachine = GetStatus(Device.Status),
|
Err_Status = GetErrStatus(Device.Err_Status),
|
TaskID = Device.number
|
};
|
devices.Add(deviceInfo);
|
}
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
webResponseContent.OK(data: devices);
|
}
|
catch (Exception ex)
|
{
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
return webResponseContent;
|
}
|
List<DictionaryDTO> GetDictionary(object data)
|
{
|
List<DictionaryDTO> dictionaryDTOs = new List<DictionaryDTO>();
|
List<object> a = data as List<object>;
|
foreach (var task in a)
|
{
|
dynamic dictionaryDTO = task;
|
DictionaryDTO dictionary = new DictionaryDTO
|
{
|
name = dictionaryDTO.key,
|
remark = dictionaryDTO.value,
|
};
|
dictionaryDTOs.Add(dictionary);
|
}
|
return dictionaryDTOs;
|
}
|
public class DictionaryDTO
|
{
|
public string name { get; set; }
|
public string remark { get; set; }
|
}
|
public class TaskInfo
|
{
|
/// <summary>
|
/// 任务号
|
/// </summary>
|
public int TaskNum { get; set; }
|
/// <summary>
|
/// 托盘号
|
/// </summary>
|
public string PalletCode { get; set; }
|
/// <summary>
|
/// 穿梭车
|
/// </summary>
|
public string ShuttleCarCode { get; set; }
|
/// <summary>
|
/// 任务类型
|
/// </summary>
|
public string TaskType { get; set; }
|
/// <summary>
|
/// 任务状态
|
/// </summary>
|
public string TaskState { get; set; }
|
/// <summary>
|
/// 起始地址
|
/// </summary>
|
public string SourceAddress { get; set; }
|
/// <summary>
|
/// 目的地址
|
/// </summary>
|
public string TargetAddress { get; set; }
|
}
|
public class DeviceInfo
|
{
|
/// <summary>
|
/// 设备名
|
/// </summary>
|
public string DeviceName { get; set; }
|
/// <summary>
|
/// 设备编号
|
/// </summary>
|
public string DeviceCode { get; set; }
|
/// <summary>
|
/// 设备状态
|
/// </summary>
|
public string DeviceStatus { get; set; }
|
/// <summary>
|
/// 设备信息
|
/// </summary>
|
public string DeviceMachine { get; set; }
|
/// <summary>
|
/// 故障
|
/// </summary>
|
public string Err_Status { get; set; }
|
public int TaskID { get; set; }
|
}
|
/// <summary>
|
/// 获取堆垛机运行状态
|
/// </summary>
|
/// <param name="status"></param>
|
/// <returns></returns>
|
string GetRunStatus(ushort status)
|
{
|
string RunStatus = string.Empty;
|
switch (status)
|
{
|
case 1: RunStatus = "初始化中"; break;
|
case 2: RunStatus = "故障暂停"; break;
|
case 3: RunStatus = "手动模式"; break;
|
case 4: RunStatus = "单步模式"; break;
|
case 5: RunStatus = "维护模式"; break;
|
case 6: RunStatus = "取货检查"; break;
|
case 7: RunStatus = "取货站点判断"; break;
|
case 8: RunStatus = "无货运行"; break;
|
case 9: RunStatus = "请求取货"; break;
|
case 10: RunStatus = "取货探货"; break;
|
case 11: RunStatus = "取货伸叉"; break;
|
case 12: RunStatus = "取货抬高"; break;
|
case 13: RunStatus = "取货回叉"; break;
|
case 14: RunStatus = "取货完成"; break;
|
case 15: RunStatus = "放货检查"; break;
|
case 16: RunStatus = "放货站点判断"; break;
|
case 17: RunStatus = "有货运行"; break;
|
case 18: RunStatus = "请求放货"; break;
|
case 19: RunStatus = "放货探货"; break;
|
case 20: RunStatus = "放货伸叉"; break;
|
case 21: RunStatus = "放货降低"; break;
|
case 22: RunStatus = "放货回叉"; break;
|
case 23: RunStatus = "放货完成"; break;
|
case 24: RunStatus = "无货待命"; break;
|
case 25: RunStatus = "有货待命"; break;
|
case 26: RunStatus = "半自动模式"; break;
|
}
|
return RunStatus;
|
}
|
/// <summary>
|
/// 获取堆垛机故障代码
|
/// </summary>
|
/// <param name="status"></param>
|
/// <returns></returns>
|
string GetErr_Status(ushort status)
|
{
|
string RunStatus = string.Empty;
|
switch (status)
|
{
|
case 1: RunStatus = "货叉不在中"; break;
|
case 2: RunStatus = "取货货架无货"; break;
|
case 3: RunStatus = "放货货架有货"; break;
|
case 4: RunStatus = "任务非法"; break;
|
case 5: RunStatus = "行走反向"; break;
|
case 6: RunStatus = "行走变频器报警"; break;
|
case 7: RunStatus = "行走堵转"; break;
|
case 8: RunStatus = "行走失速"; break;
|
case 9: RunStatus = "提升反向"; break;
|
case 10: RunStatus = "提升变频器报警"; break;
|
case 11: RunStatus = "提升堵转"; break;
|
case 12: RunStatus = "提升失速"; break;
|
case 13: RunStatus = "货叉1反向"; break;
|
case 14: RunStatus = "货叉1变频器报警"; break;
|
case 15: RunStatus = "货叉1堵转"; break;
|
case 16: RunStatus = "货叉1失速"; break;
|
case 17: RunStatus = "货叉2反向"; break;
|
case 18: RunStatus = "货叉2变频器报警"; break;
|
case 19: RunStatus = "货叉2堵转"; break;
|
case 20: RunStatus = "货叉2失速"; break;
|
case 21: RunStatus = "急停故障"; break;
|
case 22: RunStatus = "前极限"; break;
|
case 23: RunStatus = "后极限"; break;
|
case 24: RunStatus = "行走极限"; break;
|
case 25: RunStatus = "上极限"; break;
|
case 26: RunStatus = "下极限"; break;
|
case 27: RunStatus = "升降极限"; break;
|
case 28: RunStatus = "货叉前极限"; break;
|
case 29: RunStatus = "货叉后极限"; break;
|
case 30: RunStatus = "货叉后极限"; break;
|
case 31: RunStatus = "右超叉"; break;
|
case 32: RunStatus = "前超叉"; break;
|
case 33: RunStatus = "后超叉"; break;
|
case 34: RunStatus = "超高"; break;
|
case 35: RunStatus = "认址故障"; break;
|
case 36: RunStatus = "放货无货"; break;
|
case 37: RunStatus = "取货完成无货"; break;
|
case 38: RunStatus = "取货货叉有货"; break;
|
case 39: RunStatus = "放货完成有货"; break;
|
case 40: RunStatus = "提升编码"; break;
|
case 41: RunStatus = "行走"; break;
|
case 42: RunStatus = "货叉"; break;
|
case 43: RunStatus = "断绳故障"; break;
|
case 44: RunStatus = "A叉不在中"; break;
|
case 45: RunStatus = "B叉不在中"; break;
|
case 46: RunStatus = "取货前排有货"; break;
|
case 47: RunStatus = "放货前排有货"; break;
|
case 48: RunStatus = "不在列站点"; break;
|
case 49: RunStatus = "不在层站点"; break;
|
case 50: RunStatus = "通讯故障"; break;
|
case 51: RunStatus = "卸货货叉回叉有货故障"; break;
|
case 52: RunStatus = "载货台超重过载"; break;
|
case 53: RunStatus = "高度不符"; break;
|
case 54: RunStatus = "层给定位置超限故障"; break;
|
case 55: RunStatus = "列给定位置超限故障"; break;
|
case 56: RunStatus = "叉给定位置超限故障"; break;
|
case 57: RunStatus = "触摸屏通讯故障"; break;
|
}
|
return RunStatus;
|
}
|
string GetMachine(ushort machine)
|
{
|
string RunStatus = string.Empty;
|
switch (machine)
|
{
|
case 0: RunStatus = "关闭"; break;
|
case 2: RunStatus = "有货"; break;
|
case 3: RunStatus = "等待指令"; break;
|
case 4: RunStatus = "空闲"; break;
|
case 12: RunStatus = "自检错误"; break;
|
case 13: RunStatus = "无变有"; break;
|
case 14: RunStatus = "提前到来"; break;
|
case 15: RunStatus = "接收超时"; break;
|
case 16: RunStatus = "接收暂停"; break;
|
case 17: RunStatus = "有变无"; break;
|
case 19: RunStatus = "放行超时"; break;
|
case 20: RunStatus = "放行暂停"; break;
|
}
|
return RunStatus;
|
}
|
string GetSpec(ushort spec)
|
{
|
string RunStatus = string.Empty;
|
switch (spec)
|
{
|
case 1: RunStatus = "左超"; break;
|
case 2: RunStatus = "右超"; break;
|
case 3: RunStatus = "前超"; break;
|
case 4: RunStatus = "后超"; break;
|
case 5: RunStatus = "超高"; break;
|
case 6: RunStatus = "超重"; break;
|
}
|
return RunStatus;
|
}
|
string GetStatus(short status)
|
{
|
string Status = string.Empty;
|
switch (status)
|
{
|
case 0: Status = "待机中"; break;
|
case 1: Status = "入库中"; break;
|
case 2: Status = "出库中"; break;
|
case 3: Status = "移库中"; break;
|
case 4: Status = "盘点中"; break;
|
case 9: Status = "手动中"; break;
|
case 10: Status = "充电中"; break;
|
case 13: Status = "A侧回零中"; break;
|
case 14: Status = "B侧回零中"; break;
|
case 15: Status = "A侧后退中"; break;
|
case 16: Status = "B侧后退中"; break;
|
}
|
return Status;
|
}
|
string GetErrStatus(short status)
|
{
|
string Status = string.Empty;
|
switch (status)
|
{
|
case 0: Status = "正常"; break;
|
case 1: Status = "前防撞保护"; break;
|
case 2: Status = "后防撞保护"; break;
|
case 3: Status = "顶升超时"; break;
|
case 4: Status = "行走超时"; break;
|
case 5: Status = "前减速激光故障"; break;
|
case 6: Status = "后减速激光故障"; break;
|
case 7: Status = "前向上减速激光故障"; break;
|
case 8: Status = "后向上减速激光故障"; break;
|
case 9: Status = "接近开关故障"; break;
|
case 10: Status = "行走堵转报警"; break;
|
case 11: Status = "A侧急停报警"; break;
|
case 12: Status = "B侧急停报警"; break;
|
case 13: Status = "行走电机故障"; break;
|
case 14: Status = "顶升电机故障"; break;
|
case 15: Status = "电量不足"; break;
|
}
|
return Status;
|
}
|
}
|
}
|