Browse Source

Merge remote-tracking branch 'origin/prod-20240506' into prod-20240506

zhongwei
ty 6 months ago
parent
commit
886222d454
  1. 3
      hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/constant/MainConstants.java
  2. 13
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java
  3. 2
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/RealTargetService.java
  4. 98
      hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java
  5. 89
      hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java

3
hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/constant/MainConstants.java

@ -50,7 +50,10 @@ public interface MainConstants {
String LOAD_HYDROPOWER_UNIT_TARGET = "loadHydropowerUnitTarget"; String LOAD_HYDROPOWER_UNIT_TARGET = "loadHydropowerUnitTarget";
// 近年发电量 // 近年发电量
String LOAD_POWER_DATA_NEW = "loadPowerDataNew";
String ELECTRICITY_GENERATION_RECENT_YEAR = "electricityGenerationRecentYear"; String ELECTRICITY_GENERATION_RECENT_YEAR = "electricityGenerationRecentYear";
// 風電儲能近年发电量 // 風電儲能近年发电量
String WIND_POWER_GENERATION_RECENT_YEAR = "windPowerGenerationRecentYear"; String WIND_POWER_GENERATION_RECENT_YEAR = "windPowerGenerationRecentYear";

13
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java

@ -157,6 +157,19 @@ public class RealTargetScheduledTask {
return new ReturnT<>("SUCCESS"); return new ReturnT<>("SUCCESS");
} }
/**
* 获取站点近3年发电量数据
*/
@XxlJob(LOAD_POWER_DATA_NEW)
//@Scheduled(cron = "0/40 * * * * ? ")
public ReturnT<String> loadPowerDataNew(String param) {
if (Func.isBlank(param)) {
param = DateUtil.format(new Date(), "yyyy-MM");
}
service.loadPowerDataNew(param, Arrays.asList(HomePageConstant.HYDROPOWER,HomePageConstant.PHOTOVOLTAIC),2,3);
return new ReturnT<>("SUCCESS");
}
@XxlJob(WIND_POWER_GENERATION_RECENT_YEAR) @XxlJob(WIND_POWER_GENERATION_RECENT_YEAR)
//@Scheduled(cron = "0/40 * * * * ? ") //@Scheduled(cron = "0/40 * * * * ? ")

2
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/RealTargetService.java

@ -28,7 +28,7 @@ public interface RealTargetService {
void loadPowerData(String param, List<Integer> types, Integer serveType, int year); void loadPowerData(String param, List<Integer> types, Integer serveType, int year);
void loadPowerDataNew(List<Integer> types, Integer serveType, int year); void loadPowerDataNew(String param, List<Integer> types, Integer serveType, int year);
void loadPowerDataByWindEnergy(String param, List<Integer> types, Integer serveType, int year,String key); void loadPowerDataByWindEnergy(String param, List<Integer> types, Integer serveType, int year,String key);
} }

98
hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java

@ -114,6 +114,9 @@ public class RealTargetServiceImpl implements RealTargetService {
private final static String recent_year_power_data = "hzims:operation:key:power:data"; private final static String recent_year_power_data = "hzims:operation:key:power:data";
private final static String recent_year_power_data_test = "hzims:operation:key:power:data:test";
private final static String load_hydropower_unit_real_key = "hzims:operation:loadhydropowerunit:real:key"; private final static String load_hydropower_unit_real_key = "hzims:operation:loadhydropowerunit:real:key";
private final static String load_hydropower_unit_target_key = "hzims:operation:loadhydropowerunit:target:key"; private final static String load_hydropower_unit_target_key = "hzims:operation:loadhydropowerunit:target:key";
private final static String loadwaterpump_target_key = "hzims:operation:loadwaterpump:target:key"; private final static String loadwaterpump_target_key = "hzims:operation:loadwaterpump:target:key";
@ -1275,72 +1278,87 @@ public class RealTargetServiceImpl implements RealTargetService {
} }
@Override @Override
public void loadPowerDataNew(String param, List<Integer> types, Integer serveType, int year) {
public void loadPowerDataNew(List<Integer> types, Integer serveType, int year) {
// 站点查询 // 站点查询
List<StationEntity> stationList = stationService.list(new LambdaQueryWrapper<StationEntity>() {{ List<StationEntity> stations = stationService.list(new LambdaQueryWrapper<StationEntity>() {{
eq(StationEntity::getDataOrigin,"0");
if (ObjectUtil.isNotEmpty(serveType)) {
eq(StationEntity::getServeType, serveType);
}
if (CollectionUtil.isNotEmpty(types)) { if (CollectionUtil.isNotEmpty(types)) {
in(StationEntity::getType, types); in(StationEntity::getType, types);
} }
}}); }});
// 设备信息 // 设备信息
List<EminfoAndEmParamVo> devices = JSONObject.parseObject(redisTemplate.opsForValue().get(device_cache_cofig_final).toString(), List<EminfoAndEmParamVo> devices = JSONObject.parseObject(redisTemplate.opsForValue().get(device_cache_cofig_final).toString(), new TypeReference<List<EminfoAndEmParamVo>>() {
new TypeReference<List<EminfoAndEmParamVo>>() {}); });
// 结束时间 // 开始时间
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH) + 12); calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH) + 12);
calendar.add(Calendar.DATE, -calendar.get(Calendar.DATE) + 1); calendar.add(Calendar.DATE, -calendar.get(Calendar.DATE) + 1);
String end = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE) + " 00:00:00"; String end = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE) + " 00:00:00";
LocalDateTime endTime = LocalDateTime.parse(end); // 结束日期
// 开始时间
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - year); calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - year);
calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH)); calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH));
String start = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE) + " 00:00:00"; String start = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE) + " 00:00:00";
LocalDateTime startTime = LocalDateTime.parse(end); // 存储数据map :<站点id,<月份,发电量>>
// 存储数据map:<站点id, <月份, 发电量>> Map<Long, Map<String, Float>> powerMap = new CopyOnWriteMap<>();
Map<Long, Map<String, Float>> powerMap = new HashMap<>(); // 将站点切割
stationList.forEach(station -> { int limit = countStep(stations.size());
List<PowerMonthVo> datas = new ArrayList<>(); List<List<StationEntity>> limits = Stream.iterate(0, n -> n + 1).limit(limit).parallel().map(a -> stations.stream().skip((long) a * 3).limit(3).parallel().collect(Collectors.toList())).collect(Collectors.toList());
CountDownLatch countDownLatch = new CountDownLatch(limits.size());
for(List<StationEntity> item : limits){
pool.submit(()->{
item.forEach(station->{
// 站点设备集合 // 站点设备集合
List<EminfoAndEmParamVo> stationDevices = devices.stream().filter(device -> device.getCreateDept().equals(station.getRefDept())).collect(Collectors.toList()); List<EminfoAndEmParamVo> stationDevices = devices.stream().filter(device -> device.getCreateDept().equals(station.getRefDept())).collect(Collectors.toList());
log.info("load_power_data station :" + station.getCode() + "==== device :" + stationDevices); Map<String, Float> generateMap = this.lastReduceFirst(station,stationDevices,start,end);
if (CollectionUtil.isNotEmpty(devices)) { if(MapUtils.isEmpty(generateMap)){
stationDevices.forEach(device -> { return;
ReductionDataDTO reductionDataDTO = new ReductionDataDTO(); }
reductionDataDTO.setDeviceCode(device.getEmCode()); powerMap.put(station.getId(),generateMap);
reductionDataDTO.setSaveTimeType(5); });
reductionDataDTO.setTimeInterval(1); countDownLatch.countDown();
reductionDataDTO.setBeginTime(startTime); log.error("pool_item_execute_complete: {}" ,item.stream().map(StationEntity::getName).collect(Collectors.toList()));
reductionDataDTO.setEndTime(endTime); });
reductionDataDTO.setNeedPage(false);
Result<ReductionDataVO> reductionDataVOResult = deviceDataClient.pageDeviceCodeAndSignages(reductionDataDTO); }
if (!reductionDataVOResult.isSuccess() || CollectionUtil.isEmpty(reductionDataVOResult.getData().getDataList())) { //所有模板数据获取完成后释放锁
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
redisTemplate.opsForValue().set(recent_year_power_data_test, JSONObject.toJSONString(powerMap));
}
private Map<String, Float> lastReduceFirst(StationEntity station, List<EminfoAndEmParamVo> devices, String start, String end) {
List<PowerMonthVo> datas = new ArrayList<>();
// 设备采集发电量
if(CollectionUtil.isNotEmpty(devices)){
devices.forEach(device->{
List<Map<String, String>> records = dataService.lastFirstBySignage(start,end,7,5,device.getEmCode(),HomePageConstant.HYDROPOWER_GENERATE_POWER);
if(CollectionUtil.isEmpty(records)){
return; return;
} }
List<Map<String, String>> dataList = reductionDataVOResult.getData().getDataList(); datas.addAll(records.stream().map(record -> {
datas.addAll(dataList.stream().map(data -> {
PowerMonthVo generate = new PowerMonthVo(); PowerMonthVo generate = new PowerMonthVo();
Date time = DateUtil.parse(data.get("ts"), "yyyy-MM-dd HH:mm:ss.s"); Date time = DateUtil.parse(record.get("ts"), "yyyy-MM-dd HH:mm:ss.s");
generate.setStrMonth(DateUtil.format(time,DateUtil.PATTERN_DATE)); generate.setStrMonth(DateUtil.format(time,DateUtil.PATTERN_DATE));
// generate.setPower(Float.parseFloat(Optional.ofNullable(data.get(HomePageConstant.HYDROPOWER_GENERATE_POWER)) String val = record.get(HomePageConstant.HYDROPOWER_GENERATE_POWER);
// .orElse("0")) * device.getRideCount()); if(StringUtil.isEmpty(val)){
generate.setPower(0f);
}else{
generate.setPower(Float.parseFloat(String.valueOf(Double.parseDouble(val) * device.getRideCount())));
}
return generate; return generate;
}).collect(Collectors.toList())); }).collect(Collectors.toList()));
}); });
} }
// 补充填报数据 // 补充填报数据
datas.addAll(this.generateFill(station,start,end)); datas.addAll(this.generateFill(station,start,end));
if (CollectionUtil.isEmpty(datas)) { if(CollectionUtil.isEmpty(datas)){
return; return null;
} }
Map<String, Float> map = datas.stream().collect(Collectors.toMap(PowerMonthVo::getStrMonth, PowerMonthVo::getPower, Float::sum)); return datas.stream().collect(Collectors.toMap(PowerMonthVo::getStrMonth, PowerMonthVo::getPower, Float::sum));
powerMap.put(station.getId(), map);
});
redisTemplate.opsForValue().set(recent_year_power_data, powerMap);
} }
/** /**

89
hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/utils/BaseUtil.java

@ -6,9 +6,8 @@ import com.hnac.hzims.safeproduct.constants.SafeProductConstant;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.xwpf.usermodel.*;
import com.alibaba.fastjson.JSONObject; import org.json.JSONArray;
import com.alibaba.fastjson.JSONArray; import org.json.JSONObject;
//import org.json.JSONObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTText;
@ -116,77 +115,20 @@ public class BaseUtil {
* @param params 数据参数 * @param params 数据参数
* @return 文件 * @return 文件
*/ */
// public static XWPFDocument fillDocument(String templatePath, Map<String, Object> params, String findName) { public static XWPFDocument fillDocument(String templatePath, Map<String, Object> params, String findName) {
// XWPFDocument xwpfDocument = null;
// try {
// xwpfDocument = WordExportUtil.exportWord07(templatePath, params);
// if (StringUtils.isNotEmpty(findName)) {
// String findText = params.get(findName).toString();
// if (StringUtils.isNotEmpty(findText)) {
// JSONArray jsonArray = new JSONArray(findText);
// for (XWPFTable table : xwpfDocument.getTables()) {
// for (int row = 0; row < table.getNumberOfRows(); row++) {
// for (int col = 0; col < table.getRow(row).getTableCells().size(); col++) {
// XWPFTableCell cell = table.getRow(row).getCell(col);
// for (XWPFParagraph p : cell.getParagraphs()) {
// for (int index = 0; index < p.getRuns().size(); index++) {
// XWPFRun run = p.getRuns().get(index);
// String text = run.getText(0);
// if (findText.equals(text)) {
// run.setText("", 0); // 清除原有文本
// XWPFParagraph paragraph = run.getParagraph();
// for (int i = 0; i < jsonArray.length(); i++) {
// JSONObject jsonObject = jsonArray.getJSONObject(i);
// String name = jsonObject.getString("name");
// String url = jsonObject.getString("url");
// // url编码格式化
// String encodeName = URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20");
// String prefixString = url.substring(0, url.lastIndexOf("/") + 1);
// String encodeUrl = prefixString + encodeName;
// String id = paragraph.getDocument().getPackagePart().addExternalRelationship(encodeUrl,
// XWPFRelation.HYPERLINK.getRelation()).getId();
// CTHyperlink cLink = paragraph.getCTP().addNewHyperlink();
// cLink.setId(id);
// CTText ctText = CTText.Factory.newInstance();
// ctText.setStringValue(name);
// CTR ctr = CTR.Factory.newInstance();
// ctr.setTArray(new CTText[]{ctText});
// cLink.setRArray(new CTR[]{ctr});
// if (i < jsonArray.length() - 1) {
// paragraph.createRun().addBreak();
// }
// }
// }
// }
// }
// }
// }
// }
// }
// }
// if (templatePath.equals("template/卫生自查表.docx")) {
// formatHygieneRecordTable(xwpfDocument);
// }
// } catch (Exception e) {
// log.error("数据写入异常: {}",e.getCause().toString()+ e.getStackTrace());
// e.printStackTrace();
// }
// return xwpfDocument;
// }
public static XWPFDocument fillDocument(String templatePath, Map<String, Object> params, String findName) throws IOException {
XWPFDocument xwpfDocument = null; XWPFDocument xwpfDocument = null;
try { try {
xwpfDocument = WordExportUtil.exportWord07(templatePath, params); xwpfDocument = WordExportUtil.exportWord07(templatePath, params);
if (findName != null && !findName.isEmpty()) { if (findName != null && !findName.isEmpty()) {
String findText = params.get(findName).toString(); String findText = params.get(findName).toString();
if (findText != null && !findText.isEmpty()) { if (findText != null && !findText.isEmpty()) {
JSONArray jsonArray = JSONArray.parseArray(findText); JSONArray jsonArray = new JSONArray(findText);
for (XWPFTable table : xwpfDocument.getTables()) { for (XWPFTable table : xwpfDocument.getTables()) {
for (XWPFTableRow row : table.getRows()) { for (XWPFTableRow row : table.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) { for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph p : cell.getParagraphs()) { for (XWPFParagraph p : cell.getParagraphs()) {
for (XWPFRun run : p.getRuns()) { for (int index = 0; index < p.getRuns().size(); index++) {
XWPFRun run = p.getRuns().get(index);
String text = run.getText(0); String text = run.getText(0);
if (findText.equals(text)) { if (findText.equals(text)) {
run.setText("", 0); // 清除原有文本 run.setText("", 0); // 清除原有文本
@ -200,6 +142,9 @@ public class BaseUtil {
} }
} }
} }
if (templatePath.equals("template/卫生自查表.docx")) {
formatHygieneRecordTable(xwpfDocument);
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -208,7 +153,7 @@ public class BaseUtil {
private static void insertJsonArrayIntoParagraph(JSONArray jsonArray, XWPFParagraph paragraph) throws IOException { private static void insertJsonArrayIntoParagraph(JSONArray jsonArray, XWPFParagraph paragraph) throws IOException {
for (int i = 0; i < jsonArray.size(); i++) { for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i); JSONObject jsonObject = jsonArray.getJSONObject(i);
String name = jsonObject.getString("name"); String name = jsonObject.getString("name");
String url = jsonObject.getString("url"); String url = jsonObject.getString("url");
@ -216,8 +161,18 @@ public class BaseUtil {
String encodeName = URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20"); String encodeName = URLEncoder.encode(name, "UTF-8").replaceAll("\\+", "%20");
String prefixString = url.substring(0, url.lastIndexOf("/") + 1); String prefixString = url.substring(0, url.lastIndexOf("/") + 1);
String encodeUrl = prefixString + encodeName; String encodeUrl = prefixString + encodeName;
XWPFRun newRun = paragraph.createRun(); String id = paragraph.getDocument().getPackagePart().addExternalRelationship(encodeUrl,
newRun.setText(encodeUrl); XWPFRelation.HYPERLINK.getRelation()).getId();
CTHyperlink cLink = paragraph.getCTP().addNewHyperlink();
cLink.setId(id);
CTText ctText = CTText.Factory.newInstance();
ctText.setStringValue(name);
CTR ctr = CTR.Factory.newInstance();
ctr.setTArray(new CTText[]{ctText});
cLink.setRArray(new CTR[]{ctr});
if (i < jsonArray.length() - 1) {
paragraph.createRun().addBreak();
}
} }
} }
/** /**

Loading…
Cancel
Save