From 55793dcecd74afb9c22458c0b9f567704aaff72b Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Fri, 18 Jul 2025 10:04:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E8=AE=A1=E5=88=92=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PreDetectionController.java | 1 + .../device/controller/PqDevController.java | 32 +- .../controller/PqStandardDevController.java | 23 + .../device/mapper/mapping/PqDevMapper.xml | 7 +- .../gather/device/pojo/param/PqDevParam.java | 10 +- .../device/pojo/vo/ContrastDevExcel.java | 72 ++- .../njcn/gather/device/pojo/vo/PqDevVO.java | 10 + .../gather/device/service/IPqDevService.java | 21 +- .../device/service/IPqStandardDevService.java | 9 + .../device/service/impl/PqDevServiceImpl.java | 156 ++++--- .../impl/PqStandardDevServiceImpl.java | 7 + .../monitor/pojo/vo/PqMonitorExcel.java | 12 - .../monitor/service/IPqMonitorService.java | 12 + .../service/impl/PqMonitorServiceImpl.java | 52 ++- .../plan/controller/AdPlanController.java | 201 +++++++- .../plan/mapper/AdPlanStandardDevMapper.java | 24 + .../mapping/AdPlanStandardDevMapper.xml | 17 + .../gather/plan/pojo/param/AdPlanParam.java | 29 +- .../com/njcn/gather/plan/pojo/po/AdPlan.java | 15 +- .../plan/pojo/po/AdPlanStandardDev.java | 28 ++ .../njcn/gather/plan/pojo/vo/AdPlanExcel.java | 2 +- .../njcn/gather/plan/pojo/vo/AdPlanVO.java | 31 ++ .../plan/pojo/vo/ContrastPlanExcel.java | 43 ++ .../gather/plan/service/IAdPlanService.java | 59 ++- .../service/IAdPlanStandardDevService.java | 65 +++ .../plan/service/impl/AdPlanServiceImpl.java | 435 +++++++++++++----- .../service/impl/AdPlanSourceServiceImpl.java | 10 +- .../impl/AdPlanStandardDevServiceImpl.java | 75 +++ .../pojo/constant/DetectionValidMessage.java | 1 + .../pojo/enums/DetectionResponseEnum.java | 6 +- .../service/impl/PqReportServiceImpl.java | 2 +- .../user/controller/SysUserController.java | 11 + 32 files changed, 1150 insertions(+), 328 deletions(-) create mode 100644 detection/src/main/java/com/njcn/gather/plan/mapper/AdPlanStandardDevMapper.java create mode 100644 detection/src/main/java/com/njcn/gather/plan/mapper/mapping/AdPlanStandardDevMapper.xml create mode 100644 detection/src/main/java/com/njcn/gather/plan/pojo/po/AdPlanStandardDev.java create mode 100644 detection/src/main/java/com/njcn/gather/plan/pojo/vo/ContrastPlanExcel.java create mode 100644 detection/src/main/java/com/njcn/gather/plan/service/IAdPlanStandardDevService.java create mode 100644 detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanStandardDevServiceImpl.java diff --git a/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java b/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java index 0c7cabdd..12f28c0b 100644 --- a/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java +++ b/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java @@ -47,6 +47,7 @@ public class PreDetectionController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + /** * 程控源-源通讯校验 * diff --git a/detection/src/main/java/com/njcn/gather/device/controller/PqDevController.java b/detection/src/main/java/com/njcn/gather/device/controller/PqDevController.java index 1313e650..fef648db 100644 --- a/detection/src/main/java/com/njcn/gather/device/controller/PqDevController.java +++ b/detection/src/main/java/com/njcn/gather/device/controller/PqDevController.java @@ -10,9 +10,11 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.LogUtil; +import com.njcn.gather.device.pojo.enums.CommonEnum; import com.njcn.gather.device.pojo.param.PqDevParam; import com.njcn.gather.device.pojo.vo.PqDevVO; import com.njcn.gather.device.service.IPqDevService; +import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.type.pojo.po.DevType; import com.njcn.gather.type.service.IDevTypeService; import com.njcn.web.controller.BaseController; @@ -138,14 +140,17 @@ public class PqDevController extends BaseController { @ApiImplicitParam(name = "file", value = "被检设备数据文件", required = true), @ApiImplicitParam(name = "patternId", value = "模式id", required = true) }) - public HttpResult importDev(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, HttpServletResponse response) { + public HttpResult importDev(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, @RequestParam("planId") String planId, HttpServletResponse response) { String methodDescribe = getMethodDescribe("importDev"); LogUtil.njcnDebug(log, "{},上传文件为:{}", methodDescribe, file.getOriginalFilename()); boolean fileType = FileUtil.judgeFileIsExcel(file.getOriginalFilename()); if (!fileType) { throw new BusinessException(CommonResponseEnum.FILE_XLSX_ERROR); } - Boolean result = pqDevService.importDev(file, patternId, null, response); + if("null".equals(planId)){ + planId = null; + } + Boolean result = pqDevService.importDev(file, patternId, planId, response); if (result) { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); } else { @@ -164,21 +169,12 @@ public class PqDevController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } - @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/listByPlanId") - @ApiOperation("查询出所有已绑定的设备") - @ApiImplicitParam(name = "planId", value = "计划id", required = true) - public HttpResult> listByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) { - String methodDescribe = getMethodDescribe("listByPlanId"); - LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param); - List pqDevVOList = pqDevService.listByPlanId(param); - - pqDevVOList.forEach(pqDevVO -> { - DevType devType = devTypeService.getById(pqDevVO.getDevType()); - if (ObjectUtil.isNotNull(devType)) { - pqDevVO.setDevChns(devType.getDevChns()); - } - }); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOList, methodDescribe); + @OperateInfo + @GetMapping("/getSelectOptions") + @ApiOperation("根据历史记录信息来获取下拉框内容") + public HttpResult>> getSelectOptions(@RequestParam("pattern") String pattern) { + String methodDescribe = getMethodDescribe("getSelectOptions"); + Map> result = pqDevService.listSelectOptions(pattern); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } } diff --git a/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java b/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java index b505d839..5778f2c1 100644 --- a/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java +++ b/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; @@ -138,5 +139,27 @@ public class PqStandardDevController extends BaseController { pqStandardDevService.importData(file, response); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + + @OperateInfo + @GetMapping("/getAll") + @ApiOperation("获取所有标准设备") + public HttpResult> getAll() { + String methodDescribe = getMethodDescribe("getAll"); + LogUtil.njcnDebug(log, "{},查询所有数据", methodDescribe); + List result = pqStandardDevService.lambdaQuery().eq(PqStandardDev::getState, DataStateEnum.ENABLE.getCode()).list(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/listByPlanId") + @ApiOperation("查询出指定计划已关联的标准设备") + @ApiImplicitParam(name = "planId", value = "计划id", required = true) + public HttpResult> listByPlanId(@RequestParam("planId") String planId) { + String methodDescribe = getMethodDescribe("listByPlanId"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, planId); + List pqDevVOList = pqStandardDevService.listByPlanId(planId); + + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOList, methodDescribe); + } } diff --git a/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqDevMapper.xml b/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqDevMapper.xml index c44cfe22..a5bc4700 100644 --- a/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqDevMapper.xml +++ b/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqDevMapper.xml @@ -85,8 +85,11 @@ left JOIN pq_dev_sub dev_sub ON dev.Id = dev_sub.Dev_Id dev.state = 1 - - AND dev.Plan_Id = #{planId} + + AND dev.Plan_Id in + + #{item} + AND dev.Name LIKE CONCAT('%',#{name},'%') diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/param/PqDevParam.java b/detection/src/main/java/com/njcn/gather/device/pojo/param/PqDevParam.java index ce50dfa9..40ea09eb 100644 --- a/detection/src/main/java/com/njcn/gather/device/pojo/param/PqDevParam.java +++ b/detection/src/main/java/com/njcn/gather/device/pojo/param/PqDevParam.java @@ -166,7 +166,7 @@ public class PqDevParam { private String manufacturer; @ApiModelProperty("检测计划ID") - private String planId; + private List planIdList; @ApiModelProperty("检测状态列表") private List< @@ -191,6 +191,12 @@ public class PqDevParam { @ApiModelProperty("所属电站名称") private String subName; + + @ApiModelProperty("地市") + private String region; + + @ApiModelProperty("是否分配") + private Integer assign; } @Data @@ -213,6 +219,6 @@ public class PqDevParam { @ApiModelProperty("被检设备ID列表") @NotNull(message = DetectionValidMessage.PQ_DEV_IDS_NOT_NULL) - private List pqDevIds; + private List devIds; } } diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java b/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java index 5953c3dd..4c4bd0ca 100644 --- a/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java +++ b/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java @@ -6,7 +6,6 @@ import com.njcn.common.pojo.constant.PatternRegex; import com.njcn.gather.monitor.pojo.vo.PqMonitorExcel; import com.njcn.gather.pojo.constant.DetectionValidMessage; import lombok.Data; -import lombok.EqualsAndHashCode; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.NotBlank; @@ -23,86 +22,79 @@ import java.util.List; @Data public class ContrastDevExcel implements Serializable { - @Excel(name = "所属地市*", width = 30, orderNum = "1") + private String id; + + @Excel(name = "所属地市*", width = 30, needMerge = true, orderNum = "1") private String cityName; - @Excel(name = "所属供电公司*", width = 30, orderNum = "2") + @Excel(name = "所属供电公司*", width = 30, needMerge = true, orderNum = "2") private String gdName; - @Excel(name = "所属电站*", width = 30, orderNum = "3") + @Excel(name = "所属电站*", width = 30, needMerge = true, orderNum = "3") private String subName; - @Excel(name = "设备名称*", width = 20, orderNum = "4") + @Excel(name = "设备名称*", width = 20, needMerge = true, orderNum = "4") @NotBlank(message = DetectionValidMessage.NAME_NOT_BLANK) @Pattern(regexp = PatternRegex.DEV_NAME_REGEX, message = DetectionValidMessage.NAME_FORMAT_ERROR) private String name; - @Excel(name = "设备类型*", width = 20, orderNum = "6") + @Excel(name = "设备序列号*", width = 20, needMerge = true, orderNum = "5") + @NotBlank(message = DetectionValidMessage.FACTORYNO_NOT_BLANK) + private String createId; + + @Excel(name = "设备类型*", width = 20, needMerge = true, orderNum = "6") @NotBlank(message = DetectionValidMessage.DEV_TYPE_NOT_BLANK) private String devType; - @Excel(name = "设备厂家*", width = 20, orderNum = "7") + @Excel(name = "设备厂家*", width = 20, needMerge = true, orderNum = "7") @NotBlank(message = DetectionValidMessage.MANUFACTURER_NOT_BLANK) private String manufacturer; - @Excel(name = "通讯协议*", width = 15, orderNum = "11") + @Excel(name = "被检通道", width = 20, needMerge = true, orderNum = "8") + private String inspectChannel; + + @Excel(name = "固件版本", width = 15, needMerge = true, orderNum = "9") + private String hardwareVersion; + + @Excel(name = "软件版本", width = 15, needMerge = true, orderNum = "10") + private String softwareVersion; + + @Excel(name = "通讯协议*", width = 15, needMerge = true, orderNum = "11") @NotBlank(message = DetectionValidMessage.PROTOCOL_NOT_BLANK) private String protocol; - @Excel(name = "是否加密*", width = 20, replace = {"否_0", "是_1"}, orderNum = "12") + @Excel(name = "是否加密*", width = 20, needMerge = true, replace = {"否_0", "是_1"}, orderNum = "12") @NotNull(message = DetectionValidMessage.ENCRYPTION_NOT_NULL) private Integer encryptionFlag; - @Excel(name = "识别码(当加密时必填)", width = 30, orderNum = "13") + @Excel(name = "识别码(当加密时必填)", width = 30, needMerge = true, orderNum = "13") private String series; - @Excel(name = "秘钥(当加密时必填)", width = 30, orderNum = "14") + @Excel(name = "秘钥(当加密时必填)", width = 30, needMerge = true, orderNum = "14") private String devKey; - @Excel(name = "IP地址*", width = 20, orderNum = "15") + @Excel(name = "IP地址*", width = 20, needMerge = true, orderNum = "15") @NotBlank(message = DetectionValidMessage.IP_NOT_BLANK) @Pattern(regexp = PatternRegex.IP_REGEX, message = DetectionValidMessage.IP_FORMAT_ERROR) private String ip; - @Excel(name = "端口号*", width = 15, orderNum = "16") + @Excel(name = "端口号*", width = 15, needMerge = true, orderNum = "16") @NotNull(message = DetectionValidMessage.PORT_NOT_NULL) @Range(min = 1, max = 65535, message = DetectionValidMessage.PORT_RANGE_ERROR) private Integer port; - @Excel(name = "投运日期(yyyy-MM-dd)*", width = 30, orderNum = "17", format = "yyyy-MM-dd") + @Excel(name = "投运日期(yyyy-MM-dd)*", width = 30, needMerge = true, orderNum = "17", format = "yyyy-MM-dd") @NotNull(message = DetectionValidMessage.CREATE_DATE_NOT_NULL) private LocalDate createDate; - @Excel(name = "定检日期(yyyy-MM-dd)*", width = 30, orderNum = "18", format = "yyyy-MM-dd") + @Excel(name = "定检日期(yyyy-MM-dd)*", width = 30, needMerge = true, orderNum = "18", format = "yyyy-MM-dd") @NotNull(message = DetectionValidMessage.INSPECT_DATE_NOT_NULL) private LocalDate inspectDate; - @Excel(name = "谐波系统设备id*", width = 30, orderNum = "19") + @Excel(name = "谐波系统设备id*", width = 30, needMerge = true, orderNum = "19") @NotBlank(message = DetectionValidMessage.HARM_SYS_ID_NOT_BLANK) private String harmSysId; - @Data - @EqualsAndHashCode(callSuper = true) - public static class ImportExcel extends ContrastDevExcel { - - @ExcelCollection(name = "监测点信息", orderNum = "22") - private List pqMonitorExcelList; - } - - @Data - @EqualsAndHashCode(callSuper = true) - public static class ExportExcel extends ContrastDevExcel { - @Excel(name = "设备序列号*", width = 20, orderNum = "5") - @NotBlank(message = DetectionValidMessage.FACTORYNO_NOT_BLANK) - private String createId; - - @Excel(name = "被检通道", width = 20, orderNum = "8") - private String inspectChannel; - - @Excel(name = "固件版本", width = 15, orderNum = "9") - private String hardwareVersion; - - @Excel(name = "软件版本", width = 15, orderNum = "10") - private String softwareVersion; - } + @ExcelCollection(name = "监测点信息", orderNum = "22") + private List pqMonitorExcelList; } diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/vo/PqDevVO.java b/detection/src/main/java/com/njcn/gather/device/pojo/vo/PqDevVO.java index 2ae06fa1..844858b9 100644 --- a/detection/src/main/java/com/njcn/gather/device/pojo/vo/PqDevVO.java +++ b/detection/src/main/java/com/njcn/gather/device/pojo/vo/PqDevVO.java @@ -101,4 +101,14 @@ public class PqDevVO extends PqDev { * 相对湿度 */ private Float humidity; + + /** + * 绑定的计划名称 + */ + private String boundPlanName; + + /** + * 是否已经分配。0-未分配、1-已分配、2-所有 + */ + private Integer assign; } diff --git a/detection/src/main/java/com/njcn/gather/device/service/IPqDevService.java b/detection/src/main/java/com/njcn/gather/device/service/IPqDevService.java index 24d1ae52..11a6677c 100644 --- a/detection/src/main/java/com/njcn/gather/device/service/IPqDevService.java +++ b/detection/src/main/java/com/njcn/gather/device/service/IPqDevService.java @@ -254,14 +254,29 @@ public interface IPqDevService extends IService { * @param contrastDevExcelList * @param patternId */ - boolean importContrastDev(List contrastDevExcelList, String patternId); + boolean importContrastDev(List contrastDevExcelList, String patternId, String planId); /** * 获取比对式设备导出、导出文件模板的下拉列表 * * @param startCol - * @param isExport 是否是导出模板 * @return */ - List getContrastDevPullDownList(int startCol, boolean isExport); + List getContrastDevPullDownList(int startCol); + + /** + * 根据历史记录来获取下拉框内容 + * + * @param pattern + * @return + */ + Map> listSelectOptions(String pattern); + + /** + * 获取比对式设备导出数据 + * + * @param pqDevVOList 设备id列表 + * @return + */ + List getExportContrastDevData(List pqDevVOList); } diff --git a/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java b/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java index 4092dd74..771ca9e4 100644 --- a/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java +++ b/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java @@ -2,6 +2,7 @@ package com.njcn.gather.device.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.device.pojo.param.PqDevParam; import com.njcn.gather.device.pojo.param.PqStandardDevParam; import com.njcn.gather.device.pojo.po.PqStandardDev; import org.springframework.web.multipart.MultipartFile; @@ -75,4 +76,12 @@ public interface IPqStandardDevService extends IService { * @return */ void importData(MultipartFile file, HttpServletResponse response); + + /** + * 查询出指定计划以关联的标准设备列表 + * + * @param planId + * @return + */ + List listByPlanId(String planId); } diff --git a/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevServiceImpl.java b/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevServiceImpl.java index a8efab07..9c2b3456 100644 --- a/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevServiceImpl.java @@ -8,6 +8,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -30,9 +31,9 @@ import com.njcn.gather.device.pojo.vo.*; import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.device.service.IPqDevSubService; import com.njcn.gather.monitor.pojo.po.PqMonitor; +import com.njcn.gather.monitor.pojo.vo.PqMonitorExcel; import com.njcn.gather.monitor.service.IPqMonitorService; import com.njcn.gather.pojo.enums.DetectionResponseEnum; -import com.njcn.gather.storage.mapper.TableGenMapper; import com.njcn.gather.storage.service.DetectionDataDealService; import com.njcn.gather.system.cfg.pojo.enums.SceneEnum; import com.njcn.gather.system.cfg.pojo.po.SysTestConfig; @@ -78,7 +79,6 @@ public class PqDevServiceImpl extends ServiceImpl implements private final IDictTypeService dictTypeService; private final ISysUserService userService; private final IPqDevSubService pqDevSubService; - private final TableGenMapper tableGenMapper; @Override public Page listPqDevs(PqDevParam.QueryParam queryParam) { @@ -97,6 +97,7 @@ public class PqDevServiceImpl extends ServiceImpl implements page2.getRecords().forEach(p -> { DevType devType = devTypeService.getById(p.getDevType()); if (ObjectUtil.isNotNull(devType)) { + p.setDevType(devType.getName()); p.setDevChns(devType.getDevChns()); p.setDevVolt(devType.getDevVolt()); p.setDevCurr(devType.getDevCurr()); @@ -274,7 +275,7 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public List listByPlanId(PqDevParam.QueryParam param) { - if (StrUtil.isBlank(param.getPlanId())) { + if (CollUtil.isEmpty(param.getPlanIdList())) { return Collections.emptyList(); } List pqDevList = this.baseMapper.selectByQueryParam(param); @@ -381,7 +382,15 @@ public class PqDevServiceImpl extends ServiceImpl implements .eq(StrUtil.isNotBlank(queryParam.getCityName()), "pq_dev.City_Name", queryParam.getCityName()) .eq(StrUtil.isNotBlank(queryParam.getGdName()), "pq_dev.Gd_Name", queryParam.getGdName()) .eq(StrUtil.isNotBlank(queryParam.getSubName()), "pq_dev.Sub_Name", queryParam.getSubName()) + .in(CollectionUtil.isNotEmpty(queryParam.getPlanIdList()), "pq_dev.Plan_Id", queryParam.getPlanIdList()) + .isNotNull(DataStateEnum.ENABLE.getCode().equals(queryParam.getAssign()), "pq_dev.Plan_Id") + .isNull(DataStateEnum.DELETED.getCode().equals(queryParam.getAssign()), "pq_dev.Plan_Id") .between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()); + if (StrUtil.isNotBlank(queryParam.getRegion())) { + queryWrapper.and(w -> w.like(StrUtil.isNotBlank(queryParam.getRegion()), "pq_dev.City_Name", queryParam.getRegion()) + .or().like(StrUtil.isNotBlank(queryParam.getRegion()), "pq_dev.Gd_Name", queryParam.getRegion()) + .or().like(StrUtil.isNotBlank(queryParam.getRegion()), "pq_dev.Sub_Name", queryParam.getRegion())); + } //排序 if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { queryWrapper.orderBy(true, queryParam.getOrderBy().equals(DbConstant.ASC), StrUtil.toUnderlineCase(queryParam.getSortBy())); @@ -460,7 +469,7 @@ public class PqDevServiceImpl extends ServiceImpl implements pqDevSubService.update(wrapper); PqDevParam.QueryParam param = new PqDevParam.QueryParam(); - param.setPlanId(pqDevVo.getPlanId()); + param.setPlanIdList(Arrays.asList(pqDevVo.getPlanId())); List pqDevVOList = this.baseMapper.selectByQueryParam(param); if (CollUtil.isNotEmpty(pqDevVOList)) { Set set = pqDevVOList.stream().map(PqDevVO::getCheckResult).collect(Collectors.toSet()); @@ -505,7 +514,7 @@ public class PqDevServiceImpl extends ServiceImpl implements public long countUnReportDev(String planId) { // 查询该计划下所有设备的检测状态,是否有未生成的 PqDevParam.QueryParam param = new PqDevParam.QueryParam(); - param.setPlanId(planId); + param.setPlanIdList(Arrays.asList(planId)); List devVOList = this.baseMapper.selectByQueryParam(param); long count = devVOList.stream().filter(obj -> !DevReportStateEnum.GENERATED.getValue().equals(obj.getReportState())).count(); return count; @@ -544,7 +553,7 @@ public class PqDevServiceImpl extends ServiceImpl implements public void downloadTemplate(String patternId) { DictData dictData = dictDataService.getDictDataById(patternId); if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { - ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备模板.xlsx", 2, this.getContrastDevPullDownList(0, false), ContrastDevExcel.ImportExcel.class, new ArrayList<>()); + ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备模板.xlsx", 2, this.getContrastDevPullDownList(0), ContrastDevExcel.class, new ArrayList<>()); } else { String currrentScene = sysTestConfigService.getCurrrentScene(); SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); @@ -946,12 +955,9 @@ public class PqDevServiceImpl extends ServiceImpl implements pqDevVOList.addAll(this.baseMapper.listByDevIds(idList)); } - List contrastDevExcels = null; - if (ObjectUtil.isNotEmpty(pqDevVOList)) { - this.visualizeProvinceDev(pqDevVOList); - contrastDevExcels = BeanUtil.copyToList(pqDevVOList, ContrastDevExcel.ExportExcel.class); - } - ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备导出数据.xlsx", 1, this.getContrastDevPullDownList(0, true), ContrastDevExcel.ExportExcel.class, ObjectUtil.isEmpty(contrastDevExcels) ? new ArrayList<>() : contrastDevExcels); + List contrastDevExcelList = this.getExportContrastDevData(pqDevVOList); + + ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备导出数据.xlsx", 2, this.getContrastDevPullDownList(0), ContrastDevExcel.class, ObjectUtil.isEmpty(contrastDevExcelList) ? new ArrayList<>() : contrastDevExcelList); } /** @@ -1112,9 +1118,9 @@ public class PqDevServiceImpl extends ServiceImpl implements params.setNeedVerify(true); params.setHeadRows(2); - List contrastDevExcelList = null; + List contrastDevExcelList = null; try { - ExcelImportResult excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), ContrastDevExcel.ImportExcel.class, params); + ExcelImportResult excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), ContrastDevExcel.class, params); if (excelImportResult.isVerifyFail()) { // 此处前端要做特殊处理,具体可以参考技术监督的数据导入 Workbook failWorkbook = excelImportResult.getFailWorkbook(); @@ -1125,12 +1131,12 @@ public class PqDevServiceImpl extends ServiceImpl implements } catch (Exception e) { throw new BusinessException(DetectionResponseEnum.IMPORT_DATA_FAIL); } - return this.importContrastDev(contrastDevExcelList, patternId); + return this.importContrastDev(contrastDevExcelList, patternId, planId); } @Override @Transactional - public boolean importContrastDev(List contrastDevExcelList, String patternId) { + public boolean importContrastDev(List contrastDevExcelList, String patternId, String planId) { if (CollUtil.isNotEmpty(contrastDevExcelList)) { List monitorList = new ArrayList<>(); List oldDevList = contrastDevExcelList.stream().map(devExcel -> { @@ -1199,6 +1205,7 @@ public class PqDevServiceImpl extends ServiceImpl implements && (dev.getName().equals(pqDev.getName()) || dev.getCreateId().equals(pqDev.getCreateId()))) .count(); if (count == 0) { + pqDev.setPlanId(planId); newDevList.add(pqDev); } }); @@ -1211,7 +1218,9 @@ public class PqDevServiceImpl extends ServiceImpl implements PqDev newDev = newDevList.stream().filter(dev -> dev.getHarmSysId().equals(oldDev.getHarmSysId())).findFirst().orElse(null); if (ObjectUtil.isNotNull(newDev)) { newDevList.remove(newDev); - monitorList.removeIf(monitor -> monitor.getDevId().equals(newDev.getId())); + monitorList.stream() + .filter(monitor -> monitor.getDevId().equals(newDev.getId())) + .forEach(monitor -> monitor.setDevId(oldDev.getId())); BeanUtil.copyProperties(newDev, oldDev, "id"); } }); @@ -1231,21 +1240,13 @@ public class PqDevServiceImpl extends ServiceImpl implements } pqDevSubService.saveBatch(pqDevSubList); - List devIdList = oldDevList1.stream().map(PqDev::getId).collect(Collectors.toList()); if (CollUtil.isNotEmpty(devIdList)) { QueryWrapper wrapper = new QueryWrapper() .in("pq_monitor.Dev_Id", devIdList); pqMonitorService.remove(wrapper); } - monitorList.forEach(monitor -> { - DictData dictData = dictDataService.getDictDataByName(monitor.getConnection()); - if (ObjectUtil.isNotNull(dictData)) { - monitor.setConnection(dictData.getId()); - } else { - throw new BusinessException(DetectionResponseEnum.CONNECTION_NOT_EXIST); - } - }); + pqMonitorService.reverseVisualizeMonitor(monitorList); pqMonitorService.saveBatch(monitorList); return true; } @@ -1253,7 +1254,7 @@ public class PqDevServiceImpl extends ServiceImpl implements } @Override - public List getContrastDevPullDownList(int startCol, boolean isExport) { + public List getContrastDevPullDownList(int startCol) { List pullDowns = new ArrayList<>(); List dictDataList = null; PullDown pullDown = null; @@ -1261,13 +1262,10 @@ public class PqDevServiceImpl extends ServiceImpl implements // 设备类型 List devTypeList = devTypeService.listAll(); pullDown = new PullDown(); - if (isExport) { - pullDown.setFirstCol(startCol + 5); - pullDown.setLastCol(startCol + 5); - } else { - pullDown.setFirstCol(startCol + 4); - pullDown.setLastCol(startCol + 4); - } + + pullDown.setFirstCol(startCol + 5); + pullDown.setLastCol(startCol + 5); + pullDown.setStrings(devTypeList.stream().map(DevType::getName).collect(Collectors.toList())); pullDowns.add(pullDown); @@ -1277,13 +1275,9 @@ public class PqDevServiceImpl extends ServiceImpl implements dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); pullDown = new PullDown(); - if (isExport) { - pullDown.setFirstCol(startCol + 6); - pullDown.setLastCol(startCol + 6); - } else { - pullDown.setFirstCol(startCol + 5); - pullDown.setLastCol(startCol + 5); - } + pullDown.setFirstCol(startCol + 6); + pullDown.setLastCol(startCol + 6); + pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); pullDowns.add(pullDown); } @@ -1294,13 +1288,8 @@ public class PqDevServiceImpl extends ServiceImpl implements dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); pullDown = new PullDown(); - if (isExport) { - pullDown.setFirstCol(startCol + 10); - pullDown.setLastCol(startCol + 10); - } else { - pullDown.setFirstCol(startCol + 6); - pullDown.setLastCol(startCol + 6); - } + pullDown.setFirstCol(startCol + 10); + pullDown.setLastCol(startCol + 10); pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); pullDowns.add(pullDown); @@ -1308,29 +1297,23 @@ public class PqDevServiceImpl extends ServiceImpl implements // 是否加密 pullDown = new PullDown(); - if (isExport) { - pullDown.setFirstCol(startCol + 11); - pullDown.setLastCol(startCol + 11); - } else { - pullDown.setFirstCol(startCol + 7); - pullDown.setLastCol(startCol + 7); - } + pullDown.setFirstCol(startCol + 11); + pullDown.setLastCol(startCol + 11); + pullDown.setStrings(Arrays.asList("是", "否")); pullDowns.add(pullDown); // 接线方式 - if (!isExport) { - dictType = dictTypeService.getByCode("Dev_Connect"); - if (ObjectUtil.isNotNull(dictType)) { - dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); + dictType = dictTypeService.getByCode("Dev_Connect"); + if (ObjectUtil.isNotNull(dictType)) { + dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); + pullDown = new PullDown(); + pullDown.setFirstCol(startCol + 25); + pullDown.setLastCol(startCol + 25); - pullDown = new PullDown(); - pullDown.setFirstCol(startCol + 21); - pullDown.setLastCol(startCol + 21); - pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); - pullDowns.add(pullDown); - } + pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); + pullDowns.add(pullDown); } return pullDowns; @@ -1389,4 +1372,47 @@ public class PqDevServiceImpl extends ServiceImpl implements pqDev.setState(DataStateEnum.ENABLE.getCode()); }); } + + @Override + public List getExportContrastDevData(List pqDevVOList) { + List contrastDevExcels = new ArrayList<>(); + if (ObjectUtil.isNotEmpty(pqDevVOList)) { + this.visualizeProvinceDev(pqDevVOList); + contrastDevExcels.addAll(BeanUtil.copyToList(pqDevVOList, ContrastDevExcel.class)); + contrastDevExcels.forEach(contrastDevExcel -> { + List monitorList = pqMonitorService.listPqMonitorByDevId(contrastDevExcel.getId()); + pqMonitorService.visualizeMonitor(monitorList); + List pqMonitorExcelList = BeanUtil.copyToList(monitorList, PqMonitorExcel.class); + contrastDevExcel.setPqMonitorExcelList(pqMonitorExcelList); + }); + } + return contrastDevExcels; + } + + @Override + public Map> listSelectOptions(String pattern) { + List pqDevList = this.lambdaQuery().eq(PqDev::getPattern, pattern) + .eq(PqDev::getState, DataStateEnum.ENABLE.getCode()) + .list(); + String[] devKeyArray = new String[]{"cityName", "gdName", "subName", "hardwareVersion", "softwareVersion"}; + Map> result = new HashMap<>(); + for (String key : devKeyArray) { + List value = pqDevList.stream().map(dev -> { + String fieldValue = (String) ReflectUtil.getFieldValue(dev, key); + return fieldValue; + }).distinct().filter(StrUtil::isNotBlank).collect(Collectors.toList()); + result.put(key, value); + } + + List pqMonitorList = pqMonitorService.list(); + String[] monitorKeyArray = new String[]{"busbar", "pt", "ct"}; + for (String key : monitorKeyArray) { + List value = pqMonitorList.stream().map(monitor -> { + String fieldValue = (String) ReflectUtil.getFieldValue(monitor, key); + return fieldValue; + }).distinct().filter(StrUtil::isNotBlank).collect(Collectors.toList()); + result.put(key, value); + } + return result; + } } diff --git a/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java b/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java index ada3170a..b212a99e 100644 --- a/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java @@ -21,6 +21,7 @@ import com.njcn.gather.device.pojo.param.PqStandardDevParam; import com.njcn.gather.device.pojo.po.PqStandardDev; import com.njcn.gather.device.pojo.vo.PqStandardDevExcel; import com.njcn.gather.device.service.IPqStandardDevService; +import com.njcn.gather.plan.mapper.AdPlanStandardDevMapper; import com.njcn.gather.pojo.enums.DetectionResponseEnum; import com.njcn.gather.system.dictionary.pojo.po.DictData; import com.njcn.gather.system.dictionary.pojo.po.DictType; @@ -55,6 +56,7 @@ public class PqStandardDevServiceImpl extends ServiceImpl listPqStandardDevs(PqStandardDevParam.QueryParam queryParam) { @@ -148,6 +150,11 @@ public class PqStandardDevServiceImpl extends ServiceImpl listByPlanId(String planId) { + return adPlanStandardDevMapper.listByPlanId(Collections.singletonList(planId)); + } + /** * 导入数据 * diff --git a/detection/src/main/java/com/njcn/gather/monitor/pojo/vo/PqMonitorExcel.java b/detection/src/main/java/com/njcn/gather/monitor/pojo/vo/PqMonitorExcel.java index 2a5e49e5..014d5d65 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/pojo/vo/PqMonitorExcel.java +++ b/detection/src/main/java/com/njcn/gather/monitor/pojo/vo/PqMonitorExcel.java @@ -45,16 +45,4 @@ public class PqMonitorExcel { @Excel(name = "统计间隔*", width = 10, orderNum = "8") @NotNull(message = DetectionValidMessage.STAT_INTERVAL_NOT_NULL) private Integer statInterval; - -// @Data -// @EqualsAndHashCode(callSuper = true) -// public static class ImportData extends PqMonitorExcel { -// -// } -// -// @Data -// @EqualsAndHashCode(callSuper = true) -// public static class ExportData extends PqMonitorExcel { -// -// } } diff --git a/detection/src/main/java/com/njcn/gather/monitor/service/IPqMonitorService.java b/detection/src/main/java/com/njcn/gather/monitor/service/IPqMonitorService.java index 2f2aacad..32d82a5d 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/service/IPqMonitorService.java +++ b/detection/src/main/java/com/njcn/gather/monitor/service/IPqMonitorService.java @@ -49,5 +49,17 @@ public interface IPqMonitorService extends IService { */ boolean deletePqMonitorByDevId(String devId); + /** + * 可视化监测点 + * + * @param monitorList + */ + void visualizeMonitor(List monitorList); + /** + * 逆向可视化监测点 + * + * @param monitorList + */ + void reverseVisualizeMonitor(List monitorList); } diff --git a/detection/src/main/java/com/njcn/gather/monitor/service/impl/PqMonitorServiceImpl.java b/detection/src/main/java/com/njcn/gather/monitor/service/impl/PqMonitorServiceImpl.java index 13a42616..ff1a5a4f 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/service/impl/PqMonitorServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/monitor/service/impl/PqMonitorServiceImpl.java @@ -1,14 +1,17 @@ package com.njcn.gather.monitor.service.impl; 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.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.exception.BusinessException; import com.njcn.gather.monitor.mapper.PqMonitorMapper; import com.njcn.gather.monitor.pojo.param.PqMonitorParam; import com.njcn.gather.monitor.pojo.po.PqMonitor; import com.njcn.gather.monitor.service.IPqMonitorService; -import com.njcn.web.factory.PageFactory; +import com.njcn.gather.pojo.enums.DetectionResponseEnum; +import com.njcn.gather.system.dictionary.pojo.po.DictData; +import com.njcn.gather.system.dictionary.service.IDictDataService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -25,6 +28,7 @@ import java.util.List; @RequiredArgsConstructor public class PqMonitorServiceImpl extends ServiceImpl implements IPqMonitorService { + private final IDictDataService dictDataService; @Override public List listPqMonitorByDevId(String devId) { @@ -57,25 +61,27 @@ public class PqMonitorServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); -// wrapper.eq("pq_monitor.Dev_Id", pqMonitorParam.getDevId()) -// .eq("pq_monitor.Busbar", pqMonitorParam.getName()) -// .eq("pq_monitor.Name", pqMonitorParam.getName()); -// if (isExcludeSelf) { -// if (pqMonitorParam instanceof PqMonitorParam.UpdateParam) { -// wrapper.ne("pq_monitor.Id", ((PqMonitorParam.UpdateParam) pqMonitorParam).getId()); -// } -// } -// int count = this.count(wrapper); -// if (count > 0) { -// throw new BusinessException(DetectionResponseEnum.MONITOR_REPEAT); -// } -// } + @Override + public void visualizeMonitor(List monitorList) { + monitorList.forEach(monitor -> { + DictData dictData = dictDataService.getDictDataById(monitor.getConnection()); + if (ObjectUtil.isNotNull(dictData)) { + monitor.setConnection(dictData.getName()); + } else { + throw new BusinessException(DetectionResponseEnum.CONNECTION_NOT_EXIST); + } + }); + } + + @Override + public void reverseVisualizeMonitor(List monitorList) { + monitorList.forEach(monitor -> { + DictData dictData = dictDataService.getDictDataByName(monitor.getConnection()); + if (ObjectUtil.isNotNull(dictData)) { + monitor.setConnection(dictData.getId()); + } else { + throw new BusinessException(DetectionResponseEnum.CONNECTION_NOT_EXIST); + } + }); + } } diff --git a/detection/src/main/java/com/njcn/gather/plan/controller/AdPlanController.java b/detection/src/main/java/com/njcn/gather/plan/controller/AdPlanController.java index 426c3180..debcd093 100644 --- a/detection/src/main/java/com/njcn/gather/plan/controller/AdPlanController.java +++ b/detection/src/main/java/com/njcn/gather/plan/controller/AdPlanController.java @@ -1,17 +1,27 @@ package com.njcn.gather.plan.controller; +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; import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.LogUtil; +import com.njcn.gather.device.pojo.enums.CommonEnum; +import com.njcn.gather.device.pojo.param.PqDevParam; +import com.njcn.gather.device.pojo.po.PqStandardDev; +import com.njcn.gather.device.pojo.vo.PqDevVO; +import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.plan.pojo.param.AdPlanParam; +import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.vo.AdPlanVO; import com.njcn.gather.plan.service.IAdPlanService; +import com.njcn.gather.type.pojo.po.DevType; +import com.njcn.gather.type.service.IDevTypeService; import com.njcn.web.controller.BaseController; import com.njcn.web.utils.FileUtil; import com.njcn.web.utils.HttpResultUtil; @@ -28,6 +38,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** @@ -42,15 +53,17 @@ import java.util.Map; public class AdPlanController extends BaseController { private final IAdPlanService adPlanService; + private final IPqDevService pqDevService; + private final IDevTypeService devTypeService; @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/list") @ApiOperation("分页查询检测计划") @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) - public HttpResult> list(@RequestBody @Validated AdPlanParam.QueryParam queryParam) { + public HttpResult> list(@RequestBody @Validated AdPlanParam.QueryParam queryParam) { String methodDescribe = getMethodDescribe("list"); LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); - Page result = adPlanService.listAdPlan(queryParam); + List result = adPlanService.listAdPlan(queryParam); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } @@ -77,6 +90,7 @@ public class AdPlanController extends BaseController { String methodDescribe = getMethodDescribe("update"); LogUtil.njcnDebug(log, "{},修改数据为:{}", methodDescribe, updateParam); boolean result = adPlanService.updateAdPlan(updateParam); + if (result) { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); } else { @@ -87,11 +101,11 @@ public class AdPlanController extends BaseController { @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DELETE) @PostMapping("/delete") @ApiOperation("删除检测计划") - @ApiImplicitParam(name = "ids", value = "检测计划id", required = true) - public HttpResult delete(@RequestBody List ids) { + @ApiImplicitParam(name = "ids", value = "计划id列表", required = true) + public HttpResult delete(@RequestBody List ids, @RequestParam("pattern") String pattern) { String methodDescribe = getMethodDescribe("delete"); - LogUtil.njcnDebug(log, "{},删除ID数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids)); - boolean result = adPlanService.deleteAdPlan(ids); + LogUtil.njcnDebug(log, "{},删除ID数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids), pattern); + boolean result = adPlanService.deleteAdPlan(ids, pattern); if (result) { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); } else { @@ -146,7 +160,7 @@ public class AdPlanController extends BaseController { boolean result = adPlanService.importPlan(file, patternId, response); if (result) { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); - }else{ + } else { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); } } @@ -172,19 +186,178 @@ public class AdPlanController extends BaseController { adPlanService.analyse(ids); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @PostMapping("/splitPlan") - @ApiOperation("拆分检测计划") - @ApiImplicitParam(name = "param", value = "检测计划", required = true) - public HttpResult splitPlan(@RequestBody @Validated AdPlanParam.SplitParam param) { - String methodDescribe = getMethodDescribe("splitPlan"); - LogUtil.njcnDebug(log, "{},拆分数据为:{}", methodDescribe, param); - boolean result = adPlanService.splitPlan(param); + @PostMapping("/listByPlanId") + @ApiOperation("查询出所有已绑定的设备") + @ApiImplicitParam(name = "planId", value = "计划id", required = true) + public HttpResult> listByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) { + String methodDescribe = getMethodDescribe("listByPlanId"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param); + + AdPlan plan = adPlanService.getById(param.getPlanIdList().get(0)); + if (CommonEnum.FATHER_ID.getValue().equals(plan.getFatherPlanId())) { + List planList = adPlanService.lambdaQuery().eq(AdPlan::getFatherPlanId, param.getPlanIdList().get(0)).list(); + List planIdList = planList.stream().map(AdPlan::getId).collect(Collectors.toList()); + param.getPlanIdList().addAll(planIdList); + } + List pqDevVOList = pqDevService.listByPlanId(param); + List planList = adPlanService.listByIds(param.getPlanIdList()); + + pqDevVOList.forEach(pqDevVO -> { + DevType devType = devTypeService.getById(pqDevVO.getDevType()); + if (ObjectUtil.isNotNull(devType)) { + pqDevVO.setDevType(devType.getName()); + pqDevVO.setDevVolt(devType.getDevVolt()); + pqDevVO.setDevCurr(devType.getDevCurr()); + pqDevVO.setDevChns(devType.getDevChns()); + } + if (StrUtil.isNotBlank(pqDevVO.getPlanId())) { + AdPlan plan1 = planList.stream().filter(p -> p.getId().equals(pqDevVO.getPlanId())).findFirst().get(); + if (ObjectUtil.isNotNull(plan1) && plan.getId().equals(plan1.getFatherPlanId())) { + pqDevVO.setBoundPlanName(plan1.getName()); + pqDevVO.setAssign(DataStateEnum.ENABLE.getCode()); + } else { + pqDevVO.setAssign(DataStateEnum.DELETED.getCode()); + } + } else { + pqDevVO.setAssign(DataStateEnum.DELETED.getCode()); + } + }); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOList, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/listDevByPlanId") + @ApiOperation("根据计划id分页查询被检设备") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> listDevByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) { + String methodDescribe = getMethodDescribe("listDevByPlanId"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param); + + AdPlan plan = adPlanService.getById(param.getPlanIdList().get(0)); + if (CommonEnum.FATHER_ID.getValue().equals(plan.getFatherPlanId())) { + List planList = adPlanService.lambdaQuery().eq(AdPlan::getFatherPlanId, param.getPlanIdList().get(0)).list(); + List planIdList = planList.stream().map(AdPlan::getId).collect(Collectors.toList()); + param.getPlanIdList().addAll(planIdList); + } + Page pqDevVOPage = pqDevService.listPqDevs(param); + + List planList = adPlanService.listByIds(param.getPlanIdList()); + for (PqDevVO pqDevVO : pqDevVOPage.getRecords()) { + if (StrUtil.isNotBlank(pqDevVO.getPlanId())) { + AdPlan plan1 = planList.stream().filter(p -> p.getId().equals(pqDevVO.getPlanId())).findFirst().get(); + if (!ObjectUtil.isNotNull(plan1) && plan.getId().equals(plan1.getFatherPlanId())) { + pqDevVO.setBoundPlanName(plan1.getName()); + pqDevVO.setAssign(DataStateEnum.ENABLE.getCode()); + } else { + pqDevVO.setAssign(DataStateEnum.DELETED.getCode()); + } + } else { + pqDevVO.setAssign(DataStateEnum.DELETED.getCode()); + } + } + + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOPage, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.UPDATE) + @GetMapping("/updateSubPlanName") + @ApiOperation("修改子计划名称") + @ApiImplicitParams({ + @ApiImplicitParam(name = "planId", value = "计划id", required = true), + @ApiImplicitParam(name = "name", value = "计划名称", required = true) + }) + public HttpResult updateSubPlanName(@RequestParam("planId") String planId, @RequestParam("name") String name) { + String methodDescribe = getMethodDescribe("updateSubPlanName"); + LogUtil.njcnDebug(log, "{},修改数据为:{}", methodDescribe, planId, name); + boolean result = adPlanService.updateSubPlanName(planId, name); if (result) { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); } else { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); } } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/getUnBoundStandardDev") + @ApiOperation("根据父计划ID获取未被子计划绑定的标准设备") + @ApiImplicitParam(name = "fatherPlanId", value = "父计划ID", required = true) + public HttpResult> getUnBoundStandardDev(@RequestParam("fatherPlanId") String fatherPlanId) { + String methodDescribe = getMethodDescribe("getUnBoundStandardDev"); + LogUtil.njcnDebug(log, "{},父计划ID为:{}", methodDescribe, fatherPlanId); + List result = adPlanService.getUnBoundStandardDev(fatherPlanId); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/getBoundStandardDev") + @ApiOperation("根据计划ID获取已绑定的标准设备") + @ApiImplicitParam(name = "planId", value = "计划ID", required = true) + public HttpResult> getBoundStandardDev(@RequestParam("planId") String planId) { + String methodDescribe = getMethodDescribe("getUnBoundStandardDev"); + LogUtil.njcnDebug(log, "{},计划ID为:{}", methodDescribe, planId); + List result = adPlanService.getBoundStandardDev(planId); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/updateBindStandardDev") + @ApiOperation("子计划绑定/解绑标准设备") + @ApiImplicitParam(name = "param", value = "绑定/解绑参数", required = true) + public HttpResult updateBindStandardDev(@RequestBody @Validated PqDevParam.BindPlanParam param) { + String methodDescribe = getMethodDescribe("updateBindStandardDev"); + LogUtil.njcnDebug(log, "{},绑定/解绑参数为:{}", methodDescribe, param); + + boolean result = adPlanService.updateBindStandardDev(param.getPlanId(), param.getDevIds()); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/updateBindDev") + @ApiOperation("子计划绑定/解绑被检设备") + @ApiImplicitParam(name = "param", value = "绑定/解绑参数", required = true) + public HttpResult updateBindDev(@RequestBody @Validated PqDevParam.BindPlanParam param) { + String methodDescribe = getMethodDescribe("updateBindDev"); + LogUtil.njcnDebug(log, "{},绑定/解绑参数为:{}", methodDescribe, param); + + boolean result = adPlanService.updateBindDev(param.getPlanId(), param.getDevIds()); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + +// @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DELETE) +// @PostMapping("/deleteSubPlan") +// @ApiOperation("删除子计划") +// @ApiImplicitParam(name = "ids", value = "子计划id列表", required = true) +// public HttpResult deleteSubPlan(@RequestBody List ids) { +// String methodDescribe = getMethodDescribe("deleteSubPlan"); +// LogUtil.njcnDebug(log, "{},删除ID数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids)); +// boolean result = adPlanService.deleteAdPlan(ids); +// if (result) { +// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); +// } else { +// return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); +// } +// } + + @OperateInfo(operateType = OperateType.DOWNLOAD) + @PostMapping("/exportSubPlan") + @ApiOperation("导出子计划") + @ApiImplicitParam(name = "planId", value = "子计划id", required = true) + public void exportSubPlan(@RequestParam("planId") String planId, HttpServletResponse response) { + String methodDescribe = getMethodDescribe("exportSubPlan"); + LogUtil.njcnDebug(log, "{},导出ID数据为:{}", methodDescribe, planId); + adPlanService.exportSubPlan(planId, response); + } } diff --git a/detection/src/main/java/com/njcn/gather/plan/mapper/AdPlanStandardDevMapper.java b/detection/src/main/java/com/njcn/gather/plan/mapper/AdPlanStandardDevMapper.java new file mode 100644 index 00000000..49bab6d7 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/plan/mapper/AdPlanStandardDevMapper.java @@ -0,0 +1,24 @@ +package com.njcn.gather.plan.mapper; + +import com.github.yulichang.base.MPJBaseMapper; +import com.njcn.gather.device.pojo.po.PqStandardDev; +import com.njcn.gather.plan.pojo.po.AdPlanStandardDev; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author caozehui + * @date 2025-07-16 + */ +public interface AdPlanStandardDevMapper extends MPJBaseMapper { + + /** + * 根据计划id查询标准设备列表 + * + * @param planIdList + * @return + */ + List listByPlanId(@Param("planIdList") List planIdList); +} + diff --git a/detection/src/main/java/com/njcn/gather/plan/mapper/mapping/AdPlanStandardDevMapper.xml b/detection/src/main/java/com/njcn/gather/plan/mapper/mapping/AdPlanStandardDevMapper.xml new file mode 100644 index 00000000..60888d77 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/plan/mapper/mapping/AdPlanStandardDevMapper.xml @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/param/AdPlanParam.java b/detection/src/main/java/com/njcn/gather/plan/pojo/param/AdPlanParam.java index 6ea5d1c9..de9797a3 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/param/AdPlanParam.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/param/AdPlanParam.java @@ -27,12 +27,7 @@ public class AdPlanParam { @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PATTERN_FORMAT_ERROR) private String pattern; -// @ApiModelProperty(value = "父计划ID") -// @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DeviceValidMessage.PATTERN_FORMAT_ERROR) -// private String fatherPlanId; - @ApiModelProperty(value = "检测源ID列表", required = true) - @NotEmpty(message = DetectionValidMessage.SOURCE_IDS_NOT_EMPTY) private List<@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SOURCE_ID_FORMAT_ERROR) String> sourceIds; @ApiModelProperty(value = "数据源ID列表", required = true) @@ -40,8 +35,6 @@ public class AdPlanParam { private List datasourceIds; @ApiModelProperty(value = "检测脚本ID", required = true) - @NotBlank(message = DetectionValidMessage.SCRIPT_ID_NOT_BLANK) - @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SCRIPT_ID_FORMAT_ERROR) private String scriptId; @ApiModelProperty(value = "误差体系ID", required = true) @@ -56,7 +49,6 @@ public class AdPlanParam { private Integer timeCheck; @ApiModelProperty("被检设备ID列表") - @NotNull(message = DetectionValidMessage.PQ_DEV_IDS_NOT_NULL) private List devIds; @ApiModelProperty(value = "是否关联报告") @@ -70,6 +62,16 @@ public class AdPlanParam { @NotBlank(message = DetectionValidMessage.DATA_RULE_NOT_BLANK) private String dataRule; + @ApiModelProperty(value = "父计划ID") + private String fatherPlanId; + + @ApiModelProperty(value = "标准设备ID列表") + private List standardDevIds; + + @ApiModelProperty(value = "测试项ID列表") + private List<@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SOURCE_ID_FORMAT_ERROR)String> testItems; + + /** * 分页查询实体 */ @@ -117,15 +119,4 @@ public class AdPlanParam { private String planId; private List devIds; } - - @Data - public class SplitParam { - @ApiModelProperty(value = "id", required = true) - @NotBlank(message = DetectionValidMessage.ID_NOT_BLANK) - @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PID_FORMAT_ERROR) - private String pId; - - @ApiModelProperty(value = "拆分后的计划", required = true) - private List splitPlans; - } } diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/po/AdPlan.java b/detection/src/main/java/com/njcn/gather/plan/pojo/po/AdPlan.java index a5292ebf..ca54e51c 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/po/AdPlan.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/po/AdPlan.java @@ -90,14 +90,25 @@ public class AdPlan extends BaseEntity implements Serializable { @TableField(updateStrategy = FieldStrategy.IGNORED) private String reportTemplateId; + /** + * 数据处理原则。任意值、部分值、所有值、cp95值、平均值 + */ + private String dataRule; + /** * 状态:0-删除 1-正常 */ private Integer state; + /** - * 数据处理原则。任意值、部分值、所有值、cp95值、平均值 + * 检测项ID,中间使用英文逗号分割 */ - private String dataRule; + private String testItem; + + /** + * 来源 + */ + private String origin; } diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/po/AdPlanStandardDev.java b/detection/src/main/java/com/njcn/gather/plan/pojo/po/AdPlanStandardDev.java new file mode 100644 index 00000000..524d4a2f --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/po/AdPlanStandardDev.java @@ -0,0 +1,28 @@ +package com.njcn.gather.plan.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author caozehui + * @date 2025-07-16 + */ +@Data +@TableName("ad_plan_standard_dev") +public class AdPlanStandardDev implements Serializable { + private static final long serialVersionUID = 153286652772158825L; + /** + * 检测计划id + */ + private String planId; + + /** + * 标准设备id + */ + private String standardDevId; + +} + diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanExcel.java b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanExcel.java index ed7cd045..3418772d 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanExcel.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanExcel.java @@ -41,7 +41,7 @@ public class AdPlanExcel { @NotNull(message = DetectionValidMessage.TIMECHECK_NOT_NULL) private Integer timeCheck; - @Excel(name = "关联报告模版*", width = 20, replace = {"否_0", "是_1"}, needMerge = true, orderNum = "7") + @Excel(name = "关联报告模板*", width = 20, replace = {"否_0", "是_1"}, needMerge = true, orderNum = "7") @NotNull(message = DetectionValidMessage.ASSOCIATE_REPORT_NOT_NULL) private Integer associateReport; diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanVO.java b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanVO.java index da8ef6e7..85c91594 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanVO.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanVO.java @@ -1,5 +1,6 @@ package com.njcn.gather.plan.pojo.vo; +import com.njcn.gather.device.pojo.vo.PqDevVO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; @@ -118,4 +119,34 @@ public class AdPlanVO { * 检测进度 */ private Float progress; + + /** + * 标准设备ID列表 + */ + private List standardDevIds; + + /** + * 标准设备名称 + */ + private String standardDevNameStr; + + /** + * 测试项id列表 + */ + private List testItems; + + /** + * 测试项name列表 + */ + private String testItemNameStr; + + /** + * 计划绑定的被检设备列表 + */ + private List pqDevVOList; + + /** + * 来源 + */ + private String origin; } diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/ContrastPlanExcel.java b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/ContrastPlanExcel.java new file mode 100644 index 00000000..4ea02a8a --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/ContrastPlanExcel.java @@ -0,0 +1,43 @@ +package com.njcn.gather.plan.pojo.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +/** + * @author caozehui + * @data 2025-07-16 + */ +@Data +public class ContrastPlanExcel { + + private String id; + + @Excel(name = "名称*", width = 30, orderNum = "1") + private String name; + + @Excel(name = "标准设备*", width = 50, orderNum = "2") + private String standardDev; + + @Excel(name = "数据源*", width = 50, orderNum = "3") + private String datasourceId; + + @Excel(name = "检测项*", width = 50, orderNum = "4") + private String testItem; + + @Excel(name = "误差体系*", width = 50, orderNum = "5") + private String errorSysId; + + @Excel(name = "数据处理原则*", width = 20, orderNum = "6") + private String dataRule; + + @Excel(name = "是否做守时检测*", width = 30, orderNum = "7") + private Integer timeCheck; + + @Excel(name = "关联报告模板*", width = 30, orderNum = "8", replace = {"否_0", "是_1"}) + private Integer associateReport; + + @Excel(name = "报告模版(当关联报告模版为是时必填)", width = 40, orderNum = "9") + private String reportTemplateId; +} diff --git a/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanService.java b/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanService.java index 4442f909..ed0113d0 100644 --- a/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanService.java +++ b/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanService.java @@ -2,6 +2,8 @@ package com.njcn.gather.plan.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.device.pojo.param.PqDevParam; +import com.njcn.gather.device.pojo.po.PqStandardDev; import com.njcn.gather.plan.pojo.param.AdPlanParam; import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.vo.AdPlanExcel; @@ -24,7 +26,7 @@ public interface IAdPlanService extends IService { * @param queryParam 分页查询参数 * @return 分页查询结果 */ - Page listAdPlan(AdPlanParam.QueryParam queryParam); + List listAdPlan(AdPlanParam.QueryParam queryParam); /** * 新增检测计划 @@ -46,9 +48,11 @@ public interface IAdPlanService extends IService { * 删除检测计划 * * @param ids 检测计划id列表 + * @param pattern 模式Id + * * @return 删除成功则返回true,否则返回false */ - boolean deleteAdPlan(List ids); + boolean deleteAdPlan(List ids,String pattern); /** * 根据模式查询检测计划 @@ -125,11 +129,56 @@ public interface IAdPlanService extends IService { */ boolean importPlan(MultipartFile file, String patternId, HttpServletResponse response); + /** - * 拆分计划 + * 根据父计划Id获取未被子计划绑定的标准设备 * - * @param param + * @param fatherPlanId * @return */ - boolean splitPlan(AdPlanParam.SplitParam param); + List getUnBoundStandardDev(String fatherPlanId); + + /** + * 根据计划Id获取已绑定标准设备 + * + * @param planId + * @return + */ + List getBoundStandardDev(String planId); + + /** + * 修改子计划名称 + * + * @param planId + * @param name + * + * @return + */ + boolean updateSubPlanName(String planId, String name); + + /** + * 子计划绑定/解绑被检设备 + * + * @param planId + * @param pqDevIds + * @return + */ + boolean updateBindDev(String planId, List pqDevIds); + + /** + * 子计划绑定/解绑标准设备 + * + * @param planId + * @param standardDevIds + * @return + */ + boolean updateBindStandardDev(String planId, List standardDevIds); + + /** + * 根据计划Id导出子计划数据 + * + * @param planId + * @param response + */ + void exportSubPlan(String planId, HttpServletResponse response); } diff --git a/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanStandardDevService.java b/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanStandardDevService.java new file mode 100644 index 00000000..bac0bafe --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/plan/service/IAdPlanStandardDevService.java @@ -0,0 +1,65 @@ +package com.njcn.gather.plan.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.plan.pojo.po.AdPlanStandardDev; + +import java.util.List; + +/** + * @author caozehui + * @date 2025-07-16 + */ +public interface IAdPlanStandardDevService extends IService { + + + /** + * 添加检测计划-标准设备关联关系 + * + * @param planId + * @param standardDevIds + * @return + */ + boolean addAdPlanStandardDev(String planId, List standardDevIds); + + /** + * 修改检测计划-标准设备关联关系 + * + * @param planId + * @param standardDevIds + * @return + */ + boolean updateAdPlanStandardDev(String planId, List standardDevIds); + + /** + * 删除检测计划-标准设备关联关系 + * + * @param planIds + * @return + */ + boolean deleteAdPlanStandardDev(List planIds); + + /** + * 删除检测计划-标准设备关联关系 + * + * @param planId + * @param standardDevIds + * @return + */ + boolean deleteAdPlanStandardDev(String planId, List standardDevIds); + + /** + * 根据检测计划id获取标准设备名称字符串 + * + * @param id + * @return + */ + String getStandardDevNameStrByPlanId(String id); + + /** + * 根据检测计划id获取关联关系 + * + * @param planIds + * @return + */ + List listByPlanId(List planIds); +} diff --git a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java index 47c9bfbf..882df622 100644 --- a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java @@ -6,13 +6,13 @@ import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.CharsetUtil; 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.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; @@ -22,7 +22,9 @@ import com.njcn.gather.device.pojo.enums.*; import com.njcn.gather.device.pojo.param.PqDevParam; import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.device.pojo.po.PqDevSub; +import com.njcn.gather.device.pojo.po.PqStandardDev; import com.njcn.gather.device.pojo.vo.CNDevExcel; +import com.njcn.gather.device.pojo.vo.ContrastDevExcel; import com.njcn.gather.device.pojo.vo.PqDevVO; import com.njcn.gather.device.pojo.vo.ProvinceDevExcel; import com.njcn.gather.device.service.IPqDevService; @@ -30,15 +32,19 @@ import com.njcn.gather.device.service.IPqDevSubService; 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.mapper.AdPlanStandardDevMapper; import com.njcn.gather.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.plan.pojo.enums.PlanReportStateEnum; import com.njcn.gather.plan.pojo.param.AdPlanParam; import com.njcn.gather.plan.pojo.po.AdPlan; +import com.njcn.gather.plan.pojo.po.AdPlanStandardDev; import com.njcn.gather.plan.pojo.vo.AdPlanVO; import com.njcn.gather.plan.pojo.vo.CNPlanExcel; +import com.njcn.gather.plan.pojo.vo.ContrastPlanExcel; import com.njcn.gather.plan.pojo.vo.ProvincePlanExcel; import com.njcn.gather.plan.service.IAdPlanService; import com.njcn.gather.plan.service.IAdPlanSourceService; +import com.njcn.gather.plan.service.IAdPlanStandardDevService; import com.njcn.gather.pojo.enums.DetectionResponseEnum; import com.njcn.gather.report.pojo.po.PqReport; import com.njcn.gather.script.pojo.po.PqScript; @@ -61,7 +67,6 @@ import com.njcn.gather.system.dictionary.service.IDictTreeService; import com.njcn.gather.system.dictionary.service.IDictTypeService; import com.njcn.gather.type.pojo.po.DevType; import com.njcn.gather.type.service.IDevTypeService; -import com.njcn.web.factory.PageFactory; import com.njcn.web.utils.ExcelUtil; import com.njcn.web.utils.HttpServletUtil; import com.njcn.web.utils.PoiUtil; @@ -109,63 +114,107 @@ public class AdPlanServiceImpl extends ServiceImpl impleme private final AdHarmonicService adHarmonicService; private final PqDevMapper pqDevMapper; private final IPqDevSubService pqDevSubService; + private final IAdPlanStandardDevService adPlanStandardDevService; + private final AdPlanStandardDevMapper adPlanStandardDevMapper; + private final IAdPlanStandardDevService adPlanContrastStandardDevService; @Override - public Page listAdPlan(AdPlanParam.QueryParam queryParam) { - 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 -> { + public List listAdPlan(AdPlanParam.QueryParam queryParam) { +// Page page1 = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), ); +// List adPlans = page1.getRecords(); +// List adPlanVOList = adPlans.stream().map(adPlan -> { +// AdPlanVO adPlanVO = new AdPlanVO(); +// BeanUtil.copyProperties(adPlan, adPlanVO); +// this.setAdPlanVO(adPlanVO, adPlan); +// return adPlanVO; +// }).collect(Collectors.toList()); +// +// Page page2 = new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)); +// page2.setTotal(page1.getTotal()); +// page2.setOrders(page1.orders()); +// page2.setPages(page1.getPages()); +// page2.setRecords(adPlanVOList); + List adPlanList = this.list(this.getQueryWrapper(queryParam)); + List planVOList = adPlanList.stream().map(adPlan -> { AdPlanVO adPlanVO = new AdPlanVO(); BeanUtil.copyProperties(adPlan, adPlanVO); - adPlanVO.setCreateTime(adPlanVO.getCreateTime().replace("T", " ")); - adPlanVO.setDatasourceIds(Arrays.asList(adPlan.getDatasourceId().split(StrUtil.COMMA))); - if (StrUtil.isNotBlank(adPlan.getReportTemplateId())) { - PqReport report = this.baseMapper.getPqReportById(adPlan.getReportTemplateId()); - adPlanVO.setReportTemplateName(report.getName() + "_" + report.getVersion()); - } - adPlanVO.setScriptName(pqScriptService.getPqScriptById(adPlanVO.getScriptId()).getName()); - adPlanVO.setErrorSysName(pqErrSysService.getPqErrSysById(adPlanVO.getErrorSysId()).getName()); - - List pqSourceList = adPlanSourceService.listPqSourceByPlanId(adPlanVO.getId()); - adPlanVO.setSourceIds(pqSourceList.stream().map(PqSource::getId).collect(Collectors.toList())); - adPlanVO.setSourceName(pqSourceList.stream().map(PqSource::getName).collect(Collectors.toList())); - - PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); - queryParam1.setPlanId(adPlanVO.getId()); - List pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1); - if (CollUtil.isNotEmpty(pqDevVOList)) { - long count = pqDevVOList.stream().filter(pqDev -> CheckStateEnum.CHECKED.getValue().equals(pqDev.getCheckState())).count(); - adPlanVO.setProgress((float) count / pqDevVOList.size()); - } else { - adPlanVO.setProgress(0.0f); - } - + this.setAdPlanVO(adPlanVO, adPlan); return adPlanVO; }).collect(Collectors.toList()); + return planVOList; + } - Page page2 = new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)); - page2.setTotal(page1.getTotal()); - page2.setOrders(page1.orders()); - page2.setPages(page1.getPages()); - page2.setRecords(adPlanVOList); - return page2; + private void setAdPlanVO(AdPlanVO adPlanVO, AdPlan adPlan) { + adPlanVO.setCreateTime(adPlanVO.getCreateTime().replace("T", " ")); + adPlanVO.setDatasourceIds(Arrays.asList(adPlan.getDatasourceId().split(StrUtil.COMMA))); + if (StrUtil.isNotBlank(adPlan.getReportTemplateId())) { + PqReport report = this.baseMapper.getPqReportById(adPlan.getReportTemplateId()); + adPlanVO.setReportTemplateName(report.getName() + "_" + report.getVersion()); + } + if (StrUtil.isNotBlank(adPlanVO.getScriptId())) { + adPlanVO.setScriptName(pqScriptService.getPqScriptById(adPlanVO.getScriptId()).getName()); + } + adPlanVO.setErrorSysName(pqErrSysService.getPqErrSysById(adPlanVO.getErrorSysId()).getName()); + + List pqSourceList = adPlanSourceService.listPqSourceByPlanId(adPlanVO.getId()); + adPlanVO.setSourceIds(pqSourceList.stream().map(PqSource::getId).collect(Collectors.toList())); + adPlanVO.setSourceName(pqSourceList.stream().map(PqSource::getName).collect(Collectors.toList())); + + PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); + queryParam1.setPlanIdList(Arrays.asList(adPlan.getId())); + + List pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1); + if (CollUtil.isNotEmpty(pqDevVOList)) { + long count = pqDevVOList.stream().filter(pqDev -> CheckStateEnum.CHECKED.getValue().equals(pqDev.getCheckState())).count(); + adPlanVO.setProgress((float) count / pqDevVOList.size()); + } else { + adPlanVO.setProgress(0.0f); + } + + if (StrUtil.isNotBlank(adPlan.getTestItem())) { + adPlanVO.setTestItems(Arrays.asList(adPlan.getTestItem().split(StrUtil.COMMA))); + List dictTreeList = dictTreeService.listByIds(adPlanVO.getTestItems()); + adPlanVO.setTestItemNameStr(dictTreeList.stream().map(DictTree::getName).reduce((a, b) -> a + "," + b).orElse("")); + } + + List planIdList = new ArrayList<>(); + planIdList.add(adPlan.getId()); + if (CommonEnum.FATHER_ID.getValue().equals(adPlan.getFatherPlanId())) { + List childrenPlan = this.lambdaQuery().eq(AdPlan::getFatherPlanId, adPlan.getId()).eq(AdPlan::getState, DataStateEnum.ENABLE.getCode()).list(); + List childrenPlanIds = childrenPlan.stream().map(AdPlan::getId).collect(Collectors.toList()); + planIdList.addAll(childrenPlanIds); + } + List pqStandardDevs = adPlanStandardDevMapper.listByPlanId(planIdList); + adPlanVO.setStandardDevIds(pqStandardDevs.stream().map(PqStandardDev::getId).collect(Collectors.toList())); + adPlanVO.setStandardDevNameStr(pqStandardDevs.stream().map(PqStandardDev::getName).reduce((a, b) -> a + "," + b).orElse("")); } @Override @Transactional public boolean addAdPlan(AdPlanParam param) { - this.checkRepeat(param, false); + param.setName(param.getName().trim()); + this.checkRepeat(param, false, CommonEnum.FATHER_ID.getValue()); AdPlan adPlan = new AdPlan(); BeanUtil.copyProperties(param, adPlan); - adPlan.setName(param.getName().trim()); String planId = UUID.randomUUID().toString().replaceAll("-", ""); adPlan.setId(planId); adPlan.setDatasourceId(String.join(StrUtil.COMMA, param.getDatasourceIds())); adPlan.setState(DataStateEnum.ENABLE.getCode()); + // 默认为顶级检测计划 adPlan.setFatherPlanId(CommonEnum.FATHER_ID.getValue()); + + + if (StrUtil.isBlank(param.getFatherPlanId())) { + // 默认为顶级检测计划 + adPlan.setFatherPlanId(CommonEnum.FATHER_ID.getValue()); + } else { + AdPlan plan = this.getById(param.getFatherPlanId()); + adPlan.setFatherPlanId(param.getFatherPlanId()); + adPlan.setOrigin(plan.getName()); + } adPlan.setTestState(CheckStateEnum.UNCHECKED.getValue()); adPlan.setReportState(PlanReportStateEnum.REPORT_STATE_NOT_GENERATED.getValue()); adPlan.setResult(CheckResultEnum.UNCHECKED.getValue()); @@ -179,9 +228,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme adPlan.setReportTemplateId(reportId); } } - - // 新增检测计划、检测源关联 - adPlanSourceService.addAdPlanSource(planId, param.getSourceIds()); + // 绑定被检设备 if (ObjectUtil.isNotEmpty(param.getDevIds())) { // 新增时,绑定设备 pqDevService.bind(planId, param.getDevIds()); @@ -190,10 +237,26 @@ public class AdPlanServiceImpl extends ServiceImpl impleme pqDevService.updatePqDevTimeCheckResult(param.getDevIds(), TimeCheckResultEnum.UNKNOWN); } - //新增相关计划 + //检测项 + if (CollUtil.isNotEmpty(param.getTestItems())) { + adPlan.setTestItem(String.join(StrUtil.COMMA, param.getTestItems())); + } this.save(adPlan); - tableGenService.deleteTable(Arrays.asList(adPlan.getCode().toString())); - tableGenService.genAdNonHarmonicTable(adPlan.getCode().toString()); + + DictData dictData = dictDataService.getDictDataById(param.getPattern()); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + // 关联标准设备 + if (CollUtil.isNotEmpty(param.getStandardDevIds())) { + adPlanStandardDevService.deleteAdPlanStandardDev(param.getFatherPlanId(), param.getStandardDevIds()); + adPlanStandardDevService.addAdPlanStandardDev(planId, param.getStandardDevIds()); + } + } else { + // 关联检测源 + adPlanSourceService.addAdPlanSource(planId, param.getSourceIds()); + tableGenService.deleteTable(Arrays.asList(adPlan.getCode().toString())); + tableGenService.genAdNonHarmonicTable(adPlan.getCode().toString()); + } + return true; } @@ -201,7 +264,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme @Transactional public boolean updateAdPlan(AdPlanParam.UpdateParam param) { param.setName(param.getName().trim()); - this.checkRepeat(param, true); + this.checkRepeat(param, true, CommonEnum.FATHER_ID.getValue()); AdPlan plan1 = this.getById(param.getId()); AdPlan plan2 = new AdPlan(); @@ -210,11 +273,6 @@ public class AdPlanServiceImpl extends ServiceImpl impleme String reportTemplateName = param.getReportTemplateName(); String[] split = reportTemplateName.split("_"); String reportId = this.baseMapper.getReportIdByNameAndVersion(split[0], split[1]); -// if (plan1.getTestState() != CheckStateEnum.UNCHECKED.getValue()) { -// if (!reportId.equals(plan1.getReportTemplateId())) { -// throw new BusinessException(DetectionResponseEnum.CANNOT_CHANGE_REPORT_WHEN_CHECKING); -// } -// } if (StrUtil.isNotBlank(reportId)) { plan2.setReportTemplateId(reportId); } @@ -230,30 +288,67 @@ public class AdPlanServiceImpl extends ServiceImpl impleme if (!plan1.getErrorSysId().equals(param.getErrorSysId())) { throw new BusinessException(DetectionResponseEnum.CANNOT_CHANGE_ERROR_SYS_WHEN_CHECKING); } -// if (param.getAssociateReport() != null && param.getAssociateReport() != plan1.getAssociateReport()) { -// throw new BusinessException(DetectionResponseEnum.CANNOT_CHANGE_REPORT_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())); + if (CollUtil.isNotEmpty(param.getTestItems())) { + plan2.setTestItem(String.join(StrUtil.COMMA, param.getTestItems())); + } + DictData dictData = dictDataService.getDictDataById(param.getPattern()); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + List childrenPlan = this.lambdaQuery().eq(AdPlan::getFatherPlanId, param.getId()).list(); + List childrenPlanIds = childrenPlan.stream().map(AdPlan::getId).collect(Collectors.toList()); + + // 修改与标准设备的关联关系 + List adPlanStandardDevList = adPlanStandardDevService.lambdaQuery().in(CollectionUtil.isNotEmpty(childrenPlanIds), AdPlanStandardDev::getPlanId, childrenPlanIds).list(); + if (CollUtil.isNotEmpty(adPlanStandardDevList)) { + throw new BusinessException(DetectionResponseEnum.PLEASE_UNASSIGN_STANDARD_DEV); + } + //List standardDevIds = adPlanStandardDevList.stream().map(AdPlanStandardDev::getStandardDevId).collect(Collectors.toList()); + //param.getStandardDevIds().removeAll(standardDevIds); + adPlanStandardDevService.updateAdPlanStandardDev(param.getId(), param.getStandardDevIds()); + + // 修改与被检设备的关联关系 + PqDevParam.QueryParam param1 = new PqDevParam.QueryParam(); + param1.setPlanIdList(childrenPlanIds); + List pqDevVOList = pqDevService.listByPlanId(param1); + if (CollUtil.isNotEmpty(pqDevVOList)) { + throw new BusinessException(DetectionResponseEnum.PLEASE_UNASSIGN_DEVICE); + } +// List devIds = pqDevVOList.stream().map(PqDevVO::getId).collect(Collectors.toList()); +// param.getDevIds().removeAll(devIds); + plan2.setTestState(pqDevService.bind(param.getId(), param.getDevIds())); + } else { + // 修改检测计划、检测源关联 + adPlanSourceService.updateAdPlanSource(param.getId(), param.getSourceIds()); + } return this.updateById(plan2); } @Override @Transactional - public boolean deleteAdPlan(List ids) { + public boolean deleteAdPlan(List ids, String pattern) { + DictData dictData = dictDataService.getDictDataById(pattern); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + List planList = this.lambdaQuery().in(AdPlan::getFatherPlanId, ids).eq(AdPlan::getState, DataStateEnum.ENABLE.getCode()).list(); + if (CollUtil.isNotEmpty(planList)) { + throw new BusinessException(DetectionResponseEnum.PLAN_HAS_CHILDREN); + } + + // 删除检测计划、标准设备关联 + adPlanStandardDevService.deleteAdPlanStandardDev(ids); + } + for (String id : ids) { PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); - queryParam.setPlanId(id); + queryParam.setPlanIdList(Arrays.asList(id)); if (ObjectUtils.isNotEmpty(pqDevService.listByPlanId(queryParam))) { throw new BusinessException(DetectionResponseEnum.PLAN_HAS_DEVICE_BIND); } } + // 删除检测计划、检测源关联 adPlanSourceService.deleteAdPlanSourceByPlanIds(ids); @@ -329,6 +424,12 @@ public class AdPlanServiceImpl extends ServiceImpl impleme PqReport report = this.baseMapper.getPqReportById(adPlan.getReportTemplateId()); adPlan.setReportTemplateId(report.getName() + "_" + report.getVersion()); } + if (StrUtil.isNotBlank(adPlan.getTestItem())) { + String[] split = adPlan.getTestItem().split(StrUtil.COMMA); + List dictTreeList = dictTreeService.list(new QueryWrapper().in("id", split).eq("state", DataStateEnum.DELETED.getCode())); + String testItemStr = dictTreeList.stream().map(dictTree -> dictTree.getName()).reduce((a, b) -> a + "," + b).orElse(""); + adPlan.setTestItem(testItemStr); + } }); } @@ -419,7 +520,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } } PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); - queryParam.setPlanId(planId); + queryParam.setPlanIdList(Arrays.asList(planId)); List pqDevVOList1 = pqDevMapper.selectByQueryParam(queryParam); List collect = pqDevVOList1.stream().filter(x -> !x.getCheckState().equals(CheckStateEnum.UNCHECKED.getValue())).collect(Collectors.toList()); if (CollUtil.isEmpty(collect)) { @@ -466,7 +567,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme List allDevList = new ArrayList<>(); for (AdPlan plan : planList) { PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); - queryParam.setPlanId(plan.getId()); + queryParam.setPlanIdList(Arrays.asList(plan.getId())); List pqDevVOList = pqDevMapper.selectByQueryParam(queryParam); pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList()); allDevList.addAll(pqDevVOList); @@ -484,7 +585,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } else { AdPlan plan = planList.get(0); PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); - queryParam.setPlanId(plan.getId()); + queryParam.setPlanIdList(Arrays.asList(plan.getId())); List pqDevVOList = pqDevMapper.selectByQueryParam(queryParam); pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList()); @@ -497,22 +598,62 @@ public class AdPlanServiceImpl extends ServiceImpl impleme @Override public void exportPlan(AdPlanParam.QueryParam queryParam) { - String currrentScene = sysTestConfigService.getCurrrentScene(); - SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); - switch (sceneEnum) { - case PROVINCE_PLATFORM: - this.exportProvincePlan(queryParam); - break; - case LEAVE_FACTORY_TEST: - this.exportCNPlan(queryParam); - break; - case SELF_TEST: - break; - default: - break; + DictData dictData = dictDataService.getDictDataById(queryParam.getPatternId()); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + this.exportContrastPlan(queryParam); + } else { + String currrentScene = sysTestConfigService.getCurrrentScene(); + SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); + switch (sceneEnum) { + case PROVINCE_PLATFORM: + this.exportProvincePlan(queryParam); + break; + case LEAVE_FACTORY_TEST: + this.exportCNPlan(queryParam); + break; + case SELF_TEST: + break; + default: + break; + } } } + private void exportContrastPlan(AdPlanParam.QueryParam queryParam) { + List planList = this.list(this.getQueryWrapper(queryParam)); + this.visualize(planList); + List planExcelList = BeanUtil.copyToList(planList, ContrastPlanExcel.class); + + List> sheetsList = new ArrayList<>(); + planExcelList.forEach(plan -> { + Map sheet = new HashMap<>(); + ExportParams exportParams = new ExportParams(); + exportParams.setSheetName(plan.getName()); + sheet.put("title", exportParams); + sheet.put("entity", ContrastDevExcel.class); + + PqDevParam.QueryParam param = new PqDevParam.QueryParam(); + param.setPlanIdList(Arrays.asList(plan.getId())); + List pqDevVOList = pqDevService.listByPlanId(param); + List exportContrastDevData = pqDevService.getExportContrastDevData(pqDevVOList); + sheet.put("data", exportContrastDevData); + sheetsList.add(sheet); + + String standardDevNameStrByPlanId = adPlanContrastStandardDevService.getStandardDevNameStrByPlanId(plan.getId()); + plan.setStandardDev(standardDevNameStrByPlanId); + }); + + Map sheet1 = new HashMap<>(); + ExportParams exportParams1 = new ExportParams(); + exportParams1.setSheetName("检测计划"); + sheet1.put("title", exportParams1); + sheet1.put("entity", ContrastPlanExcel.class); + sheet1.put("data", planExcelList); + sheetsList.add(0, sheet1); + + ExcelUtil.exportExcel("检测计划导出数据.xlsx", sheetsList); + } + @Override public void downloadTemplate(String patternId) { String currrentScene = sysTestConfigService.getCurrrentScene(); @@ -549,8 +690,73 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } @Override - public boolean splitPlan(AdPlanParam.SplitParam param) { - return false; + public List getUnBoundStandardDev(String fatherPlanId) { + return adPlanStandardDevMapper.listByPlanId(Collections.singletonList(fatherPlanId)); + } + + @Override + public List getBoundStandardDev(String planId) { + return adPlanStandardDevMapper.listByPlanId(Collections.singletonList(planId)); + } + + @Override + @Transactional + public boolean updateSubPlanName(String planId, String name) { + AdPlan plan = new AdPlan(); + plan.setId(planId); + plan.setName(name); + + return this.updateById(plan); + } + + @Override + public boolean updateBindDev(String planId, List pqDevIds) { + List list = new ArrayList<>(); + AdPlan plan = this.getById(planId); + plan.setTestState(pqDevService.bind(planId, pqDevIds)); + list.add(plan); + + // 同时修改父计划的绑定 + AdPlan fatherPlan = this.getById(plan.getFatherPlanId()); + if (ObjectUtil.isNotNull(fatherPlan)) { + fatherPlan.setTestState(pqDevService.bind(fatherPlan.getId(), pqDevIds)); + list.add(fatherPlan); + } + return this.updateBatchById(list); + } + + @Override + @Transactional + public boolean updateBindStandardDev(String planId, List standardDevIds) { + // 处理已有的 + List adPlanStandardDevs = adPlanStandardDevService.listByPlanId(Collections.singletonList(planId)); + // 同时修改父计划的绑定 + AdPlan plan = this.getById(planId); + + List standardDevIds1 = adPlanStandardDevs.stream().map(AdPlanStandardDev::getStandardDevId).collect(Collectors.toList()); + adPlanStandardDevService.addAdPlanStandardDev(plan.getFatherPlanId(), standardDevIds1); + adPlanStandardDevService.deleteAdPlanStandardDev(plan.getFatherPlanId(), standardDevIds); + + adPlanStandardDevService.updateAdPlanStandardDev(planId, standardDevIds); + return true; + } + + @Override + public void exportSubPlan(String planId, HttpServletResponse response) { + // 子计划数据 + AdPlan subPlan = this.getById(planId); + //子计划绑定的标准设备 + List pqStandardDevs = adPlanStandardDevMapper.listByPlanId(Collections.singletonList(planId)); + // 子计划绑定的被检设备 + PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); + queryParam.setPlanIdList(Collections.singletonList(planId)); + + List pqDevList = pqDevService.list(new QueryWrapper().eq("Plan_Id", planId)); + List pqDevSubList = new ArrayList<>(); + if (CollUtil.isNotEmpty(pqDevList)) { + pqDevSubList.addAll(pqDevSubService.list(new QueryWrapper().in("dev_Id", pqDevList.stream().map(PqDev::getId).collect(Collectors.toList())))); + } + } /** @@ -567,7 +773,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme planExcelList.get(i).setSource(pqSources.stream().map(PqSource::getName).collect(Collectors.joining(StrUtil.COMMA))); PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); - queryParam1.setPlanId(planList.get(i).getId()); + queryParam1.setPlanIdList(Arrays.asList(planList.get(i).getId())); List pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1); pqDevService.visualizeProvinceDev(pqDevVOList); List deviceExportData = BeanUtil.copyToList(pqDevVOList, ProvinceDevExcel.class); @@ -590,7 +796,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme planExcelList.get(i).setSource(pqSources.stream().map(PqSource::getName).collect(Collectors.joining(StrUtil.COMMA))); PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); - queryParam1.setPlanId(planList.get(i).getId()); + queryParam1.setPlanIdList(Arrays.asList(planList.get(i).getId())); List pqDevs = pqDevMapper.selectByQueryParam(queryParam1); pqDevService.visualizeCNDev(pqDevs); List deviceExportData = BeanUtil.copyToList(pqDevs, CNDevExcel.class); @@ -642,7 +848,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme AdPlanParam adPlanParam = new AdPlanParam(); adPlanParam.setName(planExcel.getName()); adPlanParam.setPattern(patternId); - checkRepeat(adPlanParam, false); + checkRepeat(adPlanParam, false, CommonEnum.FATHER_ID.getValue()); String planId = UUID.randomUUID().toString().replaceAll("-", ""); adPlans.get(i).setId(planId); @@ -722,7 +928,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme AdPlanParam adPlanParam = new AdPlanParam(); adPlanParam.setName(planExcel.getName()); adPlanParam.setPattern(patternId); - checkRepeat(adPlanParam, false); + checkRepeat(adPlanParam, false, CommonEnum.FATHER_ID.getValue()); String planId = UUID.randomUUID().toString().replaceAll("-", ""); adPlans.get(i).setId(planId); @@ -938,11 +1144,12 @@ public class AdPlanServiceImpl extends ServiceImpl impleme * @param param 计划参数 * @param isExcludeSelf 是否排除自己 */ - private void checkRepeat(AdPlanParam param, boolean isExcludeSelf) { + private void checkRepeat(AdPlanParam param, boolean isExcludeSelf, String fatherPlanId) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("state", DataStateEnum.ENABLE.getCode()) .eq("Name", param.getName()) - .eq("Pattern", param.getPattern()); + .eq("Pattern", param.getPattern()) + .eq("Father_Plan_Id", fatherPlanId); if (isExcludeSelf) { if (param instanceof AdPlanParam.UpdateParam) { queryWrapper.ne("id", ((AdPlanParam.UpdateParam) param).getId()); @@ -950,7 +1157,11 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } int count = this.count(queryWrapper); if (count > 0) { - throw new BusinessException(DetectionResponseEnum.PLAN_REPEATED); + if (!CommonEnum.FATHER_ID.getValue().equals(fatherPlanId)) { + throw new BusinessException(DetectionResponseEnum.PLAN_REPEATED_IN_SAME_LEVEL); + } else { + throw new BusinessException(DetectionResponseEnum.PLAN_REPEATED); + } } } @@ -1109,12 +1320,26 @@ public class AdPlanServiceImpl extends ServiceImpl impleme List pullDowns = new ArrayList<>(); PullDown pullDown = null; - List> maps = pqSourceService.listAllPqSource(patternId); - if (ObjectUtil.isNotEmpty(maps)) { + DictData dictData = dictDataService.getDictDataById(patternId); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + + } else { + List> maps = pqSourceService.listAllPqSource(patternId); + if (ObjectUtil.isNotEmpty(maps)) { + pullDown = new PullDown(); + pullDown.setFirstCol(1); + pullDown.setLastCol(1); + pullDown.setStrings(maps.stream().map(m -> (String) m.get("name")).collect(Collectors.toList())); + pullDowns.add(pullDown); + } + + // 检测脚本 + List> maps1 = pqScriptService.listAllPqScript(null); + List scriptNameList = maps1.stream().map(m -> (String) m.get("name")).collect(Collectors.toList()); pullDown = new PullDown(); - pullDown.setFirstCol(1); - pullDown.setLastCol(1); - pullDown.setStrings(maps.stream().map(m -> (String) m.get("name")).collect(Collectors.toList())); + pullDown.setFirstCol(3); + pullDown.setLastCol(3); + pullDown.setStrings(scriptNameList); pullDowns.add(pullDown); } @@ -1130,14 +1355,6 @@ public class AdPlanServiceImpl extends ServiceImpl impleme pullDowns.add(pullDown); } - // 检测脚本 - List> maps1 = pqScriptService.listAllPqScript(null); - List scriptNameList = maps1.stream().map(m -> (String) m.get("name")).collect(Collectors.toList()); - pullDown = new PullDown(); - pullDown.setFirstCol(3); - pullDown.setLastCol(3); - pullDown.setStrings(scriptNameList); - pullDowns.add(pullDown); // 误差体系 List> maps2 = pqErrSysService.listAllPqErrSys(); List errSysNameList = maps2.stream().map(m -> (String) m.get("name")).collect(Collectors.toList()); @@ -1181,30 +1398,14 @@ public class AdPlanServiceImpl extends ServiceImpl impleme pullDown.setStrings(strings); pullDowns.add(pullDown); - // 检测状态 -// pullDown = new PullDown(); -// pullDown.setFirstCol(9); -// pullDown.setLastCol(9); -// pullDown.setStrings(Arrays.asList(CheckStateEnum.UNCHECKED.getMsg(), CheckStateEnum.CHECKING.getMsg(), CheckStateEnum.CHECKED.getMsg())); -// pullDowns.add(pullDown); - - // 报告生成状态 -// pullDown = new PullDown(); -// pullDown.setFirstCol(10); -// pullDown.setLastCol(10); -// pullDown.setStrings(Arrays.asList(PlanReportStateEnum.REPORT_STATE_NOT_GENERATED.getMsg(), PlanReportStateEnum.REPORT_STATE_PARTIALLY_GENERATED.getMsg(), PlanReportStateEnum.REPORT_STATE_ALL_GENERATED.getMsg())); -// pullDowns.add(pullDown); - - //检测结果 -// pullDown = new PullDown(); -// pullDown.setFirstCol(11); -// pullDown.setLastCol(11); -// pullDown.setStrings(Arrays.asList(CheckResultEnum.UNCHECKED.getMsg(), CheckResultEnum.ACCORD.getMsg(), CheckResultEnum.UNCHECKED.getMsg())); -// pullDowns.add(pullDown); - switch (scene) { case PROVINCE_PLATFORM: - List provinceDevPullDownList = pqDevService.getProvinceDevPullDownList(9); + List provinceDevPullDownList = null; + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + provinceDevPullDownList = pqDevService.getContrastDevPullDownList(9); + } else { + provinceDevPullDownList = pqDevService.getProvinceDevPullDownList(9); + } pullDowns.addAll(provinceDevPullDownList); break; case LEAVE_FACTORY_TEST: diff --git a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanSourceServiceImpl.java b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanSourceServiceImpl.java index 4c60df7e..51cac59d 100644 --- a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanSourceServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanSourceServiceImpl.java @@ -1,6 +1,7 @@ package com.njcn.gather.plan.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.gather.plan.mapper.AdPlanSourceMapper; import com.njcn.gather.plan.pojo.po.AdPlanSource; @@ -44,9 +45,12 @@ public class AdPlanSourceServiceImpl extends ServiceImpl planIds) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.in("ad_plan_source.Plan_Id", planIds); - return this.remove(queryWrapper); + if(CollectionUtils.isNotEmpty(planIds)){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("ad_plan_source.Plan_Id", planIds); + return this.remove(queryWrapper); + } + return false; } @Override diff --git a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanStandardDevServiceImpl.java b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanStandardDevServiceImpl.java new file mode 100644 index 00000000..5eef11e8 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanStandardDevServiceImpl.java @@ -0,0 +1,75 @@ +package com.njcn.gather.plan.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.gather.device.pojo.po.PqStandardDev; +import com.njcn.gather.plan.mapper.AdPlanStandardDevMapper; +import com.njcn.gather.plan.pojo.po.AdPlanStandardDev; +import com.njcn.gather.plan.service.IAdPlanStandardDevService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @author caozehui + * @date 2025-07-16 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class AdPlanStandardDevServiceImpl extends ServiceImpl implements IAdPlanStandardDevService { + + @Override + public boolean addAdPlanStandardDev(String planId, List standardDevIds) { + List adPlanStandardDevList = new ArrayList<>(); + for (String standardDevId : standardDevIds) { + AdPlanStandardDev adPlanStandardDev = new AdPlanStandardDev(); + adPlanStandardDev.setPlanId(planId); + adPlanStandardDev.setStandardDevId(standardDevId); + adPlanStandardDevList.add(adPlanStandardDev); + } + return this.saveBatch(adPlanStandardDevList); + } + + @Override + public boolean updateAdPlanStandardDev(String planId, List standardDevIds) { + this.deleteAdPlanStandardDev(Collections.singletonList(planId)); + return this.addAdPlanStandardDev(planId, standardDevIds); + } + + @Override + public boolean deleteAdPlanStandardDev(List planIds) { + if (CollectionUtil.isNotEmpty(planIds)) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("Plan_Id", planIds); + return this.remove(queryWrapper); + } + return false; + } + + @Override + public boolean deleteAdPlanStandardDev(String planId, List standardDevIds) { + if (CollectionUtil.isNotEmpty(standardDevIds)) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("Plan_Id", planId).in("Standard_Dev_Id", standardDevIds); + return this.remove(queryWrapper); + } + return false; + } + + @Override + public String getStandardDevNameStrByPlanId(String id) { + List pqStandardDevs = this.baseMapper.listByPlanId(Collections.singletonList(id)); + return pqStandardDevs.stream().map(PqStandardDev::getName).reduce((a, b) -> a + "," + b).orElse(""); + } + + @Override + public List listByPlanId(List planIds) { + return this.lambdaQuery().in(AdPlanStandardDev::getPlanId, planIds).list(); + } +} diff --git a/detection/src/main/java/com/njcn/gather/pojo/constant/DetectionValidMessage.java b/detection/src/main/java/com/njcn/gather/pojo/constant/DetectionValidMessage.java index c7e6f0aa..f5c2d3fd 100644 --- a/detection/src/main/java/com/njcn/gather/pojo/constant/DetectionValidMessage.java +++ b/detection/src/main/java/com/njcn/gather/pojo/constant/DetectionValidMessage.java @@ -195,4 +195,5 @@ public interface DetectionValidMessage { String CREATE_DATE_NOT_NULL = "投运日期不能为空"; String INSPECT_DATE_NOT_NULL = "定检日期不能为空"; String HARM_SYS_ID_NOT_BLANK = "谐波系统设备id不能为空"; + String FATHER_PLAN_ID_FORMAT_ERROR = "父计划ID格式错误"; } diff --git a/detection/src/main/java/com/njcn/gather/pojo/enums/DetectionResponseEnum.java b/detection/src/main/java/com/njcn/gather/pojo/enums/DetectionResponseEnum.java index 27368e1d..8d956699 100644 --- a/detection/src/main/java/com/njcn/gather/pojo/enums/DetectionResponseEnum.java +++ b/detection/src/main/java/com/njcn/gather/pojo/enums/DetectionResponseEnum.java @@ -68,7 +68,11 @@ public enum DetectionResponseEnum { IMPORT_FLAG_NOT_UPDATE("A02091", "从谐波系统导入的设备不支持修改"), CONNECTION_NOT_EXIST("A02092", "该连接不存在,请先在\"接线方式\"字典中添加"), MONITOR_NUM_OUT_OF_RANGE("A02093", "检测点线路号超出范围,请检查线路号"), - MONITOR_NUM_REPEAT("A02094", "改被检设备下存在相同线路号的监测点"); + MONITOR_NUM_REPEAT("A02094", "改被检设备下存在相同线路号的监测点"), + PLAN_HAS_CHILDREN("A02095", "该计划下存在子计划,请先删除子计划"), + PLAN_REPEATED_IN_SAME_LEVEL("A02096", "该父计划下存在同名的子计划"), + PLEASE_UNASSIGN_STANDARD_DEV("A02097","存在已分配给子计划的标准设备,请先解除分配" ), + PLEASE_UNASSIGN_DEVICE("A02098", "存在已分配给计划的被检设备,请先解除分配"); private final String code; diff --git a/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java b/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java index 28dff0da..09d30386 100644 --- a/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java @@ -1376,7 +1376,7 @@ public class PqReportServiceImpl extends ServiceImpl i // 判断计划下所有设备是否都已归档,如果是则将计划改为已完成 // 查询该计划下所有设备的检测状态,是否有不为归档的 PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); - queryParam.setPlanId(tempPqDevVO.getPlanId()); + queryParam.setPlanIdList(Arrays.asList(tempPqDevVO.getPlanId())); List pqDevVOList1 = pqDevMapper.selectByQueryParam(queryParam); long count = pqDevVOList1.stream().filter(obj -> !CheckStateEnum.DOCUMENTED.getValue().equals(obj.getCheckState())).count(); diff --git a/user/src/main/java/com/njcn/gather/user/user/controller/SysUserController.java b/user/src/main/java/com/njcn/gather/user/user/controller/SysUserController.java index 481bae92..d1345004 100644 --- a/user/src/main/java/com/njcn/gather/user/user/controller/SysUserController.java +++ b/user/src/main/java/com/njcn/gather/user/user/controller/SysUserController.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; @@ -112,5 +113,15 @@ public class SysUserController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); } } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @GetMapping("/getAll") + @ApiOperation("获取所有用户") + public HttpResult> getAll() { + String methodDescribe = getMethodDescribe("getAll"); + LogUtil.njcnDebug(log, "{},查询所有用户", methodDescribe); + List result = sysUserService.lambdaQuery().eq(SysUser::getState, DataStateEnum.ENABLE.getCode()).list(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } }