Bläddra i källkod

dataSourceType修改

24282 2 år sedan
förälder
incheckning
32cc8725b4

+ 10 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/service/BaseService.java

@@ -9,16 +9,26 @@ import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.AttributeAssignBuilder;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.BiConsumer;
 import java.util.function.Consumer;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @SuppressWarnings({"unused", "unchecked"})
 public interface BaseService<T extends BaseIdPo> extends IService<T> {
 
+    default <V> AttributeAssignBuilder<T, V> attributeAssignBuilder(List<V> list) {
+        return AttributeAssignBuilder.init(this, list);
+    }
+
+    default <V> void attributeAssign(List<V> list, Function<V, Long> getIdFun, BiConsumer<V, T> setAttributeFun) {
+        attributeAssignBuilder(list).assignFun(getIdFun, setAttributeFun).build();
+    }
 
     default IWrapper<T> getWrapper() {
         return IWrapper.getWrapper();

+ 130 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/AttributeAssignBuilder.java

@@ -0,0 +1,130 @@
+package com.ruoyi.common.utils;
+
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.core.service.BaseService;
+import lombok.AllArgsConstructor;
+
+import java.util.*;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * 属性赋值构造器
+ */
+public class AttributeAssignBuilder<T extends BaseIdPo, V> {
+
+    /**
+     * 服务
+     */
+    private final BaseService<T> service;
+
+    /**
+     * 原始数据
+     */
+    private final List<V> list;
+
+    /**
+     * 赋值方法集合
+     */
+    private final List<Fun> funList = new ArrayList<>();
+
+    /**
+     * 属性赋值构造器
+     *
+     * @param service 获取属性的表service
+     * @param list    需要赋值的数组
+     */
+    private AttributeAssignBuilder(BaseService<T> service, List<V> list) {
+        this.service = service;
+        this.list = list;
+    }
+
+    /**
+     * 初始化
+     */
+    public static <T extends BaseIdPo, V> AttributeAssignBuilder<T, V> init(BaseService<T> service, List<V> list) {
+        return new AttributeAssignBuilder<>(service, list);
+    }
+
+    /**
+     * 添加赋值方法
+     *
+     * @param getIdFun        获取id方法
+     * @param setAttributeFun 赋值属性方法
+     * @return this
+     */
+    public AttributeAssignBuilder<T, V> assignFun(Function<V, Long> getIdFun, BiConsumer<V, T> setAttributeFun) {
+        Fun fun = new Fun(getIdFun, setAttributeFun);
+        funList.add(fun);
+        return this;
+    }
+
+    /**
+     * 执行赋值逻辑
+     */
+    public void build() {
+        // 获取id集合
+        Set<Long> idSet = getIdSet();
+        if (idSet.size() == 0) {
+            return;
+        }
+
+        // 查询Map<id,实体>
+        Map<Long, T> entityMap = service.listByIds(idSet).stream().collect(Collectors.toMap(BaseIdPo::getId, item -> item));
+        if (entityMap.size() == 0) {
+            return;
+        }
+
+        // 执行属性赋值方法
+        attributeAssign(entityMap);
+    }
+
+    /**
+     * 获取id集合
+     *
+     * @return id集合
+     */
+    private Set<Long> getIdSet() {
+        Set<Long> idSet = new HashSet<>();
+        for (V v : list) {
+            for (Fun fun : funList) {
+                Long userId = fun.getIdFun.apply(v);
+                if (userId != null) {
+                    idSet.add(userId);
+                }
+            }
+        }
+        return idSet;
+    }
+
+    /**
+     * 属性赋值
+     *
+     * @param entityMap 实体map
+     */
+    private void attributeAssign(Map<Long, T> entityMap) {
+        for (V v : list) {
+            for (Fun fun : funList) {
+                Long userId = fun.getIdFun.apply(v);
+                if (userId == null) {
+                    continue;
+                }
+
+                T t = entityMap.get(userId);
+                if (t == null) {
+                    continue;
+                }
+
+                fun.setAttributeFun.accept(v, t);
+            }
+        }
+    }
+
+    @AllArgsConstructor
+    private class Fun {
+        private Function<V, Long> getIdFun;
+        private BiConsumer<V, T> setAttributeFun;
+    }
+
+}

+ 0 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java

@@ -51,7 +51,6 @@ public class GlobalExceptionHandler {
      */
     @ExceptionHandler(ServiceException.class)
     public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) {
-        log.error(e.getMessage(), e);
         Integer code = e.getCode();
         return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage());
     }