Commit 079e184a authored by 林洋洋's avatar 林洋洋

修改 日报

parent e6c91d4a
......@@ -111,10 +111,10 @@ public class ExcelTools {
if (fileTemplate.isFileExists(bucketName, fileName)) {
return jsonObject.toString();
}
Map<String, Object> paramMap = generateReport(startTime, endTime);
Map<String, Double> paramMap = generateReport(startTime, endTime);
log.info("入参{}", paramMap);
boolean result = convertUtils.fillWordLoop(fileName, "科环集团电力运营日报模板.docx", paramMap, bucketName);
Map<String, Object> params = new HashMap<>(paramMap);
boolean result = convertUtils.fillWordLoop(fileName, "科环集团电力运营日报模板.docx", params, bucketName);
if (!result) {
jsonObject.set("success", false);
......@@ -176,14 +176,15 @@ public class ExcelTools {
}
public Map<String, Object> generateReport(LocalDateTime startTime, LocalDateTime endTime) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("year", startTime.getYear());
paramMap.put("month", startTime.getMonthValue());
paramMap.put("day", startTime.getDayOfMonth());
public Map<String, Double> generateReport(LocalDateTime startTime, LocalDateTime endTime) {
Map<String, Double> paramMap = new HashMap<>();
paramMap.put("year", (double) startTime.getYear());
paramMap.put("month", (double) startTime.getMonthValue());
paramMap.put("day", (double) startTime.getDayOfMonth());
List<AskReportDict> askReportDicts = askReportDictMapper.selectList(
Wrappers.lambdaQuery(AskReportDict.class).eq(AskReportDict::getType, 1)
.orderByAsc(AskReportDict::getCalculationMethod)
);
List<String> paramSer = new ArrayList<>();
for (AskReportDict askReportDict : askReportDicts) {
......@@ -207,28 +208,26 @@ public class ExcelTools {
AskHistoryCollectData::getValue, // 获取 value 作为值
(existingValue, newValue) -> existingValue // 如果有重复的键,这里决定如何处理。这里选择保留现有的值。
));
paramMap.putAll(result);
for (AskReportDict askReportDict : askReportDicts) {
String key = askReportDict.getKey();
paramMap.put(key, "");
askReportDict.convertParamsToParamList();
List<AskReportDict.Params> params = askReportDict.getParamList();
if (CollectionUtils.isEmpty(params)) {
continue;
}
switch (askReportDict.getType()) {
switch (askReportDict.getCalculationMethod()) {
case 1:
handleType1(askReportDict.getKey(), params, paramMap, result);
handleType1(askReportDict.getKey(), params, paramMap);
break;
case 2:
handleType2(askReportDict.getKey(), params, paramMap, result);
handleType2(askReportDict.getKey(), params, paramMap);
break;
case 3:
handleType3(askReportDict.getKey(), params, paramMap, result);
handleType3(askReportDict.getKey(), params, paramMap);
break;
case 4:
handleTypeSum(askReportDict.getKey(), params, paramMap, result);
handleTypeSum(askReportDict.getKey(), params, paramMap);
break;
default:
// Handle other types if necessary
......@@ -261,54 +260,73 @@ public class ExcelTools {
return paramMap;
}
private void handleType1(String key, List<AskReportDict.Params> params, Map<String, Object> paramMap, Map<String, Double> result) {
private void handleType1(String key, List<AskReportDict.Params> params, Map<String, Double> paramMap) {
AskReportDict.Params param = params.get(0);
if (param == null) {
return;
}
Double value = result.get(param.getParam());
Double value = getParamValue(param,paramMap);
if (value != null) {
paramMap.put(key, value);
}
}
private void handleType2(String key, List<AskReportDict.Params> params, Map<String, Object> paramMap, Map<String, Double> result) {
private void handleType2(String key, List<AskReportDict.Params> params, Map<String, Double> paramMap) {
if (params.size() < 2) {
return;
}
Double numerator = result.get(params.get(0).getParam());
Double denominator = result.get(params.get(1).getParam());
if (numerator == null || denominator == null || denominator == 0) {
// 第一个值做初始分子
Double result = getParamValue(params.get(0),paramMap);
if (result == null) {
return;
}
Double value = Math.round(numerator / denominator * 100.0) / 100.0; // 保留两位小数
paramMap.put(key, value);
// 从第二个开始全部当分母,依次除
for (int i = 1; i < params.size(); i++) {
Double denominator = getParamValue(params.get(i),paramMap);
if (denominator == null || denominator == 0) {
return; // 任何一个分母非法就整体丢弃
}
result /= denominator;
}
// 保留两位小数
result = Math.round(result * 100.0) / 100.0;
paramMap.put(key, result);
}
private void handleType3(String key, List<AskReportDict.Params> params, Map<String, Object> paramMap, Map<String, Double> result) {
private void handleType3(String key, List<AskReportDict.Params> params, Map<String, Double> paramMap) {
if (params.size() < 2) {
return;
}
Double numerator = result.get(params.get(0).getParam());
Double denominator = result.get(params.get(1).getParam());
if (numerator == null || denominator == null || denominator == 0) {
// 第一个值做初始分子
Double result =getParamValue(params.get(0),paramMap);
if (result == null) {
return;
}
Double value = (numerator / denominator) * 100; // 计算百分比
// 从第二个开始全部当分母,依次除
for (int i = 1; i < params.size(); i++) {
Double denominator = getParamValue(params.get(i),paramMap);
if (denominator == null || denominator == 0) {
return; // 任何一个分母非法就整体丢弃
}
result /= denominator;
}
double value = result * 100; // 计算百分比
value = Math.round(value * 100.0) / 100.0; // 保留两位小数
String percentageResult = String.format("%.2f%%", value); // 格式化为百分比字符串
Double percentageResult = Double.valueOf(String.format("%.2f%%", value)); // 格式化为百分比字符串
paramMap.put(key, percentageResult);
}
private void handleTypeSum(String key, List<AskReportDict.Params> params, Map<String, Object> paramMap, Map<String, Double> result) {
private void handleTypeSum(String key, List<AskReportDict.Params> params, Map<String, Double> paramMap) {
AskReportDict.Params param = params.get(0);
if (param == null) {
return;
......@@ -319,7 +337,7 @@ public class ExcelTools {
return;
}
AtomicReference<Double> realValue = new AtomicReference<>(0.0);
result.forEach((mapKey, value) -> {
paramMap.forEach((mapKey, value) -> {
if (mapKey.contains(keyC)) {
realValue.set(realValue.get() + value);
}
......@@ -329,10 +347,10 @@ public class ExcelTools {
}
}
private Double getParamValue(AskReportDict.Params param, LocalDateTime startTime, LocalDateTime endTime) {
private Double getParamValue(AskReportDict.Params param, Map<String, Double> paramMap) {
try {
if (param.getType() == 1) {
return getLatestValue(param.getParam(), startTime, endTime);
return paramMap.get(param.getParam());
} else {
return Double.valueOf(param.getParam());
}
......@@ -341,15 +359,4 @@ public class ExcelTools {
}
}
private Double getLatestValue(String path, LocalDateTime startTime, LocalDateTime endTime) {
AskHistoryCollectData data = askHistoryCollectDataMapper.selectOne(
Wrappers.lambdaQuery(AskHistoryCollectData.class)
.eq(AskHistoryCollectData::getPath, path)
.between(AskHistoryCollectData::getDatetime, startTime, endTime)
.orderByDesc(AskHistoryCollectData::getDatetime)
.last("limit 1")
);
return data != null ? data.getValue() : null;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment