比对预检测

This commit is contained in:
caozehui
2025-08-11 08:36:19 +08:00
parent f520234e55
commit c16c1f8e1d
33 changed files with 1393 additions and 630 deletions

View File

@@ -11,6 +11,7 @@ import com.njcn.gather.result.pojo.vo.FormContentVO;
import com.njcn.gather.result.pojo.vo.ResultVO;
import com.njcn.gather.result.pojo.vo.TreeDataVO;
import com.njcn.gather.result.service.IResultService;
import com.njcn.gather.system.log.pojo.param.SysLogParam;
import com.njcn.web.controller.BaseController;
import com.njcn.web.utils.HttpResultUtil;
import io.swagger.annotations.Api;
@@ -119,4 +120,13 @@ public class ResultController extends BaseController {
resultService.deleteTempTable(code);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
@OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DOWNLOAD)
@PostMapping("/exportAlignData")
@ApiOperation("实时对齐数据导出为csv文件")
public void exportAlignData() {
String methodDescribe = getMethodDescribe("exportAlignData");
LogUtil.njcnDebug(log, "{}", methodDescribe);
resultService.exportAlignData();
}
}

View File

@@ -86,14 +86,20 @@ public interface IResultService {
* @param planCode 计划编号
* @param devId 被检设备id
* @param lineNo 回路号
* @param tableKeys 表格key
* @param tableKeys 表格key
*/
SingleTestResult getFinalContent(List<PqScriptDtlDataVO> checkDataVOList, String planCode, String devId, Integer lineNo, List<String> tableKeys);
/**
* 获取段落中指定的key对应的值
*
* @param itemCode 测试大项code
* @param pKeys 待填充的值
* @param pKeys 待填充的值
*/
Map<String, String> getParagraphKeysValue(String itemCode, List<String> pKeys);
/**
* 导出实时数据对齐过程中的数据
*/
void exportAlignData();
}

View File

@@ -16,8 +16,12 @@ import com.njcn.common.utils.PubUtils;
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.vo.AlignDataExcel;
import com.njcn.gather.detection.pojo.vo.DetectionData;
import com.njcn.gather.detection.service.impl.DetectionServiceImpl;
import com.njcn.gather.detection.util.DetectionUtil;
import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.detection.util.socket.FormalTestManager;
import com.njcn.gather.device.pojo.enums.CommonEnum;
import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.plan.pojo.po.AdPlan;
@@ -1491,6 +1495,73 @@ public class ResultServiceImpl implements IResultService {
return map;
}
@Override
public void exportAlignData() {
List<Map<String, Object>> sheetsList = new ArrayList<>();
// key为被检设备的ip, value为该ip下所有通道的设备数据
Map<String, List<DevData>> ipDevDataMap = FormalTestManager.devDataMap.values().stream().flatMap(List::stream).collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[0]));
ipDevDataMap.forEach((ip, devDataList) -> {
// 按照通道号分组。key为通道号value为该通道号下所有设备数据
Map<String, List<DevData>> channelDataMap = devDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[1]));
channelDataMap.forEach((channel, channelDevDataList) -> {
String standardDevMonitorId = FormalTestManager.pairsMap.get(ip + channel);
List<DevData> standarDevDataList = BeanUtil.copyToList(FormalTestManager.standardDevDataMap.get(standardDevMonitorId), DevData.class);
channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
HashMap sheet = new HashMap<>();
ExportParams exportParams = new ExportParams();
String devName = FormalTestManager.devNameMapComm.get(ip);
String[] split = standardDevMonitorId.split(CnSocketUtil.SPLIT_TAG);
String standardDevName = FormalTestManager.devNameMapComm.get(split[0]);
exportParams.setSheetName(devName + "通道" + channel);
sheet.put("title", exportParams);
List<AlignDataExcel> dataList = new ArrayList<>();
channelDevDataList.stream().forEach(obj -> {
AlignDataExcel alignDataExcel = new AlignDataExcel();
alignDataExcel.getDevDataConfig().setName(devName + "通道" + channel);
alignDataExcel.getStandardDevDataConfig().setName(standardDevName + "通道" + split[1]);
DevData.SqlDataDTO.ListDTO list1 = obj.getSqlData().get(0).getList();
alignDataExcel.setTimeDev(obj.getTime());
alignDataExcel.setUaDev(list1.getA());
alignDataExcel.setUbDev(list1.getB());
alignDataExcel.setUcDev(list1.getC());
DevData devData = standarDevDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().get();
if (ObjectUtil.isNotNull(devData)) {
DevData.SqlDataDTO.ListDTO list2 = devData.getSqlData().get(0).getList();
alignDataExcel.setTimeStdDev(devData.getTime());
alignDataExcel.setUaStdDev(list2.getA());
alignDataExcel.setUbStdDev(list2.getB());
alignDataExcel.setUcStdDev(list2.getC());
standarDevDataList.remove(devData);
}
dataList.add(alignDataExcel);
});
standarDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
standarDevDataList.stream().forEach(obj -> {
AlignDataExcel alignDataExcel = new AlignDataExcel();
alignDataExcel.getDevDataConfig().setName(devName + "通道" + channel);
alignDataExcel.getStandardDevDataConfig().setName(standardDevName + "通道" + split[1]);
DevData.SqlDataDTO.ListDTO list2 = obj.getSqlData().get(0).getList();
alignDataExcel.setTimeStdDev(obj.getTime());
alignDataExcel.setUaStdDev(list2.getA());
alignDataExcel.setUbStdDev(list2.getB());
alignDataExcel.setUcStdDev(list2.getC());
dataList.add(alignDataExcel);
});
sheet.put("data", dataList);
sheet.put("entity", AlignDataExcel.class);
});
});
ExcelUtil.exportExcel("实时数据.xlsx", sheetsList);
}
private Integer conform(Set<Integer> numbers) {
if (CollUtil.isNotEmpty(numbers)) {
if (numbers.size() > 1) {