From ae57e0c2dc133e4fe3d9384557af59cbe2fa477a Mon Sep 17 00:00:00 2001 From: chenlin Date: Thu, 5 Feb 2026 09:59:12 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=A4=A7=E5=B1=8F=E8=BE=BE?= =?UTF-8?q?=E6=88=90=E7=8E=87,=E5=90=88=E6=A0=BC=E7=8E=87=EF=BC=8C?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MES/report/ReportController.cs | 33 ++++++++- DOAN.Model/MES/report/MonthProuctModel.cs | 8 +++ .../MES/report/IService/IReportService.cs | 6 +- DOAN.Service/MES/report/ReportService.cs | 69 ++++++++++++++++++- 4 files changed, 110 insertions(+), 6 deletions(-) diff --git a/DOAN.Admin.WebApi/Controllers/MES/report/ReportController.cs b/DOAN.Admin.WebApi/Controllers/MES/report/ReportController.cs index 0bcd638..8faf263 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/report/ReportController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/report/ReportController.cs @@ -66,7 +66,7 @@ namespace DOAN.WebApi.Controllers public IActionResult ProductionCompletionRate([FromQuery] string groupName) { DateTime dt = new DateTime(2026, 1, 27); - //dt = DateTime.Today; + dt = DateTime.Today; var response = _ReportService.ProductionCompletionRate(groupName, dt); //DateTime.Today return SUCCESS(response); } @@ -114,7 +114,7 @@ namespace DOAN.WebApi.Controllers } /// - /// 生产大屏达成率 + /// 生产大屏达成率,取消不需要 /// /// [HttpGet("productionReportRate")] @@ -122,8 +122,35 @@ namespace DOAN.WebApi.Controllers { DateTime dt = new DateTime(2026, 1, 27); //dt = DateTime.Now; - var response = _ReportService.ProductionReportRate(dt); + var response = _ReportService.ProductionReportRate2(dt); return SUCCESS(response); } + + /// + /// 生产大屏周达成率,合格率,异常率 + /// + /// + [HttpGet("productionReportWeekRate")] + public IActionResult ProductionReportWeekRate() + { + DateTime dt = new DateTime(2026, 1, 27); + //dt = DateTime.Now; + var response = _ReportService.ProductionReportRate(dt,1); + return SUCCESS(response); + } + + /// + /// 生产大屏月达成率,合格率,异常率 + /// + /// + [HttpGet("productionReportMonthRate")] + public IActionResult ProductionReportMonthRate() + { + DateTime dt = new DateTime(2026, 1, 27); + //dt = DateTime.Now; + var response = _ReportService.ProductionReportRate(dt, 2); + return SUCCESS(response); + } + } } diff --git a/DOAN.Model/MES/report/MonthProuctModel.cs b/DOAN.Model/MES/report/MonthProuctModel.cs index af50d47..e8b20e6 100644 --- a/DOAN.Model/MES/report/MonthProuctModel.cs +++ b/DOAN.Model/MES/report/MonthProuctModel.cs @@ -151,6 +151,14 @@ namespace DOAN.Model.MES.report public int? Status { get; set; } } + public class ProductionReportToalRate + { + public double CompleteRate { get; set; } + public double QualifiedRate { get; set; } + public double UnqualifiedRate { get; set; } + } + + public class ProductionReportRate { public string WorkTimePeriod { get; set; } diff --git a/DOAN.Service/MES/report/IService/IReportService.cs b/DOAN.Service/MES/report/IService/IReportService.cs index a940d2d..df318ab 100644 --- a/DOAN.Service/MES/report/IService/IReportService.cs +++ b/DOAN.Service/MES/report/IService/IReportService.cs @@ -15,6 +15,7 @@ namespace DOAN.Service.MES.report.IService public interface IReportService : IBaseService { List DevicePoweronRate(DeviceReportDto param); + List DeviceDowntimeRate(DeviceReportDto param); List ProductionCompletionRate(string groupName, DateTime dateTime); @@ -22,6 +23,9 @@ namespace DOAN.Service.MES.report.IService List MonthlyProductionCompletionRate(DateTime dateTime); List ProductionReport(DateTime dateTime); - ProductionReportRateModel ProductionReportRate(DateTime dateTime); + + ProductionReportToalRate ProductionReportRate(DateTime dateTime, int type); + + ProductionReportRateModel ProductionReportRate2(DateTime dateTime); } } diff --git a/DOAN.Service/MES/report/ReportService.cs b/DOAN.Service/MES/report/ReportService.cs index 04fb897..0285de2 100644 --- a/DOAN.Service/MES/report/ReportService.cs +++ b/DOAN.Service/MES/report/ReportService.cs @@ -7,6 +7,7 @@ using DOAN.Model.MES.product; using DOAN.Model.MES.report; using DOAN.Service.MES.report.IService; using Infrastructure.Attribute; +using JinianNet.JNTemplate.Dynamic; using System.Data; namespace DOAN.Service.MES.report @@ -331,7 +332,7 @@ namespace DOAN.Service.MES.report var woList = Context.Queryable() .LeftJoin((a, b) => a.Workorder == b.FkWorkorder) .LeftJoin((a, b, c) => a.LineCode == c.Code) - .LeftJoin((a, b, c, d) => a.GroupCode == d.GroupCode) + .LeftJoin((a, b, c, d) => a.GroupCode == d.GroupCode) .Where((a, b, c, d) => a.WorkorderDate.Value.ToString("yyyy-MM-dd") == dt) .Select((a, b, c, d) => new ProductionReportModel { @@ -352,7 +353,71 @@ namespace DOAN.Service.MES.report return woList; } - public ProductionReportRateModel ProductionReportRate(DateTime dateTime) + public ProductionReportToalRate ProductionReportRate(DateTime dateTime, int type) + { + DateTime startDate, endDate; + if (type == 1) + { + var dateRange = GetWeekRange(dateTime); + startDate = dateRange.StartOfWeek; + endDate = dateRange.EndOfWeek; + } + else + { + var dateRange = GetMonthRange(dateTime); + startDate = dateRange.StartOfMonth; + endDate = dateRange.EndOfMonth; + } + var woList = Context.Queryable() + .LeftJoin((a, b) => a.Workorder == b.FkWorkorder) + .Where((a, b) => a.WorkorderDate >= startDate && a.WorkorderDate <= endDate) + .Select((a, b) => new + { + PlanNum = a.DeliveryNum ?? 0, + CompletionNum = b.FinishedNum ?? 0, + QualifiedNumber = b.QualifiedNumber ?? 0, + UnqualifiedNumber = b.UnqualifiedNumber ?? 0 + }).ToList(); + + var totalPlanNum = woList.Sum(t => t.PlanNum); + var totalCompletionNum = woList.Sum(t => t.CompletionNum); + var totalQualifiedNum = woList.Sum(t => t.QualifiedNumber); + var totalUnqualifiedNum = woList.Sum(t => t.UnqualifiedNumber); + + ProductionReportToalRate rate = new ProductionReportToalRate() + { + CompleteRate = totalPlanNum == 0 ? 0 : Math.Round(totalCompletionNum * 100.0 / totalPlanNum, 2), + QualifiedRate = totalCompletionNum == 0 ? 0 : Math.Round(totalQualifiedNum * 100.0 / totalCompletionNum, 2), + UnqualifiedRate = totalCompletionNum == 0 ? 0 : Math.Round(totalUnqualifiedNum * 100.0 / totalCompletionNum, 2) + }; + return rate; + } + + private (DateTime StartOfWeek, DateTime EndOfWeek) GetWeekRange(DateTime date) + { + // 计算本周第一天(周一) + int diff = (7 + (date.DayOfWeek - DayOfWeek.Monday)) % 7; + DateTime startOfWeek = date.AddDays(-1 * diff).Date; + + // 计算本周最后一天(周日) + DateTime endOfWeek = startOfWeek.AddDays(6); + return (startOfWeek, endOfWeek); + } + + // 获取当月时间范围 + private (DateTime StartOfMonth, DateTime EndOfMonth) GetMonthRange(DateTime date) + { + // 本月第一天 + DateTime startOfMonth = new DateTime(date.Year, date.Month, 1); + + // 本月最后一天 + int daysInMonth = DateTime.DaysInMonth(date.Year, date.Month); + DateTime endOfMonth = new DateTime(date.Year, date.Month, daysInMonth); + + return (startOfMonth, endOfMonth); + } + + public ProductionReportRateModel ProductionReportRate2(DateTime dateTime) { var dt = dateTime.ToString("yyyy-MM-dd"); ProductionReportRateModel model = new ProductionReportRateModel();