1.新增解析方法
This commit is contained in:
parent
04cdddede9
commit
ed9b7789b8
4
pom.xml
4
pom.xml
|
@ -31,6 +31,10 @@
|
||||||
<artifactId>spring-boot-starter-test</artifactId>
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
|
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package com.example.liteflow.mysql.controller;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.example.liteflow.mysql.model.role.Role;
|
||||||
|
import com.example.liteflow.mysql.model.role.RoleForm;
|
||||||
|
import com.example.liteflow.mysql.util.RoleUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: 陈韦龙
|
||||||
|
* @date: 2022年12月07日 10:36
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/submitRole")
|
||||||
|
public class SubmitRoleController {
|
||||||
|
@PostMapping
|
||||||
|
public void orderTicket(@RequestBody RoleForm roleForm) {
|
||||||
|
List<Role> roles = roleForm.getRoles();
|
||||||
|
List<Map<String, Object>> collect = roles.stream().map(RoleUtil::parseRole).collect(Collectors.toList());
|
||||||
|
System.out.println(JSONUtil.toJsonStr(collect));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.example.liteflow.mysql.model.role;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: 陈韦龙
|
||||||
|
* @date: 2022年12月07日 17:55
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class Match {
|
||||||
|
// 条件运算符:"$eq"
|
||||||
|
private String conditionalOperators;
|
||||||
|
// 匹配值
|
||||||
|
private String matchingValue;
|
||||||
|
// 匹配内容
|
||||||
|
private String matchingContent;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.example.liteflow.mysql.model.role;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: 陈韦龙
|
||||||
|
* @date: 2022年12月07日 16:04
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class Role {
|
||||||
|
// 逻辑运算符"$or"
|
||||||
|
private String logicOperators;
|
||||||
|
// 条件运算符:"$eq"
|
||||||
|
private String conditionalOperators;
|
||||||
|
// 匹配值
|
||||||
|
private String matchingValue;
|
||||||
|
// 匹配内容
|
||||||
|
private String matchingContent;
|
||||||
|
private List<Role> children;
|
||||||
|
private List<Match> matches;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.example.liteflow.mysql.model.role;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: 陈韦龙
|
||||||
|
* @date: 2022年12月07日 10:41
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RoleForm {
|
||||||
|
private List<Role> roles;
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
package com.example.liteflow.mysql.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import com.example.liteflow.mysql.model.role.Match;
|
||||||
|
import com.example.liteflow.mysql.model.role.Role;
|
||||||
|
import org.assertj.core.util.Lists;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: 陈韦龙
|
||||||
|
* @date: 2022年12月08日 15:37
|
||||||
|
*/
|
||||||
|
public class RoleUtil {
|
||||||
|
public static Map<String, Object> parseRole(Role role) {
|
||||||
|
List<Match> matchList = role.getMatches();
|
||||||
|
List<Role> roleChildren = role.getChildren();
|
||||||
|
String logicOperators = role.getLogicOperators();
|
||||||
|
if (CollUtil.isNotEmpty(roleChildren)) {
|
||||||
|
List<Map<String,Object>> collect = roleChildren.stream().map(child -> {
|
||||||
|
List<Role> sunList = child.getChildren();
|
||||||
|
if (CollUtil.isNotEmpty(sunList)) {
|
||||||
|
List<Map<String, Object>> sunCollect = sunList.stream().map(RoleUtil::parseRole).collect(Collectors.toList());
|
||||||
|
String childLogicOperators = child.getLogicOperators();
|
||||||
|
Map<String, Object> itemMap = new HashMap<>();
|
||||||
|
itemMap.put(childLogicOperators, sunCollect);
|
||||||
|
return itemMap;
|
||||||
|
} else {
|
||||||
|
List<Match> childMatches = child.getMatches();
|
||||||
|
String childLogicOperators = child.getLogicOperators();
|
||||||
|
List<Map<String, List<String>>> list = childMatches.stream().map(item -> {
|
||||||
|
String conditionalOperators = item.getConditionalOperators();
|
||||||
|
String matchingValue = item.getMatchingValue();
|
||||||
|
String matchingContent = item.getMatchingContent();
|
||||||
|
List<String> itemList = Lists.newArrayList(matchingValue, matchingContent);
|
||||||
|
Map<String, List<String>> itemMap = new HashMap<>();
|
||||||
|
itemMap.put(conditionalOperators, itemList);
|
||||||
|
return itemMap;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
Map<String, Object> childMap = new HashMap<>();
|
||||||
|
childMap.put(childLogicOperators, list);
|
||||||
|
return childMap;
|
||||||
|
}
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
Map<String, Object> childMap = new HashMap<>();
|
||||||
|
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<String> itemList = Lists.newArrayList(matchingValue, matchingContent);
|
||||||
|
Map<String, Object> itemMap = new HashMap<>();
|
||||||
|
itemMap.put(conditionalOperators, itemList);
|
||||||
|
return itemMap;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
Map<String, Object> childMap = new HashMap<>();
|
||||||
|
childMap.put(logicOperators, list);
|
||||||
|
return childMap;
|
||||||
|
} else {
|
||||||
|
String matchingValue = role.getMatchingValue();
|
||||||
|
String matchingContent = role.getMatchingContent();
|
||||||
|
String conditionalOperators = role.getConditionalOperators();
|
||||||
|
List<String> itemList = Lists.newArrayList(matchingValue, matchingContent);
|
||||||
|
Map<String, Object> itemMap = new HashMap<>();
|
||||||
|
itemMap.put(conditionalOperators, itemList);
|
||||||
|
List<Map<String, Object>> list = Lists.newArrayList(itemMap);
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
map.put(logicOperators, list);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,267 @@
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.example.liteflow.mysql.enums.MathOperatorEnum;
|
||||||
|
import com.example.liteflow.mysql.model.role.Match;
|
||||||
|
import com.example.liteflow.mysql.model.role.Role;
|
||||||
|
import com.example.liteflow.mysql.model.role.RoleForm;
|
||||||
|
import org.assertj.core.util.Lists;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author: 陈韦龙
|
||||||
|
* @date: 2022年12月07日 16:26
|
||||||
|
*/
|
||||||
|
public class MyTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test01() {
|
||||||
|
List<Role> roles = new ArrayList<>();
|
||||||
|
Role role = new Role();
|
||||||
|
role.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
List<Role> children = new ArrayList<>();
|
||||||
|
Role childRole = new Role();
|
||||||
|
childRole.setLogicOperators(MathOperatorEnum.and.getOperator());
|
||||||
|
|
||||||
|
List<Match> matches = new ArrayList<>();
|
||||||
|
Match match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("1");
|
||||||
|
match.setMatchingContent("1");
|
||||||
|
matches.add(match);
|
||||||
|
match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("2");
|
||||||
|
match.setMatchingContent("1");
|
||||||
|
matches.add(match);
|
||||||
|
|
||||||
|
childRole.setMatches(matches);
|
||||||
|
children.add(childRole);
|
||||||
|
role.setChildren(children);
|
||||||
|
roles.add(role);
|
||||||
|
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));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test02() {
|
||||||
|
List<Role> roles = new ArrayList<>();
|
||||||
|
Role role = new Role();
|
||||||
|
role.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
Role child = new Role();
|
||||||
|
child.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
Role sun = new Role();
|
||||||
|
sun.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
|
||||||
|
List<Role> sunList = new ArrayList<>();
|
||||||
|
|
||||||
|
List<Match> matches = new ArrayList<>();
|
||||||
|
Match match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("1");
|
||||||
|
match.setMatchingContent("1");
|
||||||
|
matches.add(match);
|
||||||
|
match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("2");
|
||||||
|
match.setMatchingContent("1");
|
||||||
|
matches.add(match);
|
||||||
|
|
||||||
|
sun.setMatches(matches);
|
||||||
|
sunList.add(sun);
|
||||||
|
child.setChildren(sunList);
|
||||||
|
|
||||||
|
List<Role> children = Lists.newArrayList(child);
|
||||||
|
role.setChildren(children);
|
||||||
|
roles.add(role);
|
||||||
|
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));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test3() {
|
||||||
|
|
||||||
|
Role role = new Role();
|
||||||
|
role.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
List<Match> matches = new ArrayList<>();
|
||||||
|
Match match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("1");
|
||||||
|
match.setMatchingContent("1");
|
||||||
|
matches.add(match);
|
||||||
|
|
||||||
|
role.setMatches(matches);
|
||||||
|
List<Role> roles = Lists.newArrayList(role);
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test4() {
|
||||||
|
Role role = new Role();
|
||||||
|
role.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
List<Match> matches = new ArrayList<>();
|
||||||
|
Match match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("1");
|
||||||
|
match.setMatchingContent("1");
|
||||||
|
matches.add(match);
|
||||||
|
|
||||||
|
match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("2");
|
||||||
|
match.setMatchingContent("2");
|
||||||
|
matches.add(match);
|
||||||
|
|
||||||
|
role.setMatches(matches);
|
||||||
|
List<Role> roles = Lists.newArrayList(role);
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test5() {
|
||||||
|
Role role = new Role();
|
||||||
|
role.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
role.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
role.setMatchingValue("1");
|
||||||
|
role.setMatchingContent("1");
|
||||||
|
|
||||||
|
List<Role> roles = Lists.newArrayList(role);
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test6() {
|
||||||
|
Role role = new Role();
|
||||||
|
role.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
Role child = new Role();
|
||||||
|
child.setLogicOperators(MathOperatorEnum.and.getOperator());
|
||||||
|
List<Match> matches = new ArrayList<>();
|
||||||
|
Match match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("1");
|
||||||
|
match.setMatchingContent("1");
|
||||||
|
matches.add(match);
|
||||||
|
|
||||||
|
match = new Match();
|
||||||
|
match.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match.setMatchingValue("2");
|
||||||
|
match.setMatchingContent("2");
|
||||||
|
matches.add(match);
|
||||||
|
|
||||||
|
child.setMatches(matches);
|
||||||
|
List<Role> children = Lists.newArrayList(child);
|
||||||
|
role.setChildren(children);
|
||||||
|
|
||||||
|
Role role2 = new Role();
|
||||||
|
role2.setLogicOperators(MathOperatorEnum.or.getOperator());
|
||||||
|
|
||||||
|
Role child2 = new Role();
|
||||||
|
child2.setLogicOperators(MathOperatorEnum.and.getOperator());
|
||||||
|
List<Match> matches2 = new ArrayList<>();
|
||||||
|
Match match2 = new Match();
|
||||||
|
match2.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match2.setMatchingValue("3");
|
||||||
|
match2.setMatchingContent("3");
|
||||||
|
matches2.add(match2);
|
||||||
|
|
||||||
|
match2 = new Match();
|
||||||
|
match2.setConditionalOperators(MathOperatorEnum.eq.getOperator());
|
||||||
|
match2.setMatchingValue("4");
|
||||||
|
match2.setMatchingContent("4");
|
||||||
|
matches2.add(match2);
|
||||||
|
|
||||||
|
child2.setMatches(matches2);
|
||||||
|
List<Role> children2 = Lists.newArrayList(child2);
|
||||||
|
role2.setChildren(children2);
|
||||||
|
|
||||||
|
List<Role> roles = Lists.newArrayList(role, role2);
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
private Map<String, Object> parseRole(Role role) {
|
||||||
|
List<Match> matchList = role.getMatches();
|
||||||
|
List<Role> roleChildren = role.getChildren();
|
||||||
|
String logicOperators = role.getLogicOperators();
|
||||||
|
if (CollUtil.isNotEmpty(roleChildren)) {
|
||||||
|
List<Map<String,Object>> collect = roleChildren.stream().map(child -> {
|
||||||
|
List<Role> sunList = child.getChildren();
|
||||||
|
if (CollUtil.isNotEmpty(sunList)) {
|
||||||
|
List<Map<String, Object>> sunCollect = sunList.stream().map(this::parseRole).collect(Collectors.toList());
|
||||||
|
String childLogicOperators = child.getLogicOperators();
|
||||||
|
Map<String, Object> itemMap = new HashMap<>();
|
||||||
|
itemMap.put(childLogicOperators, sunCollect);
|
||||||
|
return itemMap;
|
||||||
|
} else {
|
||||||
|
List<Match> childMatches = child.getMatches();
|
||||||
|
String childLogicOperators = child.getLogicOperators();
|
||||||
|
List<Map<String, List<String>>> list = childMatches.stream().map(item -> {
|
||||||
|
String conditionalOperators = item.getConditionalOperators();
|
||||||
|
String matchingValue = item.getMatchingValue();
|
||||||
|
String matchingContent = item.getMatchingContent();
|
||||||
|
List<String> itemList = Lists.newArrayList(matchingValue, matchingContent);
|
||||||
|
Map<String, List<String>> itemMap = new HashMap<>();
|
||||||
|
itemMap.put(conditionalOperators, itemList);
|
||||||
|
return itemMap;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
Map<String, Object> childMap = new HashMap<>();
|
||||||
|
childMap.put(childLogicOperators, list);
|
||||||
|
return childMap;
|
||||||
|
}
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
Map<String, Object> childMap = new HashMap<>();
|
||||||
|
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<String> itemList = Lists.newArrayList(matchingValue, matchingContent);
|
||||||
|
Map<String, Object> itemMap = new HashMap<>();
|
||||||
|
itemMap.put(conditionalOperators, itemList);
|
||||||
|
return itemMap;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
Map<String, Object> childMap = new HashMap<>();
|
||||||
|
childMap.put(logicOperators, list);
|
||||||
|
return childMap;
|
||||||
|
} else {
|
||||||
|
String matchingValue = role.getMatchingValue();
|
||||||
|
String matchingContent = role.getMatchingContent();
|
||||||
|
String conditionalOperators = role.getConditionalOperators();
|
||||||
|
List<String> itemList = Lists.newArrayList(matchingValue, matchingContent);
|
||||||
|
Map<String, Object> itemMap = new HashMap<>();
|
||||||
|
itemMap.put(conditionalOperators, itemList);
|
||||||
|
List<Map<String, Object>> list = Lists.newArrayList(itemMap);
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
map.put(logicOperators, list);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue