mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 12:52:07 +08:00
报表模块mycat环境无法路由修复
This commit is contained in:
+49
-19
@@ -1,5 +1,6 @@
|
||||
package com.cf.imes.module.report.dal.mysql.datasource;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
|
||||
@@ -7,6 +8,7 @@ import com.cf.imes.module.report.dal.dataobject.datasource.ReportDatasourceDO;
|
||||
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -30,17 +32,27 @@ public interface ReportDatasourceMapper extends BaseMapperX<ReportDatasourceDO>
|
||||
*/
|
||||
@OrganIgnore
|
||||
default ReportDatasourceDO selectNormalDatasourceById(Long id, Long organId) {
|
||||
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<ReportDatasourceDO>()
|
||||
ReportDatasourceDO result = null;
|
||||
|
||||
// 1. 先查 CUSTOM(当前组织)
|
||||
LambdaQueryWrapper<ReportDatasourceDO> customWrapper = new LambdaQueryWrapper<ReportDatasourceDO>()
|
||||
.eq(ReportDatasourceDO::getId, id)
|
||||
.and(wr -> wr
|
||||
.or(wrapper -> wrapper
|
||||
.eq(ReportDatasourceDO::getOrganId, organId)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
|
||||
.or(wrapper -> wrapper
|
||||
.eq(ReportDatasourceDO::getOrganId, 1L)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM))
|
||||
);
|
||||
return selectOne(queryWrapper);
|
||||
.eq(ReportDatasourceDO::getOrganId, organId)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM);
|
||||
|
||||
result = selectOne(customWrapper);
|
||||
|
||||
// 2. 如果 CUSTOM 没查到,再查 SYSTEM(固定组织)
|
||||
if (result == null) {
|
||||
LambdaQueryWrapper<ReportDatasourceDO> systemWrapper = new LambdaQueryWrapper<ReportDatasourceDO>()
|
||||
.eq(ReportDatasourceDO::getId, id)
|
||||
.eq(ReportDatasourceDO::getOrganId, CF_ORGANID)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM);
|
||||
|
||||
result = selectOne(systemWrapper);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -51,14 +63,32 @@ public interface ReportDatasourceMapper extends BaseMapperX<ReportDatasourceDO>
|
||||
*/
|
||||
@OrganIgnore
|
||||
default List<ReportDatasourceDO> selectNormalDatasourceList(Set<Long> datasourceIds, Long organId) {
|
||||
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<ReportDatasourceDO>()
|
||||
.in(ReportDatasourceDO::getId, datasourceIds)
|
||||
.and(wr -> wr.or(wrapper -> wrapper
|
||||
.eq(ReportDatasourceDO::getOrganId, organId)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
|
||||
.or(wrapper -> wrapper
|
||||
.eq(ReportDatasourceDO::getOrganId, CF_ORGANID)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)));
|
||||
return selectList(queryWrapper);
|
||||
List<ReportDatasourceDO> result = new ArrayList<>();
|
||||
|
||||
// 1. CUSTOM(当前组织)
|
||||
List<ReportDatasourceDO> customList = selectList(
|
||||
new LambdaQueryWrapper<ReportDatasourceDO>()
|
||||
.in(ReportDatasourceDO::getId, datasourceIds)
|
||||
.eq(ReportDatasourceDO::getOrganId, organId)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM)
|
||||
);
|
||||
|
||||
if (CollUtil.isNotEmpty(customList)) {
|
||||
result.addAll(customList);
|
||||
}
|
||||
|
||||
// 2. SYSTEM(固定组织)
|
||||
List<ReportDatasourceDO> systemList = selectList(
|
||||
new LambdaQueryWrapper<ReportDatasourceDO>()
|
||||
.in(ReportDatasourceDO::getId, datasourceIds)
|
||||
.eq(ReportDatasourceDO::getOrganId, CF_ORGANID)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)
|
||||
);
|
||||
|
||||
if (CollUtil.isNotEmpty(systemList)) {
|
||||
result.addAll(systemList);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
+72
-26
@@ -1,5 +1,6 @@
|
||||
package com.cf.imes.module.report.dal.mysql.template;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
@@ -10,7 +11,11 @@ import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.CF_ORGANID;
|
||||
|
||||
@@ -32,19 +37,27 @@ public interface ReportTemplateMapper extends BaseMapperX<ReportTemplateDO> {
|
||||
*/
|
||||
@OrganIgnore
|
||||
default ReportTemplateDO selectNormalTemplateById(Long id, Long organId) {
|
||||
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<ReportTemplateDO>()
|
||||
ReportTemplateDO result = null;
|
||||
|
||||
// 1. 先查 CUSTOM(当前组织)
|
||||
LambdaQueryWrapper<ReportTemplateDO> customWrapper = new LambdaQueryWrapper<ReportTemplateDO>()
|
||||
.eq(ReportTemplateDO::getId, id)
|
||||
.and(wr -> wr
|
||||
.or(wrapper -> wrapper
|
||||
.eq(ReportTemplateDO::getOrganId, organId)
|
||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM)
|
||||
)
|
||||
.or(wrapper -> wrapper
|
||||
.eq(ReportTemplateDO::getOrganId, CF_ORGANID)
|
||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)
|
||||
)
|
||||
);
|
||||
return selectOne(queryWrapper);
|
||||
.eq(ReportTemplateDO::getOrganId, organId)
|
||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM);
|
||||
|
||||
result = selectOne(customWrapper);
|
||||
|
||||
// 2. 查不到再查 SYSTEM(固定组织)
|
||||
if (result == null) {
|
||||
LambdaQueryWrapper<ReportTemplateDO> systemWrapper = new LambdaQueryWrapper<ReportTemplateDO>()
|
||||
.eq(ReportTemplateDO::getId, id)
|
||||
.eq(ReportTemplateDO::getOrganId, CF_ORGANID)
|
||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM);
|
||||
|
||||
result = selectOne(systemWrapper);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -57,22 +70,55 @@ public interface ReportTemplateMapper extends BaseMapperX<ReportTemplateDO> {
|
||||
*/
|
||||
@OrganIgnore
|
||||
default List<ReportTemplateDO> selectNormalTemplateList(String name, Long organId) {
|
||||
LambdaQueryWrapper<ReportTemplateDO> queryWrapper = new LambdaQueryWrapperX<ReportTemplateDO>()
|
||||
.likeIfPresent(ReportTemplateDO::getName, name)
|
||||
.orderByDesc(ReportTemplateDO::getCreateTime)
|
||||
.and(wr -> wr
|
||||
.or(wrapper -> wrapper
|
||||
.eq(ReportTemplateDO::getOrganId, organId)
|
||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM)
|
||||
List<ReportTemplateDO> result = new ArrayList<>();
|
||||
|
||||
// 1. CUSTOM(当前组织)
|
||||
List<ReportTemplateDO> customList = selectList(
|
||||
new LambdaQueryWrapperX<ReportTemplateDO>()
|
||||
.likeIfPresent(ReportTemplateDO::getName, name)
|
||||
.eq(ReportTemplateDO::getOrganId, organId)
|
||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM)
|
||||
.select(
|
||||
ReportTemplateDO::getId,
|
||||
ReportTemplateDO::getName,
|
||||
ReportTemplateDO::getCreateTime,
|
||||
ReportTemplateDO::getRemark,
|
||||
ReportTemplateDO::getType
|
||||
)
|
||||
.or(wrapper -> wrapper
|
||||
.eq(ReportTemplateDO::getOrganId, CF_ORGANID)
|
||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)
|
||||
);
|
||||
|
||||
// 2. SYSTEM(系统模板)
|
||||
List<ReportTemplateDO> systemList = selectList(
|
||||
new LambdaQueryWrapperX<ReportTemplateDO>()
|
||||
.likeIfPresent(ReportTemplateDO::getName, name)
|
||||
.eq(ReportTemplateDO::getOrganId, CF_ORGANID)
|
||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)
|
||||
.select(
|
||||
ReportTemplateDO::getId,
|
||||
ReportTemplateDO::getName,
|
||||
ReportTemplateDO::getCreateTime,
|
||||
ReportTemplateDO::getRemark,
|
||||
ReportTemplateDO::getType
|
||||
)
|
||||
)
|
||||
// 不返回content xml,点击具体的模板中返回xml
|
||||
.select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark, ReportTemplateDO::getType);
|
||||
return selectList(queryWrapper);
|
||||
);
|
||||
|
||||
// 3. 合并(去重,防止 id 冲突)
|
||||
Map<Long, ReportTemplateDO> map = new LinkedHashMap<>();
|
||||
|
||||
if (CollUtil.isNotEmpty(customList)) {
|
||||
customList.forEach(e -> map.put(e.getId(), e));
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(systemList)) {
|
||||
systemList.forEach(e -> map.putIfAbsent(e.getId(), e));
|
||||
}
|
||||
|
||||
result.addAll(map.values());
|
||||
|
||||
// 4. 排序(保持原 SQL 行为)
|
||||
result.sort(Comparator.comparing(ReportTemplateDO::getCreateTime).reversed());
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+47
-17
@@ -50,6 +50,7 @@ import java.sql.Connection;
|
||||
import java.sql.ResultSetMetaData;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -145,30 +146,59 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
||||
@OrganIgnore
|
||||
public List<ReportDatasourceDO> getDatasourceList(Long organId) {
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
LambdaQueryWrapper<ReportDatasourceDO> queryWrapper = new LambdaQueryWrapperX<ReportDatasourceDO>().orderByDesc(ReportDatasourceDO::getCreateTime);
|
||||
// 当前登录人机构id
|
||||
|
||||
Long currentOrganId = loginUser.getOrganId();
|
||||
// 超管查看不同组织数据源
|
||||
if (ObjectUtil.isNotNull(loginUser) && Boolean.TRUE.equals(loginUser.getIsSupAdmin()) && ObjectUtil.isNotNull(organId)) {
|
||||
|
||||
// 超管可以切换组织
|
||||
if (ObjectUtil.isNotNull(loginUser)
|
||||
&& Boolean.TRUE.equals(loginUser.getIsSupAdmin())
|
||||
&& ObjectUtil.isNotNull(organId)) {
|
||||
currentOrganId = organId;
|
||||
}
|
||||
Long finalCurrentOrganId = currentOrganId;
|
||||
queryWrapper.or(wrapper -> wrapper
|
||||
.eq(ReportDatasourceDO::getOrganId, finalCurrentOrganId)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
|
||||
.or(wrapper -> wrapper
|
||||
|
||||
// ======================
|
||||
// 1. CUSTOM(当前组织)
|
||||
// ======================
|
||||
List<ReportDatasourceDO> customList = datasourceMapper.selectList(
|
||||
new LambdaQueryWrapperX<ReportDatasourceDO>()
|
||||
.eq(ReportDatasourceDO::getOrganId, currentOrganId)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM)
|
||||
.orderByDesc(ReportDatasourceDO::getCreateTime)
|
||||
);
|
||||
|
||||
// ======================
|
||||
// 2. SYSTEM(固定组织)
|
||||
// ======================
|
||||
List<ReportDatasourceDO> systemList = datasourceMapper.selectList(
|
||||
new LambdaQueryWrapperX<ReportDatasourceDO>()
|
||||
.eq(ReportDatasourceDO::getOrganId, CF_ORGANID)
|
||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)
|
||||
);
|
||||
.orderByDesc(ReportDatasourceDO::getCreateTime)
|
||||
);
|
||||
|
||||
List<ReportDatasourceDO> reportDatasourceDOS = datasourceMapper.selectList(queryWrapper);
|
||||
// 查询数据集
|
||||
if (CollUtil.isNotEmpty(reportDatasourceDOS)) {
|
||||
reportDatasourceDOS.forEach(reportDatasourceDO -> {
|
||||
queryDatasetInSource(reportDatasourceDO);
|
||||
});
|
||||
// ======================
|
||||
// 3. 合并 + 去重
|
||||
// ======================
|
||||
Map<Long, ReportDatasourceDO> map = new LinkedHashMap<>();
|
||||
|
||||
if (CollUtil.isNotEmpty(customList)) {
|
||||
customList.forEach(e -> map.put(e.getId(), e));
|
||||
}
|
||||
return reportDatasourceDOS;
|
||||
|
||||
if (CollUtil.isNotEmpty(systemList)) {
|
||||
systemList.forEach(e -> map.putIfAbsent(e.getId(), e));
|
||||
}
|
||||
|
||||
List<ReportDatasourceDO> result = new ArrayList<>(map.values());
|
||||
|
||||
// ======================
|
||||
// 4. 查询 dataset(保持原逻辑)
|
||||
// ======================
|
||||
if (CollUtil.isNotEmpty(result)) {
|
||||
result.forEach(this::queryDatasetInSource);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user