package org.jeecg.modules.dnc.aspect; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.system.aspect.DicAspectService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; /** * @Description: Dnc字典aop类 * @Version: 1.0 */ @Aspect @Component @Slf4j public class DncDictAspect { @Autowired private DicAspectService dicAspectService; // 定义切点Pointcut @Pointcut("execution(public * org.jeecg.modules.dnc..*.*Controller.*(..))") public void excudeService() { } @Around("excudeService()") public Object doAround(ProceedingJoinPoint pjp) throws Throwable { long time1=System.currentTimeMillis(); Object result = pjp.proceed(); long time2=System.currentTimeMillis(); log.debug("获取JSON数据 耗时:"+(time2-time1)+"ms"); long start=System.currentTimeMillis(); this.parseDictText(result); long end=System.currentTimeMillis(); log.debug("解析注入JSON数据 耗时"+(end-start)+"ms"); return result; } /** * 本方法针对返回对象为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 items = dicAspectService.detailDict(((IPage) ((Result) result).getResult()).getRecords()); ((IPage) ((Result) result).getResult()).setRecords(items); } else if(((Result) result).getResult() instanceof List){ List items = dicAspectService.detailDict(((List) ((Result) result).getResult())); ((Result) result).setResult(items); } } } }