mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
报表模块mycat环境无法路由修复
This commit is contained in:
+45
-15
@@ -1,5 +1,6 @@
|
|||||||
package com.cf.imes.module.report.dal.mysql.datasource;
|
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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
|
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 com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -30,17 +32,27 @@ public interface ReportDatasourceMapper extends BaseMapperX<ReportDatasourceDO>
|
|||||||
*/
|
*/
|
||||||
@OrganIgnore
|
@OrganIgnore
|
||||||
default ReportDatasourceDO selectNormalDatasourceById(Long id, Long organId) {
|
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)
|
.eq(ReportDatasourceDO::getId, id)
|
||||||
.and(wr -> wr
|
|
||||||
.or(wrapper -> wrapper
|
|
||||||
.eq(ReportDatasourceDO::getOrganId, organId)
|
.eq(ReportDatasourceDO::getOrganId, organId)
|
||||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
|
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM);
|
||||||
.or(wrapper -> wrapper
|
|
||||||
.eq(ReportDatasourceDO::getOrganId, 1L)
|
result = selectOne(customWrapper);
|
||||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM))
|
|
||||||
);
|
// 2. 如果 CUSTOM 没查到,再查 SYSTEM(固定组织)
|
||||||
return selectOne(queryWrapper);
|
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
|
@OrganIgnore
|
||||||
default List<ReportDatasourceDO> selectNormalDatasourceList(Set<Long> datasourceIds, Long organId) {
|
default List<ReportDatasourceDO> selectNormalDatasourceList(Set<Long> datasourceIds, Long organId) {
|
||||||
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<ReportDatasourceDO>()
|
List<ReportDatasourceDO> result = new ArrayList<>();
|
||||||
|
|
||||||
|
// 1. CUSTOM(当前组织)
|
||||||
|
List<ReportDatasourceDO> customList = selectList(
|
||||||
|
new LambdaQueryWrapper<ReportDatasourceDO>()
|
||||||
.in(ReportDatasourceDO::getId, datasourceIds)
|
.in(ReportDatasourceDO::getId, datasourceIds)
|
||||||
.and(wr -> wr.or(wrapper -> wrapper
|
|
||||||
.eq(ReportDatasourceDO::getOrganId, organId)
|
.eq(ReportDatasourceDO::getOrganId, organId)
|
||||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
|
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM)
|
||||||
.or(wrapper -> wrapper
|
);
|
||||||
|
|
||||||
|
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::getOrganId, CF_ORGANID)
|
||||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)));
|
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)
|
||||||
return selectList(queryWrapper);
|
);
|
||||||
|
|
||||||
|
if (CollUtil.isNotEmpty(systemList)) {
|
||||||
|
result.addAll(systemList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+65
-19
@@ -1,5 +1,6 @@
|
|||||||
package com.cf.imes.module.report.dal.mysql.template;
|
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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
|
||||||
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
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.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
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.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.CF_ORGANID;
|
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.CF_ORGANID;
|
||||||
|
|
||||||
@@ -32,19 +37,27 @@ public interface ReportTemplateMapper extends BaseMapperX<ReportTemplateDO> {
|
|||||||
*/
|
*/
|
||||||
@OrganIgnore
|
@OrganIgnore
|
||||||
default ReportTemplateDO selectNormalTemplateById(Long id, Long organId) {
|
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)
|
.eq(ReportTemplateDO::getId, id)
|
||||||
.and(wr -> wr
|
|
||||||
.or(wrapper -> wrapper
|
|
||||||
.eq(ReportTemplateDO::getOrganId, organId)
|
.eq(ReportTemplateDO::getOrganId, organId)
|
||||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM)
|
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM);
|
||||||
)
|
|
||||||
.or(wrapper -> wrapper
|
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::getOrganId, CF_ORGANID)
|
||||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)
|
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM);
|
||||||
)
|
|
||||||
);
|
result = selectOne(systemWrapper);
|
||||||
return selectOne(queryWrapper);
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -57,22 +70,55 @@ public interface ReportTemplateMapper extends BaseMapperX<ReportTemplateDO> {
|
|||||||
*/
|
*/
|
||||||
@OrganIgnore
|
@OrganIgnore
|
||||||
default List<ReportTemplateDO> selectNormalTemplateList(String name, Long organId) {
|
default List<ReportTemplateDO> selectNormalTemplateList(String name, Long organId) {
|
||||||
LambdaQueryWrapper<ReportTemplateDO> queryWrapper = new LambdaQueryWrapperX<ReportTemplateDO>()
|
List<ReportTemplateDO> result = new ArrayList<>();
|
||||||
|
|
||||||
|
// 1. CUSTOM(当前组织)
|
||||||
|
List<ReportTemplateDO> customList = selectList(
|
||||||
|
new LambdaQueryWrapperX<ReportTemplateDO>()
|
||||||
.likeIfPresent(ReportTemplateDO::getName, name)
|
.likeIfPresent(ReportTemplateDO::getName, name)
|
||||||
.orderByDesc(ReportTemplateDO::getCreateTime)
|
|
||||||
.and(wr -> wr
|
|
||||||
.or(wrapper -> wrapper
|
|
||||||
.eq(ReportTemplateDO::getOrganId, organId)
|
.eq(ReportTemplateDO::getOrganId, organId)
|
||||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM)
|
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM)
|
||||||
|
.select(
|
||||||
|
ReportTemplateDO::getId,
|
||||||
|
ReportTemplateDO::getName,
|
||||||
|
ReportTemplateDO::getCreateTime,
|
||||||
|
ReportTemplateDO::getRemark,
|
||||||
|
ReportTemplateDO::getType
|
||||||
)
|
)
|
||||||
.or(wrapper -> wrapper
|
);
|
||||||
|
|
||||||
|
// 2. SYSTEM(系统模板)
|
||||||
|
List<ReportTemplateDO> systemList = selectList(
|
||||||
|
new LambdaQueryWrapperX<ReportTemplateDO>()
|
||||||
|
.likeIfPresent(ReportTemplateDO::getName, name)
|
||||||
.eq(ReportTemplateDO::getOrganId, CF_ORGANID)
|
.eq(ReportTemplateDO::getOrganId, CF_ORGANID)
|
||||||
.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)
|
.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);
|
// 3. 合并(去重,防止 id 冲突)
|
||||||
return selectList(queryWrapper);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+48
-18
@@ -50,6 +50,7 @@ import java.sql.Connection;
|
|||||||
import java.sql.ResultSetMetaData;
|
import java.sql.ResultSetMetaData;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -145,30 +146,59 @@ public class ReportDatasourceServiceImpl implements ReportDatasourceService {
|
|||||||
@OrganIgnore
|
@OrganIgnore
|
||||||
public List<ReportDatasourceDO> getDatasourceList(Long organId) {
|
public List<ReportDatasourceDO> getDatasourceList(Long organId) {
|
||||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||||
LambdaQueryWrapper<ReportDatasourceDO> queryWrapper = new LambdaQueryWrapperX<ReportDatasourceDO>().orderByDesc(ReportDatasourceDO::getCreateTime);
|
|
||||||
// 当前登录人机构id
|
|
||||||
Long currentOrganId = loginUser.getOrganId();
|
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;
|
currentOrganId = organId;
|
||||||
}
|
}
|
||||||
Long finalCurrentOrganId = currentOrganId;
|
|
||||||
queryWrapper.or(wrapper -> wrapper
|
// ======================
|
||||||
.eq(ReportDatasourceDO::getOrganId, finalCurrentOrganId)
|
// 1. CUSTOM(当前组织)
|
||||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM))
|
// ======================
|
||||||
.or(wrapper -> wrapper
|
List<ReportDatasourceDO> customList = datasourceMapper.selectList(
|
||||||
.eq(ReportDatasourceDO::getOrganId, CF_ORGANID)
|
new LambdaQueryWrapperX<ReportDatasourceDO>()
|
||||||
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)
|
.eq(ReportDatasourceDO::getOrganId, currentOrganId)
|
||||||
|
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.CUSTOM)
|
||||||
|
.orderByDesc(ReportDatasourceDO::getCreateTime)
|
||||||
);
|
);
|
||||||
|
|
||||||
List<ReportDatasourceDO> reportDatasourceDOS = datasourceMapper.selectList(queryWrapper);
|
// ======================
|
||||||
// 查询数据集
|
// 2. SYSTEM(固定组织)
|
||||||
if (CollUtil.isNotEmpty(reportDatasourceDOS)) {
|
// ======================
|
||||||
reportDatasourceDOS.forEach(reportDatasourceDO -> {
|
List<ReportDatasourceDO> systemList = datasourceMapper.selectList(
|
||||||
queryDatasetInSource(reportDatasourceDO);
|
new LambdaQueryWrapperX<ReportDatasourceDO>()
|
||||||
});
|
.eq(ReportDatasourceDO::getOrganId, CF_ORGANID)
|
||||||
|
.eq(ReportDatasourceDO::getBuildinType, ReportTemplateTypeEnum.SYSTEM)
|
||||||
|
.orderByDesc(ReportDatasourceDO::getCreateTime)
|
||||||
|
);
|
||||||
|
|
||||||
|
// ======================
|
||||||
|
// 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
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user