数据分析微调
This commit is contained in:
@@ -208,4 +208,12 @@ public interface IPqDevService extends IService<PqDev> {
|
||||
* @param patternId 模式Id
|
||||
*/
|
||||
void importCNDev(List<CNDevExcel> cnDevExcelList, String patternId);
|
||||
|
||||
/**
|
||||
* 根据计划id列表获取设备列表
|
||||
*
|
||||
* @param planIds
|
||||
* @return
|
||||
*/
|
||||
List<PqDev> listByPlanIds(List<String> planIds);
|
||||
}
|
||||
|
||||
@@ -760,6 +760,12 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取检测状态饼状图数据
|
||||
*
|
||||
|
||||
@@ -196,10 +196,10 @@ public class AdPlanController extends BaseController {
|
||||
@PostMapping("/analyse")
|
||||
@ApiOperation("检测数据分析")
|
||||
@ApiImplicitParam(name = "planId", value = "检测计划id", required = true)
|
||||
public void analyse(String planId) {
|
||||
public void analyse(@RequestBody List<String> ids) {
|
||||
String methodDescribe = getMethodDescribe("analyse");
|
||||
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, planId);
|
||||
adPlanService.analyse(planId);
|
||||
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids));
|
||||
adPlanService.analyse(ids);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -114,7 +114,7 @@ public interface IAdPlanService extends IService<AdPlan> {
|
||||
/**
|
||||
* 数据分析
|
||||
*
|
||||
* @param planId
|
||||
* @param ids
|
||||
*/
|
||||
void analyse(String planId);
|
||||
void analyse(List<String> ids);
|
||||
}
|
||||
|
||||
@@ -414,35 +414,66 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
}
|
||||
|
||||
@Override
|
||||
public void analyse(String planId) {
|
||||
AdPlan adPlan = this.getById(planId);
|
||||
if (ObjectUtil.isNull(adPlan)) {
|
||||
throw new BusinessException(PlanResponseEnum.PLAN_NOT_EXIST);
|
||||
} else {
|
||||
List<String[]> rows = new ArrayList<>();
|
||||
|
||||
public void analyse(List<String> ids) {
|
||||
SysTestConfig config = sysTestConfigService.getOneConfig();
|
||||
if (ObjectUtil.isNotNull(config)) {
|
||||
String[] row1 = new String[]{adPlan.getName()};
|
||||
rows.add(row1);
|
||||
|
||||
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];
|
||||
row2[0] = "\\";
|
||||
PqDevParam.QueryParam param = new PqDevParam.QueryParam();
|
||||
param.setPlanId(planId);
|
||||
List<PqDev> devList = pqDevService.listByPlanId(param);
|
||||
String[] row3 = new String[maxTime + 1];
|
||||
row3[0] = "合格数量";
|
||||
String[] row4 = new String[maxTime + 1];
|
||||
row4[0] = "总数量";
|
||||
row4[0] = "已检数量";
|
||||
String[] row5 = new String[maxTime + 1];
|
||||
row5[0] = "合格率";
|
||||
|
||||
long total = devList.size();
|
||||
|
||||
for (int i = 1; i <= maxTime; i++) {
|
||||
row2[i] = i + "次检测";
|
||||
int tempI = i;
|
||||
List<PqDev> tempDevList = devList.stream().filter(dev -> dev.getReCheckNum().equals(tempI)).collect(Collectors.toList());
|
||||
long total = tempDevList.stream().filter(dev -> dev.getCheckResult() != CheckResultEnum.UNCHECKED.getValue()).count();
|
||||
List<PqDev> tempDevList = devList.stream().filter(dev -> dev.getReCheckNum() <= tempI).collect(Collectors.toList());
|
||||
long passCount = tempDevList.stream().filter(dev -> dev.getCheckResult() == CheckResultEnum.ACCORD.getValue()).count();
|
||||
row3[i] = passCount + "";
|
||||
row4[i] = total + "";
|
||||
@@ -453,14 +484,13 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
row5[i] = "/";
|
||||
}
|
||||
}
|
||||
rows.add(row1);
|
||||
rows.add(row2);
|
||||
rows.add(row3);
|
||||
rows.add(row4);
|
||||
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();
|
||||
XSSFWorkbook wb = new XSSFWorkbook();
|
||||
String sheetName = "Sheet1";
|
||||
|
||||
try (ServletOutputStream outputStream = response.getOutputStream()) {
|
||||
fileName = URLEncoder.encode(fileName, CharsetUtil.UTF_8);
|
||||
response.reset();
|
||||
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
|
||||
response.setContentType("application/octet-stream;charset=UTF-8");
|
||||
|
||||
sheets.forEach((sheetName, rows) -> {
|
||||
XSSFSheet sheet = wb.createSheet(sheetName);
|
||||
|
||||
// 数据行
|
||||
CellStyle cellStyle = wb.createCellStyle();
|
||||
cellStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
@@ -656,6 +688,8 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
|
||||
// 绘制
|
||||
chart.plot(bar);
|
||||
});
|
||||
|
||||
wb.write(outputStream);
|
||||
wb.close();
|
||||
} catch (IOException e) {
|
||||
|
||||
Reference in New Issue
Block a user