Explorar el Código

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteUserAccountService.java
#	ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteUserAccountServiceImpl.java
luoyb hace 1 año
padre
commit
a05f50ebf7
Se han modificado 48 ficheros con 1316 adiciones y 75 borrados
  1. 9 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteMealTypeService.java
  2. 26 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtAccountService.java
  3. 7 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtAreaService.java
  4. 11 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtParameterService.java
  5. 20 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtRoomService.java
  6. 5 1
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteUserAccountService.java
  7. 71 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtAccountBo.java
  8. 49 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtMealTypeBo.java
  9. 58 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtParameterBo.java
  10. 37 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtRoomBatchSetBo.java
  11. 75 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtRoomBo.java
  12. 33 6
      ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/constant/MessageEventTypeConstants.java
  13. 5 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/aop/annotation/SyncDataToLocal.java
  14. 8 2
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/aop/aspect/SyncDataToLocalAspect.java
  15. 6 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtAccountController.java
  16. 6 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtAreaController.java
  17. 7 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtMealtypeController.java
  18. 5 4
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtParameterController.java
  19. 8 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtRoomController.java
  20. 2 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtAreaBo.java
  21. 2 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtMealTypeBo.java
  22. 2 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtRoomBo.java
  23. 22 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemoteMealTypeServiceImpl.java
  24. 40 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtAccountServiceImpl.java
  25. 14 4
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtAreaServiceImpl.java
  26. 22 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtParameterServiceImpl.java
  27. 45 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtRoomServiceImpl.java
  28. 17 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/KafkaProducer.java
  29. 8 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java
  30. 29 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteUserAccountServiceImpl.java
  31. 12 0
      ruoyi-server/ruoyi-server-base/pom.xml
  32. 58 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtAccountService.java
  33. 61 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtAreaService.java
  34. 60 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtMealTypeService.java
  35. 41 1
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtParameterService.java
  36. 66 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtRoomService.java
  37. 98 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtUserAccountService.java
  38. 5 0
      ruoyi-server/ruoyi-server-base/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  39. 0 26
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/constant/kafka/YktOperationEventConstraints.java
  40. 19 11
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/consumer/KafkaConsumer.java
  41. 1 1
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/IYktEventStrategy.java
  42. 2 3
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/YktEventStrategyContext.java
  43. 43 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtAccountEventStrategyImpl.java
  44. 44 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtAreaEventStrategyImpl.java
  45. 43 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtMealTypeEventStrategyImpl.java
  46. 10 11
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtParameterEventStrategyImpl.java
  47. 48 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtRoomEventStrategyImpl.java
  48. 56 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtUserAccountEventStrategyImpl.java

+ 9 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteMealTypeService.java

@@ -1,6 +1,10 @@
 package org.dromara.backstage.api;
 
 import org.dromara.backstage.api.domain.bo.RemotePtAreaBo;
+import org.dromara.backstage.api.domain.bo.RemotePtMealTypeBo;
+import org.dromara.backstage.api.domain.bo.RemotePtParameterBo;
+
+import java.util.Collection;
 
 /**
  * 餐类服务
@@ -11,5 +15,10 @@ public interface RemoteMealTypeService {
 
     String selectMealTypeNameByIds(String ids);
 
+    Boolean insertByBo(RemotePtMealTypeBo bo) throws Exception;
+
+    Boolean updateByBo(RemotePtMealTypeBo bo) throws Exception;
+
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception;
 
 }

+ 26 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtAccountService.java

@@ -0,0 +1,26 @@
+package org.dromara.backstage.api;
+
+import org.dromara.backstage.api.domain.bo.RemotePtAccountBo;
+import org.dromara.backstage.api.domain.bo.RemotePtAreaBo;
+
+import java.util.Collection;
+
+/**
+ * 结算账户服务层
+ *
+ * @author Lion Li
+ */
+public interface RemotePtAccountService {
+
+    /**
+     * 新增结算账户
+     * @param bo
+     * @return
+     */
+    Boolean insertByBo(RemotePtAccountBo bo) throws Exception;
+
+    Boolean updateByBo(RemotePtAccountBo bo) throws Exception;
+
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception;
+
+}

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

@@ -1,6 +1,9 @@
 package org.dromara.backstage.api;
 
 import org.dromara.backstage.api.domain.bo.RemotePtAreaBo;
+import org.dromara.backstage.api.domain.bo.RemotePtMealTypeBo;
+
+import java.util.Collection;
 
 /**
  * 用户服务
@@ -16,4 +19,8 @@ public interface RemotePtAreaService {
      */
     Boolean insertByBo(RemotePtAreaBo bo);
 
+    Boolean updateByBo(RemotePtAreaBo bo) throws Exception;
+
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception;
+
 }

+ 11 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtParameterService.java

@@ -1,5 +1,9 @@
 package org.dromara.backstage.api;
 
+import org.dromara.backstage.api.domain.bo.RemotePtParameterBo;
+
+import java.util.Collection;
+
 /**
  * name: RemotePtParameterService
  * package: org.dromara.backstage.api
@@ -18,4 +22,11 @@ public interface RemotePtParameterService {
      * @return 参数值
      */
     String getPtParameterByKey(String key);
+
+    Boolean insertByBo(RemotePtParameterBo bo) throws Exception;
+
+    Boolean updateByBo(RemotePtParameterBo bo) throws Exception;
+
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception;
+
 }

+ 20 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtRoomService.java

@@ -0,0 +1,20 @@
+package org.dromara.backstage.api;
+
+import org.dromara.backstage.api.domain.bo.RemotePtRoomBatchSetBo;
+import org.dromara.backstage.api.domain.bo.RemotePtRoomBo;
+
+import java.util.Collection;
+
+/**
+ * 房间信息远程调用接口
+ */
+public interface RemotePtRoomService {
+
+    Boolean insertByBo(RemotePtRoomBo bo) throws Exception;
+
+    Boolean updateByBo(RemotePtRoomBo bo) throws Exception;
+
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception;
+
+    Boolean batchSet(RemotePtRoomBatchSetBo bo) throws Exception;
+}

+ 5 - 1
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteUserAccountService.java

@@ -26,9 +26,13 @@ public interface RemoteUserAccountService {
     void insertByBo(RemoteUserAccountBo bo);
 
     R<String> openAccount(RemoteUserAccountBo bo);
-
+    Boolean batchOpenAccount(Long[] userIds);
+    Boolean batchCloseAccount(Long[] userIds);
      void updateByBo(RemoteUserAccountBo bo);
+    Boolean updateFreezeStatus(String freezeStatus, Long[] userIds);
 
+    Boolean resetLifespan(Long[] userIds,String lifespan);
+    Boolean resetCardType(Long[] userIds,String cardType);
     /**
      * 根据账户Id查询账户信息
      * @param userId 账户Id

+ 71 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtAccountBo.java

@@ -0,0 +1,71 @@
+package org.dromara.backstage.api.domain.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 结算账户业务对象 t_pt_account
+ *
+ * @author bing
+ * @date 2024-07-31
+ */
+@Data
+@NoArgsConstructor
+public class RemotePtAccountBo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 结算账户Id,主键
+     */
+    private Long accountId;
+
+    /**
+     * 结算账户名称
+     */
+    private String accountName;
+
+    /**
+     * 结算账户代码
+     */
+    private String accountCode;
+
+    /**
+     * 账户查询密码
+     */
+    private String queryPwd;
+
+    /**
+     * 联系电话
+     */
+    private String telephone;
+
+    /**
+     * 银行卡号
+     */
+    private String bankNumber;
+
+    /**
+     * 账户状态,见sys_normal_disable字典类别
+     */
+    private String status;
+
+    /**
+     * 管理员姓名
+     */
+    private String adminName;
+
+    /**
+     * 证件编号
+     */
+    private String idNumber;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 49 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtMealTypeBo.java

@@ -0,0 +1,49 @@
+package org.dromara.backstage.api.domain.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 营业时段业务对象 t_pt_mealType
+ *
+ * @author Yz
+ * @date 2024-08-05
+ */
+@Data
+@NoArgsConstructor
+public class RemotePtMealTypeBo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 营业时段id
+     */
+    private Long mealId;
+
+    /**
+     * 餐类Id
+     */
+    private String typeId;
+    /**
+     * 餐类名称
+     */
+    private String mealName;
+
+    /**
+     * 开始时间
+     */
+    private String beginTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+
+    /**
+     * 类别说明
+     */
+    private String mealNotes;
+
+
+}

+ 58 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtParameterBo.java

@@ -0,0 +1,58 @@
+package org.dromara.backstage.api.domain.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 系统参数业务对象 t_pt_parameter
+ *
+ * @author Yz
+ * @date 2024-08-06
+ */
+@Data
+@NoArgsConstructor
+public class RemotePtParameterBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 租户编号
+     */
+    private String tenantId;
+
+    /**
+     * 参数id
+     */
+    private Long paramId;
+
+    /**
+     * 参数编码
+     */
+    private String paramCode;
+
+    /**
+     * 参数名称
+     */
+    private String paramName;
+
+    /**
+     * 参数值
+     */
+    private String paramValue;
+
+    /**
+     * 参数备注
+     */
+    private String remark;
+
+    /**
+     * 系统参数
+     */
+    private String sysData;
+
+
+}

+ 37 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtRoomBatchSetBo.java

@@ -0,0 +1,37 @@
+package org.dromara.backstage.api.domain.bo;
+
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 房间定义业务对象 t_pt_room
+ *
+ * @author bing
+ * @date 2024-08-09
+ */
+@Data
+@NoArgsConstructor
+public class RemotePtRoomBatchSetBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 5953463621208429125L;
+    /**
+     * 房间Id,主键
+     */
+    private List<Long> roomIds;
+
+    /**
+     * 房间类型,见FJLX字典类型
+     */
+//    @NotBlank(message = "房间类型,见FJLX字典类型不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String roomType;
+
+
+
+
+}

+ 75 - 0
ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtRoomBo.java

@@ -0,0 +1,75 @@
+package org.dromara.backstage.api.domain.bo;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 房间定义业务对象 t_pt_room
+ *
+ * @author bing
+ * @date 2024-08-09
+ */
+@Data
+@NoArgsConstructor
+public class RemotePtRoomBo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 房间Id,主键
+     */
+    private Long roomId;
+
+    /**
+     * 所属区域id
+     */
+    private Long areaId;
+
+    /**
+     * 房间编码
+     */
+    private String roomCode;
+
+    /**
+     * 房间名称
+     */
+    private String roomName;
+
+    /**
+     * 房间类型,见FJLX字典类型
+     */
+    private String roomType;
+
+    /**
+     * 门牌号1
+     */
+    private String codeOne;
+
+    /**
+     * 门牌号2
+     */
+    private String codeTwo;
+
+    /**
+     * 门牌号3
+     */
+    private String codeThree;
+
+    /**
+     * 门牌号4
+     */
+    private String codeFour;
+
+    /**
+     * 门牌号5
+     */
+    private String codeFive;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+
+}

+ 33 - 6
ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/constant/MessageEventTypeConstants.java

@@ -54,6 +54,31 @@ public class MessageEventTypeConstants {
      *     xfLimitedterm_EDIT("YKT_119_EDIT","设备绑定","消费设备-限次管理"),
      *     CLIENT_consumer_ADD("CLIENT_101_ADD","消费扣费","刷卡消费");
      */
+    /**
+     * 系统参数功能模块标识
+     */
+    public static final String PARAMETER_SENDER = "YKT_101";
+    /**
+     * 营业时段功能模块标识
+     */
+    public static final String MEAL_TYPE_SENDER = "YKT_103";
+    /**
+     * 房间信息功能模块标识
+     */
+    public static final String ROOM_SENDER = "YKT_105";
+    /**
+     * 区域信息功能模块标识
+     */
+    public static final String AREA_SENDER = "YKT_106";
+    /**
+     * 结算账户功能模块标识
+     */
+    public static final String ACCOUNT_SENDER = "YKT_120";
+    /**
+     * 账户管理功能模块标识
+     */
+    public static final String USER_ACCOUNT_SENDER = "YKT_107";
+
     public static final String	ptParameter_ADD = "YKT_101_ADD";
     public static final String	ptParameter_EDIT = "YKT_101_EDIT";
     public static final String	ptParameter_REMOVE = "YKT_101_REMOVE";
@@ -61,6 +86,8 @@ public class MessageEventTypeConstants {
     public static final String	ptMealtype_EDIT = "YKT_103_EDIT";
     public static final String	ptMealtype_REMOVE = "YKT_103_REMOVE";
     public static final String	ptRoom_ADD = "YKT_105_ADD";
+    //批量设置
+    public static final String	ptRoom_SET = "YKT_105_SET";
     public static final String	ptRoom_EDIT = "YKT_105_EDIT";
     public static final String	ptRoom_REMOVE = "YKT_105_REMOVE";
     public static final String	ptArea_ADD = "YKT_106_ADD";
@@ -69,12 +96,12 @@ public class MessageEventTypeConstants {
     public static final String	ptAccount_ADD = "YKT_120_ADD";
     public static final String	ptAccount_EDIT = "YKT_120_EDIT";
     public static final String	ptAccount_REMOVE = "YKT_120_REMOVE";
-    public static final String	ptUserAccount_OPEN_EDIT = "YKT_107_EDIT";
-    public static final String	ptUserAccount_CLOSE_EDIT = "YKT_107_EDIT";
-    public static final String	ptUserAccount_FREEZE_EDIT = "YKT_107_EDIT";
-    public static final String	ptUserAccount_UNFREEZE_EDIT = "YKT_107_EDIT";
-    public static final String	ptUserAccount_RESETTIME_EDIT = "YKT_108_EDIT";
-    public static final String	ptUserAccount_RESETTYPE_EDIT = "YKT_107_EDIT";
+    public static final String	ptUserAccount_OPEN_EDIT = "YKT_107_OPEN";
+    public static final String	ptUserAccount_CLOSE_EDIT = "YKT_107_CLOSE";
+    public static final String	ptUserAccount_FREEZE_EDIT = "YKT_107_FREEZE";
+    public static final String	ptUserAccount_UNFREEZE_EDIT = "YKT_107_UNFREEZE";
+    public static final String	ptUserAccount_RESETTIME_EDIT = "YKT_108_RESET_TIME";
+    public static final String	ptUserAccount_RESETTYPE_EDIT = "YKT_107_RESET_TYPE";
     public static final String	user_ADD = "YKT_107_ADD";
     public static final String	ptCard_CHARGE_EDIT = "YKT_109_EDIT";
     public static final String	ptCard_refund_EDIT = "YKT_110_EDIT";

+ 5 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/aop/annotation/SyncDataToLocal.java

@@ -17,4 +17,9 @@ public @interface SyncDataToLocal {
      */
     String eventType() default "";
 
+    /**
+     * 功能标识: 消息的发送方
+     */
+    String sender() default "";
+
 }

+ 8 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/aop/aspect/SyncDataToLocalAspect.java

@@ -15,6 +15,7 @@ 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;
@@ -43,7 +44,6 @@ public class SyncDataToLocalAspect {
      */
     @AfterReturning(pointcut = "@annotation(syncDataToLocal)", returning = "jsonResult")
     public void doAfterReturning(JoinPoint joinPoint, SyncDataToLocal syncDataToLocal, Object jsonResult) {
-//        System.err.println("进入呢么?");
         if (jsonResult instanceof R<?> r) {
             if (r.getCode() == R.SUCCESS) {
                 sendSyncMessage(joinPoint, syncDataToLocal);
@@ -63,6 +63,7 @@ public class SyncDataToLocalAspect {
             header.setTimestamp(System.currentTimeMillis());
             header.setEventId(UUID.randomUUID().toString());
             header.setEventType(controllerSyncData2Local.eventType());
+            header.setSender(controllerSyncData2Local.sender());
             String sender = header.getSender();
             String eventType = header.getEventType();
             if(StringUtils.isBlank(sender) && StringUtils.isNotBlank(eventType)){
@@ -76,7 +77,12 @@ public class SyncDataToLocalAspect {
             Object[] args = joinPoint.getArgs();
             int length = args.length;
             if(length == 1){
-                data.setBody(args[0]);
+                if(args[0] instanceof TenantEntity r){
+                    r.setTenantId(header.getTenantId());
+                    data.setBody(r);
+                }else{
+                    data.setBody(args[0]);
+                }
             }else if(length >1){
                 CodeSignature signature = (CodeSignature) joinPoint.getSignature();
                 String[] paramNames = signature.getParameterNames();

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

@@ -6,6 +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.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -22,6 +23,8 @@ import org.dromara.backstage.basics.domain.bo.PtAccountBo;
 import org.dromara.backstage.basics.service.IPtAccountService;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 
+import static org.dromara.common.message.kafka.constant.MessageEventTypeConstants.*;
+
 /**
  * 结算账户
  * 前端访问路由地址为:/backstage/merchant/ptAccount
@@ -75,6 +78,7 @@ public class PtAccountController extends BaseController {
     @SaCheckPermission("merchant:ptAccount:add")
     @Log(title = "结算账户", businessType = BusinessType.INSERT)
     @RepeatSubmit()
+    @SyncDataToLocal(eventType = ptAccount_ADD, sender = ACCOUNT_SENDER)
     @PostMapping()
     public R<Void> add(@Validated(AddGroup.class) @RequestBody PtAccountBo bo) {
         return toAjax(ptAccountService.insertByBo(bo));
@@ -86,6 +90,7 @@ public class PtAccountController extends BaseController {
     @SaCheckPermission("merchant:ptAccount:edit")
     @Log(title = "结算账户", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
+    @SyncDataToLocal(eventType = ptAccount_EDIT, sender = ACCOUNT_SENDER)
     @PutMapping()
     public R<Void> edit(@Validated(EditGroup.class) @RequestBody PtAccountBo bo) {
         return toAjax(ptAccountService.updateByBo(bo));
@@ -98,6 +103,7 @@ public class PtAccountController extends BaseController {
      */
     @SaCheckPermission("merchant:ptAccount:remove")
     @Log(title = "结算账户", businessType = BusinessType.DELETE)
+    @SyncDataToLocal(eventType = ptAccount_REMOVE, sender = ACCOUNT_SENDER)
     @DeleteMapping("/{accountIds}")
     public R<Void> remove(@NotEmpty(message = "主键不能为空")
                           @PathVariable Long[] accountIds) {

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

@@ -6,12 +6,12 @@ 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.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
 import org.dromara.common.log.annotation.Log;
 import org.dromara.common.web.core.BaseController;
-import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
@@ -21,6 +21,8 @@ import org.dromara.backstage.basics.domain.vo.PtAreaVo;
 import org.dromara.backstage.basics.domain.bo.PtAreaBo;
 import org.dromara.backstage.basics.service.IPtAreaService;
 
+import static org.dromara.common.message.kafka.constant.MessageEventTypeConstants.*;
+
 /**
  * 建筑物区域
  * 前端访问路由地址为:/room/ptArea
@@ -75,6 +77,7 @@ public class PtAreaController extends BaseController {
     @SaCheckPermission("room:ptArea:add")
     @Log(title = "建筑物区域", businessType = BusinessType.INSERT)
     @RepeatSubmit()
+    @SyncDataToLocal(eventType = ptArea_ADD, sender = AREA_SENDER)
     @PostMapping()
     public R<Void> add(@Validated(AddGroup.class) @RequestBody PtAreaBo bo) {
         return toAjax(ptAreaService.insertByBo(bo));
@@ -86,6 +89,7 @@ public class PtAreaController extends BaseController {
     @SaCheckPermission("room:ptArea:edit")
     @Log(title = "建筑物区域", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
+    @SyncDataToLocal(eventType = ptArea_EDIT, sender = AREA_SENDER)
     @PutMapping()
     public R<Void> edit(@Validated(EditGroup.class) @RequestBody PtAreaBo bo) {
         return toAjax(ptAreaService.updateByBo(bo));
@@ -98,6 +102,7 @@ public class PtAreaController extends BaseController {
      */
     @SaCheckPermission("room:ptArea:remove")
     @Log(title = "建筑物区域", businessType = BusinessType.DELETE)
+    @SyncDataToLocal(eventType = ptArea_REMOVE,sender = AREA_SENDER)
     @DeleteMapping("/{areaIds}")
     public R<Void> remove(@NotEmpty(message = "主键不能为空")
                           @PathVariable Long[] areaIds) {

+ 7 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtMealtypeController.java

@@ -6,6 +6,8 @@ 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.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -22,6 +24,8 @@ import org.dromara.backstage.basics.domain.bo.PtMealTypeBo;
 import org.dromara.backstage.basics.service.IPtMealtypeService;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 
+import static org.dromara.common.message.kafka.constant.MessageEventTypeConstants.*;
+
 /**
  * 营业时段
  * 前端访问路由地址为:/basicParameter/ptMealtype
@@ -81,6 +85,7 @@ public class PtMealtypeController extends BaseController {
     @SaCheckPermission("basicParameter:ptMealtype:add")
     @Log(title = "营业时段", businessType = BusinessType.INSERT)
     @RepeatSubmit()
+    @SyncDataToLocal(eventType = ptMealtype_ADD,sender = MEAL_TYPE_SENDER)
     @PostMapping()
     public R<Void> add(@Validated(AddGroup.class) @RequestBody PtMealTypeBo bo) {
         return toAjax(ptMealtypeService.insertByBo(bo));
@@ -92,6 +97,7 @@ public class PtMealtypeController extends BaseController {
     @SaCheckPermission("basicParameter:ptMealtype:edit")
     @Log(title = "营业时段", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
+    @SyncDataToLocal(eventType = ptMealtype_EDIT, sender = MEAL_TYPE_SENDER)
     @PutMapping()
     public R<Void> edit(@Validated(EditGroup.class) @RequestBody PtMealTypeBo bo) {
         return toAjax(ptMealtypeService.updateByBo(bo));
@@ -105,6 +111,7 @@ public class PtMealtypeController extends BaseController {
     @SaCheckPermission("basicParameter:ptMealtype:remove")
     @Log(title = "营业时段", businessType = BusinessType.DELETE)
     @DeleteMapping("/{mealIds}")
+    @SyncDataToLocal(eventType = ptMealtype_REMOVE,sender = MEAL_TYPE_SENDER)
     public R<Void> remove(@NotEmpty(message = "主键不能为空")
                           @PathVariable Long[] mealIds) {
         return toAjax(ptMealtypeService.deleteWithValidByIds(List.of(mealIds), true));

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

@@ -7,7 +7,6 @@ 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.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -24,6 +23,8 @@ import org.dromara.backstage.basics.domain.bo.PtParameterBo;
 import org.dromara.backstage.basics.service.IPtParameterService;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 
+import static org.dromara.common.message.kafka.constant.MessageEventTypeConstants.*;
+
 /**
  * 系统参数
  * 前端访问路由地址为:/basicParameter/ptParameter
@@ -77,7 +78,7 @@ public class PtParameterController extends BaseController {
     @SaCheckPermission("basicParameter:ptParameter:add")
     @Log(title = "系统参数", businessType = BusinessType.INSERT)
     @RepeatSubmit()
-    @SyncDataToLocal(eventType = MessageEventTypeConstants.ptParameter_ADD)
+    @SyncDataToLocal(eventType = ptParameter_ADD, sender = PARAMETER_SENDER)
     @PostMapping()
     public R<Void> add(@Validated(AddGroup.class) @RequestBody PtParameterBo bo) {
         return toAjax(ptParameterService.insertByBo(bo));
@@ -91,7 +92,7 @@ public class PtParameterController extends BaseController {
     @SaCheckPermission("basicParameter:ptParameter:remove")
     @Log(title = "系统参数", businessType = BusinessType.DELETE)
     @DeleteMapping("/{paramIds}")
-    @SyncDataToLocal(eventType = MessageEventTypeConstants.ptParameter_EDIT)
+    @SyncDataToLocal(eventType = ptParameter_REMOVE,sender = PARAMETER_SENDER)
     public R<Void> remove(@NotEmpty(message = "主键不能为空")
                           @PathVariable Long[] paramIds) {
         return toAjax(ptParameterService.deleteWithValidByIds(List.of(paramIds), true));
@@ -103,7 +104,7 @@ public class PtParameterController extends BaseController {
     @SaCheckPermission("basicParameter:ptParameter:edit")
     @Log(title = "系统参数", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
-    @SyncDataToLocal(eventType = MessageEventTypeConstants.ptParameter_REMOVE)
+    @SyncDataToLocal(eventType = ptParameter_EDIT, sender = PARAMETER_SENDER)
     @PutMapping()
     public R<Void> edit(@Validated(EditGroup.class) @RequestBody PtParameterBo bo) {
         return toAjax(ptParameterService.updateByBo(bo));

+ 8 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/controller/PtRoomController.java

@@ -11,11 +11,13 @@ 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.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;
@@ -34,6 +36,8 @@ import org.dromara.backstage.basics.service.IPtRoomService;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.springframework.web.multipart.MultipartFile;
 
+import static org.dromara.common.message.kafka.constant.MessageEventTypeConstants.*;
+
 /**
  * 房间定义
  * 前端访问路由地址为:/room/ptRoom
@@ -115,6 +119,7 @@ public class PtRoomController extends BaseController {
      */
     @SaCheckPermission("room:ptRoom:add")
     @Log(title = "房间定义", businessType = BusinessType.INSERT)
+    @SyncDataToLocal(eventType = ptRoom_ADD, sender = ROOM_SENDER)
     @RepeatSubmit()
     @PostMapping()
     public R<Void> add(@Validated(AddGroup.class) @RequestBody PtRoomBo bo) {
@@ -126,6 +131,7 @@ public class PtRoomController extends BaseController {
      */
     @SaCheckPermission("room:ptRoom:set")
     @Log(title = "批量设置房间类型", businessType = BusinessType.OTHER)
+    @SyncDataToLocal(eventType = ptRoom_SET,sender = ROOM_SENDER)
     @RepeatSubmit()
     @PostMapping("/batchSet")
     public R<Void> batchSet(@Validated @RequestBody PtRoomBatchSetBo bo) {
@@ -140,6 +146,7 @@ public class PtRoomController extends BaseController {
      */
     @SaCheckPermission("room:ptRoom:edit")
     @Log(title = "房间定义", businessType = BusinessType.UPDATE)
+    @SyncDataToLocal(eventType = ptRoom_EDIT,sender = ROOM_SENDER)
     @RepeatSubmit()
     @PutMapping()
     public R<Void> edit(@Validated(EditGroup.class) @RequestBody PtRoomBo bo) {
@@ -153,6 +160,7 @@ public class PtRoomController extends BaseController {
      */
     @SaCheckPermission("room:ptRoom:remove")
     @Log(title = "房间定义", businessType = BusinessType.DELETE)
+    @SyncDataToLocal(eventType = ptRoom_REMOVE, sender = ROOM_SENDER)
     @DeleteMapping("/{roomIds}")
     public R<Void> remove(@NotEmpty(message = "主键不能为空")
                           @PathVariable Long[] roomIds) {

+ 2 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtAreaBo.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_area
@@ -18,7 +19,7 @@ import jakarta.validation.constraints.*;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = PtArea.class, reverseConvertGenerate = false)
-public class PtAreaBo extends BaseEntity {
+public class PtAreaBo extends TenantEntity {
 
     /**
      * 区域Id,主键

+ 2 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtMealTypeBo.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_mealType
@@ -18,7 +19,7 @@ import jakarta.validation.constraints.*;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = PtMealType.class, reverseConvertGenerate = false)
-public class PtMealTypeBo extends BaseEntity {
+public class PtMealTypeBo extends TenantEntity {
 
     /**
      * 营业时段id

+ 2 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/domain/bo/PtRoomBo.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_room
@@ -18,7 +19,7 @@ import jakarta.validation.constraints.*;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @AutoMapper(target = PtRoom.class, reverseConvertGenerate = false)
-public class PtRoomBo extends BaseEntity {
+public class PtRoomBo extends TenantEntity {
 
     /**
      * 房间Id,主键

+ 22 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemoteMealTypeServiceImpl.java

@@ -1,13 +1,17 @@
 package org.dromara.backstage.basics.dubbo;
 
 
+import cn.hutool.core.bean.BeanUtil;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.dromara.backstage.api.RemoteMealTypeService;
-import org.dromara.backstage.basics.service.IPtCardtypeService;
+import org.dromara.backstage.api.domain.bo.RemotePtMealTypeBo;
+import org.dromara.backstage.basics.domain.bo.PtMealTypeBo;
 import org.dromara.backstage.basics.service.IPtMealtypeService;
 import org.springframework.stereotype.Service;
 
+import java.util.Collection;
+
 @RequiredArgsConstructor
 @Service
 @DubboService
@@ -18,4 +22,21 @@ public class RemoteMealTypeServiceImpl implements RemoteMealTypeService {
     public String selectMealTypeNameByIds(String ids) {
         return mealtypeService.selectMealTypeNameByIds(ids);
     }
+
+    @Override
+    public Boolean insertByBo(RemotePtMealTypeBo bo) throws Exception {
+        return mealtypeService.insertByBo(BeanUtil.toBean(bo, PtMealTypeBo.class));
+    }
+
+    @Override
+    public Boolean updateByBo(RemotePtMealTypeBo bo) throws Exception {
+        return mealtypeService.updateByBo(BeanUtil.toBean(bo, PtMealTypeBo.class));
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception {
+        return mealtypeService.deleteWithValidByIds(ids,isValid);
+    }
+
+
 }

+ 40 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtAccountServiceImpl.java

@@ -0,0 +1,40 @@
+package org.dromara.backstage.basics.dubbo;
+
+import cn.hutool.core.bean.BeanUtil;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.backstage.api.RemotePtAccountService;
+import org.dromara.backstage.api.domain.bo.RemotePtAccountBo;
+import org.dromara.backstage.basics.domain.bo.PtAccountBo;
+import org.dromara.backstage.basics.service.IPtAccountService;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+
+/**
+ * 结算账户业务实现类
+ *
+ * @author Lion Li
+ */
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemotePtAccountServiceImpl implements RemotePtAccountService {
+
+    private final IPtAccountService accountService;
+
+    @Override
+    public Boolean insertByBo(RemotePtAccountBo bo) throws Exception{
+        return accountService.insertByBo(BeanUtil.copyProperties(bo, PtAccountBo.class));
+    }
+
+    @Override
+    public Boolean updateByBo(RemotePtAccountBo bo) throws Exception {
+        return accountService.updateByBo(BeanUtil.copyProperties(bo, PtAccountBo.class));
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception {
+        return accountService.deleteWithValidByIds(ids, isValid);
+    }
+}

+ 14 - 4
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtAreaServiceImpl.java

@@ -1,18 +1,17 @@
 package org.dromara.backstage.basics.dubbo;
 
+import cn.hutool.core.bean.BeanUtil;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.dromara.backstage.api.RemotePtAreaService;
-import org.dromara.backstage.api.RemotePtSchoolService;
 import org.dromara.backstage.api.domain.bo.RemotePtAreaBo;
-import org.dromara.backstage.api.domain.bo.RemotePtSchoolBo;
 import org.dromara.backstage.basics.domain.bo.PtAreaBo;
-import org.dromara.backstage.basics.domain.bo.PtSchoolBo;
 import org.dromara.backstage.basics.service.IPtAreaService;
-import org.dromara.backstage.basics.service.IPtSchoolService;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.Collection;
+
 /**
  * 用户服务
  *
@@ -31,4 +30,15 @@ public class RemotePtAreaServiceImpl implements RemotePtAreaService {
         PtAreaBo ptSchoolBo = MapstructUtils.convert(bo, PtAreaBo.class);
         return ptAreaService.insertByBo(ptSchoolBo);
     }
+
+    @Override
+    public Boolean updateByBo(RemotePtAreaBo bo) throws Exception {
+        return ptAreaService.updateByBo(BeanUtil.copyProperties(bo, PtAreaBo.class));
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception {
+        return ptAreaService.deleteWithValidByIds(ids, isValid);
+    }
+
 }

+ 22 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtParameterServiceImpl.java

@@ -1,11 +1,16 @@
 package org.dromara.backstage.basics.dubbo;
 
+import cn.hutool.core.bean.BeanUtil;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboService;
 import org.dromara.backstage.api.RemotePtParameterService;
+import org.dromara.backstage.api.domain.bo.RemotePtParameterBo;
+import org.dromara.backstage.basics.domain.bo.PtParameterBo;
 import org.dromara.backstage.basics.service.IPtParameterService;
 import org.springframework.stereotype.Service;
 
+import java.util.Collection;
+
 /**
  * name: RemotePtParameterServiceImpl
  * package: org.dromara.backstage.basics.dubbo
@@ -25,4 +30,21 @@ public class RemotePtParameterServiceImpl implements RemotePtParameterService {
     public String getPtParameterByKey(String key) {
         return ptParameterService.selectParamByCode(key);
     }
+
+    @Override
+    public Boolean insertByBo(RemotePtParameterBo bo) throws Exception{
+        return ptParameterService.insertByBo(BeanUtil.toBean(bo, PtParameterBo.class));
+    }
+
+    @Override
+    public Boolean updateByBo(RemotePtParameterBo bo) throws Exception{
+        return ptParameterService.updateByBo(BeanUtil.toBean(bo, PtParameterBo.class));
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception{
+        return ptParameterService.deleteWithValidByIds(ids,isValid);
+    }
+
+
 }

+ 45 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtRoomServiceImpl.java

@@ -0,0 +1,45 @@
+package org.dromara.backstage.basics.dubbo;
+
+import cn.hutool.core.bean.BeanUtil;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.backstage.api.RemotePtRoomService;
+import org.dromara.backstage.api.domain.bo.RemotePtRoomBatchSetBo;
+import org.dromara.backstage.api.domain.bo.RemotePtRoomBo;
+import org.dromara.backstage.basics.domain.bo.PtRoomBatchSetBo;
+import org.dromara.backstage.basics.domain.bo.PtRoomBo;
+import org.dromara.backstage.basics.service.IPtRoomService;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+
+/**
+ * 房间信息远程服务实现类
+ */
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemotePtRoomServiceImpl implements RemotePtRoomService {
+
+    private final  IPtRoomService iPtRoomService;
+    @Override
+    public Boolean insertByBo(RemotePtRoomBo bo) throws Exception {
+        return iPtRoomService.insertByBo(BeanUtil.toBean(bo, PtRoomBo.class));
+    }
+
+    @Override
+    public Boolean updateByBo(RemotePtRoomBo bo) throws Exception {
+        return iPtRoomService.updateByBo(BeanUtil.toBean(bo, PtRoomBo.class));
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) throws Exception {
+        return iPtRoomService.deleteWithValidByIds(ids,isValid);
+    }
+
+    @Override
+    public Boolean batchSet(RemotePtRoomBatchSetBo bo) throws Exception {
+        return iPtRoomService.batchSet(BeanUtil.toBean(bo, PtRoomBatchSetBo.class));
+    }
+
+}

+ 17 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/mq/KafkaProducer.java

@@ -8,6 +8,7 @@ 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;
@@ -18,6 +19,7 @@ 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
@@ -46,6 +48,21 @@ public class KafkaProducer {
     public void sendKafkaMessage(String topic,Long createBy, KafkaMessage<?> data){
         try{
             String jsonMessage = JSON.toJSONString(data);
+            /*KafkaMessage kafkaMessage = JsonUtils.parseObject(jsonMessage, KafkaMessage.class);
+            Object body = kafkaMessage.getBody();
+            if(body instanceof String){
+                System.err.println("body is String");
+            }else if(body instanceof Long[] r){
+                System.err.println("body is Long[]");
+                for (Long aLong : r) {
+                    System.out.println(aLong);
+                }
+            }else if(body instanceof String[]){
+                System.err.println("body is String[]");
+            }else if(body instanceof List<?> r){
+                System.err.println("body is other");
+
+            }*/
             ProducerRecord<String, String> record = new ProducerRecord<>(topic, "YKT-SYNC-Message", jsonMessage);
             log.info("发送同步数据到kafka消息系统, data: " + jsonMessage);
             CompletableFuture<SendResult<String, String>> send = kafkaTemplate.send(record);

+ 8 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java

@@ -9,6 +9,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.backstage.cardCenter.domain.bo.PtCardBo;
 import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
 import org.dromara.backstage.cardCenter.service.IPtCardService;
@@ -46,6 +47,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import static org.dromara.common.message.kafka.constant.MessageEventTypeConstants.*;
+
 /**
  * 一卡通账户
  * 前端访问路由地址为:/payment/ptUserAccount
@@ -258,6 +261,7 @@ public class PtUserAccountController extends BaseController {
      */
     @SaCheckPermission("payment:ptUserAccount:edit")
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
+    @SyncDataToLocal(eventType = ptUserAccount_FREEZE_EDIT,sender = USER_ACCOUNT_SENDER)
     @PutMapping("/{freezeStatus}/{userIds}")
     public R<Void> batchChangeFreezeStatus(@PathVariable String freezeStatus,@PathVariable Long[] userIds) {
         return toAjax(ptUserAccountService.updateFreezeStatus(userIds,freezeStatus));
@@ -270,6 +274,7 @@ public class PtUserAccountController extends BaseController {
      */
     @SaCheckPermission("payment:ptUserAccount:edit")
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
+    @SyncDataToLocal(eventType = ptUserAccount_RESETTIME_EDIT,sender = USER_ACCOUNT_SENDER)
     @PutMapping("/resetLifespan/{lifespan}/{userIds}")
     public R<Void> batchResetLifespan(@PathVariable String lifespan,@PathVariable Long[] userIds) {
         return toAjax(ptUserAccountService.resetLifespan(userIds,lifespan));
@@ -282,6 +287,7 @@ public class PtUserAccountController extends BaseController {
      */
     @SaCheckPermission("payment:ptUserAccount:edit")
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
+    @SyncDataToLocal(eventType = ptUserAccount_RESETTYPE_EDIT,sender = USER_ACCOUNT_SENDER)
     @PutMapping("/resetCardType/{cardType}/{userIds}")
     public R<Void> batchResetCardType(@PathVariable String cardType,@PathVariable Long[] userIds) {
         return toAjax(ptUserAccountService.resetCardType(userIds,cardType));
@@ -306,6 +312,7 @@ public class PtUserAccountController extends BaseController {
      */
     @SaCheckPermission("payment:ptUserAccount:edit")
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
+    @SyncDataToLocal(eventType = ptUserAccount_OPEN_EDIT,sender = USER_ACCOUNT_SENDER)
     @PutMapping("/open/{userIds}")
     public R<Void> batchOpenAccount(@PathVariable Long[] userIds) {
         return toAjax(ptUserAccountService.openAccount(userIds));
@@ -318,6 +325,7 @@ public class PtUserAccountController extends BaseController {
      */
     @SaCheckPermission("payment:ptUserAccount:edit")
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
+    @SyncDataToLocal(eventType = ptUserAccount_CLOSE_EDIT,sender = USER_ACCOUNT_SENDER)
     @PutMapping("/close/{userIds}")
     public R<Void> batchCloseAccount(@PathVariable Long[] userIds) {
         if(ptUserAccountService.closeAccount(userIds)){

+ 29 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteUserAccountServiceImpl.java

@@ -53,6 +53,17 @@ public class RemoteUserAccountServiceImpl implements RemoteUserAccountService {
         return userAccountBusiness.openAccount(ptUserAccountBo);
     }
 
+    @Override
+    public Boolean batchOpenAccount(Long[] userIds) {
+        int size = userAccountService.openAccount(userIds);
+        return size > 0;
+    }
+
+    @Override
+    public Boolean batchCloseAccount(Long[] userIds) {
+        return userAccountService.closeAccount(userIds);
+    }
+
     @Override
     public RemoteUserAccountVo getUserAccountVoById(Long userId) {
         PtUserAccountVo vo = userAccountService.queryById(userId);
@@ -64,6 +75,24 @@ public class RemoteUserAccountServiceImpl implements RemoteUserAccountService {
         userAccountService.updateByBo(BeanUtil.copyProperties(bo, PtUserAccountBo.class));
     }
 
+    @Override
+    public Boolean updateFreezeStatus(String freezeStatus, Long[] userIds){
+        int size = userAccountService.updateFreezeStatus(userIds, freezeStatus);
+        return size > 0;
+    }
+
+    @Override
+    public Boolean resetLifespan(Long[] userIds, String lifespan) {
+        int size = userAccountService.resetLifespan(userIds, lifespan);
+        return size > 0;
+    }
+
+    @Override
+    public Boolean resetCardType(Long[] userIds, String cardType) {
+        int size = userAccountService.resetCardType(userIds, cardType);
+        return size > 0;
+    }
+
     @Override
     public RemoteUserAccountVo getUserAccountVoByUserNo(Long userNo) {
         PtUserAccountVo vo = userAccountService.getUserAccountVoByUserNo(userNo);

+ 12 - 0
ruoyi-server/ruoyi-server-base/pom.xml

@@ -35,5 +35,17 @@
             <groupId>org.dromara</groupId>
             <artifactId>ruoyi-common-redis</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-json</artifactId>
+            <version>5.8.27</version>
+        </dependency>
+        <dependency>
+            <groupId>org.dromara</groupId>
+            <artifactId>ruoyi-api-backstage</artifactId>
+            <version>2.2.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 58 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtAccountService.java

@@ -0,0 +1,58 @@
+package org.dromara.server.base.service.yktOperation;
+
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.api.RemotePtAccountService;
+import org.dromara.backstage.api.domain.bo.RemotePtAccountBo;
+import org.dromara.common.core.exception.ServiceException;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+
+/**
+ * 结算账户同步
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class SyncRemotePtAccountService {
+
+    @DubboReference
+    private final RemotePtAccountService accountService;
+
+    /**
+     * 远程调用结算账户新增
+     * @param msg
+     */
+    public void addPtAccount(Object msg) throws Exception{
+        boolean flag = accountService.insertByBo(JSONUtil.parseObj(msg).toBean(RemotePtAccountBo.class));
+        if (!flag){
+            throw new ServiceException("结算账户新增失败");
+        }
+    }
+
+    /**
+     * 远程调用结算账户修改
+     * @param msg
+     */
+    public void editPtAccount(Object msg) throws Exception{
+        boolean flag = accountService.updateByBo(JSONUtil.parseObj(msg).toBean(RemotePtAccountBo.class));
+        if (!flag){
+            throw new ServiceException("结算账户修改失败");
+        }
+    }
+
+    /**
+     * 远程调用结算账户删除
+     * @param msg
+     */
+    public void delPtAccount(Object msg) throws Exception{
+        Collection<Long> ids = JSONUtil.parseArray(msg).toBean(Collection.class);
+        boolean flag = accountService.deleteWithValidByIds(ids,false);
+        if (!flag){
+            throw new ServiceException("结算账户删除失败");
+        }
+    }
+}

+ 61 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtAreaService.java

@@ -0,0 +1,61 @@
+package org.dromara.server.base.service.yktOperation;
+
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.api.RemotePtAreaService;
+import org.dromara.backstage.api.RemotePtRoomService;
+import org.dromara.backstage.api.domain.bo.RemotePtAreaBo;
+import org.dromara.backstage.api.domain.bo.RemotePtRoomBatchSetBo;
+import org.dromara.backstage.api.domain.bo.RemotePtRoomBo;
+import org.dromara.common.core.exception.ServiceException;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+
+/**
+ * 系统参数同步
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class SyncRemotePtAreaService {
+
+    @DubboReference
+    private final RemotePtAreaService areaService;
+
+    /**
+     * 远程调用系统参数新增
+     * @param msg
+     */
+    public void addPtArea(Object msg) {
+        boolean flag = areaService.insertByBo(JSONUtil.parseObj(msg).toBean(RemotePtAreaBo.class));
+        if (!flag){
+            throw new ServiceException("区域信息新增失败");
+        }
+    }
+
+    /**
+     * 远程调用系统参数修改
+     * @param msg
+     */
+    public void editPtArea(Object msg) throws Exception{
+        boolean flag = areaService.updateByBo(JSONUtil.parseObj(msg).toBean(RemotePtAreaBo.class));
+        if (!flag){
+            throw new ServiceException("区域信息修改失败");
+        }
+    }
+
+    /**
+     * 远程调用系统参数删除
+     * @param msg
+     */
+    public void delPtArea(Object msg) throws Exception{
+        Collection<Long> ids = JSONUtil.parseArray(msg).toBean(Collection.class);
+        boolean flag = areaService.deleteWithValidByIds(ids,false);
+        if (!flag){
+            throw new ServiceException("区域删除失败");
+        }
+    }
+}

+ 60 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtMealTypeService.java

@@ -0,0 +1,60 @@
+package org.dromara.server.base.service.yktOperation;
+
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.api.RemoteMealTypeService;
+import org.dromara.backstage.api.RemotePtParameterService;
+import org.dromara.backstage.api.domain.bo.RemotePtMealTypeBo;
+import org.dromara.backstage.api.domain.bo.RemotePtParameterBo;
+import org.dromara.common.core.exception.ServiceException;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+
+/**
+ * 系统参数同步
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class SyncRemotePtMealTypeService {
+
+    @DubboReference
+    private final RemoteMealTypeService mealTypeService;
+
+    /**
+     * 远程调用系统参数新增
+     * @param msg
+     */
+    public void addPtMealType(Object msg) throws Exception{
+        boolean flag = mealTypeService.insertByBo(JSONUtil.parseObj(msg).toBean(RemotePtMealTypeBo.class));
+        if (!flag){
+            throw new ServiceException("营业时段新增失败");
+        }
+    }
+
+    /**
+     * 远程调用系统参数修改
+     * @param msg
+     */
+    public void editPtMealType(Object msg) throws Exception{
+        boolean flag = mealTypeService.updateByBo(JSONUtil.parseObj(msg).toBean(RemotePtMealTypeBo.class));
+        if (!flag){
+            throw new ServiceException("营业时段修改失败");
+        }
+    }
+
+    /**
+     * 远程调用系统参数删除
+     * @param msg
+     */
+    public void delPtMealType(Object msg) throws Exception{
+        Collection<Long> ids = JSONUtil.parseArray(msg).toBean(Collection.class);
+        boolean flag = mealTypeService.deleteWithValidByIds(ids,false);
+        if (!flag){
+            throw new ServiceException("营业时段删除失败");
+        }
+    }
+}

+ 41 - 1
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtParameterService.java

@@ -1,9 +1,16 @@
 package org.dromara.server.base.service.yktOperation;
 
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.api.RemotePtParameterService;
+import org.dromara.backstage.api.domain.bo.RemotePtParameterBo;
+import org.dromara.common.core.exception.ServiceException;
 import org.springframework.stereotype.Service;
 
+import java.util.Collection;
+
 /**
  * 系统参数同步
  */
@@ -12,7 +19,40 @@ import org.springframework.stereotype.Service;
 @RequiredArgsConstructor
 public class SyncRemotePtParameterService {
 
-    public void addPtParameter(){
+    @DubboReference
+    private final RemotePtParameterService remotePtParameterService;
+
+    /**
+     * 远程调用系统参数新增
+     * @param msg
+     */
+    public void addPtParameter(Object msg) throws Exception{
+        boolean flag = remotePtParameterService.insertByBo(JSONUtil.parseObj(msg).toBean(RemotePtParameterBo.class));
+        if (!flag){
+            throw new ServiceException("系统参数新增失败");
+        }
+    }
+
+    /**
+     * 远程调用系统参数修改
+     * @param msg
+     */
+    public void editPtParameter(Object msg) throws Exception{
+        boolean flag = remotePtParameterService.updateByBo(JSONUtil.parseObj(msg).toBean(RemotePtParameterBo.class));
+        if (!flag){
+            throw new ServiceException("系统参数修改失败");
+        }
+    }
 
+    /**
+     * 远程调用系统参数删除
+     * @param msg
+     */
+    public void delPtParameter(Object msg) throws Exception{
+        Collection<Long> ids = JSONUtil.parseArray(msg).toBean(Collection.class);
+        boolean flag = remotePtParameterService.deleteWithValidByIds(ids,false);
+        if (!flag){
+            throw new ServiceException("系统参数删除失败");
+        }
     }
 }

+ 66 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtRoomService.java

@@ -0,0 +1,66 @@
+package org.dromara.server.base.service.yktOperation;
+
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.api.RemotePtRoomService;
+import org.dromara.backstage.api.domain.bo.RemotePtRoomBatchSetBo;
+import org.dromara.backstage.api.domain.bo.RemotePtRoomBo;
+import org.dromara.common.core.exception.ServiceException;
+import org.springframework.stereotype.Service;
+
+import java.util.Collection;
+
+/**
+ * 系统参数同步
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class SyncRemotePtRoomService {
+
+    @DubboReference
+    private final RemotePtRoomService roomService;
+
+    /**
+     * 远程调用系统参数新增
+     * @param msg
+     */
+    public void addPtRoom(Object msg) throws Exception{
+        boolean flag = roomService.insertByBo(JSONUtil.parseObj(msg).toBean(RemotePtRoomBo.class));
+        if (!flag){
+            throw new ServiceException("房间信息新增失败");
+        }
+    }
+
+    /**
+     * 远程调用系统参数修改
+     * @param msg
+     */
+    public void editPtRoom(Object msg) throws Exception{
+        boolean flag = roomService.updateByBo(JSONUtil.parseObj(msg).toBean(RemotePtRoomBo.class));
+        if (!flag){
+            throw new ServiceException("房间信息修改失败");
+        }
+    }
+
+    /**
+     * 远程调用系统参数删除
+     * @param msg
+     */
+    public void delPtRoom(Object msg) throws Exception{
+        Collection<Long> ids = JSONUtil.parseArray(msg).toBean(Collection.class);
+        boolean flag = roomService.deleteWithValidByIds(ids,false);
+        if (!flag){
+            throw new ServiceException("房间删除失败");
+        }
+    }
+
+    public void batchSet(Object msg) throws Exception{
+        boolean flag = roomService.batchSet(JSONUtil.parseObj(msg).toBean(RemotePtRoomBatchSetBo.class));
+        if (!flag){
+            throw new ServiceException("房间批量设置失败");
+        }
+    }
+}

+ 98 - 0
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtUserAccountService.java

@@ -0,0 +1,98 @@
+package org.dromara.server.base.service.yktOperation;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.backstage.api.RemoteUserAccountService;
+import org.dromara.backstage.api.domain.bo.RemoteUserAccountBo;
+import org.dromara.common.core.exception.ServiceException;
+import org.springframework.stereotype.Service;
+
+/**
+ * 结算账户同步
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class SyncRemotePtUserAccountService {
+
+    @DubboReference
+    private final RemoteUserAccountService userAccountService;
+
+    /**
+     * 远程调用开户
+     * @param msg
+     */
+    public void openUserAccount(Object msg) throws ServiceException{
+        Long[] ids = JSONUtil.parseArray(msg).toArray(Long[]::new);
+        boolean flag = userAccountService.batchOpenAccount(ids);
+        if (!flag){
+            throw new ServiceException("开户失败");
+        }
+    }
+
+    /**
+     * 远程调用结算账户修改
+     * @param msg
+     */
+    public void closeUserAccount(Object msg) throws ServiceException{
+        Long[] ids = JSONUtil.parseArray(msg).toArray(Long[]::new);
+        boolean flag = userAccountService.batchCloseAccount(ids);
+        if (!flag){
+            throw new ServiceException("开户失败");
+        }
+    }
+
+    /**
+     * 远程调用账户冻结/解冻
+     * @param msg
+     */
+    public void updateFreezeStatus(Object msg) throws ServiceException{
+        JSONObject msgObj = JSONUtil.parseObj(msg);
+        Long[] ids = JSONUtil.parseArray(msgObj.getJSONArray("userIds")).toArray(Long[]::new);
+        String freezeStatus = msgObj.getStr("freezeStatus");
+        boolean flag = userAccountService.updateFreezeStatus(freezeStatus, ids);
+        if (!flag){
+            throw new ServiceException("账户冻结/解冻失败: "+ freezeStatus);
+        }
+    }
+
+    /**
+     * 远程调用重置有效期
+     * @param msg
+     */
+    public void resetTime(Object msg) throws ServiceException{
+        JSONObject msgObj = JSONUtil.parseObj(msg);
+        Long[] ids = JSONUtil.parseArray(msgObj.getJSONArray("userIds")).toArray(Long[]::new);
+        String lifespan = msgObj.getStr("lifespan");
+        boolean flag = userAccountService.resetLifespan(ids, lifespan);
+        if (!flag){
+            throw new ServiceException("重置有效期失败");
+        }
+    }
+
+    /**
+     * 远程调用重置卡类
+     * @param msg
+     */
+    public void resetCardType(Object msg) throws ServiceException{
+        JSONObject msgObj = JSONUtil.parseObj(msg);
+        Long[] ids = JSONUtil.parseArray(msgObj.getJSONArray("userIds")).toArray(Long[]::new);
+        String cardType = msgObj.getStr("cardType");
+        boolean flag = userAccountService.resetCardType(ids, cardType);
+        if (!flag){
+            throw new ServiceException("重置卡类失败");
+        }
+    }
+
+    /**
+     * 新增账户
+     * @param msg
+     * @throws ServiceException
+     */
+    public void addUserAccount(Object msg) throws ServiceException{
+       userAccountService.insertByBo(JSONUtil.toBean(msg.toString(), RemoteUserAccountBo.class));
+    }
+}

+ 5 - 0
ruoyi-server/ruoyi-server-base/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -9,3 +9,8 @@ org.dromara.server.base.service.user.strategy.impl.SyncTeacherStrategyImpl
 org.dromara.server.base.service.user.strategy.impl.SyncGraduateStrategyImpl
 org.dromara.server.base.service.user.strategy.impl.SyncTraineeStrategyImpl
 org.dromara.server.base.service.yktOperation.SyncRemotePtParameterService
+org.dromara.server.base.service.yktOperation.SyncRemotePtMealTypeService
+org.dromara.server.base.service.yktOperation.SyncRemotePtRoomService
+org.dromara.server.base.service.yktOperation.SyncRemotePtAreaService
+org.dromara.server.base.service.yktOperation.SyncRemotePtAccountService
+org.dromara.server.base.service.yktOperation.SyncRemotePtUserAccountService

+ 0 - 26
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/constant/kafka/YktOperationEventConstraints.java

@@ -1,26 +0,0 @@
-package org.dromara.server.mq.constant.kafka;
-
-
-public class YktOperationEventConstraints {
-
-    /**
-     * 系统参数功能模块标识
-     */
-    public static final String PARAMETER_SENDER = "YKT_101";
-
-    /**
-     * 系统参数新增
-     */
-    public static final String PARAMETER_ADD = PARAMETER_SENDER + "_ADD";
-
-    /**
-     * 系统参数修改
-     */
-    public static final String PARAMETER_EDIT = PARAMETER_SENDER + "_EDIT";
-
-    /**
-     * 系统参数删除
-     */
-    public static final String PARAMETER_DEL = PARAMETER_SENDER + "_DEL";
-
-}

+ 19 - 11
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/consumer/KafkaConsumer.java

@@ -2,14 +2,16 @@ package org.dromara.server.mq.consumer;
 
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
-import lombok.Data;
+import com.alibaba.nacos.api.config.annotation.NacosValue;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.dromara.common.message.kafka.domain.KafkaMessage;
 import org.dromara.server.mq.event.kafka.EventStrategyContext;
 import org.dromara.server.mq.event.kafka.YktEventStrategyContext;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.stereotype.Component;
 
 import static org.dromara.common.message.kafka.constant.KafkaTopicConstants.SYNC_DATA_TOPIC;
 
@@ -25,11 +27,14 @@ import static org.dromara.common.message.kafka.constant.KafkaTopicConstants.SYNC
  */
 @RequiredArgsConstructor
 @Slf4j
-//@Component
+@Component
 public class KafkaConsumer {
     private final EventStrategyContext eventStrategyContext;
     private final YktEventStrategyContext yktEventStrategyContext;
-    @KafkaListener(topics = "eventBus", groupId = "test-group-id")
+    @Value("${spring.system.tenantId}")
+    private String tenantId;
+
+//    @KafkaListener(topics = "eventBus", groupId = "test-group-id")
     public void kafkaReceiveHandler(ConsumerRecord<String, String> record) {
         KafkaMessage<?> receiveMsg = JSONUtil.toBean(record.value(), KafkaMessage.class);
         log.info("[接收到Kafka消息]-[{}]", receiveMsg);
@@ -47,19 +52,22 @@ public class KafkaConsumer {
      * 一卡通云端业务操作本地同步处理
      * @param record kafka消息
      */
-    @KafkaListener(topics = SYNC_DATA_TOPIC, groupId = "ykt_local_listener")
+    @KafkaListener(topics = SYNC_DATA_TOPIC, groupId = "YTK_${spring.system.tenantId}")
     public void cloudOperationSync(ConsumerRecord<String, String> record){
-        KafkaMessage<?> receiveMsg = JSONUtil.toBean(record.value(), KafkaMessage.class);
-        log.info("[接收到Kafka消息]-[{}]", receiveMsg);
         try{
+            KafkaMessage<?> receiveMsg = JSONUtil.toBean(record.value(), KafkaMessage.class);
+            log.info("[接收到Kafka消息]-[{}]", receiveMsg);
+            String tenantId = receiveMsg.getHeader().getTenantId();
+            if(!tenantId.equals(this.tenantId)){
+                log.info("消息所属租户不匹配");
+                return;
+            }
             String eventType = receiveMsg.getHeader().getEventType();
-    //          String tenantId = receiveMsg.getHeader().getTenantId();
-            String tenantId = "";
-            JSONObject eventMsg = JSONUtil.parseObj(receiveMsg.getBody());
-            yktEventStrategyContext.doMsgHandle(eventType, eventMsg);
+            String sender = receiveMsg.getHeader().getSender();
 
+            yktEventStrategyContext.doMsgHandle(sender, eventType, receiveMsg.getBody());
         } catch (Exception e){
-            log.error("[kafka消息处理失败]-[消息:{}-[错误:{}]", receiveMsg, e.getMessage());
+            log.error("[kafka消息处理失败]-[消息:{}-[错误:{}]", record.value(), e.getMessage(), e);
 
         }
     }

+ 1 - 1
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/IYktEventStrategy.java

@@ -11,5 +11,5 @@ public interface IYktEventStrategy {
      * @param eventType 事件类型
      * @param msg 消息体
      */
-    void doMsgHandle(String eventType,JSONObject msg);
+    void doMsgHandle(String eventType,Object msg) throws Exception;
 }

+ 2 - 3
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/YktEventStrategyContext.java

@@ -1,6 +1,5 @@
 package org.dromara.server.mq.event.kafka;
 
-import cn.hutool.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -19,7 +18,7 @@ public class YktEventStrategyContext {
         this.strategyMap.putAll(strategyMap);
     }
 
-    public void doMsgHandle(String eventType, JSONObject msg) {
-        strategyMap.get(eventType).doMsgHandle(eventType, msg);
+    public void doMsgHandle(String sender, String eventType,Object msg) throws Exception{
+        strategyMap.get(sender).doMsgHandle(eventType, msg);
     }
 }

+ 43 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtAccountEventStrategyImpl.java

@@ -0,0 +1,43 @@
+package org.dromara.server.mq.event.kafka.impl.yktOperation;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
+import org.dromara.server.base.service.yktOperation.SyncRemotePtAccountService;
+import org.dromara.server.mq.event.kafka.IYktEventStrategy;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Hz
+ * @date 2024/10/29
+ * @description 结算账户功能同步策略
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(MessageEventTypeConstants.ACCOUNT_SENDER)
+public class PtAccountEventStrategyImpl implements IYktEventStrategy {
+
+    private final SyncRemotePtAccountService accountService;
+    @Override
+    public void doMsgHandle(String eventType, Object msg) throws Exception{
+
+        switch (eventType) {
+            case MessageEventTypeConstants.ptAccount_ADD:{
+                accountService.addPtAccount(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptAccount_EDIT:{
+                accountService.editPtAccount(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptAccount_REMOVE:{
+                accountService.delPtAccount(msg);
+            }
+            break;
+            default:
+                log.info("未知事件");
+
+        }
+    }
+
+}

+ 44 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtAreaEventStrategyImpl.java

@@ -0,0 +1,44 @@
+package org.dromara.server.mq.event.kafka.impl.yktOperation;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
+import org.dromara.server.base.service.yktOperation.SyncRemotePtAreaService;
+import org.dromara.server.base.service.yktOperation.SyncRemotePtRoomService;
+import org.dromara.server.mq.event.kafka.IYktEventStrategy;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Hz
+ * @date 2024/10/29
+ * @description 营业时段功能同步策略
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(MessageEventTypeConstants.AREA_SENDER)
+public class PtAreaEventStrategyImpl implements IYktEventStrategy {
+
+    private final SyncRemotePtAreaService areaService;
+    @Override
+    public void doMsgHandle(String eventType, Object msg) throws Exception{
+
+        switch (eventType) {
+            case MessageEventTypeConstants.ptArea_ADD:{
+                areaService.addPtArea(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptArea_EDIT:{
+                areaService.editPtArea(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptArea_REMOVE:{
+                areaService.delPtArea(msg);
+            }
+            break;
+            default:
+                log.info("未知事件");
+
+        }
+    }
+
+}

+ 43 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtMealTypeEventStrategyImpl.java

@@ -0,0 +1,43 @@
+package org.dromara.server.mq.event.kafka.impl.yktOperation;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
+import org.dromara.server.base.service.yktOperation.SyncRemotePtMealTypeService;
+import org.dromara.server.mq.event.kafka.IYktEventStrategy;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Hz
+ * @date 2024/10/29
+ * @description 营业时段功能同步策略
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(MessageEventTypeConstants.MEAL_TYPE_SENDER)
+public class PtMealTypeEventStrategyImpl implements IYktEventStrategy {
+
+    private final SyncRemotePtMealTypeService mealTypeService;
+    @Override
+    public void doMsgHandle(String eventType, Object msg) throws Exception{
+
+        switch (eventType) {
+            case MessageEventTypeConstants.ptMealtype_ADD:{
+                mealTypeService.addPtMealType(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptMealtype_EDIT:{
+                mealTypeService.editPtMealType(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptMealtype_REMOVE:{
+                mealTypeService.delPtMealType(msg);
+            }
+            break;
+            default:
+                log.info("未知事件");
+
+        }
+    }
+
+}

+ 10 - 11
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtParameterEventStrategyImpl.java

@@ -1,11 +1,9 @@
 package org.dromara.server.mq.event.kafka.impl.yktOperation;
 
-import cn.hutool.json.JSONObject;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.dromara.server.base.service.dept.SyncRemoteDeptService;
+import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
 import org.dromara.server.base.service.yktOperation.SyncRemotePtParameterService;
-import org.dromara.server.mq.constant.kafka.YktOperationEventConstraints;
 import org.dromara.server.mq.event.kafka.IYktEventStrategy;
 import org.springframework.stereotype.Service;
 
@@ -16,23 +14,24 @@ import org.springframework.stereotype.Service;
  */
 @Slf4j
 @RequiredArgsConstructor
-@Service(YktOperationEventConstraints.PARAMETER_SENDER)
+@Service(MessageEventTypeConstants.PARAMETER_SENDER)
 public class PtParameterEventStrategyImpl implements IYktEventStrategy {
 
     private final SyncRemotePtParameterService parameterService;
     @Override
-    public void doMsgHandle(String eventType, JSONObject msg) {
+    public void doMsgHandle(String eventType, Object msg) throws Exception{
+
         switch (eventType) {
-            case YktOperationEventConstraints.PARAMETER_ADD:{
-                log.info("新增系统参数");
+            case MessageEventTypeConstants.ptParameter_ADD :{
+                parameterService.addPtParameter(msg);
             }
             break;
-            case YktOperationEventConstraints.PARAMETER_EDIT:{
-                log.info("修改系统参数");
+            case MessageEventTypeConstants.ptParameter_EDIT:{
+                parameterService.editPtParameter(msg);
             }
             break;
-            case YktOperationEventConstraints.PARAMETER_DEL:{
-                log.info("删除系统参数");
+            case MessageEventTypeConstants.ptParameter_REMOVE:{
+                parameterService.delPtParameter(msg);
             }
             break;
             default:

+ 48 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtRoomEventStrategyImpl.java

@@ -0,0 +1,48 @@
+package org.dromara.server.mq.event.kafka.impl.yktOperation;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
+import org.dromara.server.base.service.yktOperation.SyncRemotePtMealTypeService;
+import org.dromara.server.base.service.yktOperation.SyncRemotePtRoomService;
+import org.dromara.server.mq.event.kafka.IYktEventStrategy;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Hz
+ * @date 2024/10/29
+ * @description 营业时段功能同步策略
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(MessageEventTypeConstants.ROOM_SENDER)
+public class PtRoomEventStrategyImpl implements IYktEventStrategy {
+
+    private final SyncRemotePtRoomService roomService;
+    @Override
+    public void doMsgHandle(String eventType, Object msg) throws Exception{
+
+        switch (eventType) {
+            case MessageEventTypeConstants.ptRoom_ADD:{
+                roomService.addPtRoom(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptRoom_EDIT:{
+                roomService.editPtRoom(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptRoom_REMOVE:{
+                roomService.delPtRoom(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptRoom_SET:{
+                roomService.batchSet(msg);
+            }
+            break;
+            default:
+                log.info("未知事件");
+
+        }
+    }
+
+}

+ 56 - 0
ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtUserAccountEventStrategyImpl.java

@@ -0,0 +1,56 @@
+package org.dromara.server.mq.event.kafka.impl.yktOperation;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.message.kafka.constant.MessageEventTypeConstants;
+import org.dromara.server.base.service.yktOperation.SyncRemotePtAccountService;
+import org.dromara.server.base.service.yktOperation.SyncRemotePtUserAccountService;
+import org.dromara.server.mq.event.kafka.IYktEventStrategy;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Hz
+ * @date 2024/10/29
+ * @description 结算账户功能同步策略
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service(MessageEventTypeConstants.USER_ACCOUNT_SENDER)
+public class PtUserAccountEventStrategyImpl implements IYktEventStrategy {
+
+    private final SyncRemotePtUserAccountService userAccountService;
+    @Override
+    public void doMsgHandle(String eventType, Object msg) throws Exception{
+
+        switch (eventType) {
+            case MessageEventTypeConstants.ptUserAccount_OPEN_EDIT:{
+                userAccountService.openUserAccount(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptUserAccount_CLOSE_EDIT:{
+                userAccountService.closeUserAccount(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptUserAccount_FREEZE_EDIT:{
+                userAccountService.updateFreezeStatus(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptUserAccount_RESETTIME_EDIT:{
+                userAccountService.resetTime(msg);
+            }
+            break;
+            case MessageEventTypeConstants.ptUserAccount_RESETTYPE_EDIT:{
+                userAccountService.resetCardType(msg);
+            }
+            break;
+            case MessageEventTypeConstants.user_ADD:{
+                userAccountService.addUserAccount(msg);
+            }
+            break;
+            default:
+                log.info("未知事件");
+
+        }
+    }
+
+}