diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/constant/ServiceConstant.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/constant/ServiceConstant.java
index 6bce2a5..fe7a28f 100644
--- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/constant/ServiceConstant.java
+++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/constant/ServiceConstant.java
@@ -20,9 +20,10 @@ public interface ServiceConstant {
*/
String OSS = "oss-service";
/**
- * 工单
+ * 工单 相关
+ * 项目-工单
*/
- String WRK = "wrk-service";
+ String WRK = "inspection-service";
/**
* 文件模块消费者组
*/
diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/validator/Create.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/validator/Create.java
new file mode 100644
index 0000000..69527d4
--- /dev/null
+++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/validator/Create.java
@@ -0,0 +1,11 @@
+package com.chushang.common.core.validator;
+
+/**
+ *
新增校验分组
+ *
+ * @author 单傲
+ * @version 1.0
+ * @date 2022/12/7 10:52
+ */
+public interface Create {
+}
diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/validator/Update.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/validator/Update.java
new file mode 100644
index 0000000..eb3d49c
--- /dev/null
+++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/validator/Update.java
@@ -0,0 +1,11 @@
+package com.chushang.common.core.validator;
+
+/**
+ * 修改分组接口
+ *
+ * @author 单傲
+ * @version 1.0
+ * @date 2022/12/7 11:11
+ */
+public interface Update {
+}
diff --git a/chushang-common/chushang-common-data-scope/src/main/java/com/chushang/datascope/aspect/DataScopeAspect.java b/chushang-common/chushang-common-data-scope/src/main/java/com/chushang/datascope/aspect/DataScopeAspect.java
index 2d16c82..c1cd3ee 100644
--- a/chushang-common/chushang-common-data-scope/src/main/java/com/chushang/datascope/aspect/DataScopeAspect.java
+++ b/chushang-common/chushang-common-data-scope/src/main/java/com/chushang/datascope/aspect/DataScopeAspect.java
@@ -75,6 +75,8 @@ public class DataScopeAspect {
StringBuilder dataScopeSqlString = new StringBuilder();
// 根据部门过滤role 显示
List conditions = new ArrayList<>();
+ // 所有的部门id 集合
+ List deptIds = new ArrayList<>();
for (DataScopeEntity scope : dataScopes) {
String dataScope = scope.getScope();
Set permissions = scope.getPermissions();
@@ -98,10 +100,12 @@ public class DataScopeAspect {
.append(ScopeKeyWord.OR.getCode())
.append(StringUtils.format(
"{}.dept_id IN ({}) ", tableAlias, String.join(",",scope.getDeptIds())));
+ deptIds.addAll(scope.getDeptIds());
}
// 部门数据
else if (ScopeConstants.DATA_SCOPE_DEPT.equals(dataScope)) {
dataScopeSqlString.append(StringUtils.format(" OR {}.dept_id = {} ", tableAlias, scope.getDeptId()));
+ deptIds.add(scope.getDeptId() + "");
}
// 部门及以下
else if (ScopeConstants.DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
@@ -110,6 +114,7 @@ public class DataScopeAspect {
.append(StringUtils.format(
"{}.dept_id IN ({})",
tableAlias, String.join(",",scope.getDeptIds())));
+ deptIds.addAll(scope.getDeptIds());
}
// 仅本人
else if (ScopeConstants.DATA_SCOPE_SELF.equals(dataScope)) {
@@ -118,10 +123,11 @@ public class DataScopeAspect {
.append(ScopeKeyWord.OR.getCode())
.append(StringUtils.format("{}.user_id = {} ", userAlias, userId));
} else {
- // 数据权限为仅本人且没有userAlias别名不查询任何数据
+ // 数据权限为仅本人且没有userAlias别名不查询任何数据 为本人时应该只能查询当前部门的数据
dataScopeSqlString
.append(ScopeKeyWord.OR.getCode())
.append(StringUtils.format("{}.dept_id = {} ", tableAlias, scope.getDeptId()));
+ deptIds.add(scope.getDeptId() + "");
}
}
conditions.add(dataScope);
@@ -138,6 +144,9 @@ public class DataScopeAspect {
Map sqlParam = getSqlParam(joinPoint);
if (null == sqlParam) return;
sqlParam.put(ScopeConstants.DATA_SCOPE, v);
+ if (CollectionUtil.isNotEmpty(deptIds)){
+ sqlParam.put(ScopeConstants.DATA_SCOPE_IDS, deptIds);
+ }
}
}
@@ -148,6 +157,7 @@ public class DataScopeAspect {
Map sqlParam = getSqlParam(joinPoint);
if (null == sqlParam) return;
sqlParam.put(ScopeConstants.DATA_SCOPE, "");
+ sqlParam.put(ScopeConstants.DATA_SCOPE_IDS, "");
}
private Map getSqlParam(final JoinPoint joinPoint){
diff --git a/chushang-common/chushang-common-data-scope/src/main/java/com/chushang/datascope/constants/ScopeConstants.java b/chushang-common/chushang-common-data-scope/src/main/java/com/chushang/datascope/constants/ScopeConstants.java
index 22116ea..73fb89b 100644
--- a/chushang-common/chushang-common-data-scope/src/main/java/com/chushang/datascope/constants/ScopeConstants.java
+++ b/chushang-common/chushang-common-data-scope/src/main/java/com/chushang/datascope/constants/ScopeConstants.java
@@ -26,4 +26,6 @@ public interface ScopeConstants {
* 数据权限过滤关键字
*/
String DATA_SCOPE = "dataScope";
+ // 数据集合, 为ID
+ String DATA_SCOPE_IDS = "dataScopeIds";
}
diff --git a/chushang-common/chushang-common-mybatis-plugin/src/main/java/com/chushang/common/mybatis/PluginAutoConfiguration.java b/chushang-common/chushang-common-mybatis-plugin/src/main/java/com/chushang/common/mybatis/PluginAutoConfiguration.java
index 5e4b17b..329ffef 100644
--- a/chushang-common/chushang-common-mybatis-plugin/src/main/java/com/chushang/common/mybatis/PluginAutoConfiguration.java
+++ b/chushang-common/chushang-common-mybatis-plugin/src/main/java/com/chushang/common/mybatis/PluginAutoConfiguration.java
@@ -16,30 +16,18 @@
package com.chushang.common.mybatis;
-import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
-import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
-import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.chushang.common.mybatis.config.MybatisPlusMapperRefresh;
-import com.chushang.common.mybatis.config.MybatisPlusMetaObjectHandler;
-import com.chushang.common.mybatis.resolver.SqlFilterArgumentResolver;
import org.apache.ibatis.session.SqlSessionFactory;
-import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-import org.springframework.web.method.support.HandlerMethodArgumentResolver;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Arrays;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.Set;
/**
diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/MybatisAutoConfiguration.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/MybatisAutoConfiguration.java
index 49f5be0..e1c7c0e 100644
--- a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/MybatisAutoConfiguration.java
+++ b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/MybatisAutoConfiguration.java
@@ -17,35 +17,19 @@
package com.chushang.common.mybatis;
import com.baomidou.mybatisplus.annotation.DbType;
-import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
-import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
-import com.chushang.common.core.constant.SecurityConstants;
-import com.chushang.common.core.util.ServletUtils;
-import com.chushang.common.core.util.StringUtils;
-import com.chushang.common.mybatis.config.MybatisPlusMapperRefresh;
import com.chushang.common.mybatis.config.MybatisPlusMetaObjectHandler;
import com.chushang.common.mybatis.resolver.SqlFilterArgumentResolver;
import lombok.extern.slf4j.Slf4j;
-import net.sf.jsqlparser.expression.Expression;
-import net.sf.jsqlparser.expression.LongValue;
-import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.Resource;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
@@ -97,9 +81,6 @@ public class MybatisAutoConfiguration implements WebMvcConfigurer {
}
-
-
-
// @Bean
// public MybatisPlusMapperRefresh mybatisPlusMapperRefresh(ApplicationContext applicationContext, SqlSessionFactory sqlSessionFactory){
// Set mapperLocations = new LinkedHashSet<>();
diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/annotation/Condition.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/annotation/Condition.java
new file mode 100644
index 0000000..6e31f62
--- /dev/null
+++ b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/annotation/Condition.java
@@ -0,0 +1,24 @@
+package com.chushang.common.mybatis.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Condition {
+
+ String name();
+
+ ConditionType type() default ConditionType.eq;
+
+ enum ConditionType {
+ eq,
+ like,
+ in,
+ between,
+ likeLeft,
+ dataScope
+ }
+}
diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/base/BaseEntity.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/base/BaseEntity.java
index 075255a..a92ef6e 100644
--- a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/base/BaseEntity.java
+++ b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/base/BaseEntity.java
@@ -2,6 +2,7 @@ package com.chushang.common.mybatis.base;
import cn.hutool.core.date.DatePattern;
import com.baomidou.mybatisplus.annotation.*;
+import com.chushang.common.mybatis.annotation.Condition;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -61,6 +62,7 @@ public class BaseEntity implements Serializable {
protected Long version;
@TableField(exist = false)
+ @Condition(name = "dept_id", type = Condition.ConditionType.dataScope)
private transient Map sqlParam;
public Map getSqlParam()
diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/config/MybatisPlusMapperRefresh.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/config/MybatisPlusMapperRefresh.java
deleted file mode 100644
index ecdb897..0000000
--- a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/config/MybatisPlusMapperRefresh.java
+++ /dev/null
@@ -1,275 +0,0 @@
-package com.chushang.common.mybatis.config;
-
-import com.baomidou.mybatisplus.core.config.GlobalConfig;
-import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
-import com.baomidou.mybatisplus.core.toolkit.SystemClock;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.binding.MapperRegistry;
-import org.apache.ibatis.builder.xml.XMLMapperBuilder;
-import org.apache.ibatis.builder.xml.XMLMapperEntityResolver;
-import org.apache.ibatis.executor.ErrorContext;
-import org.apache.ibatis.executor.keygen.SelectKeyGenerator;
-import org.apache.ibatis.io.Resources;
-import org.apache.ibatis.mapping.MappedStatement;
-import org.apache.ibatis.parsing.XNode;
-import org.apache.ibatis.parsing.XPathParser;
-import org.apache.ibatis.session.Configuration;
-import org.apache.ibatis.session.SqlSessionFactory;
-import org.springframework.core.io.FileSystemResource;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.UrlResource;
-import org.springframework.util.ResourceUtils;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.*;
-
-import static java.lang.Thread.sleep;
-
-/**
- * Mybatis 映射文件热加载(发生变动后自动重新加载).
- * 方便开发时使用,不用每次修改xml文件后都要去重启应用.
- */
-@Slf4j
-public class MybatisPlusMapperRefresh implements Runnable {
- /**
- * 记录jar包存在的mapper
- */
- private static final Map> jarMapper = new HashMap<>();
- private final SqlSessionFactory sqlSessionFactory;
- private final Resource[] mapperLocations;
- private volatile Long beforeTime = 0L;
- private Configuration configuration;
- /**
- * xml文件目录
- */
- private Set fileSet;
- /**
- * 延迟加载时间
- */
- private int delaySeconds = 10;
- /**
- * 刷新间隔时间
- */
- private int sleepSeconds = 20;
- private boolean refreshMapper;
-
- public MybatisPlusMapperRefresh(Resource[] mapperLocations, SqlSessionFactory sqlSessionFactory, int delaySeconds,
- int sleepSeconds, boolean refreshMapper) {
- this.mapperLocations = mapperLocations.clone();
- this.sqlSessionFactory = sqlSessionFactory;
- this.delaySeconds = delaySeconds;
- this.sleepSeconds = sleepSeconds;
- this.configuration = sqlSessionFactory.getConfiguration();
- this.refreshMapper = refreshMapper;
- this.run();
- }
-
- public MybatisPlusMapperRefresh(Resource[] mapperLocations, SqlSessionFactory sqlSessionFactory) {
- this.mapperLocations = mapperLocations.clone();
- this.sqlSessionFactory = sqlSessionFactory;
- this.configuration = sqlSessionFactory.getConfiguration();
- this.run();
- }
-
- @Override
- public void run() {
- /*
- */
- if (refreshMapper) {
- beforeTime = SystemClock.now();
- final MybatisPlusMapperRefresh runnable = this;
- new Thread(() -> {
- if (fileSet == null) {
- fileSet = new HashSet<>();
- if (mapperLocations != null) {
- for (Resource mapperLocation : mapperLocations) {
- try {
- if (ResourceUtils.isJarURL(mapperLocation.getURL())) {
- String key = new UrlResource(
- ResourceUtils.extractJarFileURL(mapperLocation.getURL())).getFile()
- .getPath();
- fileSet.add(key);
- if (jarMapper.get(key) != null) {
- jarMapper.get(key).add(mapperLocation);
- } else {
- List resourcesList = new ArrayList<>();
- resourcesList.add(mapperLocation);
- jarMapper.put(key, resourcesList);
- }
- } else {
- fileSet.add(mapperLocation.getFile().getPath());
- }
- } catch (IOException ioException) {
- ioException.printStackTrace();
- }
- }
- }
- }
- try {
- sleep(delaySeconds * 1000L);
- } catch (InterruptedException interruptedException) {
- interruptedException.printStackTrace();
- }
- do {
- try {
- for (String filePath : fileSet) {
- File file = new File(filePath);
- if (file.isFile() && file.lastModified() > beforeTime) {
- // 记录上次重新加载时间防止重复加载已经重载的文件
- beforeTime = file.lastModified();
- List removeList = jarMapper.get(filePath);
- if (removeList != null && !removeList.isEmpty()) {
- for (Resource resource : removeList) {
- runnable.refresh(resource);
- }
- } else {
- runnable.refresh(new FileSystemResource(file));
- }
- }
- }
- } catch (Exception exception) {
- exception.printStackTrace();
- }
- try {
- sleep(sleepSeconds * 1000L);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- } while (true);
- }, "mybatis-plus MapperRefresh").start();
- }
- }
-
- /**
- * 刷新mapper
- *
- * @throws Exception
- */
- @SuppressWarnings("rawtypes")
- private void refresh(Resource resource)
- throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
- this.configuration = sqlSessionFactory.getConfiguration();
- boolean isSupper = configuration.getClass().getSuperclass() == Configuration.class;
- try {
- Field loadedResourcesField = isSupper
- ? configuration.getClass().getSuperclass().getDeclaredField("loadedResources")
- : configuration.getClass().getDeclaredField("loadedResources");
- loadedResourcesField.setAccessible(true);
- Set loadedResourcesSet = ((Set) loadedResourcesField.get(configuration));
- XPathParser xPathParser = new XPathParser(resource.getInputStream(), true, configuration.getVariables(),
- new XMLMapperEntityResolver());
- XNode context = xPathParser.evalNode("/mapper");
- String namespace = context.getStringAttribute("namespace");
- Field field = MapperRegistry.class.getDeclaredField("knownMappers");
- field.setAccessible(true);
- Map mapConfig = (Map) field.get(configuration.getMapperRegistry());
-
- mapConfig.remove(Resources.classForName(namespace));
- loadedResourcesSet.remove(resource.toString());
- configuration.getCacheNames().remove(namespace);
-
- cleanParameterMap(context.evalNodes("/mapper/parameterMap"), namespace);
- cleanResultMap(context.evalNodes("/mapper/resultMap"), namespace);
- cleanKeyGenerators(context.evalNodes("insert|update|select|delete"), namespace);
- cleanSqlElement(context.evalNodes("/mapper/sql"), namespace);
- XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(resource.getInputStream(),
- sqlSessionFactory.getConfiguration(), resource.toString(),
- sqlSessionFactory.getConfiguration().getSqlFragments());
- xmlMapperBuilder.parse();
- log.debug("refresh: '" + resource + "', success!");
- } catch (IOException e) {
- log.error("Refresh IOException :" + e.getMessage());
- } finally {
- ErrorContext.instance().reset();
- }
- }
-
- /**
- * 清理parameterMap
- *
- * @param list
- * @param namespace
- */
- private void cleanParameterMap(List list, String namespace) {
- for (XNode parameterMapNode : list) {
- String id = parameterMapNode.getStringAttribute("id");
- configuration.getParameterMaps().remove(String.format("%s.%s", namespace, id));
- }
- }
-
- /**
- * 清理resultMap
- *
- * @param list
- * @param namespace
- */
- private void cleanResultMap(List list, String namespace) {
- for (XNode resultMapNode : list) {
- String id = resultMapNode.getStringAttribute("id", resultMapNode.getValueBasedIdentifier());
- configuration.getResultMapNames().remove(id);
- configuration.getResultMapNames().remove(namespace + "." + id);
- clearResultMap(resultMapNode, namespace);
- }
- }
-
- private void clearResultMap(XNode xNode, String namespace) {
- for (XNode resultChild : xNode.getChildren()) {
- if ("association".equals(resultChild.getName()) || "collection".equals(resultChild.getName())
- || "case".equals(resultChild.getName())) {
- if (resultChild.getStringAttribute("select") == null) {
- configuration.getResultMapNames()
- .remove(resultChild.getStringAttribute("id", resultChild.getValueBasedIdentifier()));
- configuration.getResultMapNames().remove(namespace + "."
- + resultChild.getStringAttribute("id", resultChild.getValueBasedIdentifier()));
- if (resultChild.getChildren() != null && !resultChild.getChildren().isEmpty()) {
- clearResultMap(resultChild, namespace);
- }
- }
- }
- }
- }
-
- /**
- * 清理selectKey
- *
- * @param list
- * @param namespace
- */
- private void cleanKeyGenerators(List list, String namespace) {
- for (XNode context : list) {
- String id = context.getStringAttribute("id");
- configuration.getKeyGeneratorNames().remove(id + SelectKeyGenerator.SELECT_KEY_SUFFIX);
- configuration.getKeyGeneratorNames().remove(namespace + "." + id + SelectKeyGenerator.SELECT_KEY_SUFFIX);
-
- Collection mappedStatements = configuration.getMappedStatements();
- List objects = new ArrayList<>();
- for (Object object : mappedStatements) {
- if (object instanceof MappedStatement) {
- MappedStatement mappedStatement = (MappedStatement) object;
- if (mappedStatement.getId().equals(namespace + "." + id)) {
- objects.add(mappedStatement);
- }
- }
- }
- mappedStatements.removeAll(objects);
- }
- }
-
- /**
- * 清理sql节点缓存
- *
- * @param list
- * @param namespace
- */
- private void cleanSqlElement(List list, String namespace) {
- for (XNode context : list) {
- String id = context.getStringAttribute("id");
- configuration.getSqlFragments().remove(id);
- configuration.getSqlFragments().remove(namespace + "." + id);
- }
- }
-}
-
-
diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/config/MybatisPlusMetaObjectHandler.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/config/MybatisPlusMetaObjectHandler.java
index 2d4943e..c738796 100644
--- a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/config/MybatisPlusMetaObjectHandler.java
+++ b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/config/MybatisPlusMetaObjectHandler.java
@@ -26,9 +26,8 @@ public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
LocalDateTime now = LocalDateTime.now();
// 修改人, 创建人
Long userId = SecurityContextHolder.getUserId();
- fillValIfNullByName("createBy", userId, metaObject, true);
+ fillValIfNullByName("createBy", userId, metaObject, false);
fillValIfNullByName("createTime", now, metaObject, false);
- fillValIfNullByName("updateTime", now, metaObject, false);
}
@Override
diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/exception/MybatisConditionException.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/exception/MybatisConditionException.java
new file mode 100644
index 0000000..6c32c20
--- /dev/null
+++ b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/exception/MybatisConditionException.java
@@ -0,0 +1,32 @@
+package com.chushang.common.mybatis.exception;
+
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+
+/**
+ * @auther: zhao
+ * @date: 2024/6/15 11:47
+ */
+@NoArgsConstructor
+public class MybatisConditionException extends RuntimeException{
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ public MybatisConditionException(String message) {
+ super(message);
+ }
+
+ public MybatisConditionException(Throwable cause) {
+ super(cause);
+ }
+
+ public MybatisConditionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public MybatisConditionException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+}
diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/utils/WrapperUtils.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/utils/WrapperUtils.java
new file mode 100644
index 0000000..6c20ea2
--- /dev/null
+++ b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/utils/WrapperUtils.java
@@ -0,0 +1,92 @@
+package com.chushang.common.mybatis.utils;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.ReflectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.chushang.common.mybatis.annotation.Condition;
+import com.chushang.common.mybatis.base.BaseEntity;
+import com.chushang.common.mybatis.exception.MybatisConditionException;
+import com.chushang.common.mybatis.page.CommonParam;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+import java.lang.reflect.Field;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class WrapperUtils {
+
+ public static LambdaQueryWrapper builder(T table, Object query, CommonParam commonParam, String... columns) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ if (null != columns) {
+ queryWrapper = queryWrapper.select(columns);
+ }
+ // 构造Wrapper
+ queryWrapper = queryWrapper
+ .orderBy(true, "asc".equals(commonParam.getIsAsc()), commonParam.getOrderBy());
+ if (query == null) {
+ return queryWrapper.lambda();
+ }
+ // 获取注解
+ Field[] fields = ReflectUtil.getFields(query.getClass(), field -> field.isAnnotationPresent(Condition.class));
+
+ if (ArrayUtil.isEmpty(fields)) {
+ return queryWrapper.lambda();
+ }
+
+ for (Field field : fields) {
+ Condition condition = field.getAnnotation(Condition.class);
+ Object value = ReflectUtil.getFieldValue(query, field);
+
+ if (ObjectUtil.isEmpty(value)) {
+ continue;
+ }
+ String name = condition.name();
+ switch (condition.type()) {
+ case eq:
+ queryWrapper = queryWrapper.eq(ObjectUtil.isNotEmpty(value), name, value);
+ break;
+ case like:
+ queryWrapper = queryWrapper.like(ObjectUtil.isNotEmpty(value), name, value);
+ break;
+ case in:
+ if (value instanceof Collection>) {
+ queryWrapper = queryWrapper.in(ObjectUtil.isNotEmpty(value), name, (Collection) value);
+ } else {
+ throw new MybatisConditionException("in 条件必须为集合");
+ }
+ break;
+ case between:
+ if (value instanceof Collection>) {
+ List> list = Convert.toList(value);
+ if (CollUtil.size(list) == 2) {
+ queryWrapper = queryWrapper.between(name, list.get(0), list.get(1));
+ }
+ } else {
+ throw new MybatisConditionException("between 条件必须为集合");
+ }
+ break;
+ case likeLeft:
+ queryWrapper = queryWrapper.likeLeft(ObjectUtil.isNotEmpty(value), name, value);
+ break;
+ case dataScope:
+ if (value instanceof HashMap sqlParam) {
+ // dataScope 的 拼接部门Ids
+ Object dataScope = sqlParam.get("dataScopeIds");
+ if (ObjectUtil.isNotEmpty(dataScope) && dataScope instanceof Collection> deptIds) {
+ queryWrapper = queryWrapper.in(CollectionUtil.isNotEmpty(deptIds), name, deptIds);
+ }
+ }
+ }
+ }
+ return queryWrapper.lambda();
+ }
+}
diff --git a/chushang-common/chushang-common-security/src/main/java/com/chushang/security/utils/SecurityUtils.java b/chushang-common/chushang-common-security/src/main/java/com/chushang/security/utils/SecurityUtils.java
index fc1988f..ae48471 100644
--- a/chushang-common/chushang-common-security/src/main/java/com/chushang/security/utils/SecurityUtils.java
+++ b/chushang-common/chushang-common-security/src/main/java/com/chushang/security/utils/SecurityUtils.java
@@ -17,7 +17,7 @@ import java.util.Set;
*
* @author ruoyi
*/
-public class SecurityUtils
+public class SecurityUtils
{
public static final String PA_SA = "%s:%s";
/**