EKP后端/开发/SSH - 扩展或增加service(public)

最新笔记链接: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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liquid-Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值