Переглянути джерело

结算账户、账户管理、新增系统用户数据双向同步功能开发

baiyun 1 рік тому
батько
коміт
25c27cf198
11 змінених файлів з 446 додано та 8 видалено
  1. 26 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemotePtAccountService.java
  2. 5 1
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/RemoteUserAccountService.java
  3. 71 0
      ruoyi-api/ruoyi-api-backstage/src/main/java/org/dromara/backstage/api/domain/bo/RemotePtAccountBo.java
  4. 16 7
      ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/constant/MessageEventTypeConstants.java
  5. 40 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/dubbo/RemotePtAccountServiceImpl.java
  6. 31 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/dubbo/RemoteUserAccountServiceImpl.java
  7. 58 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtAccountService.java
  8. 98 0
      ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtUserAccountService.java
  9. 2 0
      ruoyi-server/ruoyi-server-base/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
  10. 43 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtAccountEventStrategyImpl.java
  11. 56 0
      ruoyi-server/ruoyi-server-mqdata/src/main/java/org/dromara/server/mq/event/kafka/impl/yktOperation/PtUserAccountEventStrategyImpl.java

+ 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;
+
+}

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

@@ -25,7 +25,11 @@ 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);
 }

+ 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;
+
+
+}

+ 16 - 7
ruoyi-common/ruoyi-common-message/src/main/java/org/dromara/common/message/kafka/constant/MessageEventTypeConstants.java

@@ -66,10 +66,19 @@ public class MessageEventTypeConstants {
      * 房间信息功能模块标识
      */
     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";
@@ -87,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_FREEZE";
+    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";

+ 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);
+    }
+}

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

@@ -50,8 +50,39 @@ 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 void updateByBo(RemoteUserAccountBo bo) {
         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;
+    }
+
+
 }

+ 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("结算账户删除失败");
+        }
+    }
+}

+ 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));
+    }
+}

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

@@ -12,3 +12,5 @@ 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

+ 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("未知事件");
+
+        }
+    }
+
+}

+ 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("未知事件");
+
+        }
+    }
+
+}