From ccad384233cedb89bc5895976b2326f3d1a34f85 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Wed, 18 Dec 2024 11:23:35 +0800
Subject: [PATCH] refactor(mall): 重构会员充值相关功能

---
 src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java           |   14 -
 src/main/java/cc/mrbird/febs/mall/vo/ApiGoChargeVo.java                         |    3 
 src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java           |   44 ++--
 src/main/java/cc/mrbird/febs/common/enumerates/RunVipMoneyFlowTypeEnum.java     |   26 ++
 src/main/java/cc/mrbird/febs/mall/service/impl/MallMoneyFlowServiceImpl.java    |   19 ++
 src/main/java/cc/mrbird/febs/mall/controller/AdminRunVipController.java         |    5 
 src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java             |    2 
 src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java                   |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java  |   25 ++
 src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html  |    4 
 src/main/java/cc/mrbird/febs/mall/entity/MallCharge.java                        |    2 
 src/main/java/cc/mrbird/febs/mall/service/IAdminRunVipService.java              |    5 
 src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html   |  142 ++---------------
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminRunVipServiceImpl.java      |   19 ++
 src/main/java/cc/mrbird/febs/common/enumerates/RunVipDataDictionaryEnum.java    |   17 +
 src/main/java/cc/mrbird/febs/mall/chain/ercCoin/BscUsdtContractEvent.java       |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java     |   23 ++
 src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java                         |   68 -------
 src/main/java/cc/mrbird/febs/mall/chain/trcCoin/quartz/ChainTrcListenerJob.java |    2 
 src/main/java/cc/mrbird/febs/mall/service/IMallMoneyFlowService.java            |    3 
 src/main/java/cc/mrbird/febs/mall/entity/RunVip.java                            |    3 
 21 files changed, 186 insertions(+), 244 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/RunVipDataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/RunVipDataDictionaryEnum.java
index c29e4af..33ee4f1 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/RunVipDataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/RunVipDataDictionaryEnum.java
@@ -10,25 +10,28 @@
     CHARGE_TYPE_BSC("CHARGE_TYPE", "CHARGE_TYPE_BSC"),
 
     //系统充值失效时间
-    CHARGE_SYS_FAIL_TIME("CHARGE_SYS_FAIL_TIME", "CHARGE_SYS_FAIL_TIME"),
+    CHARGE_SYS_FAIL_TIME("CHARGE_TYPE", "CHARGE_SYS_FAIL_TIME"),
 
     //系统充值地址
-    CHARGE_SYS_ADDRESS("CHARGE_SYS_ADDRESS", "CHARGE_SYS_ADDRESS"),
+    CHARGE_SYS_ADDRESS_TRC("CHARGE_TYPE", "CHARGE_SYS_ADDRESS_TRC"),
+
+    //系统充值地址
+    CHARGE_SYS_ADDRESS_BSC("CHARGE_TYPE", "CHARGE_SYS_ADDRESS_BSC"),
 
     //碳币兑换USDT的手续费率
-    RUN_VIP_BALANCE_TO_COIN_PERCENT("RUN_VIP_BALANCE_TO_COIN_PERCENT", "RUN_VIP_BALANCE_TO_COIN_PERCENT"),
+    RUN_VIP_BALANCE_TO_COIN_PERCENT("CHARGE_TYPE", "RUN_VIP_BALANCE_TO_COIN_PERCENT"),
 
     //碳币兑换USDT的最小数
-    RUN_VIP_BALANCE_TO_COIN_MIN("RUN_VIP_BALANCE_TO_COIN_MIN", "RUN_VIP_BALANCE_TO_COIN_MIN"),
+    RUN_VIP_BALANCE_TO_COIN_MIN("CHARGE_TYPE", "RUN_VIP_BALANCE_TO_COIN_MIN"),
 
     //碳币兑换USDT的比值,如果为0.5,则表示1碳币兑换0.5个USDT
-    RUN_VIP_BALANCE_TO_COIN("RUN_VIP_BALANCE_TO_COIN", "RUN_VIP_BALANCE_TO_COIN"),
+    RUN_VIP_BALANCE_TO_COIN("CHARGE_TYPE", "RUN_VIP_BALANCE_TO_COIN"),
 
     //用户碳积分兑换碳币的比值 如果为0.5,则表示1积分兑换0.5个碳币
-    RUN_VIP_SCORE_TO_BALANCE("RUN_VIP_SCORE_TO_BALANCE", "RUN_VIP_SCORE_TO_BALANCE"),
+    RUN_VIP_SCORE_TO_BALANCE("CHARGE_TYPE", "RUN_VIP_SCORE_TO_BALANCE"),
 
     //用户碳积分兑换碳币的最小兑换数值
-    RUN_VIP_SCORE_MIN("RUN_VIP_SCORE_MIN", "RUN_VIP_SCORE_MIN");
+    RUN_VIP_SCORE_MIN("CHARGE_TYPE", "RUN_VIP_SCORE_MIN");
 
     private String type;
 
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/RunVipMoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/RunVipMoneyFlowTypeEnum.java
index a883b57..ba19bd8 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/RunVipMoneyFlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/RunVipMoneyFlowTypeEnum.java
@@ -6,41 +6,53 @@
 public enum RunVipMoneyFlowTypeEnum {
 
     /**
+     * 系统拨付碳积分
+     */
+    SYS_SCORE(8,"系统拨付碳积分{}","系统拨付碳积分"),
+
+    /**
+     * 系统拨付碳币
+     */
+    SYS_BALANCE(7,"系统拨付碳币{}","系统拨付碳币"),
+
+    /**
      * 购买VIP返利
      */
-    BUY_VIP_REBATE(6,"{}购买{},返利{}碳币"),
+    BUY_VIP_REBATE(6,"{}购买{},返利{}碳币","用户返利碳币"),
 
     /**
      * 碳币提现
      */
-    BALANCE_OUT(5,"{}碳币兑换{}USDT,手续费{}USDT"),
+    BALANCE_OUT(5,"{}碳币兑换{}USDT,手续费{}USDT","碳币提现"),
 
     /**
      * 碳积分兑换碳币
      */
-    SCORE_OUT_BALANCE_IN(4,"{}碳积分兑换{}碳币"),
+    SCORE_OUT_BALANCE_IN(4,"{}碳积分兑换{}碳币","获得碳币"),
 
     /**
      * 碳积分兑换碳币
      */
-    SCORE_OUT_BALANCE(3,"{}碳积分兑换{}碳币"),
+    SCORE_OUT_BALANCE(3,"{}碳积分兑换{}碳币","碳积分兑换"),
 
     /**
      * 碳币转赠好友-转入
      */
-    BALANCE_IN_GIVE_FRIEND(2,"获得好友{},{}碳币"),
+    BALANCE_IN_GIVE_FRIEND(2,"获得好友{},{}碳币","碳币转赠好友-转入"),
 
     /**
      * 碳币转赠好友-转出
      */
-    BALANCE_OUT_GIVE_FRIEND(1,"转赠好友{},{}碳币");
+    BALANCE_OUT_GIVE_FRIEND(1,"转赠好友{},{}碳币","碳币转赠好友-转出");
 
     private final int value;
     private final String description;
+    private final String typeDec;
 
-    RunVipMoneyFlowTypeEnum(int value,String description) {
+    RunVipMoneyFlowTypeEnum(int value,String description,String typeDec) {
 
         this.value = value;
         this.description = description;
+        this.typeDec = typeDec;
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/ercCoin/BscUsdtContractEvent.java b/src/main/java/cc/mrbird/febs/mall/chain/ercCoin/BscUsdtContractEvent.java
index 9c74dca..4eada3f 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/ercCoin/BscUsdtContractEvent.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/ercCoin/BscUsdtContractEvent.java
@@ -36,7 +36,7 @@
             return;
         }
         String sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getType(),  RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getCode()
+                RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_BSC.getType(),  RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_BSC.getCode()
         ).getValue();
         String type = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                 RunVipDataDictionaryEnum.CHARGE_TYPE_BSC.getType(),  RunVipDataDictionaryEnum.CHARGE_TYPE_BSC.getCode()
diff --git a/src/main/java/cc/mrbird/febs/mall/chain/trcCoin/quartz/ChainTrcListenerJob.java b/src/main/java/cc/mrbird/febs/mall/chain/trcCoin/quartz/ChainTrcListenerJob.java
index 7c82fab..92a7e26 100644
--- a/src/main/java/cc/mrbird/febs/mall/chain/trcCoin/quartz/ChainTrcListenerJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/chain/trcCoin/quartz/ChainTrcListenerJob.java
@@ -62,7 +62,7 @@
     public void chainBlockUpdate() {
         log.info("TRC20同步");
         String sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getType(),  RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getCode()
+                RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_TRC.getType(),  RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_TRC.getCode()
         ).getValue();
         String type = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                 RunVipDataDictionaryEnum.CHARGE_TYPE_TRC.getType(),  RunVipDataDictionaryEnum.CHARGE_TYPE_TRC.getCode()
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminRunVipController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminRunVipController.java
index 1bd492a..1f6aa6b 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminRunVipController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminRunVipController.java
@@ -28,6 +28,11 @@
     private final IAdminRunVipService iAdminRunVipService;
     private final MallMemberMapper mallMemberMapper;
 
+    @GetMapping(value = "/allMoneyType")
+    public FebsResponse allMoneyType() {
+        return new FebsResponse().success().data(iAdminRunVipService.allMoneyType());
+    }
+
     @GetMapping(value = "/allVipList")
     public FebsResponse allVipList() {
         return new FebsResponse().success().data(iAdminRunVipService.list());
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java
index 6878d75..577e80c 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiRunVipController.java
@@ -6,7 +6,6 @@
 import cc.mrbird.febs.mall.dto.ApiGoChargeDto;
 import cc.mrbird.febs.mall.dto.ApiGoChargeInfoDto;
 import cc.mrbird.febs.mall.service.IRunVipService;
-import cc.mrbird.febs.mall.vo.ApiChargeInfoVo;
 import cc.mrbird.febs.mall.vo.ApiChargeVo;
 import cc.mrbird.febs.mall.vo.ApiGoChargeVo;
 import cc.mrbird.febs.mall.vo.ApiRunVipVo;
@@ -41,16 +40,7 @@
         return new FebsResponse().success().data(iRunVipService.vipInfo());
     }
 
-    @ApiOperation(value = "【购买VIP】基本数据", notes = "【余额充值】基本数据")
-    @ApiResponses({
-            @ApiResponse(code = 200, message = "success", response = ApiChargeInfoVo.class)
-    })
-    @GetMapping(value = "/getChargeInfo")
-    public FebsResponse getChargeInfo() {
-        return iRunVipService.getChargeInfo();
-    }
-
-    @ApiOperation(value = "【购买VIP】列表", notes = "【余额充值】列表")
+    @ApiOperation(value = "【购买VIP】列表", notes = "【购买VIP】列表")
     @ApiResponses({
             @ApiResponse(code = 200, message = "success", response = ApiChargeVo.class)
     })
@@ -69,7 +59,7 @@
         return iRunVipService.goCharge(apiGoChargeDto);
     }
 
-    @ApiOperation(value = "【购买VIP】马上支付", notes = "【余额充值】马上支付")
+    @ApiOperation(value = "【购买VIP】马上支付", notes = "【购买VIP】马上支付")
     @ApiResponses({
             @ApiResponse(code = 200, message = "success", response = ApiGoChargeVo.class)
     })
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallCharge.java b/src/main/java/cc/mrbird/febs/mall/entity/MallCharge.java
index 38f1b9b..af4aec1 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallCharge.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallCharge.java
@@ -15,7 +15,7 @@
     private Long memberId;
     private String orderNo;
     private Integer state;//2-进行中 1-成功 0-失败
-    private String type;//1-trc 2-erc
+    private String type;//trc erc
     private String address;
     private BigDecimal amount;
     private Date failTime;
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/RunVip.java b/src/main/java/cc/mrbird/febs/mall/entity/RunVip.java
index 53c5e59..161bcf4 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/RunVip.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/RunVip.java
@@ -6,6 +6,9 @@
 
 import java.math.BigDecimal;
 
+/**
+ * 序号越小,等级越低
+ */
 @Data
 @TableName("run_vip")
 public class RunVip extends BaseEntity {
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
index 068ef23..8644275 100644
--- a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -1,36 +1,12 @@
 package cc.mrbird.febs.mall.quartz;
 
-import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
-import cc.mrbird.febs.common.utils.MallUtils;
-import cc.mrbird.febs.mall.entity.MallMember;
-import cc.mrbird.febs.mall.entity.MallMoneyFlow;
-import cc.mrbird.febs.mall.mapper.MallMemberMapper;
-import cc.mrbird.febs.mall.mapper.MallMoneyFlowMapper;
-import cc.mrbird.febs.mall.service.IApiMallMemberService;
-import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
 import cc.mrbird.febs.mall.service.IMemberProfitService;
-import cc.mrbird.febs.mall.service.impl.CommonService;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.util.StrUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @author wzy
- * @date 2021-09-28
- **/
 @Slf4j
 @Component
 @ConditionalOnProperty(prefix = "system", name = "job", havingValue = "true")
@@ -39,41 +15,11 @@
     @Autowired
     private IMemberProfitService memberProfitService;
 
-//    /**
-//     * 代理分红
-//     */
-//    @Scheduled(cron = "0 30 0 * * ?")
-//    public void profitJob() {
-//        memberProfitService.agentProfit(null);
-//    }
-//
-//    @Scheduled(cron = "0 30 1 * * ?")
-//    public void storeAndDirectorJob() {
-//        memberProfitService.storeAndDirectorProfit(null);
-//    }
-//
-//    /**
-//     * 感恩奖
-//     */
-//    @Scheduled(cron = "0 0 1 * * ?")
-//    public void thankfulJob() {
-//        memberProfitService.thankfulProfit(null);
-//    }
-//
-//
-//    /**
-//     * 静态分红
-//     */
-//    @Scheduled(cron = "0 0 0 * * ?")
-//    public void staticProfitJob() {
-//        memberProfitService.staticProfit(null);
-//    }
-//
-//    /**
-//     * 排名奖 每月1号
-//     */
-//    @Scheduled(cron = "0 30 0 1 * ?")
-//    public void rankJob() {
-//        memberProfitService.rankProfit();
-//    }
+    /**
+     * 套餐过期后,更新用户为游客等级
+     */
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void updateMemberLevel() {
+        memberProfitService.updateMemberLevel();
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminRunVipService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminRunVipService.java
index ab0ca39..7d71dbe 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAdminRunVipService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminRunVipService.java
@@ -4,9 +4,12 @@
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.mall.entity.MallCharge;
 import cc.mrbird.febs.mall.entity.MallMemberWithdraw;
+import cc.mrbird.febs.mall.entity.MallMoneyFlow;
 import cc.mrbird.febs.mall.entity.RunVip;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
 
 public interface IAdminRunVipService extends IService<RunVip> {
 
@@ -23,4 +26,6 @@
     FebsResponse sellAgree(Integer state, Long id);
 
     IPage<MallMemberWithdraw> sellList(MallMemberWithdraw mallMemberWithdraw, QueryRequest request);
+
+    List<MallMoneyFlow> allMoneyType();
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallMoneyFlowService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallMoneyFlowService.java
index 81d430d..e261d18 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMallMoneyFlowService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMallMoneyFlowService.java
@@ -17,4 +17,7 @@
 
     void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, Long rtMemberId, Integer flowType);
 
+    void runVipMoneyFlowAdd(
+            Long memberId, Long rtMemberId, String orderNo,Integer flowType, Integer type, BigDecimal amount, String description, Integer status);
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
index 853979d..f47e4b8 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
@@ -41,4 +41,6 @@
     void storeAndDirectorProfit(Date profitDate);
 
     void getOrderCoupon(Long orderId);
+
+    void updateMemberLevel();
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java b/src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java
index 4ee013f..c13df6d 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IRunVipService.java
@@ -18,7 +18,5 @@
 
     FebsResponse goChargeInfo(ApiGoChargeInfoDto apiGoChargeInfoDto);
 
-    FebsResponse getChargeInfo();
-
     List<ApiChargeVo> getChargeList(ApiChargeListDto apiChargeListDto);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
index ed6031a..026eaba 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
@@ -2,9 +2,7 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
-import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.YesOrNoEnum;
+import cc.mrbird.febs.common.enumerates.*;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.common.utils.MallUtils;
@@ -503,11 +501,20 @@
         }
 
         Integer type = mallSystemPayDto.getType();
+        Integer flowType = 0;
+        Integer moneyType = 0;
+        String moneyTypeDec = "";
         String filedType = "";
         if (type == 1) {
             filedType = "balance";
+            flowType = FlowTypeEnum.BALANCE.getValue();
+            moneyType = RunVipMoneyFlowTypeEnum.SYS_BALANCE.getValue();
+            moneyTypeDec = RunVipMoneyFlowTypeEnum.SYS_BALANCE.getDescription();
         } else if (type == 2) {
             filedType = "score";
+            flowType = FlowTypeEnum.SCORE.getValue();
+            moneyType = RunVipMoneyFlowTypeEnum.SYS_SCORE.getValue();
+            moneyTypeDec = RunVipMoneyFlowTypeEnum.SYS_SCORE.getDescription();
         } else if (type == 3) {
             filedType = "prizeScore";
         } else {
@@ -523,7 +530,17 @@
         } else {
             iApiMallMemberWalletService.add(mallSystemPayDto.getAddBalance(), mallSystemPayDto.getId(), filedType);
         }
-        mallMoneyFlowService.addMoneyFlow(memberId, bigDecimal, MoneyFlowTypeEnum.SYSTEM.getValue(), MallUtils.getOrderNum(), type, null,2);
+        String orderNo = MallUtils.getOrderNum("SYS");
+        mallMoneyFlowService.runVipMoneyFlowAdd(
+                mallMember.getId(),
+                mallMember.getId(),
+                orderNo,
+                flowType,
+                moneyType,
+                bigDecimal,
+                StrUtil.format(moneyTypeDec,bigDecimal),
+                YesOrNoEnum.YES.getValue()
+        );
         return new FebsResponse().success();
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminRunVipServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminRunVipServiceImpl.java
index a5674b7..07f46ee 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminRunVipServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminRunVipServiceImpl.java
@@ -2,6 +2,7 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.enumerates.RunVipMoneyFlowTypeEnum;
 import cc.mrbird.febs.common.enumerates.YesOrNoEnum;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.mall.entity.MallCharge;
@@ -23,6 +24,9 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
 
 @Slf4j
 @Service
@@ -113,4 +117,19 @@
         IPage<MallMemberWithdraw> adminChargeListVoIPage = mallChargeMapper.selectAdminWithdrawListInPage(page, mallMemberWithdraw);
         return adminChargeListVoIPage;
     }
+
+    @Override
+    public List<MallMoneyFlow> allMoneyType() {
+        List<MallMoneyFlow> mallMoneyFlows = new ArrayList<>();
+        RunVipMoneyFlowTypeEnum[] values = RunVipMoneyFlowTypeEnum.values();
+        for (RunVipMoneyFlowTypeEnum value : values) {
+            MallMoneyFlow mallMoneyFlow = new MallMoneyFlow();
+            mallMoneyFlow.setType(value.getValue());
+            mallMoneyFlow.setDescription(value.getDescription());
+            mallMoneyFlow.setRemark(value.getTypeDec());
+            mallMoneyFlows.add(mallMoneyFlow);
+        }
+
+        return mallMoneyFlows;
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallMoneyFlowServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMoneyFlowServiceImpl.java
index bd2bd99..02be53e 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MallMoneyFlowServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMoneyFlowServiceImpl.java
@@ -54,4 +54,23 @@
     public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, Long rtMemberId, Integer flowType) {
         this.addMoneyFlow(memberId, amount, type, orderNo, null, null, rtMemberId, null, flowType, null);
     }
+
+    @Override
+    public void runVipMoneyFlowAdd(Long memberId, Long rtMemberId, String orderNo,Integer flowType, Integer type, BigDecimal amount, String description, Integer status) {
+        // 创建一个新的商城资金流水对象
+        MallMoneyFlow flow = new MallMoneyFlow();
+
+        // 设置资金流水的各项属性
+        flow.setMemberId(memberId);
+        flow.setRtMemberId(rtMemberId);
+        flow.setOrderNo(orderNo);
+        flow.setFlowType(flowType);
+        flow.setType(type);
+        flow.setAmount(amount);
+        flow.setDescription(description);
+        flow.setStatus(status);
+
+        // 插入资金流水记录到数据库
+        this.baseMapper.insert(flow);
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
index 642f7f9..7f2e537 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java
@@ -8,15 +8,14 @@
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
-import cc.mrbird.febs.mall.service.IMallAchieveService;
 import cc.mrbird.febs.mall.service.IMallMoneyFlowService;
 import cc.mrbird.febs.mall.service.IMemberProfitService;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
-import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
@@ -48,6 +47,7 @@
     private final MallMoneyFlowMapper mallMoneyFlowMapper;
     private final MallAchieveRecordMapper mallAchieveRecordMapper;
     private final MallMemberCouponMapper mallMemberCouponMapper;
+    private final RunVipMapper runVipMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -494,4 +494,23 @@
             }
         }
     }
+
+    @Override
+    public void updateMemberLevel() {
+        List<RunVip> runVips = runVipMapper.selectList(new LambdaQueryWrapper<RunVip>().orderByAsc(RunVip :: getOrderNumber));
+        RunVip runVip = runVips.get(0);
+
+        //获取过期时间小于等于当前时间,并且会员等级不是最小等级游客的所有用户
+        LambdaQueryWrapper<MallMember> mallMemberLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        mallMemberLambdaQueryWrapper.le(MallMember :: getVipLevelTime,DateUtil.date());
+        mallMemberLambdaQueryWrapper.ne(MallMember :: getLevel,runVip.getVipCode());
+        List<MallMember> mallMembers = mallMemberMapper.selectList(mallMemberLambdaQueryWrapper);
+        if(CollUtil.isNotEmpty(mallMembers)){
+            mallMembers.forEach(
+                    item -> {
+                        mallMemberMapper.updateVipLevelTimeAndLevel(item.getId(),item.getVipLevelTime(),item.getLevel());
+                    }
+            );
+        }
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java
index 7204a35..9310a62 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/RunVipServiceImpl.java
@@ -11,13 +11,15 @@
 import cc.mrbird.febs.mall.dto.ApiGoChargeDto;
 import cc.mrbird.febs.mall.dto.ApiGoChargeInfoDto;
 import cc.mrbird.febs.mall.dto.ApiMemberChargeFailDto;
-import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.entity.MallCharge;
+import cc.mrbird.febs.mall.entity.MallMember;
+import cc.mrbird.febs.mall.entity.MallMemberPayment;
+import cc.mrbird.febs.mall.entity.RunVip;
 import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
 import cc.mrbird.febs.mall.mapper.MallChargeMapper;
 import cc.mrbird.febs.mall.mapper.MallMemberPaymentMapper;
 import cc.mrbird.febs.mall.mapper.RunVipMapper;
 import cc.mrbird.febs.mall.service.IRunVipService;
-import cc.mrbird.febs.mall.vo.ApiChargeInfoVo;
 import cc.mrbird.febs.mall.vo.ApiChargeVo;
 import cc.mrbird.febs.mall.vo.ApiGoChargeVo;
 import cc.mrbird.febs.mall.vo.ApiRunVipVo;
@@ -36,7 +38,6 @@
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -86,10 +87,23 @@
             return new FebsResponse().fail().message("请先绑定你的地址");
         }
 
-        String sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getType(),
-                RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getCode()
+        //判断系统的充值地址
+        String trcType = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                RunVipDataDictionaryEnum.CHARGE_TYPE_TRC.getType(),
+                RunVipDataDictionaryEnum.CHARGE_TYPE_TRC.getCode()
         ).getValue();
+        String sysAddress = "";
+        if(trcType.equals(mallMemberPayment.getBankNo())){
+            sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                    RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_TRC.getType(),
+                    RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_TRC.getCode()
+            ).getValue();
+        }else{
+            sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                    RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_BSC.getType(),
+                    RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS_BSC.getCode()
+            ).getValue();
+        }
         String failMinutes = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                 RunVipDataDictionaryEnum.CHARGE_SYS_FAIL_TIME.getType(),
                 RunVipDataDictionaryEnum.CHARGE_SYS_FAIL_TIME.getCode()
@@ -115,6 +129,7 @@
         apiGoChargeVo.setAddress(mallCharge.getAddress());
         apiGoChargeVo.setAmount(mallCharge.getAmount());
         apiGoChargeVo.setSysAddress(mallCharge.getSysAddress());
+        apiGoChargeVo.setSysAddressType(mallCharge.getType());
 
         /**
          * 充值接口调用后,发送一个延时队列
@@ -143,23 +158,8 @@
         apiGoChargeVo.setAddress(mallCharge.getAddress());
         apiGoChargeVo.setAmount(mallCharge.getAmount());
         apiGoChargeVo.setSysAddress(mallCharge.getSysAddress());
+        apiGoChargeVo.setSysAddressType(mallCharge.getType());
         return new FebsResponse().success().data(apiGoChargeVo);
-    }
-
-    @Override
-    public FebsResponse getChargeInfo() {
-        Long memberId = LoginUserUtil.getLoginUser().getId();
-        ApiChargeInfoVo apiChargeInfoVo = new ApiChargeInfoVo();
-
-        String sysAddress = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
-                RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getType(),
-                RunVipDataDictionaryEnum.CHARGE_SYS_ADDRESS.getCode()
-        ).getValue();
-        apiChargeInfoVo.setChargeAddress(sysAddress);
-        List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(RunVipDataDictionaryEnum.CHARGE_TYPE_TRC.getType());
-        List<String> coinTypeList = dataDictionaryCustoms.stream().map(DataDictionaryCustom::getValue).collect(Collectors.toList());
-        apiChargeInfoVo.setCoinType(coinTypeList);
-        return new FebsResponse().success().data(apiChargeInfoVo);
     }
 
     @Override
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiGoChargeVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiGoChargeVo.java
index 7b9ffc0..e0c197b 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiGoChargeVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiGoChargeVo.java
@@ -24,4 +24,7 @@
 
     @ApiModelProperty(value = "系统收款地址")
     private String sysAddress;
+
+    @ApiModelProperty(value = "系统收款地址类型")
+    private String sysAddressType;
 }
diff --git a/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html b/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html
index 08d58d3..a5464b2 100644
--- a/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html
+++ b/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html
@@ -16,7 +16,7 @@
                                     <div class="layui-inline">
                                         <label class="layui-form-label layui-form-label-sm">会员类型</label>
                                         <div class="layui-input-inline">
-                                            <select name="levelType" class="vip-level-set-level_member">
+                                            <select name="levelType" class="vip-level-set-level-member">
                                                 <option value="">请选择</option>
                                             </select>
                                         </div>
@@ -124,7 +124,7 @@
             var data = res.data;
             for (var k in data)
             {
-                $(".vip-level-set-level_member").append("<option value='" + data[k].vipCode + "'>" + data[k].vipName + "</option>");
+                $(".vip-level-set-level-member").append("<option value='" + data[k].vipCode + "'>" + data[k].vipName + "</option>");
             }
             layui.use('form', function () {
                 var form = layui.form;
diff --git a/src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html b/src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html
index 30223e5..3f9007c 100644
--- a/src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html
+++ b/src/main/resources/templates/febs/views/modules/mallMember/moneyFlowList.html
@@ -8,12 +8,6 @@
                             <div class="layui-col-md10">
                                 <div class="layui-form-item">
                                     <div class="layui-inline">
-                                        <label class="layui-form-label layui-form-label-sm">用户昵称</label>
-                                        <div class="layui-input-inline">
-                                            <input type="text" placeholder="用户昵称" name="name" autocomplete="off" class="layui-input">
-                                        </div>
-                                    </div>
-                                    <div class="layui-inline">
                                         <label class="layui-form-label layui-form-label-sm">手机号码</label>
                                         <div class="layui-input-inline">
                                             <input type="text" placeholder="手机号码" name="phone" autocomplete="off" class="layui-input">
@@ -22,30 +16,8 @@
                                     <div class="layui-inline">
                                         <label class="layui-form-label layui-form-label-sm">流水类型</label>
                                         <div class="layui-input-inline">
-                                            <select name="type">
+                                            <select name="type" class="money-flow-type">
                                                 <option value="">请选择</option>
-<!--                                                <option value="1">静态收益</option>-->
-<!--                                                <option value="2">直推奖</option>-->
-<!--                                                <option value="3">代理收益</option>-->
-<!--                                                <option value="4">排名收益</option>-->
-<!--                                                <option value="5">总监收益</option>-->
-<!--                                                <option value="6">社区店补</option>-->
-<!--                                                <option value="7">一代收益</option>-->
-<!--                                                <option value="8">提现</option>-->
-<!--                                                <option value="9">转账</option>-->
-                                                <option value="10">余额支付</option>
-                                                <option value="11">余额退款</option>
-<!--                                                <option value="12">佣金转竞猜积分</option>-->
-<!--                                                <option value="13">佣金转余额</option>-->
-<!--                                                <option value="14">竞猜积分签到</option>-->
-<!--                                                <option value="15">感恩奖</option>-->
-                                                <option value="16">系统拨付</option>
-<!--                                                <option value="17">抽奖</option>-->
-                                                <option value="18">充值</option>
-                                                <option value="20">赠送金额</option>
-                                                <option value="21">微信支付</option>
-                                                <option value="22">微信退款</option>
-<!--                                                <option value="19">收益</option>-->
                                             </select>
                                         </div>
                                     </div>
@@ -54,12 +26,11 @@
                                         <div class="layui-input-inline">
                                             <select name="flowType">
                                                 <option value="">请选择</option>
-                                                <option value="1">余额</option>
-                                                <option value="3">积分</option>
+                                                <option value="1">碳币</option>
+                                                <option value="2">碳积分</option>
                                             </select>
                                         </div>
                                     </div>
-
                                     <div class="layui-inline">
                                         <label class="layui-form-label layui-form-label-sm">开始时间</label>
                                         <div class="layui-input-inline">
@@ -120,6 +91,19 @@
 
         form.render();
 
+        //(下拉框)
+        $.get(ctx + 'admin/runVip/allMoneyType', function (res) {
+            var data = res.data;
+            for (var k in data)
+            {
+                $(".money-flow-type").append("<option value='" + data[k].type + "'>" + data[k].remark + "</option>");
+            }
+            layui.use('form', function () {
+                var form = layui.form;
+                form.render();
+            });
+        });
+
         // 表格初始化
         initTable();
 
@@ -149,106 +133,21 @@
                 url: ctx + 'admin/mallMember/getMoneyFlowList',
                 totalRow : true,
                 cols: [[
+                    {field: 'orderNo', title: '订单编号', minWidth: 150,align:'left'},
                     {field: 'name', title: '用户昵称', minWidth: 100,align:'left',totalRowText:"合计"},
                     {field: 'phone', title: '手机号码', minWidth: 150,align:'left'},
                     {field: 'amount', title: '金额', minWidth: 150,align:'left', totalRow:true},
-                    {field: 'type', title: '流水类型',
-                        templet: function (d) {
-                            if (d.flowType === 3) {
-                                if (d.type === 1) {
-                                    return '<span>积分支付</span>'
-                                } else if (d.type === 2) {
-                                    return '<span>购买商品获得积分</span>'
-                                } else if (d.type === 3) {
-                                    return '<span>推荐下单获得积分</span>'
-                                } else if (d.type === 16) {
-                                    return '<span>拨付积分</span>'
-                                }else{
-                                    return '<span>-</span>'
-                                }
-                            }
-                            if (d.flowType === 5) {
-                                if (d.type === 21) {
-                                    return '<span>微信支付</span>'
-                                } else if (d.type === 22) {
-                                    return '<span>微信退款</span>'
-                                } else{
-                                    return '<span>-</span>'
-                                }
-                            }
-                            if (d.flowType === 2) {
-                                if (d.type === 16) {
-                                    return '<span>拨付积分</span>'
-                                }else{
-                                    return '<span>-</span>'
-                                }
-                            }
-
-                            if (d.flowType === 1) {
-                                if (d.type === 1) {
-                                    return '<span>静态收益</span>'
-                                } else if (d.type === 2) {
-                                    return '<span>直推奖</span>'
-                                } else if (d.type === 3) {
-                                    return '<span>代理收益</span>'
-                                } else if (d.type === 4) {
-                                    return '<span>排名收益</span>'
-                                }else if (d.type === 5) {
-                                    return '<span>总监收益</span>'
-                                }else if (d.type === 6) {
-                                    return '<span>社区店补</span>'
-                                }else if (d.type === 7) {
-                                    return '<span>一代收益</span>'
-                                }else if (d.type === 8) {
-                                    return '<span>提现</span>'
-                                }else if (d.type === 9) {
-                                    return '<span>转账</span>'
-                                }else if (d.type === 10) {
-                                    return '<span>余额支付</span>'
-                                }else if (d.type === 11) {
-                                    return '<span>退款</span>'
-                                }else if (d.type === 12) {
-                                    return '<span>佣金转竞猜积分</span>'
-                                }else if (d.type === 13) {
-                                    return '<span>佣金转余额</span>'
-                                }else if (d.type === 14) {
-                                    return '<span>竞猜积分签到</span>'
-                                }else if (d.type === 15) {
-                                    return '<span>感恩奖</span>'
-                                }else if (d.type === 16) {
-                                    return '<span>拨付余额</span>'
-                                }else if (d.type === 17) {
-                                    return '<span>抽奖</span>'
-                                }else if (d.type === 18) {
-                                    return '<span>充值</span>'
-                                }else if (d.type === 19) {
-                                    return '<span>收益</span>'
-                                }else if (d.type === 20) {
-                                    return '<span>赠送金额</span>'
-                                }else if (d.type === 21) {
-                                    return '<span>微信支付</span>'
-                                }else if (d.type === 22) {
-                                    return '<span>微信退款</span>'
-                                }else{
-                                    return '<span>-</span>'
-                                }
-                            }
-                        }, minWidth: 80,align:'center'},
+                    {field: 'description', title: '流水类型', minWidth: 150,align:'left', totalRow:true},
                     {field: 'flowType', title: '资金类型',
                         templet: function (d) {
                             if (d.flowType === 1) {
-                                return '余额';
-                            } else if(d.flowType === 3) {
-                                return '积分'
+                                return '碳币';
                             } else if(d.flowType === 2) {
-                                return '系统'
-                            }  else if(d.flowType === 5) {
-                                return '微信'
+                                return '碳积分'
                             } else {
                                 return '-';
                             }
                         }, minWidth: 80,align:'center'},
-                    {field: 'orderNo', title: '订单编号', minWidth: 150,align:'left'},
                     {field: 'createdTime', title: '创建时间', minWidth: 180,align:'center'}
                 ]]
             });
@@ -265,7 +164,6 @@
             return {
                 startTime: $searchForm.find('input[name="startTime"]').val().trim(),
                 endTime: $searchForm.find('input[name="endTime"]').val().trim(),
-                name: $searchForm.find('input[name="name"]').val().trim(),
                 phone: $searchForm.find('input[name="phone"]').val().trim(),
                 type: $searchForm.find("select[name='type']").val(),
                 flowType: $searchForm.find("select[name='flowType']").val(),

--
Gitblit v1.9.1