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

dev
huangfeng 1 year ago
parent e073edc3d6
commit e9d2569a2d

@ -33,10 +33,19 @@ public class DyLevel implements Serializable {
@ApiModelProperty(value = "线路列表", example = "[]")
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() {
if (include) {
if (checked) {
return true;
} else {
for (Lines item : list) {

@ -39,10 +39,19 @@ public class Lines implements Serializable {
@ApiModelProperty(value = "杆塔信息", example = "123456")
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() {
if (include) {
if (checked) {
return true;
} else {
for (Towers item : list) {

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

@ -106,10 +106,19 @@ public class Towers implements Serializable {
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() {
if (include) {
if (checked) {
return true;
} else {
for (Terminals item : list) {

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

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

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

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

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

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

Loading…
Cancel
Save