Files
shgx_tz_mes_backend_sync/ZR.Service/mes/BI/carouselBoard/CarouselBoardService.cs
2025-10-27 20:00:21 +08:00

212 lines
8.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
AlarmArea = it.Area,
AlarmType = it.AlarmCircuit,
AlarmContent = it.MessageText,
AlarmTime = it.AlarmTime,
Duration = it.Duration.Value,
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.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;
}
}
}