Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -11,7 +11,9 @@ public enum PlanResponseEnum {
|
||||
PLAN_REPEATED("A003014", "当前模式下,该计划已存在"),
|
||||
PLAN_NOT_EXIST("A003015", "该计划不存在"),
|
||||
SCRIPT_RELATE_DICT_NOT_EXIST("A003016","脚本关联的字典不存在"),
|
||||
NOT_CHECKED_PLAN_CANNOT_ANALYSE("A003017","只有检测状态为检测完成的计划才能进行统计分析" );
|
||||
NOT_CHECKED_PLAN_CANNOT_ANALYSE("A003017","只有检测状态为检测完成的计划才能进行统计分析" ),
|
||||
CANNOT_CHANGE_SCRIPT_WHEN_CHECKING("A003018","只有检测状态为未检时,才能修改检测脚本" ),
|
||||
CANNOT_CHANGE_ERROR_SYS_WHEN_CHECKING("A003019","只有检测状态为未检时,才能修改误差体系" );
|
||||
|
||||
private final String message;
|
||||
private final String code;
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.njcn.gather.device.pojo.param.PqDevParam;
|
||||
import com.njcn.gather.device.pojo.po.PqDev;
|
||||
import com.njcn.gather.device.pojo.vo.CNDevExcel;
|
||||
import com.njcn.gather.device.service.IPqDevService;
|
||||
import com.njcn.gather.err.pojo.po.PqErrSys;
|
||||
import com.njcn.gather.err.service.IPqErrSysService;
|
||||
import com.njcn.gather.plan.mapper.AdPlanMapper;
|
||||
import com.njcn.gather.plan.pojo.enums.DataSourceEnum;
|
||||
@@ -159,17 +160,24 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
public boolean updateAdPlan(AdPlanParam.UpdateParam param) {
|
||||
this.checkRepeat(param, true);
|
||||
AdPlan adPlan = new AdPlan();
|
||||
BeanUtil.copyProperties(param, adPlan);
|
||||
|
||||
adPlan.setDatasourceId(String.join(StrUtil.COMMA, param.getDatasourceIds()));
|
||||
AdPlan plan1 = this.getById(param.getId());
|
||||
AdPlan plan2 = new AdPlan();
|
||||
if (plan1.getTestState() != CheckStateEnum.UNCHECKED.getValue()) {
|
||||
if (!plan1.getScriptId().equals(param.getScriptId())){
|
||||
throw new BusinessException(PlanResponseEnum.CANNOT_CHANGE_SCRIPT_WHEN_CHECKING);
|
||||
}
|
||||
if (!plan1.getErrorSysId().equals(param.getErrorSysId())) {
|
||||
throw new BusinessException(PlanResponseEnum.CANNOT_CHANGE_ERROR_SYS_WHEN_CHECKING);
|
||||
}
|
||||
}
|
||||
|
||||
BeanUtil.copyProperties(param, plan2);
|
||||
plan2.setDatasourceId(String.join(StrUtil.COMMA, param.getDatasourceIds()));
|
||||
// 修改检测计划、检测源关联
|
||||
adPlanSourceService.updateAdPlanSource(param.getId(), param.getSourceIds());
|
||||
plan2.setTestState(pqDevService.bind(param.getId(), param.getDevIds()));
|
||||
|
||||
adPlan.setTestState(pqDevService.bind(param.getId(), param.getDevIds()));
|
||||
|
||||
return this.updateById(adPlan);
|
||||
return this.updateById(plan2);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -432,9 +440,19 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
}
|
||||
});
|
||||
|
||||
Map<String, List<String[]>> sheets = new HashMap<>();
|
||||
Map<String, List<String[]>> sheets = new TreeMap<>(new Comparator<String>() {
|
||||
@Override
|
||||
public int compare(String o1, String o2) {
|
||||
if (o1.equals("概览")) {
|
||||
return -1;
|
||||
} else {
|
||||
return o1.compareTo(o2);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (planList.size() > 1) {
|
||||
StringBuffer allNote = new StringBuffer();
|
||||
List<PqDev> allDevList = new ArrayList<>();
|
||||
for (AdPlan plan : planList) {
|
||||
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
|
||||
@@ -442,22 +460,58 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
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));
|
||||
|
||||
allNote.append(plan.getName() + "计划" + devList.size() + "台,");
|
||||
if (plan.getName().equals("概览")) {
|
||||
sheets.put(plan.getName() + "检测计划", getRows(plan.getName(), devList, maxTime, getNote(plan, devList)));
|
||||
} else {
|
||||
sheets.put(plan.getName(), getRows(plan.getName(), devList, maxTime, getNote(plan, devList)));
|
||||
}
|
||||
sheets.put("All", getRows("数据分析结果-所有计划", allDevList, maxTime));
|
||||
}
|
||||
allNote.insert(0, "说明:总计" + allDevList.size() + "台设备,");
|
||||
allNote.replace(allNote.length() - 1, allNote.length(), "。");
|
||||
sheets.put("概览", getRows("数据分析结果-所有计划", allDevList, maxTime, allNote.toString()));
|
||||
} 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));
|
||||
|
||||
sheets.put(plan.getName(), getRows(plan.getName(), devList, maxTime, getNote(plan, devList)));
|
||||
}
|
||||
|
||||
exportPassRateExcel("数据分析结果.xlsx", maxTime, sheets);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取备注信息
|
||||
*
|
||||
* @param plan 检测计划
|
||||
* @param devList 设备列表
|
||||
* @return 备注信息
|
||||
*/
|
||||
private String getNote(AdPlan plan, List<PqDev> devList) {
|
||||
StringBuffer note = new StringBuffer();
|
||||
note.append("说明:本计划共有" + devList.size() + "台设备,");
|
||||
Map<String, List<PqDev>> devTypeMap = devList.stream().collect(Collectors.groupingBy(PqDev::getDevType, Collectors.toList()));
|
||||
devTypeMap.forEach((key, value) -> {
|
||||
DevType devType = devTypeService.getById(key);
|
||||
if (ObjectUtil.isNotNull(devType)) {
|
||||
note.append(devType.getName() + "型号" + value.size() + "台,");
|
||||
}
|
||||
});
|
||||
PqErrSys errSys = pqErrSysService.getById(plan.getErrorSysId());
|
||||
SysTestConfig config1 = sysTestConfigService.getConfig();
|
||||
if (ObjectUtil.isNotNull(config1)) {
|
||||
DictData dictData = dictDataService.getDictDataById(config1.getDataRule());
|
||||
if (ObjectUtil.isNotNull(errSys) && ObjectUtil.isNotNull(dictData)) {
|
||||
note.append("测试结果采用\"" + errSys.getName() + "\"误差体系结合\"" + dictData.getName() + "\"数据原则计算得出。");
|
||||
}
|
||||
}
|
||||
return note.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取行数据
|
||||
@@ -465,9 +519,10 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
* @param header 表头
|
||||
* @param devList 设备列表
|
||||
* @param maxTime 最大复检次数
|
||||
* @param note 备注
|
||||
* @return
|
||||
*/
|
||||
private List<String[]> getRows(String header, List<PqDev> devList, Integer maxTime) {
|
||||
private List<String[]> getRows(String header, List<PqDev> devList, Integer maxTime, String note) {
|
||||
List<String[]> rows = new ArrayList<>();
|
||||
String[] row1 = new String[]{header};
|
||||
|
||||
@@ -476,9 +531,11 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
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] = "合格率";
|
||||
String[] row6 = new String[maxTime + 1];
|
||||
row6[0] = note;
|
||||
|
||||
long total = devList.size();
|
||||
|
||||
@@ -501,6 +558,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
rows.add(row3);
|
||||
rows.add(row4);
|
||||
rows.add(row5);
|
||||
rows.add(row6);
|
||||
|
||||
return rows;
|
||||
}
|
||||
@@ -591,17 +649,14 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
Cell row0Cell0 = row0.createCell(0);
|
||||
row0Cell0.setCellStyle(cellStyle);
|
||||
row0Cell0.setCellValue(rows.get(0)[0]);
|
||||
for (int i = 1; i < maxTime + 1; i++) {
|
||||
row0.createCell(i);
|
||||
}
|
||||
CellRangeAddress mergedRegion = new CellRangeAddress(0, 0, 0, maxTime);
|
||||
CellRangeAddress mergedRegion = new CellRangeAddress(0, 0, 0, 2 * maxTime + 1);
|
||||
sheet.addMergedRegion(mergedRegion);
|
||||
|
||||
CellStyle commoncellStyle = wb.createCellStyle();
|
||||
commoncellStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||
commoncellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
|
||||
|
||||
for (int i = 1; i < rows.size(); i++) {
|
||||
for (int i = 1; i < rows.size() - 1; i++) {
|
||||
String[] row = rows.get(i);
|
||||
Row createRow = sheet.createRow(i);
|
||||
for (int j = 0; j < row.length; j++) {
|
||||
@@ -638,11 +693,20 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
}
|
||||
}
|
||||
|
||||
Row note = sheet.createRow(rows.size() - 1);
|
||||
Cell noteCell0 = note.createCell(0);
|
||||
commoncellStyle.setWrapText(true);
|
||||
noteCell0.setCellStyle(commoncellStyle);
|
||||
noteCell0.setCellValue(rows.get(rows.size() - 1)[0]);
|
||||
|
||||
mergedRegion = new CellRangeAddress(rows.size() - 1, rows.size() + 2, 0, maxTime);
|
||||
sheet.addMergedRegion(mergedRegion);
|
||||
|
||||
// 条形图
|
||||
XSSFDrawing drawing = sheet.createDrawingPatriarch();
|
||||
// 前四个默认0,[0,5]:从0列5行开始;[6,16]:到6列16行结束
|
||||
// 默认宽度(14-8)*12
|
||||
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, maxTime + 1, 25);
|
||||
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, maxTime + 1, 1, 2 * maxTime + 2, 25);
|
||||
// 创建一个chart对象
|
||||
XSSFChart chart = drawing.createChart(anchor);
|
||||
// 标题
|
||||
@@ -663,7 +727,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
||||
// 分类轴标(X轴)数据,单元格范围位置[1, 1]到[1, maxTime]
|
||||
XDDFDataSource<String> checkTimes = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(1, 1, 1, maxTime));
|
||||
// 数据
|
||||
String[] rateStrArr = rows.get(rows.size() - 1);
|
||||
String[] rateStrArr = rows.get(rows.size() - 2);
|
||||
Double[] rateArr = new Double[maxTime];
|
||||
for (int i = 1; i < rateStrArr.length; i++) {
|
||||
if ("/".equals(rateStrArr[i])) {
|
||||
|
||||
Reference in New Issue
Block a user