From 1bea5eb58b1770b8555e7dc09addcdf7a77d7718 Mon Sep 17 00:00:00 2001 From: nieziyan Date: Thu, 11 Jan 2024 19:32:38 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E6=8E=A2=E6=B5=8B=E5=99=A8check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/properties/DetectorIdFormat.java | 27 ++++++++- .../modules/base/enums/DetectorsStatus.java | 26 --------- .../impl/GardsDetectorsServiceImpl.java | 56 ++++++++++++++++--- .../impl/GardsDetectorsServiceImpl.java | 3 +- 4 files changed, 75 insertions(+), 37 deletions(-) delete mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DetectorsStatus.java diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/DetectorIdFormat.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/DetectorIdFormat.java index bcca18cf..257c2d75 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/DetectorIdFormat.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/properties/DetectorIdFormat.java @@ -2,7 +2,6 @@ package org.jeecg.common.properties; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; -import io.swagger.models.auth.In; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.StringConstant; @@ -50,7 +49,10 @@ public class DetectorIdFormat { return detectorId; } - public Integer detectorCodeToId(String detectorCode){ + /** + * 探测器Code解析出探测器Id + */ + public Integer codeToId(String detectorCode){ if (!StrUtil.contains(detectorCode, StrUtil.UNDERLINE)) return null; String[] split = StrUtil.split(detectorCode, StrUtil.UNDERLINE); @@ -100,4 +102,25 @@ public class DetectorIdFormat { return stationId; } + + /** + * 探测器Id解析出台站Id + */ + public Integer codeToStationId(String detectorCode){ + if (!StrUtil.contains(detectorCode, StrUtil.UNDERLINE)) + return null; + String[] split = StrUtil.split(detectorCode, StrUtil.UNDERLINE); + String stationCode = split[0]; + stationCode = StrUtil.sub(stationCode, 2, stationCode.length()); + for (Map.Entry entry : suffixMap.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + if (!StrUtil.contains(stationCode, key)) + continue; + stationCode = StrUtil.replace(stationCode, key, value); + } + if (!NumberUtil.isNumber(stationCode)) + return null; + return Integer.valueOf(stationCode); + } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DetectorsStatus.java b/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DetectorsStatus.java deleted file mode 100644 index e5b9c45f..00000000 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/modules/base/enums/DetectorsStatus.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.jeecg.modules.base.enums; - -/** - * 探测器运行状态 - */ -public enum DetectorsStatus { - - /** - * 未运行 - */ - UNOPERATING("Unoperating"), - /** - * 在运行 - */ - OPERATING("Operating"); - - private String status; - - DetectorsStatus(String type) { - this.status = type; - } - - public String getStatus(){ - return this.status; - } -} diff --git a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsDetectorsServiceImpl.java b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsDetectorsServiceImpl.java index 9a70a65f..d30086eb 100644 --- a/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsDetectorsServiceImpl.java +++ b/jeecg-module-auto-process/src/main/java/org/jeecg/modules/service/impl/GardsDetectorsServiceImpl.java @@ -1,32 +1,74 @@ package org.jeecg.modules.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.Prompt; import org.jeecg.common.properties.DetectorIdFormat; import org.jeecg.modules.base.entity.configuration.GardsDetectors; -import org.jeecg.modules.base.enums.DetectorsStatus; +import org.jeecg.modules.base.enums.DetectorStatus; import org.jeecg.modules.mapper.GardsDetectorsMapper; import org.jeecg.modules.service.GardsDetectorsService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.Objects; + +import java.util.*; +import java.util.stream.Collectors; @DS("ora") @Service @RequiredArgsConstructor public class GardsDetectorsServiceImpl extends ServiceImpl implements GardsDetectorsService { - private final DetectorIdFormat format; + private final DetectorIdFormat idFormat; /** - * 校验探测器是否存在,不存在则创建 - * @param detectorCode + * 校验探测器是否存在,不存在则创建 */ @Transactional @Override + public GardsDetectors check(String detectorCode) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(GardsDetectors::getDetectorCode, detectorCode); + Optional optional = this.list(wrapper).stream().findFirst(); + if (optional.isPresent()) + return optional.get(); + Integer detectorId = idFormat.codeToId(detectorCode); + Integer stationId = idFormat.codeToStationId(detectorCode); + if (ObjectUtil.isNull(detectorId) || ObjectUtil.isNull(stationId)) + throw new RuntimeException("Invalid Detector Code: " + detectorCode); + GardsDetectors detector = new GardsDetectors(); + detector.setDetectorId(detectorId); + detector.setStationId(stationId); + detector.setDetectorCode(detectorCode); + detector.setStatus(DetectorStatus.ON.getValue()); + + // 查询相同台站下所有工作的探测器 按照探测器Id升序排序 + wrapper.clear(); + wrapper.eq(GardsDetectors::getStationId, stationId); + List detectors = this.list(wrapper); + detectors = detectors.stream() + .filter(item -> StrUtil.equals(StrUtil.trim(item.getStatus()), DetectorStatus.ON.getValue())) + .sorted(Comparator.comparingInt(GardsDetectors::getDetectorId)) + .collect(Collectors.toList()); + // 如果相同台站下没有工作探测器 + if (CollUtil.isEmpty(detectors)) + return this.save(detector) ? detector : null; + // 如果相同台站下有工作探测器 将Id最小的探测器状态置为 Unoperating + GardsDetectors detectorMin = detectors.get(0); + detectorMin.setStatus(DetectorStatus.OFF.getValue()); + detectors = ListUtil.toList(detectorMin, detector); + return this.saveOrUpdateBatch(detectors) ? detector : null; + } + + /*@Transactional + @Override public GardsDetectors check(String detectorCode) { LambdaQueryWrapper detectorsQuery = new LambdaQueryWrapper<>(); detectorsQuery.select(GardsDetectors::getDetectorId); @@ -42,5 +84,5 @@ public class GardsDetectorsServiceImpl extends ServiceImpl create(GardsDetectorsSystem detector) { String detectorCode = detector.getDetectorCode(); - Integer detectorId = idFormat.detectorCodeToId(detectorCode); + Integer detectorId = idFormat.codeToId(detectorCode); if (ObjectUtil.isNull(detectorId)) return Result.error("Detector Code Is Invalid"); if (ObjectUtil.isNotNull(getById(detectorId)))