TemplateConfigurationParametersServiceImpl.java 13.1 KB
package com.lhcredit.project.business.templateConfigurationParameters.service;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

import com.lhcredit.common.utils.StringUtils;
import com.lhcredit.project.business.frontDept.domain.FrontDept;
import com.lhcredit.project.business.frontDept.service.IFrontDeptService;
import com.lhcredit.project.system.dict.domain.DictData;
import com.lhcredit.project.system.dict.service.DictDataServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import com.lhcredit.project.business.templateConfigurationParameters.mapper.TemplateConfigurationParametersMapper;
import com.lhcredit.project.business.templateConfigurationParameters.domain.TemplateConfigurationParameters;
import com.lhcredit.common.utils.text.Convert;

import javax.annotation.Resource;

/**
 * 模版配置参数 服务层实现
 *
 * @author lhcredit
 * @date 2025-04-01
 */
@Service
public class TemplateConfigurationParametersServiceImpl implements ITemplateConfigurationParametersService {


    @Resource
    private TemplateConfigurationParametersMapper templateConfigurationParametersMapper;

    @Resource
    private IFrontDeptService frontDeptService;

    @Autowired
    private DictDataServiceImpl dictDataService;

    @Autowired
    private CacheManager cacheManager;




    /**
     * 查询模版配置参数信息
     *
     * @param id 模版配置参数ID
     * @return 模版配置参数信息
     */
    @Override
    public TemplateConfigurationParameters selectTemplateConfigurationParametersById(String id) {
        return templateConfigurationParametersMapper.selectTemplateConfigurationParametersById(id);
    }

    /**
     * 查询模版配置参数列表
     *
     * @param templateConfigurationParameters 模版配置参数信息
     * @return 模版配置参数集合
     */
    @Override
    public List<TemplateConfigurationParameters> selectTemplateConfigurationParametersList(TemplateConfigurationParameters templateConfigurationParameters) {
        return templateConfigurationParametersMapper.selectTemplateConfigurationParametersList(templateConfigurationParameters);
    }

    /**
     * 字段转换
     * @param templateConfigurationParameters 模版配置参数信息
     * @return 模版配置参数信息
     */
    @Override
    public TemplateConfigurationParameters changeModel(TemplateConfigurationParameters templateConfigurationParameters) {
//        //这里写各字段转换逻辑
//        if(templateConfigurationParameters!=null){
//            if(StringUtils.isNotEmpty(templateConfigurationParameters.getXXX())){
//               templateConfigurationParameters.setXXX(templateConfigurationParameters.getXXX());
//            }
//        }
        return templateConfigurationParameters;
    }

    /**
     * 列表转换
     *
     * @param templateConfigurationParametersList 模版配置参数集合
     * @return 模版配置参数集合
     */
    @Override
    public List<TemplateConfigurationParameters> changeModel(List<TemplateConfigurationParameters> templateConfigurationParametersList) {
        List<TemplateConfigurationParameters> result = new ArrayList<TemplateConfigurationParameters>();
        if (templateConfigurationParametersList.size() > 0) {
            for (TemplateConfigurationParameters templateConfigurationParameters:templateConfigurationParametersList){
                result.add(changeModel(templateConfigurationParameters));
            }
        }
        return result;
    }

    /**
     * 新增模版配置参数
     *
     * @param templateConfigurationParameters 模版配置参数信息
     * @return 结果
     */
    @Override
    public int insertTemplateConfigurationParameters(TemplateConfigurationParameters templateConfigurationParameters) {
        return templateConfigurationParametersMapper.insertTemplateConfigurationParameters(templateConfigurationParameters);
    }

    /**
     * 修改模版配置参数
     *
     * @param templateConfigurationParameters 模版配置参数信息
     * @return 结果
     */
    @Override
    public int updateTemplateConfigurationParameters(TemplateConfigurationParameters templateConfigurationParameters) {
        return templateConfigurationParametersMapper.updateTemplateConfigurationParameters(templateConfigurationParameters);
    }

    /**
     * 删除模版配置参数对象
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteTemplateConfigurationParametersByIds(String ids) {
        return templateConfigurationParametersMapper.deleteTemplateConfigurationParametersByIds(Convert.toStrArray(ids));
    }

    /**
     * 根据orgId查询 下单时 模板配置信息
     *
     * @param orgId
     * @return
     */
    @Override
    public List<TemplateConfigurationParameters> getTempConfParamsByOrg(Long orgId,String dictType){

        // 递归查询机构模板配置信息 根据orgID 关联查询 后台配置的 报告模板配置
        TemplateConfigurationParameters parameters = new TemplateConfigurationParameters();
        parameters.setOrgId(orgId);
//        parameters.setChecked("Y");
        List<TemplateConfigurationParameters> templateConfigurationParameters = recursiveGetTemplateConfigurationParameters(parameters);
        if (CollectionUtils.isEmpty(templateConfigurationParameters)) {
            return null;
        }
        //委托类型
        List<DictData> entrustTypeDicts = dictDataService.selectDictDataByType("entrust_type");
        Map<String, DictData> entrustTypeMap = entrustTypeDicts.stream().collect(Collectors.toMap(DictData::getDictValue, Function.identity()));

        //找出 翻译类型数据  client_type = null ,reportTranslationType 不是空的 数据, 并按照 typeId + clientId 为key 分组
        Map<String, List<TemplateConfigurationParameters>> translateMap = templateConfigurationParameters.stream().filter(te -> te.getClientType() == null && StringUtils.isNotEmpty(te.getReportTranslationType())).collect(Collectors.groupingBy(te -> getTempOnlyKey(te)));

        //处理 返回结果的结构, 筛选出 用户选中的模板。
        Map<Long, List<TemplateConfigurationParameters>> paramsMap = templateConfigurationParameters.stream().filter(tem -> StringUtils.isNotEmpty(tem.getChecked()) && tem.getChecked().equals("Y")).collect(Collectors.groupingBy(TemplateConfigurationParameters::getTypeId));
        ArrayList<TemplateConfigurationParameters> result = new ArrayList<>();
        paramsMap.forEach((typeId,temParamList)->{
            //非定制模板,直接按照 typeid 进行分类
            TemplateConfigurationParameters conf = new TemplateConfigurationParameters();
            /*TemplateConfigurationParameters para = temParamList.get(0);
            //普通报告模板类型名称
            conf.setTypeName(para.getTypeName());
            //普通报告模板类型id
            conf.setTypeId(typeId);
            conf.setTemplateConfigurationParametersList(temParamList);
            //设置 委托类型名称
            temParamList.forEach(te ->{
                DictData dictData = entrustTypeMap.get(te.getClientType());
                te.setTypeName(dictData.getDictLabel());
            });
            //设置 翻译数据
            List<TemplateConfigurationParameters> list = translateMap.get(typeId.toString());
            if (CollectionUtils.isNotEmpty(list))
                temParamList.add(list.get(0));*/

            //定制模板 需要特殊处理,在按照typeId分类的基础上,还需再按照 clientId进行细分
            if (typeId == -11){
                //定义 定制模板的类型 list
                ArrayList<TemplateConfigurationParameters> clientTempConfList = new ArrayList<>();
                Map<Integer, List<TemplateConfigurationParameters>> clientTmpMap = temParamList.stream().collect(Collectors.groupingBy(TemplateConfigurationParameters::getClientId));
                clientTmpMap.forEach((ctId,ctList)->{
                    TemplateConfigurationParameters ctConf = new TemplateConfigurationParameters();
                    ctConf.setClientId(ctId);
                    //模板类型id
                    ctConf.setTypeId(typeId);
                    //模板名称
                    String typeName = ctList.get(0).getTypeName();
                    ctConf.setTypeName(typeName);
                    //设置 委托类型
                    ctList.forEach(te->{
                        DictData dictData = entrustTypeMap.get(te.getClientType());
                        te.setTypeName(dictData.getDictLabel());
                    });
                    //翻译类型
                    TemplateConfigurationParameters p = ctList.get(0);
                    List<TemplateConfigurationParameters> list1 = translateMap.get(getTempOnlyKey(p));
                    if (CollectionUtils.isNotEmpty(list1))
                        ctList.add(list1.get(0));
                    //定制模板 list
                    ctConf.setTemplateConfigurationParametersList(ctList);
                    clientTempConfList.add(ctConf);
                });
//                conf.setTypeName("定制报告");
                conf.setTypeName(dictDataService.selectDictLabel(dictType, typeId.toString()));
                conf.setTypeId(typeId);
                conf.setTemplateConfigurationParametersList(clientTempConfList);
            }else {
                TemplateConfigurationParameters para = temParamList.get(0);
                //普通报告模板类型名称
//                conf.setTypeName(para.getTypeName());
                conf.setTypeName(dictDataService.selectDictLabel(dictType, typeId.toString()));
                //普通报告模板类型id
                conf.setTypeId(typeId);
                conf.setTemplateConfigurationParametersList(temParamList);
                //设置 委托类型名称
                temParamList.forEach(te ->{
                    DictData dictData = entrustTypeMap.get(te.getClientType());
                    te.setTypeName(dictData.getDictLabel());
                });
                //设置 翻译数据
                List<TemplateConfigurationParameters> list = translateMap.get(typeId.toString());
                if (CollectionUtils.isNotEmpty(list))
                    temParamList.add(list.get(0));
                }

            result.add(conf);
        });

        /*Cache cache = cacheManager.getCache("dict");
        if (cache != null){
            String s = cache.get("dict_key_value_report_type_-4", String.class);
            System.out.println(s);
        }*/

        return result;
    }

    @Override
    public List<TemplateConfigurationParameters> selectTemplateConfigurationParametersClientIds(String ids) {
        return  templateConfigurationParametersMapper.selectTemplateConfigurationParametersClientIds(Convert.toStrArray(ids));
    }
    @Override
    public List<TemplateConfigurationParameters> recursiveGetTemplateConfigurationParameters(TemplateConfigurationParameters parameters) {

        List<TemplateConfigurationParameters> templateConfigurationParameters = templateConfigurationParametersMapper.selectTemplateConfigurationParametersList(parameters);

        if (CollectionUtils.isEmpty(templateConfigurationParameters)) {
            // 获取上级部门
            FrontDept frontDept = frontDeptService.selectFrontDeptById(parameters.getOrgId());
            if (Objects.nonNull(frontDept) && frontDept.getParentId() != 0L) {
                // 递归查询上级部门
                parameters.setOrgId(frontDept.getParentId());
                return recursiveGetTemplateConfigurationParameters(parameters);
            } else {
                // 上级部门为空,返回空列表
                return Collections.emptyList();
            }
        }

        return templateConfigurationParameters;
    }

    @Override
    public int updateTemplateConfigurationParametersNameAndStatus(TemplateConfigurationParameters parameters) {
        return templateConfigurationParametersMapper.updateTemplateConfigurationParametersNameAndStatus(parameters);
    }


    private static String getTempOnlyKey(TemplateConfigurationParameters templateConf){
        String key = templateConf.getTypeId().toString();

        if (templateConf.getTypeId() == -11 && templateConf.getClientId() !=null){
            key = key + "_"+ templateConf.getClientId().toString();
        }
        return key;
    }

    /**
     * 根据orgId 查询配置模板
     * @param orgId
     * @return
     */
    public List<TemplateConfigurationParameters> selectTempConfParamsByOrg(Long orgId){
        //根据orgID 关联查询 模板配置
        TemplateConfigurationParameters parameters = new TemplateConfigurationParameters();
        parameters.setOrgId(orgId);
        return templateConfigurationParametersMapper.selectTemplateConfigurationParametersList(parameters);
    }
}