Search in sources :

Example 1 with Dict

use of org.jeecg.common.aspect.annotation.Dict in project jeecg-boot by jeecgboot.

the class DictAspect method parseDictText.

/**
 * 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入
 * 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 ,table字典 code table text配合使用与原来jeecg的用法相同
 * 示例为SysUser   字段为sex 添加了注解@Dict(dicCode = "sex") 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端
 * 例输入当前返回值的就会多出一个sex_dictText字段
 * {
 *      sex:1,
 *      sex_dictText:"男"
 * }
 * 前端直接取值sext_dictText在table里面无需再进行前端的字典转换了
 *  customRender:function (text) {
 *               if(text==1){
 *                 return "男";
 *               }else if(text==2){
 *                 return "女";
 *               }else{
 *                 return text;
 *               }
 *             }
 *             目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用
 * @param result
 */
private void parseDictText(Object result) {
    if (result instanceof Result) {
        if (((Result) result).getResult() instanceof IPage) {
            List<JSONObject> items = new ArrayList<>();
            // step.1 筛选出加了 Dict 注解的字段列表
            List<Field> dictFieldList = new ArrayList<>();
            // 字典数据列表, key = 字典code,value=数据列表
            Map<String, List<String>> dataListMap = new HashMap<>();
            for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) {
                ObjectMapper mapper = new ObjectMapper();
                String json = "{}";
                try {
                    // 解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
                    json = mapper.writeValueAsString(record);
                } catch (JsonProcessingException e) {
                    log.error("json解析失败" + e.getMessage(), e);
                }
                // update-begin--Author:scott -- Date:20211223 ----for:【issues/3303】restcontroller返回json数据后key顺序错乱 -----
                JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
                // 遍历所有字段,把字典Code取出来,放到 map 里
                for (Field field : oConvertUtils.getAllFields(record)) {
                    String value = item.getString(field.getName());
                    if (oConvertUtils.isEmpty(value)) {
                        continue;
                    }
                    // update-end--Author:scott  -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
                    if (field.getAnnotation(Dict.class) != null) {
                        if (!dictFieldList.contains(field)) {
                            dictFieldList.add(field);
                        }
                        String code = field.getAnnotation(Dict.class).dicCode();
                        String text = field.getAnnotation(Dict.class).dicText();
                        String table = field.getAnnotation(Dict.class).dictTable();
                        List<String> dataList;
                        String dictCode = code;
                        if (!StringUtils.isEmpty(table)) {
                            dictCode = String.format("%s,%s,%s", table, text, code);
                        }
                        dataList = dataListMap.computeIfAbsent(dictCode, k -> new ArrayList<>());
                        this.listAddAllDeduplicate(dataList, Arrays.asList(value.split(",")));
                    }
                    // date类型默认转换string格式化日期
                    if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
                        SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
                    }
                }
                items.add(item);
            }
            // step.2 调用翻译方法,一次性翻译
            Map<String, List<DictModel>> translText = this.translateAllDict(dataListMap);
            // step.3 将翻译结果填充到返回结果里
            for (JSONObject record : items) {
                for (Field field : dictFieldList) {
                    String code = field.getAnnotation(Dict.class).dicCode();
                    String text = field.getAnnotation(Dict.class).dicText();
                    String table = field.getAnnotation(Dict.class).dictTable();
                    String fieldDictCode = code;
                    if (!StringUtils.isEmpty(table)) {
                        fieldDictCode = String.format("%s,%s,%s", table, text, code);
                    }
                    String value = record.getString(field.getName());
                    if (oConvertUtils.isNotEmpty(value)) {
                        List<DictModel> dictModels = translText.get(fieldDictCode);
                        if (dictModels == null || dictModels.size() == 0) {
                            continue;
                        }
                        String textValue = this.translDictText(dictModels, value);
                        log.debug(" 字典Val : " + textValue);
                        log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue);
                        // TODO-sun 测试输出,待删
                        log.debug(" ---- dictCode: " + fieldDictCode);
                        log.debug(" ---- value: " + value);
                        log.debug(" ----- text: " + textValue);
                        log.debug(" ---- dictModels: " + JSON.toJSONString(dictModels));
                        record.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                    }
                }
            }
            ((IPage) ((Result) result).getResult()).setRecords(items);
        }
    }
}
Also used : java.util(java.util) CommonAPI(org.jeecg.common.api.CommonAPI) DictModel(org.jeecg.common.system.vo.DictModel) Autowired(org.springframework.beans.factory.annotation.Autowired) SimpleDateFormat(java.text.SimpleDateFormat) Dict(org.jeecg.common.aspect.annotation.Dict) Aspect(org.aspectj.lang.annotation.Aspect) org.jeecg.common.util.oConvertUtils(org.jeecg.common.util.oConvertUtils) RedisTemplate(org.springframework.data.redis.core.RedisTemplate) Result(org.jeecg.common.api.vo.Result) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) JsonFormat(com.fasterxml.jackson.annotation.JsonFormat) Pointcut(org.aspectj.lang.annotation.Pointcut) Field(java.lang.reflect.Field) Collectors(java.util.stream.Collectors) Around(org.aspectj.lang.annotation.Around) TimeUnit(java.util.concurrent.TimeUnit) Slf4j(lombok.extern.slf4j.Slf4j) Component(org.springframework.stereotype.Component) JSON(com.alibaba.fastjson.JSON) JSONObject(com.alibaba.fastjson.JSONObject) Lazy(org.springframework.context.annotation.Lazy) CommonConstant(org.jeecg.common.constant.CommonConstant) IPage(com.baomidou.mybatisplus.core.metadata.IPage) ProceedingJoinPoint(org.aspectj.lang.ProceedingJoinPoint) Feature(com.alibaba.fastjson.parser.Feature) StringUtils(org.springframework.util.StringUtils) DictModel(org.jeecg.common.system.vo.DictModel) Result(org.jeecg.common.api.vo.Result) Field(java.lang.reflect.Field) IPage(com.baomidou.mybatisplus.core.metadata.IPage) JsonFormat(com.fasterxml.jackson.annotation.JsonFormat) JSONObject(com.alibaba.fastjson.JSONObject) Dict(org.jeecg.common.aspect.annotation.Dict) JSONObject(com.alibaba.fastjson.JSONObject) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) SimpleDateFormat(java.text.SimpleDateFormat) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 2 with Dict

use of org.jeecg.common.aspect.annotation.Dict in project kms by mahonelau.

the class DictUtils method parseDictText.

/**
 * 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入
 * 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 ,table字典 code table text配合使用与原来jeecg的用法相同
 * 示例为SysUser   字段为sex 添加了注解@Dict(dicCode = "sex") 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端
 * 例输入当前返回值的就会多出一个sex_dictText字段
 * {
 *      sex:1,
 *      sex_dictText:"男"
 * }
 * 前端直接取值sext_dictText在table里面无需再进行前端的字典转换了
 *  customRender:function (text) {
 *               if(text==1){
 *                 return "男";
 *               }else if(text==2){
 *                 return "女";
 *               }else{
 *                 return text;
 *               }
 *             }
 *             目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用
 * @param result
 */
public void parseDictText(Object result) {
    if (result instanceof Result) {
        if (((Result) result).getResult() instanceof IPage) {
            List<JSONObject> items = new ArrayList<>();
            for (Object record : ((KmSearchResultObjVO) ((Result) result).getResult()).getKmSearchResultVOPage().getRecords()) {
                ObjectMapper mapper = new ObjectMapper();
                String json = "{}";
                try {
                    // 解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
                    json = mapper.writeValueAsString(record);
                } catch (JsonProcessingException e) {
                    log.error("json解析失败" + e.getMessage(), e);
                }
                JSONObject item = JSONObject.parseObject(json);
                // for (Field field : record.getClass().getDeclaredFields()) {
                for (Field field : oConvertUtils.getAllFields(record)) {
                    // update-end--Author:scott  -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
                    if (field.getAnnotation(Dict.class) != null) {
                        String code = field.getAnnotation(Dict.class).dicCode();
                        String text = field.getAnnotation(Dict.class).dicText();
                        String table = field.getAnnotation(Dict.class).dictTable();
                        String key = String.valueOf(item.get(field.getName()));
                        // 翻译字典值对应的txt
                        String textValue = translateDictValue(code, text, table, key);
                        log.debug(" 字典Val : " + textValue);
                        log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue);
                        item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                    }
                    // date类型默认转换string格式化日期
                    if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
                        SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
                    }
                }
                items.add(item);
            }
        // ((KmSearchResultObjVO) ((Result) result).getResult()).getKmSearchResultVOPage().setRecords(items);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) Date(java.util.Date) Result(org.jeecg.common.api.vo.Result) Field(java.lang.reflect.Field) IPage(com.baomidou.mybatisplus.core.metadata.IPage) JsonFormat(com.fasterxml.jackson.annotation.JsonFormat) JSONObject(com.alibaba.fastjson.JSONObject) Dict(org.jeecg.common.aspect.annotation.Dict) JSONObject(com.alibaba.fastjson.JSONObject) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) SimpleDateFormat(java.text.SimpleDateFormat) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 3 with Dict

use of org.jeecg.common.aspect.annotation.Dict in project kms by mahonelau.

the class DictAspect method parseDictText.

/**
 * 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入
 * 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 ,table字典 code table text配合使用与原来jeecg的用法相同
 * 示例为SysUser   字段为sex 添加了注解@Dict(dicCode = "sex") 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端
 * 例输入当前返回值的就会多出一个sex_dictText字段
 * {
 *      sex:1,
 *      sex_dictText:"男"
 * }
 * 前端直接取值sext_dictText在table里面无需再进行前端的字典转换了
 *  customRender:function (text) {
 *               if(text==1){
 *                 return "男";
 *               }else if(text==2){
 *                 return "女";
 *               }else{
 *                 return text;
 *               }
 *             }
 *             目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用
 * @param result
 */
private void parseDictText(Object result) {
    if (result instanceof Result) {
        if (((Result) result).getResult() instanceof IPage) {
            List<JSONObject> items = new ArrayList<>();
            for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) {
                ObjectMapper mapper = new ObjectMapper();
                String json = "{}";
                try {
                    // 解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
                    json = mapper.writeValueAsString(record);
                } catch (JsonProcessingException e) {
                    log.error("json解析失败" + e.getMessage(), e);
                }
                JSONObject item = JSONObject.parseObject(json);
                // for (Field field : record.getClass().getDeclaredFields()) {
                for (Field field : oConvertUtils.getAllFields(record)) {
                    // update-end--Author:scott  -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
                    if (field.getAnnotation(Dict.class) != null) {
                        String code = field.getAnnotation(Dict.class).dicCode();
                        String text = field.getAnnotation(Dict.class).dicText();
                        String table = field.getAnnotation(Dict.class).dictTable();
                        String key = String.valueOf(item.get(field.getName()));
                        // 翻译字典值对应的txt
                        String textValue = translateDictValue(code, text, table, key);
                        log.debug(" 字典Val : " + textValue);
                        log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue);
                        item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                    }
                    // date类型默认转换string格式化日期
                    if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
                        SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
                    }
                }
                items.add(item);
            }
            ((IPage) ((Result) result).getResult()).setRecords(items);
        } else if (((Result) result).getResult() instanceof KmSearchResultObjVO) {
            List<JSONObject> items = new ArrayList<>();
            for (Object record : ((KmSearchResultObjVO) ((Result) result).getResult()).getKmSearchResultVOPage().getRecords()) {
                ObjectMapper mapper = new ObjectMapper();
                String json = "{}";
                try {
                    // 解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
                    json = mapper.writeValueAsString(record);
                } catch (JsonProcessingException e) {
                    log.error("json解析失败" + e.getMessage(), e);
                }
                JSONObject item = JSONObject.parseObject(json);
                // for (Field field : record.getClass().getDeclaredFields()) {
                for (Field field : oConvertUtils.getAllFields(record)) {
                    // update-end--Author:scott  -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
                    if (field.getAnnotation(Dict.class) != null) {
                        String code = field.getAnnotation(Dict.class).dicCode();
                        String text = field.getAnnotation(Dict.class).dicText();
                        String table = field.getAnnotation(Dict.class).dictTable();
                        String key = String.valueOf(item.get(field.getName()));
                        // 翻译字典值对应的txt
                        String textValue = translateDictValue(code, text, table, key);
                        log.debug(" 字典Val : " + textValue);
                        log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue);
                        item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                    }
                    // date类型默认转换string格式化日期
                    if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
                        SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
                    }
                }
                items.add(item);
            }
            ((KmSearchResultObjVO) ((Result) result).getResult()).getKmSearchResultVOPage().setRecords(items);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) KmSearchResultObjVO(org.jeecg.common.system.vo.KmSearchResultObjVO) Date(java.util.Date) Result(org.jeecg.common.api.vo.Result) Field(java.lang.reflect.Field) IPage(com.baomidou.mybatisplus.core.metadata.IPage) JsonFormat(com.fasterxml.jackson.annotation.JsonFormat) JSONObject(com.alibaba.fastjson.JSONObject) Dict(org.jeecg.common.aspect.annotation.Dict) JSONObject(com.alibaba.fastjson.JSONObject) ArrayList(java.util.ArrayList) List(java.util.List) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) SimpleDateFormat(java.text.SimpleDateFormat) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 4 with Dict

use of org.jeecg.common.aspect.annotation.Dict in project kykms by mahonelau.

the class DictUtils method parseDictText.

/**
 * 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入
 * 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 ,table字典 code table text配合使用与原来jeecg的用法相同
 * 示例为SysUser   字段为sex 添加了注解@Dict(dicCode = "sex") 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端
 * 例输入当前返回值的就会多出一个sex_dictText字段
 * {
 *      sex:1,
 *      sex_dictText:"男"
 * }
 * 前端直接取值sext_dictText在table里面无需再进行前端的字典转换了
 *  customRender:function (text) {
 *               if(text==1){
 *                 return "男";
 *               }else if(text==2){
 *                 return "女";
 *               }else{
 *                 return text;
 *               }
 *             }
 *             目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用
 * @param result
 */
public void parseDictText(Object result) {
    if (result instanceof Result) {
        if (((Result) result).getResult() instanceof IPage) {
            List<JSONObject> items = new ArrayList<>();
            for (Object record : ((KmSearchResultObjVO) ((Result) result).getResult()).getKmSearchResultVOPage().getRecords()) {
                ObjectMapper mapper = new ObjectMapper();
                String json = "{}";
                try {
                    // 解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
                    json = mapper.writeValueAsString(record);
                } catch (JsonProcessingException e) {
                    log.error("json解析失败" + e.getMessage(), e);
                }
                JSONObject item = JSONObject.parseObject(json);
                // for (Field field : record.getClass().getDeclaredFields()) {
                for (Field field : oConvertUtils.getAllFields(record)) {
                    // update-end--Author:scott  -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
                    if (field.getAnnotation(Dict.class) != null) {
                        String code = field.getAnnotation(Dict.class).dicCode();
                        String text = field.getAnnotation(Dict.class).dicText();
                        String table = field.getAnnotation(Dict.class).dictTable();
                        String key = String.valueOf(item.get(field.getName()));
                        // 翻译字典值对应的txt
                        String textValue = translateDictValue(code, text, table, key);
                        log.debug(" 字典Val : " + textValue);
                        log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue);
                        item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                    }
                    // date类型默认转换string格式化日期
                    if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
                        SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
                    }
                }
                items.add(item);
            }
        // ((KmSearchResultObjVO) ((Result) result).getResult()).getKmSearchResultVOPage().setRecords(items);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) Date(java.util.Date) Result(org.jeecg.common.api.vo.Result) Field(java.lang.reflect.Field) IPage(com.baomidou.mybatisplus.core.metadata.IPage) JsonFormat(com.fasterxml.jackson.annotation.JsonFormat) JSONObject(com.alibaba.fastjson.JSONObject) Dict(org.jeecg.common.aspect.annotation.Dict) JSONObject(com.alibaba.fastjson.JSONObject) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) SimpleDateFormat(java.text.SimpleDateFormat) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 5 with Dict

use of org.jeecg.common.aspect.annotation.Dict in project kykms by mahonelau.

the class DictAspect method parseDictText.

/**
 * 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入
 * 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 ,table字典 code table text配合使用与原来jeecg的用法相同
 * 示例为SysUser   字段为sex 添加了注解@Dict(dicCode = "sex") 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端
 * 例输入当前返回值的就会多出一个sex_dictText字段
 * {
 *      sex:1,
 *      sex_dictText:"男"
 * }
 * 前端直接取值sext_dictText在table里面无需再进行前端的字典转换了
 *  customRender:function (text) {
 *               if(text==1){
 *                 return "男";
 *               }else if(text==2){
 *                 return "女";
 *               }else{
 *                 return text;
 *               }
 *             }
 *             目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用
 * @param result
 */
private void parseDictText(Object result) {
    if (result instanceof Result) {
        if (((Result) result).getResult() instanceof IPage) {
            List<JSONObject> items = new ArrayList<>();
            for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) {
                ObjectMapper mapper = new ObjectMapper();
                String json = "{}";
                try {
                    // 解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
                    json = mapper.writeValueAsString(record);
                } catch (JsonProcessingException e) {
                    log.error("json解析失败" + e.getMessage(), e);
                }
                JSONObject item = JSONObject.parseObject(json);
                // for (Field field : record.getClass().getDeclaredFields()) {
                for (Field field : oConvertUtils.getAllFields(record)) {
                    // update-end--Author:scott  -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
                    if (field.getAnnotation(Dict.class) != null) {
                        String code = field.getAnnotation(Dict.class).dicCode();
                        String text = field.getAnnotation(Dict.class).dicText();
                        String table = field.getAnnotation(Dict.class).dictTable();
                        String key = String.valueOf(item.get(field.getName()));
                        // 翻译字典值对应的txt
                        String textValue = translateDictValue(code, text, table, key);
                        log.debug(" 字典Val : " + textValue);
                        log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue);
                        item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                    }
                    // date类型默认转换string格式化日期
                    if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
                        SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
                    }
                }
                items.add(item);
            }
            ((IPage) ((Result) result).getResult()).setRecords(items);
        } else if (((Result) result).getResult() instanceof KmSearchResultObjVO) {
            List<JSONObject> items = new ArrayList<>();
            for (Object record : ((KmSearchResultObjVO) ((Result) result).getResult()).getKmSearchResultVOPage().getRecords()) {
                ObjectMapper mapper = new ObjectMapper();
                String json = "{}";
                try {
                    // 解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
                    json = mapper.writeValueAsString(record);
                } catch (JsonProcessingException e) {
                    log.error("json解析失败" + e.getMessage(), e);
                }
                JSONObject item = JSONObject.parseObject(json);
                // for (Field field : record.getClass().getDeclaredFields()) {
                for (Field field : oConvertUtils.getAllFields(record)) {
                    // update-end--Author:scott  -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
                    if (field.getAnnotation(Dict.class) != null) {
                        String code = field.getAnnotation(Dict.class).dicCode();
                        String text = field.getAnnotation(Dict.class).dicText();
                        String table = field.getAnnotation(Dict.class).dictTable();
                        String key = String.valueOf(item.get(field.getName()));
                        // 翻译字典值对应的txt
                        String textValue = translateDictValue(code, text, table, key);
                        log.debug(" 字典Val : " + textValue);
                        log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue);
                        item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
                    }
                    // date类型默认转换string格式化日期
                    if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
                        SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
                    }
                }
                items.add(item);
            }
            ((KmSearchResultObjVO) ((Result) result).getResult()).getKmSearchResultVOPage().setRecords(items);
        }
    }
}
Also used : ArrayList(java.util.ArrayList) KmSearchResultObjVO(org.jeecg.common.system.vo.KmSearchResultObjVO) Date(java.util.Date) Result(org.jeecg.common.api.vo.Result) Field(java.lang.reflect.Field) IPage(com.baomidou.mybatisplus.core.metadata.IPage) JsonFormat(com.fasterxml.jackson.annotation.JsonFormat) JSONObject(com.alibaba.fastjson.JSONObject) Dict(org.jeecg.common.aspect.annotation.Dict) JSONObject(com.alibaba.fastjson.JSONObject) ArrayList(java.util.ArrayList) List(java.util.List) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) SimpleDateFormat(java.text.SimpleDateFormat) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Aggregations

JSONObject (com.alibaba.fastjson.JSONObject)6 IPage (com.baomidou.mybatisplus.core.metadata.IPage)6 JsonFormat (com.fasterxml.jackson.annotation.JsonFormat)6 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)6 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)6 Field (java.lang.reflect.Field)6 SimpleDateFormat (java.text.SimpleDateFormat)6 Result (org.jeecg.common.api.vo.Result)6 Dict (org.jeecg.common.aspect.annotation.Dict)6 ArrayList (java.util.ArrayList)4 Date (java.util.Date)4 JSON (com.alibaba.fastjson.JSON)2 Feature (com.alibaba.fastjson.parser.Feature)2 java.util (java.util)2 List (java.util.List)2 TimeUnit (java.util.concurrent.TimeUnit)2 Collectors (java.util.stream.Collectors)2 Slf4j (lombok.extern.slf4j.Slf4j)2 ProceedingJoinPoint (org.aspectj.lang.ProceedingJoinPoint)2 Around (org.aspectj.lang.annotation.Around)2