Selaa lähdekoodia

1. 增加数据保存时审计信息自动赋值公共处理 - 使用拦截器方式,删除mybatisplus专有注解处理。
2. 增加消息队列同步消息发送方法。

yucheng 3 vuotta sitten
vanhempi
commit
8e181243fb

+ 7 - 66
dc-business/dc-dictionary/src/main/java/com/persagy/dc/dic/entity/DictType.java

@@ -1,14 +1,8 @@
 package com.persagy.dc.dic.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.persagy.dc.common.lang.PsDateTime;
-import com.persagy.dc.common.model.entity.BaseEntity;
+import com.persagy.dc.common.model.entity.AuditableEntity;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-import com.persagy.common.utils.IdGenerator;
 
 /**
  * 字典类型
@@ -16,76 +10,23 @@ import com.persagy.common.utils.IdGenerator;
  * @since 2021/06/10
  */
 @Data
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
 @TableName("dic_dt_type")
-public class DictType {
+public class DictType extends AuditableEntity {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 主键
-     */
-    @TableId(value = "id", type = IdType.ASSIGN_ID)
-    private String id;
-
-    /**
-     * 集团编码
-     */
-    @TableId(value = "group_code")
+    /** 集团编码 */
     private String groupCode;
 
-    /**
-     * 字典类型
-     */
-    @TableId(value = "type")
+    /** 字典类型 */
     private String type;
 
-    /**
-     * 字典类型名称
-     */
-    @TableId(value = "name")
+    /** 字典类型名称 */
     private String name;
 
-    /**
-     * 描述
-     */
-    @TableId(value = "description")
+    /** 描述 */
     private String description;
 
-    /**
-     * 状态 0:停用,1:正常
-     */
-    @TableId(value = "status")
-    private String status;
-
-    /**
-     *  创建时间
-     */
-    @TableId(value = "create_time")
-    private PsDateTime createTime;
-
-    /**
-     *  创建用户
-     */
-    @TableId(value = "create_user")
-    private String createUser;
-
-    /**
-     *  更新时间
-     */
-    @TableId(value = "update_time")
-    private PsDateTime updateTime;
-
-    /**
-     *  更新用户
-     */
-    @TableId(value = "update_user")
-    private String updateUser;
-
-    /**
-     *  备注
-     */
-    @TableId(value = "remark")
+    /** 备注 */
     private String remark;
 }

+ 3 - 5
dc-business/dc-dictionary/src/main/java/com/persagy/dc/dic/service/impl/DictTypeServiceImpl.java

@@ -1,8 +1,8 @@
 package com.persagy.dc.dic.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.persagy.common.utils.IdGenerator;
+import com.persagy.dc.common.constant.ValidEnum;
 import com.persagy.dc.dic.dao.DictTypeMapper;
 import com.persagy.dc.dic.entity.DictType;
 import com.persagy.dc.dic.service.DictTypeService;
@@ -30,7 +30,7 @@ public class DictTypeServiceImpl implements DictTypeService {
     @Override
     public DictType create(DictType dictType) {
         dictType.setId(IdGenerator.getUUID());
-        dictType.setStatus("1");
+        dictType.setValid(ValidEnum.TRUE.getType());
         dictTypeMapper.insert(dictType);
         return dictType;
     }
@@ -53,7 +53,7 @@ public class DictTypeServiceImpl implements DictTypeService {
      */
     @Override
     public DictType delete(DictType dictType) {
-        dictType.setStatus("0");
+        dictType.setValid(ValidEnum.FALSE.getType());
         dictTypeMapper.updateById(dictType);
         return dictType;
     }
@@ -70,6 +70,4 @@ public class DictTypeServiceImpl implements DictTypeService {
         List<DictType> dictTypes = dictTypeMapper.selectList(queryWrapper);
         return dictTypes;
     }
-
-
 }

+ 0 - 5
dc-business/dc-dictionary/src/main/resources/mapper/DictTypeMapper.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.dc.dic.dao.DictTypeMapper">
-
-</mapper>

+ 0 - 5
dc-common/src/main/java/com/persagy/dc/common/model/entity/AuditableEntity.java

@@ -1,12 +1,9 @@
 package com.persagy.dc.common.model.entity;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.persagy.dc.common.lang.PsDateTime;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
-import java.util.Date;
-
 /**
  * 审计信息父类
  * @author Charlie Yu
@@ -33,12 +30,10 @@ public abstract class AuditableEntity<T> extends BaseEntity<T> implements IAudit
     /** 最后一个修改人 */
     public static final String PROP_MODIFIER = "modifier";
 
-    @JsonIgnore
     protected PsDateTime creationTime;
 
     protected String creator;
 
-    @JsonIgnore
     protected PsDateTime modifiedTime;
 
     protected String modifier;

+ 3 - 4
dc-common/src/main/java/com/persagy/dc/common/model/entity/BaseEntity.java

@@ -7,7 +7,6 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.io.Serializable;
-import java.util.Date;
 
 /**
  * 实体基类
@@ -32,13 +31,13 @@ public abstract class BaseEntity<T> implements IBaseEntity,Serializable,Cloneabl
 	/** hash码 */
 	@Getter(AccessLevel.NONE)
 	@Setter(AccessLevel.NONE)
-	private int hashCode = Integer.MIN_VALUE;
+	private transient int hashCode = Integer.MIN_VALUE;
 
 	/** 实体类必须有的属性 */
 	protected String id;
 
-	/** 时间戳 */
-	protected PsDateTime ts;
+	/** 时间戳 - 数据库自更新属性,与审计信息不同,审计信息是业务触发更新,ts是随数据更新 */
+	protected transient PsDateTime ts;
 
 	/** 实体状态 - 有效标识 */
 	protected Integer valid;

+ 4 - 6
dc-common/src/main/java/com/persagy/dc/common/model/entity/IAuditableEntity.java

@@ -2,8 +2,6 @@ package com.persagy.dc.common.model.entity;
 
 import com.persagy.dc.common.lang.PsDateTime;
 
-import java.util.Date;
-
 /**
  * 审计信息类接口
  * @author Charlie Yu
@@ -19,9 +17,9 @@ public interface IAuditableEntity extends IBaseEntity {
 
 	/**
 	 * 设置创建时间,记录插入时有效
-	 * @param creationtime 创建时间
+	 * @param creationTime 创建时间
 	 */
-	void setCreationTime(PsDateTime creationtime);
+	void setCreationTime(PsDateTime creationTime);
 
 	/**
 	 * 取得创建实体的操作员的登录名
@@ -43,9 +41,9 @@ public interface IAuditableEntity extends IBaseEntity {
 
 	/**
 	 * 设置最后修改时间.记录更新时有效
-	 * @param modifiedtime 最后修改时间
+	 * @param modifiedTime 最后修改时间
 	 */
-	void setModifiedTime(PsDateTime modifiedtime);
+	void setModifiedTime(PsDateTime modifiedTime);
 
 	/**
 	 * 取得最后修改的操作员的登录名.

+ 20 - 6
dc-comp/dc-amqp-starter/src/main/java/com/persagy/dc/amqp/handler/RabbitMessageSender.java

@@ -1,7 +1,6 @@
 package com.persagy.dc.amqp.handler;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,21 +27,36 @@ public class RabbitMessageSender {
     private Set<String> disableKeys;
 
     /**
-     * 发送消息
+     * 发送异步消息
      * @param exchange 发送的交换机
      * @param routingKey 路由Key
-     * @param message
+     * @param message 消息体
      */
     public void send(String exchange, String routingKey, String message) {
         log.info("开始发送消息,routingKey={},message={}", routingKey, message);
         // 配置了不发此类消息
-        if(CollUtil.isNotEmpty(disableKeys) &&
-                StrUtil.isNotBlank(routingKey) &&
-                disableKeys.contains(routingKey)) {
+        if(CollUtil.contains(disableKeys, routingKey)) {
             return;
         }
         // 发送 异常不捕获直接抛出
         rabbitTemplate.convertAndSend(exchange, routingKey, message);
         log.info("消息发送成功,routingKey={}", routingKey);
     }
+
+    /**
+     * 发送同步消息
+     * @param exchange 发送的交换机
+     * @param routingKey 路由Key
+     * @param message 消息体
+     */
+    public void sendAndReceive(String exchange, String routingKey, String message) {
+        log.info("开始发送消息,routingKey={},message={}", routingKey, message);
+        // 配置了不发此类消息
+        if(CollUtil.contains(disableKeys, routingKey)) {
+            return;
+        }
+        // 发送 异常不捕获直接抛出
+        rabbitTemplate.convertSendAndReceive(exchange, routingKey, message);
+        log.info("消息发送成功,routingKey={}", routingKey);
+    }
 }

+ 1 - 1
dc-comp/dc-mybatis/src/main/java/com/persagy/dc/mybatis/aop/FormatMybatisQueryParamsAspect.java

@@ -14,7 +14,6 @@ import java.lang.reflect.Method;
 
 /**
  * 格式化mybatis请求参数切面
- *
  * @author lixing
  * @version V1.0 2021/4/23 4:00 下午
  **/
@@ -22,6 +21,7 @@ import java.lang.reflect.Method;
 @Aspect
 @Slf4j
 public class FormatMybatisQueryParamsAspect {
+
     @Pointcut("@annotation(com.persagy.dc.mybatis.annotations.FormatMybatisQueryParams)")
     private void pointCutMethod() {
     }

+ 1 - 1
dc-comp/dc-mybatis/src/main/java/com/persagy/dc/mybatis/config/MyBatisWebConfigurer.java

@@ -8,7 +8,7 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 /**
- * MyBatis配置
+ * MyBatis服务拦截器
  * @author Charlie Yu
  * @date 2021-03-29
  */

+ 4 - 15
dc-comp/dc-mybatis/src/main/java/com/persagy/dc/mybatis/config/MybatisPlusConfig.java

@@ -1,6 +1,5 @@
 package com.persagy.dc.mybatis.config;
 
-import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer;
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
 import org.mybatis.spring.annotation.MapperScan;
@@ -9,10 +8,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 /**
- * <p>
- * MybatisPlusConfig
- * </p>
- *
+ * MybatisPlus公共配置
  * @author lixing
  * @description 由 Mybatisplus Code Generator 创建
  * @since 2020-09-09 09:13:27
@@ -21,17 +17,10 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @Configuration
 @EnableTransactionManagement
 public class MybatisPlusConfig {
+
     /**
-     * @param
-     * @description:配置分页插件 不配置分页插件,MP提供的分页方法会查询全部,分页不生效
-     * 使用实例:
-     * IPage<Member> memberPage = new Page<>(1, 2,false) true查询总记录数量
-     * @exception:
-     * @author: LuoGuangyi
-     * @company: Persagy Technology Co.,Ltd
-     * @return: com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
-     * @since: 2020/09/30 10:33
-     * @version: V1.0
+     * 注册分页插件
+     * 使用示例: IPage<Member> memberPage = new Page<>(1, 2,false) true查询总记录数量
      */
     @Bean
     public PaginationInterceptor paginationInterceptor() {

+ 50 - 0
dc-comp/dc-mybatis/src/main/java/com/persagy/dc/mybatis/handler/AuditInfoHandler.java

@@ -0,0 +1,50 @@
+package com.persagy.dc.mybatis.handler;
+
+import com.persagy.dc.common.context.AppContext;
+import com.persagy.dc.common.lang.PsDateTime;
+import com.persagy.dc.common.model.entity.AuditableEntity;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.executor.Executor;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.SqlCommandType;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Intercepts;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Signature;
+import org.springframework.stereotype.Component;
+
+/**
+ * 审计信息拦截器
+ * 保存前审计信息赋值公共处理
+ * @author Charlie Yu
+ * @date 2021-06-16
+ */
+@Slf4j
+@Component
+@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
+public class AuditInfoHandler implements Interceptor {
+
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
+        SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
+        // 新增/修改时才需要处理
+        if(SqlCommandType.INSERT != sqlCommandType && SqlCommandType.UPDATE != sqlCommandType) {
+            return invocation.proceed();
+        }
+        Object parameter = invocation.getArgs()[1];
+        // 只处理审计对象
+        if (parameter == null || !(parameter instanceof AuditableEntity)) {
+            return invocation.proceed();
+        }
+        AuditableEntity entity = (AuditableEntity) parameter;
+        if (SqlCommandType.INSERT == sqlCommandType || SqlCommandType.UPDATE == sqlCommandType) {
+            entity.setCreator(AppContext.getContext().getAccountId());
+            entity.setCreationTime(new PsDateTime());
+        } else {
+            entity.setModifier(AppContext.getContext().getAccountId());
+            entity.setModifiedTime(new PsDateTime());
+        }
+        return invocation.proceed();
+    }
+}

+ 0 - 42
dc-comp/dc-mybatis/src/main/java/com/persagy/dc/mybatis/handler/CommonMetaObjectHandler.java

@@ -1,42 +0,0 @@
-package com.persagy.dc.mybatis.handler;
-
-import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
-import com.persagy.dc.common.constant.ValidEnum;
-import com.persagy.dc.common.lang.PsDateTime;
-import com.persagy.dc.common.model.entity.AuditableEntity;
-import com.persagy.dc.common.model.entity.BaseEntity;
-import org.apache.ibatis.reflection.MetaObject;
-import org.springframework.stereotype.Component;
-
-import java.util.Date;
-
-/**
- * @description:
- * @author: lixing
- * @company: Persagy Technology Co.,Ltd
- * @since: 2020/9/9 2:10 下午
- * @version: V1.0
- **/
-@Component
-public class CommonMetaObjectHandler implements MetaObjectHandler {
-
-    @Override
-    public void insertFill(MetaObject metaObject) {
-        if (metaObject.hasSetter(AuditableEntity.DO_PROP_CREATIONTIME)) {
-            this.setFieldValByName(AuditableEntity.DO_PROP_CREATIONTIME, new PsDateTime(), metaObject);
-        }
-        if (metaObject.hasSetter(AuditableEntity.DO_PROP_MODIFIEDTIME)) {
-            this.setFieldValByName(AuditableEntity.DO_PROP_MODIFIEDTIME, new PsDateTime(), metaObject);
-        }
-        if (metaObject.hasSetter(BaseEntity.PROP_VALID)) {
-            this.setFieldValByName(BaseEntity.PROP_VALID, ValidEnum.TRUE.getType(), metaObject);
-        }
-    }
-
-    @Override
-    public void updateFill(MetaObject metaObject) {
-        if (metaObject.hasSetter(AuditableEntity.DO_PROP_MODIFIEDTIME)) {
-            this.setFieldValByName(AuditableEntity.DO_PROP_MODIFIEDTIME, new PsDateTime(), metaObject);
-        }
-    }
-}