浏览代码

字典改模糊查询;字典parseDictText增加返回对象为Result的List的列表

LLL 1 年之前
父节点
当前提交
19b4d4dd3c

+ 107 - 1
jeecg-boot-base-core/src/main/java/org/jeecg/common/aspect/DictAspect.java

@@ -58,7 +58,7 @@ public class DictAspect {
 
     @Around("excudeService()")
     public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
-    	long time1=System.currentTimeMillis();	
+    	long time1=System.currentTimeMillis();
         Object result = pjp.proceed();
         long time2=System.currentTimeMillis();
         log.debug("获取JSON数据 耗时:"+(time2-time1)+"ms");
@@ -198,6 +198,112 @@ public class DictAspect {
                 }
 
                 ((IPage) ((Result) result).getResult()).setRecords(items);
+            }else if (((Result) result).getResult() instanceof List) {
+                List<JSONObject> items = new ArrayList<>();
+
+                //step.1 筛选出加了 Dict 注解的字段列表
+                List<Field> dictFieldList = new ArrayList<>();
+                // 字典数据列表, key = 字典code,value=数据列表
+                Map<String, List<String>> dataListMap = new HashMap<>(5);
+                //取出结果集
+                List<Object> records = ((List<Object>) ((Result) result).getResult());
+                //update-begin--Author:zyf -- Date:20220606 ----for:【VUEN-1230】 判断是否含有字典注解,没有注解返回-----
+                Boolean hasDict = checkHasDict(records);
+                if (!hasDict) {
+                    return result;
+                }
+
+                log.debug(" __ 进入字典翻译切面 DictAspect —— ");
+                //update-end--Author:zyf -- Date:20220606 ----for:【VUEN-1230】 判断是否含有字典注解,没有注解返回-----
+                for (Object record : records) {
+                    String json = "{}";
+                    try {
+                        //update-begin--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错-----
+                        //解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
+                        json = objectMapper.writeValueAsString(record);
+                        //update-end--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错-----
+                    } 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);
+                    //update-end--Author:scott -- Date:20211223 ----for:【issues/3303】restcontroller返回json数据后key顺序错乱 -----
+
+                    //update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
+                    //for (Field field : record.getClass().getDeclaredFields()) {
+                    // 遍历所有字段,把字典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格式化日期
+                        //update-begin--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错-----
+                        //if (JAVA_UTIL_DATE.equals(field.getType().getName())&&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()))));
+                        //}
+                        //update-end--Author:zyf -- Date:20220531 ----for:【issues/#3629】 DictAspect Jackson序列化报错-----
+                    }
+                    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);
+                        }
+                    }
+                }
+
+                ((Result) result).setResult(items);
+
             }
 
         }

+ 12 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysDictController.java

@@ -72,8 +72,19 @@ public class SysDictController {
 	@RequestMapping(value = "/list", method = RequestMethod.GET)
 	public Result<IPage<SysDict>> queryPageList(SysDict sysDict,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
 									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
+		SysDict sysDict1 = new SysDict();
+		sysDict1.setId(sysDict.getId());
+		sysDict1.setType(sysDict.getType());
+		sysDict1.setDelFlag(sysDict.getDelFlag());
+
 		Result<IPage<SysDict>> result = new Result<IPage<SysDict>>();
-		QueryWrapper<SysDict> queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap());
+		QueryWrapper<SysDict> queryWrapper = QueryGenerator.initQueryWrapper(sysDict1, req.getParameterMap());
+
+		queryWrapper.like(sysDict.getDictName()!=null && !sysDict.getDictName().equals(""),"dict_name",sysDict.getDictName());
+		queryWrapper.like(sysDict.getDictCode()!=null && !sysDict.getDictCode().equals(""),"dict_code",sysDict.getDictCode());
+		queryWrapper.like(sysDict.getDescription()!=null && !sysDict.getDescription().equals(""),"description",sysDict.getDescription());
+
+
 		Page<SysDict> page = new Page<SysDict>(pageNo, pageSize);
 		IPage<SysDict> pageList = sysDictService.page(page, queryWrapper);
 		log.debug("查询当前页:"+pageList.getCurrent());