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