feat:探测器check

This commit is contained in:
nieziyan 2024-01-11 19:32:38 +08:00
parent d02bd8127d
commit 1bea5eb58b
4 changed files with 75 additions and 37 deletions

View File

@ -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<String, String> 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);
}
}

View File

@ -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;
}
}

View File

@ -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<GardsDetectorsMapper, GardsDetectors> implements GardsDetectorsService {
private final DetectorIdFormat format;
private final DetectorIdFormat idFormat;
/**
* 校验探测器是否存在不存在则创建
* @param detectorCode
* 校验探测器是否存在不存在则创建
*/
@Transactional
@Override
public GardsDetectors check(String detectorCode) {
LambdaQueryWrapper<GardsDetectors> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(GardsDetectors::getDetectorCode, detectorCode);
Optional<GardsDetectors> 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<GardsDetectors> 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<GardsDetectors> detectorsQuery = new LambdaQueryWrapper<>();
detectorsQuery.select(GardsDetectors::getDetectorId);
@ -42,5 +84,5 @@ public class GardsDetectorsServiceImpl extends ServiceImpl<GardsDetectorsMapper,
return detector;
}
return query;
}
}*/
}

View File

@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import org.jeecg.common.api.QueryRequest;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.Prompt;
@ -89,7 +88,7 @@ public class GardsDetectorsServiceImpl extends ServiceImpl<GardsDetectorsMapper,
@Transactional
public Result<?> 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)))