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

feature: 卡务中心->卡片操作 批量充值、退款与设置余额逻辑

autumnal_wind@yeah.net 1 год назад
Родитель
Сommit
e39ee1f83c

+ 1 - 1
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CreditTypeConstants.java

@@ -22,5 +22,5 @@ public interface CreditTypeConstants {
     /**
      * 管理费
      */
-    String COMMISSION="COMMISSION";
+    String COMMISSION="COMMISSION_CHARGE";
 }

+ 25 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/PaymentsBusiness.java

@@ -229,6 +229,31 @@ public class PaymentsBusiness {
         return bagService.updateBalanceByBo(bagBo);
     }
 
+    /**
+     * 通用收支入账处理逻辑
+     *  这里主要是处理一次性完成的原始订单生成、收支记账
+     *
+     * @param bo 资金收支信息
+     */
+    public void createOrderMin(PtBagBo bo) {
+        log.info("[开始生成{}订单]-{}", bo.getCreditType().message(), JSONUtil.toJsonStr(bo));
+        //1.处理入账需要的其它信息
+        List<Object> list = getOtherInfo(bo);
+        PtUserAccountVo accountVo = list.get(0) == null ? new PtUserAccountVo() : (PtUserAccountVo) list.get(0);
+        PtCardVo cardVo = list.get(1) == null ? new PtCardVo() : (PtCardVo) list.get(1);
+        PtBagVo bagVo = list.get(2) == null ? new PtBagVo() : (PtBagVo) list.get(2);
+        XfTermVo termVo = list.get(3) == null ? new XfTermVo() : (XfTermVo) list.get(3);
+        PtWorkstationVo workstationVo = list.get(4) == null ? new PtWorkstationVo() : (PtWorkstationVo) list.get(4);
+
+        //2.创建收支订单
+        XfCreditAccountBackVo creditBackVo = createOriginalRecord(bo, (PtUserAccountVo) list.get(0),
+            (PtCardVo) list.get(1), (PtBagVo) list.get(2), (XfTermVo) list.get(3), (PtWorkstationVo) list.get(4));
+
+        //3.收支入账,此处只需要入收支明细表就可以了
+        log.info("[{}订单生成完成,开始生成{}收支记录]-{}", bo.getCreditType().message(), bo.getCreditType().message(), JSONUtil.toJsonStr(bo));
+        keepAccounts(bo, accountVo, cardVo, bagVo, termVo, workstationVo, creditBackVo.getBackId());
+    }
+
     /**
      * 通用收支入账处理逻辑
      *  这里主要是处理一次性完成的原始订单生成、收支记账和更新个人日统计表功能

+ 1 - 11
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/strategy/impl/CommissionPaymentsStrategyImpl.java

@@ -38,17 +38,7 @@ public class CommissionPaymentsStrategyImpl implements IPaymentsStrategy {
      */
     @Override
     public PtBagVo creteOrder(PtBagBo bo) {
-
-        //1.处理入账需要的其它信息
-        PtUserAccountVo accountVo = new PtUserAccountVo();
-        PtCardVo cardVo = new PtCardVo();
-        XfTermVo termVo = new XfTermVo();
-        PtWorkstationVo workstationVo = new PtWorkstationVo();
-        PtBagVo bagVo = new PtBagVo();
-        business.getOtherInfo(bo);
-        log.info("[开始生成{}订单]-{}",bo.getOperationMode().message(), JSONUtil.toJsonStr(bo));
-        //2.创建收支订单
-        //3.收支入账,此处只需要入收支明细表就可以了
+        business.createOrderMin(bo);
         return null;
     }
 

+ 0 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/strategy/impl/RechargePaymentsStrategyImpl.java

@@ -45,7 +45,6 @@ public class RechargePaymentsStrategyImpl implements IPaymentsStrategy {
         business.createOrderNormal(bo);
         //5.写钱包余额
         log.info("[个人日统计表处理成功,开始更新账户余额-{}", JSONUtil.toJsonStr(bo));
-
         return business.updateBalance(bo);
     }
 

+ 0 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/strategy/impl/RefundPaymentsStrategyImpl.java

@@ -53,7 +53,6 @@ public class RefundPaymentsStrategyImpl implements IPaymentsStrategy {
         //5.写钱包余额
         log.info("[个人日统计表处理成功,开始更新账户余额-{}", JSONUtil.toJsonStr(bo));
         bo.setReceiptMoney(doValue.negate());
-
         return business.updateBalance(bo);
     }
 

+ 73 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/controller/PtCardController.java

@@ -12,6 +12,7 @@ import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
 import org.dromara.backstage.cardCenter.service.IPtCardService;
 import org.dromara.backstage.payment.domain.bo.PtBagBo;
 import org.dromara.backstage.payment.domain.vo.PtBagVo;
+import org.dromara.backstage.payment.service.IPtBagService;
 import org.dromara.common.core.constant.Constants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.enums.CreditTypeEnum;
@@ -47,6 +48,7 @@ public class PtCardController extends BaseController {
 
     private final IPtCardService ptCardService;
     private final PaymentsStrategyContent paymentsStrategyContent;
+    private final IPtBagService bagService;
 
     /**
      * 查询账户卡片列表
@@ -147,7 +149,7 @@ public class PtCardController extends BaseController {
     public R<PtBagVo> recharge(@Validated(EditGroup.class) @RequestBody PtBagBo bo) {
         PtBagVo vo;
         bo.setUseType(SystemUseTypeEnum.CONSUME);
-        if(bo.getTakeCommission().equals(Constants.TAKE_COMMISSION)) {
+        if (bo.getTakeCommission().equals(Constants.TAKE_COMMISSION)) {
             //如果要收管理费
             BigDecimal commission = ptCardService.computeCommission(bo);
             if (commission.compareTo(BigDecimal.ZERO) > 0) {
@@ -155,8 +157,8 @@ public class PtCardController extends BaseController {
                 BeanUtil.copyProperties(bo, commissionBo);
                 commissionBo.setReceiptMoney(commission);
                 commissionBo.setCreditType(CreditTypeEnum.COMMISSION_CHARGE);
-                //paymentsStrategyContent.createOrder(commissionBo);
                 bo.setReceiptMoney(bo.getReceiptMoney().subtract(commission));
+                paymentsStrategyContent.createOrder(commissionBo);
             }
         }
         vo = paymentsStrategyContent.createOrder(bo);
@@ -177,4 +179,73 @@ public class PtCardController extends BaseController {
         PtBagVo vo = paymentsStrategyContent.createOrder(bo);
         return R.ok(vo);
     }
+
+    /**
+     * 批量充值
+     */
+    @SaCheckPermission("cardOperation:ptCard:edit")
+    @Log(title = "批量账户充值", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PostMapping("/recharge/{userIds}")
+    public R<Void> batchRecharge(@Validated(EditGroup.class) @RequestBody PtBagBo bo, @PathVariable Long[] userIds) {
+        PtBagVo vo;
+        PtBagBo commissionBo = new PtBagBo();
+        commissionBo.setReceiptMoney(BigDecimal.ZERO);
+        bo.setUseType(SystemUseTypeEnum.CONSUME);
+        if (bo.getTakeCommission().equals(Constants.TAKE_COMMISSION)) {
+            //如果要收管理费
+            BigDecimal commission = ptCardService.computeCommission(bo);
+            if (commission.compareTo(BigDecimal.ZERO) > 0) {
+                BeanUtil.copyProperties(bo, commissionBo);
+                commissionBo.setReceiptMoney(commission);
+                commissionBo.setCreditType(CreditTypeEnum.COMMISSION_CHARGE);
+                bo.setReceiptMoney(bo.getReceiptMoney().subtract(commission));
+            }
+        }
+        for (Long userId : userIds) {
+            bo.setUserId(userId);
+            vo = paymentsStrategyContent.createOrder(bo);
+        }
+        if(commissionBo.getReceiptMoney().compareTo(BigDecimal.ZERO)>0){
+            for (Long userId : userIds) {
+                commissionBo.setUserId(userId);
+                vo = paymentsStrategyContent.createOrder(commissionBo);
+            }
+        }
+        return R.ok();
+    }
+
+    /**
+     * 批量退款
+     */
+    @SaCheckPermission("cardOperation:ptCard:edit")
+    @Log(title = "账户批量退款", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PostMapping("/refund/{userIds}")
+    public R<Void> batchRefund(@Validated(EditGroup.class) @RequestBody PtBagBo bo, @PathVariable Long[] userIds) {
+        bo.setUseType(SystemUseTypeEnum.CONSUME);
+        //退款是记支出,所以金额设置为负数
+        bo.setReceiptMoney(bo.getReceiptMoney().negate());
+        for (Long userId:userIds) {
+            bo.setUserId(userId);
+            PtBagVo vo = paymentsStrategyContent.createOrder(bo);
+        }
+        return R.ok();
+    }
+
+    /**
+     * 批量退款
+     */
+    @SaCheckPermission("cardOperation:ptCard:edit")
+    @Log(title = "账户批量设置余额", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PostMapping("/recover/{userIds}")
+    public R<Void> batchRecover(@Validated(EditGroup.class) @RequestBody PtBagBo bo, @PathVariable Long[] userIds) {
+        bo.setUseType(SystemUseTypeEnum.CONSUME);
+        for (Long userId:userIds) {
+            bo.setUserId(userId);
+            PtBagVo vo = bagService.updateBalanceByBo(bo);
+        }
+        return R.ok();
+    }
 }