feat(BI): 添加轮播大屏功能及相关接口实现

实现质量、工单、毛坯和设备报警大屏的轮播数据展示功能
新增ICarouselBoardService接口及实现类
添加CarouselBoardController控制器处理请求
创建相关DTO模型用于数据传输
This commit is contained in:
2025-10-24 17:05:46 +08:00
parent 7270da5508
commit be6124b3db
6 changed files with 770 additions and 5 deletions

View File

@@ -0,0 +1,209 @@
using Aliyun.OSS;
using Infrastructure.Attribute;
using SqlSugar;
using System;
using System.Data;
using System.Globalization;
using System.Linq;
using ZR.Model.mes.carouselBoard;
using ZR.Model.mes.echarts;
using ZR.Model.MES.pro;
using ZR.Model.MES.qc;
using ZR.Model.MES.wms.Dto;
using ZR.Model.MES.wms;
using ZR.Service.MES.carouselBoard.IService;
using ZR.Service.MES.echarts.IService;
using ZR.Model.Business;
using ZR.Model.dc;
namespace ZR.Service.MES.carouselBoard
{
[AppService(ServiceType = typeof(ICarouselBoardService), ServiceLifetime = LifeTime.Transient)]
public class CarouselBoardService : BaseService<EchartsOptions>, ICarouselBoardService
{
public List<BlankInventoryCarouseDto> GetBlankInventoryCarouselBoardData(CarouselBoardQuery query)
{
// 构建查询条件
var predicate = Expressionable
.Create<WmBlankInventory>()
.And(it => it.Type == 1)
.ToExpression();
// 获取所有符合条件的毛坯库存记录,并按更新时间降序排列
var inventoryList = Context.Queryable<WmBlankInventory>()
.Where(predicate)
.OrderByDescending(it => it.UpdatedTime)
.ToList();
// 去重:获取所有唯一的毛坯号列表
var uniqueBlankNums = inventoryList
.GroupBy(it => it.BlankNum)
.Select(group => group.First())
.ToList();
// 构建返回结果
var response = new List<BlankInventoryCarouseDto>();
foreach (var inventory in uniqueBlankNums)
{
var dto = new BlankInventoryCarouseDto
{
Id = inventory.Id, // 主键
FkPaintId = inventory.FkPaintId, // 油漆id
BlankNum = inventory.BlankNum, // 毛坯号
Quantity = inventory.Quantity, // 库存数量
MaxNum = inventory.MaxNum, // 最大库存
MinNum = inventory.MinNum, // 最小库存
WarnNum = inventory.WarnNum, // 预警库存
Type = inventory.Type, // 类别
Status = inventory.Status, // 状态
Remark = inventory.Remark // 备注
};
// 直接查询当前毛坯号对应的物料信息(不使用字典缓存)
var material = Context.Queryable<WmMaterial>()
.Where(m => m.BlankNum == inventory.BlankNum && m.Type == 2 && m.Status == 1)
.First();
if (material != null)
{
dto.Description = !string.IsNullOrEmpty(material.Description)
? material.Description
: material.ProductName;
dto.Color = material.Color;
dto.Specification = material.Specification;
}
else
{
dto.Description = "此毛坯号不在物料清单内!";
}
response.Add(dto);
}
return response;
}
public List<DeviceAlarmCarouseDto> GetEquipmentAlarmCarouselBoardData(CarouselBoardQuery query)
{
List<DeviceAlarmCarouseDto> result = Context.Queryable<DeviceAlarmLog>()
.OrderByDescending(it => it.CreateTime)
.Select(it => new DeviceAlarmCarouseDto
{
Id = it.AlarmNo,
AlarmType = it.AlarmCircuit,
AlarmContent = it.MessageText,
AlarmTime = it.AlarmTime,
HandleStatus = it.Status
})
.ToList();
return result;
}
public DeviceLiveCarouseDto GetEquipmentLiveCarouselBoardData(CarouselBoardQuery query)
{
DeviceLiveCarouseDto result = Context.Queryable<DeviceUploadData>()
.OrderByDescending(it => it.CollectionTime)
.Select(it => new DeviceLiveCarouseDto
{
PrimerCycleTemperature = it.Value01,
PrimerCycleHumidity = it.Value02,
ColorCycleTemperature = it.Value03,
ColorCycleHumidity = it.Value04,
ClearCycleTemperature = it.Value05,
ClearCycleHumidity = it.Value06,
PureWaterConductivity = it.Value07,
MoistureDryingTemperature = it.Value08,
ClearDryingTemperature = it.Value09
})
.First();
return result;
}
public List<QualityStatisticsCarouseDto> GetQualityStatisticsCarouselBoardData(CarouselBoardQuery query)
{
// 获取今日日期
DateTime today = DateTime.Today;
DateTime tomorrow = today.AddDays(1);
List<QualityStatisticsCarouseDto> qualityStatistics = Context
.Queryable<QcQualityStatisticsFirst>()
.Where(it => it.Remark2 == 1) // 只获取有效的记录
.Where(it => it.StartTime >= today && it.StartTime < tomorrow) // 筛选今日内的数据
.Select(it => new QualityStatisticsCarouseDto
{
Id = it.Id, // id
WorkorderId = it.WorkorderId, // 工单号
FinishedPartNumber = it.FinishedPartNumber, // 零件号
ProductDescription = it.ProductDescription, // 描述
Color = it.Color, // 颜色
RequireNumber = it.RequireNumber, // 生产投入数
Team = it.Team, // 班次
QualifiedNumber = it.QualifiedNumber, // 合格数
QualifiedRate = it.QualifiedRate, // 合格率
PaoguangTotal = it.PaoguangTotal, // 抛光总数
DamoTotal = it.DamoTotal, // 打磨总数
BaofeiTotal = it.BaofeiTotal, // 报废总数
StartTime = it.StartTime,
EndTime = it.EndTime,
})
.ToList();
return qualityStatistics;
}
public List<WorkOrderCarouseDto> GetWorkOrderCarouselBoardData(CarouselBoardQuery query)
{
// 获取当前日期信息
DateTime now = DateTime.Now;
int currentYear = now.Year;
// 计算当前是本年的第几周(周一为一周的开始)
int currentWeek = CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(
now,
CalendarWeekRule.FirstFourDayWeek,
DayOfWeek.Monday
);
// 计算当前是星期几1-7周一=1周日=7
int currentDay = (int)now.DayOfWeek;
if (currentDay == 0) // 如果是周日
{
currentDay = 7;
}
List<WorkOrderCarouseDto> workorders = Context
.Queryable<ProWorkorder_v2>()
.Where(it => it.Remark3 == "是") // 只获取有效的工单
.Where(it => it.Status == 1) // 只获取状态为1的工单
.Where(it => it.Year == currentYear) // 筛选当前年份
.Where(it => it.Week == currentWeek) // 筛选当前周
.Where(it => it.Date == currentDay) // 筛选当前日
.OrderBy(it => it.Sort) // 按序号排序
.Select(it => new WorkOrderCarouseDto
{
Id = it.Id, // 工单号
BlankNumber = it.BlankNumber, // 毛坯号
FinishedPartNumber = it.FinishedPartNumber, // 成品零件号
ProductDescription = it.ProductDescription, // 产品描述
Colour = it.Colour, // 颜色
Specifications = it.Specifications, // 规格
CodeNumber = it.CodeNumber, // 编码号
VehicleNumber = it.VehicleNumber, // 车数
PreviousNumber = it.PreviousNumber, // 上件数
CylinderNumber = it.CylinderNumber, // 双组号缸号
Remark1 = it.Remark1, // 备注1
Remark2 = it.Remark2, // 备注2
Remark3 = it.Remark3, // 备注3
Remark4 = it.Remark4, // 备注4
Sort = it.Sort, // 序号
ClientWorkorder = it.ClientWorkorder, // 客户工单号
Status = it.Status, // 状态
Year = it.Year, // 年
Week = it.Week, // 周
Date = it.Date // 日
})
.ToList();
return workorders;
}
}
}

View File

@@ -0,0 +1,39 @@
using ZR.Model.mes.carouselBoard;
namespace ZR.Service.MES.carouselBoard.IService
{
public interface ICarouselBoardService
{
/// <summary>
/// 获取质量大屏轮播数据
/// </summary>
/// <returns></returns>
List<QualityStatisticsCarouseDto> GetQualityStatisticsCarouselBoardData(CarouselBoardQuery query);
/// <summary>
/// 获取生产大屏轮播数据
/// </summary>
/// <returns></returns>
List<WorkOrderCarouseDto> GetWorkOrderCarouselBoardData(CarouselBoardQuery query);
/// <summary>
/// 获取毛坯大屏轮播数据
/// </summary>
/// <returns></returns>
List<BlankInventoryCarouseDto> GetBlankInventoryCarouselBoardData(CarouselBoardQuery query);
/// <summary>
/// 获取设备报警信息大屏轮播数据
/// </summary>
/// <returns></returns>
List<DeviceAlarmCarouseDto> GetEquipmentAlarmCarouselBoardData(CarouselBoardQuery query);
/// <summary>
/// 获取设备实时参数信息大屏轮播数据
/// </summary>
/// <returns></returns>
DeviceLiveCarouseDto GetEquipmentLiveCarouselBoardData(CarouselBoardQuery query);
}
}