From 816a529c76dde4632bfd55022c89667b30561993 Mon Sep 17 00:00:00 2001 From: 3y Date: Tue, 7 Jun 2022 20:13:06 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=89=E9=92=89=E5=B7=A5=E4=BD=9C=E6=B6=88?= =?UTF-8?q?=E6=81=AF=20=E6=8E=A5=E5=85=A5=E5=90=84=E7=A7=8D=E7=9A=84?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java3y/austin/web/utils/ConvertMap.java | 74 +++++++++++++------ 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/austin-web/src/main/java/com/java3y/austin/web/utils/ConvertMap.java b/austin-web/src/main/java/com/java3y/austin/web/utils/ConvertMap.java index 15fb499..883027f 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/utils/ConvertMap.java +++ b/austin-web/src/main/java/com/java3y/austin/web/utils/ConvertMap.java @@ -6,62 +6,91 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; /** * for Amis!!! amis框架在【表单】回显的时候,不支持嵌套动态语法!! * 编写工具类将 List/Object 铺平成 Map * https://baidu.gitee.io/amis/zh-CN/components/form/index#%E8%A1%A8%E5%8D%95%E9%A1%B9%E6%95%B0%E6%8D%AE%E5%88%9D%E5%A7%8B%E5%8C%96 + * * @author 3y * @date 2022/1/23 */ public class ConvertMap { + /** + * 需要打散的字段(将json字符串打散为一个一个字段返回) + * (主要是用于回显数据) + */ + private static final List FLAT_FIELD_NAME = Arrays.asList("msgContent"); + + /** + * 需要格式化为jsonArray返回的字段 + * (前端是一个JSONArray传递进来) + */ + private static final List PARSE_JSON_ARRAY = Arrays.asList("feedCards", "btns"); + + /** + * 钉钉工作消息OA实际的映射 + */ + private static final List DING_DING_OA_FIELD = Arrays.asList("dingDingOaHead", "dingDingOaBody"); + /** + * 钉钉OA字段名实际的映射 + */ + private static final Map DING_DING_OA_NAME_MAPPING = new HashMap<>(); + static { + DING_DING_OA_NAME_MAPPING.put("bgcolor", "dingDingOaHeadBgColor"); + DING_DING_OA_NAME_MAPPING.put("text", "dingDingOaHeadTitle"); + DING_DING_OA_NAME_MAPPING.put("title", "dingDingOaTitle"); + DING_DING_OA_NAME_MAPPING.put("image", "media_id"); + DING_DING_OA_NAME_MAPPING.put("author", "dingDingOaAuthor"); + DING_DING_OA_NAME_MAPPING.put("content", "dingDingOaContent"); + } /** * 将List对象转换成Map(无嵌套) * * @param param - * @param fieldName 需要 reduce 的属性名 * @return */ - public static List> flatList(List param, List fieldName) { + public static List> flatList(List param) { List> result = new ArrayList<>(); for (T t : param) { - Map map = flatSingle(t, fieldName); + Map map = flatSingle(t); result.add(map); } return result; - } /** * 将单个对象转换成Map(无嵌套) - * + *

* 主要兼容amis的回显(前端不用amis可忽略) + * * @param obj - * @param fieldName 需要 reduce 的属性名 * @return */ - public static Map flatSingle(Object obj, List fieldName) { + public static Map flatSingle(Object obj) { Map result = MapUtil.newHashMap(32); Field[] fields = ReflectUtil.getFields(obj.getClass()); for (Field field : fields) { - - // msgContent需要打散 - if (fieldName.contains(field.getName())) { - JSONObject jsonObject; - Object value = ReflectUtil.getFieldValue(obj, field); - if (value instanceof String) { - jsonObject = JSON.parseObject((String) value); - } else { - jsonObject = JSONObject.parseObject(JSON.toJSONString(value)); - } + if (FLAT_FIELD_NAME.contains(field.getName())) { + String fieldValue = (String) ReflectUtil.getFieldValue(obj, field); + JSONObject jsonObject = JSONObject.parseObject(fieldValue); for (String key : jsonObject.keySet()) { - if (key.equals("feedCards") || key.equals("btns")) { + /** + * 钉钉OA消息回显 + */ + if (DING_DING_OA_FIELD.contains(key)) { + JSONObject object = jsonObject.getJSONObject(key); + for (String objKey : object.keySet()) { + result.put(DING_DING_OA_NAME_MAPPING.get(objKey), object.getString(objKey)); + } + } else if (PARSE_JSON_ARRAY.contains(key)) { + /** + * 部分字段是直接传入数组,把数组直接返回(也是用于回显) + */ result.put(key, JSON.parseArray(jsonObject.getString(key))); - } else { + } else{ result.put(key, jsonObject.getString(key)); } } @@ -69,6 +98,5 @@ public class ConvertMap { result.put(field.getName(), ReflectUtil.getFieldValue(obj, field)); } return result; - } }