Ver código fonte

首次提交

24282 2 anos atrás
pai
commit
19b46e10a3
43 arquivos alterados com 883 adições e 253 exclusões
  1. 13 0
      ruoyi-common/pom.xml
  2. 4 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
  3. 77 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/service/BaseService.java
  4. 481 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/wrapper/IWrapper.java
  5. 24 0
      ruoyi-common/src/main/java/com/ruoyi/common/utils/wrapper/SqlField.java
  6. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
  7. 7 6
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
  8. 7 6
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
  9. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
  10. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
  11. 5 4
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
  12. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
  13. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
  14. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java
  15. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java
  16. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
  17. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
  18. 7 6
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
  19. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
  20. 7 6
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
  21. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
  22. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
  23. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
  24. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
  25. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
  26. 7 6
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
  27. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java
  28. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
  29. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java
  30. 7 6
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
  31. 6 5
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  32. 19 21
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
  33. 11 9
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
  34. 9 7
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
  35. 13 11
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
  36. 10 7
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
  37. 9 13
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
  38. 9 7
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java
  39. 9 7
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
  40. 8 6
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java
  41. 9 11
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
  42. 16 18
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  43. 1 1
      ruoyi-ui/vue.config.js

+ 13 - 0
ruoyi-common/pom.xml

@@ -133,6 +133,19 @@
             <artifactId>javax.servlet-api</artifactId>
         </dependency>
 
+        <!-- hutool -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.11</version>
+        </dependency>
+
+        <!-- lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 4 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java

@@ -4,6 +4,8 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
@@ -18,6 +20,7 @@ public class BaseEntity implements Serializable
     private static final long serialVersionUID = 1L;
 
     /** 搜索值 */
+    @TableField(exist = false)
     @JsonIgnore
     private String searchValue;
 
@@ -39,6 +42,7 @@ public class BaseEntity implements Serializable
     private String remark;
 
     /** 请求参数 */
+    @TableField(exist = false)
     @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private Map<String, Object> params;
 

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

@@ -0,0 +1,77 @@
+package com.ruoyi.common.core.service;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+@SuppressWarnings({"unused", "unchecked"})
+public interface BaseService<T> extends IService<T> {
+
+
+    default IWrapper<T> getWrapper() {
+        return IWrapper.getWrapper();
+    }
+
+    // =========================================================
+    // mp方法扩展
+    // =========================================================
+
+    default void assertExecutable(Consumer<LambdaQueryWrapper<T>> consumer, String errorMsgTemplate, Object... params) {
+        long count = count(consumer);
+        Assert.equals(count, 0L, errorMsgTemplate, params);
+    }
+
+    default long count(Consumer<LambdaQueryWrapper<T>> consumer) {
+        return count(Wrappers.<T>lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer));
+    }
+
+    default T getOne(Consumer<LambdaQueryWrapper<T>> consumer) {
+        return getOne(Wrappers.<T>lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer).last("limit 1"));
+    }
+
+    default List<T> list(Consumer<LambdaQueryWrapper<T>> consumer) {
+        return list(Wrappers.<T>lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer));
+    }
+
+    default List<Map<String, Object>> listMaps(Consumer<LambdaQueryWrapper<T>> consumer) {
+        return listMaps(Wrappers.<T>lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer));
+    }
+
+    default <K> List<K> listObject(SFunction<T, K> mapper, Consumer<LambdaQueryWrapper<T>> consumer) {
+        return listObjs(Wrappers.<T>lambdaQuery().select(mapper).func(ObjectUtil.isNotEmpty(consumer), consumer), t -> (K) t);
+    }
+
+    default <K, V> Map<K, V> mapKV(SFunction<T, K> kFun, SFunction<T, V> vFun, Consumer<LambdaQueryWrapper<T>> consumer) {
+        List<T> list = list(Wrappers.<T>lambdaQuery().select(kFun, vFun).func(ObjectUtil.isNotEmpty(consumer), consumer));
+        return list.stream().collect(Collectors.toMap(kFun, vFun, (v1, v2) -> v2));
+    }
+
+    default <K> Map<K, T> mapKEntity(SFunction<T, K> kFun, Consumer<LambdaQueryWrapper<T>> consumer) {
+        List<T> list = list(Wrappers.<T>lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer));
+        return list.stream().collect(Collectors.toMap(kFun, item -> item, (v1, v2) -> v2));
+    }
+
+    default <K> Map<K, List<T>> mapKGroup(SFunction<T, K> kFun, Consumer<LambdaQueryWrapper<T>> consumer) {
+        List<T> list = list(Wrappers.<T>lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer));
+        return list.stream().collect(Collectors.groupingBy(kFun));
+    }
+
+    default boolean update(Consumer<LambdaUpdateWrapper<T>> consumer) {
+        return update(Wrappers.<T>lambdaUpdate().func(ObjectUtil.isNotEmpty(consumer), consumer));
+    }
+
+    default boolean remove(Consumer<LambdaQueryWrapper<T>> consumer) {
+        return remove(Wrappers.<T>lambdaQuery().func(ObjectUtil.isNotEmpty(consumer), consumer));
+    }
+
+}

+ 481 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/wrapper/IWrapper.java

@@ -0,0 +1,481 @@
+package com.ruoyi.common.utils.wrapper;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
+import com.baomidou.mybatisplus.core.conditions.SharedString;
+import com.baomidou.mybatisplus.core.conditions.query.Query;
+import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;
+import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import org.apache.ibatis.reflection.property.PropertyNamer;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.StringJoiner;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Predicate;
+
+@SuppressWarnings("unused")
+public class IWrapper<T> extends AbstractWrapper<T, String, IWrapper<T>> implements Query<IWrapper<T>, T, String> {
+
+    // =====================================================================
+    // QueryWrapper原生方法
+    // =====================================================================
+
+    /**
+     * 查询字段
+     */
+    private final SharedString sqlSelect = new SharedString();
+
+    /**
+     * 非对外公开的构造方法,只用于生产嵌套 sql
+     *
+     * @param entityClass 本不应该需要的
+     */
+    private IWrapper(T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
+                     Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
+                     SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
+        super.setEntity(entity);
+        super.setEntityClass(entityClass);
+        this.paramNameSeq = paramNameSeq;
+        this.paramNameValuePairs = paramNameValuePairs;
+        this.expression = mergeSegments;
+        this.lastSql = lastSql;
+        this.sqlComment = sqlComment;
+        this.sqlFirst = sqlFirst;
+    }
+
+    @Override
+    public IWrapper<T> select(String... columns) {
+        if (ArrayUtils.isNotEmpty(columns)) {
+            this.sqlSelect.setStringValue(String.join(StringPool.COMMA, columns));
+        }
+        return typedThis;
+    }
+
+    @Override
+    public IWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
+        super.setEntityClass(entityClass);
+        this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(getEntityClass()).chooseSelect(predicate));
+        return typedThis;
+    }
+
+    @Override
+    public String getSqlSelect() {
+        return sqlSelect.getStringValue();
+    }
+
+    /**
+     * 用于生成嵌套 sql
+     * <p>
+     * 故 sqlSelect 不向下传递
+     * </p>
+     */
+    @Override
+    protected IWrapper<T> instance() {
+        return new IWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
+                SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
+    }
+
+    @Override
+    public void clear() {
+        super.clear();
+        sqlSelect.toNull();
+    }
+
+    // =====================================================================
+    // 初始化
+    // =====================================================================
+
+    private IWrapper() {
+        super.initNeed();
+    }
+
+    public static <T> IWrapper<T> getWrapper() {
+        return new IWrapper<>();
+    }
+
+    // =====================================================================
+    // 拓展方法
+    // =====================================================================
+
+    // /**
+    //  * 过滤出有权限查看的角色数据
+    //  */
+    // public <K, V> IWrapper<T> roleDataScopes(SFunction<K, V> function) {
+    //     return roleDataScopes(getSqlFieldName(function));
+    // }
+    //
+    // public <K, V> IWrapper<T> roleDataScopes(String alias, SFunction<K, V> function) {
+    //     return roleDataScopes(getSqlFieldName(alias, function));
+    // }
+    //
+    // public <K, V> IWrapper<T> roleDataScopes(String sqlFieldName) {
+    //     if (SaTokenUtil.haveAllDataScopes()) return typedThis;
+    //     return in(sqlFieldName, SaTokenUtil.getRoleDataScopes());
+    // }
+    //
+    // /**
+    //  * 过滤出有权限查看的部门数据
+    //  */
+    // public <K, V> IWrapper<T> deptDataScopes(SFunction<K, V> function) {
+    //     return deptDataScopes(getSqlFieldName(function));
+    // }
+    //
+    // public <K, V> IWrapper<T> deptDataScopes(String alias, SFunction<K, V> function) {
+    //     return deptDataScopes(getSqlFieldName(alias, function));
+    // }
+    //
+    // public <K, V> IWrapper<T> deptDataScopes(String sqlFieldName) {
+    //     if (SaTokenUtil.haveAllDataScopes()) return typedThis;
+    //     return in(sqlFieldName, SaTokenUtil.getDeptDataScopes());
+    // }
+    //
+    // /**
+    //  * 过滤出有权限查看的用户数据
+    //  */
+    // public <K, V> IWrapper<T> userDataScopes(SFunction<K, V> function) {
+    //     return userDataScopes(getSqlFieldName(function));
+    // }
+    //
+    // public <K, V> IWrapper<T> userDataScopes(String alias, SFunction<K, V> function) {
+    //     return userDataScopes(getSqlFieldName(alias, function));
+    // }
+    //
+    // public <K, V> IWrapper<T> userDataScopes(String sqlFieldName) {
+    //     if (SaTokenUtil.haveAllDataScopes()) return typedThis;
+    //     return in(sqlFieldName, SaTokenUtil.getUserDataScopes());
+    // }
+
+    public IWrapper<T> keyword(Object value, SqlField... keywordData) {
+        this.and(ObjectUtil.isNotEmpty(value), q -> {
+            for (SqlField keywordDatum : keywordData) {
+                q.or().like(keywordDatum.getName(), value);
+            }
+        });
+        return typedThis;
+    }
+
+    /**
+     * 查询字段
+     */
+    public final <K, V> IWrapper<T> select(SqlField... sqlFields) {
+        StringJoiner stringJoiner = new StringJoiner(StringPool.COMMA);
+
+        for (SqlField sqlField : sqlFields) {
+            stringJoiner.add(sqlField.getName());
+        }
+
+        this.sqlSelect.setStringValue(stringJoiner.toString());
+
+        return typedThis;
+    }
+
+    /**
+     * 排序
+     */
+    public <K, V> IWrapper<T> orderByAsc(SFunction<K, V> function) {
+        return orderByAsc(getSqlFieldName(function));
+    }
+
+    public <K, V> IWrapper<T> orderByAsc(String alias, SFunction<K, V> function) {
+        return orderByAsc(getSqlFieldName(alias, function));
+    }
+
+    public <K, V> IWrapper<T> orderByDesc(SFunction<K, V> function) {
+        return orderByDesc(getSqlFieldName(function));
+    }
+
+    public <K, V> IWrapper<T> orderByDesc(String alias, SFunction<K, V> function) {
+        return orderByDesc(getSqlFieldName(alias, function));
+    }
+
+    /**
+     * between
+     */
+    public <K, V> IWrapper<T> between(SFunction<K, V> function, Object val1, Object val2) {
+        String sqlFieldName = getSqlFieldName(function);
+        return between(sqlFieldName, val1, val2);
+    }
+
+    public <K, V> IWrapper<T> between(String alias, SFunction<K, V> function, Object val1, Object val2) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return between(sqlFieldName, val1, val2);
+    }
+
+    public <K, V> IWrapper<T> between(String sqlFieldName, Object val1, Object val2) {
+        return between(ObjectUtil.isAllNotEmpty(val1, val2), sqlFieldName, val1, val2);
+    }
+
+    /**
+     * eq
+     */
+    public <K, V> IWrapper<T> eq(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return eq(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> eq(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return eq(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> eq(String sqlFieldName, Object value) {
+        return eq(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * ne
+     */
+    public <K, V> IWrapper<T> ne(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return ne(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> ne(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return ne(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> ne(String sqlFieldName, Object value) {
+        return ne(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * ge
+     */
+    public <K, V> IWrapper<T> ge(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return ge(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> ge(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return ge(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> ge(String sqlFieldName, Object value) {
+        return ge(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * gt
+     */
+    public <K, V> IWrapper<T> gt(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return gt(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> gt(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return gt(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> gt(String sqlFieldName, Object value) {
+        return gt(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * le
+     */
+    public <K, V> IWrapper<T> le(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return le(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> le(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return le(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> le(String sqlFieldName, Object value) {
+        return le(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * lt
+     */
+    public <K, V> IWrapper<T> lt(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return lt(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> lt(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return lt(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> lt(String sqlFieldName, Object value) {
+        return lt(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * like
+     */
+    public <K, V> IWrapper<T> like(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return like(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> like(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return like(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> like(String sqlFieldName, Object value) {
+        return apply(ObjectUtil.isNotEmpty(value), "instr(" + sqlFieldName + ", {0}) > 0", value);
+    }
+
+    /**
+     * notLike
+     */
+    public <K, V> IWrapper<T> notLike(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return notLike(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> notLike(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return notLike(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> notLike(String sqlFieldName, Object value) {
+        return notLike(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * likeLeft
+     */
+    public <K, V> IWrapper<T> likeLeft(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return likeLeft(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> likeLeft(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return likeLeft(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> likeLeft(String sqlFieldName, Object value) {
+        return likeLeft(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * likeRight
+     */
+    public <K, V> IWrapper<T> likeRight(SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return likeRight(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> likeRight(String alias, SFunction<K, V> function, Object value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return likeRight(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> likeRight(String sqlFieldName, Object value) {
+        return likeRight(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    /**
+     * in
+     */
+    public <K, V> IWrapper<T> in(SFunction<K, V> function, Collection<?> value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return in(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> in(String alias, SFunction<K, V> function, Collection<?> value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return in(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> in(String sqlFieldName, Collection<?> value) {
+        return in(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> in(SFunction<K, V> function, Object... value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return in(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> in(String alias, SFunction<K, V> function, Object... value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return in(sqlFieldName, value);
+    }
+
+    /**
+     * notIn
+     */
+    public <K, V> IWrapper<T> notIn(SFunction<K, V> function, Collection<?> value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return notIn(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> notIn(String alias, SFunction<K, V> function, Collection<?> value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return notIn(sqlFieldName, value);
+    }
+
+    @Override
+    public IWrapper<T> notIn(String sqlFieldName, Collection<?> value) {
+        return notIn(ObjectUtil.isNotEmpty(value), sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> notIn(SFunction<K, V> function, Object... value) {
+        String sqlFieldName = getSqlFieldName(function);
+        return notIn(sqlFieldName, value);
+    }
+
+    public <K, V> IWrapper<T> notIn(String alias, SFunction<K, V> function, Object... value) {
+        String sqlFieldName = getSqlFieldName(alias, function);
+        return notIn(sqlFieldName, value);
+    }
+
+    // =====================================================================
+    // 静态方法
+    // =====================================================================
+
+    /**
+     * 获取对象字段名
+     * 例:getFieldName(Entity::getBaseId) -》 return "baseId"
+     */
+    private static <K, V> String getFieldName(SFunction<K, V> function) {
+        LambdaMeta meta = LambdaUtils.extract(function);
+        return PropertyNamer.methodToProperty(meta.getImplMethodName());
+    }
+
+    /**
+     * 获取sql字段名
+     * 例:getSqlFieldName(Entity::getBaseId) -》 return "base_id"
+     */
+    protected static <K, V> String getSqlFieldName(SFunction<K, V> function) {
+        return StrUtil.toUnderlineCase(getFieldName(function));
+    }
+
+    /**
+     * 获取sql字段名
+     * 例:getSqlFieldName("s", Entity::getBaseId) -》 return "s.base_id"
+     */
+    protected static <K, V> String getSqlFieldName(String alias, SFunction<K, V> function) {
+        return StrUtil.toUnderlineCase(alias + "." + getFieldName(function));
+    }
+
+}

+ 24 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/wrapper/SqlField.java

@@ -0,0 +1,24 @@
+package com.ruoyi.common.utils.wrapper;
+
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import lombok.Getter;
+
+@Getter
+@SuppressWarnings("unused")
+public class SqlField {
+
+    private final String name;
+
+    public SqlField(String name) {
+        this.name = name;
+    }
+
+    public <K, V> SqlField(SFunction<K, V> function) {
+        this.name = IWrapper.getSqlFieldName(function);
+    }
+
+    public <K, V> SqlField(String alias, SFunction<K, V> function) {
+        this.name = IWrapper.getSqlFieldName(alias, function);
+    }
+
+}

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysConfig;
 
+import java.util.List;
+
 /**
  * 参数配置 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysConfigMapper
-{
+public interface SysConfigMapper extends BaseMapper<SysConfig> {
     /**
      * 查询参数配置信息
-     * 
+     *
      * @param config 参数配置信息
      * @return 参数配置信息
      */

+ 7 - 6
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java

@@ -1,19 +1,20 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysDept;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 部门管理 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysDeptMapper
-{
+public interface SysDeptMapper extends BaseMapper<SysDept> {
     /**
      * 查询部门管理数据
-     * 
+     *
      * @param dept 部门信息
      * @return 部门信息集合
      */

+ 7 - 6
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java

@@ -1,19 +1,20 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysDictData;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 字典表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysDictDataMapper
-{
+public interface SysDictDataMapper extends BaseMapper<SysDictData> {
     /**
      * 根据条件分页查询字典数据
-     * 
+     *
      * @param dictData 字典数据信息
      * @return 字典数据集合信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysDictType;
 
+import java.util.List;
+
 /**
  * 字典表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysDictTypeMapper
-{
+public interface SysDictTypeMapper extends BaseMapper<SysDictType> {
     /**
      * 根据条件分页查询字典类型
-     * 
+     *
      * @param dictType 字典类型信息
      * @return 字典类型集合信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysLogininfor;
 
+import java.util.List;
+
 /**
  * 系统访问日志情况信息 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysLogininforMapper
-{
+public interface SysLogininforMapper extends BaseMapper<SysLogininfor> {
     /**
      * 新增系统登录日志
-     * 
+     *
      * @param logininfor 访问日志对象
      */
     public void insertLogininfor(SysLogininfor logininfor);

+ 5 - 4
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java

@@ -1,16 +1,17 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysMenu;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 菜单表 数据层
  *
  * @author ruoyi
  */
-public interface SysMenuMapper
-{
+public interface SysMenuMapper extends BaseMapper<SysMenu> {
     /**
      * 查询系统菜单列表
      *

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysNotice;
 
+import java.util.List;
+
 /**
  * 通知公告表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysNoticeMapper
-{
+public interface SysNoticeMapper extends BaseMapper<SysNotice> {
     /**
      * 查询公告信息
-     * 
+     *
      * @param noticeId 公告ID
      * @return 公告信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysOperLog;
 
+import java.util.List;
+
 /**
  * 操作日志 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysOperLogMapper
-{
+public interface SysOperLogMapper extends BaseMapper<SysOperLog> {
     /**
      * 新增操作日志
-     * 
+     *
      * @param operLog 操作日志对象
      */
     public void insertOperlog(SysOperLog operLog);

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysPost;
 
+import java.util.List;
+
 /**
  * 岗位信息 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysPostMapper
-{
+public interface SysPostMapper extends BaseMapper<SysPost> {
     /**
      * 查询岗位数据集合
-     * 
+     *
      * @param post 岗位信息
      * @return 岗位数据集合
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysRoleDept;
 
+import java.util.List;
+
 /**
  * 角色与部门关联表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysRoleDeptMapper
-{
+public interface SysRoleDeptMapper extends BaseMapper<SysRoleDept> {
     /**
      * 通过角色ID删除角色和部门关联
-     * 
+     *
      * @param roleId 角色ID
      * @return 结果
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysRole;
 
+import java.util.List;
+
 /**
  * 角色表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysRoleMapper
-{
+public interface SysRoleMapper extends BaseMapper<SysRole> {
     /**
      * 根据条件分页查询角色数据
-     * 
+     *
      * @param role 角色信息
      * @return 角色数据集合信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysRoleMenu;
 
+import java.util.List;
+
 /**
  * 角色与菜单关联表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysRoleMenuMapper
-{
+public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
     /**
      * 查询菜单使用数量
-     * 
+     *
      * @param menuId 菜单ID
      * @return 结果
      */

+ 7 - 6
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -1,19 +1,20 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 用户表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysUserMapper
-{
+public interface SysUserMapper extends BaseMapper<SysUser> {
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param sysUser 用户信息
      * @return 用户信息集合信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysUserPost;
 
+import java.util.List;
+
 /**
  * 用户与岗位关联表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysUserPostMapper
-{
+public interface SysUserPostMapper extends BaseMapper<SysUserPost> {
     /**
      * 通过用户ID删除用户和岗位关联
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */

+ 7 - 6
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java

@@ -1,19 +1,20 @@
 package com.ruoyi.system.mapper;
 
-import java.util.List;
-import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.system.domain.SysUserRole;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 用户与角色关联表 数据层
- * 
+ *
  * @author ruoyi
  */
-public interface SysUserRoleMapper
-{
+public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
     /**
      * 通过用户ID删除用户和角色关联
-     * 
+     *
      * @param userId 用户ID
      * @return 结果
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
+import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.system.domain.SysConfig;
 
+import java.util.List;
+
 /**
  * 参数配置 服务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysConfigService
-{
+public interface ISysConfigService extends BaseService<SysConfig> {
     /**
      * 查询参数配置信息
-     * 
+     *
      * @param configId 参数配置ID
      * @return 参数配置信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java

@@ -1,19 +1,20 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
 import com.ruoyi.common.core.domain.TreeSelect;
 import com.ruoyi.common.core.domain.entity.SysDept;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
 
 /**
  * 部门管理 服务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysDeptService
-{
+public interface ISysDeptService extends BaseService<SysDept> {
     /**
      * 查询部门管理数据
-     * 
+     *
      * @param dept 部门信息
      * @return 部门信息集合
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
 import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
 
 /**
  * 字典 业务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysDictDataService
-{
+public interface ISysDictDataService extends BaseService<SysDictData> {
     /**
      * 根据条件分页查询字典数据
-     * 
+     *
      * @param dictData 字典数据信息
      * @return 字典数据集合信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java

@@ -1,19 +1,20 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
 import com.ruoyi.common.core.domain.entity.SysDictData;
 import com.ruoyi.common.core.domain.entity.SysDictType;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
 
 /**
  * 字典 业务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysDictTypeService
-{
+public interface ISysDictTypeService extends BaseService<SysDictType> {
     /**
      * 根据条件分页查询字典类型
-     * 
+     *
      * @param dictType 字典类型信息
      * @return 字典类型集合信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
+import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.system.domain.SysLogininfor;
 
+import java.util.List;
+
 /**
  * 系统访问日志情况信息 服务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysLogininforService
-{
+public interface ISysLogininforService extends BaseService<SysLogininfor> {
     /**
      * 新增系统登录日志
-     * 
+     *
      * @param logininfor 访问日志对象
      */
     public void insertLogininfor(SysLogininfor logininfor);

+ 7 - 6
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java

@@ -1,21 +1,22 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
-import java.util.Set;
 import com.ruoyi.common.core.domain.TreeSelect;
 import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.system.domain.vo.RouterVo;
 
+import java.util.List;
+import java.util.Set;
+
 /**
  * 菜单 业务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysMenuService
-{
+public interface ISysMenuService extends BaseService<SysMenu> {
     /**
      * 根据用户查询系统菜单列表
-     * 
+     *
      * @param userId 用户ID
      * @return 菜单列表
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
+import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.system.domain.SysNotice;
 
+import java.util.List;
+
 /**
  * 公告 服务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysNoticeService
-{
+public interface ISysNoticeService extends BaseService<SysNotice> {
     /**
      * 查询公告信息
-     * 
+     *
      * @param noticeId 公告ID
      * @return 公告信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
+import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.system.domain.SysOperLog;
 
+import java.util.List;
+
 /**
  * 操作日志 服务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysOperLogService
-{
+public interface ISysOperLogService extends BaseService<SysOperLog> {
     /**
      * 新增操作日志
-     * 
+     *
      * @param operLog 操作日志对象
      */
     public void insertOperlog(SysOperLog operLog);

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
+import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.system.domain.SysPost;
 
+import java.util.List;
+
 /**
  * 岗位信息 服务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysPostService
-{
+public interface ISysPostService extends BaseService<SysPost> {
     /**
      * 查询岗位信息集合
-     * 
+     *
      * @param post 岗位信息
      * @return 岗位列表
      */

+ 7 - 6
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java

@@ -1,20 +1,21 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
-import java.util.Set;
 import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.service.BaseService;
 import com.ruoyi.system.domain.SysUserRole;
 
+import java.util.List;
+import java.util.Set;
+
 /**
  * 角色业务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysRoleService
-{
+public interface ISysRoleService extends BaseService<SysRole> {
     /**
      * 根据条件分页查询角色数据
-     * 
+     *
      * @param role 角色信息
      * @return 角色数据集合信息
      */

+ 6 - 5
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@@ -1,18 +1,19 @@
 package com.ruoyi.system.service;
 
-import java.util.List;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.service.BaseService;
+
+import java.util.List;
 
 /**
  * 用户 业务层
- * 
+ *
  * @author ruoyi
  */
-public interface ISysUserService
-{
+public interface ISysUserService extends BaseService<SysUser> {
     /**
      * 根据条件分页查询用户列表
-     * 
+     *
      * @param user 用户信息
      * @return 用户信息集合信息
      */

+ 19 - 21
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java

@@ -1,10 +1,6 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.Collection;
-import java.util.List;
-import javax.annotation.PostConstruct;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataSource;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.UserConstants;
@@ -16,17 +12,20 @@ import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.system.service.ISysConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.Collection;
+import java.util.List;
 
 /**
  * 参数配置 服务层实现
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysConfigServiceImpl implements ISysConfigService
-{
-    @Autowired
-    private SysConfigMapper configMapper;
+public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements ISysConfigService {
 
     @Autowired
     private RedisCache redisCache;
@@ -35,8 +34,7 @@ public class SysConfigServiceImpl implements ISysConfigService
      * 项目启动时,初始化参数到缓存
      */
     @PostConstruct
-    public void init()
-    {
+    public void init() {
         loadingConfigCache();
     }
 
@@ -52,7 +50,7 @@ public class SysConfigServiceImpl implements ISysConfigService
     {
         SysConfig config = new SysConfig();
         config.setConfigId(configId);
-        return configMapper.selectConfig(config);
+        return baseMapper.selectConfig(config);
     }
 
     /**
@@ -71,7 +69,7 @@ public class SysConfigServiceImpl implements ISysConfigService
         }
         SysConfig config = new SysConfig();
         config.setConfigKey(configKey);
-        SysConfig retConfig = configMapper.selectConfig(config);
+        SysConfig retConfig = baseMapper.selectConfig(config);
         if (StringUtils.isNotNull(retConfig))
         {
             redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue());
@@ -105,7 +103,7 @@ public class SysConfigServiceImpl implements ISysConfigService
     @Override
     public List<SysConfig> selectConfigList(SysConfig config)
     {
-        return configMapper.selectConfigList(config);
+        return baseMapper.selectConfigList(config);
     }
 
     /**
@@ -117,7 +115,7 @@ public class SysConfigServiceImpl implements ISysConfigService
     @Override
     public int insertConfig(SysConfig config)
     {
-        int row = configMapper.insertConfig(config);
+        int row = baseMapper.insertConfig(config);
         if (row > 0)
         {
             redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
@@ -134,13 +132,13 @@ public class SysConfigServiceImpl implements ISysConfigService
     @Override
     public int updateConfig(SysConfig config)
     {
-        SysConfig temp = configMapper.selectConfigById(config.getConfigId());
+        SysConfig temp = baseMapper.selectConfigById(config.getConfigId());
         if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey()))
         {
             redisCache.deleteObject(getCacheKey(temp.getConfigKey()));
         }
 
-        int row = configMapper.updateConfig(config);
+        int row = baseMapper.updateConfig(config);
         if (row > 0)
         {
             redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
@@ -163,7 +161,7 @@ public class SysConfigServiceImpl implements ISysConfigService
             {
                 throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
             }
-            configMapper.deleteConfigById(configId);
+            baseMapper.deleteConfigById(configId);
             redisCache.deleteObject(getCacheKey(config.getConfigKey()));
         }
     }
@@ -174,7 +172,7 @@ public class SysConfigServiceImpl implements ISysConfigService
     @Override
     public void loadingConfigCache()
     {
-        List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
+        List<SysConfig> configsList = baseMapper.selectConfigList(new SysConfig());
         for (SysConfig config : configsList)
         {
             redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue());
@@ -211,7 +209,7 @@ public class SysConfigServiceImpl implements ISysConfigService
     public boolean checkConfigKeyUnique(SysConfig config)
     {
         Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
-        SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
+        SysConfig info = baseMapper.checkConfigKeyUnique(config.getConfigKey());
         if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
         {
             return UserConstants.NOT_UNIQUE;

+ 11 - 9
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java

@@ -1,11 +1,6 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.TreeSelect;
@@ -20,15 +15,22 @@ import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.system.mapper.SysDeptMapper;
 import com.ruoyi.system.mapper.SysRoleMapper;
 import com.ruoyi.system.service.ISysDeptService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 部门管理 服务实现
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysDeptServiceImpl implements ISysDeptService
-{
+public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements ISysDeptService {
+
     @Autowired
     private SysDeptMapper deptMapper;
 

+ 9 - 7
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java

@@ -1,27 +1,29 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.domain.entity.SysDictData;
 import com.ruoyi.common.utils.DictUtils;
 import com.ruoyi.system.mapper.SysDictDataMapper;
 import com.ruoyi.system.service.ISysDictDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 字典 业务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysDictDataServiceImpl implements ISysDictDataService
-{
+public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDictData> implements ISysDictDataService {
+
     @Autowired
     private SysDictDataMapper dictDataMapper;
 
     /**
      * 根据条件分页查询字典数据
-     * 
+     *
      * @param dictData 字典数据信息
      * @return 字典数据集合信息
      */

+ 13 - 11
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java

@@ -1,13 +1,6 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import javax.annotation.PostConstruct;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysDictData;
 import com.ruoyi.common.core.domain.entity.SysDictType;
@@ -17,15 +10,24 @@ import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.mapper.SysDictDataMapper;
 import com.ruoyi.system.mapper.SysDictTypeMapper;
 import com.ruoyi.system.service.ISysDictTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 字典 业务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysDictTypeServiceImpl implements ISysDictTypeService
-{
+public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements ISysDictTypeService {
+
     @Autowired
     private SysDictTypeMapper dictTypeMapper;
 

+ 10 - 7
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java

@@ -1,27 +1,30 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.domain.SysLogininfor;
+import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.system.mapper.SysLogininforMapper;
 import com.ruoyi.system.service.ISysLogininforService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 系统访问日志情况信息 服务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysLogininforServiceImpl implements ISysLogininforService
-{
+public class SysLogininforServiceImpl extends ServiceImpl<SysLogininforMapper, SysLogininfor> implements ISysLogininforService {
 
     @Autowired
     private SysLogininforMapper logininforMapper;
 
     /**
      * 新增系统登录日志
-     * 
+     *
      * @param logininfor 访问日志对象
      */
     @Override

+ 9 - 13
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java

@@ -1,15 +1,6 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.TreeSelect;
@@ -24,15 +15,20 @@ import com.ruoyi.system.mapper.SysMenuMapper;
 import com.ruoyi.system.mapper.SysRoleMapper;
 import com.ruoyi.system.mapper.SysRoleMenuMapper;
 import com.ruoyi.system.service.ISysMenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 菜单 业务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysMenuServiceImpl implements ISysMenuService
-{
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements ISysMenuService {
+
     public static final String PREMISSION_STRING = "perms[\"{0}\"]";
 
     @Autowired

+ 9 - 7
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java

@@ -1,26 +1,28 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.system.domain.SysNotice;
 import com.ruoyi.system.mapper.SysNoticeMapper;
 import com.ruoyi.system.service.ISysNoticeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 公告 服务层实现
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysNoticeServiceImpl implements ISysNoticeService
-{
+public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice> implements ISysNoticeService {
+
     @Autowired
     private SysNoticeMapper noticeMapper;
 
     /**
      * 查询公告信息
-     * 
+     *
      * @param noticeId 公告ID
      * @return 公告信息
      */

+ 9 - 7
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java

@@ -1,26 +1,28 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.system.domain.SysOperLog;
 import com.ruoyi.system.mapper.SysOperLogMapper;
 import com.ruoyi.system.service.ISysOperLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 操作日志 服务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysOperLogServiceImpl implements ISysOperLogService
-{
+public class SysOperLogServiceImpl extends ServiceImpl<SysOperLogMapper, SysOperLog> implements ISysOperLogService {
+
     @Autowired
     private SysOperLogMapper operLogMapper;
 
     /**
      * 新增操作日志
-     * 
+     *
      * @param operLog 操作日志对象
      */
     @Override

+ 8 - 6
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java

@@ -1,8 +1,6 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.StringUtils;
@@ -10,15 +8,19 @@ import com.ruoyi.system.domain.SysPost;
 import com.ruoyi.system.mapper.SysPostMapper;
 import com.ruoyi.system.mapper.SysUserPostMapper;
 import com.ruoyi.system.service.ISysPostService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 岗位信息 服务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysPostServiceImpl implements ISysPostService
-{
+public class SysPostServiceImpl extends ServiceImpl<SysPostMapper, SysPost> implements ISysPostService {
+
     @Autowired
     private SysPostMapper postMapper;
 

+ 9 - 11
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java

@@ -1,13 +1,6 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysRole;
@@ -24,15 +17,20 @@ import com.ruoyi.system.mapper.SysRoleMapper;
 import com.ruoyi.system.mapper.SysRoleMenuMapper;
 import com.ruoyi.system.mapper.SysUserRoleMapper;
 import com.ruoyi.system.service.ISysRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
 
 /**
  * 角色 业务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysRoleServiceImpl implements ISysRoleService
-{
+public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements ISysRoleService {
+
     @Autowired
     private SysRoleMapper roleMapper;
 

+ 16 - 18
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -1,15 +1,6 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-import javax.validation.Validator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.SysRole;
@@ -22,22 +13,29 @@ import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.system.domain.SysPost;
 import com.ruoyi.system.domain.SysUserPost;
 import com.ruoyi.system.domain.SysUserRole;
-import com.ruoyi.system.mapper.SysPostMapper;
-import com.ruoyi.system.mapper.SysRoleMapper;
-import com.ruoyi.system.mapper.SysUserMapper;
-import com.ruoyi.system.mapper.SysUserPostMapper;
-import com.ruoyi.system.mapper.SysUserRoleMapper;
+import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.validation.Validator;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 用户 业务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysUserServiceImpl implements ISysUserService
-{
+public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
+
     private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
 
     @Autowired

+ 1 - 1
ruoyi-ui/vue.config.js

@@ -35,7 +35,7 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        target: `http://localhost:8080`,
+        target: `http://localhost:9898`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''