质量大屏

This commit is contained in:
卢江海
2025-03-27 15:17:23 +08:00
parent df4fc49eab
commit 9c916d58e8
8 changed files with 256 additions and 30 deletions

View File

@@ -1,6 +0,0 @@
namespace DOAN.Admin.WebApi.Controllers.MES.SmartScreen.Quality
{
public class QualityController
{
}
}

View File

@@ -0,0 +1,63 @@
using DOAN.Admin.WebApi.Filters;
using DOAN.Service.MES.SmartScreen.Order;
using DOAN.Service.MES.SmartScreen.Order.IService;
using DOAN.Service.MES.SmartScreen.Quality.IService;
using Microsoft.AspNetCore.Mvc;
namespace DOAN.Admin.WebApi.Controllers.MES.SmartScreen.Quality
{
/// <summary>
/// 质量大屏
/// </summary>
[Verify]
[Route("mes/qualityManagement/QualitySmart")]
public class QualitySmartController : BaseController
{
/// <summary>
/// 质量大屏接口
/// </summary>
private readonly IQualitySmartService _QualitySmartService;
public QualitySmartController(IQualitySmartService QualitySmartService)
{
_QualitySmartService = QualitySmartService;
}
/// <summary>
/// 查询质量大屏头信息
/// </summary>
/// <returns></returns>
[HttpGet("GetQualityScreenHead")]
public IActionResult GetQualityScreenHead()
{
var response = _QualitySmartService.GetQualityScreenHead();
return SUCCESS(response);
}
/// <summary>
/// 按周获取质量大屏数据
/// </summary>
/// <returns></returns>
[HttpGet("GetQualitySmartScreenForWeek")]
public IActionResult GetQualitySmartScreenForWeek()
{
var response = _QualitySmartService.GetQualitySmartScreenForWeek();
return SUCCESS(response);
}
/// <summary>
/// 按月获取质量大屏数据
/// </summary>
/// <returns></returns>
[HttpGet("GetQualitySmartScreenForMonth")]
public IActionResult GetQualitySmartScreenForMonth()
{
var response = _QualitySmartService.GetQualitySmartScreenForMonth();
return SUCCESS(response);
}
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DOAN.Model.MES.SmartScreen.Quality.Dto
{
public class QualityScreenHeadDto
{
public int? MonthFQC { get; set; }
public int? WeekFQC { get; set; }
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DOAN.Model.MES.SmartScreen.Quality.Dto
{
public class QualitySmartScreenDto
{
public string StoveCode { get; set; }
public string DefectName { get; set; }
public int? Number { get; set; }
}
}

View File

@@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DOAN.Model.MES.SmartScreen.Quality
{
internal class Quality
{
}
}

View File

@@ -1,12 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DOAN.Service.MES.SmartScreen.Quality.IService
{
internal class IQualityService
{
}
}

View File

@@ -0,0 +1,19 @@
using DOAN.Model.MES.order;
using DOAN.Model.MES.quality.FQC;
using DOAN.Model.MES.SmartScreen.Quality.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DOAN.Service.MES.SmartScreen.Quality.IService
{
public interface IQualitySmartService : IBaseService<QcFinishedproductDefectCollection>
{
QualityScreenHeadDto GetQualityScreenHead();
List<QualitySmartScreenDto> GetQualitySmartScreenForWeek();
List<QualitySmartScreenDto> GetQualitySmartScreenForMonth();
}
}

View File

@@ -0,0 +1,142 @@
using DOAN.Model.MES.order;
using DOAN.Model.MES.product;
using DOAN.Model.MES.quality.FQC;
using DOAN.Model.MES.SmartScreen.Quality.Dto;
using DOAN.Service.MES.SmartScreen.Order.IService;
using DOAN.Service.MES.SmartScreen.Quality.IService;
using Infrastructure.Attribute;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DOAN.Service.MES.SmartScreen.Quality
{
/// <summary>
/// 质量大屏Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IQualitySmartService), ServiceLifetime = LifeTime.Transient)]
public class QualitySmartService : BaseService<QcFinishedproductDefectCollection>, IQualitySmartService
{
public QualityScreenHeadDto GetQualityScreenHead()
{
QualityScreenHeadDto qualityScreenHeadDto = new QualityScreenHeadDto();
// 当前日期
DateTime now = DateTime.Now;
// 当前月份的第一天 00:00:00
DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1);
// 当前月份的最后一天 23:59:59
DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, 1)
.AddMonths(1)
.AddSeconds(-1);
// 计算本周周一(第一天)
int daysUntilMonday = ((int)now.DayOfWeek - (int)DayOfWeek.Monday + 7) % 7;
DateTime startOfWeek = now.AddDays(-daysUntilMonday);
// 计算本周周日最后一天23:59:59
DateTime endOfWeek = startOfWeek.AddDays(6).Date
.AddHours(23)
.AddMinutes(59)
.AddSeconds(59);
var response = Queryable().ToList();
qualityScreenHeadDto.MonthFQC = response.Where(o => o.CheckDatetime >= firstDayOfMonth && o.CheckDatetime <= lastDayOfMonth).Sum(o=>o.Number);
qualityScreenHeadDto.WeekFQC= response.Where(o => o.CheckDatetime >= startOfWeek && o.CheckDatetime <= endOfWeek).Sum(o => o.Number);
return qualityScreenHeadDto;
}
public List<QualitySmartScreenDto> GetQualitySmartScreenForWeek()
{
// 获取当前日期
DateTime now = DateTime.Now;
// 计算本周周一(第一天)
int daysUntilMonday = ((int)now.DayOfWeek - (int)DayOfWeek.Monday + 7) % 7;
DateTime startOfWeek = now.AddDays(-daysUntilMonday);
// 计算本周周日最后一天23:59:59
DateTime endOfWeek = startOfWeek.AddDays(6).Date
.AddHours(23)
.AddMinutes(59)
.AddSeconds(59);
// 查询本周的质量缺陷数据
var defectQuery = Queryable()
.Where(o => o.CheckDatetime >= startOfWeek && o.CheckDatetime <= endOfWeek);
// 获取有缺陷的工单列表
List<string> defectWorkorders = defectQuery
.Select(o => o.Workorder)
.Distinct()
.ToList();
if (defectWorkorders.Count == 0)
{
return new List<QualitySmartScreenDto>();
}
// 查询相关工单信息
var workorderQuery = Context.Queryable<ProWorkorder>()
.Where(o => defectWorkorders.Contains(o.Workorder));
// 使用 SqlSugar 进行联表查询和分组统计
var result = defectQuery
.InnerJoin<ProWorkorder>((defect, work) => defect.Workorder == work.Workorder)
.GroupBy((defect, work) => new { work.StoveCode, defect.DefectName })
.Select((defect, work) => new QualitySmartScreenDto
{
StoveCode = work.StoveCode,
DefectName = defect.DefectName,
Number = SqlFunc.AggregateSum(defect.Number)
})
.ToList();
return result;
}
public List<QualitySmartScreenDto> GetQualitySmartScreenForMonth()
{
// 获取当前日期
DateTime now = DateTime.Now;
// 当前月份的第一天 00:00:00
DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1);
// 当前月份的最后一天 23:59:59
DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, 1)
.AddMonths(1)
.AddSeconds(-1);
// 查询本周的质量缺陷数据
var defectQuery = Queryable()
.Where(o => o.CheckDatetime >= firstDayOfMonth && o.CheckDatetime <= lastDayOfMonth);
// 获取有缺陷的工单列表
List<string> defectWorkorders = defectQuery
.Select(o => o.Workorder)
.Distinct()
.ToList();
if (defectWorkorders.Count == 0)
{
return new List<QualitySmartScreenDto>();
}
// 查询相关工单信息
var workorderQuery = Context.Queryable<ProWorkorder>()
.Where(o => defectWorkorders.Contains(o.Workorder));
// 使用 SqlSugar 进行联表查询和分组统计
var result = defectQuery
.InnerJoin<ProWorkorder>((defect, work) => defect.Workorder == work.Workorder)
.GroupBy((defect, work) => new { work.StoveCode, defect.DefectName })
.Select((defect, work) => new QualitySmartScreenDto
{
StoveCode = work.StoveCode,
DefectName = defect.DefectName,
Number = SqlFunc.AggregateSum(defect.Number)
})
.ToList();
return result;
}
}
}