最新笔记链接:https://app.yinxiang.com/fx/dc328a81-ce4c-4088-8c9a-8cbcc8a96d2a
package com.landray.kmss.xp.org.organizational.service;
import com.landray.kmss.common.service.IBaseService;
import java.util.List;
/**
* @author liquid
*/
public interface IXpSysOrgMatrixService extends IBaseService {
/**
* 根据列名(中文)获取矩阵数据
* @author liquid
* @date 2022年9月16日
* @param matrixId 矩阵id(矩阵编辑页面url参数fdId,或数据库表sys_org_matrix.fd_id)
* @param names 矩阵列名(以;分隔)
* @param version 版本号(不区分大小写,例如V1、v2),传入null或空字符串则获取最新版本
* @return 矩阵数据列表
*/
List<Object> findMatrixFieldValueByName(String matrixId, String names, String version) throws Exception;
}
package com.landray.kmss.xp.org.organizational.service.spring;
import com.landray.kmss.common.service.BaseServiceImp;
import com.landray.kmss.common.service.IBaseService;
import com.landray.kmss.sys.organization.model.SysOrgMatrix;
import com.landray.kmss.sys.organization.model.SysOrgMatrixRelation;
import com.landray.kmss.sys.organization.service.ISysOrgMatrixService;
import com.landray.kmss.util.SpringBeanUtil;
import com.landray.kmss.util.StringUtil;
import com.landray.kmss.xp.org.organizational.service.IXpSysOrgMatrixService;
import com.landray.kmss.xp.util.XpStringUtil;
import org.hibernate.query.NativeQuery;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* @author liquid
*/
public class XpSysOrgMatrixServiceImp extends BaseServiceImp implements IXpSysOrgMatrixService {
private ISysOrgMatrixService sysOrgMatrixService;
public ISysOrgMatrixService getSysOrgMatrixService() {
if (sysOrgMatrixService == null) {
sysOrgMatrixService = (ISysOrgMatrixService) SpringBeanUtil.getBean("sysOrgMatrixTarget");
}
return sysOrgMatrixService;
}
@Override
public List<Object> findMatrixFieldValueByName(String matrixId, String names, String version) throws Exception {
System.out.println(this.getBaseDao());
ISysOrgMatrixService sysOrgMatrixService = getSysOrgMatrixService();
// 拿矩阵数据库表名、列名
SysOrgMatrix matrix = sysOrgMatrixService.getMatrixData(matrixId, null);
List<String> fieldNames = new ArrayList<>();
List<SysOrgMatrixRelation> relations = matrix.getFdRelations();
for (String name : names.split(XpStringUtil.SEMICOLON)) {
Optional<SysOrgMatrixRelation> relation = relations.parallelStream().filter(e -> name.equals(e.getFdName())).findFirst();
fieldNames.add(Objects.requireNonNull(relation.get()).getFdFieldName());
}
// 拿数据库列数据
StringBuilder sql = new StringBuilder("select " + fieldNames.stream().collect(Collectors.joining(XpStringUtil.COMMA)));
String versionClause = StringUtil.isNotNull(version) ? "'" + version.toUpperCase() + "'" : "SELECT MAX(fd_version) FROM "+ matrix.getFdSubTable() +"";
sql.append(" FROM ").append(matrix.getFdSubTable()).append(" WHERE fd_version in ("+ versionClause +")");
IBaseService baseService = (IBaseService) SpringBeanUtil.getBean("KmssBaseTarget");
NativeQuery query = baseService.getBaseDao().getHibernateSession().createNativeQuery(sql.toString());
return query.list();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean
id="xpSysOrgMatrixTarget"
class="com.landray.kmss.xp.org.organizational.service.spring.XpSysOrgMatrixServiceImp"
parent="KmssBaseTarget">
</bean>
</beans>