From e48efef8d657dce0b7be1eb8ca30ec76cbafa887 Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Thu, 12 Dec 2024 15:34:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E8=AE=A1=E5=88=92=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E5=BE=AE=E8=B0=83=E8=A2=AB=E6=A3=80=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E3=80=81=E8=AF=AF=E5=B7=AE=E4=BD=93=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/controller/PqDevController.java | 37 +++- .../device/device/pojo/param/PqDevParam.java | 16 +- .../device/device/service/IPqDevService.java | 32 +++- .../device/service/impl/PqDevServiceImpl.java | 164 +++++++++--------- .../device/err/pojo/param/PqErrSysParam.java | 5 - .../err/service/impl/PqErrSysServiceImpl.java | 14 ++ .../monitor/service/IPqMonitorService.java | 10 ++ .../service/impl/PqMonitorServiceImpl.java | 38 ++++ .../plan/controller/AdPlanController.java | 12 ++ .../plan/pojo/enums/DataSourceEnum.java | 21 ++- .../device/plan/pojo/vo/AdPlanExcel.java | 48 +++++ .../device/plan/service/IAdPlanService.java | 8 + .../plan/service/impl/AdPlanServiceImpl.java | 109 ++++++++++-- .../device/pojo/constant/DevValidMessage.java | 2 + .../device/pojo/enums/DevResponseEnum.java | 10 +- 15 files changed, 399 insertions(+), 127 deletions(-) create mode 100644 device/src/main/java/com/njcn/gather/device/plan/pojo/vo/AdPlanExcel.java diff --git a/device/src/main/java/com/njcn/gather/device/device/controller/PqDevController.java b/device/src/main/java/com/njcn/gather/device/device/controller/PqDevController.java index 8dee5df7..6005a5ee 100644 --- a/device/src/main/java/com/njcn/gather/device/device/controller/PqDevController.java +++ b/device/src/main/java/com/njcn/gather/device/device/controller/PqDevController.java @@ -3,6 +3,7 @@ package com.njcn.gather.device.device.controller; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.pojo.annotation.OperateInfo; @@ -17,8 +18,12 @@ import com.njcn.gather.device.device.pojo.po.PqDev; import com.njcn.gather.device.device.pojo.vo.PqDevExcel; import com.njcn.gather.device.device.pojo.vo.PqDevVO; import com.njcn.gather.device.device.service.IPqDevService; +import com.njcn.gather.device.pojo.constant.DevConst; import com.njcn.gather.device.pojo.enums.DevResponseEnum; +import com.njcn.gather.system.dictionary.pojo.po.DictData; +import com.njcn.gather.system.dictionary.service.IDictDataService; import com.njcn.web.controller.BaseController; +import com.njcn.web.utils.ExcelUtil; import com.njcn.web.utils.HttpResultUtil; import com.njcn.web.utils.PoiUtil; import io.swagger.annotations.Api; @@ -48,6 +53,8 @@ import java.util.Map; public class PqDevController extends BaseController { private final IPqDevService pqDevService; + private final IDictDataService dictDataService; + @OperateInfo @PostMapping("/list") @@ -159,7 +166,16 @@ public class PqDevController extends BaseController { public void export(@RequestBody @Validated PqDevParam.QueryParam queryParam) { String methodDescribe = getMethodDescribe("export"); LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); - pqDevService.exportPqDevData(queryParam); + DictData dictData = dictDataService.getDictDataById(queryParam.getPattern()); + if (ObjectUtil.isNotNull(dictData)) { + if (DevConst.PATTERN_CONTRAST.equals(dictData.getCode())) { + List> sheetList = pqDevService.getContrastExportSheetList(queryParam); + ExcelUtil.exportExcel("被检设备导出数据.xlsx", sheetList); + } else { + List> sheetList = pqDevService.getSimOrDigitExportSheetList(queryParam); + ExcelUtil.exportExcel("被检设备导出数据.xlsx", sheetList); + } + } } @OperateInfo(info = LogEnum.BUSINESS_COMMON) @@ -174,13 +190,24 @@ public class PqDevController extends BaseController { } @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/listBoundByPlanId") + @PostMapping("/listByPlanId") @ApiOperation("根据检测计划id查询出所有已绑定的设备") @ApiImplicitParam(name = "planId", value = "计划id", required = true) - public HttpResult> listBoundByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) { - String methodDescribe = getMethodDescribe("listBoundByPlanId"); + public HttpResult> listByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) { + String methodDescribe = getMethodDescribe("listByPlanId"); LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param); - List result = pqDevService.listBoundByPlanId(param); + List result = pqDevService.listByPlanId(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + +// @OperateInfo(info = LogEnum.BUSINESS_COMMON) +// @PostMapping("/listUnDocumentByPlanId") +// @ApiOperation("根据检测计划id查询出所有已绑定(未归档)的设备") +// @ApiImplicitParam(name = "planId", value = "计划id", required = true) +// public HttpResult> listUnDocumentByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) { +// String methodDescribe = getMethodDescribe("listUnDocumentByPlanId"); +// LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param); +// List result = pqDevService.listUnDocumentByPlanId(param); +// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); +// } } diff --git a/device/src/main/java/com/njcn/gather/device/device/pojo/param/PqDevParam.java b/device/src/main/java/com/njcn/gather/device/device/pojo/param/PqDevParam.java index aa3cd533..a393e8e4 100644 --- a/device/src/main/java/com/njcn/gather/device/device/pojo/param/PqDevParam.java +++ b/device/src/main/java/com/njcn/gather/device/device/pojo/param/PqDevParam.java @@ -137,6 +137,11 @@ public class PqDevParam { @Min(value = 0, message = DevValidMessage.RECHECK_NUM_FORMAT_ERROR) private Integer reCheckNum; + @ApiModelProperty("是否支持系数校准") + @Min(value = 0, message = DevValidMessage.FACTOR_FLAG_FORMAT_ERROR) + @Max(value = 1, message = DevValidMessage.FACTOR_FLAG_FORMAT_ERROR) + private String factorFlag; + @ApiModelProperty("监测点台账列表") @Valid private List monitorList; @@ -155,7 +160,7 @@ public class PqDevParam { @ApiModelProperty("检测状态") @Min(value = 0, message = DevValidMessage.CHECK_STATE_FORMAT_ERROR) - @Max(value = 2, message = DevValidMessage.CHECK_STATE_FORMAT_ERROR) + @Max(value = 3, message = DevValidMessage.CHECK_STATE_FORMAT_ERROR) private Integer checkState; @ApiModelProperty("检测结果") @@ -185,7 +190,6 @@ public class PqDevParam { private String name; @ApiModelProperty(value = "设备模式,字典表(数字、模拟、比对)") -// @NotBlank(message = DevValidMessage.PATTERN_NOT_BLANK) @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DevValidMessage.PATTERN_FORMAT_ERROR) private String pattern; @@ -196,10 +200,10 @@ public class PqDevParam { @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DevValidMessage.PLAN_ID_FORMAT_ERROR) private String planId; - @ApiModelProperty("检测状态") - @Min(value = 0, message = DevValidMessage.CHECK_STATE_FORMAT_ERROR) - @Max(value = 2, message = DevValidMessage.CHECK_STATE_FORMAT_ERROR) - private Integer checkState; + @ApiModelProperty("检测状态列表") + private List< + @Min(value = 0, message = DevValidMessage.CHECK_STATE_FORMAT_ERROR) + @Max(value = 3, message = DevValidMessage.CHECK_STATE_FORMAT_ERROR) Integer> checkStateList; @ApiModelProperty("检测结果") @Min(value = 0, message = DevValidMessage.CHECK_RESULT_FORMAT_ERROR) diff --git a/device/src/main/java/com/njcn/gather/device/device/service/IPqDevService.java b/device/src/main/java/com/njcn/gather/device/device/service/IPqDevService.java index 291eacc0..323c8ff0 100644 --- a/device/src/main/java/com/njcn/gather/device/device/service/IPqDevService.java +++ b/device/src/main/java/com/njcn/gather/device/device/service/IPqDevService.java @@ -45,7 +45,7 @@ public interface IPqDevService extends IService { /** * 批量更新被检设备守时检测结果 * - * @param ids 被检设备id列表 + * @param ids 被检设备id列表 * @param result 守时检测结果 * @return 更新成功返回true,否则返回false */ @@ -72,11 +72,28 @@ public interface IPqDevService extends IService { void importPqDevData(List sgEventExcels); /** - * 导出被检设备信息 + * 根据检测计划planIds获取被检设备设备导出时所需的SheetMap + * + * @param planIds + * @return SheetMap + */ + Map getExportSheetMap(List planIds, Class clazz); + + /** + * 获取模拟式||数字式设备导出时所需的SheetList * * @param queryParam 查询参数 + * @return SheetList */ - void exportPqDevData(PqDevParam.QueryParam queryParam); + List> getSimOrDigitExportSheetList(PqDevParam.QueryParam queryParam); + + /** + * 获取比对式设备导出时所需的SheetList (包含与之关联的监控点信息) + * + * @param queryParam 查询参数 + * @return SheetList + */ + List> getContrastExportSheetList(PqDevParam.QueryParam queryParam); /** * 获取所有未绑定的设备 @@ -92,7 +109,7 @@ public interface IPqDevService extends IService { * @param param 计划id * @return 绑定的设备列表 */ - List listBoundByPlanId(PqDevParam.QueryParam param); + List listByPlanId(PqDevParam.QueryParam param); /** * 绑定计划 @@ -117,4 +134,11 @@ public interface IPqDevService extends IService { * @return */ PqDevVO getPqDevById(String id); + + /** + * 获取所有非未检测状态的设备 + * + * @return 所有非未检测状态的设备列表 + */ + List listNotUnchecked(); } diff --git a/device/src/main/java/com/njcn/gather/device/device/service/impl/PqDevServiceImpl.java b/device/src/main/java/com/njcn/gather/device/device/service/impl/PqDevServiceImpl.java index 953f5201..d15bd992 100644 --- a/device/src/main/java/com/njcn/gather/device/device/service/impl/PqDevServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/device/service/impl/PqDevServiceImpl.java @@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -50,25 +51,7 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public Page listPqDevs(PqDevParam.QueryParam queryParam) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (ObjectUtil.isNotNull(queryParam)) { - queryWrapper - .like(StrUtil.isNotBlank(queryParam.getName()), "pq_dev.name", queryParam.getName()) - .eq(StrUtil.isNotBlank(queryParam.getPattern()), "pq_dev.pattern", queryParam.getPattern()) - .eq(StrUtil.isNotBlank(queryParam.getManufacturer()), "pq_dev.manufacturer", queryParam.getManufacturer()) - .between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()); - //排序 - if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { - queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); - } else { - //没有排序参数,默认根据sort字段排序,没有排序字段的,根据updateTime更新时间排序 - queryWrapper.orderBy(true, true, "pq_dev.Create_Time"); - } - } else { - queryWrapper.orderBy(true, true, "pq_dev.Create_Time"); - } - queryWrapper.eq("pq_dev.state", DataStateEnum.ENABLE.getCode()); - Page page = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + Page page = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), this.getQueryWrapper(queryParam)); page.getRecords().forEach(p -> { if (ObjectUtil.isNotNull(p.getSeries())) { p.setSeries(DeviceUtil.decoderString(1, p.getSeries())); @@ -82,6 +65,8 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public boolean addPqDev(PqDevParam pqDevParam) { + this.checkRepeat(pqDevParam, false); + PqDev pqDev = new PqDev(); BeanUtil.copyProperties(pqDevParam, pqDev); if (pqDevParam.getEncryptionFlag() == 1) { @@ -111,6 +96,8 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public boolean updatePqDev(PqDevParam.UpdateParam updateParam) { + this.checkRepeat(updateParam, true); + PqDev pqDev = new PqDev(); BeanUtil.copyProperties(updateParam, pqDev); if (Objects.nonNull(pqDev.getSeries())) { @@ -177,73 +164,59 @@ public class PqDevServiceImpl extends ServiceImpl implements } @Override - public void exportPqDevData(PqDevParam.QueryParam queryParam) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (ObjectUtil.isNotNull(queryParam)) { - queryWrapper - .like(StrUtil.isNotBlank(queryParam.getName()), "pq_dev.name", queryParam.getName()) - .eq(StrUtil.isNotBlank(queryParam.getPattern()), "pq_dev.pattern", queryParam.getPattern()) - .eq(StrUtil.isNotBlank(queryParam.getManufacturer()), "pq_dev.manufacturer", queryParam.getManufacturer()) - .between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()); - //排序 - if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { - queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); - } else { - //没有排序参数,默认根据sort字段排序,没有排序字段的,根据updateTime更新时间排序 - queryWrapper.orderBy(true, false, "pq_dev.Create_Time"); - } - } else { - queryWrapper.orderBy(true, false, "pq_dev.Create_Time"); + public Map getExportSheetMap(List planIds, Class clazz) { + List devList = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(planIds)) { + devList.addAll(this.lambdaQuery().in(PqDev::getPlanId, planIds).eq(PqDev::getState, DataStateEnum.ENABLE.getCode()).orderBy(true, true, PqDev::getCreateTime).list()); } - queryWrapper.eq("pq_dev.state", DataStateEnum.ENABLE.getCode()); - List pqDevs = this.list(queryWrapper); + this.visualize(devList); + + List pqDevExcels = BeanUtil.copyToList(devList, clazz); + Map sheetMap = new HashMap<>(); + ExportParams exportParams = new ExportParams(); + exportParams.setSheetName("被检设备"); + sheetMap.put("title", exportParams); + sheetMap.put("data", pqDevExcels); + sheetMap.put("entity", PqDevExcel.ContrastExportData.class); + + return sheetMap; + } + + @Override + public List> getSimOrDigitExportSheetList(PqDevParam.QueryParam queryParam) { + List pqDevs = this.list(this.getQueryWrapper(queryParam)); this.visualize(pqDevs); - DictData dictData = dictDataService.getDictDataById(queryParam.getPattern()); - if (ObjectUtil.isNotNull(dictData)) { - if (DevConst.PATTERN_CONTRAST.equals(dictData.getCode())) { - List pqDevExcels = BeanUtil.copyToList(pqDevs, PqDevExcel.ContrastExportData.class); + List pqDevExcels = BeanUtil.copyToList(pqDevs, PqDevExcel.SimulateAndDigitalExportData.class); - Map sheet1 = new HashMap<>(); - ExportParams exportParams1 = new ExportParams(); - exportParams1.setSheetName("被检设备"); - sheet1.put("title", exportParams1); - sheet1.put("data", pqDevExcels); - sheet1.put("entity", PqDevExcel.ContrastExportData.class); + Map sheetMap = new HashMap<>(); + ExportParams exportParams = new ExportParams(); + exportParams.setSheetName("被检设备"); + sheetMap.put("title", exportParams); + sheetMap.put("data", pqDevExcels); + sheetMap.put("entity", PqDevExcel.SimulateAndDigitalExportData.class); + return Collections.singletonList(sheetMap); + } - List pqMonitorExcels = new ArrayList<>(); + @Override + public List> getContrastExportSheetList(PqDevParam.QueryParam queryParam) { + List pqDevs = this.list(this.getQueryWrapper(queryParam)); + this.visualize(pqDevs); - for (int i = 0; i < pqDevs.size(); i++) { - List pqMonitors = pqMonitorService.listPqMonitorByDevId(pqDevs.get(i).getId()); - if (ObjectUtil.isNotEmpty(pqMonitors)) { - List exportData = BeanUtil.copyToList(pqMonitors, PqMonitorExcel.ExportData.class); - int finalI = i; - exportData.forEach(data -> { - // 给监测点台账添加设备名称 - data.setDevName(pqDevs.get(finalI).getName()); - data.setPtType(dictDataService.getDictDataById(data.getPtType()).getName()); - }); - pqMonitorExcels.addAll(exportData); - } - } + List pqDevExcels = BeanUtil.copyToList(pqDevs, PqDevExcel.ContrastExportData.class); + Map sheetMap1 = new HashMap<>(); + ExportParams exportParams = new ExportParams(); + exportParams.setSheetName("被检设备"); + sheetMap1.put("title", exportParams); + sheetMap1.put("data", pqDevExcels); + sheetMap1.put("entity", PqDevExcel.ContrastExportData.class); - Map sheet2 = new HashMap<>(); - ExportParams exportParams2 = new ExportParams(); - exportParams2.setSheetName("监测点台账"); - sheet2.put("title", exportParams2); - sheet2.put("data", pqMonitorExcels); - sheet2.put("entity", PqMonitorExcel.ExportData.class); + Map sheetMap2 = pqMonitorService.getExportSheetMap(pqDevs); - List> sheetsList = new ArrayList<>(); - sheetsList.add(sheet1); - sheetsList.add(sheet2); + List> sheetList = new ArrayList<>(); + sheetList.add(sheetMap1); + sheetList.add(sheetMap2); - ExcelUtil.exportExcel("被检设备导出数据.xlsx", sheetsList); -// ExcelUtil.exportExcel("被检设备导出数据.xlsx", "被检设备", PqDevExcel.ContrastExportData.class, pqDevExcels); - } else { - List pqDevExcels = BeanUtil.copyToList(pqDevs, PqDevExcel.SimulateAndDigitalExportData.class); - ExcelUtil.exportExcel("被检设备导出数据.xlsx", "被检设备", PqDevExcel.SimulateAndDigitalExportData.class, pqDevExcels); - } - } + return sheetList; } @Override @@ -259,11 +232,11 @@ public class PqDevServiceImpl extends ServiceImpl implements } @Override - public List listBoundByPlanId(PqDevParam.QueryParam param) { + public List listByPlanId(PqDevParam.QueryParam param) { List pqDevList = this.lambdaQuery() .eq(StrUtil.isNotBlank(param.getPlanId()), PqDev::getPlanId, param.getPlanId()) .eq(StrUtil.isNotBlank(param.getName()), PqDev::getName, param.getName()) - .eq(ObjectUtil.isNotNull(param.getCheckState()), PqDev::getCheckState, param.getCheckState()) + .in(ObjectUtil.isNotEmpty(param.getCheckStateList()), PqDev::getCheckState, param.getCheckStateList()) .eq(ObjectUtil.isNotNull(param.getCheckResult()), PqDev::getCheckResult, param.getCheckResult()) .eq(PqDev::getState, DataStateEnum.ENABLE.getCode()).list(); // List> result = pqDevList.stream().map(pqDev -> { @@ -275,6 +248,7 @@ public class PqDevServiceImpl extends ServiceImpl implements return pqDevList; } + @Override public boolean bind(AdPlanParam.BindPlanParam bindPlanParam) { String planId = bindPlanParam.getPlanId(); @@ -282,7 +256,7 @@ public class PqDevServiceImpl extends ServiceImpl implements PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); queryParam.setPlanId(planId); - List existedBoundPqDevIds = this.listBoundByPlanId(queryParam).stream().map(PqDev::getId).collect(Collectors.toList()); + List existedBoundPqDevIds = this.listByPlanId(queryParam).stream().map(PqDev::getId).collect(Collectors.toList()); //共有的(交集) List intersection = existedBoundPqDevIds.stream().filter(pqDevIds::contains).collect(Collectors.toList()); @@ -332,6 +306,34 @@ public class PqDevServiceImpl extends ServiceImpl implements return pqDevVO; } + @Override + public List listNotUnchecked() { + return this.lambdaQuery().ne(PqDev::getCheckState, CheckStateEnum.UNCHECKED.getValue()).eq(PqDev::getState, DataStateEnum.ENABLE.getCode()).list(); + } + + /** + * 获取查询条件wrapper + * + * @param queryParam 查询条件 + * @return + */ + private Wrapper getQueryWrapper(PqDevParam.QueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (ObjectUtil.isNotNull(queryParam)) { + queryWrapper + .like(StrUtil.isNotBlank(queryParam.getName()), "pq_dev.name", queryParam.getName()) + .eq(StrUtil.isNotBlank(queryParam.getPattern()), "pq_dev.pattern", queryParam.getPattern()) + .eq(StrUtil.isNotBlank(queryParam.getManufacturer()), "pq_dev.manufacturer", queryParam.getManufacturer()) + .between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()); + //排序 + if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { + queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); + } + } + queryWrapper.eq("pq_dev.state", DataStateEnum.ENABLE.getCode()).orderBy(true, true, "pq_dev.Create_Time"); + return queryWrapper; + } + /** * 获取检测状态饼状图数据 * diff --git a/device/src/main/java/com/njcn/gather/device/err/pojo/param/PqErrSysParam.java b/device/src/main/java/com/njcn/gather/device/err/pojo/param/PqErrSysParam.java index 75cd62df..b45c292e 100644 --- a/device/src/main/java/com/njcn/gather/device/err/pojo/param/PqErrSysParam.java +++ b/device/src/main/java/com/njcn/gather/device/err/pojo/param/PqErrSysParam.java @@ -19,11 +19,6 @@ import java.util.List; @Data public class PqErrSysParam { - @ApiModelProperty(value = "误差体系名称", required = true) - @NotBlank(message = DevValidMessage.NAME_NOT_BLANK) - @Pattern(regexp = PatternRegex.ERR_SYS_NAME, message = DevValidMessage.NAME_FORMAT_ERROR) - private String name; - @ApiModelProperty(value = "参照标准名称", required = true) @NotBlank(message = DevValidMessage.STANDARD_NAME_NOT_BLANK) @Pattern(regexp = PatternRegex.ERR_SYS_NAME, message = DevValidMessage.STANDARD_NAME_FORMAT_ERROR) diff --git a/device/src/main/java/com/njcn/gather/device/err/service/impl/PqErrSysServiceImpl.java b/device/src/main/java/com/njcn/gather/device/err/service/impl/PqErrSysServiceImpl.java index 0dd807cc..ff94534e 100644 --- a/device/src/main/java/com/njcn/gather/device/err/service/impl/PqErrSysServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/err/service/impl/PqErrSysServiceImpl.java @@ -22,6 +22,7 @@ import com.njcn.gather.system.dictionary.service.IDictTreeService; import com.njcn.web.factory.PageFactory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -183,4 +184,17 @@ public class PqErrSysServiceImpl extends ServiceImpl i // pqErrSys.getPqErrSysDtlsList().forEach(pqErrSysDtls -> pqErrSysDtls.setId(UUID.randomUUID().toString().replaceAll("-", ""))); // return this.save(pqErrSys); // } + + /** + * 生成误差体系名称(标准号+年份+设备等级) + * + * @return 检测源名称 + */ + private String generatePqSourceName(PqErrSysParam param) { + DictData devLevel = dictDataService.getDictDataById(param.getDevLevel()); + if (ObjectUtils.allNotNull(param.getStandardName(), param.getStandardTime(), devLevel)) { + return param.getStandardName() + "-" + param.getStandardTime() + "-" + devLevel.getName(); + } + throw new BusinessException(DevResponseEnum.ERR_SOURCE_GEN_NAME_ERROR); + } } diff --git a/device/src/main/java/com/njcn/gather/device/monitor/service/IPqMonitorService.java b/device/src/main/java/com/njcn/gather/device/monitor/service/IPqMonitorService.java index da7ebe35..d1a90316 100644 --- a/device/src/main/java/com/njcn/gather/device/monitor/service/IPqMonitorService.java +++ b/device/src/main/java/com/njcn/gather/device/monitor/service/IPqMonitorService.java @@ -1,10 +1,12 @@ package com.njcn.gather.device.monitor.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.device.device.pojo.po.PqDev; import com.njcn.gather.device.monitor.pojo.param.PqMonitorParam; import com.njcn.gather.device.monitor.pojo.po.PqMonitor; import java.util.List; +import java.util.Map; /** * @author caozehui @@ -45,4 +47,12 @@ public interface IPqMonitorService extends IService { * @return 修改成功返回true,否则返回false */ boolean updatePqMonitorByDevId(String devId, List paramList); + + /** + * 根据被检设备获取导出监测点数据时所需的SheetMap + * + * @param devList 被检设备列表 + * @return SheetMap + */ + Map getExportSheetMap(List devList); } diff --git a/device/src/main/java/com/njcn/gather/device/monitor/service/impl/PqMonitorServiceImpl.java b/device/src/main/java/com/njcn/gather/device/monitor/service/impl/PqMonitorServiceImpl.java index fa29ea0e..8d30042d 100644 --- a/device/src/main/java/com/njcn/gather/device/monitor/service/impl/PqMonitorServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/monitor/service/impl/PqMonitorServiceImpl.java @@ -1,17 +1,25 @@ package com.njcn.gather.device.monitor.service.impl; +import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.gather.device.device.pojo.po.PqDev; import com.njcn.gather.device.monitor.mapper.PqMonitorMapper; import com.njcn.gather.device.monitor.pojo.param.PqMonitorParam; import com.njcn.gather.device.monitor.pojo.po.PqMonitor; +import com.njcn.gather.device.monitor.pojo.vo.PqMonitorExcel; import com.njcn.gather.device.monitor.service.IPqMonitorService; +import com.njcn.gather.system.dictionary.service.IDictDataService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author caozehui @@ -22,6 +30,8 @@ import java.util.List; @RequiredArgsConstructor public class PqMonitorServiceImpl extends ServiceImpl implements IPqMonitorService { + private final IDictDataService dictDataService; + @Override public List listPqMonitorByDevId(String devId) { return this.lambdaQuery().eq(PqMonitor::getDevId, devId).list(); @@ -50,4 +60,32 @@ public class PqMonitorServiceImpl extends ServiceImpl pqMonitor.setDevId(devId)); return this.saveBatch(pqMonitorList); } + + @Override + public Map getExportSheetMap(List devList) { + List pqMonitorExcels = new ArrayList<>(); + + for (int i = 0; i < devList.size(); i++) { + List pqMonitors = this.listPqMonitorByDevId(devList.get(i).getId()); + if (ObjectUtil.isNotEmpty(pqMonitors)) { + List exportData = BeanUtil.copyToList(pqMonitors, PqMonitorExcel.ExportData.class); + int finalI = i; + exportData.forEach(data -> { + // 给监测点台账添加设备名称 + data.setDevName(devList.get(finalI).getName()); + data.setPtType(dictDataService.getDictDataById(data.getPtType()).getName()); + }); + pqMonitorExcels.addAll(exportData); + } + } + + Map sheetMap = new HashMap<>(); + ExportParams exportParams = new ExportParams(); + exportParams.setSheetName("监测点台账"); + sheetMap.put("title", exportParams); + sheetMap.put("data", pqMonitorExcels); + sheetMap.put("entity", PqMonitorExcel.ExportData.class); + + return sheetMap; + } } diff --git a/device/src/main/java/com/njcn/gather/device/plan/controller/AdPlanController.java b/device/src/main/java/com/njcn/gather/device/plan/controller/AdPlanController.java index a56e31c7..3ed8a73e 100644 --- a/device/src/main/java/com/njcn/gather/device/plan/controller/AdPlanController.java +++ b/device/src/main/java/com/njcn/gather/device/plan/controller/AdPlanController.java @@ -12,6 +12,7 @@ import com.njcn.gather.device.plan.pojo.param.AdPlanParam; import com.njcn.gather.device.plan.pojo.vo.AdPlanVO; import com.njcn.gather.device.plan.service.IAdPlanService; import com.njcn.web.controller.BaseController; +import com.njcn.web.utils.ExcelUtil; import com.njcn.web.utils.HttpResultUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -121,6 +122,17 @@ public class AdPlanController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + @OperateInfo(operateType = OperateType.DOWNLOAD) + @PostMapping("/export") + @ApiOperation("导出检测计划") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public void export(@RequestBody @Validated AdPlanParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("download"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + List> sheetList = adPlanService.getAdPlanEexportSheetList(queryParam); + ExcelUtil.exportExcel("检测计划导出数据.xlsx", sheetList); + } + @OperateInfo @GetMapping("/getPieData") @ApiOperation("获取饼状图数据") diff --git a/device/src/main/java/com/njcn/gather/device/plan/pojo/enums/DataSourceEnum.java b/device/src/main/java/com/njcn/gather/device/plan/pojo/enums/DataSourceEnum.java index 1328d514..afa3caae 100644 --- a/device/src/main/java/com/njcn/gather/device/plan/pojo/enums/DataSourceEnum.java +++ b/device/src/main/java/com/njcn/gather/device/plan/pojo/enums/DataSourceEnum.java @@ -8,13 +8,13 @@ import lombok.Getter; */ @Getter public enum DataSourceEnum { - THREE_SENSE_ACTUAL_TIME_DATA("0","3秒实时数据"), + THREE_SENSE_ACTUAL_TIME_DATA("0", "3秒实时数据"), - MINUTE_STATISTICS_MAX("1","分钟统计数据-最大"), - MINUTE_STATISTICS_MIN("2","分钟统计数据-最小"), - MINUTE_STATISTICS_AVG("3","分钟统计数据-平均"), - MINUTE_STATISTICS_CP95("4","分钟统计数据-CP95"), - RECORDED_DATA("5","录播数据"); + MINUTE_STATISTICS_MAX("1", "分钟统计数据-最大"), + MINUTE_STATISTICS_MIN("2", "分钟统计数据-最小"), + MINUTE_STATISTICS_AVG("3", "分钟统计数据-平均"), + MINUTE_STATISTICS_CP95("4", "分钟统计数据-CP95"), + RECORDED_DATA("5", "录播数据"); private String value; private String msg; @@ -23,4 +23,13 @@ public enum DataSourceEnum { this.value = value; this.msg = msg; } + + public static String getMsgByValue(String value) { + for (DataSourceEnum dataSourceEnum : DataSourceEnum.values()) { + if (dataSourceEnum.getValue().equals(value)) { + return dataSourceEnum.getMsg(); + } + } + return null; + } } diff --git a/device/src/main/java/com/njcn/gather/device/plan/pojo/vo/AdPlanExcel.java b/device/src/main/java/com/njcn/gather/device/plan/pojo/vo/AdPlanExcel.java new file mode 100644 index 00000000..85996323 --- /dev/null +++ b/device/src/main/java/com/njcn/gather/device/plan/pojo/vo/AdPlanExcel.java @@ -0,0 +1,48 @@ +package com.njcn.gather.device.plan.pojo.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.njcn.gather.device.pojo.constant.DevValidMessage; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author caozehui + * @data 2024-12-11 + */ +@Data +public class AdPlanExcel { + @Excel(name = "名称", width = 40) + private String name; + + @Excel(name = "模式", width = 20) + @NotBlank(message = DevValidMessage.PATTERN_NOT_BLANK) + private String pattern; + + @Excel(name = "父计划id", width = 25) + private String fatherPlanId; + + @Excel(name = "数据源", width = 20) + private String datasource; + + @Excel(name = "脚本", width = 50) + private String script; + + @Excel(name = "误差体系", width = 30) + private String errorSys; + + @Excel(name = "是否做守时检测", width = 15, replace = {"否_0", "是_1"}) + private Integer timeCheck; + + @Excel(name = "检测状态", width = 10, replace = {"未检_0", "检测中_1", "检测完成_2"}) + private Integer testState; + + @Excel(name = "报告生成状态", width = 15, replace = {"未生成_0", "部分生成_1", "全部生成_2"}) + private Integer reportState; + + @Excel(name = "检测结果", width = 10, replace = {"不符合_0", "符合_1", "/_2"}) + private Integer result; + + @Excel(name = "数据表后缀", width = 20) + private Integer code; +} diff --git a/device/src/main/java/com/njcn/gather/device/plan/service/IAdPlanService.java b/device/src/main/java/com/njcn/gather/device/plan/service/IAdPlanService.java index e781e5a2..d6706800 100644 --- a/device/src/main/java/com/njcn/gather/device/plan/service/IAdPlanService.java +++ b/device/src/main/java/com/njcn/gather/device/plan/service/IAdPlanService.java @@ -54,4 +54,12 @@ public interface IAdPlanService extends IService { * @return 检测计划列表 */ List> listByPattern(String pattern); + + /** + * 获取检测计划导出时所需的SheetList (包含与之关联的设备信息) + * + * @param queryParam 查询参数 + * @return SheetList + */ + List> getAdPlanEexportSheetList(AdPlanParam.QueryParam queryParam); } diff --git a/device/src/main/java/com/njcn/gather/device/plan/service/impl/AdPlanServiceImpl.java b/device/src/main/java/com/njcn/gather/device/plan/service/impl/AdPlanServiceImpl.java index 19fc48e6..6837d495 100644 --- a/device/src/main/java/com/njcn/gather/device/plan/service/impl/AdPlanServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/plan/service/impl/AdPlanServiceImpl.java @@ -1,8 +1,10 @@ package com.njcn.gather.device.plan.service.impl; +import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -10,11 +12,15 @@ import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.gather.device.device.pojo.enums.TimeCheckResultEnum; import com.njcn.gather.device.device.pojo.param.PqDevParam; +import com.njcn.gather.device.device.pojo.po.PqDev; +import com.njcn.gather.device.device.pojo.vo.PqDevExcel; import com.njcn.gather.device.device.service.IPqDevService; import com.njcn.gather.device.err.service.IPqErrSysService; import com.njcn.gather.device.plan.mapper.AdPlanMapper; +import com.njcn.gather.device.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.device.plan.pojo.param.AdPlanParam; import com.njcn.gather.device.plan.pojo.po.AdPlan; +import com.njcn.gather.device.plan.pojo.vo.AdPlanExcel; import com.njcn.gather.device.plan.pojo.vo.AdPlanVO; import com.njcn.gather.device.plan.service.IAdPlanService; import com.njcn.gather.device.plan.service.IAdPlanSourceService; @@ -25,6 +31,8 @@ import com.njcn.gather.device.pojo.enums.DevResponseEnum; import com.njcn.gather.device.pojo.enums.PlanReportStateEnum; import com.njcn.gather.device.script.service.IPqScriptService; import com.njcn.gather.device.source.pojo.po.PqSource; +import com.njcn.gather.system.dictionary.pojo.po.DictData; +import com.njcn.gather.system.dictionary.service.IDictDataService; import com.njcn.web.factory.PageFactory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -47,19 +55,11 @@ public class AdPlanServiceImpl extends ServiceImpl impleme private final IPqErrSysService pqErrSysService; private final IAdPlanSourceService adPlanSourceService; private final IPqDevService pqDevService; + private final IDictDataService dictDataService; @Override public Page listAdPlan(AdPlanParam.QueryParam queryParam) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (ObjectUtil.isNotNull(queryParam)) { - queryWrapper.eq(StrUtil.isNotBlank(queryParam.getPattern()), "ad_plan.pattern", queryParam.getPattern()) - .eq(StrUtil.isNotBlank(queryParam.getName()), "ad_plan.name", queryParam.getName()) - .eq(ObjectUtil.isNotNull(queryParam.getTestState()), "ad_plan.Test_State", queryParam.getTestState()) - .eq(ObjectUtil.isNotNull(queryParam.getReportState()), "ad_plan.Report_State", queryParam.getReportState()) - .eq(ObjectUtil.isNotNull(queryParam.getResult()), "ad_plan.result", queryParam.getResult()); - } - queryWrapper.eq("ad_plan.state", DataStateEnum.ENABLE.getCode()); - Page page1 = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper); + Page page1 = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), this.getQueryWrapper(queryParam)); List adPlans = page1.getRecords(); List adPlanVOList = adPlans.stream().map(adPlan -> { AdPlanVO adPlanVO = new AdPlanVO(); @@ -129,11 +129,18 @@ public class AdPlanServiceImpl extends ServiceImpl impleme // 修改检测计划、检测源关联 adPlanSourceService.updateAdPlanSource(param.getId(), param.getSourceIds()); if (ObjectUtil.isNotEmpty(param.getDevIds())) { - AdPlanParam.BindPlanParam bindPlanParam = new AdPlanParam.BindPlanParam(); - bindPlanParam.setPlanId(param.getId()); - bindPlanParam.setPqDevIds(param.getDevIds()); - // 修改时,修改绑定设备 - pqDevService.bind(bindPlanParam); + // 修改时,只有未检测过的设备才可以修改绑定设备 + List notUnCheckedIds = pqDevService.listNotUnchecked().stream().map(PqDev::getId).collect(Collectors.toList()); + List intersection = new ArrayList<>(notUnCheckedIds); + intersection.retainAll(param.getDevIds()); + if (ObjectUtil.isEmpty(intersection)) { + AdPlanParam.BindPlanParam bindPlanParam = new AdPlanParam.BindPlanParam(); + bindPlanParam.setPlanId(param.getId()); + bindPlanParam.setPqDevIds(param.getDevIds()); + pqDevService.bind(bindPlanParam); + } else { + throw new BusinessException(DevResponseEnum.HAS_NOT_UNCHECKED_DEVICE); + } } return this.updateById(adPlan); @@ -144,7 +151,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme for (String id : ids) { PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); queryParam.setPlanId(id); - if (ObjectUtils.isNotEmpty(pqDevService.listBoundByPlanId(queryParam))) { + if (ObjectUtils.isNotEmpty(pqDevService.listByPlanId(queryParam))) { throw new BusinessException(DevResponseEnum.PLAN_HAS_DEVICE_BIND); } } @@ -184,4 +191,74 @@ public class AdPlanServiceImpl extends ServiceImpl impleme return result; } + + @Override + public List> getAdPlanEexportSheetList(AdPlanParam.QueryParam queryParam) { + List adPlans = this.list(this.getQueryWrapper(queryParam)); + + List adPlanExcelList = this.getAdPlanExcelList(adPlans); + Map sheetMap1 = new HashMap<>(); + ExportParams exportParams = new ExportParams(); + exportParams.setSheetName("检测计划"); + sheetMap1.put("title", exportParams); + sheetMap1.put("entity", AdPlanExcel.class); + sheetMap1.put("data", adPlanExcelList); + + List> sheetList = new ArrayList<>(); + sheetList.add(sheetMap1); + DictData dictData = dictDataService.getDictDataById(queryParam.getPattern()); + if (ObjectUtil.isNotNull(dictData)) { + if (DevConst.PATTERN_CONTRAST.equals(dictData.getCode())) { + sheetList.add(pqDevService.getExportSheetMap(adPlans.stream().map(AdPlan::getId).collect(Collectors.toList()), PqDevExcel.ContrastExportData.class)); + } else { + sheetList.add(pqDevService.getExportSheetMap(adPlans.stream().map(AdPlan::getId).collect(Collectors.toList()), PqDevExcel.SimulateAndDigitalExportData.class)); + } + } + + return sheetList; + } + + /** + * 获取查询条件wrapper + * + * @param queryParam 查询条件 + * @return + */ + private Wrapper getQueryWrapper(AdPlanParam.QueryParam queryParam) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (ObjectUtil.isNotNull(queryParam)) { + queryWrapper.eq(StrUtil.isNotBlank(queryParam.getPattern()), "ad_plan.pattern", queryParam.getPattern()).eq(StrUtil.isNotBlank(queryParam.getName()), "ad_plan.name", queryParam.getName()).eq(ObjectUtil.isNotNull(queryParam.getTestState()), "ad_plan.Test_State", queryParam.getTestState()).eq(ObjectUtil.isNotNull(queryParam.getReportState()), "ad_plan.Report_State", queryParam.getReportState()).eq(ObjectUtil.isNotNull(queryParam.getResult()), "ad_plan.result", queryParam.getResult()); + } + queryWrapper.eq("ad_plan.state", DataStateEnum.ENABLE.getCode()).orderBy(true, true, "Create_Time"); + return queryWrapper; + } + + /** + * 获取检测计划excel数据 + * + * @param adPlans 检测计划列表 + * @return 检测计划excel数据 + */ + private List getAdPlanExcelList(List adPlans) { + return adPlans.stream().map(adPlan -> { + AdPlanExcel adPlanExcel = new AdPlanExcel(); + BeanUtil.copyProperties(adPlan, adPlanExcel); + adPlanExcel.setPattern(dictDataService.getDictDataById(adPlan.getPattern()).getName()); + StringBuilder sb = new StringBuilder(); + for (String datasourceId : adPlan.getDatasourceId().split(StrUtil.COMMA)) { + sb.append(DataSourceEnum.getMsgByValue(datasourceId)).append(StrUtil.COMMA); + } + adPlanExcel.setDatasource(sb.toString().substring(0, sb.length() - 1)); + adPlanExcel.setScript(pqScriptService.getPqScriptById(adPlan.getScriptId()).getName()); + + sb.delete(0, sb.length()); + + for (String errorSysId : adPlan.getErrorSysId().split(StrUtil.COMMA)) { + sb.append(pqErrSysService.getPqErrSysById(errorSysId).getName()).append(StrUtil.COMMA); + } + adPlanExcel.setErrorSys(sb.toString().substring(0, sb.length() - 1)); + + return adPlanExcel; + }).collect(Collectors.toList()); + } } diff --git a/device/src/main/java/com/njcn/gather/device/pojo/constant/DevValidMessage.java b/device/src/main/java/com/njcn/gather/device/pojo/constant/DevValidMessage.java index 67e79d78..4fca99bd 100644 --- a/device/src/main/java/com/njcn/gather/device/pojo/constant/DevValidMessage.java +++ b/device/src/main/java/com/njcn/gather/device/pojo/constant/DevValidMessage.java @@ -183,4 +183,6 @@ public interface DevValidMessage { String MONITOR_CODE_FORMAT_ERROR = "监测点编码格式错误"; String MONITOR_NUM_NOT_NULL = "监测点序号不能为空"; + + String FACTOR_FLAG_FORMAT_ERROR = "是否支持系数校准格式错误"; } diff --git a/device/src/main/java/com/njcn/gather/device/pojo/enums/DevResponseEnum.java b/device/src/main/java/com/njcn/gather/device/pojo/enums/DevResponseEnum.java index 6af54f90..981e4a68 100644 --- a/device/src/main/java/com/njcn/gather/device/pojo/enums/DevResponseEnum.java +++ b/device/src/main/java/com/njcn/gather/device/pojo/enums/DevResponseEnum.java @@ -9,17 +9,19 @@ public enum DevResponseEnum { IMPORT_DATA_FAIL("A001002", "导入数据失败"), SERIES_AND_DEVKEY_NOT_BLANK("A001003", "加密设备的序列号和设备密钥不能为空"), PQ_SOURCE_GEN_NAME_ERROR("A001004", "检测源生成名称出错"), + ERR_SOURCE_GEN_NAME_ERROR("A001005", "误差体系生成名称出错"), PQ_ERRSYS_GEN_NAME_ERROR("A001005", "误差体系生成名称出错"), PLAN_HAS_DEVICE_BIND("A001006", "检测计划下已绑定设备,请先解绑设备"), PQ_DEV_REPEAT("A001007", "重复的被检设备"), - PQ_DEV_HAS_MONITOR("A001008", "该设备下关联有监测点,请先移除监测点"),; + PQ_DEV_HAS_MONITOR("A001008", "该设备下关联有监测点,请先移除监测点"), + HAS_NOT_UNCHECKED_DEVICE("A001009", "设备在检测中或已被检测过,请勿解除绑定"),; - private final String msg; + private final String message; private final String code; - DevResponseEnum(String code, String msg) { + DevResponseEnum(String code, String message) { this.code = code; - this.msg = msg; + this.message = message; } }