智能工厂模块 - 增强工厂数据统计功能

在工厂数据统计功能中,新增百分比计算功能,以增强数据展示的直观性和可理解性。具体包括:1. 在`FactoryDataController`中添加计算全工厂指定日期总数据的逻辑,并计算出入库、出库以及出入库比例的百分比。
2. 修改`FactoryDataMapper`中的SQL查询,确保SUM函数的NULL值处理更加清晰。3. 更新`FactoryDataTotalVO`实体类,添加用于存储百分比的新字段。

这些增强使数据统计结果更加精确和易懂,便于用户快速理解工厂的运营概况。
This commit is contained in:
furongxin 2024-09-26 16:26:48 +08:00
parent 6cc33737b9
commit ee2a967d84
3 changed files with 33 additions and 8 deletions

View File

@ -29,6 +29,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException; import java.io.IOException;
import java.text.DecimalFormat;
import java.time.DayOfWeek; import java.time.DayOfWeek;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalAdjusters;
@ -118,12 +119,27 @@ public class FactoryDataController {
setDate(pageReqVO); setDate(pageReqVO);
} }
// 获取指定工厂指定日期的出入库数据
FactoryDataTotalVO dataTotalVO = dataService.getDataTotal(pageReqVO.getFactoryId(), pageReqVO.getDate()); FactoryDataTotalVO dataTotalVO = dataService.getDataTotal(pageReqVO.getFactoryId(), pageReqVO.getDate());
if (dataTotalVO == null) {
dataTotalVO = new FactoryDataTotalVO(); if (pageReqVO.getFactoryId() != null) {
dataTotalVO.setInTotal(0);
dataTotalVO.setOutTotal(0); // 获取全工厂指定日期的总数据
dataTotalVO.setDamageNum(0); FactoryDataTotalVO dataTotal = dataService.getDataTotal(null, pageReqVO.getDate());
DecimalFormat df = new DecimalFormat("#.##"); // 保留两位小数
if (dataTotal.getInTotal() != 0) {
// 设置出入库比列
dataTotalVO.setInPercentage(df.format((double)dataTotalVO.getInTotal() / dataTotal.getInTotal() * 100L) + "%");
}
if (dataTotal.getOutTotal() != 0) {
// 设置出库比例
dataTotalVO.setOutPercentage(df.format((double)dataTotalVO.getOutTotal() / dataTotal.getOutTotal() * 100L) + "%");
}
if (dataTotalVO.getInTotal() != 0 && dataTotalVO.getOutTotal() != 0) {
// 设置出入库比列
dataTotalVO.setInOutPercentage(df.format((double)dataTotalVO.getOutTotal() / dataTotalVO.getInTotal() * 100L) + "%");
}
} }
return success(dataTotalVO); return success(dataTotalVO);

View File

@ -21,4 +21,13 @@ public class FactoryDataTotalVO {
@Schema(description = "破损总数") @Schema(description = "破损总数")
private Integer damageNum; private Integer damageNum;
@Schema(description = "入库百分比")
private String inPercentage;
@Schema(description = "出库百分比")
private String outPercentage;
@Schema(description = "入库出库百分比")
private String inOutPercentage;
} }

View File

@ -60,9 +60,9 @@
<select id="selectDataSum" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO"> <select id="selectDataSum" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.factorydata.vo.FactoryDataTotalVO">
SELECT SELECT
SUM( CASE WHEN data_type = 2 THEN IFNULL(total_num, 0) END ) AS inTotal, IFNULL( SUM( CASE WHEN data_type = 2 THEN IFNULL(total_num, 0) END ), 0 ) AS inTotal,
SUM( CASE WHEN data_type = 1 THEN IFNULL(total_num, 0) END ) AS outTotal, IFNULL( SUM( CASE WHEN data_type = 1 THEN IFNULL(total_num, 0) END ), 0 ) AS outTotal,
SUM( CASE WHEN data_type = 1 OR data_type = 2 THEN IFNULL(damage_num, 0) END ) AS damageNum IFNULL( SUM( CASE WHEN data_type = 1 OR data_type = 2 THEN IFNULL(damage_num, 0) END ), 0 ) AS damageNum
FROM FROM
sf_factory_data sf_factory_data
WHERE WHERE