大屏折线图
This commit is contained in:
parent
7a18a0633a
commit
573ebf4f83
@ -149,5 +149,17 @@ namespace RIZO.Admin.WebApi.Controllers.Mes.WorkOrderInfo
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询一周合格数不合适数这些图
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("/queryQualityLineChart")]
|
||||
[ActionPermissionFilter(Permission = "workorder:list")]
|
||||
public IActionResult QueryQualityLineChart()
|
||||
{
|
||||
var response = _WorkOrderService.QueryQualityLineChart();
|
||||
return SUCCESS(response);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -111,4 +111,54 @@ namespace RIZO.Model.Mes.Dto.WorkOrderInfo
|
||||
public string UserId { get; set; }
|
||||
public string UserName { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 饼图数据项模型(单条数据)
|
||||
/// </summary>
|
||||
public class PieChartItem
|
||||
{
|
||||
/// <summary>
|
||||
/// 分类名称(如 A类、B类,对应前端 name)
|
||||
/// </summary>
|
||||
public string name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 对应数值(对应前端 value,用 double 兼容整数/小数)
|
||||
/// </summary>
|
||||
public double value { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 饼图响应模型(外层统一格式)
|
||||
/// </summary>
|
||||
public class PieChartResponse
|
||||
{
|
||||
public int code { get; set; } = 200;
|
||||
public string msg { get; set; } = "操作成功";
|
||||
/// <summary>
|
||||
/// 饼图核心数据(直接返回数组)
|
||||
/// </summary>
|
||||
public List<PieChartItem> data { get; set; } = new List<PieChartItem>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 折线图返回模型
|
||||
/// </summary>
|
||||
public class LineChartResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// X轴数据
|
||||
/// </summary>
|
||||
public List<string> xAxisData { get; set; } = new List<string>();
|
||||
|
||||
/// <summary>
|
||||
/// 系列数据
|
||||
/// </summary>
|
||||
public List<LineChartSeries> series { get; set; } = new List<LineChartSeries>();
|
||||
}
|
||||
public class LineChartSeries
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public List<double> Data { get; set; } = new List<double>();
|
||||
}
|
||||
}
|
||||
@ -120,5 +120,8 @@ namespace RIZO.Model.Mes.WorkOrderInfo
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "batch_number")]
|
||||
public string BatchNumber { get; set; }
|
||||
|
||||
[SugarColumn(ColumnName = "CreateDate")]
|
||||
private string CreateDate { get; set; }
|
||||
}
|
||||
}
|
||||
@ -24,6 +24,6 @@ namespace RIZO.Service.Mes.IMesService.WorkOrderInfo
|
||||
|
||||
int ChangeWorkOrderState(WorkOrderState parm);
|
||||
|
||||
|
||||
LineChartResponse QueryQualityLineChart();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<WorkOrder>, IWorkOrderService
|
||||
{
|
||||
private WorkOrderItemService workOrderItemService = new WorkOrderItemService();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询工单主表列表
|
||||
/// </summary>
|
||||
@ -46,7 +48,7 @@ namespace RIZO.Service.Mes.WorkOrderInfo
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取详情
|
||||
@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 按产线统计7天内每日合格率(折线图数据)
|
||||
/// </summary>
|
||||
/// <returns>合格率折线图格式(xAxisData + series)</returns>
|
||||
public LineChartResponse QueryQualityLineChart()
|
||||
{
|
||||
DateTime now = DateTime.Now;
|
||||
List<DateTime> last7Days = Enumerable.Range(0, 7)
|
||||
.Select(i => now.AddDays(-i).Date)
|
||||
.OrderBy(date => date)
|
||||
.ToList();
|
||||
List<string> 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<LineChartSeries> series = new List<LineChartSeries>();
|
||||
foreach (var lineKv in queryData)
|
||||
{
|
||||
string lineCode = lineKv.LineCode;
|
||||
string lineName = lineKv.LineName;
|
||||
|
||||
// 为7天的每个日期补全数据,计算合格率
|
||||
List<double> data = new List<double>();
|
||||
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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user