Kaynağa Gözat

feature: 卡务中心->卡务操作 充值/退未款后台业务逻辑

luoyb 1 yıl önce
ebeveyn
işleme
64620ce90a
24 değiştirilmiş dosya ile 636 ekleme ve 89 silme
  1. 17 8
      config/nacos/datasource.yml
  2. 2 2
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CreditTypeConstants.java
  3. 2 0
      ruoyi-common/ruoyi-common-core/src/main/resources/i18n/messages_zh_CN.properties
  4. 0 0
      ruoyi-example/ruoyi-demo/src/main/resources/mapper/demo/IXfUserTotalService.xml
  5. 97 21
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/PaymentsBusiness.java
  6. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/strategy/impl/CommissionPaymentsStrategyImpl.java
  7. 9 11
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/strategy/impl/RechargePaymentsStrategyImpl.java
  8. 13 15
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/strategy/impl/RefundPaymentsStrategyImpl.java
  9. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/cardCenter/controller/PtCardController.java
  10. 11 11
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/controller/XfUsertotalController.java
  11. 4 2
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfCreditAccount.java
  12. 5 3
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfCreditAccountBack.java
  13. 82 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfUserTotal.java
  14. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfCreditAccountBackBo.java
  15. 79 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfUserTotalBo.java
  16. 3 2
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfCreditAccountBackVo.java
  17. 4 3
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfCreditAccountVo.java
  18. 92 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfUserTotalVo.java
  19. 3 3
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/mapper/XfUsertotalMapper.java
  20. 69 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfUserTotalService.java
  21. 1 3
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfCreditAccountBackServiceImpl.java
  22. 0 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfCreditAccountServiceImpl.java
  23. 139 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfUserTotalServiceImpl.java
  24. 1 1
      ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/consumption/XfUsertotalMapper.xml

+ 17 - 8
config/nacos/datasource.yml

@@ -2,21 +2,30 @@ datasource:
   system-master:
     # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562
     # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能
-    url: jdbc:mysql://localhost:3306/ykt_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    url: jdbc:kingbase8://39.98.79.140:54321/ykt_cloud?currentSchema=dbo&allowEncodingChanges=true&clientEncoding=UTF8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
     username: root
-    password: root@2024
+    password: 852!@#258
+    drivername: com.kingbase8.Driver
   gen:
-    url: jdbc:mysql://localhost:3306/ykt_cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    url: jdbc:kingbase8://39.98.79.140:54321/ykt_cloud?currentSchema=dbo&allowEncodingChanges=true&clientEncoding=UTF8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
     username: root
-    password: root@2024
+    password: 852!@#258
+    drivername: com.kingbase8.Driver
   job:
-    url: jdbc:mysql://localhost:3306/ykt_job?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+    url: jdbc:kingbase8://39.98.79.140:54321/ykt_job?currentSchema=dbo&allowEncodingChanges=true&clientEncoding=UTF8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
     username: root
-    password: root@2024
+    password: 852!@#258
+    drivername: com.kingbase8.Driver
   workflow:
-    url: jdbc:mysql://localhost:3306/ykt_workflow?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
+    url: jdbc:kingbase8://39.98.79.140:54321/ykt_workflow?currentSchema=dbo&allowEncodingChanges=true&clientEncoding=UTF8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
     username: root
-    password: root@2024
+    password: 852!@#258
+    drivername: com.kingbase8.Driver
+  storage:
+    url: jdbc:kingbase8://39.98.79.140:54321/ykt_storage?currentSchema=dbo&allowEncodingChanges=true&clientEncoding=UTF8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
+    username: root
+    password: 852!@#258
+    drivername: com.kingbase8.Driver
 #  system-oracle:
 #    url: jdbc:oracle:thin:@//localhost:1521/XE
 #    username: ROOT

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

@@ -14,7 +14,7 @@ public interface CreditTypeConstants {
     /**
      * 充值
      */
-    String RECHARGE="recharge";
+    String RECHARGE="RECHARGE";
     /**
      * 退款
      */
@@ -22,5 +22,5 @@ public interface CreditTypeConstants {
     /**
      * 管理费
      */
-    String COMMISSION="takeCommission";
+    String COMMISSION="COMMISSION";
 }

+ 2 - 0
ruoyi-common/ruoyi-common-core/src/main/resources/i18n/messages_zh_CN.properties

@@ -62,5 +62,7 @@ tenant.expired=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u79DF\u6237\u5DF2\u8FC7\u671
 ##\u94B1\u5305
 bag.balance.valid=\u8D26\u6237\u4F59\u989D\u6821\u9A8C\u5931\u8D25
 ## \u8D44\u91D1\u6536\u652F
+payments.OriginalRecord.create=\u521B\u5EFA\u539F\u59CB\u6536\u652F\u8BB0\u5F55\u5931\u8D25:{0}
 payments.OriginalRecord.get=\u65E0\u6B64Id\u5BF9\u5E94\u7684\u539F\u59CB\u6536\u652F\u8BB0\u5F55:{0}
 payments.OriginalRecord.isPost=\u8BE5\u7B14\u539F\u59CB\u6536\u652F\u8BB0\u5F55\u5DF2\u5165\u8D26,\u539F\u59CBId:{0},\u6536\u652FId:{1}
+payments.keepAccounts.create = \u539F\u59CB\u6536\u652F\u8BB0\u5F55\u5165\u8D26\u5931\u8D25,\u539F\u59CBId:{0}

+ 0 - 0
ruoyi-example/ruoyi-demo/src/main/resources/mapper/demo/ShardingOrderMapper.xml → ruoyi-example/ruoyi-demo/src/main/resources/mapper/demo/IXfUserTotalService.xml


+ 97 - 21
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/PaymentsBusiness.java

@@ -3,6 +3,7 @@ package org.dromara.backstage.business.payments;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import org.dromara.backstage.basics.domain.vo.PtWorkstationVo;
 import org.dromara.backstage.basics.service.IPtWorkstationService;
@@ -10,12 +11,15 @@ import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
 import org.dromara.backstage.cardCenter.service.IPtCardService;
 import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBackBo;
 import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBo;
+import org.dromara.backstage.consumption.domain.bo.XfUserTotalBo;
 import org.dromara.backstage.consumption.domain.vo.XfCreditAccountBackVo;
 import org.dromara.backstage.consumption.domain.vo.XfCreditAccountVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
+import org.dromara.backstage.consumption.domain.vo.XfUserTotalVo;
 import org.dromara.backstage.consumption.service.IXfCreditAccountBackService;
 import org.dromara.backstage.consumption.service.IXfCreditAccountService;
 import org.dromara.backstage.consumption.service.IXfTermService;
+import org.dromara.backstage.consumption.service.IXfUserTotalService;
 import org.dromara.backstage.payment.domain.bo.PtBagBo;
 import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
@@ -26,10 +30,14 @@ import org.dromara.common.core.exception.payments.PaymentsException;
 import org.dromara.common.core.utils.MessageUtils;
 import org.dromara.common.core.utils.RecordIdUtils;
 import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * name: PaymentsBusiness
@@ -44,6 +52,7 @@ import java.util.Date;
 @RequiredArgsConstructor
 @Service
 public class PaymentsBusiness {
+    private static final Logger log = LoggerFactory.getLogger(PaymentsBusiness.class);
     private final IPtWorkstationService workstationService;
     private final IPtUserAccountService userAccountService;
     private final IXfTermService termService;
@@ -51,35 +60,40 @@ public class PaymentsBusiness {
     private final IPtBagService bagService;
     private final IXfCreditAccountBackService creditAccountBackService;
     private final IXfCreditAccountService creditAccountService;
+    private final IXfUserTotalService userTotalService;
 
     /**
      * 账户资金收支时获取必要的辅助信息
      *
-     * @param bo            资金收支信息
-     * @param accountVo     资金收支账户信息
-     * @param cardVo        资金收支卡片信息
-     * @param bagVo         资金收支钱包信息
-     * @param termVo        资金收支消费设备信息
-     * @param workstationVo 资金收支工作站信息
+     * @param bo 资金收支信息
+     * @return 辅助信息列表
      */
-    public void getOtherInfo(PtBagBo bo, PtUserAccountVo accountVo, PtCardVo cardVo, PtBagVo bagVo, XfTermVo termVo, PtWorkstationVo workstationVo) {
+    public List<Object> getOtherInfo(PtBagBo bo) {
+        List<Object> list = new ArrayList<>();
         //1.人员辅助信息
-        accountVo = userAccountService.queryById(bo.getUserId());
+        PtUserAccountVo userAccountVo = userAccountService.queryById(bo.getUserId());
+        list.add(userAccountVo);
         //2.卡片辅助信息
+        PtCardVo ptCardVo;
         if (bo.getCardId() > 0) {
             //如果传入了cardId,根据cardId查询卡片信息
-            cardVo = cardService.queryById(bo.getCardId());
+            ptCardVo = cardService.queryById(bo.getCardId());
         } else {
             //查询当前人的正常主卡
-            cardVo = cardService.queryMainCardByUserId(bo.getUserId());
+            ptCardVo = cardService.queryMainCardByUserId(bo.getUserId());
         }
+        list.add(ptCardVo);
         //3.钱包辅助信息
-        bagVo = bagService.queryById(bo.getBagId());
+        PtBagVo ptBagVo = bagService.queryById(bo.getBagId());
+        list.add(ptBagVo);
         //4.设备辅助信息
-        termVo = termService.queryByNo(bo.getTermNo() == null ? 0 : bo.getTermNo());
+        XfTermVo xfTermVo = termService.queryByNo(bo.getTermNo() == null ? 0 : bo.getTermNo());
+        list.add(xfTermVo);
         //5.工作站辅助信息
-        workstationVo = workstationService.queryById(bo.getStationId());
+        PtWorkstationVo ptWorkstationVo = workstationService.queryById(bo.getStationId());
+        list.add(ptWorkstationVo);
 
+        return list;
     }
 
     /**
@@ -128,12 +142,13 @@ public class PaymentsBusiness {
         if (ObjUtil.isNotEmpty(workstationVo)) {
             xfCreditaccountbackBo.setStationId(workstationVo.getStationId());
         }
-        //xfCreditaccountbackBo.setRecordId();
-        //xfCreditaccountbackBo.setGroupId();
-        //xfCreditaccountbackBo.setCreditId();
-        //xfCreditaccountbackBo.setOriginalId();
-        //xfCreditaccountbackBo.setSmsSend();
-        return  creditAccountBackService.createOriginalRecord(xfCreditaccountbackBo);
+
+        XfCreditAccountBackVo creditAccountBackVo = creditAccountBackService.createOriginalRecord(xfCreditaccountbackBo);
+        if(ObjUtil.isEmpty(creditAccountBackVo)){
+            String message = MessageUtils.message("payments.OriginalRecord.create", JSONUtil.parse(bo));
+            throw new PaymentsException("资金收支-原始记录", message);
+        }
+        return  creditAccountBackVo;
     }
 
     /**
@@ -189,11 +204,64 @@ public class PaymentsBusiness {
 
         xfCreditaccountbo.setOriginalId(originalId);
 
-        //xfCreditaccountbo.setRecordId(0L);
-        return creditAccountService.keepAccounts(xfCreditaccountbo);
+        XfCreditAccountVo creditAccountVo = creditAccountService.keepAccounts(xfCreditaccountbo);
+        if(ObjUtil.isEmpty(creditAccountVo)){
+            String message = MessageUtils.message("payments.keepAccounts.create", originalId);
+            throw new PaymentsException("资金收支-收支入账", message);
+        }
+        return creditAccountVo;
     }
 
+    public XfUserTotalVo createOrUpdateUserTotal(PtBagBo bo, PtUserAccountVo accountVo, PtCardVo cardVo){
+        XfUserTotalBo xfUserTotalBo = new XfUserTotalBo();
+        xfUserTotalBo.setUserId(accountVo.getUserId());
+        xfUserTotalBo.setUserNumb(accountVo.getUserNumb());
+        xfUserTotalBo.setRealName(accountVo.getRealName());
+        xfUserTotalBo.setDeptName(accountVo.getDeptName());
+        xfUserTotalBo.setCardNo(cardVo.getCardNo());
+        xfUserTotalBo.setDateDay(DateUtil.format(new Date(),"yyyy-MM-dd"));
+        xfUserTotalBo.setUseType(bo.getUseType().code());
+        xfUserTotalBo.setCreditMoney(bo.getReceiptMoney());
+
+        return userTotalService.createOrUpdateUserTotal(xfUserTotalBo);
+    }
+    public PtBagVo updateBalance(PtBagBo bagBo){
+        return bagService.updateBalanceByBo(bagBo);
+    }
 
+    /**
+     * 通用收支入账处理逻辑
+     *  这里主要是处理一次性完成的原始订单生成、收支记账和更新个人日统计表功能
+     *
+     * @param bo 资金收支信息
+     */
+    public void createOrderNormal(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());
+
+        //4.写日统计表
+        log.info("[收支记录生成完成,开始写个人日统计表]-{}", JSONUtil.toJsonStr(bo));
+        createOrUpdateUserTotal(bo, accountVo, cardVo);
+    }
+    /**
+     * 收支入账前校验收支原始记录
+     *
+     * @param originalId 原始记录Id
+     */
     private void ValidOriginalRecord(String originalId){
         String message;
         XfCreditAccountBackVo xfCreditaccountbackVo = creditAccountBackService.queryById(originalId);
@@ -207,6 +275,14 @@ public class PaymentsBusiness {
             throw new PaymentsException("资金收支-原始记录", message);
         }
     }
+    /**
+     * 生成资金收支备份表和收支表的32位主键Id
+     *
+     * @param bo 资金收支信息
+     * @param accountVo 人员账户信息
+     * @param bagVo 账户钱包信息
+     * @return 生成的记录Id
+     */
     @NotNull
     private String getRecordKeyId(PtBagBo bo, PtUserAccountVo accountVo, PtBagVo bagVo) {
         BigDecimal a = new BigDecimal(100);

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

@@ -45,7 +45,7 @@ public class CommissionPaymentsStrategyImpl implements IPaymentsStrategy {
         XfTermVo termVo = new XfTermVo();
         PtWorkstationVo workstationVo = new PtWorkstationVo();
         PtBagVo bagVo = new PtBagVo();
-        business.getOtherInfo(bo,  accountVo,  cardVo, bagVo, termVo, workstationVo);
+        business.getOtherInfo(bo);
         log.info("[开始生成{}订单]-{}",bo.getOperationMode().message(), JSONUtil.toJsonStr(bo));
         //2.创建收支订单
         //3.收支入账,此处只需要入收支明细表就可以了

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

@@ -6,6 +6,7 @@ import org.dromara.backstage.basics.domain.vo.PtWorkstationVo;
 import org.dromara.backstage.business.payments.strategy.IPaymentsStrategy;
 import org.dromara.backstage.business.payments.PaymentsBusiness;
 import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
+import org.dromara.backstage.consumption.domain.vo.XfCreditAccountBackVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.payment.domain.bo.PtBagBo;
 import org.dromara.backstage.payment.domain.vo.PtBagVo;
@@ -15,6 +16,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * name: RechargePaymentsStrategyImpl
  * package: org.dromara.backstage.business.payments.strategy.impl
@@ -38,17 +42,11 @@ public class RechargePaymentsStrategyImpl implements IPaymentsStrategy {
      */
     @Override
     public PtBagVo creteOrder(PtBagBo bo) {
-        log.info("[开始生成{}订单]-{}",bo.getOperationMode().message(), JSONUtil.toJsonStr(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,  accountVo,  cardVo, bagVo, termVo, workstationVo);
-        //2.创建收支订单
-        //3.收支入账,此处只需要入收支明细表就可以了
-        return null;
+        business.createOrderNormal(bo);
+        //5.写钱包余额
+        log.info("[个人日统计表处理成功,开始更新账户余额-{}", JSONUtil.toJsonStr(bo));
+
+        return business.updateBalance(bo);
     }
 
     @Override

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

@@ -9,6 +9,7 @@ import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
 import org.dromara.backstage.consumption.domain.vo.XfCreditAccountBackVo;
 import org.dromara.backstage.consumption.domain.vo.XfCreditAccountVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
+import org.dromara.backstage.consumption.domain.vo.XfUserTotalVo;
 import org.dromara.backstage.payment.domain.bo.PtBagBo;
 import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
@@ -17,6 +18,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * name: RechargePaymentsStrategyImpl
  * package: org.dromara.backstage.business.payments.strategy.impl
@@ -32,9 +36,10 @@ import org.springframework.stereotype.Service;
 public class RefundPaymentsStrategyImpl implements IPaymentsStrategy {
     private static final Logger log = LoggerFactory.getLogger(RefundPaymentsStrategyImpl.class);
     private final PaymentsBusiness business;
+
     /**
      * 新增资金收支明细订单
-     *
+     * <p>
      * 因为管理平台的退款操作是一次性完成,所以将订单创建及更新钱包一次性完成
      *
      * @param bo 资金收支明细
@@ -42,21 +47,14 @@ public class RefundPaymentsStrategyImpl implements IPaymentsStrategy {
      */
     @Override
     public PtBagVo creteOrder(PtBagBo bo) {
-        log.info("[开始生成{}订单]-{}",bo.getOperationMode().message(), JSONUtil.toJsonStr(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,  accountVo,  cardVo, bagVo, termVo, workstationVo);
-        //2.创建收支订单
-        XfCreditAccountBackVo creditbackVo = business.createOriginalRecord(bo,  accountVo,  cardVo, bagVo, termVo, workstationVo);
-        //3.收支入账,此处只需要入收支明细表就可以了
-        log.info("[{}订单生成完成,开始生成{}收支记录]-{}",bo.getOperationMode().message(),bo.getOperationMode().message(), JSONUtil.toJsonStr(bo));
-        XfCreditAccountVo creditAccountVo = business.keepAccounts(bo, accountVo, cardVo, bagVo, termVo, workstationVo, creditbackVo.getBackId());
+        BigDecimal doValue = bo.getReceiptMoney();
+        business.createOrderNormal(bo);
 
-        return null;
+        //5.写钱包余额
+        log.info("[个人日统计表处理成功,开始更新账户余额-{}", JSONUtil.toJsonStr(bo));
+        bo.setReceiptMoney(doValue.negate());
+
+        return business.updateBalance(bo);
     }
 
     @Override

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

@@ -164,7 +164,7 @@ public class PtCardController extends BaseController {
     }
 
     /**
-     * 充值
+     * 退款
      */
     @SaCheckPermission("cardOperation:ptCard:edit")
     @Log(title = "账户退款", businessType = BusinessType.UPDATE)

+ 11 - 11
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/controller/XfUsertotalController.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.consumption.domain.bo.XfUserTotalBo;
+import org.dromara.backstage.consumption.domain.vo.XfUserTotalVo;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -17,9 +19,7 @@ import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.log.enums.BusinessType;
 import org.dromara.common.excel.utils.ExcelUtil;
-import org.dromara.backstage.consumption.domain.vo.XfUsertotalVo;
-import org.dromara.backstage.consumption.domain.bo.XfUsertotalBo;
-import org.dromara.backstage.consumption.service.IXfUsertotalService;
+import org.dromara.backstage.consumption.service.IXfUserTotalService;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 
 /**
@@ -35,14 +35,14 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
 @RequestMapping("/consumption/xfUsertotal")
 public class XfUsertotalController extends BaseController {
 
-    private final IXfUsertotalService xfUsertotalService;
+    private final IXfUserTotalService xfUsertotalService;
 
     /**
      * 查询个人与消费与充值统计列表
      */
     @SaCheckPermission("consumption:xfUsertotal:list")
     @GetMapping("/list")
-    public TableDataInfo<XfUsertotalVo> list(XfUsertotalBo bo, PageQuery pageQuery) {
+    public TableDataInfo<XfUserTotalVo> list(XfUserTotalBo bo, PageQuery pageQuery) {
         return xfUsertotalService.queryPageList(bo, pageQuery);
     }
 
@@ -52,9 +52,9 @@ public class XfUsertotalController extends BaseController {
     @SaCheckPermission("consumption:xfUsertotal:export")
     @Log(title = "个人与消费与充值统计", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(XfUsertotalBo bo, HttpServletResponse response) {
-        List<XfUsertotalVo> list = xfUsertotalService.queryList(bo);
-        ExcelUtil.exportExcel(list, "个人与消费与充值统计", XfUsertotalVo.class, response);
+    public void export(XfUserTotalBo bo, HttpServletResponse response) {
+        List<XfUserTotalVo> list = xfUsertotalService.queryList(bo);
+        ExcelUtil.exportExcel(list, "个人与消费与充值统计", XfUserTotalVo.class, response);
     }
 
     /**
@@ -64,7 +64,7 @@ public class XfUsertotalController extends BaseController {
      */
     @SaCheckPermission("consumption:xfUsertotal:query")
     @GetMapping("/{totalId}")
-    public R<XfUsertotalVo> getInfo(@NotNull(message = "主键不能为空")
+    public R<XfUserTotalVo> getInfo(@NotNull(message = "主键不能为空")
                                      @PathVariable String totalId) {
         return R.ok(xfUsertotalService.queryById(totalId));
     }
@@ -76,7 +76,7 @@ public class XfUsertotalController extends BaseController {
     @Log(title = "个人与消费与充值统计", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
-    public R<Void> add(@Validated(AddGroup.class) @RequestBody XfUsertotalBo bo) {
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody XfUserTotalBo bo) {
         return toAjax(xfUsertotalService.insertByBo(bo));
     }
 
@@ -87,7 +87,7 @@ public class XfUsertotalController extends BaseController {
     @Log(title = "个人与消费与充值统计", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
-    public R<Void> edit(@Validated(EditGroup.class) @RequestBody XfUsertotalBo bo) {
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody XfUserTotalBo bo) {
         return toAjax(xfUsertotalService.updateByBo(bo));
     }
 

+ 4 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfCreditAccount.java

@@ -4,6 +4,8 @@ import org.dromara.common.tenant.core.TenantEntity;
 import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 import java.io.Serial;
@@ -81,7 +83,7 @@ public class XfCreditAccount extends TenantEntity {
     /**
      * 卡上余额
      */
-    private Long cardValue;
+    private BigDecimal cardValue;
 
     /**
      * 卡片类型
@@ -151,7 +153,7 @@ public class XfCreditAccount extends TenantEntity {
     /**
      * 交易金额
      */
-    private Long receiptMoney;
+    private BigDecimal receiptMoney;
 
     /**
      * 核对状态,见sys_yes_no字典类型

+ 5 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfCreditAccountBack.java

@@ -4,6 +4,8 @@ import org.dromara.common.tenant.core.TenantEntity;
 import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
 import java.util.Date;
 
 import java.io.Serial;
@@ -56,7 +58,7 @@ public class XfCreditAccountBack extends TenantEntity {
     /**
      * 卡上余额
      */
-    private Long cardValue;
+    private BigDecimal cardValue;
 
     /**
      * 是否主卡,见sys_yes_no字典类别
@@ -101,7 +103,7 @@ public class XfCreditAccountBack extends TenantEntity {
     /**
      * 交易金额
      */
-    private Long receiptMoney;
+    private BigDecimal receiptMoney;
 
     /**
      * 交易状态
@@ -136,7 +138,7 @@ public class XfCreditAccountBack extends TenantEntity {
     /**
      * 统计分析标识
      */
-    private Long anlysFlag;
+    private Long analysisFlag;
 
     /**
      * 数字签名

+ 82 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfUserTotal.java

@@ -0,0 +1,82 @@
+package org.dromara.backstage.consumption.domain;
+
+import org.dromara.common.tenant.core.TenantEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 个人与消费与充值统计对象 t_xf_userTotal
+ *
+ * @author LionLi
+ * @date 2024-08-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("t_xf_userTotal")
+public class XfUsertotal extends TenantEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 汇总Id,主键
+     */
+    @TableId(value = "total_id")
+    private String totalId;
+
+    /**
+     * 人员Id
+     */
+    private Long userId;
+
+    /**
+     * 学/工号
+     */
+    private String userNumb;
+
+    /**
+     * 用户姓名
+     */
+    private String realName;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+    /**
+     * 卡流水号
+     */
+    private Long cardNo;
+
+    /**
+     * 消费日期
+     */
+    private String dateDay;
+
+    /**
+     * 使用类型,100-消费系统
+     */
+    private Long useYpe;
+
+    /**
+     * 充值金额
+     */
+    private Long creditMoney;
+
+    /**
+     * 消费金额
+     */
+    private Long consumeMoney;
+
+    /**
+     * 删除标志(0-未删除 2-已删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+
+}

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfCreditAccountBackBo.java

@@ -144,7 +144,7 @@ public class XfCreditAccountBackBo extends BaseEntity {
     /**
      * 统计分析标识
      */
-    private Long anlysFlag;
+    private Long analysisFlag;
 
     /**
      * 数字签名

+ 79 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfUserTotalBo.java

@@ -0,0 +1,79 @@
+package org.dromara.backstage.consumption.domain.bo;
+
+import org.dromara.backstage.consumption.domain.XfUsertotal;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+
+/**
+ * 个人与消费与充值统计业务对象 t_xf_userTotal
+ *
+ * @author LionLi
+ * @date 2024-08-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = XfUsertotal.class, reverseConvertGenerate = false)
+public class XfUsertotalBo extends BaseEntity {
+
+    /**
+     * 汇总Id,主键
+     */
+    @NotBlank(message = "汇总Id,主键不能为空", groups = { EditGroup.class })
+    private String totalId;
+
+    /**
+     * 人员Id
+     */
+    @NotNull(message = "人员Id不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long userId;
+
+    /**
+     * 学/工号
+     */
+    private String userNumb;
+
+    /**
+     * 用户姓名
+     */
+    private String realName;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+    /**
+     * 卡流水号
+     */
+    @NotNull(message = "卡流水号不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long cardNo;
+
+    /**
+     * 消费日期
+     */
+    @NotBlank(message = "消费日期不能为空", groups = { AddGroup.class, EditGroup.class })
+    private String dateDay;
+
+    /**
+     * 使用类型,100-消费系统
+     */
+    @NotNull(message = "使用类型,100-消费系统不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long useYpe;
+
+    /**
+     * 充值金额
+     */
+    private Long creditMoney;
+
+    /**
+     * 消费金额
+     */
+    private Long consumeMoney;
+
+
+}

+ 3 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfCreditAccountBackVo.java

@@ -1,5 +1,6 @@
 package org.dromara.backstage.consumption.domain.vo;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 import org.dromara.backstage.consumption.domain.XfCreditAccountBack;
@@ -66,7 +67,7 @@ public class XfCreditAccountBackVo implements Serializable {
      * 卡上余额
      */
     @ExcelProperty(value = "卡上余额")
-    private Long cardValue;
+    private BigDecimal cardValue;
 
     /**
      * 是否主卡,见sys_yes_no字典类别
@@ -120,7 +121,7 @@ public class XfCreditAccountBackVo implements Serializable {
      * 交易金额
      */
     @ExcelProperty(value = "交易金额")
-    private Long receiptMoney;
+    private BigDecimal receiptMoney;
 
     /**
      * 交易状态

+ 4 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfCreditAccountVo.java

@@ -1,5 +1,6 @@
 package org.dromara.backstage.consumption.domain.vo;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 import org.dromara.backstage.consumption.domain.XfCreditAccount;
@@ -96,7 +97,7 @@ public class XfCreditAccountVo implements Serializable {
      * 卡上余额
      */
     @ExcelProperty(value = "卡上余额")
-    private Long cardValue;
+    private BigDecimal cardValue;
 
     /**
      * 卡片类型
@@ -132,7 +133,7 @@ public class XfCreditAccountVo implements Serializable {
      * 使用类型,100-消费系统
      */
     @ExcelProperty(value = "使用类型,100-消费系统")
-    private Long useYpe;
+    private Long useType;
 
     /**
      * 工作站编号
@@ -180,7 +181,7 @@ public class XfCreditAccountVo implements Serializable {
      * 交易金额
      */
     @ExcelProperty(value = "交易金额")
-    private Long receiptMoney;
+    private BigDecimal receiptMoney;
 
     /**
      * 核对状态,见sys_yes_no字典类型

+ 92 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfUserTotalVo.java

@@ -0,0 +1,92 @@
+package org.dromara.backstage.consumption.domain.vo;
+
+import org.dromara.backstage.consumption.domain.XfUsertotal;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 个人与消费与充值统计视图对象 t_xf_userTotal
+ *
+ * @author LionLi
+ * @date 2024-08-15
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = XfUsertotal.class)
+public class XfUsertotalVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 汇总Id,主键
+     */
+    @ExcelProperty(value = "汇总Id,主键")
+    private String totalId;
+
+    /**
+     * 人员Id
+     */
+    @ExcelProperty(value = "人员Id")
+    private Long userId;
+
+    /**
+     * 学/工号
+     */
+    @ExcelProperty(value = "学/工号")
+    private String userNumb;
+
+    /**
+     * 用户姓名
+     */
+    @ExcelProperty(value = "用户姓名")
+    private String realName;
+
+    /**
+     * 部门名称
+     */
+    @ExcelProperty(value = "部门名称")
+    private String deptName;
+
+    /**
+     * 卡流水号
+     */
+    @ExcelProperty(value = "卡流水号")
+    private Long cardNo;
+
+    /**
+     * 消费日期
+     */
+    @ExcelProperty(value = "消费日期")
+    private String dateDay;
+
+    /**
+     * 使用类型,100-消费系统
+     */
+    @ExcelProperty(value = "使用类型,100-消费系统")
+    private Long useYpe;
+
+    /**
+     * 充值金额
+     */
+    @ExcelProperty(value = "充值金额")
+    private Long creditMoney;
+
+    /**
+     * 消费金额
+     */
+    @ExcelProperty(value = "消费金额")
+    private Long consumeMoney;
+
+
+}

+ 3 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/mapper/XfUsertotalMapper.java

@@ -1,7 +1,7 @@
 package org.dromara.backstage.consumption.mapper;
 
-import org.dromara.backstage.consumption.domain.XfUsertotal;
-import org.dromara.backstage.consumption.domain.vo.XfUsertotalVo;
+import org.dromara.backstage.consumption.domain.XfUserTotal;
+import org.dromara.backstage.consumption.domain.vo.XfUserTotalVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
 /**
@@ -10,6 +10,6 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  * @author LionLi
  * @date 2024-08-15
  */
-public interface XfUsertotalMapper extends BaseMapperPlus<XfUsertotal, XfUsertotalVo> {
+public interface XfUsertotalMapper extends BaseMapperPlus<XfUserTotal, XfUserTotalVo> {
 
 }

+ 69 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfUserTotalService.java

@@ -0,0 +1,69 @@
+package org.dromara.backstage.consumption.service;
+
+import org.dromara.backstage.consumption.domain.XfUsertotal;
+import org.dromara.backstage.consumption.domain.vo.XfUsertotalVo;
+import org.dromara.backstage.consumption.domain.bo.XfUsertotalBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 个人与消费与充值统计Service接口
+ *
+ * @author LionLi
+ * @date 2024-08-15
+ */
+public interface IXfUsertotalService {
+
+    /**
+     * 查询个人与消费与充值统计
+     *
+     * @param totalId 主键
+     * @return 个人与消费与充值统计
+     */
+    XfUsertotalVo queryById(String totalId);
+
+    /**
+     * 分页查询个人与消费与充值统计列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 个人与消费与充值统计分页列表
+     */
+    TableDataInfo<XfUsertotalVo> queryPageList(XfUsertotalBo bo, PageQuery pageQuery);
+
+    /**
+     * 查询符合条件的个人与消费与充值统计列表
+     *
+     * @param bo 查询条件
+     * @return 个人与消费与充值统计列表
+     */
+    List<XfUsertotalVo> queryList(XfUsertotalBo bo);
+
+    /**
+     * 新增个人与消费与充值统计
+     *
+     * @param bo 个人与消费与充值统计
+     * @return 是否新增成功
+     */
+    Boolean insertByBo(XfUsertotalBo bo);
+
+    /**
+     * 修改个人与消费与充值统计
+     *
+     * @param bo 个人与消费与充值统计
+     * @return 是否修改成功
+     */
+    Boolean updateByBo(XfUsertotalBo bo);
+
+    /**
+     * 校验并批量删除个人与消费与充值统计信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
+}

+ 1 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfCreditAccountBackServiceImpl.java

@@ -1,6 +1,5 @@
 package org.dromara.backstage.consumption.service.impl;
 
-import com.baomidou.dynamic.datasource.annotation.DS;
 import org.dromara.backstage.consumption.domain.XfCreditAccountBack;
 import org.dromara.backstage.consumption.domain.bo.XfCreditAccountBackBo;
 import org.dromara.backstage.consumption.domain.vo.XfCreditAccountBackVo;
@@ -28,7 +27,6 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Service
-@DS("storage")
 public class XfCreditAccountBackServiceImpl implements IXfCreditAccountBackService {
 
     private final XfCreditaccountbackMapper baseMapper;
@@ -94,7 +92,7 @@ public class XfCreditAccountBackServiceImpl implements IXfCreditAccountBackServi
         lqw.eq(StringUtils.isNotBlank(bo.getOriginalId()), XfCreditAccountBack::getOriginalId, bo.getOriginalId());
         lqw.eq(StringUtils.isNotBlank(bo.getSmsSend()), XfCreditAccountBack::getSmsSend, bo.getSmsSend());
         lqw.eq(bo.getRecordStatus() != null, XfCreditAccountBack::getRecordStatus, bo.getRecordStatus());
-        lqw.eq(bo.getAnlysFlag() != null, XfCreditAccountBack::getAnlysFlag, bo.getAnlysFlag());
+        lqw.eq(bo.getAnalysisFlag() != null, XfCreditAccountBack::getAnalysisFlag, bo.getAnalysisFlag());
         lqw.eq(StringUtils.isNotBlank(bo.getDigitalSign()), XfCreditAccountBack::getDigitalSign, bo.getDigitalSign());
         return lqw;
     }

+ 0 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfCreditAccountServiceImpl.java

@@ -28,7 +28,6 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Service
-@DS("storage")
 public class XfCreditAccountServiceImpl implements IXfCreditAccountService {
 
     private final XfCreditaccountMapper baseMapper;

+ 139 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfUserTotalServiceImpl.java

@@ -0,0 +1,139 @@
+package org.dromara.backstage.consumption.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.dromara.backstage.consumption.domain.bo.XfUsertotalBo;
+import org.dromara.backstage.consumption.domain.vo.XfUsertotalVo;
+import org.dromara.backstage.consumption.domain.XfUsertotal;
+import org.dromara.backstage.consumption.mapper.XfUsertotalMapper;
+import org.dromara.backstage.consumption.service.IXfUsertotalService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 个人与消费与充值统计Service业务层处理
+ *
+ * @author LionLi
+ * @date 2024-08-15
+ */
+@RequiredArgsConstructor
+@Service
+@DS("storage")
+public class XfUsertotalServiceImpl implements IXfUsertotalService {
+
+    private final XfUsertotalMapper baseMapper;
+
+    /**
+     * 查询个人与消费与充值统计
+     *
+     * @param totalId 主键
+     * @return 个人与消费与充值统计
+     */
+    @Override
+    public XfUsertotalVo queryById(String totalId){
+        return baseMapper.selectVoById(totalId);
+    }
+
+    /**
+     * 分页查询个人与消费与充值统计列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 个人与消费与充值统计分页列表
+     */
+    @Override
+    public TableDataInfo<XfUsertotalVo> queryPageList(XfUsertotalBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<XfUsertotal> lqw = buildQueryWrapper(bo);
+        Page<XfUsertotalVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的个人与消费与充值统计列表
+     *
+     * @param bo 查询条件
+     * @return 个人与消费与充值统计列表
+     */
+    @Override
+    public List<XfUsertotalVo> queryList(XfUsertotalBo bo) {
+        LambdaQueryWrapper<XfUsertotal> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<XfUsertotal> buildQueryWrapper(XfUsertotalBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<XfUsertotal> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getUserId() != null, XfUsertotal::getUserId, bo.getUserId());
+        lqw.eq(StringUtils.isNotBlank(bo.getUserNumb()), XfUsertotal::getUserNumb, bo.getUserNumb());
+        lqw.like(StringUtils.isNotBlank(bo.getRealName()), XfUsertotal::getRealName, bo.getRealName());
+        lqw.like(StringUtils.isNotBlank(bo.getDeptName()), XfUsertotal::getDeptName, bo.getDeptName());
+        lqw.eq(bo.getCardNo() != null, XfUsertotal::getCardNo, bo.getCardNo());
+        lqw.eq(StringUtils.isNotBlank(bo.getDateDay()), XfUsertotal::getDateDay, bo.getDateDay());
+        lqw.eq(bo.getUseYpe() != null, XfUsertotal::getUseYpe, bo.getUseYpe());
+        lqw.eq(bo.getCreditMoney() != null, XfUsertotal::getCreditMoney, bo.getCreditMoney());
+        lqw.eq(bo.getConsumeMoney() != null, XfUsertotal::getConsumeMoney, bo.getConsumeMoney());
+        return lqw;
+    }
+
+    /**
+     * 新增个人与消费与充值统计
+     *
+     * @param bo 个人与消费与充值统计
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(XfUsertotalBo bo) {
+        XfUsertotal add = MapstructUtils.convert(bo, XfUsertotal.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setTotalId(add.getTotalId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改个人与消费与充值统计
+     *
+     * @param bo 个人与消费与充值统计
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(XfUsertotalBo bo) {
+        XfUsertotal update = MapstructUtils.convert(bo, XfUsertotal.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(XfUsertotal entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除个人与消费与充值统计信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+}

+ 1 - 1
ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/consumption/XfUsertotalMapper.xml

@@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.backstage.consumption.mapper.XfUsertotalMapper">
 
-    <resultMap type="org.dromara.backstage.consumption.domain.XfUsertotal" id="XfUsertotalResult">
+    <resultMap type="org.dromara.backstage.consumption.domain.XfUserTotal" id="XfUsertotalResult">
             <result property="totalId"    column="total_id"    />
             <result property="tenantId"    column="tenant_id"    />
             <result property="userId"    column="user_id"    />