数据分析微调

This commit is contained in:
caozehui
2025-02-17 17:59:37 +08:00
parent 76ec26dca0
commit 0c012152bb
5 changed files with 205 additions and 157 deletions

View File

@@ -208,4 +208,12 @@ public interface IPqDevService extends IService<PqDev> {
* @param patternId 模式Id * @param patternId 模式Id
*/ */
void importCNDev(List<CNDevExcel> cnDevExcelList, String patternId); void importCNDev(List<CNDevExcel> cnDevExcelList, String patternId);
/**
* 根据计划id列表获取设备列表
*
* @param planIds
* @return
*/
List<PqDev> listByPlanIds(List<String> planIds);
} }

View File

@@ -760,6 +760,12 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
this.saveBatch(newDevList); this.saveBatch(newDevList);
} }
@Override
public List<PqDev> listByPlanIds(List<String> planIds) {
return this.lambdaQuery().in(PqDev::getPlanId, planIds).eq(PqDev::getState, DataStateEnum.ENABLE.getCode()).list();
}
/** /**
* 获取检测状态饼状图数据 * 获取检测状态饼状图数据
* *

View File

@@ -196,10 +196,10 @@ public class AdPlanController extends BaseController {
@PostMapping("/analyse") @PostMapping("/analyse")
@ApiOperation("检测数据分析") @ApiOperation("检测数据分析")
@ApiImplicitParam(name = "planId", value = "检测计划id", required = true) @ApiImplicitParam(name = "planId", value = "检测计划id", required = true)
public void analyse(String planId) { public void analyse(@RequestBody List<String> ids) {
String methodDescribe = getMethodDescribe("analyse"); String methodDescribe = getMethodDescribe("analyse");
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, planId); LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids));
adPlanService.analyse(planId); adPlanService.analyse(ids);
} }
} }

View File

@@ -114,7 +114,7 @@ public interface IAdPlanService extends IService<AdPlan> {
/** /**
* 数据分析 * 数据分析
* *
* @param planId * @param ids
*/ */
void analyse(String planId); void analyse(List<String> ids);
} }

View File

@@ -414,35 +414,66 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
} }
@Override @Override
public void analyse(String planId) { public void analyse(List<String> ids) {
AdPlan adPlan = this.getById(planId);
if (ObjectUtil.isNull(adPlan)) {
throw new BusinessException(PlanResponseEnum.PLAN_NOT_EXIST);
} else {
List<String[]> rows = new ArrayList<>();
SysTestConfig config = sysTestConfigService.getOneConfig(); SysTestConfig config = sysTestConfigService.getOneConfig();
if (ObjectUtil.isNotNull(config)) { if (ObjectUtil.isNotNull(config)) {
String[] row1 = new String[]{adPlan.getName()};
rows.add(row1);
Integer maxTime = config.getMaxTime(); Integer maxTime = config.getMaxTime();
List<AdPlan> planList = this.listByIds(ids);
Map<String, List<String[]>> sheets = new HashMap<>();
if (planList.size() > 1) {
List<PqDev> allDevList = new ArrayList<>();
for (AdPlan plan : planList) {
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanId(plan.getId());
List<PqDev> devList = pqDevService.listByPlanId(queryParam);
devList = devList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
allDevList.addAll(devList);
sheets.put(plan.getName(), getRows(plan.getName(), devList, maxTime));
}
sheets.put("All", getRows("数据分析结果-所有计划", allDevList, maxTime));
} else {
AdPlan plan = planList.get(0);
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
queryParam.setPlanId(plan.getId());
List<PqDev> devList = pqDevService.listByPlanId(queryParam);
devList = devList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
sheets.put(plan.getName(), getRows(plan.getName(), devList, maxTime));
}
exportPassRateExcel("数据分析结果.xlsx", maxTime, sheets);
}
}
/**
* 获取行数据
*
* @param header 表头
* @param devList 设备列表
* @param maxTime 最大复检次数
* @return
*/
private List<String[]> getRows(String header, List<PqDev> devList, Integer maxTime) {
List<String[]> rows = new ArrayList<>();
String[] row1 = new String[]{header};
String[] row2 = new String[maxTime + 1]; String[] row2 = new String[maxTime + 1];
row2[0] = "\\"; row2[0] = "\\";
PqDevParam.QueryParam param = new PqDevParam.QueryParam();
param.setPlanId(planId);
List<PqDev> devList = pqDevService.listByPlanId(param);
String[] row3 = new String[maxTime + 1]; String[] row3 = new String[maxTime + 1];
row3[0] = "合格数量"; row3[0] = "合格数量";
String[] row4 = new String[maxTime + 1]; String[] row4 = new String[maxTime + 1];
row4[0] = "数量"; row4[0] = "已检数量";
String[] row5 = new String[maxTime + 1]; String[] row5 = new String[maxTime + 1];
row5[0] = "合格率"; row5[0] = "合格率";
long total = devList.size();
for (int i = 1; i <= maxTime; i++) { for (int i = 1; i <= maxTime; i++) {
row2[i] = i + "次检测"; row2[i] = i + "次检测";
int tempI = i; int tempI = i;
List<PqDev> tempDevList = devList.stream().filter(dev -> dev.getReCheckNum().equals(tempI)).collect(Collectors.toList()); List<PqDev> tempDevList = devList.stream().filter(dev -> dev.getReCheckNum() <= tempI).collect(Collectors.toList());
long total = tempDevList.stream().filter(dev -> dev.getCheckResult() != CheckResultEnum.UNCHECKED.getValue()).count();
long passCount = tempDevList.stream().filter(dev -> dev.getCheckResult() == CheckResultEnum.ACCORD.getValue()).count(); long passCount = tempDevList.stream().filter(dev -> dev.getCheckResult() == CheckResultEnum.ACCORD.getValue()).count();
row3[i] = passCount + ""; row3[i] = passCount + "";
row4[i] = total + ""; row4[i] = total + "";
@@ -453,14 +484,13 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
row5[i] = "/"; row5[i] = "/";
} }
} }
rows.add(row1);
rows.add(row2); rows.add(row2);
rows.add(row3); rows.add(row3);
rows.add(row4); rows.add(row4);
rows.add(row5); rows.add(row5);
exportPassRateExcel("分析结果.xlsx", maxTime, rows);
}
} return rows;
} }
/** /**
@@ -522,18 +552,20 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
} }
} }
private void exportPassRateExcel(String fileName, Integer maxTime, List<String[]> rows) { private void exportPassRateExcel(String fileName, Integer maxTime, Map<String, List<String[]>> sheets) {
HttpServletResponse response = HttpServletUtil.getResponse(); HttpServletResponse response = HttpServletUtil.getResponse();
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
String sheetName = "Sheet1";
try (ServletOutputStream outputStream = response.getOutputStream()) { try (ServletOutputStream outputStream = response.getOutputStream()) {
fileName = URLEncoder.encode(fileName, CharsetUtil.UTF_8); fileName = URLEncoder.encode(fileName, CharsetUtil.UTF_8);
response.reset(); response.reset();
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentType("application/octet-stream;charset=UTF-8"); response.setContentType("application/octet-stream;charset=UTF-8");
sheets.forEach((sheetName, rows) -> {
XSSFSheet sheet = wb.createSheet(sheetName); XSSFSheet sheet = wb.createSheet(sheetName);
// 数据行 // 数据行
CellStyle cellStyle = wb.createCellStyle(); CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER); cellStyle.setAlignment(HorizontalAlignment.CENTER);
@@ -656,6 +688,8 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
// 绘制 // 绘制
chart.plot(bar); chart.plot(bar);
});
wb.write(outputStream); wb.write(outputStream);
wb.close(); wb.close();
} catch (IOException e) { } catch (IOException e) {