Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -11,7 +11,9 @@ public enum PlanResponseEnum {
|
|||||||
PLAN_REPEATED("A003014", "当前模式下,该计划已存在"),
|
PLAN_REPEATED("A003014", "当前模式下,该计划已存在"),
|
||||||
PLAN_NOT_EXIST("A003015", "该计划不存在"),
|
PLAN_NOT_EXIST("A003015", "该计划不存在"),
|
||||||
SCRIPT_RELATE_DICT_NOT_EXIST("A003016","脚本关联的字典不存在"),
|
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 message;
|
||||||
private final String code;
|
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.po.PqDev;
|
||||||
import com.njcn.gather.device.pojo.vo.CNDevExcel;
|
import com.njcn.gather.device.pojo.vo.CNDevExcel;
|
||||||
import com.njcn.gather.device.service.IPqDevService;
|
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.err.service.IPqErrSysService;
|
||||||
import com.njcn.gather.plan.mapper.AdPlanMapper;
|
import com.njcn.gather.plan.mapper.AdPlanMapper;
|
||||||
import com.njcn.gather.plan.pojo.enums.DataSourceEnum;
|
import com.njcn.gather.plan.pojo.enums.DataSourceEnum;
|
||||||
@@ -159,17 +160,24 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
|||||||
@Transactional(rollbackFor = {Exception.class})
|
@Transactional(rollbackFor = {Exception.class})
|
||||||
public boolean updateAdPlan(AdPlanParam.UpdateParam param) {
|
public boolean updateAdPlan(AdPlanParam.UpdateParam param) {
|
||||||
this.checkRepeat(param, true);
|
this.checkRepeat(param, true);
|
||||||
AdPlan adPlan = new AdPlan();
|
AdPlan plan1 = this.getById(param.getId());
|
||||||
BeanUtil.copyProperties(param, adPlan);
|
AdPlan plan2 = new AdPlan();
|
||||||
|
if (plan1.getTestState() != CheckStateEnum.UNCHECKED.getValue()) {
|
||||||
adPlan.setDatasourceId(String.join(StrUtil.COMMA, param.getDatasourceIds()));
|
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());
|
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(plan2);
|
||||||
|
|
||||||
return this.updateById(adPlan);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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) {
|
if (planList.size() > 1) {
|
||||||
|
StringBuffer allNote = new StringBuffer();
|
||||||
List<PqDev> allDevList = new ArrayList<>();
|
List<PqDev> allDevList = new ArrayList<>();
|
||||||
for (AdPlan plan : planList) {
|
for (AdPlan plan : planList) {
|
||||||
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
|
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
|
||||||
@@ -442,22 +460,58 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
|||||||
List<PqDev> devList = pqDevService.listByPlanId(queryParam);
|
List<PqDev> devList = pqDevService.listByPlanId(queryParam);
|
||||||
devList = devList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
|
devList = devList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
|
||||||
allDevList.addAll(devList);
|
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 {
|
} else {
|
||||||
AdPlan plan = planList.get(0);
|
AdPlan plan = planList.get(0);
|
||||||
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
|
PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam();
|
||||||
queryParam.setPlanId(plan.getId());
|
queryParam.setPlanId(plan.getId());
|
||||||
List<PqDev> devList = pqDevService.listByPlanId(queryParam);
|
List<PqDev> devList = pqDevService.listByPlanId(queryParam);
|
||||||
devList = devList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList());
|
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);
|
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 header 表头
|
||||||
* @param devList 设备列表
|
* @param devList 设备列表
|
||||||
* @param maxTime 最大复检次数
|
* @param maxTime 最大复检次数
|
||||||
|
* @param note 备注
|
||||||
* @return
|
* @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<>();
|
List<String[]> rows = new ArrayList<>();
|
||||||
String[] row1 = new String[]{header};
|
String[] row1 = new String[]{header};
|
||||||
|
|
||||||
@@ -476,9 +531,11 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
|||||||
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] = "合格率";
|
||||||
|
String[] row6 = new String[maxTime + 1];
|
||||||
|
row6[0] = note;
|
||||||
|
|
||||||
long total = devList.size();
|
long total = devList.size();
|
||||||
|
|
||||||
@@ -501,6 +558,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
|||||||
rows.add(row3);
|
rows.add(row3);
|
||||||
rows.add(row4);
|
rows.add(row4);
|
||||||
rows.add(row5);
|
rows.add(row5);
|
||||||
|
rows.add(row6);
|
||||||
|
|
||||||
return rows;
|
return rows;
|
||||||
}
|
}
|
||||||
@@ -591,17 +649,14 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
|||||||
Cell row0Cell0 = row0.createCell(0);
|
Cell row0Cell0 = row0.createCell(0);
|
||||||
row0Cell0.setCellStyle(cellStyle);
|
row0Cell0.setCellStyle(cellStyle);
|
||||||
row0Cell0.setCellValue(rows.get(0)[0]);
|
row0Cell0.setCellValue(rows.get(0)[0]);
|
||||||
for (int i = 1; i < maxTime + 1; i++) {
|
CellRangeAddress mergedRegion = new CellRangeAddress(0, 0, 0, 2 * maxTime + 1);
|
||||||
row0.createCell(i);
|
|
||||||
}
|
|
||||||
CellRangeAddress mergedRegion = new CellRangeAddress(0, 0, 0, maxTime);
|
|
||||||
sheet.addMergedRegion(mergedRegion);
|
sheet.addMergedRegion(mergedRegion);
|
||||||
|
|
||||||
CellStyle commoncellStyle = wb.createCellStyle();
|
CellStyle commoncellStyle = wb.createCellStyle();
|
||||||
commoncellStyle.setAlignment(HorizontalAlignment.CENTER);
|
commoncellStyle.setAlignment(HorizontalAlignment.CENTER);
|
||||||
commoncellStyle.setVerticalAlignment(VerticalAlignment.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);
|
String[] row = rows.get(i);
|
||||||
Row createRow = sheet.createRow(i);
|
Row createRow = sheet.createRow(i);
|
||||||
for (int j = 0; j < row.length; j++) {
|
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();
|
XSSFDrawing drawing = sheet.createDrawingPatriarch();
|
||||||
// 前四个默认0,[0,5]:从0列5行开始;[6,16]:到6列16行结束
|
// 前四个默认0,[0,5]:从0列5行开始;[6,16]:到6列16行结束
|
||||||
// 默认宽度(14-8)*12
|
// 默认宽度(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对象
|
// 创建一个chart对象
|
||||||
XSSFChart chart = drawing.createChart(anchor);
|
XSSFChart chart = drawing.createChart(anchor);
|
||||||
// 标题
|
// 标题
|
||||||
@@ -663,7 +727,7 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
|
|||||||
// 分类轴标(X轴)数据,单元格范围位置[1, 1]到[1, maxTime]
|
// 分类轴标(X轴)数据,单元格范围位置[1, 1]到[1, maxTime]
|
||||||
XDDFDataSource<String> checkTimes = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(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];
|
Double[] rateArr = new Double[maxTime];
|
||||||
for (int i = 1; i < rateStrArr.length; i++) {
|
for (int i = 1; i < rateStrArr.length; i++) {
|
||||||
if ("/".equals(rateStrArr[i])) {
|
if ("/".equals(rateStrArr[i])) {
|
||||||
|
|||||||
Reference in New Issue
Block a user