Просмотр исходного кода

feature: 支付管理平台->账户管理模块
1.开户与销户功能实现

luoyb 1 год назад
Родитель
Сommit
94fe567aa3

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/service/impl/PtCardServiceImpl.java

@@ -190,7 +190,7 @@ public class PtCardServiceImpl implements IPtCardService {
     }
     }
 
 
     /**
     /**
-     * 根据Id获取账户发信息
+     * 根据Id获取账户发信息
      *
      *
      * @param userIds     id串,英文逗号隔开
      * @param userIds     id串,英文逗号隔开
      * @return 发卡信息串,英文逗号隔开
      * @return 发卡信息串,英文逗号隔开

+ 36 - 6
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/controller/PtUserAccountController.java

@@ -156,8 +156,10 @@ public class PtUserAccountController extends BaseController {
     @GetMapping("/accountBag/{userId}")
     @GetMapping("/accountBag/{userId}")
     public R<PtUserAccountInfoVo> accountBag(@PathVariable Long userId) {
     public R<PtUserAccountInfoVo> accountBag(@PathVariable Long userId) {
         PtUserAccountVo account = ptUserAccountService.queryById(userId);
         PtUserAccountVo account = ptUserAccountService.queryById(userId);
+
         PtBagBo cardBo = new PtBagBo();
         PtBagBo cardBo = new PtBagBo();
         cardBo.setUserId(userId);
         cardBo.setUserId(userId);
+
         List<PtBagVo> bags = ptBagService.queryList(cardBo);
         List<PtBagVo> bags = ptBagService.queryList(cardBo);
         PtUserAccountInfoVo accountInfoVo = new PtUserAccountInfoVo();
         PtUserAccountInfoVo accountInfoVo = new PtUserAccountInfoVo();
         accountInfoVo.setAccount(account);
         accountInfoVo.setAccount(account);
@@ -189,10 +191,10 @@ public class PtUserAccountController extends BaseController {
         return toAjax(ptUserAccountService.updateFreezeStatus(userIds,freezeStatus));
         return toAjax(ptUserAccountService.updateFreezeStatus(userIds,freezeStatus));
     }
     }
     /**
     /**
-     * 批量冻结结/解冻账户
+     * 重置有效期
      *
      *
      * @param userIds 账户ID串
      * @param userIds 账户ID串
-     *        freezeStatus 冻结状态
+     *        lifespan 有效期
      */
      */
     @SaCheckPermission("payment:ptUserAccount:edit")
     @SaCheckPermission("payment:ptUserAccount:edit")
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
@@ -201,10 +203,10 @@ public class PtUserAccountController extends BaseController {
         return toAjax(ptUserAccountService.resetLifespan(userIds,lifespan));
         return toAjax(ptUserAccountService.resetLifespan(userIds,lifespan));
     }
     }
     /**
     /**
-     * 批量冻结结/解冻账户
+     * 重置卡类
      *
      *
      * @param userIds 账户ID串
      * @param userIds 账户ID串
-     *        freezeStatus 冻结状态
+     *        cardType 卡片类型
      */
      */
     @SaCheckPermission("payment:ptUserAccount:edit")
     @SaCheckPermission("payment:ptUserAccount:edit")
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
@@ -213,10 +215,10 @@ public class PtUserAccountController extends BaseController {
         return toAjax(ptUserAccountService.resetCardType(userIds,cardType));
         return toAjax(ptUserAccountService.resetCardType(userIds,cardType));
     }
     }
     /**
     /**
-     * 批量冻结结/解冻账户
+     * 重置消费密码
      *
      *
      * @param userIds 账户ID串
      * @param userIds 账户ID串
-     *        freezeStatus 冻结状态
+     *        consumePwd 消费密码
      */
      */
     @SaCheckPermission("payment:ptUserAccount:edit")
     @SaCheckPermission("payment:ptUserAccount:edit")
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
     @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
@@ -224,4 +226,32 @@ public class PtUserAccountController extends BaseController {
     public R<Void> batchResetConsumePwd(@PathVariable String consumePwd,@PathVariable Long[] userIds) {
     public R<Void> batchResetConsumePwd(@PathVariable String consumePwd,@PathVariable Long[] userIds) {
         return toAjax(ptUserAccountService.resetConsumePwd(userIds,consumePwd));
         return toAjax(ptUserAccountService.resetConsumePwd(userIds,consumePwd));
     }
     }
+    /**
+     * 开户
+     *
+     * @param userIds 账户ID串
+     *
+     */
+    @SaCheckPermission("payment:ptUserAccount:edit")
+    @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/open/{userIds}")
+    public R<Void> batchOpenAccount(@PathVariable Long[] userIds) {
+        return toAjax(ptUserAccountService.openAccount(userIds));
+    }
+    /**
+     * 销户
+     *
+     * @param userIds 账户ID串
+     *
+     */
+    @SaCheckPermission("payment:ptUserAccount:edit")
+    @Log(title = "支付账户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/close/{userIds}")
+    public R<Void> batchCloseAccount(@PathVariable Long[] userIds) {
+        if(ptUserAccountService.closeAccount(userIds)){
+            return R.ok();
+        } else {
+            return R.fail("账户余额不为0,销户失败");
+        }
+    }
 }
 }

+ 8 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtBagService.java

@@ -74,4 +74,12 @@ public interface IPtBagService {
      * @return 余额串,英文逗号分隔
      * @return 余额串,英文逗号分隔
      */
      */
     String selectAccountBalanceByIds(String userIds);
     String selectAccountBalanceByIds(String userIds);
+
+    /**
+     * 初始化账户钱包
+     *
+     * @param userId 账户Id
+     * @return 是否初始化成功
+     */
+    Boolean initAccountBag(Long userId);
 }
 }

+ 20 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/IPtUserAccountService.java

@@ -1,6 +1,5 @@
 package org.dromara.backstage.payment.service;
 package org.dromara.backstage.payment.service;
 
 
-import org.dromara.backstage.payment.domain.PtUserAccount;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
 import org.dromara.backstage.payment.domain.bo.PtUserAccountBo;
 import org.dromara.backstage.payment.domain.bo.PtUserAccountBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -120,4 +119,24 @@ public interface IPtUserAccountService {
      * @return 受影响的记录数据
      * @return 受影响的记录数据
      */
      */
     int resetConsumePwd(Long[] userIds, String pwd);
     int resetConsumePwd(Long[] userIds, String pwd);
+
+    /*
+     * 开户
+     *
+     * date 2024-08-08 16:37:49 16:37
+     * @author: luoyibo
+     * @param userIds 账户Id
+     * @return
+     */
+    int openAccount(Long[] userIds);
+
+    /*
+     * 销户
+     *
+     * date 2024-08-08 16:29:11 16:29
+     * @author: luoyibo
+     * @param userIds 账户Id
+     * @return
+     */
+    Boolean closeAccount(Long[] userIds);
 }
 }

+ 23 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtBagServiceImpl.java

@@ -166,4 +166,27 @@ public class PtBagServiceImpl implements IPtBagService {
         }
         }
         return String.join(StringUtils.SEPARATOR, list);
         return String.join(StringUtils.SEPARATOR, list);
     }
     }
+
+    /**
+     * 初始化账户钱包
+     *
+     * @param userId 账户Id
+     * @return 是否初始化成功
+     */
+    @Override
+    public Boolean initAccountBag(Long userId) {
+        PtBagBo bo = new PtBagBo();
+        bo.setUserId(userId);
+        List<PtBagVo> listVo = SpringUtils.getAopProxy(this).queryList(bo);
+        if(listVo.isEmpty()){
+            //没有钱包,初始化
+            for (int i = 1; i < 7; i++) {
+                bo = new PtBagBo();
+                bo.setUserId(userId);
+                bo.setBagCode(String.valueOf(i));
+                insertByBo(bo);
+            }
+        }
+        return true;
+    }
 }
 }

+ 56 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/payment/service/impl/PtUserAccountServiceImpl.java

@@ -1,7 +1,9 @@
 package org.dromara.backstage.payment.service.impl;
 package org.dromara.backstage.payment.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import lombok.extern.slf4j.Slf4j;
 import org.dromara.backstage.cardCenter.service.IPtCardService;
 import org.dromara.backstage.cardCenter.service.IPtCardService;
+import org.dromara.backstage.payment.service.IPtBagService;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -17,6 +19,8 @@ import org.dromara.backstage.payment.domain.PtUserAccount;
 import org.dromara.backstage.payment.mapper.PtUserAccountMapper;
 import org.dromara.backstage.payment.mapper.PtUserAccountMapper;
 import org.dromara.backstage.payment.service.IPtUserAccountService;
 import org.dromara.backstage.payment.service.IPtUserAccountService;
 
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Collection;
 import java.util.Collection;
@@ -29,10 +33,12 @@ import java.util.Collection;
  */
  */
 @RequiredArgsConstructor
 @RequiredArgsConstructor
 @Service
 @Service
+@Slf4j
 public class PtUserAccountServiceImpl implements IPtUserAccountService {
 public class PtUserAccountServiceImpl implements IPtUserAccountService {
 
 
     private final PtUserAccountMapper baseMapper;
     private final PtUserAccountMapper baseMapper;
     private final IPtCardService ptCardService;
     private final IPtCardService ptCardService;
+    private final IPtBagService bagService;
 
 
     /**
     /**
      * 查询一卡通账户
      * 查询一卡通账户
@@ -249,4 +255,54 @@ public class PtUserAccountServiceImpl implements IPtUserAccountService {
         }
         }
         return userIds.length;
         return userIds.length;
     }
     }
+
+    /*
+     * 开户
+     *
+     * date 2024-08-08 16:37:49 16:37
+     * @author: luoyibo
+     * @param userIds 账户Id
+     * @return
+     */
+    @Override
+    public int openAccount(Long[] userIds) {
+        for (Long userId : userIds){
+            //先初始化钱包
+            bagService.initAccountBag(userId);
+            //更新开户状态
+            baseMapper.update(null,new LambdaUpdateWrapper<PtUserAccount>()
+                .set(PtUserAccount::getAccountStatus,"1")
+                .eq(PtUserAccount::getUserId,userId));
+        }
+        return userIds.length;
+    }
+
+    /*
+     * 销户
+     *
+     * date 2024-08-08 16:29:11 16:29
+     * @author: luoyibo
+     * @param userIds 账户Id
+     * @return 销户的结果
+     */
+    @Override
+    public Boolean closeAccount(Long[] userIds) {
+        List<String> notCloseList = new ArrayList<>();
+        for (Long userId : userIds){
+            String tempValue = bagService.selectAccountBalanceByIds(String.valueOf(userId));
+            BigDecimal totalValue = new BigDecimal(tempValue);
+            if (totalValue.compareTo(BigDecimal.ZERO)==0){
+                //卡余为0,可以销户
+                baseMapper.update(null,new LambdaUpdateWrapper<PtUserAccount>()
+                    .set(PtUserAccount::getAccountStatus,"-1")
+                    .eq(PtUserAccount::getUserId,userId));
+            } else {
+                notCloseList.add(userId.toString());
+            }
+        }
+        if(!notCloseList.isEmpty()){
+            log.warn("[销户失败,有账户存在余额]-[{}]", String.join(StringUtils.SEPARATOR, notCloseList));
+        }
+        return notCloseList.isEmpty();
+    }
 }
 }