1.增加注释

2.更改拼写错误
This commit is contained in:
chenweilong 2022-12-16 17:31:04 +08:00
parent bb12a1fe76
commit 3a3540079b
31 changed files with 306 additions and 77 deletions

View File

@ -12,6 +12,11 @@ import org.springframework.stereotype.Component;
*/
@Component
public class AviatorEvaluatorBean {
/**
* 向google匹配方法中注入需要的工具类
* @throws IllegalAccessException
* @throws NoSuchMethodException
*/
@Bean
public void aviatorEvaluatorInit() throws IllegalAccessException, NoSuchMethodException {
AviatorEvaluator.addStaticFunctions("CollUtil", CollUtil.class);

View File

@ -8,7 +8,9 @@ import com.yomahub.liteflow.core.NodeComponent;
@LiteflowComponent("defaultOutput")
public class DefaultOutputCmp extends NodeComponent {
/**
* 默认输出
*/
@Override
public void process() {
BaseCenter requestData = this.getRequestData();

View File

@ -28,6 +28,9 @@ public class OutputCmp extends NodeComponent {
@Resource
private BaseTemplateService baseTemplateService;
/**
* 输出节点
*/
@Override
public void process() {
BaseCenter requestData = this.getRequestData();

View File

@ -19,16 +19,32 @@ public class BaseChainController {
@Resource
private BaseChainService baseChainService;
/**
* 生成动态规则
*
* @return CommonResult
*/
@PostMapping("/generateDynamicChain")
public CommonResult generateDynamicChain() {
return baseChainService.generateDynamicChain();
}
/**
* 执行链路
*
* @param chainName 链路名称
* @return CommonResult
*/
@GetMapping("/executeChain/{chainName}")
public CommonResult executeChain(@PathVariable String chainName) {
return baseChainService.executeChain(chainName);
}
/**
* 获取所有已注入的动态链路
*
* @return CommonResult
*/
@GetMapping("/getChainList")
public CommonResult getChainList() {
return baseChainService.getChainList();

View File

@ -24,11 +24,23 @@ public class BaseDataController {
@Resource
private BaseDataService baseDataService;
/**
* 创建基础数据
*
* @param createBaseDataFrom 创建参数
* @return CommonResult
*/
@PostMapping("/createBaseData")
public CommonResult createBaseData(@RequestBody CreateBaseDataFrom createBaseDataFrom) {
return baseDataService.createBaseData(createBaseDataFrom);
}
/**
* 批量创建基础数据
*
* @param createBaseDataFromList 创建参数集合
* @return CommonResult
*/
@PostMapping("/batchCreateBaseData")
public CommonResult batchCreateBaseData(@RequestBody List<CreateBaseDataFrom> createBaseDataFromList) {
return baseDataService.batchCreateBaseData(createBaseDataFromList);

View File

@ -20,12 +20,22 @@ public class BaseNodeController {
@Resource
private BaseNodeService baseNodeService;
/**
* 创建节点
*
* @param createNodeFrom 创建参数
* @return CommonResult
*/
@PostMapping("/createNode")
public CommonResult createNode(@RequestBody CreateNodeFrom createNodeFrom) {
return baseNodeService.createNode(createNodeFrom);
}
/**
* 获取所有已注入节点
*
* @return CommonResult
*/
@GetMapping("/getNodeList")
public CommonResult getNodeList() {
return baseNodeService.getNodeList();

View File

@ -20,11 +20,22 @@ public class BaseTemplateController {
@Resource
private BaseTemplateService baseTemplateService;
/**
* 创建爱你模板
*
* @param createTemplateFrom 创建参数
* @return CommonResult
*/
@PostMapping("/createTemplate")
public CommonResult createTemplate(@RequestBody CreateTemplateFrom createTemplateFrom) {
return baseTemplateService.createTemplate(createTemplateFrom);
}
/**
* 获取所有模板
*
* @return CommonResult
*/
@GetMapping("/getTemplateList")
public CommonResult getTemplateList() {
return baseTemplateService.getTemplateList();

View File

@ -6,7 +6,7 @@ import lombok.Data;
import java.time.LocalDateTime;
/**
*
* 链路
* @TableName base_chain
*/
@TableName(value ="base_chain")

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 基础数据
* @author: 陈韦龙
* @date: 2022年12月06日 09:59
*/

View File

@ -6,7 +6,7 @@ import lombok.Data;
import java.time.LocalDateTime;
/**
*
* 节点
* @TableName base_node
*/
@TableName(value ="base_node")

View File

@ -4,9 +4,10 @@ import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
*
* 模板
* @TableName base_template
*/
@TableName(value ="base_template")
@ -42,4 +43,10 @@ public class BaseTemplateEntity {
@TableField(value = "last_modify_time", fill = FieldFill.UPDATE)
private LocalDateTime lastModifyTime;
/**
* 修改时间
*/
@TableField(exist = false)
private List<BaseNodeEntity> baseNodeEntityList;
}

View File

@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.ToString;
/**
* 基础数据类型枚举
* @author: 陈韦龙
* @date: 2022年12月06日 10:17
*/

View File

@ -7,6 +7,7 @@ import lombok.Getter;
import java.util.Objects;
/**
* 有效状态枚举
* @author: 陈韦龙
* @date: 2022年12月14日 11:28
*/

View File

@ -5,6 +5,7 @@ import lombok.Getter;
import lombok.ToString;
/**
* 节点类型枚举
* @author: 陈韦龙
* @date: 2022年12月12日 17:24
*/

View File

@ -7,6 +7,8 @@ import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* 自动插入创建时间和更新时间
*
* @author: 陈韦龙
* @date: 2022年12月14日 09:39
*/

View File

@ -4,6 +4,7 @@ import cn.hutool.json.JSONObject;
import lombok.Data;
/**
* 规则匹配数据类
* @author: 陈韦龙
* @date: 2022年12月05日 18:15
*/

View File

@ -3,6 +3,7 @@ package com.example.liteflow.mysql.model;
import lombok.Data;
/**
* 输出数据类
* @author: 陈韦龙
* @date: 2022年12月12日 18:30
*/

View File

@ -3,15 +3,22 @@ package com.example.liteflow.mysql.model.rule;
import lombok.Data;
/**
* 匹配内容和运算符
* @author: 陈韦龙
* @date: 2022年12月07日 17:55
*/
@Data
public class Match {
// 条件运算符:"$eq"
/**
* 条件运算符:"$eq"
*/
private String conditionalOperators;
// 匹配值
/**
* 匹配值
*/
private String matchingValue;
// 匹配内容
/**
* 匹配内容
*/
private String matchingContent;
}

View File

@ -5,19 +5,34 @@ import lombok.Data;
import java.util.List;
/**
* 规则类
* @author: 陈韦龙
* @date: 2022年12月07日 16:04
*/
@Data
public class Rule {
// 逻辑运算符"$or"
/**
* 逻辑运算符"$or"
*/
private String logicOperators;
// 条件运算符:"$eq"
/**
* 条件运算符:"$eq"
*/
private String conditionalOperators;
// 匹配值
/**
* 匹配值
*/
private String matchingValue;
// 匹配内容
/**
* 匹配内容
*/
private String matchingContent;
/**
* 子规则
*/
private List<Rule> children;
/**
* 自身下多条规则
*/
private List<Match> matches;
}

View File

@ -1,15 +0,0 @@
package com.example.liteflow.mysql.model.rule;
import lombok.Data;
import java.util.List;
/**
* @author: 陈韦龙
* @date: 2022年12月07日 10:41
*/
@Data
public class RuleForm {
private String roleName;
private List<Rule> rules;
}

View File

@ -17,6 +17,10 @@ public class AviatorEvaluatorRunner implements CommandLineRunner {
@Resource
private BaseChainService baseChainService;
/**
* 初始化链路和珠莲路
* @param args
*/
@Override
public void run(String... args) {
baseChainService.initDynamicChain();

View File

@ -10,13 +10,35 @@ import com.example.liteflow.mysql.model.CommonResult;
* @createDate 2022-12-14 15:25:39
*/
public interface BaseChainService extends IService<BaseChainEntity> {
/**
* 生成动态规则
*
* @return CommonResult
*/
CommonResult generateDynamicChain();
/**
* 初始化链路
*/
void initDynamicChain();
/**
* 初始化主链路
*/
void initMainChain();
/**
* 执行链路
*
* @param chainName 链路名称
* @return CommonResult
*/
CommonResult executeChain(String chainName);
/**
* 获取所有已注入的动态链路
*
* @return CommonResult
*/
CommonResult getChainList();
}

View File

@ -12,8 +12,28 @@ import java.util.List;
* @date: 2022年12月06日 09:58
*/
public interface BaseDataService extends IService<BaseDataEntity> {
BaseDataEntity getByTypeAndTemplateId(String type, String attribution);
/**
* 根据类型和模板Id获取基础数据
*
* @param type 类型
* @param templateId 模板Id
* @return BaseDataEntity
*/
BaseDataEntity getByTypeAndTemplateId(String type, String templateId);
/**
* 创建基础数据
*
* @param createBaseDataFrom 创建参数
* @return CommonResult
*/
CommonResult createBaseData(CreateBaseDataFrom createBaseDataFrom);
/**
* 批量创建基础数据
*
* @param createBaseDataFromList 创建参数集合
* @return CommonResult
*/
CommonResult batchCreateBaseData(List<CreateBaseDataFrom> createBaseDataFromList);
}

View File

@ -12,12 +12,28 @@ import com.example.liteflow.mysql.model.node.UpdateNodeFrom;
* @createDate 2022-12-14 09:37:25
*/
public interface BaseNodeService extends IService<BaseNodeEntity> {
/**
* 创建节点
*
* @param createNodeFrom 创建参数
* @return CommonResult
*/
CommonResult createNode(CreateNodeFrom createNodeFrom);
CommonResult updateNode(UpdateNodeFrom updateNodeFrom);
/**
* 根据动态节点中的Id获取节点
*
* @param nodeId 动态节点中的Id获取节点
* @return BaseNodeEntity
*/
BaseNodeEntity getByNodeId(String nodeId);
/**
* 获取所有已注入节点
*
* @return CommonResult
*/
CommonResult getNodeList();
}

View File

@ -14,12 +14,25 @@ import java.util.List;
* @createDate 2022-12-14 09:37:25
*/
public interface BaseTemplateService extends IService<BaseTemplateEntity> {
/**
* 创建爱你模板
*
* @param createTemplateFrom 创建参数
* @return CommonResult
*/
CommonResult createTemplate(CreateTemplateFrom createTemplateFrom);
boolean updateTemplate(UpdateTemplateFrom updateTemplateFrom);
/**
* 获取所有未生成链路的模板
*
* @return List<BaseTemplateEntity>
*/
List<BaseTemplateEntity> getNotExistsChain();
/**
* 获取所有模板
*
* @return CommonResult
*/
CommonResult getTemplateList();
}

View File

@ -49,6 +49,11 @@ public class BaseChainServiceImpl extends ServiceImpl<BaseChainMapper, BaseChain
@Resource
private FlowExecutor flowExecutor;
/**
* 生成动态规则
*
* @return CommonResult
*/
@Override
public CommonResult generateDynamicChain() {
LambdaQueryWrapper<BaseTemplateEntity> templateQueryWrapper = new LambdaQueryWrapper<>();
@ -56,27 +61,34 @@ public class BaseChainServiceImpl extends ServiceImpl<BaseChainMapper, BaseChain
List<BaseTemplateEntity> templateList = baseTemplateService.list(templateQueryWrapper);
log.info("templateList size = {}", templateList.size());
if (CollUtil.isNotEmpty(templateList)) {
Map<BaseTemplateEntity, List<BaseNodeEntity>> templateAndNodeMap = new HashMap<>();
templateList.forEach(template -> {
String templateId = template.getId();
LambdaUpdateWrapper<BaseNodeEntity> nodeQueryWrapper = new LambdaUpdateWrapper<>();
nodeQueryWrapper.eq(BaseNodeEntity::getTemplateId, templateId)
.eq(BaseNodeEntity::getEnableMark, EnableMarkEnum.Enable.getValue());
List<BaseNodeEntity> nodeList = baseNodeService.list(nodeQueryWrapper);
templateAndNodeMap.put(template, nodeList);
if (CollUtil.isNotEmpty(nodeList)) {
template.setBaseNodeEntityList(nodeList);
}
});
this.generateOrUpdateChain(templateAndNodeMap);
List<BaseTemplateEntity> collect = templateList.stream().filter(template -> CollUtil.isNotEmpty(template.getBaseNodeEntityList())).collect(Collectors.toList());
log.info("collect size = {}", collect.size());
this.generateOrUpdateChain(collect);
}
this.initMainChain();
return CommonResult.success("生成链路成功", this.list());
}
private void generateOrUpdateChain(Map<BaseTemplateEntity, List<BaseNodeEntity>> templateAndNodeMap) {
for (Map.Entry<BaseTemplateEntity, List<BaseNodeEntity>> entry : templateAndNodeMap.entrySet()) {
BaseTemplateEntity templateEntity = entry.getKey();
/**
* 保存或更新链路
*
* @param baseTemplateEntityList
*/
private void generateOrUpdateChain(List<BaseTemplateEntity> baseTemplateEntityList) {
baseTemplateEntityList.forEach(templateEntity -> {
String templateName = templateEntity.getTemplateName();
String templateId = templateEntity.getId();
List<BaseNodeEntity> nodeList = entry.getValue();
List<BaseNodeEntity> nodeList = templateEntity.getBaseNodeEntityList();
// 将所有节点注入
nodeList.forEach(node -> {
String nodeType = node.getNodeType();
@ -151,9 +163,12 @@ public class BaseChainServiceImpl extends ServiceImpl<BaseChainMapper, BaseChain
checkExists.setElData(stringBuilder.toString());
this.updateById(checkExists);
}
}
});
}
/**
* 初始化链路
*/
@Override
public void initDynamicChain() {
log.info("进入【初始化链路】方法");
@ -162,7 +177,6 @@ public class BaseChainServiceImpl extends ServiceImpl<BaseChainMapper, BaseChain
List<BaseTemplateEntity> templateList = baseTemplateService.list(templateQueryWrapper);
log.info("templateList size = {}", templateList.size());
if (CollUtil.isNotEmpty(templateList)) {
Map<BaseTemplateEntity, List<BaseNodeEntity>> templateAndNodeMap = new HashMap<>();
templateList.forEach(template -> {
String templateId = template.getId();
LambdaUpdateWrapper<BaseNodeEntity> nodeQueryWrapper = new LambdaUpdateWrapper<>();
@ -170,14 +184,18 @@ public class BaseChainServiceImpl extends ServiceImpl<BaseChainMapper, BaseChain
.eq(BaseNodeEntity::getEnableMark, EnableMarkEnum.Enable.getValue());
List<BaseNodeEntity> nodeList = baseNodeService.list(nodeQueryWrapper);
if (CollUtil.isNotEmpty(nodeList)) {
templateAndNodeMap.put(template, nodeList);
template.setBaseNodeEntityList(nodeList);
}
});
log.info("templateAndNodeMap size = {}", templateAndNodeMap.size());
this.generateOrUpdateChain(templateAndNodeMap);
List<BaseTemplateEntity> collect = templateList.stream().filter(template -> CollUtil.isNotEmpty(template.getBaseNodeEntityList())).collect(Collectors.toList());
log.info("collect size = {}", collect.size());
this.generateOrUpdateChain(collect);
}
}
/**
* 初始化主链路
*/
@Override
public void initMainChain() {
log.info("进入【初始化主链路】方法");
@ -212,6 +230,12 @@ public class BaseChainServiceImpl extends ServiceImpl<BaseChainMapper, BaseChain
}
}
/**
* 执行链路
*
* @param chainName 链路名称
* @return CommonResult
*/
@Override
public CommonResult executeChain(String chainName) {
List<BaseCenter> list = this.generateCostCenterTestData();
@ -228,6 +252,11 @@ public class BaseChainServiceImpl extends ServiceImpl<BaseChainMapper, BaseChain
return CommonResult.success(list);
}
/**
* 生成测试用数据
*
* @return List<BaseCenter>
*/
private List<BaseCenter> generateCostCenterTestData() {
List<BaseCenter> list = new ArrayList<>();
BaseCenter costCenter = new BaseCenter();
@ -265,6 +294,11 @@ public class BaseChainServiceImpl extends ServiceImpl<BaseChainMapper, BaseChain
return list;
}
/**
* 获取所有已注入的动态链路
*
* @return CommonResult
*/
@Override
public CommonResult getChainList() {
List<String> chainNameList = FlowBus.getChainMap().values().stream()

View File

@ -28,6 +28,13 @@ import java.util.stream.Collectors;
@Slf4j
@Service
public class BaseDataServiceImpl extends ServiceImpl<BaseDataMapper, BaseDataEntity> implements BaseDataService {
/**
* 根据类型和模板Id获取基础数据
*
* @param type 类型
* @param templateId 模板Id
* @return BaseDataEntity
*/
@Override
public BaseDataEntity getByTypeAndTemplateId(String type, String templateId) {
log.info("type = {}, templateId = {}", type, templateId);
@ -37,6 +44,12 @@ public class BaseDataServiceImpl extends ServiceImpl<BaseDataMapper, BaseDataEnt
return this.getOne(queryWrapper);
}
/**
* 创建基础数据
*
* @param createBaseDataFrom 创建参数
* @return CommonResult
*/
@Override
public CommonResult createBaseData(CreateBaseDataFrom createBaseDataFrom) {
log.info("进入【创建基础数据】方法 = {}", JSONUtil.toJsonStr(createBaseDataFrom));
@ -59,6 +72,12 @@ public class BaseDataServiceImpl extends ServiceImpl<BaseDataMapper, BaseDataEnt
return CommonResult.success("创建基础数据成功", baseDataEntity);
}
/**
* 批量创建基础数据
*
* @param createBaseDataFromList 创建参数集合
* @return CommonResult
*/
@Override
public CommonResult batchCreateBaseData(List<CreateBaseDataFrom> createBaseDataFromList) {
log.info("进入【批量创建基础数据】方法 = {}", JSONUtil.toJsonStr(createBaseDataFromList));

View File

@ -42,7 +42,12 @@ public class BaseNodeServiceImpl extends ServiceImpl<BaseNodeMapper, BaseNodeEnt
@Resource
private BaseTemplateService baseTemplateService;
/**
* 创建节点
*
* @param createNodeFrom 创建参数
* @return CommonResult
*/
@Override
public CommonResult createNode(CreateNodeFrom createNodeFrom) {
log.info("进入【创建节点】方法 = {}", JSONUtil.toJsonStr(createNodeFrom));
@ -96,6 +101,12 @@ public class BaseNodeServiceImpl extends ServiceImpl<BaseNodeMapper, BaseNodeEnt
return CommonResult.success("更新节点成功");
}
/**
* 根据动态节点中的Id获取节点
*
* @param nodeId 动态节点中的Id获取节点
* @return BaseNodeEntity
*/
@Override
public BaseNodeEntity getByNodeId(String nodeId) {
LambdaQueryWrapper<BaseNodeEntity> queryWrapper = new LambdaQueryWrapper<>();

View File

@ -26,6 +26,12 @@ import java.util.stream.Collectors;
@Slf4j
public class BaseTemplateServiceImpl extends ServiceImpl<BaseTemplateMapper, BaseTemplateEntity>
implements BaseTemplateService {
/**
* 创建爱你模板
*
* @param createTemplateFrom 创建参数
* @return CommonResult
*/
@Override
public CommonResult createTemplate(CreateTemplateFrom createTemplateFrom) {
log.info("进入【创建模板】方法 = {}", createTemplateFrom);
@ -49,11 +55,21 @@ public class BaseTemplateServiceImpl extends ServiceImpl<BaseTemplateMapper, Bas
return this.update(updateWrapper);
}
/**
* 获取所有未生成链路的模板
*
* @return List<BaseTemplateEntity>
*/
@Override
public List<BaseTemplateEntity> getNotExistsChain() {
return this.baseMapper.getNotExistsChain();
}
/**
* 获取所有模板
*
* @return CommonResult
*/
@Override
public CommonResult getTemplateList() {
List<BaseTemplateEntity> templateList = this.list();

View File

@ -15,13 +15,21 @@ import java.util.stream.Collectors;
* @date: 2022年12月08日 15:37
*/
public class RoleUtil {
/**
* 规则解析
*
* @param rule 规则
* @return Map<String, Object>
*/
public static Map<String, Object> parseRole(Rule rule) {
List<Match> matchList = rule.getMatches();
List<Rule> ruleChildren = rule.getChildren();
String logicOperators = rule.getLogicOperators();
if (CollUtil.isNotEmpty(ruleChildren)) {
// 存在子的情况
List<Map<String, Object>> collect = ruleChildren.stream().map(child -> {
List<Rule> sunList = child.getChildren();
// 存在子嵌套子的情况
if (CollUtil.isNotEmpty(sunList)) {
List<Map<String, Object>> sunCollect = sunList.stream().map(RoleUtil::parseRole).collect(Collectors.toList());
String childLogicOperators = child.getLogicOperators();
@ -49,10 +57,11 @@ public class RoleUtil {
childMap.put(logicOperators, collect);
return childMap;
} else if (CollUtil.isNotEmpty(matchList)) {
List<Map<String, Object>> list = matchList.stream().map(matche -> {
String conditionalOperators = matche.getConditionalOperators();
String matchingValue = matche.getMatchingValue();
String matchingContent = matche.getMatchingContent();
// 存在多条规则的情况
List<Map<String, Object>> list = matchList.stream().map(match -> {
String conditionalOperators = match.getConditionalOperators();
String matchingValue = match.getMatchingValue();
String matchingContent = match.getMatchingContent();
List<String> itemList = Lists.newArrayList(matchingValue, matchingContent);
Map<String, Object> itemMap = new HashMap<>();
itemMap.put(conditionalOperators, itemList);
@ -62,6 +71,7 @@ public class RoleUtil {
childMap.put(logicOperators, list);
return childMap;
} else {
// 只有一条规则的情况
String matchingValue = rule.getMatchingValue();
String matchingContent = rule.getMatchingContent();
String conditionalOperators = rule.getConditionalOperators();

View File

@ -6,7 +6,6 @@ import com.example.liteflow.mysql.enums.NodeEnum;
import com.example.liteflow.mysql.model.node.CreateNodeFrom;
import com.example.liteflow.mysql.model.rule.Match;
import com.example.liteflow.mysql.model.rule.Rule;
import com.example.liteflow.mysql.model.rule.RuleForm;
import org.assertj.core.util.Lists;
import org.junit.Test;
@ -248,10 +247,6 @@ public class MyTest {
rule.setChildren(children);
List<Rule> rules = Lists.newArrayList(rule);
RuleForm ruleForm = new RuleForm();
ruleForm.setRules(rules);
ruleForm.setRoleName("costCenter01Cmp");
// baseRoleService.createRole(roleForm);
// System.out.println(JSONUtil.toJsonStr(roles));
// List<? extends Map<String, ?>> collect = roles.stream().map(this::parseRole).collect(Collectors.toList());
// System.out.println(JSONUtil.toJsonStr(collect));
@ -298,10 +293,6 @@ public class MyTest {
rule2.setMatches(matches2);
List<Rule> rules = Lists.newArrayList(rule, rule2);
RuleForm ruleForm = new RuleForm();
ruleForm.setRules(rules);
ruleForm.setRoleName("costCenter02Cmp");
// baseRoleService.createRole(roleForm);
System.out.println(JSONUtil.toJsonStr(rules));
List<? extends Map<String, ?>> collect = rules.stream().map(this::parseRole).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(collect));
@ -359,10 +350,6 @@ public class MyTest {
rule2.setChildren(children2);
List<Rule> rules = Lists.newArrayList(rule, rule2);
RuleForm ruleForm = new RuleForm();
ruleForm.setRules(rules);
ruleForm.setRoleName("profitCenter01Cmp");
// baseRoleService.createRole(roleForm);
System.out.println(JSONUtil.toJsonStr(rules));
List<? extends Map<String, ?>> collect = rules.stream().map(this::parseRole).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(collect));
@ -414,10 +401,6 @@ public class MyTest {
rule2.setChildren(children2);
List<Rule> rules = Lists.newArrayList(rule, rule2);
RuleForm ruleForm = new RuleForm();
ruleForm.setRules(rules);
ruleForm.setRoleName("profitCenter02Cmp");
// baseRoleService.createRole(roleForm);
System.out.println(JSONUtil.toJsonStr(rules));
List<? extends Map<String, ?>> collect = rules.stream().map(this::parseRole).collect(Collectors.toList());
System.out.println(JSONUtil.toJsonStr(collect));