From 653817416b5411c6f2907810c7cf55885af7902c Mon Sep 17 00:00:00 2001 From: "yu.cheng" Date: Tue, 27 Jun 2023 14:39:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?#20230627=20=E7=94=B5=E5=8E=8B=E7=AD=89?= =?UTF-8?q?=E7=BA=A7=E6=A0=91=E7=8A=B6=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=94=B1=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE=E5=BA=93=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E4=BB=8E=E7=BC=93=E5=AD=98=E4=B8=AD=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/LineAndDyNameDto.java | 4 + .../dto/TerminalsWithHeart.java | 2 + .../shxy/xymanager_dao/dao/TerminalsDao.java | 3 + .../src/main/resources/mappers/LinesDao.xml | 6 +- .../resources/mappers/TerminalStatusDao.xml | 1 + .../main/resources/mappers/TerminalsDao.xml | 11 +++ .../shxy/xymanager_service/cache/XyCache.java | 1 + .../impl/CacheServiceImpl.java | 30 ++++++- .../impl/DyLevelServiceImpl.java | 83 +++++++++++++++++-- .../service/CacheService.java | 10 ++- 10 files changed, 139 insertions(+), 12 deletions(-) diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/LineAndDyNameDto.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/LineAndDyNameDto.java index 1023199..435b55f 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/LineAndDyNameDto.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/LineAndDyNameDto.java @@ -20,4 +20,8 @@ public class LineAndDyNameDto { private Integer status; + private Integer dyId; + + private Integer dyValue; + } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/TerminalsWithHeart.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/TerminalsWithHeart.java index 672f5db..52086c1 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/TerminalsWithHeart.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/TerminalsWithHeart.java @@ -45,6 +45,8 @@ public class TerminalsWithHeart implements Serializable { private Long lastheartbeat; + private Integer onlinestatus; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalsDao.java b/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalsDao.java index 19e0b84..2a5c6ad 100644 --- a/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalsDao.java +++ b/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalsDao.java @@ -3,6 +3,7 @@ package com.shxy.xymanager_dao.dao; import com.shxy.xymanager_common.dto.ChannelAndTermDto; import com.shxy.xymanager_common.dto.TerminalInfoDto; import com.shxy.xymanager_common.dto.TerminalsAndStatusDto; +import com.shxy.xymanager_common.entity.TerminalStatus; import com.shxy.xymanager_common.entity.Terminals; import com.shxy.xymanager_common.vo.RelateTerminalListRuleIdVo; import com.shxy.xymanager_common.vo.TerminalIdUpdateVo; @@ -48,4 +49,6 @@ public interface TerminalsDao { int updateCmd(TerminalIdUpdateVo vo); + List getTerminalStatus(@Param("list")List list); + } \ No newline at end of file diff --git a/xymanager_dao/src/main/resources/mappers/LinesDao.xml b/xymanager_dao/src/main/resources/mappers/LinesDao.xml index 28fc9a9..a50232b 100644 --- a/xymanager_dao/src/main/resources/mappers/LinesDao.xml +++ b/xymanager_dao/src/main/resources/mappers/LinesDao.xml @@ -18,6 +18,8 @@ + + @@ -30,7 +32,9 @@ x.bs_manufacturer as bs_manufacturer, x.dy_level_id as dy_level_id, x.status as status, - y.name as dy_level_name + y.name as dy_level_name, + y.dy_value as dy_value, + y.id as dy_id from `lines` x, dy_level y where x.dy_level_id = y.id and x.status = #{status} order by x.create_time desc diff --git a/xymanager_dao/src/main/resources/mappers/TerminalStatusDao.xml b/xymanager_dao/src/main/resources/mappers/TerminalStatusDao.xml index f8c39f4..d2c902f 100644 --- a/xymanager_dao/src/main/resources/mappers/TerminalStatusDao.xml +++ b/xymanager_dao/src/main/resources/mappers/TerminalStatusDao.xml @@ -56,6 +56,7 @@ where a.term_id = b.id and b.cmdid = #{cmdid} + + select + term_id as termId, + last_heartbeat as lastHeartbeat + from terminal_status + where term_id in + + #{item.id} + + \ No newline at end of file diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/cache/XyCache.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/cache/XyCache.java index fd0f293..0f92062 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/cache/XyCache.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/cache/XyCache.java @@ -16,6 +16,7 @@ public class XyCache { @PostConstruct public void init() { //系统启动中。。。加载codeMap + cacheService.updateDyMap(); cacheService.updateLineMap(); diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CacheServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CacheServiceImpl.java index 3214f7d..aa9df12 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CacheServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CacheServiceImpl.java @@ -1,5 +1,6 @@ package com.shxy.xymanager_service.impl; +import com.google.common.collect.Maps; import com.shxy.xymanager_common.dto.LineAndDyNameDto; import com.shxy.xymanager_common.dto.TermAndChannelDto; import com.shxy.xymanager_common.dto.TowerDto; @@ -7,18 +8,16 @@ import com.shxy.xymanager_common.entity.*; import com.shxy.xymanager_common.enums.CommonStatus; import com.shxy.xymanager_dao.dao.*; import com.shxy.xymanager_service.service.CacheService; -import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** @@ -50,6 +49,9 @@ public class CacheServiceImpl implements CacheService { @Autowired TerminalImgAlarmParamsDao terminalImgAlarmParamsDao; + @Autowired + TerminalStatusDao terminalStatusDao; + // @Override // @Cacheable(value = "globalParams", key = "#param") // public GlobalParams getGlobalParams(String param) { @@ -290,6 +292,28 @@ public class CacheServiceImpl implements CacheService { return lineMap; } + @Override + @Cacheable(value = "dyMap") + public Map> getDyMap() { + Map> lineMap; + List lineAndDyNameDtos = linesDao.selectAll(CommonStatus.EFFECTIVE.value()); + lineMap = lineAndDyNameDtos.stream().collect(Collectors.groupingBy(LineAndDyNameDto::getDyId)); + return lineMap; + } + + + @Override + @CachePut(value = "dyMap") + public Map> updateDyMap() { + Map> lineMap; + List lineAndDyNameDtos = linesDao.selectAll(CommonStatus.EFFECTIVE.value()); + lineMap = lineAndDyNameDtos.stream().collect(Collectors.groupingBy(LineAndDyNameDto::getDyId)); + return lineMap; + } + + + + @Override @CachePut(value = "globalMap") diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/DyLevelServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/DyLevelServiceImpl.java index 2f9cf05..36b4d81 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/DyLevelServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/DyLevelServiceImpl.java @@ -5,10 +5,13 @@ import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUnit; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.shxy.xymanager_common.bean.ServiceBody; -import com.shxy.xymanager_common.dto.DyLineAndTerminalWithHeartDto; +import com.shxy.xymanager_common.dto.*; import com.shxy.xymanager_common.entity.DyLevel; -import com.shxy.xymanager_common.dto.TerminalsWithHeart; +import com.shxy.xymanager_common.entity.TerminalStatus; +import com.shxy.xymanager_common.entity.Terminals; import com.shxy.xymanager_common.enums.CommonStatus; import com.shxy.xymanager_common.exception.Asserts; import com.shxy.xymanager_common.model.DyLineTreeListModel; @@ -16,6 +19,9 @@ import com.shxy.xymanager_common.model.DyListModel; import com.shxy.xymanager_common.util.MyDateUtils; import com.shxy.xymanager_common.vo.TestVo; import com.shxy.xymanager_dao.dao.DyLevelDao; +import com.shxy.xymanager_dao.dao.TerminalStatusDao; +import com.shxy.xymanager_dao.dao.TerminalsDao; +import com.shxy.xymanager_service.service.CacheService; import com.shxy.xymanager_service.service.DyLevelService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +31,8 @@ import org.springframework.stereotype.Service; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * 装置通道实现层 @@ -39,6 +47,12 @@ public class DyLevelServiceImpl implements DyLevelService { @Value("${heart.time}") public Integer hearttime; + @Autowired + CacheService cacheService; + + @Autowired + private TerminalsDao terminalsDao; + /** * 获取电压线路树状接口 * @@ -47,13 +61,15 @@ public class DyLevelServiceImpl implements DyLevelService { @Override public ServiceBody getdyTreeList() { DyLineTreeListModel model = new DyLineTreeListModel(); - List list = dyLevelDao.selectTreeList(CommonStatus.EFFECTIVE.value()); + /*List list = dyLevelDao.selectTreeList(CommonStatus.EFFECTIVE.value());*/ + List list = Lists.newArrayList(); + getDyList(list); boolean empty = CollectionUtil.isEmpty(list); if (empty) { model.setList(new ArrayList<>()); } else { List beans = BeanUtil.copyToList(list, DyLineTreeListModel.DyListBean.class, CopyOptions.create().ignoreCase()); - for (int i = 0; i < beans.size(); i++) { + /*for (int i = 0; i < beans.size(); i++) { for (int j = 0; j < beans.get(i).getList().size(); j++) { for (int k = 0; k < beans.get(i).getList().get(j).getList().size(); k++) { // beans.get(i).getList().get(j).getList().get(k).setName(list.get(i).getList().get(j).getList().get(k).getDisplayName()); @@ -73,12 +89,69 @@ public class DyLevelServiceImpl implements DyLevelService { } } } - } + }*/ model.setList(beans); } return Asserts.success(model); } + private void getDyList(List list) { + List lineList = Lists.newArrayList(); + Map terminalsMap = cacheService.getTerminalMap(); + List termList = terminalsMap.values().stream().collect(Collectors.toList()); + Map statusMap = Maps.newHashMap(); + List terminalStatusDtos = terminalsDao.getTerminalStatus(termList); + for (TerminalStatus status : terminalStatusDtos) { + statusMap.put(status.getTermId(), status); + } + Map towerMap = cacheService.getTowerMap(); + List towerList = towerMap.values().stream().collect(Collectors.toList()); + Map towerByLineMap = Maps.newHashMap(); + for (TowerDto item : towerList) { + towerByLineMap.put(item.getLineId(), item); + } + termList.stream().forEach(var->{ + if(null!=statusMap.get(var.getId())&&null!=statusMap.get(var.getId()).getLastHeartbeat()) { + long time = MyDateUtils.TimeSecond2MillSecond(statusMap.get(var.getId()).getLastHeartbeat().longValue()); + DateTime date = MyDateUtils.date(time); + long between = MyDateUtils.between(MyDateUtils.getNowDate(), date, DateUnit.MINUTE); + if (between > hearttime) { + var.setOnlinestatus(CommonStatus.DELETE.value()); + } else { + var.setOnlinestatus(CommonStatus.EFFECTIVE.value()); + } + var.setLastheartbeat(statusMap.get(var.getId()).getLastHeartbeat().longValue()); + } + if(null!=towerByLineMap.get(var.getLineid())) { + var.setTowerid(towerByLineMap.get(var.getLineid()).getId()); + } + }); + Map> termByLineIdMap = termList.stream().collect(Collectors.groupingBy(Terminals::getLineid)); + Map> map = cacheService.getDyMap(); + map.forEach((key, value) -> { + DyLineAndTerminalWithHeartDto dyDto = new DyLineAndTerminalWithHeartDto(); + dyDto.setId(key); + dyDto.setName(value.get(0).getName()); + dyDto.setDyValue(value.get(0).getDyValue()); + for(LineAndDyNameDto line:value) { + List terminalList = Lists.newArrayList(); + if(null!=termByLineIdMap.get(line.getId())) { + terminalList = BeanUtil.copyToList(termByLineIdMap.get(line.getId()), TerminalsWithHeart.class, CopyOptions.create().ignoreCase()); + } + LineAndTerminalWithHeartDto lineDto = new LineAndTerminalWithHeartDto(); + lineDto.setBsManufacturer(line.getBsManufacturer()); + lineDto.setDyLevel(line.getDyLevelId()); + lineDto.setName(line.getName()); + lineDto.setId(line.getId()); + lineDto.setList(terminalList); + lineList.add(lineDto); + } + dyDto.setList(lineList); + list.add(dyDto); + }); + } + + /** * 获取电压等级列表 diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/service/CacheService.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/CacheService.java index 3cf48c4..1cce1a4 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/service/CacheService.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/CacheService.java @@ -4,9 +4,6 @@ import com.shxy.xymanager_common.dto.LineAndDyNameDto; import com.shxy.xymanager_common.dto.TermAndChannelDto; import com.shxy.xymanager_common.dto.TowerDto; import com.shxy.xymanager_common.entity.*; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.CachePut; -import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; @@ -112,4 +109,11 @@ public interface CacheService { Map updateTerminalMap(); Map updateLineMap(); + + + Map> updateDyMap(); + + + Map> getDyMap(); + } From aec9cc114abba47cd954e5672a0574f478ef3af4 Mon Sep 17 00:00:00 2001 From: "gj.liu" Date: Tue, 27 Jun 2023 15:02:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?#20230627=20=E7=94=B5=E5=8E=8B=E7=AD=89?= =?UTF-8?q?=E7=BA=A7=E6=A0=91=E7=8A=B6=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=94=B1=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE=E5=BA=93=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E4=BB=8E=E7=BC=93=E5=AD=98=E4=B8=AD=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/shxy/xymanager_service/impl/DyLevelServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/DyLevelServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/DyLevelServiceImpl.java index 36b4d81..1e3ee26 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/DyLevelServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/DyLevelServiceImpl.java @@ -104,6 +104,8 @@ public class DyLevelServiceImpl implements DyLevelService { for (TerminalStatus status : terminalStatusDtos) { statusMap.put(status.getTermId(), status); } + + Map towerMap = cacheService.getTowerMap(); List towerList = towerMap.values().stream().collect(Collectors.toList()); Map towerByLineMap = Maps.newHashMap();