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
{
///
/// 质量大屏Service业务层处理
///
[AppService(ServiceType = typeof(IQualitySmartService), ServiceLifetime = LifeTime.Transient)]
public class QualitySmartService : BaseService, 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 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);
// 使用 SqlSugar 进行联表查询和分组统计
var result = Context.Queryable()
.LeftJoin((defect, work) => defect.Workorder == work.Workorder)
.Where((defect, work) => defect.CheckDatetime >= startOfWeek && defect.CheckDatetime <= endOfWeek)
.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 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);
// 使用 SqlSugar 进行联表查询和分组统计
var result = Context.Queryable()
.LeftJoin((defect, work) => defect.Workorder == work.Workorder)
.Where((defect, work) => defect.CheckDatetime >= firstDayOfMonth && defect.CheckDatetime <= lastDayOfMonth)
.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;
}
}
}