Browse Source

绍兴,合并报告新需求

master
wangguangyuan 3 months ago
parent
commit
1b0017524a
7 changed files with 289 additions and 26 deletions
  1. +2
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/IPatrolResultService.java
  2. +153
    -1
      inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java
  3. +120
    -25
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/PatrolTaskResultMainController.java
  4. +2
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/mapper/PatrolTaskResultMainMapper.java
  5. +2
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/IPatrolTaskResultMainService.java
  6. +4
    -0
      inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/impl/PatrolTaskResultMainServiceImpl.java
  7. +6
    -0
      inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskResultMainMapper.xml

+ 2
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/IPatrolResultService.java View File

@ -85,6 +85,8 @@ public interface IPatrolResultService {
List<Long> saveReportLingzhou(PatrolTaskResultMain resultMain, List<Long> lineIds, Long currentLineId, List<PatrolResult> resultList, int aiQxNum, int csQxNum);
List<Long> saveReportShaoxing(PatrolTaskResultMain resultMain, List<Long> lineIds, Long currentLineId, List<PatrolResult> resultList, int aiQxNum, int csQxNum);
List saveReportV2(PatrolTaskResultMain patrolTaskResultMain, List<PatrolResult> patrolResultList);
List<PatrolResultRef> selectResultRefByLineId(String lineId);


+ 153
- 1
inspect-main/inspect-main-task/src/main/java/com/inspect/partrolresult/service/impl/PatrolResultServiceImpl.java View File

@ -364,6 +364,26 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
// return saveReportData(resultList, resultMain, lineIds);
}
@Transactional
public List<Long> saveReportShaoxing(PatrolTaskResultMain resultMain, List<Long> lineIds, Long currentLineId, List<PatrolResult> resultList, int aiQxNum, int csQxNum) {
long startTime = System.currentTimeMillis();
List<Long> reportIds = new ArrayList<>();
// String mainId = String.valueOf(resultMain.getLineId());
for (Long lineId : lineIds) {
resultMain.setLineId(lineId);
resultMain.setCheckTime(new Date());
resultMain.setFileStatus("1");
this.patrolTaskResultMainMapper.updatePatrolTaskResultMain(resultMain);
this.patrolResultMapper.updatePatrolResultByMainId(String.valueOf(lineId));
reportIds.addAll(saveReportDataShaoxing(resultList, resultMain, lineIds, aiQxNum, csQxNum));
}
PrintUtil.useTime("获取所有报告id", startTime);
return reportIds;
// resultMain.setLineId(currentLineId);
// return saveReportData(resultList, resultMain, lineIds);
}
@Transactional
public List saveReportV2(PatrolTaskResultMain resultMain, List<PatrolResult> resultList) {
long startTime = System.currentTimeMillis();
@ -459,6 +479,110 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
}
}
public List<Long> saveReportDataShaoxing(List<PatrolResult> resultList, PatrolTaskResultMain resultMain, List<Long> lineIds, int aiQxNum, int csQxNum) {
long startTime = System.currentTimeMillis();
String mainId = String.valueOf(resultMain.getLineId());
// String analyseNum = statisticsAnalyseNum(lineIds, resultList.size());
// String filterNum = statisticsAnalyseNumLingZhou(lineIds, "1");
String AiNum = statisticsAnalyseNumShaoxing(lineIds);
// String[] nums = new String[]{AiNum, filterNum};
String[] nums = new String[]{AiNum};
startTime = PrintUtil.useTime("STATISTICS ANALYZE DATA", startTime);
if (resultList.isEmpty()) {
throw new ServiceException("LACK INSPECT RESULT: " + mainId);
} else {
PatrolResult patrolResult = resultList.stream().filter(item -> mainId.equals(item.getMainId())).findFirst().orElse(null);
assert patrolResult != null;
String taskCode = patrolResult.getTaskCode();
String taskPatrolId = patrolResult.getTaskPatrolledId();
List<String> taskNames = resultList.stream().map(PatrolResult::getTaskName).distinct().collect(Collectors.toList());
String taskName = StringUtils.join(taskNames, ",");
if (StringUtils.isEmpty(taskPatrolId)) {
throw new ServiceException("LACK PLAN ID: " + mainId);
} else {
List<PatrolTaskStatus> taskStatuses = this.patrolTaskStatusMapper.selectPatrolTaskStatusList(PatrolTaskStatus.builder().taskPatrolledId(taskPatrolId).build());
startTime = PrintUtil.useTime("INQUIRY STATUS", startTime);
if (taskStatuses.isEmpty()) {
throw new ServiceException("LACKING STATUS: " + mainId);
} else {
PatrolTaskStatus taskStatus = taskStatuses.get(0);
List<PatrolTask> list = patrolTaskMapper.selectPatrolTaskList(PatrolTask.builder().taskCode(taskCode).build());
startTime = PrintUtil.useTime("INQUIRY TASK PLAN", startTime);
if (list.isEmpty()) {
throw new ServiceException("TASK PLAN LOST: " + taskCode);
} else {
List<Long> reportIds = new ArrayList<>();
PatrolTask task = list.get(0);
// List<InspectionReport> reports = inspectionReportMapper.selectInspectionReportList(new InspectionReport(mainId));
// startTime = PrintUtil.useTime("INQUIRY TASK REPORT", startTime);
// InspectionReport report;
// if (!reports.isEmpty()) {
// report = reports.get(0);
// resetReport(report, analyseNum, mainId, task, taskStatus);
// inspectionReportMapper.updateInspectionReport(report);
// PrintUtil.useTime("MODIFY TASK REPORT", startTime);
// } else {
Map<String, String> stationMap = patrolResultMapper.selectBasedataStation();
String stationName = stationMap.get("station_name");
String stationType = stationMap.get("station_type");
String voltLevel = stationMap.get("volt_level");
AjaxResult ajaxResult = feignBasedataAreaService.evnList();
List<JSONObject> jsonObjects = JSONObject.parseArray(JSON.toJSONString(ajaxResult.get("data")), JSONObject.class);
log.info("EVN LIST: " + jsonObjects);
List<String> envoList = new ArrayList<>();
for (JSONObject jsonObject : jsonObjects) {
String typeName = jsonObject.getString("typeName");
String valueUnit = jsonObject.getString("valueUnit");
if (StringUtils.isEmpty(valueUnit) || StringUtils.isEmpty(typeName)) {
continue;
}
envoList.add(typeName + ":" + valueUnit);
}
for (int i = 0; i < nums.length; i++) {
if ("0".equals(exportReportFlag) && aiQxNum == 0 && csQxNum == 0) {
continue;
}
// Map<String,PatrolResultRef> keyPatrolResultRef = new HashMap<>();
List<PatrolResultRef> patrolResultRefs = patrolResultMapper.selectResultRefByLineIds(lineIds, null);
// for (PatrolResultRef AIRef : patrolResultRefs) {
// keyPatrolResultRef.put(AIRef.getDeviceId() + "_" + AIRef.getAlgType(), AIRef);
// }
// for (PatrolResultRef filterRef : patrolResultRefsFilter) {
// keyPatrolResultRef.putIfAbsent(filterRef.getDeviceId() + "_" + filterRef.getAlgType(), filterRef);
// }
// patrolResultRefs = new ArrayList<>(keyPatrolResultRef.values());
if (patrolResultRefs.isEmpty()) {
continue;
}
InspectionReport report = new InspectionReport();
resetReport(report, nums[i], mainId, task, taskStatus);
report.setTaskId(String.valueOf(task.getTaskId()));
report.setEnvInfo(StringUtils.join(envoList,","));
report.setTaskPatrolledId(taskPatrolId);
report.setInspectionTaskName(taskName);
report.setDescription(resultMain.getTaskResult());
report.setCheckPerson(resultMain.getCheckPerson());
report.setCheckTime(resultMain.getCheckTime());
report.setStationName(stationName);
report.setVoltLevel(StringUtils.isEmpty(voltLevel) ? voltage : voltLevel);
report.setFilter(String.valueOf(i));
report.setStationType(stationType);
inspectionReportMapper.insertInspectionReport(report);
PrintUtil.useTime("NEW TASK REPORT", startTime);
batchInsertReportData(String.valueOf(report.getLineId()), lineIds, String.valueOf(i), patrolResultRefs);
PrintUtil.useTime("BATCH INSERT DETAIL", startTime);
log.info("[ARCHIVE] reportId: {}", report.getLineId());
Long lineId = report.getLineId();
reportIds.add(lineId);
}
// }
return reportIds;
}
}
}
}
}
public List<Long> saveReportDataLingzhou(List<PatrolResult> resultList, PatrolTaskResultMain resultMain, List<Long> lineIds, int aiQxNum, int csQxNum) {
long startTime = System.currentTimeMillis();
String mainId = String.valueOf(resultMain.getLineId());
@ -1025,8 +1149,36 @@ public class PatrolResultServiceImpl implements IPatrolResultService {
++failNum;
}
}
if ("0".equals(exportReportFlag)) {
return String.format(messageUtils.get("缺陷点位:%d个。"), confirmNum);
} else {
return String.format(messageUtils.get("本次任务巡视总点位:%d个,已检点位:%d个,未检点位:0个,正常点位:%d个,异常点位:%d个,缺陷点位:%d个。"), totalNum, totalNum, okNum, failNum, confirmNum);
}
}
return String.format(messageUtils.get("本次任务巡视总点位:%d个,已检点位:%d个,未检点位:0个,正常点位:%d个,异常点位:%d个,缺陷点位:%d个。"), totalNum, totalNum, okNum, failNum, confirmNum);
public String statisticsAnalyseNumShaoxing(List<Long> lineIds) {
int okNum = 0;
int failNum = 0;
int confirmNum = 0;
List<ResultAnalysis> analyses = resultAnalysisMapper.selectResultAnalysisListByMainIdsNew(lineIds, null);
int totalNum = analyses.size();
log.info("lineIds:{},statisticsAnalyseNum analyses:{}", lineIds, analyses);
for (ResultAnalysis analyse : analyses) {
String resultType = analyse.getResultType();
if (resultType.equals("0")) {
++confirmNum;
} else if (resultType.equals("1")) {
++okNum;
} else if (resultType.equals("2")) {
++failNum;
}
}
if ("0".equals(exportReportFlag)) {
return String.format(messageUtils.get("缺陷点位:%d个。"), confirmNum);
} else {
return String.format(messageUtils.get("本次任务巡视总点位:%d个,已检点位:%d个,未检点位:0个,正常点位:%d个,异常点位:%d个,缺陷点位:%d个。"), totalNum, totalNum, okNum, failNum, confirmNum);
}
}
public String statisticsAnalyseNumV2(String mainId, String filter) {


+ 120
- 25
inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/controller/PatrolTaskResultMainController.java View File

@ -2,7 +2,6 @@ package com.inspect.resultmain.controller;
import cn.hutool.core.date.DateUtil;
import com.inspect.analysis.domain.ResultAnalysis;
import com.inspect.analysis.domain.resultList;
import com.inspect.analysis.service.IResultAnalysisService;
import com.inspect.base.core.sftp.SftpClient;
import com.inspect.base.core.sftp.SftpUploadEntity;
@ -24,38 +23,16 @@ import com.inspect.message.MessageUtils;
import com.inspect.partrolresult.domain.PatrolResult;
import com.inspect.partrolresult.service.IPatrolResultService;
import com.inspect.partrolresult.util.PrintUtil;
import com.inspect.partrolresultAux.domain.PatrolResultAux;
import com.inspect.partrolresultAux.service.IPatrolResultAuxService;
import com.inspect.resultmain.domain.PatrolTaskResultMain;
import com.inspect.resultmain.service.IPatrolTaskResultMainService;
import com.inspect.task.service.IPatrolTaskService;
import com.inspect.taskinfo.service.IPatrolTaskInfoService;
import com.inspect.taskstatus.domain.PatrolTaskStatus;
import com.inspect.taskstatus.service.IPatrolTaskStatusService;
import java.io.*;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.io.function.IOConsumer;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.Units;
@ -68,8 +45,23 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@RestController
@RefreshScope
@RequestMapping({"/resultmain"})
@ -269,6 +261,88 @@ public class PatrolTaskResultMainController extends BaseController {
}
@PostMapping({"/updateInfo_shaoxing"})
public AjaxResult updateInfo_shaoxing(
@RequestBody PatrolTaskResultMain resultMain) {
long startTime = System.currentTimeMillis();
logger.info("[ARCHIVE] Starting, resultMain: {}", resultMain);
logger.info("-----------resultMain getTaskPatrolledId: {}", resultMain.getTaskPatrolledId());
PatrolTaskResultMain patrolTaskResultMain = patrolTaskResultMainService.selectPatrolTaskResultMainByTaskPatrolledId(resultMain.getTaskPatrolledId());
logger.info("-----------patrolTaskResultMain: {}", patrolTaskResultMain);
if (patrolTaskResultMain == null) {
logger.error("[归档]失败, 数据采集中...");
return AjaxResult.error("数据采集中请稍后....");
}
Long lineId = patrolTaskResultMain.getLineId();
List<Long> lineIds = new ArrayList<>();
lineIds.add(lineId);
List<Long> longs = patrolTaskResultMainService.selectLineIdsByList(lineIds);
if (longs != null && longs.size() > 0) {
lineIds.addAll(longs);
}
lineIds = lineIds.stream().distinct().collect(Collectors.toList());
PrintUtil.useTime("收集需归档的lineIds", startTime);
logger.info("---归档--lineIds size: {},lineIds:{}", lineIds.size(), lineIds);
List<PatrolResult> resultList = patrolResultService.selectPatrolResultListByMainIds(lineIds);
if (resultList.isEmpty()) {
logger.error("[归档]失败, 数据采集中...");
return AjaxResult.error("数据采集中请稍后....");
}
startTime = System.currentTimeMillis();
ResultAnalysis resultAnalysis = new ResultAnalysis();
int csQxNum = 0, aiQxNum = 0;
List<String> taskPatrolledIds = resultList.stream().map(PatrolResult::getTaskPatrolledId).distinct().collect(Collectors.toList());
for (String taskPatrolledId : taskPatrolledIds) {
resultAnalysis.setTaskPatrolledId(taskPatrolledId);
ResultAnalysis ras = patrolResultService.selectTaskAbnormalData(resultAnalysis);
csQxNum += ras.getCsQxNum();
aiQxNum += ras.getAiQxNum();
}
if("0".equals(exportReportFlag) && 0 == aiQxNum && 0 == csQxNum) {
logger.error("[归档]没有缺陷数据, 无需归档!");
return AjaxResult.error("没有缺陷数据, 无需归档!");
}
PrintUtil.useTime("查询统计缺陷数据", startTime);
startTime = System.currentTimeMillis();
// 使用CompletableFuture异步执行saveReport
int finalAiQxNum = aiQxNum;
int finalCsQxNum = csQxNum;
List<Long> finalLineIds = lineIds;
CompletableFuture<List<Long>> saveReportFuture = CompletableFuture.supplyAsync(() -> {
logger.info("[ARCHIVE] Start saving reports");
return patrolResultService.saveReportShaoxing(resultMain, finalLineIds, lineId, resultList, finalAiQxNum, finalCsQxNum);
}, executor).exceptionally(ex -> {
logger.error("Report saving failed", ex);
return Collections.emptyList();
});
PrintUtil.useTime("保存报告数据", startTime);
startTime = System.currentTimeMillis();
// 当saveReport完成后再异步处理所有导出任务
saveReportFuture.thenAcceptAsync(reportIds -> {
logger.info("-----------[ARCHIVE] Saved export reportIds: {}", reportIds);
if (reportIds.isEmpty()) {
logger.warn("No reports to export");
return;
}
// 为每个reportId创建异步导出任务
CompletableFuture<?>[] exportFutures = reportIds.stream()
.map(reportId -> CompletableFuture.runAsync(() -> {
logger.info("[EXPORT] Start export for reportId: {}", reportId);
exportExcelWordAndZipLingzhou(String.valueOf(reportId));
}, executor))
.toArray(CompletableFuture[]::new);
}, executor).exceptionally(ex -> {
logger.error("Error occurred during saveReport: ", ex);
return null;
});
PrintUtil.useTime("导出报告数据", startTime);
return toAjax(1);
}
@PostMapping({"/updateInfo"})
public AjaxResult updateInfo_lingzhou(
@ -382,6 +456,27 @@ public class PatrolTaskResultMainController extends BaseController {
}
}
@Log(
title = "导出报告",
businessType = BizType.EXPORT
)
@PostMapping({"/reportExport"})
public ResponseEntity taskInfoExport(HttpServletResponse response, PatrolTaskResultMain patrolTaskResultMain) throws Exception {
logger.info("开始导出报告,patrolTaskResultMain:{}", patrolTaskResultMain.toString());
// response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
// response.setHeader("Content-Disposition", "attachment; filename=\"task_export_" + System.currentTimeMillis() + ".xlsx\"");
// InspectionReport inspectionReport = new InspectionReport();
//
// try (SXSSFWorkbook sxssfWorkbook = getSXSSFWorkbookLingzhou(inspectionReport, streamHashMap);
// ServletOutputStream outputStream = response.getOutputStream()) {
// sxssfWorkbook.write(outputStream);
// }
return ResponseEntity.ok("报告导出成功!");
}
public String ToStationIn(String areaId) {
String areaName = "";
Map<String, Object> map = this.patrolResultService.selectAreaInfo(areaId);


+ 2
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/mapper/PatrolTaskResultMainMapper.java View File

@ -12,6 +12,8 @@ public interface PatrolTaskResultMainMapper {
List<PatrolTaskResultMain> selectPatrolTaskResultMainList(PatrolTaskResultMain resultMain);
PatrolTaskResultMain selectPatrolTaskResultMainByTaskPatrolledId(@Param("taskPatrolledId") String tasKPatrolledId);
List<PatrolTaskResultMain> selectPatrolTaskResultMain(PatrolTaskResultMain resultMain);
String selectUnifiedTaskPatrolledId(PatrolTaskResultMain resultMain);


+ 2
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/IPatrolTaskResultMainService.java View File

@ -9,6 +9,8 @@ public interface IPatrolTaskResultMainService {
List<PatrolTaskResultMain> selectPatrolTaskResultMainList(PatrolTaskResultMain patrolTaskResultMain);
PatrolTaskResultMain selectPatrolTaskResultMainByTaskPatrolledId(String taskPatrolledId);
List<PatrolTaskResultMain> selectPatrolTaskResultMain(PatrolTaskResultMain patrolTaskResultMain);
String selectUnifiedTaskPatrolledId(PatrolTaskResultMain patrolTaskResultMain);


+ 4
- 0
inspect-main/inspect-main-task/src/main/java/com/inspect/resultmain/service/impl/PatrolTaskResultMainServiceImpl.java View File

@ -26,6 +26,10 @@ public class PatrolTaskResultMainServiceImpl implements IPatrolTaskResultMainSer
return this.patrolTaskResultMainMapper.selectPatrolTaskResultMainList(patrolTaskResultMain);
}
public PatrolTaskResultMain selectPatrolTaskResultMainByTaskPatrolledId(String taskPatrolledId) {
return this.patrolTaskResultMainMapper.selectPatrolTaskResultMainByTaskPatrolledId(taskPatrolledId);
}
public List<PatrolTaskResultMain> selectPatrolTaskResultMain(PatrolTaskResultMain patrolTaskResultMain) {
return this.patrolTaskResultMainMapper.selectPatrolTaskResultMain(patrolTaskResultMain);
}


+ 6
- 0
inspect-main/inspect-main-task/src/main/resources/mapper/task/PatrolTaskResultMainMapper.xml View File

@ -159,6 +159,12 @@
</foreach>)
</select>
<select id="selectPatrolTaskResultMainByTaskPatrolledId" resultMap="PatrolTaskResultMainResult">
<include refid="selectPatrolTaskResultMainVo"/>
where task_patrolled_id = #{taskPatrolledId}
ORDER BY line_id desc limit 1
</select>
<insert id="insertPatrolTaskResultMain" parameterType="PatrolTaskResultMain" useGeneratedKeys="true"
keyProperty="lineId">


Loading…
Cancel
Save