回写数据时支持配置层级数据
parent
a78f69bead
commit
fcd819131c
|
@ -1,6 +1,12 @@
|
||||||
package weaver.xiao.commons.config.service;
|
package weaver.xiao.commons.config.service;
|
||||||
|
|
||||||
|
import aiyh.utils.excention.CustomerException;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.JavaType;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.type.TypeFactory;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
@ -57,7 +63,7 @@ public class DealWithMapping extends ToolUtil {
|
||||||
private List<String> fileNames = new ArrayList<>();
|
private List<String> fileNames = new ArrayList<>();
|
||||||
private List<InputStream> fileInputStreams = new ArrayList<>();
|
private List<InputStream> fileInputStreams = new ArrayList<>();
|
||||||
private List<MultipartFile> multipartFileList = new ArrayList<>();
|
private List<MultipartFile> multipartFileList = new ArrayList<>();
|
||||||
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
||||||
private RecordSet tempRs;
|
private RecordSet tempRs;
|
||||||
|
|
||||||
private DealWithMapper mapper = null;
|
private DealWithMapper mapper = null;
|
||||||
|
@ -1451,7 +1457,10 @@ public class DealWithMapping extends ToolUtil {
|
||||||
List<ResponseMapping> detailResponseList = new ArrayList<>();
|
List<ResponseMapping> detailResponseList = new ArrayList<>();
|
||||||
for (ResponseMapping responseMapping : responseMappingList) {
|
for (ResponseMapping responseMapping : responseMappingList) {
|
||||||
if (responseMapping.getMainOrDetail() == 0) {
|
if (responseMapping.getMainOrDetail() == 0) {
|
||||||
String resVal = Util.null2String(requestRes.get(responseMapping.getResponseFieldName()));
|
// 解析层级数据
|
||||||
|
String fieldName = responseMapping.getResponseFieldName();
|
||||||
|
Object result = parseCommon(requestRes, fieldName, Object.class);
|
||||||
|
String resVal = Util.null2String(result);
|
||||||
mainUpdateMap.put(responseMapping.getWorkflowFieldName(), resVal);
|
mainUpdateMap.put(responseMapping.getWorkflowFieldName(), resVal);
|
||||||
} else {
|
} else {
|
||||||
detailResponseList.add(responseMapping);
|
detailResponseList.add(responseMapping);
|
||||||
|
@ -1476,6 +1485,100 @@ public class DealWithMapping extends ToolUtil {
|
||||||
return tableUpdateMap;
|
return tableUpdateMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <h1>解析普通值</h1>
|
||||||
|
* @author xuanran.wang
|
||||||
|
* @dateTime 2023/7/7 17:18
|
||||||
|
* @param map 响应map
|
||||||
|
* @param dataKey 值路径
|
||||||
|
* @param clazz 值类型
|
||||||
|
* @return 普通值
|
||||||
|
**/
|
||||||
|
public <T> T parseCommon(Map<String, Object> map, String dataKey, Class<T> clazz) {
|
||||||
|
if (MapUtils.isEmpty(map)) {
|
||||||
|
throw new CustomerException("map can not be null!");
|
||||||
|
}
|
||||||
|
Object object = getDataObject(map, dataKey);
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
return objectMapper.convertValue(object, clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <h1>解析对象</h1>
|
||||||
|
* @author xuanran.wang
|
||||||
|
* @dateTime 2023/7/7 17:18
|
||||||
|
* @param map 响应map
|
||||||
|
* @param dataKey 值路径
|
||||||
|
* @param clazz 值类型
|
||||||
|
* @return 对象
|
||||||
|
**/
|
||||||
|
public <T> T parseObj(Map<String, Object> map, String dataKey, Class<?> clazz) {
|
||||||
|
if (MapUtils.isEmpty(map)) {
|
||||||
|
throw new CustomerException("map can not be null!");
|
||||||
|
}
|
||||||
|
Object dataObject = getDataObject(map, dataKey);
|
||||||
|
if (Objects.isNull(dataObject)) {
|
||||||
|
throw new CustomerException("parse object error!");
|
||||||
|
}
|
||||||
|
if (dataObject instanceof Map) {
|
||||||
|
return (T) JSONObject.parseObject(JSONObject.toJSONString(dataObject), clazz);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <h1>解析集合</h1>
|
||||||
|
* @author xuanran.wang
|
||||||
|
* @dateTime 2023/7/7 17:18
|
||||||
|
* @param map 响应map
|
||||||
|
* @param dataKey 值路径
|
||||||
|
* @param clazz 值类型
|
||||||
|
* @return 集合
|
||||||
|
**/
|
||||||
|
public <T> List<T> parseList(Map<String, Object> map, String dataKey, Class<?> clazz) {
|
||||||
|
if (MapUtils.isEmpty(map)) {
|
||||||
|
throw new CustomerException("map can not be null!");
|
||||||
|
}
|
||||||
|
Object dataObject = getDataObject(map, dataKey);
|
||||||
|
if (Objects.isNull(dataObject)) {
|
||||||
|
throw new CustomerException("parse object error!");
|
||||||
|
}
|
||||||
|
if (dataObject instanceof List) {
|
||||||
|
JavaType listType = TypeFactory.defaultInstance().constructParametricType(List.class, clazz);
|
||||||
|
try {
|
||||||
|
String jsonString = objectMapper.writeValueAsString(dataObject);
|
||||||
|
return objectMapper.readValue(jsonString, listType);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new CustomerException("JSON processing error!", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <h1>按照值路径解析对象</h1>
|
||||||
|
* @author xuanran.wang
|
||||||
|
* @dateTime 2023/7/7 17:19
|
||||||
|
* @param map 响应map
|
||||||
|
* @param dataKey 值路径
|
||||||
|
* @return 解析对象
|
||||||
|
**/
|
||||||
|
private Object getDataObject(Map<String, Object> map, String dataKey) {
|
||||||
|
if(StringUtils.isBlank(dataKey) || dataKey.split("\\.").length == 0){
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
Object dataObject = map;
|
||||||
|
String[] keys = dataKey.split("\\.");
|
||||||
|
for (String key : keys) {
|
||||||
|
if (dataObject instanceof Map) {
|
||||||
|
dataObject = ((Map<?, ?>) dataObject).get(key);
|
||||||
|
} else {
|
||||||
|
return dataObject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dataObject;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自定义时间格式化
|
* 自定义时间格式化
|
||||||
*
|
*
|
||||||
|
|
|
@ -3,6 +3,7 @@ package xuanran.wang;
|
||||||
import aiyh.utils.GenerateFileUtil;
|
import aiyh.utils.GenerateFileUtil;
|
||||||
import basetest.BaseTest;
|
import basetest.BaseTest;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import weaver.xuanran.wang.ajx.work_flow_split.action.ChildWorkFlowSplitAction;
|
||||||
import weaver.xuanran.wang.eighty_five_degreec.sap.action.WorkflowToSap;
|
import weaver.xuanran.wang.eighty_five_degreec.sap.action.WorkflowToSap;
|
||||||
import weaver.xuanran.wang.immc.WorkFlowToVmsAndMQ;
|
import weaver.xuanran.wang.immc.WorkFlowToVmsAndMQ;
|
||||||
|
|
||||||
|
@ -17,6 +18,6 @@ public class NormalTest extends BaseTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWord(){
|
public void testWord(){
|
||||||
GenerateFileUtil.createActionDocument(WorkFlowToVmsAndMQ.class);
|
GenerateFileUtil.createActionDocument(ChildWorkFlowSplitAction.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,17 +4,19 @@ import aiyh.utils.Util;
|
||||||
import aiyh.utils.excention.CustomerException;
|
import aiyh.utils.excention.CustomerException;
|
||||||
import basetest.BaseTest;
|
import basetest.BaseTest;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.JavaType;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.fasterxml.jackson.databind.type.TypeFactory;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.apache.commons.collections.MapUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import weaver.bokang.xiao.common.mapper.WorkflowMapper;
|
import weaver.bokang.xiao.common.mapper.WorkflowMapper;
|
||||||
import weaver.xuanran.wang.ajx.work_flow_split.mapper.ChildWorkFlowSplitMapper;
|
import weaver.xuanran.wang.ajx.work_flow_split.mapper.ChildWorkFlowSplitMapper;
|
||||||
import weaver.xuanran.wang.common.mapper.CommonMapper;
|
import weaver.xuanran.wang.common.mapper.CommonMapper;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -27,6 +29,7 @@ public class TestA extends BaseTest {
|
||||||
|
|
||||||
private final CommonMapper workflowMapper = Util.getMapper(CommonMapper.class);
|
private final CommonMapper workflowMapper = Util.getMapper(CommonMapper.class);
|
||||||
private final ChildWorkFlowSplitMapper mapper = Util.getMapper(ChildWorkFlowSplitMapper.class);
|
private final ChildWorkFlowSplitMapper mapper = Util.getMapper(ChildWorkFlowSplitMapper.class);
|
||||||
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
|
||||||
private String insertAccountNumberField = "";
|
private String insertAccountNumberField = "";
|
||||||
|
|
||||||
|
@ -82,4 +85,122 @@ public class TestA extends BaseTest {
|
||||||
throw new CustomerException("批量插入明细数据失败!");
|
throw new CustomerException("批量插入明细数据失败!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testB(){
|
||||||
|
String json = "{\n" +
|
||||||
|
" \"code\": 200,\n" +
|
||||||
|
" \"msg\": \"接口返回成功\",\n" +
|
||||||
|
" \"status\": true,\n" +
|
||||||
|
" \"data\": {\n" +
|
||||||
|
" \"singleTenant\": \"false\",\n" +
|
||||||
|
" \"urlTitle\": 100,\n" +
|
||||||
|
" \"changeTenant\": \"true\",\n" +
|
||||||
|
" \"realUri\": \"http://www.e-cology.com.cn/papi/app/baseserver/info/getUrlInfo?service=https%3A%2F%2Fwww.e-cology.com.cn%2Fblog%2Ftheirblogs%3FcusMenuId%3D5115968866800923639%26urlPageTitle%3D5LuW5Lq65pel5oql\",\n" +
|
||||||
|
" \"onlineDomianUrl\": \"https://online.e-cology.com.cn\",\n" +
|
||||||
|
" \"weappUrl\": \"https://www.e-cology.com.cn\",\n" +
|
||||||
|
" \"passportUrl\": \"https://www.e-cology.com.cn\",\n" +
|
||||||
|
" \"deployEnv\": \"private\",\n" +
|
||||||
|
" \"createTenant\": \"false\"\n" +
|
||||||
|
" },\n" +
|
||||||
|
" \"fail\": false\n" +
|
||||||
|
"}";
|
||||||
|
Map map = JSONObject.parseObject(json, Map.class);
|
||||||
|
Object o = parseCommon(map, "data.urlTitle", Object.class);
|
||||||
|
System.out.println(Util.null2String(o));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <h1>解析普通值</h1>
|
||||||
|
* @author xuanran.wang
|
||||||
|
* @dateTime 2023/7/7 17:18
|
||||||
|
* @param map 响应map
|
||||||
|
* @param dataKey 值路径
|
||||||
|
* @param clazz 值类型
|
||||||
|
* @return 普通值
|
||||||
|
**/
|
||||||
|
public <T> T parseCommon(Map<String, Object> map, String dataKey, Class<T> clazz) {
|
||||||
|
if (MapUtils.isEmpty(map)) {
|
||||||
|
throw new CustomerException("map can not be null!");
|
||||||
|
}
|
||||||
|
Object object = getDataObject(map, dataKey);
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
return objectMapper.convertValue(object, clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <h1>解析对象</h1>
|
||||||
|
* @author xuanran.wang
|
||||||
|
* @dateTime 2023/7/7 17:18
|
||||||
|
* @param map 响应map
|
||||||
|
* @param dataKey 值路径
|
||||||
|
* @param clazz 值类型
|
||||||
|
* @return 对象
|
||||||
|
**/
|
||||||
|
public <T> T parseObj(Map<String, Object> map, String dataKey, Class<?> clazz) {
|
||||||
|
if (MapUtils.isEmpty(map)) {
|
||||||
|
throw new CustomerException("map can not be null!");
|
||||||
|
}
|
||||||
|
Object dataObject = getDataObject(map, dataKey);
|
||||||
|
if (Objects.isNull(dataObject)) {
|
||||||
|
throw new CustomerException("parse object error!");
|
||||||
|
}
|
||||||
|
if (dataObject instanceof Map) {
|
||||||
|
return (T) JSONObject.parseObject(JSONObject.toJSONString(dataObject), clazz);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <h1>解析集合</h1>
|
||||||
|
* @author xuanran.wang
|
||||||
|
* @dateTime 2023/7/7 17:18
|
||||||
|
* @param map 响应map
|
||||||
|
* @param dataKey 值路径
|
||||||
|
* @param clazz 值类型
|
||||||
|
* @return 集合
|
||||||
|
**/
|
||||||
|
public <T> List<T> parseList(Map<String, Object> map, String dataKey, Class<?> clazz) {
|
||||||
|
if (MapUtils.isEmpty(map)) {
|
||||||
|
throw new CustomerException("map can not be null!");
|
||||||
|
}
|
||||||
|
Object dataObject = getDataObject(map, dataKey);
|
||||||
|
if (Objects.isNull(dataObject)) {
|
||||||
|
throw new CustomerException("parse object error!");
|
||||||
|
}
|
||||||
|
if (dataObject instanceof List) {
|
||||||
|
JavaType listType = TypeFactory.defaultInstance().constructParametricType(List.class, clazz);
|
||||||
|
try {
|
||||||
|
String jsonString = objectMapper.writeValueAsString(dataObject);
|
||||||
|
return objectMapper.readValue(jsonString, listType);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new CustomerException("JSON processing error!", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <h1>按照值路径解析对象</h1>
|
||||||
|
* @author xuanran.wang
|
||||||
|
* @dateTime 2023/7/7 17:19
|
||||||
|
* @param map 响应map
|
||||||
|
* @param dataKey 值路径
|
||||||
|
* @return 解析对象
|
||||||
|
**/
|
||||||
|
private Object getDataObject(Map<String, Object> map, String dataKey) {
|
||||||
|
if(StringUtils.isBlank(dataKey) || dataKey.split("\\.").length == 0){
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
Object dataObject = map;
|
||||||
|
String[] keys = dataKey.split("\\.");
|
||||||
|
for (String key : keys) {
|
||||||
|
if (dataObject instanceof Map) {
|
||||||
|
dataObject = ((Map<?, ?>) dataObject).get(key);
|
||||||
|
} else {
|
||||||
|
return dataObject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dataObject;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue