using System.Collections.Generic; using WcsMain.ApiServe.Vo.Board; using WcsMain.Common; using WcsMain.DataBase.Dao; using WcsMain.DataBase.JoinTableEntity; using WcsMain.DataBase.TableEntity; using WcsMain.Enum.Stacker; using WcsMain.WcsAttribute.AutoFacAttribute; namespace WcsMain.ApiServe.Service.BoardService; /// /// 二维大屏 controller service /// [Service] public class Board2Service(AppWmsTaskDao wmsTaskDao, AppErrRecorDao appErrRecorDao) { //private List? _appBaseErrs; /// /// 获取堆垛机运行效率 /// /// public StackerRunningEfficiencyResponse GetStackerRunningEfficiency() { int[] data = [0, 0, 0, 0, 0]; if (CommonData.AppLocations == null) { return new StackerRunningEfficiencyResponse() { Data = data }; } List? wmsTasks = wmsTaskDao.SelectRecentOneHour(); if(wmsTasks == null) { return new StackerRunningEfficiencyResponse() { Data = data }; } foreach (var wmsTask in wmsTasks) { if(wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask) { var location = CommonData.AppLocations.Find(f => f.WmsLocation == wmsTask.Destination); if(location != null) { data[(int)location.EquipmentId! - 1]++; } } else if (wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask) { var location = CommonData.AppLocations.Find(f => f.WmsLocation == wmsTask.Origin); if (location != null) { data[(int)location.EquipmentId! - 1]++; } } } return new StackerRunningEfficiencyResponse() { Data = data }; } /// /// 根据堆垛机获取错误信息数量 /// /// public List> GetErrByCrane() { List? appErrorRecordJoins = appErrRecorDao.SelectErrorRecordWithJoin(); if(appErrorRecordJoins == null) { return []; } List names = []; foreach (var appErrorRecordJoin in appErrorRecordJoins) { if (!names.Contains(appErrorRecordJoin.EquipmentId!)) { names.Add(appErrorRecordJoin.EquipmentId!); } } List counts = []; foreach (var name in names) { int count = appErrorRecordJoins.FindAll(f => f.EquipmentId == name).Count; counts.Add(count); } List> nameValueDatas = []; for (int i = 0; i < names.Count; i++) { nameValueDatas.Add(new NameValueData() { Name = string.Concat("#", names[i].AsSpan(names[i].Length - 1, 1)), Value = counts[i] }); } return nameValueDatas; } /// /// 根据故障类型获取错误信息数量 /// /// public List> GetErrByCategory() { List? appErrorRecordJoins = appErrRecorDao.SelectErrorRecordWithJoin(); if (appErrorRecordJoins == null) { return []; } List names = []; foreach (var appErrorRecordJoin in appErrorRecordJoins) { if (!names.Contains(appErrorRecordJoin.ErrType!)) { names.Add(appErrorRecordJoin.ErrType!); } } List counts = []; foreach (var name in names) { int count = appErrorRecordJoins.FindAll(f => f.ErrType == name).Count; counts.Add(count); } List> nameValueDatas = []; for (int i = 0; i < names.Count; i++) { nameValueDatas.Add(new NameValueData() { Name = names[i], Value = counts[i] }); } return nameValueDatas; } /// /// 获取错误信息 /// /// public List GetErrInfo() { List? appErrorRecordJoins = appErrRecorDao.SelectErrorRecordWithJoin(); if (appErrorRecordJoins == null) { return []; } List errors = new List(); int i = 0; foreach(var appErrorRecordJoin in appErrorRecordJoins) { errors.Add(new ErrorDetail() { Time = ((DateTime)appErrorRecordJoin.CreateTime!).ToString("MM-dd HH:mm:ss"), Material = string.Concat("#", appErrorRecordJoin.EquipmentId!.AsSpan(appErrorRecordJoin.EquipmentId!.Length - 1, 1)), FaultName = appErrorRecordJoin.ErrMsg!, FaultCode = appErrorRecordJoin.ErrNo!.ToString() }); i++; if(i >= 5) { break; } } return errors; } /// /// 获取任务数量 /// /// public TaskCountResponse GetTaskCount() { List? recentDaysTask = wmsTaskDao.SelectRecenntDay(15); if(recentDaysTask == null) { return new TaskCountResponse() { Date = [], In = [], Out = [] }; } TaskCountResponse taskCountResponse = new() { Date = [], In = [], Out = [] }; for(var j = 15; j >= 0; j--) { var date = DateTime.Now.AddDays(-j).ToString("MM-dd"); var inCount = recentDaysTask.FindAll(f => f.TaskType == (int)WmsTaskTypeEnum.inTask && ((DateTime)f.CreateTime!).ToString("MM-dd") == date).Count; var outCount = recentDaysTask.FindAll(f => f.TaskType == (int)WmsTaskTypeEnum.outTask && ((DateTime)f.CreateTime!).ToString("MM-dd") == date).Count; if(inCount < 1 && outCount < 1) continue; taskCountResponse.Date.Add(DateTime.Now.AddDays(-j).ToString("MM-dd")); taskCountResponse.In.Add(inCount); taskCountResponse.Out.Add(outCount); } var dateCount = taskCountResponse.Date.Count; if (dateCount <= 7) return taskCountResponse; taskCountResponse.Date.RemoveRange(0, dateCount - 7); taskCountResponse.In.RemoveRange(0, dateCount - 7); taskCountResponse.Out.RemoveRange(0, dateCount - 7); return taskCountResponse; } }