diff --git a/RIZO.Admin.WebApi/Controllers/Mes/WorkOrderInfo/WorkOrderController.cs b/RIZO.Admin.WebApi/Controllers/Mes/WorkOrderInfo/WorkOrderController.cs index b1c5f0f..f788fbb 100644 --- a/RIZO.Admin.WebApi/Controllers/Mes/WorkOrderInfo/WorkOrderController.cs +++ b/RIZO.Admin.WebApi/Controllers/Mes/WorkOrderInfo/WorkOrderController.cs @@ -149,5 +149,17 @@ namespace RIZO.Admin.WebApi.Controllers.Mes.WorkOrderInfo true ); } + + /// + /// 查询一周合格数不合适数这些图 + /// + /// + [HttpGet("/queryQualityLineChart")] + [ActionPermissionFilter(Permission = "workorder:list")] + public IActionResult QueryQualityLineChart() + { + var response = _WorkOrderService.QueryQualityLineChart(); + return SUCCESS(response); + } } } \ No newline at end of file diff --git a/RIZO.Model/Mes/Dto/WorkOrderInfo/WorkOrderDto.cs b/RIZO.Model/Mes/Dto/WorkOrderInfo/WorkOrderDto.cs index 31cb240..979375d 100644 --- a/RIZO.Model/Mes/Dto/WorkOrderInfo/WorkOrderDto.cs +++ b/RIZO.Model/Mes/Dto/WorkOrderInfo/WorkOrderDto.cs @@ -111,4 +111,54 @@ namespace RIZO.Model.Mes.Dto.WorkOrderInfo public string UserId { get; set; } public string UserName { get; set; } } + + /// + /// 饼图数据项模型(单条数据) + /// + public class PieChartItem + { + /// + /// 分类名称(如 A类、B类,对应前端 name) + /// + public string name { get; set; } + + /// + /// 对应数值(对应前端 value,用 double 兼容整数/小数) + /// + public double value { get; set; } + } + + /// + /// 饼图响应模型(外层统一格式) + /// + public class PieChartResponse + { + public int code { get; set; } = 200; + public string msg { get; set; } = "操作成功"; + /// + /// 饼图核心数据(直接返回数组) + /// + public List data { get; set; } = new List(); + } + + /// + /// 折线图返回模型 + /// + public class LineChartResponse + { + /// + /// X轴数据 + /// + public List xAxisData { get; set; } = new List(); + + /// + /// 系列数据 + /// + public List series { get; set; } = new List(); + } + public class LineChartSeries + { + public string Name { get; set; } + public List Data { get; set; } = new List(); + } } \ No newline at end of file diff --git a/RIZO.Model/Mes/WorkOrderInfo/WorkOrder.cs b/RIZO.Model/Mes/WorkOrderInfo/WorkOrder.cs index 273d799..e7f8d91 100644 --- a/RIZO.Model/Mes/WorkOrderInfo/WorkOrder.cs +++ b/RIZO.Model/Mes/WorkOrderInfo/WorkOrder.cs @@ -120,5 +120,8 @@ namespace RIZO.Model.Mes.WorkOrderInfo /// [SugarColumn(ColumnName = "batch_number")] public string BatchNumber { get; set; } + + [SugarColumn(ColumnName = "CreateDate")] + private string CreateDate { get; set; } } } \ No newline at end of file diff --git a/RIZO.Service/Mes/IMesService/WorkOrderInfo/IWorkOrderService.cs b/RIZO.Service/Mes/IMesService/WorkOrderInfo/IWorkOrderService.cs index 4aa2f99..3926072 100644 --- a/RIZO.Service/Mes/IMesService/WorkOrderInfo/IWorkOrderService.cs +++ b/RIZO.Service/Mes/IMesService/WorkOrderInfo/IWorkOrderService.cs @@ -24,6 +24,6 @@ namespace RIZO.Service.Mes.IMesService.WorkOrderInfo int ChangeWorkOrderState(WorkOrderState parm); - + LineChartResponse QueryQualityLineChart(); } } diff --git a/RIZO.Service/Mes/WorkOrderInfo/WorkOrderService.cs b/RIZO.Service/Mes/WorkOrderInfo/WorkOrderService.cs index 8b63337..b13265b 100644 --- a/RIZO.Service/Mes/WorkOrderInfo/WorkOrderService.cs +++ b/RIZO.Service/Mes/WorkOrderInfo/WorkOrderService.cs @@ -1,6 +1,7 @@ using Aliyun.OSS; using Infrastructure.Attribute; using Infrastructure.Extensions; +using Microsoft.Data.SqlClient; using RIZO.Model.Mes.Dto.GatherData; using RIZO.Model.Mes.Dto.WorkOrderInfo; using RIZO.Model.Mes.MasterData; @@ -9,6 +10,7 @@ using RIZO.Repository; using RIZO.Service.Mes.IMesService.MasterData; using RIZO.Service.Mes.IMesService.WorkOrderInfo; using RIZO.Service.Mes.MasterData; +using SqlSugar.Extensions; namespace RIZO.Service.Mes.WorkOrderInfo { @@ -19,7 +21,7 @@ namespace RIZO.Service.Mes.WorkOrderInfo public class WorkOrderService : BaseService, IWorkOrderService { private WorkOrderItemService workOrderItemService = new WorkOrderItemService(); - + /// /// 查询工单主表列表 /// @@ -46,7 +48,7 @@ namespace RIZO.Service.Mes.WorkOrderInfo return response; } - + /// /// 获取详情 @@ -122,7 +124,7 @@ namespace RIZO.Service.Mes.WorkOrderInfo } return predicate; } - + public WorkOrder CreateWorkOrderBySacnCode(FlowCard flowCard) { @@ -241,10 +243,74 @@ namespace RIZO.Service.Mes.WorkOrderInfo ); } catch (Exception ex) - { + { iResult = 0; } return iResult; } + + /// + /// 按产线统计7天内每日合格率(折线图数据) + /// + /// 合格率折线图格式(xAxisData + series) + public LineChartResponse QueryQualityLineChart() + { + DateTime now = DateTime.Now; + List last7Days = Enumerable.Range(0, 7) + .Select(i => now.AddDays(-i).Date) + .OrderBy(date => date) + .ToList(); + List xAxisData = last7Days.Select(date => date.ToString("yyyy-MM-dd")).ToList(); + string sql = string.Format(@"SELECT + w.line_code LineCode, + w.line_name LineName, + w.create_time, + sum(w.ok_qty) OkQty, + sum(w.ng_qty) NgQty + FROM + work_order w + WHERE + w.create_time >= DATE_SUB(CURDATE(), INTERVAL 6 DAY) + AND w.create_time < DATE_ADD(CURDATE(), INTERVAL 1 DAY) + GROUP BY + w.line_code, + w.line_name, + DATE_FORMAT(w.create_time, '%Y-%m-%d')"); + var queryData = SqlQueryToList(sql); + List series = new List(); + foreach (var lineKv in queryData) + { + string lineCode = lineKv.LineCode; + string lineName = lineKv.LineName; + + // 为7天的每个日期补全数据,计算合格率 + List data = new List(); + foreach (string date in xAxisData) + { + // 存在该日期数据则用查询结果,否则OK/NG均为0 + if (lineKv.CreateTime.ObjToDate().ToString("yyyy-MM-dd").Contains(date)) + { + int total = lineKv.OkQty + lineKv.NgQty; + // 合格率=OK数/总数(总数为0时合格率设为0,避免除以0) + double rate = total == 0 ? 0 : Math.Round(((double)lineKv.OkQty / total)*100, 2); + data.Add(rate); + } + else + { + data.Add(0); + } + } + series.Add(new LineChartSeries + { + Name = $"{lineName}({lineCode})", + Data = data + }); + } + return new LineChartResponse + { + xAxisData = xAxisData, + series = series + }; + } } } \ No newline at end of file