1、获取当前业务类型下的数据权限相关信息接口。
2、保存数据权限数据接口。
3、删除数据权限接口。
4、使用当前用户的类型查询用户接口。
已修改3个文件
已添加5个文件
537 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/constant/IRightConstant.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsDataAuthDTO.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsDataAuthController.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsDataAuthServiceI.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsDataAuthServiceImpl.java 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/constant/IRightConstant.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.vci.constant;
public class IRightConstant {
    //全部有权
    public static final String RULETYPE_ALL_HAS = "0";
    //允许规则
    public static final String RULETYPE__HAS = "1";
    //全部无权
    public static final String RULETYPE_ALL_NOTHAS = "2";
    //拒绝规则
    public static final String RULETYPE__NOTHAS = "3";
    //用户
    public static final String User = "user";
    //用户组
    public static final String UserGroup = "userGroup";
    //角色
    public static final String Role = "role";
    //操作
    public static final String OPS="query,add,edit,remove,choose,choosedoc,cpdoc,pastedoc,imp,analyze,exp,rev,transfer,del,imp,ptop.add ,ptop.del,ptop.mody,lc.begin,lc.end";
    //    public static final String OPS_ORDINARY="query,add,edit,remove,choose,choosedoc,cpdoc,pastedoc,imp,analyze,exp,rev,transfer,del,imp";
    public static final String OPS_ORDINARY="query";
    public static final String OPS_RELATION_LIFECYCLE="ptop.add ,ptop.del,ptop.mody,lc.begin,lc.end";
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/OsDataAuthDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.vci.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.vci.starter.web.util.VciDateUtil;
import lombok.Data;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * æ•°æ®æƒé™ä¼ è¾“对象
 * @author yuxc
 * @date 2024/11/26
 */
@Data
public class OsDataAuthDTO implements java.io.Serializable {
    /**
     * ç¦æ­¢ä¿®æ”¹è¿™ä¸ªå€¼
     */
    private static final long serialVersionUID = 814342725285373312L;
    // è®¾ç½®Table列头信息
    List<String> tableHeader;
    //列表数据
    List<Map> rowList;
    //action的map
    Map<String, String> actionMap;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/SmUserQueryServiceI.java
@@ -271,4 +271,10 @@
     */
    List<String> queryUserNameByRoleType(String roleType) throws PLException;
    /**
     * ä½¿ç”¨å½“前用户的类型查询用户
     * @return
     * @throws VciBaseException
     */
    List<SmUserVO> listUserByUserType() throws PLException;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/compatibility/impl/SmUserQueryServiceImpl.java
@@ -1664,4 +1664,19 @@
        return userNameList;
    }
    /**
     * ä½¿ç”¨å½“前用户的类型查询用户
     * @return
     * @throws VciBaseException
     */
    @Override
    public List<SmUserVO> listUserByUserType() throws PLException {
        try {
            UserInfo[] userInfo = platformClientUtil.getFrameworkService().fetchUserInfoByType(Short.parseShort(WebUtil.getCurrentUserSessionInfo().getUsertype()));
            return userInfoArr2VO(userInfo);
        } catch (PLException e) {
            throw new VciBaseException("登录时,获取用户信息失败:"+e.getMessage());
        }
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/frameworkcore/controller/SmUserQueryController.java
@@ -174,6 +174,25 @@
        }
    }
    /**
     * ä½¿ç”¨å½“前用户的类型查询用户
     * @return
     * @throws VciBaseException
     */
    @RequestMapping(value = "/listUserByUserType",method = RequestMethod.GET)
    public BaseResult<List<SmUserVO>> listUserByUserType() throws VciBaseException{
        try {
            List<SmUserVO> smUserVOList = userQueryService.listUserByUserType();
            return  BaseResult.dataList(smUserVOList);
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = "通过当前用户的类型来获取用户数据时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
    /**
     * ä½¿ç”¨è§’色获取不在某个角色下的用户参照列表
     * @param pkRole è§’色的主键,不能为空
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsDataAuthController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
package com.vci.web.controller;
import com.vci.corba.common.PLException;
import com.vci.corba.framework.data.GrandValue;
import com.vci.dto.OsPvolumeDTO;
import com.vci.starter.web.annotation.log.VciBusinessLog;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.util.ControllerUtil;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.service.OsDataAuthServiceI;
import com.vci.web.util.Func;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
 * æ•°æ®æƒé™çš„æŽ§åˆ¶å™¨
 * @author yuxc
 * @date 2024-11-25
 */
@RequestMapping("/dataAuthController")
@RestController
public class OsDataAuthController {
    /**
     * æ•°æ®æƒé™æœåŠ¡
     */
    @Autowired
    private OsDataAuthServiceI osDataAuthServiceI;
    /**
     * æ—¥å¿—
     */
    private Logger logger = LoggerFactory.getLogger(getClass());
    /**
     * èŽ·å–å½“å‰ä¸šåŠ¡ç±»åž‹ä¸‹çš„æ•°æ®æƒé™ç›¸å…³ä¿¡æ¯
     * @return æ•°æ®
     */
    @GetMapping("/getData")
    public BaseResult getData(String typeName){
        try {
            return osDataAuthServiceI.getData(typeName);
        } catch (PLException e) {
            BaseResult objectBaseResult = new BaseResult<>();
            objectBaseResult.setCode(Integer.parseInt(e.code));
            objectBaseResult.setMsg(Arrays.toString(e.messages));
            return objectBaseResult;
        }
    }
    /**
     * ä¿å­˜æ•°æ®æƒé™æ•°æ®
     * @return ä¿å­˜ç»“æžœ
     */
    @PostMapping("/saveGrand")
    public BaseResult saveGrand(@RequestBody List<GrandValue> grandValues){
        try {
            return osDataAuthServiceI.saveGrand(grandValues);
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = "保存数据权限时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
    /**
     * åˆ é™¤æ•°æ®æƒé™
     * @param typeName ä¸šåŠ¡ç±»åž‹
     * @param ruleName è§„则名称
     * @return åˆ é™¤ç»“æžœ
     */
    @DeleteMapping("/deleteTypeRuleGrand")
    public BaseResult deleteTypeRuleGrand(String typeName,String ruleName){
        try {
            return osDataAuthServiceI.deleteTypeRuleGrand(typeName,ruleName);
        }catch (Exception e){
            e.printStackTrace();
            String exceptionMessage = "删除数据权限时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsDataAuthServiceI.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.vci.web.service;
import com.vci.corba.common.PLException;
import com.vci.corba.framework.data.GrandValue;
import com.vci.starter.web.pagemodel.BaseResult;
import java.util.List;
/**
 * æ•°æ®æƒé™çš„æŽ§åˆ¶å™¨
 * @author yuxc
 * @date 2024-11-25
 */
public interface OsDataAuthServiceI {
    BaseResult getData(String typeName) throws PLException;
    /**
     * ä¿å­˜æ•°æ®æƒé™æ•°æ®
     * @return ä¿å­˜ç»“æžœ
     */
    BaseResult saveGrand(List<GrandValue> grandValues) throws PLException;
    /**
     * åˆ é™¤æ•°æ®æƒé™
     * @param typeName ä¸šåŠ¡ç±»åž‹
     * @param ruleName è§„则名称
     * @return åˆ é™¤ç»“æžœ
     */
    BaseResult deleteTypeRuleGrand(String typeName, String ruleName) throws PLException;
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsDataAuthServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,315 @@
package com.vci.web.service.impl;
import com.vci.common.qt.object.Symbol;
import com.vci.constant.IRightConstant;
import com.vci.corba.common.PLException;
import com.vci.corba.framework.data.GrandValue;
import com.vci.corba.omd.btm.BizType;
import com.vci.corba.omd.lcm.LifeCycle;
import com.vci.corba.omd.lcm.TransitionVO;
import com.vci.corba.omd.ltm.LinkType;
import com.vci.corba.portal.data.PLAction;
import com.vci.dto.OsDataAuthDTO;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.web.service.OsDataAuthServiceI;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
 * æ•°æ®æƒé™çš„æŽ§åˆ¶å™¨
 * @author yuxc
 * @date 2024-11-25
 */
@Service
public class OsDataAuthServiceImpl implements OsDataAuthServiceI {
    @Autowired
    private PlatformClientUtil platformClientUtil;
    @Override
    public BaseResult getData(String typeName) throws PLException {
        GrandValue[] grandValues = platformClientUtil.getFrameworkService().queryGrand(typeName);
        // è®¾ç½®Table列头信息
        List<String> tableHeader = new ArrayList<String>();
        //获取表头数据
        getTableHeader(grandValues, tableHeader, typeName);
        //列表数据
        List<Map> rowList = new ArrayList<>();
        //获取列表数据
        getTableData(grandValues, tableHeader, typeName, rowList);
        Map<String, String> actionsMap = getAllActionsByType2(typeName, "business");
        OsDataAuthDTO tableData = new OsDataAuthDTO();
        tableData.setTableHeader(tableHeader);
        tableData.setRowList(rowList);
        tableData.setActionMap(actionsMap);
        return BaseResult.success(tableData);
    }
    /**
     * ä¿å­˜æ•°æ®æƒé™æ•°æ®
     * @return ä¿å­˜ç»“æžœ
     */
    @Override
    public BaseResult saveGrand(List<GrandValue> grandValues) throws PLException {
        boolean isTrue = false;
        isTrue = platformClientUtil.getFrameworkService()
                .deleteTypeRuleGrand(grandValues.get(0).identifier.split("_")[0], grandValues.get(0).ruleName);
        if(!isTrue){
            throw new VciBaseException("数据权限删除失败!");
        }
        // save
        boolean isTrue_add = false;
        try {
            isTrue_add = platformClientUtil.getFrameworkService()
                    .saveGrand(grandValues.toArray(new GrandValue[grandValues.size()]));
        } catch (Exception e) {
            throw new VciBaseException("数据权限保存失败!");
        }
        if (isTrue_add) {
            return BaseResult.success("保存成功!");
        }
        return BaseResult.success("保存失败!");
    }
    /**
     * åˆ é™¤æ•°æ®æƒé™
     * @param typeName ä¸šåŠ¡ç±»åž‹
     * @param ruleName è§„则名称
     * @return åˆ é™¤ç»“æžœ
     */
    @Override
    public BaseResult deleteTypeRuleGrand(String typeName, String ruleName) throws PLException {
        // DataBase
        boolean isTrue = platformClientUtil.getFrameworkService().deleteTypeRuleGrand(typeName,
                    ruleName);
        if (!isTrue) {
            return BaseResult.success("删除失败!");
        }
        return BaseResult.success("删除成功!");
    }
    //add by caill start 2015 12.18 å°†æŸ¥è¯¢å‡ºæ¥çš„action放入到map中
    private Map<String, String> getAllActionsByType2(String typeName, String type) throws PLException {
        Map<String,String> boActions2 = new HashMap<String,String>();
        boActions2.put("查询", "query");
        PLAction[] allActions = platformClientUtil.getUIService().getAllPLActionEntityByType(typeName);
        if (allActions == null || allActions.length == 0) {
            return boActions2;
        }
        for (int i = 0; i < allActions.length; i++) {
            if(allActions[i].plTypeType.equals(type)){
                boActions2.put(allActions[i].plName,allActions[i].plCode);    //将中文显示作为key,英文显示作为value放到map中
            }
        }
        return boActions2;
    }
    private void getTableData(GrandValue[] grandValues, List<String> tableHeader, String typeName, List<Map> rowList) throws PLException {
        // ä¾æ®è§„则名称,规则分类
        Map<String, List<GrandValue>> splitRuleMap = splitRuleByName(grandValues);
        // ä¾æ®è§„则名称
//        int row = 0;
        // è®¾ç½®è§„则记录行数
//        ruleModel.setRowCount(splitRuleMap.size());
        // add by caill start 2016.1.11 å¾—到btm、link、lifeCyles
        LinkType[] links = null;
        LifeCycle lifeCycle = null;
        BizType btm = null;
        try {
            btm = platformClientUtil.getBtmService().getBizTypeByName(typeName);
            links = platformClientUtil.getLinkTypeService().getLinkTypeByBtmName(btm.name, Symbol.FROM);
            LifeCycle[] lifeCyles = platformClientUtil.getLifeCycleService().getLifeCycles();
            for (int m = 0; m < lifeCyles.length; m++) {
                if (lifeCyles[m].name.equals(btm.lifeCycle)) {
                    lifeCycle = lifeCyles[m];
                    break;
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        // add by caill end
//        ActionConstants act = new ActionConstants();
        PLAction[] allActions = platformClientUtil.getUIService().getAllPLActionEntityByType(typeName);
//        platformClientUtil.getUIService().getAllPLActionEntityByType(typeName);
        for (Iterator<Map.Entry<String, List<GrandValue>>> iter = splitRuleMap.entrySet().iterator(); iter.hasNext();) {
            Map.Entry<String, List<GrandValue>> entry = iter.next();
            List<GrandValue> rules = entry.getValue();
            Map<Object, Object> columnData = new HashMap<>();
            // å¢žåŠ é¡µé¢ç¼“å­˜
//            ruleModel.setConditionValue(row, rules);
            columnData.put("rules",rules.get(0));
            // add by caill start 2015 12.18 å°†æŸ¥å‡ºçš„action放到map中,注意不要落下“查询”
            Map<String, String> actionMap = new HashMap<String, String>();
            actionMap.put("query", "查询"); // å°†æ“ä½œä¸­çš„query放入actionMap中
            for (int i = 0; i < allActions.length; i++) {
                if (allActions[i].plTypeType.equals("business")) {
                    actionMap.put(allActions[i].plCode, allActions[i].plName); // å°†æ“ä½œæ”¾å…¥actionMap中
                }
            }
            for (int j = 0; j < links.length; j++) {
                for (int i = 0; i < allActions.length; i++) {
                    if (allActions[i].plTypeType.equals("link")) {
                        actionMap.put(links[j].name + "." + allActions[i].plCode,
                                links[j].name + "." + allActions[i].plName);// å°†å…³ç³»æ”¾å…¥actionMap中
                    }
                }
                actionMap.put(links[j].name + "." + "query", links[j].name + "." + "查询"); // å°†å…³ç³»ä¸­çš„query放入actionMap中
            }
            TransitionVO[] transitions = lifeCycle != null ? lifeCycle.routes : new TransitionVO[0];
            for (int j = 0; j < transitions.length; j++) {
                String name = lifeCycle.name + "." + transitions[j].connect;
                actionMap.put(name, name); // å°†è·ƒè¿æ”¾å…¥actionMap中
            }
            // add by caill end
            for (int j = 0; j < rules.size(); j++) {
                // è§„则名和类型
//                ruleModel.setValueAt(rules.get(j).ruleName, row, 0);
                columnData.put(0, rules.get(j).ruleName);
                if (rules.get(j).ruleType.equals(IRightConstant.RULETYPE__HAS)) {
                    columnData.put(1, "允许规则");
                } else if (rules.get(j).ruleType.equals(IRightConstant.RULETYPE__NOTHAS)) {
                    columnData.put(1, "拒绝规则");
                } else if (rules.get(j).ruleType.equals(IRightConstant.RULETYPE_ALL_HAS)) {
                    columnData.put(1, "全部有权");
                } else {
                    columnData.put(1, "全部无权");
                }
                // æŒ‡å®šçš„æ“ä½œèµ‹å€¼
//                TableColumnModel columnModel = funclet.getRightMainPanel().getRuleTable().getColumnModel();
                int start = rules.get(j).identifier.lastIndexOf("_") + 1;
                String op = rules.get(j).identifier.substring(start, rules.get(j).identifier.length());
                // add by caill start 2015.12.18 éåކmap,根据英文名称找到相应的中文名称,并根据中文名称找到对应的列
                String headerName = null;
                Set<String> keys = null;
                if (actionMap.size() > 0) {
                    keys = actionMap.keySet();
                }
                if (keys.size() != 0) {
                    for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
                        String key = iterator.next();
                        if (op.equals(key)) {
                            headerName = actionMap.get(key);
                            break;
                        }
                    }
                }
                int columnIndex = -1;
                if (headerName != null) {
//                    columnIndex = columnModel.getColumnIndex(headerName);
                    columnIndex = tableHeader.indexOf(headerName);
                }
                // add by caill end
                // int columnIndex = columnModel.getColumnIndex(op);
                if (columnIndex >= 0) {
//                    ruleModel.setValueAt(rules.get(j).isGrand == '1' ? true : false, row, columnIndex);
                    columnData.put(columnIndex, rules.get(j).isGrand == '1' ? true : false);
                }
            }
//            ++row;
            rowList.add(columnData);
        }
    }
    private void getTableHeader(GrandValue[] grandValues, List<String> tableHeader, String typeName) throws PLException {
        // æ“ä½œä¿¡æ¯
        List<String> ops = new ArrayList<String>();
        for (int i = 0; i < grandValues.length; i++) {
            int start = grandValues[i].identifier.lastIndexOf("_") + 1;
            String op = grandValues[i].identifier.substring(start, grandValues[i].identifier.length());
            if (!ops.contains(op)) {
                ops.add(op);
            }
        }
        // æ“ä½œä¿¡æ¯
        String[] operations = ops.toArray(new String[ops.size()]);
//        List<String> tablerule = new ArrayList<String>();
        tableHeader.add("规则名称");
        tableHeader.add("规则类型");
        PLAction[] allActions = platformClientUtil.getUIService().getAllPLActionEntityByType(typeName);
        for (int m = 0; m < operations.length; m++) {
            if (allActions != null && allActions.length != 0) {
                for (int i = 0; i < allActions.length; i++) {
                    if (allActions[i].plCode.equals(operations[m])) {
                        tableHeader.add(allActions[i].plName);
                        break;
                    } else if (operations[m].endsWith("." + allActions[i].plCode)) {
                        int index = operations[m].indexOf("." + allActions[i].plCode);
                        StringBuilder sb = new StringBuilder(operations[m]);
                        StringBuilder actionChina = sb.replace(index + 1, operations[m].length(), allActions[i].plName);
                        tableHeader.add(actionChina.toString());
                        break;
                    } else if (operations[m].equals("query")) {
                        tableHeader.add("查询"); // æ³¨æ„ä¸è¦è½ä¸‹å†™æ­»çš„“查询”
                        break;
                    } else if (operations[m].endsWith(".query")) {
                        int index = operations[m].indexOf(".query");
                        StringBuilder sb = new StringBuilder(operations[m]);
                        StringBuilder actionChina = sb.replace(index + 1, operations[m].length(), "查询");
                        tableHeader.add(actionChina.toString());
                        break;
                    }
                }
            } else {
                if (operations[m].equals("query")) {
                    tableHeader.add("查询"); // æ³¨æ„ä¸è¦è½ä¸‹å†™æ­»çš„“查询”
                }
                if (operations[m].endsWith(".query")) {
                    int index = operations[m].indexOf(".query");
                    StringBuilder sb = new StringBuilder(operations[m]);
                    StringBuilder actionChina = sb.replace(index + 1, operations[m].length(), "查询");
                    tableHeader.add(actionChina.toString());
                }
            }
        }
        LifeCycle lifeCycle = null;
        BizType btm = null;
        try {
            btm = platformClientUtil.getBtmService().getBizTypeByName(typeName);
            LifeCycle[] lifeCyles = platformClientUtil.getLifeCycleService().getLifeCycles();
            for (int j = 0; j < lifeCyles.length; j++) {
                if (lifeCyles[j].name.equals(btm.lifeCycle)) {
                    lifeCycle = lifeCyles[j];
                    break;
                }
            }
        } catch (Throwable e) {
            e.printStackTrace();
        }
        TransitionVO[] transitions = lifeCycle != null ? lifeCycle.routes : new TransitionVO[0];
        for (int j = 0; j < transitions.length; j++) {
            tableHeader.add(lifeCycle.name + "." + transitions[j].connect);
        }
    }
    private Map<String, List<GrandValue>> splitRuleByName(GrandValue[] values) {
        Map<String, List<GrandValue>> splitRuleMap = new HashMap<String, List<GrandValue>>();
        for (int i = 0; i < values.length; i++) {
            if (splitRuleMap.get(values[i].ruleName) == null) {
                List<GrandValue> ruleOfOneName = new ArrayList<GrandValue>();
                ruleOfOneName.add(values[i]);
                splitRuleMap.put(values[i].ruleName, ruleOfOneName);
            } else {
                splitRuleMap.get(values[i].ruleName).add(values[i]);
            }
        }
        return splitRuleMap;
    }
}