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

修改 日报

parent e6c91d4a
...@@ -111,10 +111,10 @@ public class ExcelTools { ...@@ -111,10 +111,10 @@ public class ExcelTools {
if (fileTemplate.isFileExists(bucketName, fileName)) { if (fileTemplate.isFileExists(bucketName, fileName)) {
return jsonObject.toString(); return jsonObject.toString();
} }
Map<String, Object> paramMap = generateReport(startTime, endTime); Map<String, Double> paramMap = generateReport(startTime, endTime);
log.info("入参{}", paramMap); log.info("入参{}", paramMap);
Map<String, Object> params = new HashMap<>(paramMap);
boolean result = convertUtils.fillWordLoop(fileName, "科环集团电力运营日报模板.docx", paramMap, bucketName); boolean result = convertUtils.fillWordLoop(fileName, "科环集团电力运营日报模板.docx", params, bucketName);
if (!result) { if (!result) {
jsonObject.set("success", false); jsonObject.set("success", false);
...@@ -176,14 +176,15 @@ public class ExcelTools { ...@@ -176,14 +176,15 @@ public class ExcelTools {
} }
public Map<String, Object> generateReport(LocalDateTime startTime, LocalDateTime endTime) { public Map<String, Double> generateReport(LocalDateTime startTime, LocalDateTime endTime) {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Double> paramMap = new HashMap<>();
paramMap.put("year", startTime.getYear()); paramMap.put("year", (double) startTime.getYear());
paramMap.put("month", startTime.getMonthValue()); paramMap.put("month", (double) startTime.getMonthValue());
paramMap.put("day", startTime.getDayOfMonth()); paramMap.put("day", (double) startTime.getDayOfMonth());
List<AskReportDict> askReportDicts = askReportDictMapper.selectList( List<AskReportDict> askReportDicts = askReportDictMapper.selectList(
Wrappers.lambdaQuery(AskReportDict.class).eq(AskReportDict::getType, 1) Wrappers.lambdaQuery(AskReportDict.class).eq(AskReportDict::getType, 1)
.orderByAsc(AskReportDict::getCalculationMethod)
); );
List<String> paramSer = new ArrayList<>(); List<String> paramSer = new ArrayList<>();
for (AskReportDict askReportDict : askReportDicts) { for (AskReportDict askReportDict : askReportDicts) {
...@@ -207,28 +208,26 @@ public class ExcelTools { ...@@ -207,28 +208,26 @@ public class ExcelTools {
AskHistoryCollectData::getValue, // 获取 value 作为值 AskHistoryCollectData::getValue, // 获取 value 作为值
(existingValue, newValue) -> existingValue // 如果有重复的键,这里决定如何处理。这里选择保留现有的值。 (existingValue, newValue) -> existingValue // 如果有重复的键,这里决定如何处理。这里选择保留现有的值。
)); ));
paramMap.putAll(result);
for (AskReportDict askReportDict : askReportDicts) { for (AskReportDict askReportDict : askReportDicts) {
String key = askReportDict.getKey();
paramMap.put(key, "");
askReportDict.convertParamsToParamList(); askReportDict.convertParamsToParamList();
List<AskReportDict.Params> params = askReportDict.getParamList(); List<AskReportDict.Params> params = askReportDict.getParamList();
if (CollectionUtils.isEmpty(params)) { if (CollectionUtils.isEmpty(params)) {
continue; continue;
} }
switch (askReportDict.getType()) { switch (askReportDict.getCalculationMethod()) {
case 1: case 1:
handleType1(askReportDict.getKey(), params, paramMap, result); handleType1(askReportDict.getKey(), params, paramMap);
break; break;
case 2: case 2:
handleType2(askReportDict.getKey(), params, paramMap, result); handleType2(askReportDict.getKey(), params, paramMap);
break; break;
case 3: case 3:
handleType3(askReportDict.getKey(), params, paramMap, result); handleType3(askReportDict.getKey(), params, paramMap);
break; break;
case 4: case 4:
handleTypeSum(askReportDict.getKey(), params, paramMap, result); handleTypeSum(askReportDict.getKey(), params, paramMap);
break; break;
default: default:
// Handle other types if necessary // Handle other types if necessary
...@@ -261,54 +260,73 @@ public class ExcelTools { ...@@ -261,54 +260,73 @@ public class ExcelTools {
return paramMap; 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); AskReportDict.Params param = params.get(0);
if (param == null) { if (param == null) {
return; return;
} }
Double value = result.get(param.getParam()); Double value = getParamValue(param,paramMap);
if (value != null) { if (value != null) {
paramMap.put(key, value); 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) { if (params.size() < 2) {
return; return;
} }
Double numerator = result.get(params.get(0).getParam()); // 第一个值做初始分子
Double denominator = result.get(params.get(1).getParam()); Double result = getParamValue(params.get(0),paramMap);
if (result == null) {
if (numerator == null || denominator == null || denominator == 0) {
return; 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) { if (params.size() < 2) {
return; return;
} }
Double numerator = result.get(params.get(0).getParam()); // 第一个值做初始分子
Double denominator = result.get(params.get(1).getParam()); Double result =getParamValue(params.get(0),paramMap);
if (result == null) {
if (numerator == null || denominator == null || denominator == 0) {
return; 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; // 保留两位小数 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); 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); AskReportDict.Params param = params.get(0);
if (param == null) { if (param == null) {
return; return;
...@@ -319,7 +337,7 @@ public class ExcelTools { ...@@ -319,7 +337,7 @@ public class ExcelTools {
return; return;
} }
AtomicReference<Double> realValue = new AtomicReference<>(0.0); AtomicReference<Double> realValue = new AtomicReference<>(0.0);
result.forEach((mapKey, value) -> { paramMap.forEach((mapKey, value) -> {
if (mapKey.contains(keyC)) { if (mapKey.contains(keyC)) {
realValue.set(realValue.get() + value); realValue.set(realValue.get() + value);
} }
...@@ -329,10 +347,10 @@ public class ExcelTools { ...@@ -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 { try {
if (param.getType() == 1) { if (param.getType() == 1) {
return getLatestValue(param.getParam(), startTime, endTime); return paramMap.get(param.getParam());
} else { } else {
return Double.valueOf(param.getParam()); return Double.valueOf(param.getParam());
} }
...@@ -341,15 +359,4 @@ public class ExcelTools { ...@@ -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