Explorar el Código

将数据同步的注解提取到common-message

xiari hace 1 año
padre
commit
2826ea5eb4

+ 3 - 1
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteSyncToLocalByKafkaService.java

@@ -1,7 +1,9 @@
 package org.dromara.backstage.api;
 
+import org.dromara.backstage.api.domain.bo.MessageBo;
+
 public interface RemoteSyncToLocalByKafkaService {
 
     public void sendAndInsert(String topic,Long createBy,
-                              String sender,String eventType,String tenantId,Object data);
+                              MessageBo<?> data);
 }

+ 33 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/MessageBo.java

@@ -0,0 +1,33 @@
+package org.dromara.backstage.api.domain.bo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+@Data
+public class MessageBo<T> implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 7453594002298127951L;
+
+    private T body;
+
+    private KafkaHeader header=new KafkaHeader();
+
+    @Data
+    public static class KafkaHeader implements Serializable {
+
+        @Serial
+        private static final long serialVersionUID = 8057319609248473385L;
+        private String eventType;
+
+        private String sender;
+
+        private String tenantId;
+        private long timestamp;
+        private String eventId;
+
+    }
+}
+
+

+ 24 - 15
ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/aop/aspect/SyncDataToLocalAspect.java

@@ -17,6 +17,7 @@ import org.dromara.common.message.kafka.constant.KafkaTopicConstants;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.api.model.LoginUser;
 import org.springframework.stereotype.Component;
+import org.dromara.backstage.api.domain.bo.MessageBo;
 
 import java.lang.reflect.Field;
 import java.util.HashMap;
@@ -57,12 +58,12 @@ public class SyncDataToLocalAspect {
 
     }
 
-    /*private void sendSyncMessage(JoinPoint joinPoint, SyncDataToLocal controllerSyncData2Local) {
+    private void sendSyncMessage(JoinPoint joinPoint, SyncDataToLocal controllerSyncData2Local) {
         try {
-            KafkaMessage<Object> data = new KafkaMessage<>();
-            KafkaHeader header = data.getHeader();
-            header.setTimestamp(System.currentTimeMillis());
-            header.setEventId(UUID.randomUUID().toString());
+            MessageBo<Object> data = new MessageBo<>();
+            MessageBo.KafkaHeader header = data.getHeader();
+//            header.setTimestamp(System.currentTimeMillis());
+//            header.setEventId(UUID.randomUUID().toString());
             header.setEventType(controllerSyncData2Local.eventType());
             header.setSender(controllerSyncData2Local.sender());
             String sender = header.getSender();
@@ -72,18 +73,26 @@ public class SyncDataToLocalAspect {
             }
             String tenantId = header.getTenantId();
             if(StringUtils.isBlank(tenantId)){
-                header.setTenantId(LoginHelper.getTenantId());
+                tenantId = LoginHelper.getTenantId();
+                header.setTenantId(tenantId);
             }
 
             Object[] args = joinPoint.getArgs();
             int length = args.length;
             if(length == 1){
-                if(args[0] instanceof TenantEntity r){
-                    r.setTenantId(header.getTenantId());
-                    data.setBody(r);
-                }else{
-                    data.setBody(args[0]);
+                Field tenantIdFiled = null;
+                //利用反射 判断是否有 tenantId属性,如果有则设置
+                try {
+                    tenantIdFiled = ReflectUtil.getField(args[0].getClass(), "tenantId");
+                }catch (Exception e){
+                    log.error("参数对象没有tenantId属性!");
                 }
+//                Field tenantIdFiled = args[0].getClass().getDeclaredField("tenantId");
+                if(tenantIdFiled != null){
+                    tenantIdFiled.setAccessible(true);
+                    tenantIdFiled.set(args[0],tenantId);
+                }
+                data.setBody(args[0]);
             }else if(length >1){
                 CodeSignature signature = (CodeSignature) joinPoint.getSignature();
                 String[] paramNames = signature.getParameterNames();
@@ -98,13 +107,13 @@ public class SyncDataToLocalAspect {
             }
             LoginUser loginUser = LoginHelper.getLoginUser();
 
-            kafkaProducer.sendKafkaMessage(KafkaTopicConstants.SYNC_DATA_TOPIC, loginUser.getUserId(),data);
+            kafkaProducer.sendAndInsert(KafkaTopicConstants.SYNC_DATA_TOPIC, loginUser.getUserId(),data);
         }catch (Exception e){
             log.error("同步数据消息未发送:发送消息异常!", e);
         }
-    }*/
+    }
 
-    private void sendSyncMessage(JoinPoint joinPoint, SyncDataToLocal dataToLocal) {
+   /* private void sendSyncMessage(JoinPoint joinPoint, SyncDataToLocal dataToLocal) {
         try {
             String tenantId = LoginHelper.getTenantId();
             Object data = null;
@@ -140,7 +149,7 @@ public class SyncDataToLocalAspect {
         }catch (Exception e){
             log.error("同步数据消息未发送:发送消息异常!", e);
         }
-    }
+    }*/
 
 
 }

+ 7 - 6
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/dubbo/RemoteSyncToLocalByKafkaServiceImpl.java

@@ -6,6 +6,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.aspectj.lang.reflect.CodeSignature;
 import org.dromara.backstage.api.RemoteSyncToLocalByKafkaService;
+import org.dromara.backstage.api.domain.bo.MessageBo;
 import org.dromara.backstage.mq.KafkaNormalProducer;
 import org.dromara.common.message.kafka.domain.KafkaHeader;
 import org.dromara.common.message.kafka.domain.KafkaMessage;
@@ -30,16 +31,16 @@ public class RemoteSyncToLocalByKafkaServiceImpl implements RemoteSyncToLocalByK
 
 
     @Override
-    public void sendAndInsert(String topic, Long createBy, String sender, String eventType,
-                              String tenantId, Object data) {
+    public void sendAndInsert(String topic, Long createBy, MessageBo<?> data) {
         KafkaMessage<Object> message = new KafkaMessage<>();
         KafkaHeader header = message.getHeader();
         header.setTimestamp(System.currentTimeMillis());
         header.setEventId(UUID.randomUUID().toString());
-        header.setEventType(eventType);
-        header.setSender(sender);
-        header.setTenantId(tenantId);
-        message.setBody(data);
+        MessageBo.KafkaHeader dataHeader = data.getHeader();
+        header.setEventType(dataHeader.getEventType());
+        header.setSender(dataHeader.getSender());
+        header.setTenantId(dataHeader.getTenantId());
+        message.setBody(data.getBody());
         kafkaProducer.sendKafkaMessage(topic,createBy,message);
     }
 }

+ 0 - 1
ruoyi-modules/ruoyi-backstage/src/main/resources/security/serialize.allowlist

@@ -1 +0,0 @@
-org.dromara.backstage.basics.domain.bo.*

+ 5 - 0
ruoyi-modules/ruoyi-system/pom.xml

@@ -136,6 +136,11 @@
             <version>2.2.0</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-message</artifactId>
+            <version>${revision}</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 3 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java

@@ -17,6 +17,8 @@ import org.dromara.common.excel.core.ExcelResult;
 import org.dromara.common.excel.utils.ExcelUtil;
 import org.dromara.common.log.annotation.Log;
 import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.satoken.utils.LoginHelper;
@@ -151,6 +153,7 @@ public class SysUserController extends BaseController {
      */
     @SaCheckPermission("system:user:add")
     @Log(title = "用户管理", businessType = BusinessType.INSERT)
+    @SyncDataToLocal(eventType = MessageEventTypeConstants.user_ADD,sender = MessageEventTypeConstants.USER_ACCOUNT_SENDER)
     @PostMapping
     public R<Void> add(@Validated @RequestBody SysUserBo user) {
         deptService.checkDeptDataScope(user.getDeptId());

+ 5 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java

@@ -17,8 +17,10 @@ import org.dromara.common.encrypt.enumd.AlgorithmType;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.sensitive.annotation.Sensitive;
 import org.dromara.common.sensitive.core.SensitiveStrategy;
+import org.dromara.common.tenant.core.TenantEntity;
 import org.dromara.system.domain.SysUser;
 
+import java.io.Serial;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -33,8 +35,10 @@ import java.util.List;
 @NoArgsConstructor
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = SysUser.class, reverseConvertGenerate = false)
-public class SysUserBo extends BaseEntity {
+public class SysUserBo extends TenantEntity {
 
+    @Serial
+    private static final long serialVersionUID = 3998379076407791877L;
     /**
      * 用户ID
      */