perf: 提供查询全量和超量的id信息

dev
huangfeng 1 year ago
parent e073edc3d6
commit e9d2569a2d

@ -33,10 +33,19 @@ public class DyLevel implements Serializable {
@ApiModelProperty(value = "线路列表", example = "[]") @ApiModelProperty(value = "线路列表", example = "[]")
public List<Lines> list = new ArrayList<>(); public List<Lines> list = new ArrayList<>();
private boolean include; private boolean checked;
public void setCheck(boolean check) {
checked = check;
if (checked) {
for (Lines item : list) {
item.setCheck(checked);
}
}
}
public boolean checkInclude() { public boolean checkInclude() {
if (include) { if (checked) {
return true; return true;
} else { } else {
for (Lines item : list) { for (Lines item : list) {

@ -39,10 +39,19 @@ public class Lines implements Serializable {
@ApiModelProperty(value = "杆塔信息", example = "123456") @ApiModelProperty(value = "杆塔信息", example = "123456")
private List<Towers> list = new ArrayList<>(); private List<Towers> list = new ArrayList<>();
private boolean include; private boolean checked;
public void setCheck(boolean check) {
checked = check;
if (checked) {
for (Towers item : list) {
item.setCheck(checked);
}
}
}
public boolean checkInclude() { public boolean checkInclude() {
if (include) { if (checked) {
return true; return true;
} else { } else {
for (Towers item : list) { for (Towers item : list) {

@ -113,10 +113,10 @@ public class Terminals implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private boolean include; private boolean checked;
public boolean checkInclude() { public boolean checkInclude() {
if (include) { if (checked) {
return true; return true;
} else { } else {
return false; return false;

@ -106,10 +106,19 @@ public class Towers implements Serializable {
private Integer isfavor; private Integer isfavor;
private boolean include; private boolean checked;
public void setCheck(boolean check) {
checked = check;
if (checked) {
for (Terminals item : list) {
item.setChecked(checked);
}
}
}
public boolean checkInclude() { public boolean checkInclude() {
if (include) { if (checked) {
return true; return true;
} else { } else {
for (Terminals item : list) { for (Terminals item : list) {

@ -103,7 +103,7 @@ public class LineServiceImpl implements LineService {
* @return * @return
*/ */
@Override @Override
@CacheEvict(value = "fulltree") @CacheEvict(cacheNames = {"permissionfull", "permissionover", "fulltree"}, allEntries = true)
public ServiceBody<String> addLine(LineVo vo) { public ServiceBody<String> addLine(LineVo vo) {
List<Lines> lines = BeanUtil.copyToList(vo.getList(), Lines.class, CopyOptions.create().ignoreCase()); List<Lines> lines = BeanUtil.copyToList(vo.getList(), Lines.class, CopyOptions.create().ignoreCase());
Date date = new Date(); Date date = new Date();

@ -1,6 +1,5 @@
package com.shxy.xymanager_service.impl; package com.shxy.xymanager_service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.shxy.xymanager_common.bean.PermissionDetail; import com.shxy.xymanager_common.bean.PermissionDetail;
import com.shxy.xymanager_common.entity.*; import com.shxy.xymanager_common.entity.*;
import com.shxy.xymanager_dao.dao.*; import com.shxy.xymanager_dao.dao.*;
@ -30,78 +29,90 @@ public class NewCacheServiceImpl implements NewCacheService {
@Resource @Resource
TerminalsDao terminalsDao; TerminalsDao terminalsDao;
@Override
@Cacheable(value = "permission_byuser", key = "#userId")
public PermissionDetail getIncludeDetail(Integer userId) {
PermissionDetail detail = permissionService.getPermissionDetail(userId);
@Override
@Cacheable(value = "permissionfull", key = "#userId")
public PermissionDetail getPermissionDetailFull(Integer userId) {
// 全量 // 全量
List<DyLevel> dyList = dyLevelDao.selectByExample(new DyLevelExample()); List<DyLevel> dyList = dyLevelDao.selectByExample(new DyLevelExample());
List<Lines> lineList = linesDao.selectByExample(new LinesExample()); List<Lines> lineList = linesDao.selectByExample(new LinesExample());
List<Towers> towerList = towerDao.selectByExample(new TowersExample()); List<Towers> towerList = towerDao.selectByExample(new TowersExample());
List<Terminals> terminalList = terminalsDao.selectByExample(new TerminalsExample()); List<Terminals> terminalList = terminalsDao.selectByExample(new TerminalsExample());
HashMap<Integer, DyLevel> dyMap = new HashMap<>(); this.mountList(dyList, lineList, towerList, terminalList);
HashMap<Integer, Lines> lineMap = new HashMap<>();
HashMap<Integer, Towers> towerMap = new HashMap<>(); this.setCheck(dyList, lineList, towerList, terminalList, userId);
HashMap<Integer, Terminals> terminalMap = new HashMap<>();
// 做map // 构造结果
PermissionDetail detail = new PermissionDetail();
detail.setUid(userId);
for (DyLevel dy : dyList) { for (DyLevel dy : dyList) {
if (detail.hasDyId(dy.getId())) { if (dy.isChecked()) {
dy.setInclude(true); detail.getDypList().add(dy.getId());
} }
dyMap.put(dy.getId(), dy);
} }
for (Lines line : lineList) { for (Lines line : lineList) {
if (detail.hasLineId(line.getId())) { if (line.isChecked()) {
line.setInclude(true); detail.getLinepList().add(line.getId());
} }
lineMap.put(line.getId(), line);
} }
for (Towers tower : towerList) { for (Towers tower : towerList) {
if (detail.hasTowerId(tower.getId())) { if (tower.isChecked()) {
tower.setInclude(true); detail.getTowerpList().add(tower.getId());
} }
towerMap.put(tower.getId(), tower);
} }
for (Terminals terminal : terminalList) { for (Terminals terminal : terminalList) {
if (detail.hasTermId(terminal.getId())) { if (terminal.isChecked()) {
terminal.setInclude(true); detail.getTermpList().add(terminal.getId());
} }
terminalMap.put(terminal.getId(), terminal);
} }
return detail;
}
// 一层挂上一层 private void setCheck(List<DyLevel> dyList, List<Lines> lineList,
for (Terminals terminal : terminalList) { List<Towers> towerList, List<Terminals> terminalList,
Integer towerId = terminal.getTowerId(); Integer userId) {
if (towerId != null) { PermissionDetail detail = permissionService.getPermissionDetail(userId);
Towers tower = towerMap.get(towerId);
if (tower != null) { // 勾选选中的
tower.getList().add(terminal); for (DyLevel dy : dyList) {
} if (detail.hasDyId(dy.getId())) {
dy.setCheck(true);
}
}
for (Lines line : lineList) {
if (detail.hasLineId(line.getId())) {
line.setCheck(true);
} }
} }
for (Towers tower : towerList) { for (Towers tower : towerList) {
Integer lineId = tower.getLineid(); if (detail.hasTowerId(tower.getId())) {
if (lineId != null) { tower.setCheck(true);
Lines line = lineMap.get(lineId);
if (line != null) {
line.getList().add(tower);
}
} }
} }
for (Lines line : lineList) { for (Terminals terminal : terminalList) {
Integer dyLevelId = line.getDyLevelId(); if (detail.hasTermId(terminal.getId())) {
if (dyLevelId != null) { terminal.setChecked(true);
DyLevel dyLevel = dyMap.get(dyLevelId);
if (dyLevel != null) {
dyLevel.getList().add(line);
}
} }
} }
}
// 找出相关的 @Override
detail = new PermissionDetail(); @Cacheable(value = "permissionover", key = "#userId")
public PermissionDetail getPermissionDetailOver(Integer userId) {
// 全量
List<DyLevel> dyList = dyLevelDao.selectByExample(new DyLevelExample());
List<Lines> lineList = linesDao.selectByExample(new LinesExample());
List<Towers> towerList = towerDao.selectByExample(new TowersExample());
List<Terminals> terminalList = terminalsDao.selectByExample(new TerminalsExample());
this.mountList(dyList, lineList, towerList, terminalList);
this.setCheck(dyList, lineList, towerList, terminalList, userId);
// 构造结果
PermissionDetail detail = new PermissionDetail();
detail.setUid(userId);
for (DyLevel dy : dyList) { for (DyLevel dy : dyList) {
if (dy.checkInclude()) { if (dy.checkInclude()) {
detail.getDypList().add(dy.getId()); detail.getDypList().add(dy.getId());
@ -133,55 +144,56 @@ public class NewCacheServiceImpl implements NewCacheService {
List<Lines> lineList = linesDao.selectByExample(new LinesExample()); List<Lines> lineList = linesDao.selectByExample(new LinesExample());
List<Towers> towerList = towerDao.selectByExample(new TowersExample()); List<Towers> towerList = towerDao.selectByExample(new TowersExample());
List<Terminals> terminalList = terminalsDao.selectByExample(new TerminalsExample()); List<Terminals> terminalList = terminalsDao.selectByExample(new TerminalsExample());
if (CollectionUtil.isNotEmpty(dyList)) {
HashMap<Integer, DyLevel> dyMap = new HashMap<>();
HashMap<Integer, Lines> lineMap = new HashMap<>();
HashMap<Integer, Towers> towerMap = new HashMap<>();
HashMap<Integer, Terminals> terminalMap = new HashMap<>();
// 做map
for (DyLevel dy : dyList) {
dyMap.put(dy.getId(), dy);
}
for (Lines line : lineList) {
lineMap.put(line.getId(), line);
}
for (Towers tower : towerList) {
towerMap.put(tower.getId(), tower);
}
for (Terminals terminal : terminalList) {
terminalMap.put(terminal.getId(), terminal);
}
// 一层挂上一层 this.mountList(dyList, lineList, towerList, terminalList);
for (Terminals terminal : terminalList) {
Integer towerId = terminal.getTowerId(); return dyList;
if (towerId != null) { }
Towers tower = towerMap.get(towerId);
if (tower != null) { // 一层挂上一层
tower.getList().add(terminal); private void mountList(List<DyLevel> dyList, List<Lines> lineList,
} List<Towers> towerList, List<Terminals> terminalList) {
HashMap<Integer, DyLevel> dyMap = new HashMap<>();
HashMap<Integer, Lines> lineMap = new HashMap<>();
HashMap<Integer, Towers> towerMap = new HashMap<>();
// 做map
for (DyLevel dy : dyList) {
dyMap.put(dy.getId(), dy);
}
for (Lines line : lineList) {
lineMap.put(line.getId(), line);
}
for (Towers tower : towerList) {
towerMap.put(tower.getId(), tower);
}
// 一层挂上一层
for (Terminals terminal : terminalList) {
Integer towerId = terminal.getTowerId();
if (towerId != null) {
Towers tower = towerMap.get(towerId);
if (tower != null) {
tower.getList().add(terminal);
} }
} }
for (Towers tower : towerList) { }
Integer lineId = tower.getLineid(); for (Towers tower : towerList) {
if (lineId != null) { Integer lineId = tower.getLineid();
Lines line = lineMap.get(lineId); if (lineId != null) {
if (line != null) { Lines line = lineMap.get(lineId);
line.getList().add(tower); if (line != null) {
} line.getList().add(tower);
} }
} }
for (Lines line : lineList) { }
Integer dyLevelId = line.getDyLevelId(); for (Lines line : lineList) {
if (dyLevelId != null) { Integer dyLevelId = line.getDyLevelId();
DyLevel dyLevel = dyMap.get(dyLevelId); if (dyLevelId != null) {
if (dyLevel != null) { DyLevel dyLevel = dyMap.get(dyLevelId);
dyLevel.getList().add(line); if (dyLevel != null) {
} dyLevel.getList().add(line);
} }
} }
} }
return dyList;
} }
} }

@ -59,7 +59,7 @@ public class PermissionServiceImpl implements PermissionService {
} }
@Override @Override
@CacheEvict(value = "permission_byuser", key = "#userId") @CacheEvict(cacheNames = {"permissionfull", "permissionover"}, key = "#userId")
public void changePermission(Integer userId, List<TbPermission> list) throws Exception { public void changePermission(Integer userId, List<TbPermission> list) throws Exception {
TbPermissionExample example = new TbPermissionExample(); TbPermissionExample example = new TbPermissionExample();
TbPermissionExample.Criteria criteria = example.createCriteria(); TbPermissionExample.Criteria criteria = example.createCriteria();

@ -224,7 +224,7 @@ public class TerminalServiceImpl implements TerminalService {
* @return * @return
*/ */
@Override @Override
@CacheEvict(value = "fulltree") @CacheEvict(cacheNames = {"permissionfull", "permissionover", "fulltree"}, allEntries = true)
public ServiceBody<String> addTerminal(TerminalVo vo) { public ServiceBody<String> addTerminal(TerminalVo vo) {
String cmdId = vo.getCmdid(); String cmdId = vo.getCmdid();
Terminals terminals = new Terminals(); Terminals terminals = new Terminals();

@ -46,7 +46,7 @@ public class TowerServiceImpl implements TowerService {
private CacheService cacheService; private CacheService cacheService;
@Override @Override
@CacheEvict(value = "fulltree") @CacheEvict(cacheNames = {"permissionfull", "permissionover", "fulltree"}, allEntries = true)
public ServiceBody addTower(TowersVo vo) { public ServiceBody addTower(TowersVo vo) {
List<Towers> towersLst = BeanUtil.copyToList(vo.getList(), Towers.class, CopyOptions.create().ignoreCase()); List<Towers> towersLst = BeanUtil.copyToList(vo.getList(), Towers.class, CopyOptions.create().ignoreCase());
Date date = new Date(); Date date = new Date();

@ -8,7 +8,9 @@ import java.util.List;
public interface NewCacheService { public interface NewCacheService {
PermissionDetail getIncludeDetail(Integer userId); PermissionDetail getPermissionDetailFull(Integer userId);
PermissionDetail getPermissionDetailOver(Integer userId);
List<DyLevel> getFullTree(); List<DyLevel> getFullTree();
} }

Loading…
Cancel
Save