diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/PqIcdPathParam.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/PqIcdPathParam.java new file mode 100644 index 000000000..a1407ebd0 --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/param/PqIcdPathParam.java @@ -0,0 +1,44 @@ +package com.njcn.device.pq.pojo.param; + +import com.njcn.common.pojo.constant.PatternRegex; +import com.njcn.web.constant.ValidMessage; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; + +/** + * Description: + * Date: 2024/11/5 11:34【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Data +public class PqIcdPathParam { + + + //icd文件名 + private String fileName; + //icd文件存储的地址 + private String filePath; + private String devType; + + /** + * 更新操作实体 + */ + @Data + @EqualsAndHashCode(callSuper = true) + public static class PqIcdPathUpdateParam extends PqIcdPathParam { + /** + * 表Id + */ + @ApiModelProperty("id") + @NotBlank(message = ValidMessage.ID_NOT_BLANK) + @Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR) + private String id; + + } +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/PqIcdPathController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/PqIcdPathController.java index fb965b5ba..e7311ef00 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/PqIcdPathController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/PqIcdPathController.java @@ -11,6 +11,7 @@ import com.njcn.common.utils.HttpResultUtil; import com.njcn.device.pq.pojo.dto.DeviceInfo; import com.njcn.device.pq.pojo.dto.PqIcdPathDTO; import com.njcn.device.pq.pojo.param.NodeDeviceParam; +import com.njcn.device.pq.pojo.param.PqIcdPathParam; import com.njcn.device.pq.pojo.po.PqIcdPath; import com.njcn.device.pq.service.NodeDeviceService; import com.njcn.device.pq.service.PqIcdPathService; @@ -42,7 +43,7 @@ public class PqIcdPathController extends BaseController { /** * 根据终端模型获取icd模型,如果模型为空则获取全部icd模型 -3 + */ @ApiOperation("获取icd模型") @OperateInfo(info = LogEnum.BUSINESS_MEDIUM) @@ -63,6 +64,25 @@ public class PqIcdPathController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + @ApiOperation("获取icd模型") + @OperateInfo(info = LogEnum.BUSINESS_MEDIUM) + @PostMapping("addIcdPath") + public HttpResult addIcdPath(@RequestBody PqIcdPathParam pqIcdPathParam){ + String methodDescribe = getMethodDescribe("addIcdPath"); + Boolean result = pqIcdPathService.addIcdPath(pqIcdPathParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @ApiOperation("更新icd模型") + @OperateInfo(info = LogEnum.BUSINESS_MEDIUM) + @PostMapping("addIcdPath") + public HttpResult updateIcdPath(@RequestBody PqIcdPathParam.PqIcdPathUpdateParam pqIcdPathUpdateParam){ + String methodDescribe = getMethodDescribe("updateIcdPath"); + Boolean result = pqIcdPathService.updateIcdPath(pqIcdPathUpdateParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalBaseController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalBaseController.java index c6897fd30..00e8e0e2e 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalBaseController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/TerminalBaseController.java @@ -163,7 +163,7 @@ public class TerminalBaseController extends BaseController { Boolean b = terminalBaseService.terminalSyncDeleteFly(lineId); //删除监测点即修改终端通知前置重启 - terminalBaseService.askRestartDevice(devId,DeviceRebootType.LEDGER_MODIFY); +// terminalBaseService.askRestartDevice(devId,DeviceRebootType.LEDGER_MODIFY); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, b, methodDescribe); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/job/ScheduledTasks.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/job/ScheduledTasks.java new file mode 100644 index 000000000..abd36cd2a --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/job/ScheduledTasks.java @@ -0,0 +1,102 @@ +package com.njcn.device.pq.job; + +import com.njcn.device.pq.constant.Param; +import com.njcn.device.pq.pojo.po.Line; +import com.njcn.device.pq.pojo.po.PqsTerminalLogs; +import com.njcn.device.pq.service.IPqsTerminalLogsService; +import com.njcn.device.pq.service.TerminalBaseService; +import com.njcn.message.constant.DeviceRebootType; +import com.njcn.redis.utils.RedisUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * Description: + * Date: 2025/04/09 上午 10:11【需求编号】 + *定时扫描终端日志表是否需要通知前置重启 + * @author clam + * @version V1.0.0 + */ +@Component +@EnableScheduling +public class ScheduledTasks { + + @Autowired + private IPqsTerminalLogsService iPqsTerminalLogsService; + + @Autowired + private TerminalBaseService terminalBaseService; + + @Scheduled(fixedRate = 1000*60*10) // 每10分钟执行一次 + public void reportCurrentTime() { + LocalDateTime now =LocalDateTime.now(); + LocalDateTime tenMinutesAgo = now.minusMinutes(-10); + List list = iPqsTerminalLogsService.lambdaQuery() + // .between(PqsTerminalLogs::getCreateTime, tenMinutesAgo, now) + .eq(PqsTerminalLogs::getState, 1).eq(PqsTerminalLogs::getIsPush, 1).list(); + if(!CollectionUtils.isEmpty(list)){ + //一个是删除操作,其余都算终端设备更新操作 + List delDevice = list.stream().filter(temp -> Objects.equals(temp.getOperateType(), Param.DEL) && Objects.equals(temp.getTerminalType(), 4)).distinct().collect(Collectors.toList()); + List delDevIds = new ArrayList<>(); + if(!CollectionUtils.isEmpty(delDevice)){ + delDevice.forEach(temp->{ + terminalBaseService.askRestartDevice(temp.getObjIndex(), DeviceRebootType.DELETE_TERMINAL); + delDevIds.add(temp.getObjIndex()); + } + ); + } + List updateDevIds = new ArrayList<>(); + List lineIds = list.stream().filter(temp -> Objects.equals(temp.getTerminalType(), 6)).map(PqsTerminalLogs::getObjIndex).distinct().collect(Collectors.toList()); + List devIds = list.stream().filter(temp -> Objects.equals(temp.getTerminalType(), 4)).map(PqsTerminalLogs::getObjIndex).distinct().collect(Collectors.toList()); + + //更新的终端 + List lineById = terminalBaseService.getLineById(lineIds); + List devIdList = lineById.stream().map(temp -> { + return temp.getPids().split(",")[4]; + }).distinct().collect(Collectors.toList()); + updateDevIds.addAll(devIdList); + updateDevIds.addAll(devIds); + if(!CollectionUtils.isEmpty(delDevIds)){ + updateDevIds.removeAll(delDevIds); + } + updateDevIds.stream().distinct().forEach(temp->{ + terminalBaseService.askRestartDevice(temp, DeviceRebootType.LEDGER_MODIFY); + } + ); + + } + + } + + public static void main(String[] args) { + List updateDevIds = new ArrayList<>(); + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + List list3 = new ArrayList<>(); + list1.add("1"); + list1.add("2"); + list1.add("3"); + list1.add("3"); + list2.add("3"); + list2.add("4"); + list2.add("5"); + list3.add("3"); + updateDevIds.addAll(list1); + updateDevIds.addAll(list2); + updateDevIds.removeAll(list3); + System.out.println(updateDevIds); + + + + } + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/PqIcdPathService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/PqIcdPathService.java index 3bf32655b..cd5644c25 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/PqIcdPathService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/PqIcdPathService.java @@ -1,5 +1,6 @@ package com.njcn.device.pq.service; +import com.njcn.device.pq.pojo.param.PqIcdPathParam; import com.njcn.device.pq.pojo.po.PqIcdPath; import com.baomidou.mybatisplus.extension.service.IService; /** @@ -13,4 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService; public interface PqIcdPathService extends IService{ -} + Boolean addIcdPath(PqIcdPathParam pqIcdPathParam); + + Boolean updateIcdPath(PqIcdPathParam.PqIcdPathUpdateParam pqIcdPathUpdateParam); + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqIcdPathServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqIcdPathServiceImpl.java index 83409acbe..25475eb66 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqIcdPathServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqIcdPathServiceImpl.java @@ -1,12 +1,20 @@ package com.njcn.device.pq.service.impl; +import com.njcn.common.pojo.exception.BusinessException; +import com.njcn.device.pq.pojo.param.PqIcdPathParam; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; + +import java.time.LocalDateTime; import java.util.List; +import java.util.Objects; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.device.pq.pojo.po.PqIcdPath; import com.njcn.device.pq.mapper.PqIcdPathMapper; import com.njcn.device.pq.service.PqIcdPathService; +import org.springframework.transaction.annotation.Transactional; + /** * * Description: @@ -18,4 +26,26 @@ import com.njcn.device.pq.service.PqIcdPathService; @Service public class PqIcdPathServiceImpl extends ServiceImpl implements PqIcdPathService{ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean addIcdPath(PqIcdPathParam pqIcdPathParam) { + PqIcdPath pqIcdPath = new PqIcdPath(); + PqIcdPath one = this.lambdaQuery().eq(PqIcdPath::getName, pqIcdPathParam.getDevType()).one(); + if(Objects.isNull(one)){ + throw new BusinessException(pqIcdPathParam.getDevType()+"已存在icd文件"); + } + pqIcdPath.setName(pqIcdPathParam.getDevType()); + pqIcdPath.setPath(pqIcdPathParam.getFilePath()); + pqIcdPath.setUpdateTime(LocalDateTime.now()); + this.save(pqIcdPath); + return true; + } + + @Override + public Boolean updateIcdPath(PqIcdPathParam.PqIcdPathUpdateParam pqIcdPathUpdateParam) { + this.lambdaUpdate().eq(PqIcdPath::getName, pqIcdPathUpdateParam.getDevType()) + .set(PqIcdPath::getPath,pqIcdPathUpdateParam.getFilePath()) + .set(PqIcdPath::getUpdateTime,LocalDateTime.now()).update(); + return true; + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java index cda40c7f6..0ce1b55ee 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalBaseServiceImpl.java @@ -1529,6 +1529,12 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple lineDetailMapper.deleteById(point.getId()); overlimitMapper.deleteById(point.getId()); deptLineMapper.deleteById(point.getId()); + + // 通知设备重启 +// String[] pids = point.getPids().split(","); +// if (pids.length > 4) { +// askRestartDevice(pids[4], DeviceRebootType.LEDGER_MODIFY); +// } } private List findChildren(String pid) {