diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java index f96bf12c..e9c89ba7 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java @@ -19,9 +19,10 @@ import com.njcn.gather.detection.pojo.vo.*; import com.njcn.gather.detection.service.impl.DetectionServiceImpl; import com.njcn.gather.detection.util.socket.*; import com.njcn.gather.device.pojo.enums.CommonEnum; -import com.njcn.gather.device.pojo.po.PqDev; +import com.njcn.gather.device.pojo.po.PqDevSub; import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.service.IPqDevService; +import com.njcn.gather.device.service.IPqDevSubService; import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.service.IAdPlanService; import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam; @@ -83,6 +84,7 @@ public class SocketDevResponseService { private final IPqDevService iPqDevService; + private final IPqDevSubService iPqDevSubService; private final IPqScriptDtlsService scriptDtlsService; private final IPqScriptDtlsService pqScriptDtlsService; private final DetectionServiceImpl detectionServiceImpl; @@ -474,14 +476,14 @@ public class SocketDevResponseService { //修改设备表Factor_Check_Result字段 XiNumberManager.devXiNumDataMap.forEach((key, val) -> { DevXiNumData small = XiNumberManager.smallDevXiNumDataMap.get(key); - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(PqDev::getId, FormalTestManager.devIdMapComm.get(key)); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(PqDevSub::getDevId, FormalTestManager.devIdMapComm.get(key)); if (val.getResultFlag() == 0 || small.getResultFlag() == 0) { - updateWrapper.set(PqDev::getFactorCheckResult, 0); + updateWrapper.set(PqDevSub::getFactorCheckResult, 0); } else { - updateWrapper.set(PqDev::getFactorCheckResult, 1); + updateWrapper.set(PqDevSub::getFactorCheckResult, 1); } - iPqDevService.update(updateWrapper); + iPqDevSubService.update(updateWrapper); updateWrapper.clear(); }); } @@ -1647,14 +1649,15 @@ public class SocketDevResponseService { /** * 相须校验-从幅值、相角两个维度判断是否合格 * - * @param channelListDTO - * @param devData - * @param devPhase + * @param channelListDTO 源下发的脚本 + * @param devData 装置返回幅值数据 + * @param devPhase 装置返回相角数据 * @return */ private Boolean getaBoolean(SourceIssue.ChannelListDTO channelListDTO, Double devData, Double devPhase) { Boolean isDev = false; Boolean isPhase = false; + if (ObjectUtil.isNotNull(devData)) { isDev = NumberUtil.isIn(BigDecimal.valueOf(devData), BigDecimal.valueOf(channelListDTO.getFAmp() * 0.95), diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/po/DevData.java b/detection/src/main/java/com/njcn/gather/detection/pojo/po/DevData.java index 178779a9..3d974cc1 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/po/DevData.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/po/DevData.java @@ -18,6 +18,9 @@ public class DevData { @JSONField(name = "Time", ordinal = 1) private String time; + /** + * 设备ip_通道号 这种形式 + */ @JSONField(name = "ID", ordinal = 2) private String id; diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java index b55346b3..8d554dae 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java @@ -73,7 +73,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { @Value("${socket.source.port:61000}") private Integer port; - private final SocketSourceResponseService sourceResponseService; + //private final SocketSourceResponseService sourceResponseService; @Override @@ -126,7 +126,8 @@ public class PreDetectionServiceImpl implements PreDetectionService { msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue()); msg.setData(JSON.toJSONString(sourceParam)); param.setSourceId(sourceParam.getSourceId()); - NettyClient.socketClient(ip, port, param, JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService)); +// NettyClient.socketClient(ip, port, param, JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService)); + NettyClient.socketClient(ip, port, param, JSON.toJSONString(msg), new NettySourceClientHandler(param, socketSourceResponseService)); } else { throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); } @@ -152,7 +153,8 @@ public class PreDetectionServiceImpl implements PreDetectionService { socketMsg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue()); socketMsg.setData(JSON.toJSONString(sourceParam)); //建立与源控程序的socket连接, - NettyClient.socketClient(ip, port, param, JSON.toJSONString(socketMsg), new NettySourceClientHandler(param, sourceResponseService)); +// NettyClient.socketClient(ip, port, param, JSON.toJSONString(socketMsg), new NettySourceClientHandler(param, sourceResponseService)); + NettyClient.socketClient(ip, port, param, JSON.toJSONString(socketMsg), new NettySourceClientHandler(param, socketSourceResponseService)); } else { throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); } @@ -170,7 +172,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { socketMsg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue()); socketMsg.setData(JSON.toJSONString(sourceParam)); - NettyClient.socketClient(ip, port, param, JSON.toJSONString(socketMsg), new NettySourceClientHandler(param, sourceResponseService)); + NettyClient.socketClient(ip, port, param, JSON.toJSONString(socketMsg), new NettySourceClientHandler(param, socketSourceResponseService)); } else { throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/HeartbeatHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/HeartbeatHandler.java index 98cd3f97..2e4fe12f 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/HeartbeatHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/HeartbeatHandler.java @@ -58,7 +58,7 @@ public class HeartbeatHandler extends SimpleChannelInboundHandler { super.channelInactive(ctx); } - // 每30秒发送一次心跳 + // 每10秒发送一次心跳 private void scheduleHeartbeat(ChannelHandlerContext ctx) { heartbeatExecutor.scheduleAtFixedRate(() -> { if (ctx.channel().isActive()) { diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java index 3cb48661..eccf0268 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java @@ -63,6 +63,9 @@ public class NettyClient { .addLast(new StringEncoder(CharsetUtil.UTF_8)) .addLast(new HeartbeatHandler(param, dev)) //空闲状态的handler + //readerIdleTimeSeconds:在指定的秒数内如果没有读取到任何数据,则触发IdleState.READER_IDLE事件。 + //writerIdleTimeSeconds:在指定的秒数内如果没有写入任何数据,则触发IdleState.WRITER_IDLE事件。 + //allIdleTimeSeconds:在指定的秒数内如果没有发生任何读取或写入操作,则触发IdleState.ALL_IDLE事件。 .addLast(new IdleStateHandler(60, 0, 0, TimeUnit.SECONDS)) .addLast(handler); } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java index b4f1d889..eb2537b6 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java @@ -105,7 +105,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler { @Override public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { Boolean fly = false; - if (evt instanceof IdleStateEvent) { + if (evt instanceof IdleStateEvent) { //IdleState.在一段时间内没有收到任何消息时,会触发该事件 if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) { System.out.println(LocalDateTime.now() + "devHandler触发读超时函数**************************************"); if (!FormalTestManager.hasStopFlag) { diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java index 398d978a..f56aa9bd 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java @@ -1,16 +1,10 @@ package com.njcn.gather.detection.util.socket.cilent; -import com.alibaba.fastjson.JSON; import com.njcn.gather.detection.handler.SocketSourceResponseService; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.param.PreDetectionParam; -import com.njcn.gather.detection.pojo.vo.SocketDataMsg; -import com.njcn.gather.detection.pojo.vo.SocketMsg; -import com.njcn.gather.detection.pojo.vo.WebSocketVO; import com.njcn.gather.detection.util.socket.CnSocketUtil; -import com.njcn.gather.detection.util.socket.MsgUtil; import com.njcn.gather.detection.util.socket.SocketManager; -import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.timeout.IdleState; @@ -21,7 +15,6 @@ import lombok.RequiredArgsConstructor; import java.io.IOException; import java.net.ConnectException; import java.net.ProtocolException; -import java.util.Objects; /** @@ -71,10 +64,10 @@ public class NettySourceClientHandler extends SimpleChannelInboundHandler { // System.out.println("断线重连......"); @@ -125,7 +118,7 @@ public class NettySourceClientHandler extends SimpleChannelInboundHandler importDev(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, HttpServletResponse response) { + public HttpResult importDev(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, 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); } - pqDevService.importDev(file, patternId, null, response); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + Boolean result = pqDevService.importDev(file, patternId, null, response); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } } @OperateInfo(info = LogEnum.BUSINESS_COMMON) @@ -169,17 +171,14 @@ public class PqDevController extends BaseController { public HttpResult> listByPlanId(@RequestBody @Validated PqDevParam.QueryParam param) { String methodDescribe = getMethodDescribe("listByPlanId"); LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param); - List pqDevList = pqDevService.listByPlanId(param); + List pqDevVOList = pqDevService.listByPlanId(param); - List result = BeanUtil.copyToList(pqDevList, PqDevVO.class); - result.forEach(pqDevVO -> { + pqDevVOList.forEach(pqDevVO -> { DevType devType = devTypeService.getById(pqDevVO.getDevType()); if (ObjectUtil.isNotNull(devType)) { pqDevVO.setDevChns(devType.getDevChns()); - pqDevVO.setDevVolt(devType.getDevVolt()); - pqDevVO.setDevCurr(devType.getDevCurr()); } }); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pqDevVOList, 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 new file mode 100644 index 00000000..b505d839 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java @@ -0,0 +1,142 @@ +package com.njcn.gather.device.controller; + +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.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.param.PqStandardDevParam; +import com.njcn.gather.device.pojo.po.PqStandardDev; +import com.njcn.gather.device.service.IPqStandardDevService; +import com.njcn.web.controller.BaseController; +import com.njcn.web.utils.FileUtil; +import com.njcn.web.utils.HttpResultUtil; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + + +/** + * @author caozehui + * @date 2025-07-02 + */ +@Slf4j +@Api(tags = "标准设备管理") +@RestController +@RequestMapping("/pqStandardDev") +@RequiredArgsConstructor +public class PqStandardDevController extends BaseController { + private final IPqStandardDevService pqStandardDevService; + + @OperateInfo + @PostMapping("/list") + @ApiOperation("分页查询标准设备") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> list(@RequestBody PqStandardDevParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + Page result = pqStandardDevService.listPqStandardDevs(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo + @GetMapping("/getById") + @ApiOperation("根据id查询标准设备") + @ApiImplicitParam(name = "id", value = "标准设备id", required = true) + public HttpResult getById(@RequestParam("id") String id) { + String methodDescribe = getMethodDescribe("getById"); + LogUtil.njcnDebug(log, "{},查询ID为:{}", methodDescribe, id); + PqStandardDev result = pqStandardDevService.getPqStandardDevById(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(operateType = OperateType.ADD) + @PostMapping("/add") + @ApiOperation("新增标准设备") + @ApiImplicitParam(name = "param", value = "标准设备", required = true) + public HttpResult add(@RequestBody @Validated PqStandardDevParam param) { + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},新增数据为:{}", methodDescribe, param); + boolean result = pqStandardDevService.addPqStandardDev(param); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(operateType = OperateType.UPDATE) + @PostMapping("/update") + @ApiOperation("修改标准设备") + @ApiImplicitParam(name = "param", value = "标准设备", required = true) + public HttpResult update(@RequestBody @Validated PqStandardDevParam.UpdateParam param) { + String methodDescribe = getMethodDescribe("update"); + LogUtil.njcnDebug(log, "{},修改数据为:{}", methodDescribe, param); + boolean result = pqStandardDevService.updatePqStandardDev(param); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(operateType = OperateType.DELETE) + @PostMapping("/delete") + @ApiOperation("删除标准设备") + @ApiImplicitParam(name = "ids", value = "标准设备id", required = true) + public HttpResult delete(@RequestBody List ids) { + String methodDescribe = getMethodDescribe("delete"); + LogUtil.njcnDebug(log, "{},删除ID数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids)); + boolean result = pqStandardDevService.deletePqStandardDevs(ids); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DOWNLOAD) + @PostMapping("/export") + @ApiOperation("批量导出标准设备") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public void export(@RequestBody PqStandardDevParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("export"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + pqStandardDevService.export(queryParam); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DOWNLOAD) + @PostMapping("/downloadTemplate") + @ApiOperation("下载标准设备导入文件模板") + public void downloadTemplate() { + pqStandardDevService.downloadTemplate(); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.UPLOAD) + @PostMapping("/import") + @ApiOperation("导入标准设备") + @ApiImplicitParam(name = "file", value = "导入文件", required = true) + public HttpResult importData(@RequestParam("file") MultipartFile file, HttpServletResponse response) { + String methodDescribe = getMethodDescribe("importData"); + LogUtil.njcnDebug(log, "{},导入文件为:{}", methodDescribe, file.getOriginalFilename()); + boolean fileType = FileUtil.judgeFileIsExcel(file.getOriginalFilename()); + if (!fileType) { + throw new BusinessException(CommonResponseEnum.FILE_XLSX_ERROR); + } + pqStandardDevService.importData(file, response); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } +} + diff --git a/detection/src/main/java/com/njcn/gather/device/mapper/PqDevMapper.java b/detection/src/main/java/com/njcn/gather/device/mapper/PqDevMapper.java index f939aa9f..30dbd21e 100644 --- a/detection/src/main/java/com/njcn/gather/device/mapper/PqDevMapper.java +++ b/detection/src/main/java/com/njcn/gather/device/mapper/PqDevMapper.java @@ -1,7 +1,9 @@ package com.njcn.gather.device.mapper; import com.github.yulichang.base.MPJBaseMapper; +import com.njcn.gather.device.pojo.param.PqDevParam; import com.njcn.gather.device.pojo.po.PqDev; +import com.njcn.gather.device.pojo.vo.PqDevVO; import com.njcn.gather.device.pojo.vo.PreDetection; import org.apache.ibatis.annotations.Param; @@ -47,6 +49,12 @@ public interface PqDevMapper extends MPJBaseMapper { * * @param planId */ - String getScriptIdByPlanId(String planId); + String getScriptIdByPlanId(@Param("planId")String planId); + + List selectByQueryParam(PqDevParam.QueryParam param); + + PqDevVO selectByDevId(@Param("devId") String devId); + + List listByDevIds(@Param("devIds") List devIds); } diff --git a/detection/src/main/java/com/njcn/gather/device/mapper/PqDevSubMapper.java b/detection/src/main/java/com/njcn/gather/device/mapper/PqDevSubMapper.java new file mode 100644 index 00000000..939fd0a9 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/mapper/PqDevSubMapper.java @@ -0,0 +1,13 @@ +package com.njcn.gather.device.mapper; + +import com.github.yulichang.base.MPJBaseMapper; +import com.njcn.gather.device.pojo.po.PqDevSub; + +/** + * @author caozehui + * @date 2025-07-02 + */ +public interface PqDevSubMapper extends MPJBaseMapper { + +} + diff --git a/detection/src/main/java/com/njcn/gather/device/mapper/PqStandardDevMapper.java b/detection/src/main/java/com/njcn/gather/device/mapper/PqStandardDevMapper.java new file mode 100644 index 00000000..9b2cea45 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/mapper/PqStandardDevMapper.java @@ -0,0 +1,13 @@ +package com.njcn.gather.device.mapper; + +import com.github.yulichang.base.MPJBaseMapper; +import com.njcn.gather.device.pojo.po.PqStandardDev; + +/** + * @author makejava + * @date 2025-05-09 + */ +public interface PqStandardDevMapper extends MPJBaseMapper { + +} + 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 df97f298..c44cfe22 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 @@ -4,17 +4,17 @@ - - - - - - - - - - - + + + + + + + + + + + - - update ad_plan set Test_State = 2 where id = #{planId} + + update ad_plan + set Test_State = 2 + where id = #{planId} - - update pq_dev set Report_State = 1 where id = #{id} + + update pq_dev + set Report_State = 1 + where id = #{id} - update ad_plan set Result = #{checkResult} where id = #{planId} + update ad_plan + set Result = #{checkResult} + where id = #{planId} - update ad_plan set Test_State = #{testState} where id = #{planId} + update ad_plan + set Test_State = #{testState} + where id = #{planId} + + + + + + diff --git a/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqDevSubMapper.xml b/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqDevSubMapper.xml new file mode 100644 index 00000000..6ddba7c3 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqDevSubMapper.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqStandardDevMapper.xml b/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqStandardDevMapper.xml new file mode 100644 index 00000000..ccf7e331 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqStandardDevMapper.xml @@ -0,0 +1,7 @@ + + + + + + + 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 f34e342b..ce50dfa9 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 @@ -6,12 +6,14 @@ import com.njcn.gather.pojo.constant.DetectionValidMessage; import com.njcn.web.pojo.annotation.DateTimeStrValid; import com.njcn.web.pojo.param.BaseParam; import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; import lombok.Data; import lombok.EqualsAndHashCode; import org.hibernate.validator.constraints.Range; import javax.validation.Valid; import javax.validation.constraints.*; +import java.time.LocalDate; import java.util.List; /** @@ -30,7 +32,7 @@ public class PqDevParam { @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PATTERN_FORMAT_ERROR) private String pattern; - @ApiModelProperty(value = "设备类型,字典表", required = true) + @ApiModelProperty(value = "设备类型", required = true) @NotBlank(message = DetectionValidMessage.DEV_TYPE_NOT_BLANK) @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.DEV_TYPE_FORMAT_ERROR) private String devType; @@ -98,13 +100,13 @@ public class PqDevParam { @ApiModelProperty("报告路径") private String reportPath; - @ApiModelProperty("设备关键信息二维码") - private String qrCode; +// @ApiModelProperty("设备关键信息二维码") +// private String qrCode; - @ApiModelProperty(value = "检测次数,默认为0", required = true) - @NotNull(message = DetectionValidMessage.RECHECK_NUM_NOT_NULL) - @Min(value = 0, message = DetectionValidMessage.RECHECK_NUM_FORMAT_ERROR) - private Integer reCheckNum; +// @ApiModelProperty(value = "检测次数,默认为0", required = true) +// @NotNull(message = DetectionValidMessage.RECHECK_NUM_NOT_NULL) +// @Min(value = 0, message = DetectionValidMessage.RECHECK_NUM_FORMAT_ERROR) +// private Integer reCheckNum; @ApiModelProperty("是否支持系数校准") private Integer factorFlag; @@ -122,6 +124,19 @@ public class PqDevParam { @ApiModelProperty("委托方") private String delegate; + @ApiModelProperty("被检通道") + private String inspectChannel; + + @ApiModelProperty("投运日期") + @DateTimeStrValid(message = DetectionValidMessage.OPERATION_DATE_FORMAT_ERROR) + private String operationDate; + + @ApiModelProperty("定验日期") + @DateTimeStrValid(message = DetectionValidMessage.INSPECT_DATE_FORMAT_ERROR) + private String inspectDate; + + @ApiModelProperty("是否为导入设备") + private Integer importFlag; /** * 更新操作实体 */ @@ -168,6 +183,14 @@ public class PqDevParam { @Max(value = 2, message = DetectionValidMessage.REPORT_STATE_FORMAT_ERROR) private Integer reportState; + @ApiModelProperty("所属地市名称") + private String cityName; + + @ApiModelProperty("所属供电公司名称") + private String gdName; + + @ApiModelProperty("所属电站名称") + private String subName; } @Data diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/param/PqStandardDevParam.java b/detection/src/main/java/com/njcn/gather/device/pojo/param/PqStandardDevParam.java new file mode 100644 index 00000000..e7bc0a79 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/pojo/param/PqStandardDevParam.java @@ -0,0 +1,92 @@ +package com.njcn.gather.device.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.gather.pojo.constant.DetectionValidMessage; +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.*; +import java.util.List; + +/** + * @author caozehui + * @data 2025-05-09 + */ +@Data +public class PqStandardDevParam { + @ApiModelProperty(value = "名称", required = true) + @NotBlank(message = DetectionValidMessage.NAME_NOT_BLANK) + @Pattern(regexp = PatternRegex.DEV_NAME_REGEX, message = DetectionValidMessage.NAME_FORMAT_ERROR) + private String name; + + @ApiModelProperty(value = "设备类型", required = true) + @NotBlank(message = DetectionValidMessage.DEV_TYPE_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.DEV_TYPE_FORMAT_ERROR) + private String devType; + + @ApiModelProperty(value = "设备厂家", required = true) + @NotBlank(message = DetectionValidMessage.MANUFACTURER_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.MANUFACTURER_FORMAT_ERROR) + private String manufacturer; + + @ApiModelProperty(value = "通信协议", required = true) + @NotBlank(message = DetectionValidMessage.PROTOCOL_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PROTOCOL_FORMAT_ERROR) + private String protocol; + + @ApiModelProperty(value = "ip地址", required = true) + @NotBlank(message = DetectionValidMessage.IP_NOT_BLANK) + @Pattern(regexp = PatternRegex.IP_REGEX, message = DetectionValidMessage.IP_FORMAT_ERROR) + private String ip; + + @ApiModelProperty(value = "端口", required = true) + @NotNull(message = DetectionValidMessage.PORT_NOT_NULL) + @Range(min = 1, max = 65535, message = DetectionValidMessage.PORT_RANGE_ERROR) + private Integer port; + + @ApiModelProperty(value = "装置是否为加密版本", required = true) + @NotNull(message = DetectionValidMessage.ENCRYPTION_NOT_NULL) + @Min(value = 0, message = DetectionValidMessage.ENCRYPTION_FLAG_FORMAT_ERROR) + @Max(value = 1, message = DetectionValidMessage.ENCRYPTION_FLAG_FORMAT_ERROR) + private Integer encryptionFlag; + + @ApiModelProperty("识别码(3ds加密)") + private String series; + + @ApiModelProperty("秘钥(3ds加密)") + private String devKey; + + @ApiModelProperty(value = "可检通道", required = true) + private String inspectChannel; + + /** + * 分页查询实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class QueryParam extends BaseParam { + @ApiModelProperty(value = "名称", required = true) + private String name; + + @ApiModelProperty(value = "设备厂家", required = true) + private String manufacturer; + + @ApiModelProperty(value = "设备类型", required = true) + private String devType; + } + + /** + * 更新操作实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class UpdateParam extends PqStandardDevParam { + @ApiModelProperty(value = "标准设备id", required = true) + @NotBlank(message = DetectionValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.ID_FORMAT_ERROR) + private String id; + } +} diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/po/PqDev.java b/detection/src/main/java/com/njcn/gather/device/pojo/po/PqDev.java index 08427a27..f8cc0d84 100644 --- a/detection/src/main/java/com/njcn/gather/device/pojo/po/PqDev.java +++ b/detection/src/main/java/com/njcn/gather/device/pojo/po/PqDev.java @@ -1,7 +1,6 @@ package com.njcn.gather.device.pojo.po; import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -15,7 +14,6 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.time.LocalDate; -import java.time.LocalDateTime; /** * @author caozehui @@ -115,7 +113,6 @@ public class PqDev extends BaseEntity implements Serializable { /** * 送样日期 */ - @TableField(updateStrategy = FieldStrategy.IGNORED) @JsonFormat(pattern = "yyyy-MM-dd") @JsonDeserialize(using = LocalDateDeserializer.class) @JsonSerialize(using = LocalDateSerializer.class) @@ -136,84 +133,58 @@ public class PqDev extends BaseEntity implements Serializable { */ private String subName; - /** - * 检测状态 - */ - private Integer checkState; - - /** - * 检测结果 - */ - private Integer checkResult; - - /** - * 报告状态 - */ - private Integer reportState; - /** * 报告路径 */ private String reportPath; - /** - * 设备关键信息二维码 - */ - private String qrCode; - - /** - * 检测次数,默认为0 - */ - @TableField(value = "ReCheck_Num") - private Integer reCheckNum; - - /** - * 状态:0-删除 1-正常 - */ - private Integer state; - /** * 检测计划id */ private String planId; - /** - * 守时检测结果(0:不合格, 1:合格) - */ - private Integer timeCheckResult; - /** * 是否支持系数校准(0:不支持,1:支持) */ private Integer factorFlag; /** - * 系数校准结果(0:不合格,1:合格) + * 预投计划 */ - private Integer factorCheckResult; - - @TableField("Check_Time") - private LocalDateTime checkTime; - - @TableField("Check_By") - private String checkBy; - @TableField("Preinvestment_Plan") private String preinvestmentPlan; - /** - * 温度 - */ - private Float temperature; - - /** - * 相对湿度 - */ - private Float humidity; - /** * 委托方 */ private String delegate; + + /** + * 可检通道 + */ + private String inspectChannel; + + /** + * 定检日期 + */ + @JsonFormat(pattern = "yyyy-MM-dd") + @JsonDeserialize(using = LocalDateDeserializer.class) + @JsonSerialize(using = LocalDateSerializer.class) + private LocalDate inspectDate; + + /** + * 谐波系统设备id + */ + private String harmSysId; + + /** + * 是否为导入设备(比对式使用) 0-否 1-是 + */ + private Integer importFlag; + + /** + * 状态:0-删除 1-正常 + */ + private Integer state; } diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/po/PqDevSub.java b/detection/src/main/java/com/njcn/gather/device/pojo/po/PqDevSub.java new file mode 100644 index 00000000..61265333 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/pojo/po/PqDevSub.java @@ -0,0 +1,105 @@ +package com.njcn.gather.device.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author caozehui + * @date 2025-07-04 + */ +@Data +@TableName("pq_dev_sub") +public class PqDevSub { + private static final long serialVersionUID = -93146063424890267L; + /** + * 关联pq_dev表的id字段 + */ + private String devId; + + /** + * 检测状态 0-未检、1检测中、2检测完成、3归档 + */ + private Integer checkState; + + /** + * 检测结果 0不符合、1符合、2未检 + */ + private Integer checkResult; + + /** + * 报告生成状态 0未生成、1已生成、2未检 + */ + private Integer reportState; + + /** + * 检测次数 + */ + @TableField(value = "ReCheck_Num") + private Integer recheckNum; + + /** + * 守时检测结果 0:不合格, 1:合格,2:/表示没有做守时检测 + */ + private Integer timeCheckResult; + + /** + * 系数校准结果 0:不合格,1:合格,2:/表示没有做系数校准 + */ + private Integer factorCheckResult; + + /** + * 实时数据结果 0:不合格,1:合格,2:未检 + */ + private Integer realtimeResult; + + /** + * 统计数据结果 0:不合格,1:合格,2:未检 + */ + private Integer statisticsResult; + + /** + * 录波数据结果 0:不合格,1:合格,2:未检 + */ + private Integer recordedResult; + + /** + * 检测人 + */ + private String checkBy; + + /** + * 检测时间 + */ + @TableField("Check_Time") + private LocalDateTime checkTime; + + /** + * 预检测耗时 + */ + private Integer preDetectTime; + + /** + * 系数校准耗时 + */ + private Integer coefficientTime; + + /** + * 正式检测耗时 + */ + private Integer formalCheckTime; + + /** + * 温度 + */ + private Float temperature; + + /** + * 相对湿度 + */ + private Float humidity; + +} + diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/po/PqStandardDev.java b/detection/src/main/java/com/njcn/gather/device/pojo/po/PqStandardDev.java new file mode 100644 index 00000000..963e3615 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/pojo/po/PqStandardDev.java @@ -0,0 +1,76 @@ +package com.njcn.gather.device.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.mybatisplus.bo.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * @author makejava + * @date 2025-05-09 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("pq_standard_dev") +public class PqStandardDev extends BaseEntity implements Serializable { + private static final long serialVersionUID = 932459726326242984L; + /** + * 标准设备id + */ + private String id; + + /** + * 标准设备-名称 + */ + private String name; + + /** + * 标准设备-设备类型 + */ + private String devType; + + /** + * 标准设备-设备厂家 + */ + private String manufacturer; + + /** + * 可检通道(可多选,中间使用英文逗号隔开) + */ + private String inspectChannel; + + /** + * 通信协议 + */ + private String protocol; + + /** + * IP地址 + */ + private String ip; + + /** + * 端口号 + */ + private Integer port; + + /** + * 是否加密(0否、1是) + */ + private Integer encryptionFlag; + + /** + * 识别码 + */ + private String series; + + /** + * 密钥 + */ + private String devKey; + + private Integer state; +} + 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 new file mode 100644 index 00000000..5953c3dd --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java @@ -0,0 +1,108 @@ +package com.njcn.gather.device.pojo.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import cn.afterturn.easypoi.excel.annotation.ExcelCollection; +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; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +/** + * @author caozehui + * @data 2025-05-07 + */ +@Data +public class ContrastDevExcel implements Serializable { + + @Excel(name = "所属地市*", width = 30, orderNum = "1") + private String cityName; + + @Excel(name = "所属供电公司*", width = 30, orderNum = "2") + private String gdName; + + @Excel(name = "所属电站*", width = 30, orderNum = "3") + private String subName; + + @Excel(name = "设备名称*", width = 20, 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") + @NotBlank(message = DetectionValidMessage.DEV_TYPE_NOT_BLANK) + private String devType; + + @Excel(name = "设备厂家*", width = 20, orderNum = "7") + @NotBlank(message = DetectionValidMessage.MANUFACTURER_NOT_BLANK) + private String manufacturer; + + @Excel(name = "通讯协议*", width = 15, orderNum = "11") + @NotBlank(message = DetectionValidMessage.PROTOCOL_NOT_BLANK) + private String protocol; + + @Excel(name = "是否加密*", width = 20, replace = {"否_0", "是_1"}, orderNum = "12") + @NotNull(message = DetectionValidMessage.ENCRYPTION_NOT_NULL) + private Integer encryptionFlag; + + @Excel(name = "识别码(当加密时必填)", width = 30, orderNum = "13") + private String series; + + @Excel(name = "秘钥(当加密时必填)", width = 30, orderNum = "14") + private String devKey; + + @Excel(name = "IP地址*", width = 20, 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") + @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") + @NotNull(message = DetectionValidMessage.CREATE_DATE_NOT_NULL) + private LocalDate createDate; + + @Excel(name = "定检日期(yyyy-MM-dd)*", width = 30, orderNum = "18", format = "yyyy-MM-dd") + @NotNull(message = DetectionValidMessage.INSPECT_DATE_NOT_NULL) + private LocalDate inspectDate; + + @Excel(name = "谐波系统设备id*", width = 30, 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; + } +} 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 01de6b07..2ae06fa1 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 @@ -1,15 +1,9 @@ package com.njcn.gather.device.pojo.vo; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.monitor.pojo.po.PqMonitor; import lombok.Data; -import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -27,4 +21,84 @@ public class PqDevVO extends PqDev { private Double devCurr; private List monitorList; + + /** + * 检测状态 0-未检、1检测中、2检测完成、3归档 + */ + private Integer checkState; + + /** + * 检测结果 0不符合、1符合、2未检 + */ + private Integer checkResult; + + /** + * 报告生成状态 0未生成、1已生成、2未检 + */ + private Integer reportState; + + /** + * 检测次数 + */ + private Integer recheckNum; + + /** + * 守时检测结果 0:不合格, 1:合格,2:/表示没有做守时检测 + */ + private Integer timeCheckResult; + + /** + * 系数校准结果 0:不合格,1:合格,2:/表示没有做系数校准 + */ + private Integer factorCheckResult; + + /** + * 实时数据结果 0:不合格,1:合格,2:未检 + */ + private Integer realtimeResult; + + /** + * 统计数据结果 0:不合格,1:合格,2:未检 + */ + private Integer statisticsResult; + + /** + * 录波数据结果 0:不合格,1:合格,2:未检 + */ + private Integer recordedResult; + + /** + * 检测人 + */ + private String checkBy; + + /** + * 检测时间 + */ + private LocalDateTime checkTime; + + /** + * 预检测耗时 + */ + private Integer preDetectTime; + + /** + * 系数校准耗时 + */ + private Integer coefficientTime; + + /** + * 正式检测耗时 + */ + private Integer formalCheckTime; + + /** + * 温度 + */ + private Float temperature; + + /** + * 相对湿度 + */ + private Float humidity; } diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/vo/PqStandardDevExcel.java b/detection/src/main/java/com/njcn/gather/device/pojo/vo/PqStandardDevExcel.java new file mode 100644 index 00000000..2a0ecbc1 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/pojo/vo/PqStandardDevExcel.java @@ -0,0 +1,59 @@ +package com.njcn.gather.device.pojo.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.gather.pojo.constant.DetectionValidMessage; +import lombok.Data; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * @author caozehui + * @data 2025-07-01 + */ +@Data +public class PqStandardDevExcel { + + @Excel(name = "名称*", width = 20, orderNum = "1") + @NotBlank(message = DetectionValidMessage.NAME_NOT_BLANK) + private String name; + + @Excel(name = "设备类型*", width = 25, orderNum = "2") + @NotBlank(message = DetectionValidMessage.DEV_TYPE_NOT_BLANK) + private String devType; + + @Excel(name = "设备厂家*", width = 25, orderNum = "3") + @NotBlank(message = DetectionValidMessage.MANUFACTURER_NOT_BLANK) + private String manufacturer; + + @Excel(name = "可检通道*", width = 25, orderNum = "4") + @NotBlank(message = DetectionValidMessage.INSPECT_CHANNEL_NOT_BLANK) + private String inspectChannel; + + @Excel(name = "通信协议*", width = 25, orderNum = "5") + @NotBlank(message = DetectionValidMessage.PROTOCOL_NOT_BLANK) + private String protocol; + + @Excel(name = "IP地址*", width = 25, orderNum = "6") + @NotBlank(message = DetectionValidMessage.IP_NOT_BLANK) + @Pattern(regexp = PatternRegex.IP_REGEX, message = DetectionValidMessage.IP_FORMAT_ERROR) + private String ip; + + @Excel(name = "端口号*", width = 15, orderNum = "7") + @NotNull(message = DetectionValidMessage.PORT_NOT_NULL) + @Range(min = 1, max = 65535, message = DetectionValidMessage.PORT_RANGE_ERROR) + private Integer port; + + @Excel(name = "是否加密*", width = 20, replace = {"否_0", "是_1"}, orderNum = "8") + @NotNull(message = DetectionValidMessage.ENCRYPTION_NOT_NULL) + private Integer encryptionFlag; + + @Excel(name = "识别码(当加密时必填)", width = 30, orderNum = "9") + private String series; + + @Excel(name = "秘钥(当加密时必填)", width = 30, orderNum = "10") + private String devKey; +} 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 51c55ec4..24d1ae52 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 @@ -6,10 +6,7 @@ import com.njcn.common.pojo.poi.PullDown; import com.njcn.gather.device.pojo.enums.TimeCheckResultEnum; import com.njcn.gather.device.pojo.param.PqDevParam; import com.njcn.gather.device.pojo.po.PqDev; -import com.njcn.gather.device.pojo.vo.CNDevExcel; -import com.njcn.gather.device.pojo.vo.PqDevVO; -import com.njcn.gather.device.pojo.vo.PreDetection; -import com.njcn.gather.device.pojo.vo.ProvinceDevExcel; +import com.njcn.gather.device.pojo.vo.*; import org.apache.ibatis.annotations.Param; import org.springframework.web.multipart.MultipartFile; @@ -64,36 +61,6 @@ public interface IPqDevService extends IService { */ boolean updatePqDevTimeCheckResult(List ids, TimeCheckResultEnum result); - /** - * 获取模拟式||数字式设备导出时所需的数据 - * - * @param queryParam 查询参数 - * @return - */ - //List getSimulateOrDigitExportData(PqDevParam.QueryParam queryParam); - - /** - * 获取比对式设备导出时所需的数据 - * - * @param queryParam 查询参数 - * @return 比对式设备导出时所需的数据 - */ - //List getContrastExportData(PqDevParam.QueryParam queryParam); - - /** - * 批量导入被检设备信息 - * - * @param sgEventExcels 批量导入的数据 - */ - //void importContrastData(List sgEventExcels); - - /** - * 批量导入被检设备信息 - * - * @param sgEventExcels 批量导入的数据 - */ - //void importSimulateAndDigitalData(List sgEventExcels); - /** * 获取所有未绑定的设备 * @@ -108,7 +75,7 @@ public interface IPqDevService extends IService { * @param param 计划id * @return 绑定的设备列表 */ - List listByPlanId(PqDevParam.QueryParam param); + List listByPlanId(PqDevParam.QueryParam param); /** * 绑定计划 @@ -153,7 +120,7 @@ public interface IPqDevService extends IService { void updatePqDevReportState(String devId, int i); - int countUnReportDev(String planId); + long countUnReportDev(String planId); /** * 根据计划id列表获取设备列表 @@ -172,8 +139,10 @@ public interface IPqDevService extends IService { /** * 下载模板文件 + * + * @param patternId 模式Id */ - void downloadTemplate(); + void downloadTemplate(String patternId); /** * 导入设备数据 @@ -183,7 +152,7 @@ public interface IPqDevService extends IService { * @param planId 计划Id * @param response 响应 */ - void importDev(MultipartFile file, String patternId, String planId, HttpServletResponse response); + boolean importDev(MultipartFile file, String patternId, String planId, HttpServletResponse response); /** * 导入灿能二楼设备数据 @@ -193,7 +162,7 @@ public interface IPqDevService extends IService { * @param planId 计划Id * @param response 响应 */ - void importCNDev(MultipartFile file, String patternId, String planId, HttpServletResponse response); + boolean importCNDev(MultipartFile file, String patternId, String planId, HttpServletResponse response); /** * 导入灿能二楼设备数据 @@ -202,14 +171,14 @@ public interface IPqDevService extends IService { * @param patternId * @param planId */ - void importCNDev(List cnDevExcelList, String patternId, String planId); + boolean importCNDev(List cnDevExcelList, String patternId, String planId); /** * 可视化-灿能二楼设备 * * @param pqDevs */ - void visualizeCNDev(List pqDevs); + void visualizeCNDev(List pqDevs); /** * 逆向可视化-灿能二楼设备 @@ -227,7 +196,7 @@ public interface IPqDevService extends IService { * @param planId 计划Id * @param response 响应 */ - void importProvinceDev(MultipartFile file, String patternId, String planId, HttpServletResponse response); + boolean importProvinceDev(MultipartFile file, String patternId, String planId, HttpServletResponse response); /** * 导入省级平台设备数据 @@ -236,14 +205,14 @@ public interface IPqDevService extends IService { * @param patternId * @param planId */ - void importProvinceDev(List proviceDevExcelList, String patternId, String planId); + boolean importProvinceDev(List proviceDevExcelList, String patternId, String planId); /** * 可视化-省级平台设备 * * @param pqDevs */ - void visualizeProvinceDev(List pqDevs); + void visualizeProvinceDev(List pqDevs); /** * 逆向可视化-省级平台设备 @@ -256,6 +225,7 @@ public interface IPqDevService extends IService { /** * 获取省级平台设备导出、导出文件模板的下拉列表 * + * @param startCol 开始列 * @return */ List getProvinceDevPullDownList(int startCol); @@ -267,4 +237,31 @@ public interface IPqDevService extends IService { * @return */ List getCNDevPullDownList(int startCol); + + /** + * 导入比对式设备数据 + * + * @param file 上传的文件 + * @param patternId 模式Id + * @param planId 计划Id + * @param response 响应 + */ + boolean importContrastDev(MultipartFile file, String patternId, String planId, HttpServletResponse response); + + /** + * 导入比对式设备数据 + * + * @param contrastDevExcelList + * @param patternId + */ + boolean importContrastDev(List contrastDevExcelList, String patternId); + + /** + * 获取比对式设备导出、导出文件模板的下拉列表 + * + * @param startCol + * @param isExport 是否是导出模板 + * @return + */ + List getContrastDevPullDownList(int startCol, boolean isExport); } diff --git a/detection/src/main/java/com/njcn/gather/device/service/IPqDevSubService.java b/detection/src/main/java/com/njcn/gather/device/service/IPqDevSubService.java new file mode 100644 index 00000000..6fdb778c --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/service/IPqDevSubService.java @@ -0,0 +1,12 @@ +package com.njcn.gather.device.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.device.pojo.po.PqDevSub; + +/** + * @author caozehui + * @date 2025-07-04 + */ +public interface IPqDevSubService extends IService { + +} 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 new file mode 100644 index 00000000..4092dd74 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java @@ -0,0 +1,78 @@ +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.PqStandardDevParam; +import com.njcn.gather.device.pojo.po.PqStandardDev; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * @author caozehui + * @date 2025-07-02 + */ +public interface IPqStandardDevService extends IService { + + /** + * 分页查询标准设备列表 + * + * @param queryParam 分页查询参数 + * @return + */ + Page listPqStandardDevs(PqStandardDevParam.QueryParam queryParam); + + /** + * 根据id查询标准设备 + * + * @param id 设备id + * @return 设备对象 + */ + PqStandardDev getPqStandardDevById(String id); + + /** + * 新增标准设备 + * + * @param param 新增参数 + * @return 新增成功返回true,失败返回false + */ + boolean addPqStandardDev(PqStandardDevParam param); + + /** + * 修改标准设备 + * + * @param param 修改参数 + * @return 修改成功返回true,失败返回false + */ + boolean updatePqStandardDev(PqStandardDevParam.UpdateParam param); + + /** + * 批量删除标准设备 + * + * @param ids + * @return + */ + boolean deletePqStandardDevs(List ids); + + /** + * 导出标准设备 + * + * @param queryParam + */ + void export(PqStandardDevParam.QueryParam queryParam); + + /** + * 下装标准设备导入模板 + */ + void downloadTemplate(); + + /** + * 导入标准设备数据 + * + * @param file + * @return + */ + void importData(MultipartFile file, HttpServletResponse response); +} 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 b5a0342b..a8efab07 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 @@ -6,10 +6,10 @@ 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.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -25,14 +25,14 @@ import com.njcn.gather.device.mapper.PqDevMapper; 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.vo.CNDevExcel; -import com.njcn.gather.device.pojo.vo.PqDevVO; -import com.njcn.gather.device.pojo.vo.PreDetection; -import com.njcn.gather.device.pojo.vo.ProvinceDevExcel; +import com.njcn.gather.device.pojo.po.PqDevSub; +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.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; @@ -77,23 +77,23 @@ public class PqDevServiceImpl extends ServiceImpl implements private final ISysTestConfigService sysTestConfigService; private final IDictTypeService dictTypeService; private final ISysUserService userService; + private final IPqDevSubService pqDevSubService; + private final TableGenMapper tableGenMapper; @Override public Page listPqDevs(PqDevParam.QueryParam queryParam) { Page page1 = this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), this.getQueryWrapper(queryParam)); - page1.getRecords().forEach(p -> { - if (StrUtil.isNotBlank(p.getSeries())) { - p.setSeries(EncryptionUtil.decoderString(1, p.getSeries())); - } - if (StrUtil.isNotBlank(p.getDevKey())) { - p.setDevKey(EncryptionUtil.decoderString(1, p.getDevKey())); - } - }); Page page2 = new Page<>(); BeanUtil.copyProperties(page1, page2); - List voList = BeanUtil.copyToList(page1.getRecords(), PqDevVO.class); - page2.setRecords(voList); + + List idList = page1.getRecords().stream().map(dev -> dev.getId()).collect(Collectors.toList()); + List pqDevVOList = new ArrayList<>(); + if (CollUtil.isNotEmpty(idList)) { + pqDevVOList.addAll(this.baseMapper.listByDevIds(idList)); + } + + page2.setRecords(pqDevVOList); page2.getRecords().forEach(p -> { DevType devType = devTypeService.getById(p.getDevType()); if (ObjectUtil.isNotNull(devType)) { @@ -101,6 +101,12 @@ public class PqDevServiceImpl extends ServiceImpl implements p.setDevVolt(devType.getDevVolt()); p.setDevCurr(devType.getDevCurr()); } + if (StrUtil.isNotBlank(p.getSeries())) { + p.setSeries(EncryptionUtil.decoderString(1, p.getSeries())); + } + if (StrUtil.isNotBlank(p.getDevKey())) { + p.setDevKey(EncryptionUtil.decoderString(1, p.getDevKey())); + } }); return page2; } @@ -120,22 +126,27 @@ public class PqDevServiceImpl extends ServiceImpl implements if (SceneEnum.LEAVE_FACTORY_TEST.getValue().equals(currrentScene)) { pqDev.setManufacturer("8fa73802c9e1abab973adcbeb0d58567"); // 南京灿能字典项目对应的id } - // 新增时默认设置 - pqDev.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); - pqDev.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); - pqDev.setCheckState(CheckStateEnum.UNCHECKED.getValue()); - pqDev.setReportState(DevReportStateEnum.UNCHECKED.getValue()); -// pqDev.setDocumentState(DevDocumentStateEnum.UNDOCUMENTED.getValue()); - pqDev.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); String id = UUID.randomUUID().toString().replaceAll("-", ""); pqDev.setId(id); + + // 新增时默认设置 + PqDevSub pqDevSub = new PqDevSub(); + pqDevSub.setDevId(id); + pqDevSub.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); + pqDevSub.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); + pqDevSub.setCheckState(CheckStateEnum.UNCHECKED.getValue()); + pqDevSub.setReportState(DevReportStateEnum.UNCHECKED.getValue()); + pqDevSub.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); + // 比对式设备添加监测点 if (PatternEnum.CONTRAST.getValue().equals(dictDataService.getDictDataById(pqDevParam.getPattern()).getCode())) { if (ObjectUtil.isNotEmpty(pqDevParam.getMonitorList())) { pqMonitorService.addPqMonitorByDevId(id, pqDevParam.getMonitorList()); } } + pqDev.setImportFlag(0); pqDev.setState(DataStateEnum.ENABLE.getCode()); + pqDevSubService.save(pqDevSub); return this.save(pqDev); } @@ -187,9 +198,7 @@ public class PqDevServiceImpl extends ServiceImpl implements // 比对式设备修改监测点 if (PatternEnum.CONTRAST.getValue().equals(dictDataService.getDictDataById(updateParam.getPattern()).getCode())) { - if (ObjectUtil.isNotEmpty(updateParam.getMonitorList())) { - pqMonitorService.updatePqMonitorByDevId(updateParam.getId(), updateParam.getMonitorList()); - } + pqMonitorService.updatePqMonitorByDevId(updateParam.getId(), updateParam.getMonitorList()); } return this.updateById(pqDev); } @@ -199,7 +208,7 @@ public class PqDevServiceImpl extends ServiceImpl implements public boolean deletePqDev(PqDevParam.DeleteParam param) { if (PatternEnum.CONTRAST.getValue().equals(dictDataService.getDictDataById(param.getPattern()).getCode())) { for (String id : param.getIds()) { - if (ObjectUtils.isEmpty(pqMonitorService.listPqMonitorByDevId(id))) { + if (ObjectUtils.isNotEmpty(pqMonitorService.listPqMonitorByDevId(id))) { throw new BusinessException(DetectionResponseEnum.PQ_DEV_HAS_MONITOR); } } @@ -234,6 +243,7 @@ public class PqDevServiceImpl extends ServiceImpl implements if (ObjectUtil.isNotNull(str)) { throw new BusinessException(DetectionResponseEnum.DEVICE_DELETE, str.toString()); } + pqDevSubService.remove(new QueryWrapper().lambda().in(PqDevSub::getDevId, param.getIds())); return this.lambdaUpdate().set(PqDev::getState, DataStateEnum.DELETED.getCode()).in(PqDev::getId, param.getIds()).update(); } return true; @@ -242,88 +252,9 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override @Transactional public boolean updatePqDevTimeCheckResult(List ids, TimeCheckResultEnum result) { - return this.lambdaUpdate().set(PqDev::getTimeCheckResult, result.getValue()).in(PqDev::getId, ids).update(); + return pqDevSubService.lambdaUpdate().set(PqDevSub::getTimeCheckResult, result.getValue()).in(PqDevSub::getDevId, ids).update(); } -// @Override -// public List getSimulateOrDigitExportData(PqDevParam.QueryParam queryParam) { -// List pqDevs = this.list(this.getQueryWrapper(queryParam)); -// if (ObjectUtil.isNotNull(pqDevs)) { -// this.visualize(pqDevs); -// List pqDevExcels = BeanUtil.copyToList(pqDevs, PqDevExcel.SimulateOrDigitalExportData.class); -// return pqDevExcels; -// } else { -// return Collections.emptyList(); -// } -// } -// -// @Override -// public List getContrastExportData(PqDevParam.QueryParam queryParam) { -// List pqDevs = this.list(this.getQueryWrapper(queryParam)); -// if (ObjectUtil.isNotEmpty(pqDevs)) { -// this.visualize(pqDevs); -// List pqDevExcels = BeanUtil.copyToList(pqDevs, PqDevExcel.ContrastExportData.class); -// for (int i = 0; i < pqDevs.size(); i++) { -// List monitorExportList = BeanUtil.copyToList(pqMonitorService.listPqMonitorByDevId(pqDevs.get(i).getId()), PqMonitorExcel.ExportData.class); -// monitorExportList.forEach(monitor -> { -// monitor.setPtType(dictDataService.getDictDataById(monitor.getPtType()).getName()); -// }); -// pqDevExcels.get(i).setMonitorList(monitorExportList); -// } -// return pqDevExcels; -// } else { -// return Collections.emptyList(); -// } -// } -// -// @Override -// @Transactional -// public void importContrastData(List pqDevExcelList) { -// List devList = new ArrayList<>(); -// List monitorList = new ArrayList<>(); -// String patternId = dictDataService.getDictDataByName(PatternEnum.CONTRAST.getMsg()).getId(); -// pqDevExcelList.forEach(pqDevExcel -> { -// PqDev pqDev = new PqDev(); -// BeanUtil.copyProperties(pqDevExcel, pqDev); -// pqDev.setId(UUID.randomUUID().toString().replaceAll("-", "")); -// pqDev.setPattern(patternId); -//// pqDev.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); -//// pqDev.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); -//// pqDev.setCheckState(CheckStateEnum.UNCHECKED.getValue()); -//// pqDev.setReportState(DevReportStateEnum.UNCHECKED.getValue()); -//// pqDev.setDocumentState(DevDocumentStateEnum.UNDOCUMENTED.getValue()); -//// pqDev.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); -// devList.add(pqDev); -// -// // 新增与被检设备绑定的监测点 -// List monitors = pqDevExcel.getMonitorList().stream() -// .map(monitor -> { -// PqMonitor monitorPo = new PqMonitor(); -// BeanUtil.copyProperties(monitor, monitorPo); -// monitorPo.setId(UUID.randomUUID().toString().replaceAll("-", "")); -// monitorPo.setDevId(pqDev.getId()); -// monitorPo.setPtType(dictDataService.getDictDataByName(monitor.getPtType()).getId()); -// return monitorPo; -// }).collect(Collectors.toList()); -// monitorList.addAll(monitors); -// }); -// -// //逆向可视化 -// this.reverseVisualize(devList); -// this.saveBatch(devList); -// -// pqMonitorService.saveBatch(monitorList); -// } -// -// @Override -// @Transactional -// public void importSimulateAndDigitalData(List pqDevExcelList) { -// List pqDevList = BeanUtil.copyToList(pqDevExcelList, PqDev.class); -// //逆向可视化 -// this.reverseVisualize(pqDevList); -// this.saveBatch(pqDevList); -// } - @Override public List> listUnbound(String pattern) { List pqDevList = this.lambdaQuery() @@ -342,21 +273,11 @@ public class PqDevServiceImpl extends ServiceImpl implements } @Override - public List listByPlanId(PqDevParam.QueryParam param) { + public List listByPlanId(PqDevParam.QueryParam param) { if (StrUtil.isBlank(param.getPlanId())) { return Collections.emptyList(); } - List pqDevList = this.lambdaQuery() - .eq(PqDev::getPlanId, param.getPlanId()) - .like(StrUtil.isNotBlank(param.getName()), PqDev::getName, param.getName()) - .in(ObjectUtil.isNotEmpty(param.getCheckStateList()), PqDev::getCheckState, param.getCheckStateList()) - .eq(ObjectUtil.isNotNull(param.getCheckResult()), PqDev::getCheckResult, param.getCheckResult()) - .eq(ObjectUtil.isNotNull(param.getReportState()), PqDev::getReportState, param.getReportState()) - .eq(PqDev::getState, DataStateEnum.ENABLE.getCode()) - .orderByDesc(PqDev::getCreateTime) - .orderByAsc(PqDev::getName) - .list(); - + List pqDevList = this.baseMapper.selectByQueryParam(param); return pqDevList; } @@ -368,11 +289,13 @@ public class PqDevServiceImpl extends ServiceImpl implements //然后进行状态绑定 if (ObjectUtil.isNotEmpty(devIds)) { this.lambdaUpdate().set(PqDev::getPlanId, planId).in(PqDev::getId, devIds).update(); - List list = this.list(new LambdaQueryWrapper().in(PqDev::getId, devIds)); + + List list = pqDevSubService.lambdaQuery().in(PqDevSub::getDevId, devIds).list(); //判断是否有处了未检的其他设备 - List notUnchecked = list.stream().filter(x -> !CheckStateEnum.UNCHECKED.getValue().equals(x.getCheckState())).map(PqDev::getId).distinct().collect(Collectors.toList()); + List notUnchecked = list.stream().filter(x -> !CheckStateEnum.UNCHECKED.getValue().equals(x.getCheckState())).map(PqDevSub::getDevId).distinct().collect(Collectors.toList()); + if (CollUtil.isNotEmpty(notUnchecked)) { - List unchecked = list.stream().filter(x -> CheckStateEnum.UNCHECKED.getValue().equals(x.getCheckState())).map(PqDev::getId).distinct().collect(Collectors.toList()); + List unchecked = list.stream().filter(x -> CheckStateEnum.UNCHECKED.getValue().equals(x.getCheckState())).map(PqDevSub::getDevId).distinct().collect(Collectors.toList()); //计划未检测 if (CollUtil.isNotEmpty(unchecked)) { return CheckStateEnum.CHECKING.getValue(); @@ -380,12 +303,12 @@ public class PqDevServiceImpl extends ServiceImpl implements //计划检测中 List checking = list.stream().filter(x -> x.getCheckState().equals(CheckStateEnum.CHECKED.getValue()) && !CheckStateEnum.DOCUMENTED.getValue().equals(x.getCheckState()) - ).map(PqDev::getId).distinct().collect(Collectors.toList()); + ).map(PqDevSub::getDevId).distinct().collect(Collectors.toList()); if (checking.size() == notUnchecked.size()) { return CheckStateEnum.CHECKING.getValue(); } //检测完成 - List checked = list.stream().filter(x -> CheckStateEnum.DOCUMENTED.getValue().equals(x.getCheckState())).map(PqDev::getId).distinct().collect(Collectors.toList()); + List checked = list.stream().filter(x -> CheckStateEnum.DOCUMENTED.getValue().equals(x.getCheckState())).map(PqDevSub::getDevId).distinct().collect(Collectors.toList()); if (checked.size() == notUnchecked.size()) { return CheckStateEnum.CHECKED.getValue(); } @@ -416,18 +339,22 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public PqDevVO getPqDevById(String id) { - PqDev pqDev = this.getById(id); - if (StrUtil.isNotBlank(pqDev.getCheckBy())) { - pqDev.setCheckBy(userService.getById(pqDev.getCheckBy()).getName()); + PqDevVO pqDevVO = this.baseMapper.selectByDevId(id); + if (StrUtil.isNotBlank(pqDevVO.getSeries())) { + pqDevVO.setSeries(EncryptionUtil.decoderString(1, pqDevVO.getSeries())); + } + if (StrUtil.isNotBlank(pqDevVO.getDevKey())) { + pqDevVO.setDevKey(EncryptionUtil.decoderString(1, pqDevVO.getDevKey())); + } + if (StrUtil.isNotBlank(pqDevVO.getCheckBy())) { + pqDevVO.setCheckBy(userService.getById(pqDevVO.getCheckBy()).getName()); } - PqDevVO pqDevVO = new PqDevVO(); - BeanUtil.copyProperties(pqDev, pqDevVO); - DevType devType = devTypeService.getById(pqDev.getDevType()); + DevType devType = devTypeService.getById(pqDevVO.getDevType()); if (ObjectUtil.isNotNull(devType)) { pqDevVO.setDevChns(devType.getDevChns()); - pqDevVO.setDevVolt(devType.getDevVolt()); pqDevVO.setDevCurr(devType.getDevCurr()); + pqDevVO.setDevVolt(devType.getDevVolt()); } List monitorList = pqMonitorService.listPqMonitorByDevId(id); @@ -451,6 +378,9 @@ public class PqDevServiceImpl extends ServiceImpl implements .like(StrUtil.isNotBlank(queryParam.getName()), "pq_dev.name", queryParam.getName()) .eq(StrUtil.isNotBlank(queryParam.getPattern()), "pq_dev.pattern", queryParam.getPattern()) .eq(StrUtil.isNotBlank(queryParam.getManufacturer()), "pq_dev.manufacturer", queryParam.getManufacturer()) + .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()) .between(ObjectUtil.isAllNotEmpty(queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()), "pq_dev.Create_Date", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime()); //排序 if (ObjectUtil.isAllNotEmpty(queryParam.getSortBy(), queryParam.getOrderBy())) { @@ -494,66 +424,66 @@ public class PqDevServiceImpl extends ServiceImpl implements if (CollUtil.isNotEmpty(ids)) { SysTestConfig config = sysTestConfigService.getOneConfig(); Map result = detectionDataDealService.devResult(ids, valueType, code); - List list = this.list(new LambdaQueryWrapper().in(PqDev::getId, ids)); + List list = new ArrayList<>(); + if (CollUtil.isNotEmpty(ids)) { + list.addAll(this.baseMapper.listByDevIds(ids)); + } - for (PqDev pqDev : list) { - if (result.containsKey(pqDev.getId())) { + for (PqDevVO pqDevVo : list) { + if (result.containsKey(pqDevVo.getId())) { Integer checkState; int i; - LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() - .set(PqDev::getCheckResult, result.get(pqDev.getId())) - .set(StrUtil.isNotBlank(userId), PqDev::getCheckBy, userId) - .set(PqDev::getCheckTime, LocalDateTime.now()) - .eq(PqDev::getId, pqDev.getId()); + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper() + .set(PqDevSub::getCheckResult, result.get(pqDevVo.getId())) + .set(StrUtil.isNotBlank(userId), PqDevSub::getCheckBy, userId) + .set(PqDevSub::getCheckTime, LocalDateTime.now()) + .eq(PqDevSub::getDevId, pqDevVo.getId()); String currrentScene = sysTestConfigService.getCurrrentScene(); if (SceneEnum.PROVINCE_PLATFORM.getValue().equals(currrentScene)) { - wrapper.set(ObjectUtil.isNotNull(temperature), PqDev::getTemperature, temperature) - .set(ObjectUtil.isNotNull(humidity), PqDev::getHumidity, humidity); + wrapper.set(ObjectUtil.isNotNull(temperature), PqDevSub::getTemperature, temperature) + .set(ObjectUtil.isNotNull(humidity), PqDevSub::getHumidity, humidity); } - if (pqDev.getReCheckNum() >= config.getMaxTime()) { + if (pqDevVo.getRecheckNum() >= config.getMaxTime()) { // 装置报告生成 todo... //this.baseMapper.updateReportState(pqDev.getId()); - wrapper.set(PqDev::getReportState, DevReportStateEnum.GENERATED.getValue()); + wrapper.set(PqDevSub::getReportState, DevReportStateEnum.GENERATED.getValue()); // 装置归档 checkState = CheckStateEnum.DOCUMENTED.getValue(); - i = pqDev.getReCheckNum(); + i = pqDevVo.getRecheckNum(); } else { checkState = CheckStateEnum.CHECKED.getValue(); - i = pqDev.getReCheckNum() + 1; - wrapper.set(PqDev::getReportState, DevReportStateEnum.NOT_GENERATED.getValue()); + i = pqDevVo.getRecheckNum() + 1; + wrapper.set(PqDevSub::getReportState, DevReportStateEnum.NOT_GENERATED.getValue()); } - wrapper.set(PqDev::getReCheckNum, i) - .set(PqDev::getCheckState, checkState); - this.update(wrapper); + wrapper.set(PqDevSub::getRecheckNum, i) + .set(PqDevSub::getCheckState, checkState); + pqDevSubService.update(wrapper); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PqDev::getPlanId, pqDev.getPlanId()) - .eq(PqDev::getState, DataStateEnum.ENABLE.getCode()); - - List pqDevList = this.list(queryWrapper); - if (CollUtil.isNotEmpty(pqDevList)) { - Set set = pqDevList.stream().map(PqDev::getCheckResult).collect(Collectors.toSet()); + PqDevParam.QueryParam param = new PqDevParam.QueryParam(); + param.setPlanId(pqDevVo.getPlanId()); + List pqDevVOList = this.baseMapper.selectByQueryParam(param); + if (CollUtil.isNotEmpty(pqDevVOList)) { + Set set = pqDevVOList.stream().map(PqDevVO::getCheckResult).collect(Collectors.toSet()); if (set.contains(CheckResultEnum.NOT_ACCORD.getValue())) { - this.baseMapper.updatePlanCheckResult(pqDev.getPlanId(), CheckResultEnum.NOT_ACCORD.getValue()); + this.baseMapper.updatePlanCheckResult(pqDevVo.getPlanId(), CheckResultEnum.NOT_ACCORD.getValue()); } else if (set.contains(CheckResultEnum.UNCHECKED.getValue())) { - this.baseMapper.updatePlanCheckResult(pqDev.getPlanId(), CheckResultEnum.UNCHECKED.getValue()); + this.baseMapper.updatePlanCheckResult(pqDevVo.getPlanId(), CheckResultEnum.UNCHECKED.getValue()); } else { - this.baseMapper.updatePlanCheckResult(pqDev.getPlanId(), CheckResultEnum.ACCORD.getValue()); + this.baseMapper.updatePlanCheckResult(pqDevVo.getPlanId(), CheckResultEnum.ACCORD.getValue()); } - set = pqDevList.stream().map(PqDev::getCheckState).collect(Collectors.toSet()); + set = pqDevVOList.stream().map(PqDevVO::getCheckState).collect(Collectors.toSet()); if (set.contains(CheckStateEnum.UNCHECKED.getValue())) { - this.baseMapper.updatePlanTestState(pqDev.getPlanId(), CheckStateEnum.CHECKING.getValue()); + this.baseMapper.updatePlanTestState(pqDevVo.getPlanId(), CheckStateEnum.CHECKING.getValue()); } else { if (checkState.equals(CheckStateEnum.DOCUMENTED.getValue())) { - queryWrapper.ne(PqDev::getCheckState, CheckStateEnum.DOCUMENTED.getValue()); - int count = this.count(queryWrapper); + long count = pqDevVOList.stream().filter(obj -> !CheckStateEnum.DOCUMENTED.getValue().equals(obj.getCheckState())).count(); if (count == 0) { // 如果非归档状态的设备数量为0,则更新计划已完成 - this.baseMapper.finishPlan(pqDev.getPlanId()); + this.baseMapper.finishPlan(pqDevVo.getPlanId()); } } else { - this.baseMapper.updatePlanTestState(pqDev.getPlanId(), CheckStateEnum.CHECKING.getValue()); + this.baseMapper.updatePlanTestState(pqDevVo.getPlanId(), CheckStateEnum.CHECKING.getValue()); } } } @@ -565,20 +495,20 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public void updatePqDevReportState(String devId, int reportState) { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.eq(PqDev::getId, devId) - .set(PqDev::getReportState, reportState); - this.update(updateWrapper); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(PqDevSub::getDevId, devId) + .set(PqDevSub::getReportState, reportState); + pqDevSubService.update(updateWrapper); } @Override - public int countUnReportDev(String planId) { + public long countUnReportDev(String planId) { // 查询该计划下所有设备的检测状态,是否有未生成的 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PqDev::getPlanId, planId) - .eq(PqDev::getState, DataStateEnum.ENABLE.getCode()) - .ne(PqDev::getReportState, DevReportStateEnum.GENERATED.getValue()); - return this.count(queryWrapper); + PqDevParam.QueryParam param = new PqDevParam.QueryParam(); + param.setPlanId(planId); + List devVOList = this.baseMapper.selectByQueryParam(param); + long count = devVOList.stream().filter(obj -> !DevReportStateEnum.GENERATED.getValue().equals(obj.getReportState())).count(); + return count; } @@ -589,62 +519,75 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public void exportDev(PqDevParam.QueryParam queryParam) { - String currrentScene = sysTestConfigService.getCurrrentScene(); - SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); - switch (sceneEnum) { - case PROVINCE_PLATFORM: - this.exportProvinceDev(queryParam); - break; - case LEAVE_FACTORY_TEST: - this.exportCNDev(queryParam); - break; - case SELF_TEST: - break; - default: - break; + DictData dictData = dictDataService.getDictDataById(queryParam.getPattern()); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + this.exportContrastDev(queryParam); + } else { + String currrentScene = sysTestConfigService.getCurrrentScene(); + SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); + switch (sceneEnum) { + case PROVINCE_PLATFORM: + this.exportProvinceDev(queryParam); + break; + case LEAVE_FACTORY_TEST: + this.exportCNDev(queryParam); + break; + case SELF_TEST: + break; + default: + break; + } } } @Override - public void downloadTemplate() { - String currrentScene = sysTestConfigService.getCurrrentScene(); - SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); - switch (sceneEnum) { - case PROVINCE_PLATFORM: - this.downloadProvinceDevTemplate(); - break; - case LEAVE_FACTORY_TEST: - this.downloadCNDevTemplate(); - break; - case SELF_TEST: - break; - default: - break; + 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<>()); + } else { + String currrentScene = sysTestConfigService.getCurrrentScene(); + SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); + switch (sceneEnum) { + case PROVINCE_PLATFORM: + ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备模板.xlsx", 1, this.getProvinceDevPullDownList(0), ProvinceDevExcel.class, new ArrayList<>()); + break; + case LEAVE_FACTORY_TEST: + ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备模板.xlsx", 1, this.getCNDevPullDownList(0), CNDevExcel.class, new ArrayList<>()); + break; + case SELF_TEST: + break; + default: + break; + } } - } @Override - public void importDev(MultipartFile file, String patternId, String planId, HttpServletResponse response) { - String currrentScene = sysTestConfigService.getCurrrentScene(); - SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); - switch (sceneEnum) { - case PROVINCE_PLATFORM: - this.importProvinceDev(file, patternId, planId, response); - break; - case LEAVE_FACTORY_TEST: - this.importCNDev(file, patternId, planId, response); - break; - case SELF_TEST: - break; - default: - break; + public boolean importDev(MultipartFile file, String patternId, String planId, HttpServletResponse response) { + DictData dictData = dictDataService.getDictDataById(patternId); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + return this.importContrastDev(file, patternId, planId, response); + } else { + String currrentScene = sysTestConfigService.getCurrrentScene(); + SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); + switch (sceneEnum) { + case PROVINCE_PLATFORM: + return this.importProvinceDev(file, patternId, planId, response); + case LEAVE_FACTORY_TEST: + return this.importCNDev(file, patternId, planId, response); + case SELF_TEST: + break; + default: + break; + } } + return false; } @Override @Transactional - public void importCNDev(MultipartFile file, String patternId, String planId, HttpServletResponse response) { + public boolean importCNDev(MultipartFile file, String patternId, String planId, HttpServletResponse response) { ImportParams params = new ImportParams(); params.setStartSheetIndex(0); params.setSheetNum(1); @@ -664,12 +607,12 @@ public class PqDevServiceImpl extends ServiceImpl implements } catch (Exception e) { throw new BusinessException(DetectionResponseEnum.IMPORT_DATA_FAIL); } - this.importCNDev(cnDevExcelList, patternId, planId); + return this.importCNDev(cnDevExcelList, patternId, planId); } @Override @Transactional - public void importCNDev(List cnDevExcelList, String patternId, String planId) { + public boolean importCNDev(List cnDevExcelList, String patternId, String planId) { if (CollUtil.isNotEmpty(cnDevExcelList)) { List oldDevList = BeanUtil.copyToList(cnDevExcelList, PqDev.class); @@ -677,7 +620,7 @@ public class PqDevServiceImpl extends ServiceImpl implements this.reverseVisualizeCNDev(oldDevList, patternId); List newDevList = new ArrayList<>(); - PqDevParam param = new PqDevParam.UpdateParam(); + PqDevParam param = new PqDevParam(); oldDevList.forEach(pqDev -> { pqDev.setPlanId(planId); if (pqDev.getEncryptionFlag() == 1) { @@ -742,7 +685,21 @@ public class PqDevServiceImpl extends ServiceImpl implements }); this.saveBatch(newDevList); + List pqDevSubList = new ArrayList<>(); + for (PqDev dev : newDevList) { + PqDevSub pqDevSub = new PqDevSub(); + pqDevSub.setDevId(dev.getId()); + pqDevSub.setCheckState(CheckStateEnum.UNCHECKED.getValue()); + pqDevSub.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); + pqDevSub.setReportState(DevReportStateEnum.UNCHECKED.getValue()); + pqDevSub.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); + pqDevSub.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); + pqDevSubList.add(pqDevSub); + } + pqDevSubService.saveBatch(pqDevSubList); + return true; } + return false; } /** @@ -755,9 +712,13 @@ public class PqDevServiceImpl extends ServiceImpl implements QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper .eq("state", DataStateEnum.ENABLE.getCode()) - .eq("Dev_Type", param.getDevType()) - .and(q -> q.eq("Create_Id", param.getCreateId())); //设备序列号重复,不管设备类型,原设备类型条件删除 -// .eq("pattern", param.getPattern()) + .eq(StrUtil.isNotBlank(param.getDevType()), "Dev_Type", param.getDevType()) + .eq(StrUtil.isNotBlank(param.getPattern()), "pattern", param.getPattern()) + .eq(StrUtil.isNotBlank(param.getCityName()), "City_Name", param.getCityName()) + .eq(StrUtil.isNotBlank(param.getGdName()), "Gd_Name", param.getGdName()) + .eq(StrUtil.isNotBlank(param.getSubName()), "Sub_Name", param.getSubName()) + .and(q -> q.eq(StrUtil.isNotBlank(param.getName()), "name", param.getName()).or() + .eq(StrUtil.isNotBlank(param.getCreateId()), "Create_Id", param.getCreateId())); //设备序列号重复 // .eq("manufacturer", param.getManufacturer()) // .eq("Dev_Type", param.getDevType()).or() if (isExcludeSelf) { @@ -778,23 +739,21 @@ public class PqDevServiceImpl extends ServiceImpl implements */ private void exportCNDev(PqDevParam.QueryParam queryParam) { List pqDevs = this.list(this.getQueryWrapper(queryParam)); + List idList = pqDevs.stream().map(dev -> dev.getId()).collect(Collectors.toList()); + List pqDevVOList = new ArrayList<>(); + if (CollUtil.isNotEmpty(idList)) { + pqDevVOList.addAll(this.baseMapper.listByDevIds(idList)); + } + List pqDevExcels = null; if (ObjectUtil.isNotEmpty(pqDevs)) { - this.visualizeCNDev(pqDevs); - pqDevExcels = BeanUtil.copyToList(pqDevs, CNDevExcel.class); + this.visualizeCNDev(pqDevVOList); + pqDevExcels = BeanUtil.copyToList(pqDevVOList, CNDevExcel.class); } ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备导出数据.xlsx", 1, this.getCNDevPullDownList(0), CNDevExcel.class, ObjectUtil.isEmpty(pqDevExcels) ? new ArrayList<>() : pqDevExcels); } - /** - * 下载灿能二楼设备模板文件 - */ - private void downloadCNDevTemplate() { - ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备模板.xlsx", 1, this.getCNDevPullDownList(0), CNDevExcel.class, new ArrayList<>()); - } - - @Override public List getProvinceDevPullDownList(int startCol) { List pullDowns = new ArrayList<>(); @@ -840,6 +799,7 @@ public class PqDevServiceImpl extends ServiceImpl implements pullDown.setStrings(Arrays.asList("是", "否")); pullDowns.add(pullDown); + // 委托方 dictType = dictTypeService.getByCode("Delegate"); if (ObjectUtil.isNotNull(dictType)) { @@ -917,9 +877,17 @@ public class PqDevServiceImpl extends ServiceImpl implements * * @param pqDevs */ - public void visualizeCNDev(List pqDevs) { + public void visualizeCNDev(List pqDevs) { pqDevs.forEach(pqDev -> { - pqDev.setPreinvestmentPlan(dictDataService.getDictDataById(pqDev.getPreinvestmentPlan()).getName()); + if (StrUtil.isNotBlank(pqDev.getSeries())) { + pqDev.setSeries(EncryptionUtil.decoderString(1, pqDev.getSeries())); + } + if (StrUtil.isNotBlank(pqDev.getDevKey())) { + pqDev.setDevKey(EncryptionUtil.decoderString(1, pqDev.getDevKey())); + } + if (StrUtil.isNotBlank(pqDev.getPreinvestmentPlan())) { + pqDev.setPreinvestmentPlan(dictDataService.getDictDataById(pqDev.getPreinvestmentPlan()).getName()); + } pqDev.setDevType(devTypeService.getById(pqDev.getDevType()).getName()); pqDev.setProtocol(dictDataService.getDictDataById(pqDev.getProtocol()).getName()); }); @@ -955,15 +923,37 @@ public class PqDevServiceImpl extends ServiceImpl implements } pqDev.setCreateDate(LocalDateTime.now().toLocalDate()); pqDev.setCreateId(pqDev.getName()); - pqDev.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); - pqDev.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); - pqDev.setCheckState(CheckStateEnum.UNCHECKED.getValue()); - pqDev.setReportState(DevReportStateEnum.UNCHECKED.getValue()); - pqDev.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); + +// pqDev.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); +// pqDev.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); +// pqDev.setCheckState(CheckStateEnum.UNCHECKED.getValue()); +// pqDev.setReportState(DevReportStateEnum.UNCHECKED.getValue()); +// pqDev.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); pqDev.setState(DataStateEnum.ENABLE.getCode()); }); } + /** + * 导出比对式设备数据 + * + * @param queryParam + */ + private void exportContrastDev(PqDevParam.QueryParam queryParam) { + List pqDevs = this.list(this.getQueryWrapper(queryParam)); + List idList = pqDevs.stream().map(dev -> dev.getId()).collect(Collectors.toList()); + List pqDevVOList = new ArrayList<>(); + if (CollUtil.isNotEmpty(idList)) { + 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); + } + /** * 导出省级平台设备数据 * @@ -971,33 +961,31 @@ public class PqDevServiceImpl extends ServiceImpl implements */ private void exportProvinceDev(PqDevParam.QueryParam queryParam) { List pqDevs = this.list(this.getQueryWrapper(queryParam)); - List pqDevExcels = null; - if (ObjectUtil.isNotEmpty(pqDevs)) { - this.visualizeProvinceDev(pqDevs); - pqDevExcels = BeanUtil.copyToList(pqDevs, ProvinceDevExcel.class); + List idList = pqDevs.stream().map(dev -> dev.getId()).collect(Collectors.toList()); + List pqDevVOList = new ArrayList<>(); + if (CollUtil.isNotEmpty(idList)) { + pqDevVOList.addAll(this.baseMapper.listByDevIds(idList)); } + List pqDevExcels = null; + if (ObjectUtil.isNotEmpty(pqDevVOList)) { + this.visualizeProvinceDev(pqDevVOList); + pqDevExcels = BeanUtil.copyToList(pqDevVOList, ProvinceDevExcel.class); + } ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备导出数据.xlsx", 1, this.getProvinceDevPullDownList(0), ProvinceDevExcel.class, ObjectUtil.isEmpty(pqDevExcels) ? new ArrayList<>() : pqDevExcels); } - /** - * 下载省级平台设备模板文件 - */ - private void downloadProvinceDevTemplate() { - ExcelUtil.exportExcelPullDown(new ExportParams(), "被检设备模板.xlsx", 1, this.getProvinceDevPullDownList(0), ProvinceDevExcel.class, new ArrayList<>()); - } - @Override @Transactional - public void importProvinceDev(MultipartFile file, String patternId, String planId, HttpServletResponse response) { + public boolean importProvinceDev(MultipartFile file, String patternId, String planId, HttpServletResponse response) { ImportParams params = new ImportParams(); params.setStartSheetIndex(0); params.setSheetNum(1); - params.setHeadRows(1); params.setNeedVerify(true); + params.setHeadRows(1); - List cnDevExcelList = null; + List provincDevExcelList = null; try { ExcelImportResult excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), ProvinceDevExcel.class, params); if (excelImportResult.isVerifyFail()) { @@ -1005,26 +993,34 @@ public class PqDevServiceImpl extends ServiceImpl implements Workbook failWorkbook = excelImportResult.getFailWorkbook(); PoiUtil.exportFileByWorkbook(failWorkbook, "非法被检设备数据.xlsx", response); } else { - cnDevExcelList = excelImportResult.getList(); + provincDevExcelList = excelImportResult.getList(); } + } catch (Exception e) { throw new BusinessException(DetectionResponseEnum.IMPORT_DATA_FAIL); } - this.importProvinceDev(cnDevExcelList, patternId, planId); + return this.importProvinceDev(provincDevExcelList, patternId, planId); } @Override @Transactional - public void importProvinceDev(List proviceDevExcelList, String patternId, String planId) { + public boolean importProvinceDev(List proviceDevExcelList, String patternId, String planId) { if (CollUtil.isNotEmpty(proviceDevExcelList)) { - List oldDevList = BeanUtil.copyToList(proviceDevExcelList, PqDev.class); + //逆向可视化 this.reverseVisualizeProvinceDev(oldDevList, patternId); List newDevList = new ArrayList<>(); - PqDevParam param = new PqDevParam.UpdateParam(); + PqDevParam param = new PqDevParam(); oldDevList.forEach(pqDev -> { + DevType devType = devTypeService.getByName(pqDev.getDevType()); + if (ObjectUtil.isNull(devType)) { + throw new BusinessException(DetectionResponseEnum.DEV_TYPE_NOT_EXIST); + } else { + pqDev.setDevType(devType.getId()); + } + pqDev.setCreateDate(LocalDateTime.now().toLocalDate()); pqDev.setPlanId(planId); if (pqDev.getEncryptionFlag() == 1) { if (StrUtil.isNotBlank(pqDev.getSeries()) && StrUtil.isNotBlank(pqDev.getDevKey())) { @@ -1063,7 +1059,9 @@ public class PqDevServiceImpl extends ServiceImpl implements param.setDevType(dev.getDevType()); //this.checkRepeat(param, false); - long count = newDevList.stream().filter(d -> d.getName().equals(dev.getName())).count(); + long count = newDevList.stream().filter(d -> + d.getDevType().equals(dev.getDevType()) && (d.getName().equals(dev.getName()) || d.getCreateId().equals(dev.getCreateId()))) + .count(); if (count == 0) { newDevList.add(dev); } @@ -1077,7 +1075,9 @@ public class PqDevServiceImpl extends ServiceImpl implements param.setDevType(pqDev.getDevType()); this.checkRepeat(param, false); - long count = newDevList.stream().filter(dev -> dev.getName().equals(pqDev.getName()) || dev.getCreateId().equals(pqDev.getCreateId())).count(); + long count = newDevList.stream().filter(dev -> + dev.getDevType().equals(pqDev.getDevType()) && (dev.getName().equals(pqDev.getName()) || dev.getCreateId().equals(pqDev.getCreateId())) + ).count(); if (count == 0) { newDevList.add(pqDev); } else { @@ -1087,12 +1087,264 @@ public class PqDevServiceImpl extends ServiceImpl implements }); this.saveBatch(newDevList); + List pqDevSubList = new ArrayList<>(); + for (PqDev dev : newDevList) { + PqDevSub pqDevSub = new PqDevSub(); + pqDevSub.setDevId(dev.getId()); + pqDevSub.setCheckState(CheckStateEnum.UNCHECKED.getValue()); + pqDevSub.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); + pqDevSub.setReportState(DevReportStateEnum.UNCHECKED.getValue()); + pqDevSub.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); + pqDevSub.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); + pqDevSubList.add(pqDevSub); + } + pqDevSubService.saveBatch(pqDevSubList); + return true; } + return false; } @Override - public void visualizeProvinceDev(List pqDevs) { + public boolean importContrastDev(MultipartFile file, String patternId, String planId, HttpServletResponse response) { + ImportParams params = new ImportParams(); + params.setStartSheetIndex(0); + params.setSheetNum(1); + params.setNeedVerify(true); + params.setHeadRows(2); + + List contrastDevExcelList = null; + try { + ExcelImportResult excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), ContrastDevExcel.ImportExcel.class, params); + if (excelImportResult.isVerifyFail()) { + // 此处前端要做特殊处理,具体可以参考技术监督的数据导入 + Workbook failWorkbook = excelImportResult.getFailWorkbook(); + PoiUtil.exportFileByWorkbook(failWorkbook, "非法被检设备数据.xlsx", response); + } else { + contrastDevExcelList = excelImportResult.getList(); + } + } catch (Exception e) { + throw new BusinessException(DetectionResponseEnum.IMPORT_DATA_FAIL); + } + return this.importContrastDev(contrastDevExcelList, patternId); + } + + @Override + @Transactional + public boolean importContrastDev(List contrastDevExcelList, String patternId) { + if (CollUtil.isNotEmpty(contrastDevExcelList)) { + List monitorList = new ArrayList<>(); + List oldDevList = contrastDevExcelList.stream().map(devExcel -> { + PqDev pqDev = BeanUtil.copyProperties(devExcel, PqDev.class); + + if (pqDev.getEncryptionFlag() == 1) { + if (StrUtil.isNotBlank(pqDev.getSeries()) && StrUtil.isNotBlank(pqDev.getDevKey())) { + pqDev.setSeries(EncryptionUtil.encodeString(1, pqDev.getSeries())); + pqDev.setDevKey(EncryptionUtil.encodeString(1, pqDev.getDevKey())); + } else { + throw new BusinessException(DetectionResponseEnum.SERIES_AND_DEVKEY_NOT_BLANK); + } + } + DevType devType = devTypeService.getByName(pqDev.getDevType()); + if (ObjectUtil.isNull(devType)) { + throw new BusinessException(DetectionResponseEnum.DEV_TYPE_NOT_EXIST); + } else { + pqDev.setDevType(devType.getId()); + + Integer devChns = devType.getDevChns(); + List numList = devExcel.getPqMonitorExcelList().stream().map(monitorExcel -> monitorExcel.getNum()).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(numList)) { + Integer max = CollectionUtil.max(numList); + Integer min = CollectionUtil.min(numList); + if (min < 1 || max > devChns) { + throw new BusinessException(DetectionResponseEnum.MONITOR_NUM_OUT_OF_RANGE); + } + if (min == max && numList.size() > 1) { + throw new BusinessException(DetectionResponseEnum.MONITOR_NUM_REPEAT); + } + } + } + + pqDev.setImportFlag(1); + pqDev.setId(UUID.randomUUID().toString().replaceAll("-", "")); + pqDev.setCreateId(pqDev.getName()); //导入时设备序列号默认与设备名称相同 + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < devExcel.getPqMonitorExcelList().size(); i++) { + PqMonitor monitor = BeanUtil.copyProperties(devExcel.getPqMonitorExcelList().get(i), PqMonitor.class); + if (StrUtil.isBlank(monitor.getName())) { + continue; + } + sb.append(monitor.getNum() + StrUtil.COMMA); + monitor.setDevId(pqDev.getId()); + monitorList.add(monitor); + } + if (sb.length() > 0) { + pqDev.setInspectChannel(sb.replace(sb.length() - 1, sb.length(), "").toString()); + } + return pqDev; + }).collect(Collectors.toList()); + + //逆向可视化 + this.reverseVisualizeProvinceDev(oldDevList, patternId); + + List newDevList = new ArrayList<>(); + oldDevList.forEach(pqDev -> { + PqDevParam param = BeanUtil.copyProperties(pqDev, PqDevParam.class); + this.checkRepeat(param, false); + long count = newDevList.stream().filter(dev -> + dev.getDevType().equals(pqDev.getDevType()) + && dev.getCityName().equals(pqDev.getCityName()) + && dev.getGdName().equals(pqDev.getGdName()) + && dev.getSubName().equals(pqDev.getSubName()) + && (dev.getName().equals(pqDev.getName()) || dev.getCreateId().equals(pqDev.getCreateId()))) + .count(); + if (count == 0) { + newDevList.add(pqDev); + } + }); + QueryWrapper wrapper1 = new QueryWrapper() + .eq("pq_dev.State", DataStateEnum.ENABLE.getCode()) + .in("pq_dev.Harm_Sys_Id", newDevList.stream().map(PqDev::getHarmSysId).collect(Collectors.toList())); + List oldDevList1 = this.list(wrapper1); + if (CollUtil.isNotEmpty(oldDevList1)) { + oldDevList1.stream().forEach(oldDev -> { + 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())); + BeanUtil.copyProperties(newDev, oldDev, "id"); + } + }); + this.updateBatchById(oldDevList1); + } + this.saveBatch(newDevList); + List pqDevSubList = new ArrayList<>(); + for (PqDev dev : newDevList) { + PqDevSub pqDevSub = new PqDevSub(); + pqDevSub.setDevId(dev.getId()); + pqDevSub.setCheckState(CheckStateEnum.UNCHECKED.getValue()); + pqDevSub.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); + pqDevSub.setReportState(DevReportStateEnum.UNCHECKED.getValue()); + pqDevSub.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); + pqDevSub.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); + pqDevSubList.add(pqDevSub); + } + 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.saveBatch(monitorList); + return true; + } + return false; + } + + @Override + public List getContrastDevPullDownList(int startCol, boolean isExport) { + List pullDowns = new ArrayList<>(); + List dictDataList = null; + PullDown pullDown = null; + + // 设备类型 + 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.setStrings(devTypeList.stream().map(DevType::getName).collect(Collectors.toList())); + pullDowns.add(pullDown); + + // 设备厂家 + DictType dictType = dictTypeService.getByCode("Dev_Manufacturers"); + if (ObjectUtil.isNotNull(dictType)) { + 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.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); + pullDowns.add(pullDown); + } + + // 通讯协议 + dictType = dictTypeService.getByCode("Protocol"); + if (ObjectUtil.isNotNull(dictType)) { + 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.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); + pullDowns.add(pullDown); + } + + // 是否加密 + pullDown = new PullDown(); + if (isExport) { + pullDown.setFirstCol(startCol + 11); + pullDown.setLastCol(startCol + 11); + } else { + pullDown.setFirstCol(startCol + 7); + pullDown.setLastCol(startCol + 7); + } + pullDown.setStrings(Arrays.asList("是", "否")); + pullDowns.add(pullDown); + + // 接线方式 + if (!isExport) { + + dictType = dictTypeService.getByCode("Dev_Connect"); + if (ObjectUtil.isNotNull(dictType)) { + dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); + + pullDown = new PullDown(); + pullDown.setFirstCol(startCol + 21); + pullDown.setLastCol(startCol + 21); + pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); + pullDowns.add(pullDown); + } + } + + return pullDowns; + } + + @Override + public void visualizeProvinceDev(List pqDevs) { pqDevs.forEach(pqDev -> { + if (StrUtil.isNotBlank(pqDev.getSeries())) { + pqDev.setSeries(EncryptionUtil.decoderString(1, pqDev.getSeries())); + } + if (StrUtil.isNotBlank(pqDev.getDevKey())) { + pqDev.setDevKey(EncryptionUtil.decoderString(1, pqDev.getDevKey())); + } pqDev.setDevType(devTypeService.getById(pqDev.getDevType()).getName()); if (StrUtil.isNotBlank(pqDev.getManufacturer())) { pqDev.setManufacturer(dictDataService.getDictDataById(pqDev.getManufacturer()).getName()); @@ -1108,12 +1360,6 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override public void reverseVisualizeProvinceDev(List pqDevs, String patternId) { pqDevs.forEach(pqDev -> { - DevType devType = devTypeService.getByName(pqDev.getDevType()); - if (ObjectUtil.isNull(devType)) { - throw new BusinessException(DetectionResponseEnum.DEV_TYPE_NOT_EXIST); - } else { - pqDev.setDevType(devType.getId()); - } pqDev.setPattern(patternId); DictData manufacturerDictData = dictDataService.getDictDataByName(pqDev.getManufacturer()); if (ObjectUtil.isNull(manufacturerDictData)) { @@ -1135,11 +1381,11 @@ public class PqDevServiceImpl extends ServiceImpl implements pqDev.setDelegate(delegateDictData.getId()); } } - pqDev.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); - pqDev.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); - pqDev.setCheckState(CheckStateEnum.UNCHECKED.getValue()); - pqDev.setReportState(DevReportStateEnum.UNCHECKED.getValue()); - pqDev.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); +// pqDev.setTimeCheckResult(TimeCheckResultEnum.UNKNOWN.getValue()); +// pqDev.setFactorCheckResult(FactorCheckResultEnum.UNKNOWN.getValue()); +// pqDev.setCheckState(CheckStateEnum.UNCHECKED.getValue()); +// pqDev.setReportState(DevReportStateEnum.UNCHECKED.getValue()); +// pqDev.setCheckResult(CheckResultEnum.UNCHECKED.getValue()); pqDev.setState(DataStateEnum.ENABLE.getCode()); }); } diff --git a/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevSubServiceImpl.java b/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevSubServiceImpl.java new file mode 100644 index 00000000..9ba02125 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevSubServiceImpl.java @@ -0,0 +1,20 @@ +package com.njcn.gather.device.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.gather.device.pojo.po.PqDevSub; +import com.njcn.gather.device.mapper.PqDevSubMapper; +import com.njcn.gather.device.service.IPqDevSubService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author caozehui + * @date 2025-07-04 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PqDevSubServiceImpl extends ServiceImpl implements IPqDevSubService { + +} 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 new file mode 100644 index 00000000..ada3170a --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java @@ -0,0 +1,287 @@ +package com.njcn.gather.device.service.impl; + +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +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.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +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; +import com.njcn.common.pojo.poi.PullDown; +import com.njcn.common.utils.EncryptionUtil; +import com.njcn.gather.device.mapper.PqStandardDevMapper; +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.pojo.enums.DetectionResponseEnum; +import com.njcn.gather.system.dictionary.pojo.po.DictData; +import com.njcn.gather.system.dictionary.pojo.po.DictType; +import com.njcn.gather.system.dictionary.service.IDictDataService; +import com.njcn.gather.system.dictionary.service.IDictTypeService; +import com.njcn.gather.type.service.IDevTypeService; +import com.njcn.web.factory.PageFactory; +import com.njcn.web.utils.ExcelUtil; +import com.njcn.web.utils.PoiUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author 曹泽辉 + * @date 2025-07-02 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PqStandardDevServiceImpl extends ServiceImpl implements IPqStandardDevService { + private final IDevTypeService devTypeService; + private final IDictDataService dictDataService; + private final IDictTypeService dictTypeService; + + @Override + public Page listPqStandardDevs(PqStandardDevParam.QueryParam queryParam) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StrUtil.isNotBlank(queryParam.getName()), "name", queryParam.getName()) + .eq(StrUtil.isNotBlank(queryParam.getManufacturer()), "manufacturer", queryParam.getManufacturer()) + .eq(StrUtil.isNotBlank(queryParam.getDevType()), "dev_type", queryParam.getDevType()) + .eq("state", DataStateEnum.ENABLE.getCode()); + return this.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), wrapper); + } + + @Override + public PqStandardDev getPqStandardDevById(String id) { + PqStandardDev standardDev = this.getById(id); + if (standardDev.getEncryptionFlag() == 1) { + standardDev.setSeries(EncryptionUtil.decoderString(1, standardDev.getSeries())); + standardDev.setDevKey(EncryptionUtil.decoderString(1, standardDev.getDevKey())); + } + return standardDev; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean addPqStandardDev(PqStandardDevParam param) { + this.checkRepeat(param, false); + PqStandardDev pqStandardDev = BeanUtil.copyProperties(param, PqStandardDev.class); + pqStandardDev.setState(DataStateEnum.ENABLE.getCode()); + this.checkEncryption(pqStandardDev); + return this.save(pqStandardDev); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updatePqStandardDev(PqStandardDevParam.UpdateParam param) { + this.checkRepeat(param, true); + PqStandardDev pqStandardDev = BeanUtil.copyProperties(param, PqStandardDev.class); + this.checkEncryption(pqStandardDev); + return this.updateById(pqStandardDev); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean deletePqStandardDevs(List ids) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper(); + wrapper.set(PqStandardDev::getState, DataStateEnum.DELETED.getCode()) + .in(PqStandardDev::getId, ids); + return this.update(wrapper); + } + + @Override + public void export(PqStandardDevParam.QueryParam queryParam) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StrUtil.isNotBlank(queryParam.getName()), "name", queryParam.getName()) + .eq(StrUtil.isNotBlank(queryParam.getManufacturer()), "manufacturer", queryParam.getManufacturer()) + .eq(StrUtil.isNotBlank(queryParam.getDevType()), "dev_type", queryParam.getDevType()) + .eq("state", DataStateEnum.ENABLE.getCode()); + List pqStandardDevs = this.list(wrapper); + this.visualizeStandardDev(pqStandardDevs); + List pqStandardDevExcels = BeanUtil.copyToList(pqStandardDevs, PqStandardDevExcel.class); + ExcelUtil.exportExcelPullDown(new ExportParams(), "标准设备导出数据.xlsx", 1, this.getStandardDevPullDownList(), PqStandardDevExcel.class, pqStandardDevExcels); + } + + + @Override + public void downloadTemplate() { + ExcelUtil.exportExcelPullDown(new ExportParams(), "标准设备导入模板.xlsx", 1, this.getStandardDevPullDownList(), PqStandardDevExcel.class, Collections.emptyList()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void importData(MultipartFile file, HttpServletResponse response) { + ImportParams params = new ImportParams(); + params.setStartSheetIndex(0); + params.setSheetNum(1); + params.setNeedVerify(true); + params.setHeadRows(1); + + List contrastDevExcelList = null; + try { + ExcelImportResult excelImportResult = ExcelImportUtil.importExcelMore(file.getInputStream(), PqStandardDevExcel.class, params); + if (excelImportResult.isVerifyFail()) { + // 此处前端要做特殊处理,具体可以参考技术监督的数据导入 + Workbook failWorkbook = excelImportResult.getFailWorkbook(); + PoiUtil.exportFileByWorkbook(failWorkbook, "非法被检设备数据.xlsx", response); + } else { + contrastDevExcelList = excelImportResult.getList(); + } + } catch (Exception e) { + throw new BusinessException(DetectionResponseEnum.IMPORT_DATA_FAIL); + } + this.importData(contrastDevExcelList); + } + + /** + * 导入数据 + * + * @param contrastDevExcelList + * @return + */ + private void importData(List contrastDevExcelList) { + if (CollectionUtil.isNotEmpty(contrastDevExcelList)) { + List contrastDevs = BeanUtil.copyToList(contrastDevExcelList, PqStandardDev.class); + this.reverseVisualizeStandardDev(contrastDevs); + this.saveBatch(contrastDevs); + } + } + + /** + * 获取标准设备导出文件下拉列表 + * + * @return + */ + private List getStandardDevPullDownList() { + List pullDownList = new ArrayList<>(); + + PullDown pullDown = new PullDown(); + + // 设备类型 + pullDown.setFirstCol(1); + pullDown.setLastCol(1); + pullDown.setStrings(devTypeService.listAll().stream().map(devType -> devType.getName()).collect(Collectors.toList())); + pullDownList.add(pullDown); + + + List dictDataList = null; + // 设备厂家 + DictType dictType = dictTypeService.getByCode("Dev_Manufacturers"); + if (ObjectUtil.isNotNull(dictType)) { + dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); + + pullDown = new PullDown(); + pullDown.setFirstCol(2); + pullDown.setLastCol(2); + pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); + pullDownList.add(pullDown); + } + + // 通讯协议 + dictType = dictTypeService.getByCode("Protocol"); + if (ObjectUtil.isNotNull(dictType)) { + dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); + + pullDown = new PullDown(); + pullDown.setFirstCol(4); + pullDown.setLastCol(4); + pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); + pullDownList.add(pullDown); + } + + // 是否加密 + pullDown = new PullDown(); + pullDown.setFirstCol(7); + pullDown.setLastCol(7); + pullDown.setStrings(Arrays.asList("否", "是")); + pullDownList.add(pullDown); + + return pullDownList; + } + + /** + * 可视化标准设备 + * + * @param pqStandardDevs + */ + private void visualizeStandardDev(List pqStandardDevs) { + pqStandardDevs.forEach(pqStandardDev -> { + pqStandardDev.setDevType(devTypeService.getById(pqStandardDev.getDevType()).getName()); + pqStandardDev.setManufacturer(dictDataService.getDictDataById(pqStandardDev.getManufacturer()).getName()); + pqStandardDev.setProtocol(dictDataService.getDictDataById(pqStandardDev.getProtocol()).getName()); + if (pqStandardDev.getEncryptionFlag() == 1) { + pqStandardDev.setSeries(EncryptionUtil.decoderString(1, pqStandardDev.getSeries())); + pqStandardDev.setDevKey(EncryptionUtil.decoderString(1, pqStandardDev.getDevKey())); + } + }); + } + + /** + * 逆向可视化标准设备 + * + * @param pqStandardDevs + */ + private void reverseVisualizeStandardDev(List pqStandardDevs) { + pqStandardDevs.forEach(pqStandardDev -> { + PqStandardDevParam pqStandardDevParam = BeanUtil.copyProperties(pqStandardDev, PqStandardDevParam.class); + this.checkRepeat(pqStandardDevParam, false); + this.checkEncryption(pqStandardDev); + pqStandardDev.setDevType(devTypeService.getByName(pqStandardDev.getDevType()).getId()); + pqStandardDev.setManufacturer(dictDataService.getDictDataByName(pqStandardDev.getManufacturer()).getId()); + pqStandardDev.setProtocol(dictDataService.getDictDataByName(pqStandardDev.getProtocol()).getId()); + pqStandardDev.setState(DataStateEnum.ENABLE.getCode()); + }); + } + + /** + * 检查是否重复 + * + * @param pqStandardDevParam + * @param isExcludeSelf + */ + private void checkRepeat(PqStandardDevParam pqStandardDevParam, boolean isExcludeSelf) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("pq_standard_dev.Name", pqStandardDevParam.getName()) + .eq("pq_standard_dev.State", DataStateEnum.ENABLE.getCode()); + if (isExcludeSelf) { + if (pqStandardDevParam instanceof PqStandardDevParam.UpdateParam) { + wrapper.ne("pq_standard_dev.Id", ((PqStandardDevParam.UpdateParam) pqStandardDevParam).getId()); + } + } + int count = this.count(wrapper); + if (count > 0) { + throw new BusinessException(DetectionResponseEnum.PQ_STANDARD_DEV_REPEAT); + } + } + + /** + * 检查加密情况 + * + * @param pqStandardDev + */ + private void checkEncryption(PqStandardDev pqStandardDev) { + if (pqStandardDev.getEncryptionFlag() == 1) { + if (StrUtil.isNotBlank(pqStandardDev.getSeries()) && StrUtil.isNotBlank(pqStandardDev.getDevKey())) { + pqStandardDev.setSeries(EncryptionUtil.encodeString(1, pqStandardDev.getSeries())); + pqStandardDev.setDevKey(EncryptionUtil.encodeString(1, pqStandardDev.getDevKey())); + } else { + throw new BusinessException(DetectionResponseEnum.SERIES_AND_DEVKEY_NOT_BLANK); + } + } + } +} diff --git a/detection/src/main/java/com/njcn/gather/err/controller/PqErrSysController.java b/detection/src/main/java/com/njcn/gather/err/controller/PqErrSysController.java index 4a05bb46..9b203a6b 100644 --- a/detection/src/main/java/com/njcn/gather/err/controller/PqErrSysController.java +++ b/detection/src/main/java/com/njcn/gather/err/controller/PqErrSysController.java @@ -139,5 +139,16 @@ public class PqErrSysController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); } } + + @OperateInfo + @GetMapping("/getTestItems") + @ApiOperation("根据误差体系id获取测试项") + @ApiImplicitParam(name = "id", value = "误差体系id", required = true) + public HttpResult>> getTestItems(@RequestParam("id") String id) { + String methodDescribe = getMethodDescribe("getTestItems"); + LogUtil.njcnDebug(log, "{},获取测试项ID为:{}", methodDescribe, id); + List> result = pqErrSysService.getTestItems(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } } diff --git a/detection/src/main/java/com/njcn/gather/err/service/IPqErrSysService.java b/detection/src/main/java/com/njcn/gather/err/service/IPqErrSysService.java index 51ac0762..6f130f58 100644 --- a/detection/src/main/java/com/njcn/gather/err/service/IPqErrSysService.java +++ b/detection/src/main/java/com/njcn/gather/err/service/IPqErrSysService.java @@ -79,4 +79,12 @@ public interface IPqErrSysService extends IService { * @return 成功返回true,失败返回false */ boolean copyPqErrSys(String id); + + /** + * 根据id获取测试项列表 + * + * @param id 误差体系id + * @return + */ + List> getTestItems(String id); } diff --git a/detection/src/main/java/com/njcn/gather/err/service/impl/PqErrSysServiceImpl.java b/detection/src/main/java/com/njcn/gather/err/service/impl/PqErrSysServiceImpl.java index 654f319a..c56686e4 100644 --- a/detection/src/main/java/com/njcn/gather/err/service/impl/PqErrSysServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/err/service/impl/PqErrSysServiceImpl.java @@ -208,6 +208,11 @@ public class PqErrSysServiceImpl extends ServiceImpl i return this.save(pqErrSys); } + @Override + public List> getTestItems(String id) { + return null; + } + /** * 检查重复 * diff --git a/detection/src/main/java/com/njcn/gather/monitor/controller/PqMonitorController.java b/detection/src/main/java/com/njcn/gather/monitor/controller/PqMonitorController.java index 8aab986c..6a0e922d 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/controller/PqMonitorController.java +++ b/detection/src/main/java/com/njcn/gather/monitor/controller/PqMonitorController.java @@ -1,13 +1,26 @@ package com.njcn.gather.monitor.controller; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.LogUtil; +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.controller.BaseController; +import com.njcn.web.utils.HttpResultUtil; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * @author caozehui @@ -21,5 +34,15 @@ import org.springframework.web.bind.annotation.RestController; public class PqMonitorController extends BaseController { private final IPqMonitorService pqMonitorService; + @OperateInfo + @PostMapping("/list") + @ApiOperation("查询监测点") + @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true) + public HttpResult> list(@RequestBody PqMonitorParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("list"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + List result = pqMonitorService.listPqMonitorByDevId(queryParam.getDevId()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } } diff --git a/detection/src/main/java/com/njcn/gather/monitor/pojo/param/PqMonitorParam.java b/detection/src/main/java/com/njcn/gather/monitor/pojo/param/PqMonitorParam.java index aa220478..a6510fdc 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/pojo/param/PqMonitorParam.java +++ b/detection/src/main/java/com/njcn/gather/monitor/pojo/param/PqMonitorParam.java @@ -4,6 +4,7 @@ import com.njcn.common.pojo.constant.PatternRegex; import com.njcn.gather.pojo.constant.DetectionValidMessage; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -16,28 +17,63 @@ import javax.validation.constraints.Pattern; @Data public class PqMonitorParam { - @ApiModelProperty(value = "谐波系统监测点ID") - private String code; + @ApiModelProperty(value = "所属设备id") + @NotBlank(message = DetectionValidMessage.DEVICE_ID_NOT_BLANK) + private String devId; @ApiModelProperty(value = "所属母线") @NotBlank(message = DetectionValidMessage.BELONG_LINE_NOT_BLANK) + private String busbar; + + @ApiModelProperty(value = "监测点名称") + @NotBlank(message = DetectionValidMessage.MONITOR_NAME_NOT_BLANK) private String name; - @ApiModelProperty(value = "监测点序号") + @ApiModelProperty(value = "线路号(监测点序号)") @NotNull(message = DetectionValidMessage.MONITOR_NUM_NOT_NULL) private Integer num; @ApiModelProperty(value = "PT变比") - @NotNull(message = DetectionValidMessage.PT_NOT_NULL) - private Float pt; + @NotBlank(message = DetectionValidMessage.PT_NOT_BLANK) + private String pt; @ApiModelProperty(value = "CT变比") - @NotNull(message = DetectionValidMessage.CT_NOT_NULL) - private Float ct; + @NotBlank(message = DetectionValidMessage.CT_NOT_BLANK) + private String ct; @ApiModelProperty(value = "接线方式") - @NotBlank(message = DetectionValidMessage.WIRING_TYPE_NOT_BLANK) - @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.WIRING_TYPE_FORMAT_ERROR) - private String ptType; + @NotBlank(message = DetectionValidMessage.CONNECTION_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.CONNECTION_FORMAT_ERROR) + private String connection; + @ApiModelProperty(value = "统计间隔") + @NotNull(message = DetectionValidMessage.STAT_INTERVAL_NOT_NULL) + private Integer statInterval; + + @ApiModelProperty(value = "谐波系统监测点id") + @NotBlank(message = DetectionValidMessage.MONITOR_ID_NOT_BLANK) + private String harmSysId; + + + /** + * 分页查询实体 + */ + @Data + public static class QueryParam { + @ApiModelProperty(value = "所属设备id") + @NotBlank(message = DetectionValidMessage.DEVICE_ID_NOT_BLANK) + private String devId; + } + + /** + * 修改实体 + */ +// @Data +// @EqualsAndHashCode(callSuper = true) +// public static class UpdateParam extends PqMonitorParam { +// @ApiModelProperty(value = "监测点id", required = true) +// @NotBlank(message = DetectionValidMessage.ID_NOT_BLANK) +// @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.ID_FORMAT_ERROR) +// private String id; +// } } diff --git a/detection/src/main/java/com/njcn/gather/monitor/pojo/po/PqMonitor.java b/detection/src/main/java/com/njcn/gather/monitor/pojo/po/PqMonitor.java index 9d43fc5a..718518fc 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/pojo/po/PqMonitor.java +++ b/detection/src/main/java/com/njcn/gather/monitor/pojo/po/PqMonitor.java @@ -1,9 +1,7 @@ package com.njcn.gather.monitor.pojo.po; import com.baomidou.mybatisplus.annotation.TableName; -import com.njcn.db.mybatisplus.bo.BaseEntity; import lombok.Data; -import lombok.EqualsAndHashCode; import java.io.Serializable; @@ -20,40 +18,49 @@ public class PqMonitor implements Serializable { */ private String id; - /** - * 默认与谐波系统监测点ID相同 - */ - private String code; - /** * 所属设备ID */ private String devId; /** - * 所属母线 + * 监测点名称 */ private String name; /** - * 监测点序号 + * 所属母线 + */ + private String busbar; + + /** + * 线路号(监测点序号) */ private Integer num; /** * PT变比 */ - private Float pt; + private String pt; /** * CT变比 */ - private Float ct; + private String ct; + + /** + * 统计间隔 + */ + private Integer statInterval; /** * 接线方式,字典表 */ - private String ptType; + private String connection; + /** + * 谐波系统监测点id + */ + private String harmSysId; } 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 ffc4ac75..2a5e49e5 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 @@ -1,14 +1,11 @@ package com.njcn.gather.monitor.pojo.vo; import cn.afterturn.easypoi.excel.annotation.Excel; -import com.njcn.common.pojo.constant.PatternRegex; import com.njcn.gather.pojo.constant.DetectionValidMessage; import lombok.Data; -import lombok.EqualsAndHashCode; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; /** * @author caozehui @@ -17,36 +14,47 @@ import javax.validation.constraints.Pattern; @Data public class PqMonitorExcel { - @Excel(name = "监测点序号", width = 20, orderNum = "1") - @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.MONITOR_NUM_FORMAT_ERROR) - private Integer num; + @Excel(name = "谐波系统监测点ID*", width = 20, orderNum = "1") + @NotBlank(message = DetectionValidMessage.MONITOR_ID_NOT_BLANK) + private String harmSysId; - @Excel(name = "所属母线", width = 20, orderNum = "2") + @Excel(name = "所属母线*", width = 20, orderNum = "2") @NotBlank(message = DetectionValidMessage.BELONG_LINE_NOT_BLANK) + private String busbar; + + @Excel(name = "监测点名称*", width = 20, orderNum = "3") + @NotBlank(message = DetectionValidMessage.MONITOR_NAME_NOT_BLANK) private String name; - @Excel(name = "PT变比", width = 20, orderNum = "3") - @NotNull(message = DetectionValidMessage.PT_NOT_NULL) - private Float pt; + @Excel(name = "线路号(监测点序号)*", width = 20, orderNum = "4") + @NotNull(message = DetectionValidMessage.MONITOR_NUM_NOT_NULL) + private Integer num; - @Excel(name = "CT变比", width = 20, orderNum = "4") - @NotNull(message = DetectionValidMessage.CT_NOT_NULL) - private Float ct; + @Excel(name = "PT变比*", width = 20, orderNum = "5") + @NotBlank(message = DetectionValidMessage.PT_NOT_BLANK) + private String pt; - @Excel(name = "接线方式", width = 20, orderNum = "5") - @NotBlank(message = DetectionValidMessage.WIRING_TYPE_NOT_BLANK) - @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.WIRING_TYPE_FORMAT_ERROR) - private String ptType; + @Excel(name = "CT变比*", width = 20, orderNum = "6") + @NotBlank(message = DetectionValidMessage.CT_NOT_BLANK) + private String ct; - @Data - @EqualsAndHashCode(callSuper = true) - public static class ImportData extends PqMonitorExcel { + @Excel(name = "接线方式*", width = 20, orderNum = "7") + @NotBlank(message = DetectionValidMessage.CONNECTION_NOT_BLANK) + private String connection; - } + @Excel(name = "统计间隔*", width = 10, orderNum = "8") + @NotNull(message = DetectionValidMessage.STAT_INTERVAL_NOT_NULL) + private Integer statInterval; - @Data - @EqualsAndHashCode(callSuper = true) - public static class ExportData extends PqMonitorExcel { - - } +// @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 7f430df0..2f2aacad 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 @@ -1,7 +1,7 @@ package com.njcn.gather.monitor.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.monitor.pojo.param.PqMonitorParam; import com.njcn.gather.monitor.pojo.po.PqMonitor; @@ -13,6 +13,8 @@ import java.util.List; */ public interface IPqMonitorService extends IService { + + /** * 根据设备id获取所有监测点信息 * @@ -22,28 +24,30 @@ public interface IPqMonitorService extends IService { List listPqMonitorByDevId(String devId); /** - * 批量新增监测点信息 + * 根据设备id批量新增监测点信息 * - * @param devId 被检设备id - * @param pqMonitorParamList 监测点信息列表 - * @return 新增成功返回true,否则返回false + * @param devId + * @param monitorList + * @return */ - boolean addPqMonitorByDevId(String devId, List pqMonitorParamList); + boolean addPqMonitorByDevId(String devId, List monitorList); /** - * 批量删除监测点信息 + * 根据设备id批量修改监测点信息 * - * @param devId 被检设备id - * @return 删除成功返回true,否则返回false + * @param devId + * @param paramList + * @return + */ + boolean updatePqMonitorByDevId(String devId, List paramList); + + /** + * 根据设备id删除监测点信息 + * + * @param devId + * @return */ boolean deletePqMonitorByDevId(String devId); - /** - * 修改监测点信息 - * - * @param devId 被检设备id - * @param paramList 监测点信息 - * @return 修改成功返回true,否则返回false - */ - boolean updatePqMonitorByDevId(String devId, List paramList); + } 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 383396f8..13a42616 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 @@ -2,12 +2,13 @@ package com.njcn.gather.monitor.service.impl; import cn.hutool.core.bean.BeanUtil; 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.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.gather.system.dictionary.service.IDictDataService; +import com.njcn.web.factory.PageFactory; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -24,7 +25,6 @@ import java.util.List; @RequiredArgsConstructor public class PqMonitorServiceImpl extends ServiceImpl implements IPqMonitorService { - private final IDictDataService dictDataService; @Override public List listPqMonitorByDevId(String devId) { @@ -32,21 +32,12 @@ public class PqMonitorServiceImpl extends ServiceImpl pqMonitorParamList) { - List pqMonitorList = BeanUtil.copyToList(pqMonitorParamList, PqMonitor.class); + public boolean addPqMonitorByDevId(String devId, List monitorList) { + List pqMonitorList = BeanUtil.copyToList(monitorList, PqMonitor.class); pqMonitorList.forEach(pqMonitor -> pqMonitor.setDevId(devId)); return this.saveBatch(pqMonitorList); } - @Override - @Transactional - public boolean deletePqMonitorByDevId(String devId) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("pq_monitor.Dev_Id", devId); - return this.remove(wrapper); - } - @Override @Transactional public boolean updatePqMonitorByDevId(String devId, List paramList) { @@ -58,4 +49,33 @@ public class PqMonitorServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); + wrapper.eq("pq_monitor.Dev_Id", devId); + return this.remove(wrapper); + } + + /** + * 检查是否重复 + * + * @param pqMonitorParam + * @param isExcludeSelf + */ +// private void checkRepeat(PqMonitorParam pqMonitorParam, boolean isExcludeSelf) { +// QueryWrapper 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); +// } +// } } 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 40ee7c24..426c3180 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 @@ -99,7 +99,6 @@ public class AdPlanController extends BaseController { } } - @OperateInfo(info = LogEnum.BUSINESS_COMMON) @GetMapping("/listByPattern") @ApiOperation("按照模式查询检测计划") @@ -125,8 +124,8 @@ public class AdPlanController extends BaseController { @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.DOWNLOAD) @PostMapping("/downloadTemplate") @ApiOperation("下载检测计划导出模板") - public void downloadTemplate(@RequestBody AdPlanParam.QueryParam queryParam) { - adPlanService.downloadTemplate(queryParam.getPatternId()); + public void downloadTemplate(@RequestBody AdPlanParam param) { + adPlanService.downloadTemplate(param.getPattern()); } @OperateInfo(info = LogEnum.BUSINESS_COMMON, operateType = OperateType.UPLOAD) @@ -136,7 +135,7 @@ public class AdPlanController extends BaseController { @ApiImplicitParam(name = "file", value = "检测计划数据文件", required = true), @ApiImplicitParam(name = "pattern", value = "模式Id", required = true) }) - public HttpResult importPlan(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, HttpServletResponse response) { + public HttpResult importPlan(@RequestParam("file") MultipartFile file, @RequestParam("patternId") String patternId, HttpServletResponse response) { String methodDescribe = getMethodDescribe("importCNPlan"); LogUtil.njcnDebug(log, "{},上传文件为:{}", methodDescribe, file.getOriginalFilename()); @@ -144,8 +143,12 @@ public class AdPlanController extends BaseController { if (!fileType) { throw new BusinessException(CommonResponseEnum.FILE_XLSX_ERROR); } - adPlanService.importPlan(file, patternId, response); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + boolean result = adPlanService.importPlan(file, patternId, response); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + }else{ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } } @OperateInfo(info = LogEnum.BUSINESS_COMMON) @@ -168,5 +171,20 @@ public class AdPlanController extends BaseController { LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, String.join(StrUtil.COMMA, ids)); 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); + if (result) { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe); + } else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe); + } + } } 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 27fef24d..6ea5d1c9 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 @@ -117,4 +117,15 @@ 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/vo/AdPlanVO.java b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/AdPlanVO.java index b62fa8c7..da8ef6e7 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 @@ -109,5 +109,13 @@ public class AdPlanVO { */ private String reportTemplateName; + /** + * 数据处理原则 + */ private String dataRule; + + /** + * 检测进度 + */ + private Float progress; } diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/ProvincePlanExcel.java b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/ProvincePlanExcel.java index 7f5de043..a0904245 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/vo/ProvincePlanExcel.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/vo/ProvincePlanExcel.java @@ -1,6 +1,5 @@ package com.njcn.gather.plan.pojo.vo; -import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.annotation.ExcelCollection; import com.njcn.gather.device.pojo.vo.ProvinceDevExcel; import lombok.Data; 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 4c016a9d..4442f909 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 @@ -82,7 +82,7 @@ public interface IAdPlanService extends IService { * @param devIds * @return */ - boolean updateTestState(String planId, List devIds); + //boolean updateTestState(String planId, List devIds); /** * 数据状态回退 @@ -123,5 +123,13 @@ public interface IAdPlanService extends IService { * @param patternId * @param response */ - void importPlan(MultipartFile file, String patternId, HttpServletResponse response); + boolean importPlan(MultipartFile file, String patternId, HttpServletResponse response); + + /** + * 拆分计划 + * + * @param param + * @return + */ + boolean splitPlan(AdPlanParam.SplitParam param); } 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 ef00a06a..47c9bfbf 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 @@ -10,7 +10,6 @@ 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.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -18,12 +17,16 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.poi.PullDown; +import com.njcn.gather.device.mapper.PqDevMapper; 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.vo.CNDevExcel; +import com.njcn.gather.device.pojo.vo.PqDevVO; import com.njcn.gather.device.pojo.vo.ProvinceDevExcel; import com.njcn.gather.device.service.IPqDevService; +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; @@ -104,6 +107,8 @@ public class AdPlanServiceImpl extends ServiceImpl impleme private final IDevTypeService devTypeService; private final IDictTypeService dictTypeService; private final AdHarmonicService adHarmonicService; + private final PqDevMapper pqDevMapper; + private final IPqDevSubService pqDevSubService; @Override public Page listAdPlan(AdPlanParam.QueryParam queryParam) { @@ -118,16 +123,25 @@ public class AdPlanServiceImpl extends ServiceImpl impleme PqReport report = this.baseMapper.getPqReportById(adPlan.getReportTemplateId()); adPlanVO.setReportTemplateName(report.getName() + "_" + report.getVersion()); } - return adPlanVO; - }).collect(Collectors.toList()); - adPlanVOList.forEach(adPlanVO -> { 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); + } + + return adPlanVO; + }).collect(Collectors.toList()); Page page2 = new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)); page2.setTotal(page1.getTotal()); @@ -372,42 +386,47 @@ public class AdPlanServiceImpl extends ServiceImpl impleme return result; } - @Override - public boolean updateTestState(String planId, List devIds) { - if (CollUtil.isNotEmpty(devIds)) { - pqDevService.update(new LambdaUpdateWrapper() - .set(PqDev::getCheckState, CheckStateEnum.CHECKING.getValue()) - .in(PqDev::getId, devIds)); - return this.update(new LambdaUpdateWrapper() - .set(AdPlan::getTestState, CheckStateEnum.CHECKING.getValue()) - .eq(AdPlan::getId, planId)); - } - return true; - } +// @Override +// public boolean updateTestState(String planId, List devIds) { +// if (CollUtil.isNotEmpty(devIds)) { +// pqDevService.update(new LambdaUpdateWrapper() +// .set(PqDev::getCheckState, CheckStateEnum.CHECKING.getValue()) +// .in(PqDev::getId, devIds)); +// return this.update(new LambdaUpdateWrapper() +// .set(AdPlan::getTestState, CheckStateEnum.CHECKING.getValue()) +// .eq(AdPlan::getId, planId)); +// } +// return true; +// } @Override public boolean updateBackTestState(String planId, List devIds) { - //当前如果第二次进行测试,则需要将判断之前状态是否不是非检测状态 - List devList = pqDevService.list(new LambdaQueryWrapper().in(PqDev::getId, devIds)); - if (CollUtil.isNotEmpty(devList)) { - for (PqDev pqDev : devList) { - if (!pqDev.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())) { - pqDevService.update(new LambdaUpdateWrapper() - .set(PqDev::getCheckState, CheckStateEnum.CHECKED.getValue()) - .in(PqDev::getId, devIds)); - } else { - pqDevService.update(new LambdaUpdateWrapper() - .set(PqDev::getCheckState, CheckStateEnum.UNCHECKED.getValue()) - .in(PqDev::getId, devIds)); + if (CollUtil.isNotEmpty(devIds)) { + //当前如果第二次进行测试,则需要将判断之前状态是否不是非检测状态 + List pqDevVOList = pqDevMapper.listByDevIds(devIds); + + if (CollUtil.isNotEmpty(pqDevVOList)) { + for (PqDevVO pqDevVO : pqDevVOList) { + if (!pqDevVO.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())) { + pqDevSubService.update(new LambdaUpdateWrapper() + .set(PqDevSub::getCheckState, CheckStateEnum.CHECKED.getValue()) + .in(PqDevSub::getDevId, devIds)); + } else { + pqDevSubService.update(new LambdaUpdateWrapper() + .set(PqDevSub::getCheckState, CheckStateEnum.UNCHECKED.getValue()) + .in(PqDevSub::getDevId, devIds)); + } } } - } - List list = pqDevService.list(new LambdaQueryWrapper().in(PqDev::getPlanId, planId)); - List collect = list.stream().filter(x -> !x.getCheckState().equals(CheckStateEnum.UNCHECKED.getValue())).collect(Collectors.toList()); - if (CollUtil.isEmpty(collect)) { - return this.update(new LambdaUpdateWrapper() - .set(AdPlan::getTestState, CheckStateEnum.UNCHECKED.getValue()) - .eq(AdPlan::getId, planId)); + PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); + queryParam.setPlanId(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)) { + return this.update(new LambdaUpdateWrapper() + .set(AdPlan::getTestState, CheckStateEnum.UNCHECKED.getValue()) + .eq(AdPlan::getId, planId)); + } } return false; } @@ -444,19 +463,19 @@ public class AdPlanServiceImpl extends ServiceImpl impleme if (planList.size() > 1) { StringBuffer allNote = new StringBuffer(); - List allDevList = new ArrayList<>(); + List allDevList = new ArrayList<>(); for (AdPlan plan : planList) { PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); queryParam.setPlanId(plan.getId()); - List devList = pqDevService.listByPlanId(queryParam); - devList = devList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList()); - allDevList.addAll(devList); + List pqDevVOList = pqDevMapper.selectByQueryParam(queryParam); + pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList()); + allDevList.addAll(pqDevVOList); - allNote.append(plan.getName() + "计划" + devList.size() + "台,"); + allNote.append(plan.getName() + "计划" + pqDevVOList.size() + "台,"); if (plan.getName().equals("概览")) { - sheets.put(plan.getName() + "检测计划", getRows(plan.getName(), devList, maxTime, getNote(plan, devList))); + sheets.put(plan.getName() + "检测计划", getRows(plan.getName(), pqDevVOList, maxTime, getNote(plan, pqDevVOList))); } else { - sheets.put(plan.getName(), getRows(plan.getName(), devList, maxTime, getNote(plan, devList))); + sheets.put(plan.getName(), getRows(plan.getName(), pqDevVOList, maxTime, getNote(plan, pqDevVOList))); } } allNote.insert(0, "说明:总计" + allDevList.size() + "台设备,"); @@ -466,10 +485,10 @@ public class AdPlanServiceImpl extends ServiceImpl impleme AdPlan plan = planList.get(0); PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); queryParam.setPlanId(plan.getId()); - List devList = pqDevService.listByPlanId(queryParam); - devList = devList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList()); + List pqDevVOList = pqDevMapper.selectByQueryParam(queryParam); + pqDevVOList = pqDevVOList.stream().filter(x -> !x.getCheckResult().equals(CheckResultEnum.UNCHECKED.getValue())).collect(Collectors.toList()); - sheets.put(plan.getName(), getRows(plan.getName(), devList, maxTime, getNote(plan, devList))); + sheets.put(plan.getName(), getRows(plan.getName(), pqDevVOList, maxTime, getNote(plan, pqDevVOList))); } exportPassRateExcel("数据分析结果.xlsx", maxTime, sheets); @@ -513,21 +532,25 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } @Override - public void importPlan(MultipartFile file, String patternId, HttpServletResponse response) { + public boolean importPlan(MultipartFile file, String patternId, HttpServletResponse response) { String currrentScene = sysTestConfigService.getCurrrentScene(); SceneEnum sceneEnum = SceneEnum.getSceneEnum(currrentScene); switch (sceneEnum) { case PROVINCE_PLATFORM: - this.importProvincePlan(file, patternId, response); - break; + return this.importProvincePlan(file, patternId, response); case LEAVE_FACTORY_TEST: - this.importCNPlan(file, patternId, response); - break; + return this.importCNPlan(file, patternId, response); case SELF_TEST: break; default: break; } + return false; + } + + @Override + public boolean splitPlan(AdPlanParam.SplitParam param) { + return false; } /** @@ -545,9 +568,9 @@ public class AdPlanServiceImpl extends ServiceImpl impleme PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); queryParam1.setPlanId(planList.get(i).getId()); - List pqDevs = pqDevService.listByPlanId(queryParam1); - pqDevService.visualizeProvinceDev(pqDevs); - List deviceExportData = BeanUtil.copyToList(pqDevs, ProvinceDevExcel.class); + List pqDevVOList = pqDevMapper.selectByQueryParam(queryParam1); + pqDevService.visualizeProvinceDev(pqDevVOList); + List deviceExportData = BeanUtil.copyToList(pqDevVOList, ProvinceDevExcel.class); planExcelList.get(i).setDevices(deviceExportData); } ExcelUtil.exportExcelPullDown(new ExportParams(), "检测计划导出数据.xlsx", 2, this.getPullDownList(SceneEnum.PROVINCE_PLATFORM, queryParam.getPatternId()), ProvincePlanExcel.class, planExcelList); @@ -568,7 +591,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme PqDevParam.QueryParam queryParam1 = new PqDevParam.QueryParam(); queryParam1.setPlanId(planList.get(i).getId()); - List pqDevs = pqDevService.listByPlanId(queryParam1); + List pqDevs = pqDevMapper.selectByQueryParam(queryParam1); pqDevService.visualizeCNDev(pqDevs); List deviceExportData = BeanUtil.copyToList(pqDevs, CNDevExcel.class); planExcelList.get(i).setDevices(deviceExportData); @@ -577,7 +600,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } @Transactional - public void importCNPlan(MultipartFile file, String patternId, HttpServletResponse response) { + public boolean importCNPlan(MultipartFile file, String patternId, HttpServletResponse response) { ImportParams params = new ImportParams(); params.setStartSheetIndex(0); params.setSheetNum(1); @@ -598,8 +621,9 @@ public class AdPlanServiceImpl extends ServiceImpl impleme throw new BusinessException(DetectionResponseEnum.IMPORT_DATA_FAIL); } if (ObjectUtil.isNotEmpty(planExcelList)) { - this.importCNPlan(planExcelList, patternId); + return this.importCNPlan(planExcelList, patternId); } + return false; } /** @@ -609,7 +633,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme * @param patternId */ @Transactional - public void importCNPlan(List planExcelList, String patternId) { + public boolean importCNPlan(List planExcelList, String patternId) { List adPlans = BeanUtil.copyToList(planExcelList, AdPlan.class); String patternCode = dictDataService.getDictDataById(patternId).getCode(); @@ -653,11 +677,11 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } // 逆向可视化 this.reverseVisualize(adPlans); - this.saveBatch(adPlans); + return this.saveBatch(adPlans); } @Transactional - public void importProvincePlan(MultipartFile file, String patternId, HttpServletResponse response) { + public boolean importProvincePlan(MultipartFile file, String patternId, HttpServletResponse response) { ImportParams params = new ImportParams(); params.setStartSheetIndex(0); params.setSheetNum(1); @@ -678,8 +702,9 @@ public class AdPlanServiceImpl extends ServiceImpl impleme throw new BusinessException(DetectionResponseEnum.IMPORT_DATA_FAIL); } if (ObjectUtil.isNotEmpty(planExcelList)) { - this.importProvincePlan(planExcelList, patternId); + return this.importProvincePlan(planExcelList, patternId); } + return false; } /** @@ -688,7 +713,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme * @param planExcelList * @param patternId */ - public void importProvincePlan(List planExcelList, String patternId) { + public boolean importProvincePlan(List planExcelList, String patternId) { List adPlans = BeanUtil.copyToList(planExcelList, AdPlan.class); String patternCode = dictDataService.getDictDataById(patternId).getCode(); @@ -737,7 +762,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } // 逆向可视化 this.reverseVisualize(adPlans); - this.saveBatch(adPlans); + return this.saveBatch(adPlans); } /** @@ -766,7 +791,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme * @param devList 设备列表 * @return 备注信息 */ - private String getNote(AdPlan plan, List devList) { + private String getNote(AdPlan plan, List devList) { StringBuffer note = new StringBuffer(); note.append("说明:本计划共有" + devList.size() + "台设备,"); Map> devTypeMap = devList.stream().collect(Collectors.groupingBy(PqDev::getDevType, Collectors.toList())); @@ -793,7 +818,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme * @param note 备注 * @return */ - private List getRows(String header, List devList, Integer maxTime, String note) { + private List getRows(String header, List devList, Integer maxTime, String note) { List rows = new ArrayList<>(); String[] row1 = new String[]{header}; @@ -813,7 +838,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme for (int i = 1; i <= maxTime; i++) { row2[i] = i + "次检测"; int tempI = i; - List tempDevList = devList.stream().filter(dev -> dev.getReCheckNum() <= tempI).collect(Collectors.toList()); + List tempDevList = devList.stream().filter(dev -> dev.getRecheckNum() <= tempI).collect(Collectors.toList()); long passCount = tempDevList.stream().filter(dev -> dev.getCheckResult() == CheckResultEnum.ACCORD.getValue()).count(); row3[i] = passCount + ""; row4[i] = total + ""; @@ -873,7 +898,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } if (adPlan.getAssociateReport().equals(0)) { adPlan.setReportTemplateId(null); - }else if (StrUtil.isNotBlank(adPlan.getReportTemplateId())) { + } else if (StrUtil.isNotBlank(adPlan.getReportTemplateId())) { String[] split = adPlan.getReportTemplateId().split("_"); String reportId = this.baseMapper.getReportIdByNameAndVersion(split[0], split[1]); if (ObjectUtil.isNull(reportId)) { 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 bdcb4e2d..c7e6f0aa 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 @@ -62,7 +62,7 @@ public interface DetectionValidMessage { String RECHECK_NUM_FORMAT_ERROR = "检测次数格式错误,请检查recheckNum参数"; - String PATTERN_FORMAT_ERROR = "模式格式错误,请检查patternId参数"; + String PATTERN_FORMAT_ERROR = "模式格式错误"; String SOURCE_IDS_NOT_EMPTY = "检测源ID不能为空,请检查sourceIds参数"; @@ -120,13 +120,13 @@ public interface DetectionValidMessage { String BELONG_LINE_NOT_BLANK = "所属母线不能为空"; - String PT_NOT_NULL = "PT变比不能为空"; + String PT_NOT_BLANK = "PT变比不能为空"; - String CT_NOT_NULL = "CT变比不能为空"; + String CT_NOT_BLANK = "CT变比不能为空"; - String WIRING_TYPE_NOT_BLANK = "接线方式不能为空"; + String CONNECTION_NOT_BLANK = "接线方式不能为空"; - String WIRING_TYPE_FORMAT_ERROR = "接线方式格式错误"; + String CONNECTION_FORMAT_ERROR = "接线方式格式错误"; String DATASOURCE_ID_NOT_EMPTY = "数据源ID不能为空"; @@ -158,7 +158,7 @@ public interface DetectionValidMessage { String CHECK_RESULT_FORMAT_ERROR = "检测结果格式错误"; - String MONITOR_NUM_NOT_NULL = "监测点序号不能为空"; + String MONITOR_NUM_NOT_NULL = "线路号不能为空"; String FACTOR_FLAG_FORMAT_ERROR = "是否支持系数校准格式错误"; @@ -179,6 +179,20 @@ public interface DetectionValidMessage { String DEV_TYPE_NAME_FORMAT_ERROR = "设备类型名称格式错误,只能包含字母、数字、中文、下划线、中划线、点号、空格,长度为1-32个字符"; String REPORT_NAME_NOT_BLANK = "报告模板不能为空"; + String OPERATION_DATE_FORMAT_ERROR = "投运日期格式错误,请检查operationDate参数"; + + String INSPECT_DATE_FORMAT_ERROR = "定检日期格式错误,请检查inspectDate参数"; + String MONITOR_NAME_NOT_BLANK = "监测点名称不能为空"; + String MONITOR_ID_NOT_BLANK = "谐波系统监测点ID不能为空"; + String DEVICE_ID_NOT_BLANK = "所属设备ID不能为空"; + String STAT_INTERVAL_NOT_NULL = "统计间隔不能为空"; + String MONITOR_ID_PATTERN = "谐波系统监测点ID格式错误"; String DATA_RULE_NOT_BLANK = "数据处理原则不能为空"; String ASSOCIATE_REPORT_NOT_NULL = "是否关联报告模板不能为空"; + String PID_FORMAT_ERROR = "PID格式错误"; + String INSPECT_CHANNEL_NOT_BLANK = "可检通道不能为空"; + String INSPECT_CHANNEL_FORMAT_ERROR = "可检通道格式错误"; + String CREATE_DATE_NOT_NULL = "投运日期不能为空"; + String INSPECT_DATE_NOT_NULL = "定检日期不能为空"; + String HARM_SYS_ID_NOT_BLANK = "谐波系统设备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 a15a9d20..27368e1d 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 @@ -61,8 +61,14 @@ public enum DetectionResponseEnum { ERROR_SYSTEM_NOT_EXIST("A02069", "该误差体系不存在,请先添加该误差体系"), DATA_RULE_NOT_EXIST("A02070", "该数据处理原则不存在,请先在\"数据处理原则\"字典中添加"), REPORT_TEMPLATE_NOT_EXIST("A02071", "该报告模板不存在,请先添加该报告模板"), - LACK_REPORT_TEMPLATE_ID("A02072","当关联报告模板为\"是\"时,报告模板不能为空" ), - NAME_OR_CREATEID_REPEAT("A02073","名称或装置编号重复" ); + LACK_REPORT_TEMPLATE_ID("A02072", "当关联报告模板为\"是\"时,报告模板不能为空"), + NAME_OR_CREATEID_REPEAT("A02073", "名称或装置编号重复"), + MONITOR_REPEAT("A02080", "当前设备下已存在相同的监测点"), + PQ_STANDARD_DEV_REPEAT("A02090", "已存在同名的标准设备"), + IMPORT_FLAG_NOT_UPDATE("A02091", "从谐波系统导入的设备不支持修改"), + CONNECTION_NOT_EXIST("A02092", "该连接不存在,请先在\"接线方式\"字典中添加"), + MONITOR_NUM_OUT_OF_RANGE("A02093", "检测点线路号超出范围,请检查线路号"), + MONITOR_NUM_REPEAT("A02094", "改被检设备下存在相同线路号的监测点"); 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 5cb31a40..28dff0da 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 @@ -12,7 +12,6 @@ import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -34,9 +33,11 @@ import com.njcn.gather.detection.util.socket.cilent.NettyDevClientHandler; import com.njcn.gather.device.mapper.PqDevMapper; import com.njcn.gather.device.pojo.enums.CheckStateEnum; import com.njcn.gather.device.pojo.enums.DevReportStateEnum; -import com.njcn.gather.device.pojo.po.PqDev; +import com.njcn.gather.device.pojo.param.PqDevParam; +import com.njcn.gather.device.pojo.po.PqDevSub; import com.njcn.gather.device.pojo.vo.PqDevVO; import com.njcn.gather.device.service.IPqDevService; +import com.njcn.gather.device.service.IPqDevSubService; import com.njcn.gather.plan.pojo.enums.PlanReportStateEnum; import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.service.IAdPlanService; @@ -158,6 +159,7 @@ public class PqReportServiceImpl extends ServiceImpl i private final IPqDevService iPqDevService; private final PqDevMapper pqDevMapper; + private final IPqDevSubService iPqDevSubService; private final IDictDataService dictDataService; @@ -177,6 +179,7 @@ public class PqReportServiceImpl extends ServiceImpl i private final SocketDevResponseService socketDevResponseService; + @Autowired private RestTemplateUtil restTemplateUtil; @@ -1285,7 +1288,7 @@ public class PqReportServiceImpl extends ServiceImpl i // 将改设备的报告生成状态调整为已生成 iPqDevService.updatePqDevReportState(devId, DevReportStateEnum.GENERATED.getValue()); // 判断该计划下是否所有设备报告已生成,如果已生成则将计划的报告状态给为已生成 - int count = iPqDevService.countUnReportDev(planId); + long count = iPqDevService.countUnReportDev(planId); LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(AdPlan::getId, planId); if (count == 0) { @@ -1350,44 +1353,43 @@ public class PqReportServiceImpl extends ServiceImpl i @Transactional public boolean documented(List ids) { if (CollUtil.isNotEmpty(ids)) { + List pqDevVOList = pqDevMapper.listByDevIds(ids); List devIds = new ArrayList<>(); - PqDev tempPqDev = null; - for (String id : ids) { - // 只有检测完成的设备才可以进行归档 - PqDev pqDev = iPqDevService.getById(id); - if (ObjectUtil.isNotNull(pqDev)) { - // 只有检测完成、且已生成报告的设备才可以进行归档 - if (!pqDev.getCheckState().equals(CheckStateEnum.CHECKED.getValue())) { - throw new BusinessException(DetectionResponseEnum.DEV_UN_CHECKED); - } - if (!pqDev.getReportState().equals(DevReportStateEnum.GENERATED.getValue())) { - devIds.add(id); - tempPqDev = pqDev; - } - boolean update = iPqDevService.lambdaUpdate() - .set(PqDev::getCheckState, CheckStateEnum.DOCUMENTED.getValue()) - .eq(PqDev::getId, id) - .update(); - if (update) { - // 判断计划下所有设备是否都已归档,如果是则将计划改为已完成 - // 查询该计划下所有设备的检测状态,是否有不为归档的 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(PqDev::getPlanId, pqDev.getPlanId()) - .eq(PqDev::getState, DataStateEnum.ENABLE.getCode()) - .ne(PqDev::getCheckState, CheckStateEnum.DOCUMENTED.getValue()); - int count = iPqDevService.count(queryWrapper); - if (count == 0) { - // 如果非归档状态的设备数量为0,则更新计划已完成 - pqDevMapper.finishPlan(pqDev.getPlanId()); - } - } + PqDevVO tempPqDevVO = null; + PqDevVO pqDevVO = null; + + for (int i = 0; i < pqDevVOList.size(); i++) { + pqDevVO = pqDevVOList.get(i); + if (!pqDevVO.getCheckState().equals(CheckStateEnum.CHECKED.getValue())) { + throw new BusinessException(DetectionResponseEnum.DEV_UN_CHECKED); + } + if (!pqDevVO.getReportState().equals(DevReportStateEnum.GENERATED.getValue())) { + devIds.add(pqDevVO.getId()); + tempPqDevVO = pqDevVO; } } + + iPqDevSubService.lambdaUpdate() + .set(PqDevSub::getCheckState, CheckStateEnum.DOCUMENTED.getValue()) + .in(PqDevSub::getDevId, ids) + .update(); + // 判断计划下所有设备是否都已归档,如果是则将计划改为已完成 + // 查询该计划下所有设备的检测状态,是否有不为归档的 + PqDevParam.QueryParam queryParam = new PqDevParam.QueryParam(); + queryParam.setPlanId(tempPqDevVO.getPlanId()); + List pqDevVOList1 = pqDevMapper.selectByQueryParam(queryParam); + + long count = pqDevVOList1.stream().filter(obj -> !CheckStateEnum.DOCUMENTED.getValue().equals(obj.getCheckState())).count(); + if (count == 0) { + // 如果非归档状态的设备数量为0,则更新计划已完成 + pqDevMapper.finishPlan(pqDevVO.getPlanId()); + } + if (CollUtil.isNotEmpty(devIds)) { DevReportParam devReportParam = new DevReportParam(); devReportParam.setDevIdList(devIds); - devReportParam.setPlanId(tempPqDev.getPlanId()); - AdPlan plan = adPlanService.getById(tempPqDev.getPlanId()); + devReportParam.setPlanId(tempPqDevVO.getPlanId()); + AdPlan plan = adPlanService.getById(tempPqDevVO.getPlanId()); devReportParam.setScriptId(plan.getScriptId()); devReportParam.setPlanCode(String.valueOf(plan.getCode())); this.generateReport(devReportParam); diff --git a/entrance/src/main/resources/application.yml b/entrance/src/main/resources/application.yml index 4c8954ce..c807eec5 100644 --- a/entrance/src/main/resources/application.yml +++ b/entrance/src/main/resources/application.yml @@ -6,7 +6,7 @@ spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://192.168.1.24:13306/pqs91003?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://192.168.1.24:13306/pqs9100?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai username: root password: njcnpqs # url: jdbc:mysql://localhost:3306/pqs91001?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=CTT @@ -49,10 +49,10 @@ phaseAngle: socket: source: - ip: 192.168.1.138 + ip: 127.0.0.1 port: 62000 device: - ip: 192.168.1.138 + ip: 127.0.0.1 port: 61000 # source: # ip: 192.168.1.121 diff --git a/storage/src/main/java/com/njcn/gather/storage/controller/TableGenController.java b/storage/src/main/java/com/njcn/gather/storage/controller/TableGenController.java index 4508aa4d..b5a70571 100644 --- a/storage/src/main/java/com/njcn/gather/storage/controller/TableGenController.java +++ b/storage/src/main/java/com/njcn/gather/storage/controller/TableGenController.java @@ -32,12 +32,5 @@ public class TableGenController extends BaseController { String methodDescribe = getMethodDescribe("genAdHarmonicTable"); tableGenService.genAdNonHarmonicTable(code); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); - } - - - - - - } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java b/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java index 0db91a44..a8783e2a 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java @@ -13,6 +13,4 @@ public interface TableGenService { * @param codeList */ void deleteTable(List codeList); - - } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java index 971d738d..9ba0b6f0 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java @@ -4,6 +4,7 @@ import com.njcn.gather.storage.mapper.TableGenMapper; import com.njcn.gather.storage.service.TableGenService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -76,6 +77,4 @@ public class TableGenServiceImpl implements TableGenService { sb.deleteCharAt(sb.length() - 1); tableGenMapper.genAdHarmonicTable("DROP TABLE IF EXISTS " + sb); } - - } diff --git a/user/src/main/java/com/njcn/gather/user/user/service/impl/SysFunctionServiceImpl.java b/user/src/main/java/com/njcn/gather/user/user/service/impl/SysFunctionServiceImpl.java index 89f37f92..dd89b9a9 100644 --- a/user/src/main/java/com/njcn/gather/user/user/service/impl/SysFunctionServiceImpl.java +++ b/user/src/main/java/com/njcn/gather/user/user/service/impl/SysFunctionServiceImpl.java @@ -188,8 +188,8 @@ public class SysFunctionServiceImpl extends ServiceImpl obj.eq(SysFunction::getName, functionParam.getName()).or() .eq(SysFunction::getCode, functionParam.getCode()).or() - .eq(SysFunction::getPath, functionParam.getPath()).or() - .eq(SysFunction::getComponent, functionParam.getComponent()) + .eq(StrUtil.isNotBlank(functionParam.getPath()), SysFunction::getPath, functionParam.getPath()).or() + .eq(StrUtil.isNotBlank(functionParam.getComponent()), SysFunction::getComponent, functionParam.getComponent()) ); //更新的时候,需排除当前记录 if (isExcludeSelf) {