ソースを参照

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

xiari 1 年間 前
コミット
b529060508
17 ファイル変更138 行追加33 行削除
  1. 7 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteSyncToLocalByKafkaService.java
  2. 22 0
      ruoyi-common/ruoyi-common-message/pom.xml
  3. 1 1
      ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/aop/annotation/SyncDataToLocal.java
  4. 49 9
      ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/aop/aspect/SyncDataToLocalAspect.java
  5. 1 0
      ruoyi-common/ruoyi-common-message/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  6. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtAccountController.java
  7. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtAreaController.java
  8. 1 2
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtMealtypeController.java
  9. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtParameterController.java
  10. 1 5
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtRoomController.java
  11. 2 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtAccountBo.java
  12. 1 7
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/KafkaNormalProducer.java
  13. 45 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/dubbo/RemoteSyncToLocalByKafkaServiceImpl.java
  14. 1 3
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java
  15. 2 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/bo/PtUserAccountBo.java
  16. 1 0
      ruoyi-modules/ruoyi-backstage/src/main/resources/security/serialize.allowlist
  17. 1 1
      ruoyi-modules/ruoyi-backstage/src/test/java/org/dromara/backstage/mq/KafkaProducerTest.java

+ 7 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteSyncToLocalByKafkaService.java

@@ -0,0 +1,7 @@
+package org.dromara.backstage.api;
+
+public interface RemoteSyncToLocalByKafkaService {
+
+    public void sendAndInsert(String topic,Long createBy,
+                              String sender,String eventType,String tenantId,Object data);
+}

+ 22 - 0
ruoyi-common/ruoyi-common-message/pom.xml

@@ -17,6 +17,28 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-crypto</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-common-satoken</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo-spring-boot-starter</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-backstage</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/aop/annotation/SyncDataToLocal.java → ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/aop/annotation/SyncDataToLocal.java

@@ -1,4 +1,4 @@
-package org.dromara.backstage.aop.annotation;
+package org.dromara.common.message.kafka.aop.annotation;
 
 import java.lang.annotation.*;
 

+ 49 - 9
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/aop/aspect/SyncDataToLocalAspect.java → ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/aop/aspect/SyncDataToLocalAspect.java

@@ -1,25 +1,24 @@
-package org.dromara.backstage.aop.aspect;
+package org.dromara.common.message.kafka.aop.aspect;
 
 import cn.hutool.core.lang.UUID;
+import cn.hutool.core.util.ReflectUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.reflect.CodeSignature;
-import org.dromara.backstage.aop.annotation.SyncDataToLocal;
-import org.dromara.backstage.mq.KafkaProducer;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
+import org.dromara.backstage.api.RemoteSyncToLocalByKafkaService;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.message.kafka.constant.KafkaTopicConstants;
-import org.dromara.common.message.kafka.domain.KafkaHeader;
-import org.dromara.common.message.kafka.domain.KafkaMessage;
 import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.common.tenant.core.TenantEntity;
 import org.dromara.system.api.model.LoginUser;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.stereotype.Component;
 
+import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -34,7 +33,9 @@ import java.util.Map;
 @Component
 public class SyncDataToLocalAspect {
 
-    private final KafkaProducer kafkaProducer;
+//    private final KafkaNormalProducer kafkaProducer;
+    @DubboReference
+    private final RemoteSyncToLocalByKafkaService kafkaProducer;
 
 
     /**
@@ -56,7 +57,7 @@ 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();
@@ -96,10 +97,49 @@ public class SyncDataToLocalAspect {
                 data.setBody(null);
             }
             LoginUser loginUser = LoginHelper.getLoginUser();
+
             kafkaProducer.sendKafkaMessage(KafkaTopicConstants.SYNC_DATA_TOPIC, loginUser.getUserId(),data);
         }catch (Exception e){
             log.error("同步数据消息未发送:发送消息异常!", e);
         }
+    }*/
+
+    private void sendSyncMessage(JoinPoint joinPoint, SyncDataToLocal dataToLocal) {
+        try {
+            String tenantId = LoginHelper.getTenantId();
+            Object data = null;
+            Object[] args = joinPoint.getArgs();
+            int length = args.length;
+            if(length == 1){
+                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 = args[0];
+            }else if(length >1){
+                CodeSignature signature = (CodeSignature) joinPoint.getSignature();
+                String[] paramNames = signature.getParameterNames();
+                Map<String, Object> params = new HashMap<>();
+                for (int i = 0; i < length; i++) {
+                    params.put(paramNames[i], args[i]);
+                }
+                data = params;
+            }
+            LoginUser loginUser = LoginHelper.getLoginUser();
+
+            kafkaProducer.sendAndInsert(KafkaTopicConstants.SYNC_DATA_TOPIC, loginUser.getUserId(),dataToLocal.sender(),
+                dataToLocal.eventType(), tenantId, data);
+        }catch (Exception e){
+            log.error("同步数据消息未发送:发送消息异常!", e);
+        }
     }
 
 

+ 1 - 0
ruoyi-common/ruoyi-common-message/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -0,0 +1 @@
+org.dromara.common.message.kafka.aop.aspect.SyncDataToLocalAspect

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtAccountController.java

@@ -6,7 +6,7 @@ import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.dromara.backstage.aop.annotation.SyncDataToLocal;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtAreaController.java

@@ -6,7 +6,7 @@ import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.dromara.backstage.aop.annotation.SyncDataToLocal;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;

+ 1 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtMealtypeController.java

@@ -6,8 +6,7 @@ import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.dromara.backstage.aop.annotation.SyncDataToLocal;
-import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtParameterController.java

@@ -6,7 +6,7 @@ import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.dromara.backstage.aop.annotation.SyncDataToLocal;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;

+ 1 - 5
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtRoomController.java

@@ -4,20 +4,16 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.collection.CollectionUtil;
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.apache.commons.collections4.CollectionUtils;
-import org.dromara.backstage.aop.annotation.SyncDataToLocal;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
 import org.dromara.backstage.basics.domain.bo.PtRoomBatchSetBo;
 import org.dromara.backstage.basics.domain.vo.PtAreaVo;
 import org.dromara.backstage.basics.domain.vo.PtRoomTempImportVo;
 import org.dromara.backstage.basics.listener.PtRoomImportListener;
 import org.dromara.common.excel.core.ExcelResult;
-import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;

+ 2 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtAccountBo.java

@@ -8,6 +8,7 @@ import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
+import org.dromara.common.tenant.core.TenantEntity;
 
 /**
  * 结算账户业务对象 t_pt_account
@@ -18,7 +19,7 @@ import jakarta.validation.constraints.*;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = PtAccount.class, reverseConvertGenerate = false)
-public class PtAccountBo extends BaseEntity {
+public class PtAccountBo extends TenantEntity {
 
     /**
      * 结算账户Id,主键

+ 1 - 7
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/KafkaProducer.java → ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/KafkaNormalProducer.java

@@ -1,31 +1,25 @@
 package org.dromara.backstage.mq;
 
-import cn.hutool.core.lang.UUID;
-import com.alibaba.excel.util.StringUtils;
 import com.alibaba.fastjson2.JSON;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.dromara.backstage.basics.domain.bo.SendMessageRecordBo;
 import org.dromara.backstage.basics.service.ISendMessageRecordService;
-import org.dromara.common.json.utils.JsonUtils;
 import org.dromara.common.message.kafka.constant.KafkaTopicConstants;
 import org.dromara.common.message.kafka.domain.KafkaHeader;
 import org.dromara.common.message.kafka.domain.KafkaMessage;
-import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.system.api.model.LoginUser;
 import org.springframework.kafka.core.KafkaTemplate;
 import org.springframework.kafka.support.SendResult;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
-import java.util.List;
 import java.util.concurrent.CompletableFuture;
 
 @RequiredArgsConstructor
 @Slf4j
 @Component
-public class KafkaProducer {
+public class KafkaNormalProducer {
 
     private final KafkaTemplate<String, String> kafkaTemplate;
 

+ 45 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/dubbo/RemoteSyncToLocalByKafkaServiceImpl.java

@@ -0,0 +1,45 @@
+package org.dromara.backstage.mq.dubbo;
+
+import cn.hutool.core.lang.UUID;
+import lombok.RequiredArgsConstructor;
+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.mq.KafkaNormalProducer;
+import org.dromara.common.message.kafka.domain.KafkaHeader;
+import org.dromara.common.message.kafka.domain.KafkaMessage;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.common.tenant.core.TenantEntity;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * 发送Kafka消息并入库
+ * @author : bing
+ */
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemoteSyncToLocalByKafkaServiceImpl implements RemoteSyncToLocalByKafkaService {
+
+    private final KafkaNormalProducer kafkaProducer;
+
+
+    @Override
+    public void sendAndInsert(String topic, Long createBy, String sender, String eventType,
+                              String tenantId, Object 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);
+        kafkaProducer.sendKafkaMessage(topic,createBy,message);
+    }
+}

+ 1 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java

@@ -1,7 +1,6 @@
 package org.dromara.backstage.payment.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.lang.UUID;
 import cn.hutool.core.lang.tree.Tree;
 import jakarta.servlet.http.HttpServletResponse;
@@ -9,7 +8,7 @@ import jakarta.validation.constraints.NotEmpty;
 import jakarta.validation.constraints.NotNull;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboReference;
-import org.dromara.backstage.aop.annotation.SyncDataToLocal;
+import org.dromara.common.message.kafka.aop.annotation.SyncDataToLocal;
 import org.dromara.backstage.cardCenter.domain.bo.PtCardBo;
 import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
 import org.dromara.backstage.cardCenter.service.IPtCardService;
@@ -43,7 +42,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 

+ 2 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/domain/bo/PtUserAccountBo.java

@@ -17,6 +17,7 @@ import java.util.List;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.dromara.common.sensitive.annotation.Sensitive;
 import org.dromara.common.sensitive.core.SensitiveStrategy;
+import org.dromara.common.tenant.core.TenantEntity;
 
 /**
  * 一卡通账户业务对象 t_pt_userAccount
@@ -27,7 +28,7 @@ import org.dromara.common.sensitive.core.SensitiveStrategy;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = PtUserAccount.class, reverseConvertGenerate = false)
-public class PtUserAccountBo extends BaseEntity {
+public class PtUserAccountBo extends TenantEntity {
 
     /**
      * 账户Id,主键

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

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

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/test/java/org/dromara/backstage/mq/KafkaProducerTest.java

@@ -8,7 +8,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 public class KafkaProducerTest {
 
     @Autowired
-    private KafkaProducer kafkaProcedurer;
+    private KafkaNormalProducer kafkaProcedurer;
 
     @Test
     public void send()