From 29bfa500bb81066ad096d3b75fab52c27e9eed7a Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 10 Apr 2023 16:58:56 +0800
Subject: [PATCH] 后台修改

---
 src/main/java/cc/mrbird/febs/mall/service/IMallMemberWithdrawService.java         |    3 
 src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java            |    6 +
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java   |    4 
 src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java               |   32 +++-
 src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java              |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java    |    6 
 src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java             |    7 +
 src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java           |    4 
 src/main/java/cc/mrbird/febs/mall/entity/MallMemberWithdraw.java                  |    6 +
 src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java                      |    4 
 src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java         |   15 +
 src/main/resources/templates/febs/views/modules/system/poolSet.html               |   12 ++
 src/main/resources/mapper/modules/MallMoneyFlowMapper.xml                         |    8 +
 src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java                 |    2 
 src/main/java/cc/mrbird/febs/mall/dto/WithdrawalScoreDto.java                     |   25 ++++
 src/main/java/cc/mrbird/febs/mall/dto/MoneyChargeListDto.java                     |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java |   98 ++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/vo/AdminPoolSetVo.java                          |    5 
 src/main/resources/mapper/modules/MallMemberMapper.xml                            |   12 -
 src/main/resources/templates/febs/views/modules/mallMember/chargeFlowList.html    |   27 ++++
 src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyChargeListVo.java                  |    7 +
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java      |   37 +++--
 src/main/java/cc/mrbird/febs/mall/vo/TeamListVo.java                              |    3 
 src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java                            |    2 
 src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java              |    1 
 src/main/java/cc/mrbird/febs/mall/vo/MyCommissionVo.java                          |   29 +++-
 26 files changed, 299 insertions(+), 60 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
index 60e18fe..2361f61 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MemberLevelEnum.java
@@ -10,30 +10,32 @@
     /**
      * 董事
      */
-    V_DIRECTOR("V_DIRECTOR",8),
+    V_DIRECTOR("V_DIRECTOR",8,"董事"),
     /**
      * v1-v6
      * V1 个体户,V2 经销商,V3 区代理,V4 市代理,V5 省代理,V6 运营中心
      */
-    V6("V6",7),
-    V5("V5",6),
-    V4("V4",5),
-    V3("V3",4),
-    V2("V2",3),
-    V1("V1",2),
+    V6("V6",7,"运营中心"),
+    V5("V5",6,"省代理"),
+    V4("V4",5,"市代理"),
+    V3("V3",4,"区代理"),
+    V2("V2",3,"经销商"),
+    V1("V1",2,"个体户"),
     //普通用户
-    NORMAL("NORMAL",1),
+    NORMAL("NORMAL",1,"普通会员"),
     //粉丝非会员
-    FANS("FANS",0);
+    FANS("FANS",0,"粉丝");
 
 
     private String type;
 
     private Integer code;
+    private String description;
 
-    MemberLevelEnum(String type, Integer code) {
+    MemberLevelEnum(String type, Integer code,String description) {
         this.type = type;
         this.code = code;
+        this.description = description;
     }
 
     public List<String> getLevelType(){
@@ -44,6 +46,16 @@
         return strs;
     }
 
+    public String getLevelDescription(String Level){
+        String description = "粉丝";
+        for (MemberLevelEnum value : MemberLevelEnum.values()) {
+            if(value.type.equals(Level)){
+                description = value.description;
+            }
+        }
+        return description;
+    }
+
     public int getLevelCode(String Level){
         int codeOne = 0;
         for (MemberLevelEnum value : MemberLevelEnum.values()) {
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
index 6200f0c..e170980 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -128,7 +128,12 @@
     /**
      * 代理积分补贴
      */
-    AGENT_SCORE_PERK(25);
+    AGENT_SCORE_PERK(25),
+
+    /**
+     * 积分转余额
+     */
+    SCORE_TO_CASH(26);
 
     private final int value;
 
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java
index 3e82fc5..44c1fdd 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/PerkEnum.java
@@ -8,6 +8,10 @@
 @Getter
 public enum PerkEnum {
     /**
+     * 转换的30%金额回流到积分池现金
+     */
+    WITHDRAW_SCORE_CASH_PERCENT("PERK_SET","WITHDRAW_SCORE_CASH_PERCENT"),
+    /**
      * 积分池积分价格 = 积分池现金 / 积分池积分
      */
     POOL_SCORE_PRICE("PERK_SET", "POOL_SCORE_PRICE"),
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
index 0180d0b..b909e8f 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
@@ -97,6 +97,10 @@
                 PerkEnum.POOL_SCORE_PRICE.getType(),
                 PerkEnum.POOL_SCORE_PRICE.getCode(),
                 adminPoolSetVo.getPoolScorePrice());
+        commonService.updateDataDic(
+                PerkEnum.WITHDRAW_SCORE_CASH_PERCENT.getType(),
+                PerkEnum.WITHDRAW_SCORE_CASH_PERCENT.getCode(),
+                adminPoolSetVo.getWithdrawScoreCashPercent());
         return new FebsResponse().success();
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
index 3ffb084..5c8dee2 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java
@@ -111,6 +111,13 @@
         return new FebsResponse().success().message("提交成功");
     }
 
+    @ApiOperation(value = "积分转余额")
+    @PostMapping(value = "/withdrawalScore")
+    public FebsResponse withdrawalScore(@RequestBody @Validated WithdrawalScoreDto withdrawalScoreDto) {
+        mallMemberWithdrawService.withdrawalScore(withdrawalScoreDto);
+        return new FebsResponse().success().message("提交成功");
+    }
+
     @ApiOperation(value = "设置收款方式")
     @PostMapping(value = "/setPayment")
     public FebsResponse setPayment(@RequestBody MallMemberPayment mallMemberPayment) {
@@ -131,10 +138,10 @@
         return new FebsResponse().success().message("绑定成功");
     }
 
-    @ApiOperation(value = "可提现金额")
-    @GetMapping(value = "/canWithdrawal")
-    public FebsResponse canWithdrawal() {
-        return new FebsResponse().success().data(memberService.canMoney());
+    @ApiOperation(value = "可提现金额 1:余额 2:积分")
+    @GetMapping(value = "/canWithdrawal/{type}")
+    public FebsResponse canWithdrawal(@PathVariable("type") int type) {
+        return new FebsResponse().success().data(memberService.canMoney(type));
     }
 
     @ApiOperation(value = "用户消费排名")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
index 8307618..f6170b4 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
@@ -197,6 +197,12 @@
         if (poolScorePercentDic != null) {
             adminPoolSetVo.setPoolScorePercent(poolScorePercentDic.getValue());
         }
+        DataDictionaryCustom withdrawScoreCashPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                PerkEnum.WITHDRAW_SCORE_CASH_PERCENT.getType(),
+                PerkEnum.WITHDRAW_SCORE_CASH_PERCENT.getCode());
+        if (withdrawScoreCashPercentDic != null) {
+            adminPoolSetVo.setWithdrawScoreCashPercent(withdrawScoreCashPercentDic.getValue());
+        }
 
         model.addAttribute("adminPoolSet", adminPoolSetVo);
         return FebsUtil.view("modules/system/poolSet");
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/MoneyChargeListDto.java b/src/main/java/cc/mrbird/febs/mall/dto/MoneyChargeListDto.java
index f8cd89a..ce754e3 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/MoneyChargeListDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/MoneyChargeListDto.java
@@ -12,4 +12,6 @@
     private String phone;
 
     private Integer status;
+
+    private Integer type;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/WithdrawalScoreDto.java b/src/main/java/cc/mrbird/febs/mall/dto/WithdrawalScoreDto.java
new file mode 100644
index 0000000..67b9e28
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/WithdrawalScoreDto.java
@@ -0,0 +1,25 @@
+package cc.mrbird.febs.mall.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Data
+@ApiModel(value = "WithdrawalScoreDto", description = "接收参数类")
+public class WithdrawalScoreDto {
+
+    @Min(0)
+    @NotNull(message = "参数不能为空")
+    @ApiModelProperty(value = "数量")
+    private BigDecimal amount;
+
+    @NotBlank(message = "参数不能为空")
+    @ApiModelProperty(value = "交易密码")
+    private String tradePwd;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWithdraw.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWithdraw.java
index aa9a6cd..ef429d2 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWithdraw.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberWithdraw.java
@@ -32,4 +32,10 @@
     private String withdrawNo;
     
     private String remark;
+    //提现类型 1:余额提现 2:积分提现
+    private int type;
+
+    private BigDecimal scoreCnt;
+
+    private BigDecimal scorePrice;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
index eaa05c6..adcbeb3 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMoneyFlowMapper.java
@@ -34,7 +34,7 @@
 
     BigDecimal selectProfitByDateAndMemberId(Long memberId);
 
-    BigDecimal selectCommissionIncome(@Param("type") Integer type, @Param("date") Date date, @Param("memberId") Long memebrid);
+    BigDecimal selectCommissionIncome(@Param("flowType") Integer flowType, @Param("type") Integer type, @Param("date") Date date, @Param("memberId") Long memebrid);
 
     BigDecimal selectThankfulCommission(@Param("date") Date date, @Param("memberId") Long memberId);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
index d9653e6..cdcb136 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
@@ -47,7 +47,7 @@
 
     void bindPhone(AccountAndCodeDto accountAndCodeDto);
 
-    BigDecimal canMoney();
+    BigDecimal canMoney(int type);
 
     List<MallMember> findRankList(RankListDto rankListDto);
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallMemberWithdrawService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallMemberWithdrawService.java
index 500c484..ef092c7 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMallMemberWithdrawService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMallMemberWithdrawService.java
@@ -1,10 +1,13 @@
 package cc.mrbird.febs.mall.service;
 
 import cc.mrbird.febs.mall.dto.WithdrawalDto;
+import cc.mrbird.febs.mall.dto.WithdrawalScoreDto;
 import cc.mrbird.febs.mall.entity.MallMemberWithdraw;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 public interface IMallMemberWithdrawService extends IService<MallMemberWithdraw> {
 
     void withdrawal(WithdrawalDto withdrawalDto);
+
+    void withdrawalScore(WithdrawalScoreDto withdrawalScoreDto);
 }
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 ec0abbc..2dfd91b 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,10 +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.FlowTypeEnum;
-import cc.mrbird.febs.common.enumerates.MemberLevelEnum;
-import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.*;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
 import cc.mrbird.febs.common.utils.MallUtils;
@@ -176,6 +173,7 @@
             mallMoneyFlow.setStatus(2);
             mallMoneyFlowMapper.updateById(mallMoneyFlow);
         }
+
         /**
          * 调用汇聚代付
          */
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
index a79369c..194a485 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java
@@ -399,7 +399,6 @@
                     poolCash.toString()
             );
 
-
             DataDictionaryCustom poolScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                     PerkEnum.POOL_SCORE_PRICE.getType(),
                     PerkEnum.POOL_SCORE_PRICE.getCode());
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
index 03e3920..a29e916 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -34,6 +34,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.lang.reflect.Member;
 import java.math.BigDecimal;
 import java.util.*;
 
@@ -249,7 +250,7 @@
         if (payment != null) {
             mallMemberVo.setHasPayment(1);
         }
-        mallMemberVo.setLevelName(mallMember.getLevel());
+        mallMemberVo.setLevelName(MemberLevelEnum.NORMAL.getLevelDescription(mallMember.getLevel()));
         mallMemberVo.setPartner(mallMember.getPartner());
         MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId());
         mallMemberVo.setBalance(wallet.getBalance());
@@ -324,6 +325,12 @@
         MallMember mallMember = this.baseMapper.selectById(memberId);
 
         List<TeamListVo> list = this.baseMapper.selectTeamListByInviteId(mallMember.getInviteId());
+        if(CollUtil.isNotEmpty(list)){
+            for(TeamListVo teamListVo : list){
+                String levelDescription = MemberLevelEnum.NORMAL.getLevelDescription(teamListVo.getLevel());
+                teamListVo.setLevelName(levelDescription);
+            }
+        }
 
         MyTeamVo myTeamVo = new MyTeamVo();
         myTeamVo.setTeam(list);
@@ -428,16 +435,15 @@
     }
 
     @Override
-    public BigDecimal canMoney() {
+    public BigDecimal canMoney(int type) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
         MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
-        BigDecimal profit = mallMoneyFlowMapper.selectProfitByDateAndMemberId(memberId);
-
-        BigDecimal canMoney = wallet.getCommission();
-        if (profit != null) {
-            if(canMoney.compareTo(BigDecimal.ZERO) > 0) {
-                canMoney = canMoney.subtract(profit);
-            }
+        BigDecimal canMoney = BigDecimal.ZERO;
+        if(1 == type){
+            canMoney = wallet.getBalance();
+        }
+        if(2 == type){
+            canMoney = wallet.getScore();
         }
         return canMoney;
     }
@@ -478,11 +484,14 @@
         }
 
         MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(id);
-        commissionVo.setCommission(wallet.getCommission());
-        commissionVo.setToday(mallMoneyFlowMapper.selectCommissionIncome(1, new Date(), id));
-        commissionVo.setMonth(mallMoneyFlowMapper.selectCommissionIncome(2, new Date(), id));
-        commissionVo.setTotal(mallMoneyFlowMapper.selectCommissionIncome(null, null, id));
-        commissionVo.setWaitCommission(BigDecimal.ZERO);
+        commissionVo.setCommissionBalance(wallet.getBalance());
+        commissionVo.setCommissionScore(wallet.getScore());
+        commissionVo.setTodayBalance(mallMoneyFlowMapper.selectCommissionIncome(1,1, new Date(), id));
+        commissionVo.setMonthBalance(mallMoneyFlowMapper.selectCommissionIncome(1,2, new Date(), id));
+        commissionVo.setTotalBalance(mallMoneyFlowMapper.selectCommissionIncome(1, null,null, id));
+        commissionVo.setTodayScore(mallMoneyFlowMapper.selectCommissionIncome(2, 1,new Date(), id));
+        commissionVo.setMonthScore(mallMoneyFlowMapper.selectCommissionIncome(2, 2,new Date(), id));
+        commissionVo.setTotalScore(mallMoneyFlowMapper.selectCommissionIncome(2, null,null, id));
         return commissionVo;
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
index bc1e7d1..fb811d4 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -365,7 +365,7 @@
                 if (orderInfo.getOrderType() != 2) {
                     throw new FebsException("非积分订单,无法使用积分支付");
                 }
-                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore");
+                payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "score");
 
                 orderInfo.setPayOrderNo(orderInfo.getOrderNo());
                 orderInfo.setPayMethod("积分支付");
@@ -373,7 +373,7 @@
                 orderInfo.setPayTime(new Date());
                 orderInfo.setPayResult("1");
 
-                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.PRIZE_SCORE.getValue());
+                mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(),  FlowTypeEnum.SCORE.getValue());
                 break;
             case "5":
 //                AgreementSignDto agreementSignDto = new AgreementSignDto();
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java
index 9a715bc..f67580b 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallMemberWithdrawServiceImpl.java
@@ -3,10 +3,13 @@
 import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
 import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
 import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.PerkEnum;
 import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.AppContants;
 import cc.mrbird.febs.common.utils.LoginUserUtil;
 import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.mall.dto.WithdrawalDto;
+import cc.mrbird.febs.mall.dto.WithdrawalScoreDto;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.IApiMallMemberService;
@@ -90,6 +93,7 @@
         withdraw.setStatus(1);
         withdraw.setAmountFee(serviceFee.multiply(withdrawalDto.getAmount()));
         withdraw.setWtihdrawTypeId(mallMemberBank.getId());
+        withdraw.setType(1);
         this.baseMapper.insert(withdraw);
 
         mallMemberService.addMoneyFlow(memberId,
@@ -102,4 +106,98 @@
                 1,
                 FlowTypeEnum.BALANCE.getValue());
     }
+
+    @Override
+    public void withdrawalScore(WithdrawalScoreDto withdrawalScoreDto) {
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+        MallMember mallMember = mallMemberService.getById(memberId);
+        if (StrUtil.isBlank(mallMember.getTradePassword())) {
+            throw new FebsException("未设置支付密码");
+        }
+
+        if (!mallMember.getTradePassword().equals(SecureUtil.md5(withdrawalScoreDto.getTradePwd()))) {
+            throw new FebsException("支付密码错误");
+        }
+
+        DataDictionaryCustom poolScorePriceDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(PerkEnum.POOL_SCORE_PRICE.getType(),
+                PerkEnum.POOL_SCORE_PRICE.getCode());
+        //积分价格
+        BigDecimal poolScorePrice = new BigDecimal(poolScorePriceDic.getValue());
+
+        DataDictionaryCustom withDrawScoreCashPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(PerkEnum.WITHDRAW_SCORE_CASH_PERCENT.getType(),
+                PerkEnum.WITHDRAW_SCORE_CASH_PERCENT.getCode());
+        //提现的30%金额回流到积分池现金
+        BigDecimal withDrawScoreCashPercent = new BigDecimal(withDrawScoreCashPercentDic.getValue()).multiply(AppContants.PERCENTAGE);
+
+        MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
+        if(wallet.getScore().compareTo(BigDecimal.ZERO) <= 0){
+            throw new FebsException("积分不足");
+        }
+        if(withdrawalScoreDto.getAmount().compareTo(wallet.getScore()) > 0) {
+            throw new FebsException("积分不足");
+        }
+        //积分减少
+        walletService.reduce(withdrawalScoreDto.getAmount(), memberId, "score");
+        String orderNo = MallUtils.getOrderNum("W");
+
+        BigDecimal scoreAmount = withdrawalScoreDto.getAmount().multiply(poolScorePrice).setScale(2, BigDecimal.ROUND_DOWN);
+        BigDecimal amountFee = scoreAmount.multiply(withDrawScoreCashPercent).setScale(2,BigDecimal.ROUND_DOWN);
+        //余额增加
+        walletService.add(scoreAmount.subtract(amountFee), memberId, "balance");
+
+        MallMemberWithdraw withdraw = new MallMemberWithdraw();
+        withdraw.setWithdrawNo(orderNo);
+        withdraw.setMemberId(memberId);
+        withdraw.setAmount(scoreAmount);
+        withdraw.setStatus(2);
+        withdraw.setAmountFee(amountFee);
+        withdraw.setType(2);
+        withdraw.setScoreCnt(withdrawalScoreDto.getAmount());
+        withdraw.setScorePrice(poolScorePrice);
+        this.baseMapper.insert(withdraw);
+
+        mallMemberService.addMoneyFlow(memberId,
+                withdrawalScoreDto.getAmount().negate(),
+                MoneyFlowTypeEnum.SCORE_TO_CASH.getValue(),
+                orderNo,
+                null,
+                null,
+                null,
+                1,
+                FlowTypeEnum.SCORE.getValue());
+
+        //卖出规则:卖出即销毁减少,70%现金到帐.30%回流底池,意味卖出后全网积分变少了,回流的30%到池子后.积分的价格变高了
+        DataDictionaryCustom poolCashDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                PerkEnum.POOL_CASH.getType(),
+                PerkEnum.POOL_CASH.getCode()
+        );
+        BigDecimal poolCash = new BigDecimal(poolCashDic.getValue());
+        poolCash = poolCash.add(amountFee);
+        dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
+                PerkEnum.POOL_CASH.getType(),
+                PerkEnum.POOL_CASH.getCode(),
+                poolCash.toString()
+        );
+
+        DataDictionaryCustom poolScoreDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                PerkEnum.POOL_SCORE.getType(),
+                PerkEnum.POOL_SCORE.getCode()
+        );
+        BigDecimal poolScore = new BigDecimal(poolScoreDic.getValue());
+        poolScore = poolScore.subtract(withdraw.getScoreCnt());
+        dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
+                PerkEnum.POOL_SCORE.getType(),
+                PerkEnum.POOL_SCORE.getCode(),
+                poolScore.toString()
+        );
+
+        if(poolScore.compareTo(BigDecimal.ZERO) > 0 && poolCash.compareTo(BigDecimal.ZERO) > 0){
+            BigDecimal divide = poolCash.divide(poolScore, 2, BigDecimal.ROUND_DOWN);
+            dataDictionaryCustomMapper.updateDicValueByTypeAndCode(
+                    PerkEnum.POOL_SCORE_PRICE.getType(),
+                    PerkEnum.POOL_SCORE_PRICE.getCode(),
+                    divide.toString()
+            );
+        }
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyChargeListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyChargeListVo.java
index 49df3af..7e7d16a 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyChargeListVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMoneyChargeListVo.java
@@ -29,5 +29,12 @@
     private String phone;
 
     private String bindPhone;
+
     private String remark;
+
+    private Integer type;
+
+    private BigDecimal scoreCnt;
+
+    private BigDecimal scorePrice;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminPoolSetVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminPoolSetVo.java
index 64bb6bc..9255102 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/AdminPoolSetVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminPoolSetVo.java
@@ -32,4 +32,9 @@
      * 套餐进去积分池积分比例
      */
     private String poolScorePercent;
+
+    /**
+     * 转换的30%金额回流到积分池现金
+     */
+    private String withdrawScoreCashPercent;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
index 73cc655..14239a4 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
@@ -66,7 +66,7 @@
     @ApiModelProperty(value = "累计消费")
     private BigDecimal totalCost;
 
-    @ApiModelProperty(value = "赠送积分")
+    @ApiModelProperty(value = "积分")
     private BigDecimal score;
 
     @ApiModelProperty(value = "抽奖积分")
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MyCommissionVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MyCommissionVo.java
index 3833469..7ffe234 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/MyCommissionVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/MyCommissionVo.java
@@ -32,20 +32,29 @@
     @ApiModelProperty(value = "推荐人头像")
     private String referrerAvatar;
 
-    @ApiModelProperty(value = "可提现")
-    private BigDecimal commission;
+    @ApiModelProperty(value = "可提现余额")
+    private BigDecimal commissionBalance;
 
-    @ApiModelProperty(value = "待结算")
-    private BigDecimal waitCommission;
+    @ApiModelProperty(value = "可提现积分")
+    private BigDecimal commissionScore;
 
-    @ApiModelProperty(value = "本日收入")
-    private BigDecimal today;
+    @ApiModelProperty(value = "本日收入余额")
+    private BigDecimal todayBalance;
 
-    @ApiModelProperty(value = "本月收入")
-    private BigDecimal month;
+    @ApiModelProperty(value = "本月收入余额")
+    private BigDecimal monthBalance;
 
-    @ApiModelProperty(value = "累计收入")
-    private BigDecimal total;
+    @ApiModelProperty(value = "累计收入余额")
+    private BigDecimal totalBalance;
+
+    @ApiModelProperty(value = "本日收入积分")
+    private BigDecimal todayScore;
+
+    @ApiModelProperty(value = "本月收入积分")
+    private BigDecimal monthScore;
+
+    @ApiModelProperty(value = "累计收入积分")
+    private BigDecimal totalScore;
 
 
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/TeamListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/TeamListVo.java
index d92a485..1658346 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/TeamListVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/TeamListVo.java
@@ -48,6 +48,9 @@
     private BigDecimal prizeScore;
 
     @ApiModelProperty(value = "用户等级")
+    private String level;
+
+    @ApiModelProperty(value = "用户等级")
     private String levelName;
 
 }
diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml
index 5f36eb1..6dbbd6c 100644
--- a/src/main/resources/mapper/modules/MallMemberMapper.xml
+++ b/src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -83,23 +83,21 @@
             a.name,
             a.phone,
             a.invite_id,
+            a.level,
             2 isCurrent,
             a.created_time,
             p.prize_score,
-            u.description levelName,
             (select sum(e.amount)
-             from mall_order_info e
+             from mall_achieve_record e
                       inner join mall_member b on e.member_id=b.ID
-                      inner join mall_order_item c on e.id = c.order_id -- and c.is_normal=2
-             where e.status in (2, 3, 4) and e.order_type=1 and (b.invite_id=a.invite_id or b.referrer_id=a.invite_id)) amount,
+             where (b.invite_id=a.invite_id or b.referrer_id=a.invite_id)) amount,
             (select count(1) from mall_member e
                       inner join mall_order_info b on e.id=b.member_id and b.status in (2, 3, 4)
              where find_in_set(a.invite_id, e.referrer_ids)) orderCnt,
             (select count(1) from mall_member x where find_in_set(a.invite_id, x.referrer_ids)) cnt
         from mall_member a
-        inner join mall_member_wallet p on a.id=p.member_id
-        left join data_dictionary_custom u on a.level=u.code and u.type='AGENT_LEVEL'
-        where a.referrer_id=#{inviteId}
+        inner join mall_member_wallet p on a.id = p.member_id
+        where a.referrer_id = #{inviteId}
     </select>
 
     <select id="selectOwnOrderAmountByInviteId" resultType="java.math.BigDecimal">
diff --git a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
index 89c4558..32503ab 100644
--- a/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
+++ b/src/main/resources/mapper/modules/MallMoneyFlowMapper.xml
@@ -75,6 +75,9 @@
         a.withdraw_no withdrawNo,
         a.remark remark,
         a.status status,
+        a.type type,
+        a.score_cnt scoreCnt,
+        a.score_price scorePrice,
         b.name,
         b.bind_phone bindPhone,
         b.phone
@@ -90,6 +93,9 @@
                 </if>
                 <if test="record.status!=null and record.status!=''">
                     and a.status = #{record.status}
+                </if>
+                <if test="record.type!=null and record.type!=''">
+                    and a.type = #{record.type}
                 </if>
             </if>
         </where>
@@ -116,7 +122,7 @@
 
     <select id="selectCommissionIncome" resultType="java.math.BigDecimal">
         select ifnull(sum(amount),0) from mall_money_flow
-        where flow_type =4 and type in (1,2,3,4,5,6,7,15,16,17) and member_id=#{memberId}
+        where flow_type = #{flowType} and member_id = #{memberId}
         <if test="type == 1">
             and date_format(created_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
         </if>
diff --git a/src/main/resources/templates/febs/views/modules/mallMember/chargeFlowList.html b/src/main/resources/templates/febs/views/modules/mallMember/chargeFlowList.html
index a73e35b..02ce73e 100644
--- a/src/main/resources/templates/febs/views/modules/mallMember/chargeFlowList.html
+++ b/src/main/resources/templates/febs/views/modules/mallMember/chargeFlowList.html
@@ -30,6 +30,16 @@
                                             </select>
                                         </div>
                                     </div>
+                                    <div class="layui-inline">
+                                        <label class="layui-form-label">类型:</label>
+                                        <div class="layui-input-inline">
+                                            <select name="type">
+                                                <option value="">请选择</option>
+                                                <option value="1">余额提现</option>
+                                                <option value="2">积分兑换</option>
+                                            </select>
+                                        </div>
+                                    </div>
                                 </div>
                             </div>
                             <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
@@ -125,10 +135,20 @@
                     {field: 'withdrawNo', title: '编号', minWidth: 100,align:'left', totalRowText: '合计:'},
                     {field: 'name', title: '名称', minWidth: 100,align:'left'},
                     {field: 'phone', title: '账号', minWidth: 150,align:'left'},
-                    // {field: 'bindPhone', title: '手机号', minWidth: 150,align:'left'},
+                    {field: 'type', title: '类型',
+                        templet: function (d) {
+                            if (d.type === 1) {
+                                return '<span style="color:green;">余额提现</span>'
+                            } else if (d.type === 2) {
+                                return '<span style="color:blue;">积分兑换</span>'
+                            } else{
+                                return ''
+                            }
+                        }, minWidth: 80,align:'center'},
                     {field: 'amount', title: '金额', minWidth: 150,align:'left',totalRow: '{{= parseInt(d.amount) }}'},
                     {field: 'amountFee', title: '手续费', minWidth: 150,align:'left',totalRow: '{{= parseInt(d.amountFee) }}'},
-                    // {field: 'remark', title: '错误信息', minWidth: 150,align:'left'},
+                    {field: 'scoreCnt', title: '数量', minWidth: 80,align:'left',totalRow: '{{= parseInt(d.scoreCnt) }}'},
+                    {field: 'scorePrice', title: '价格', minWidth: 80,align:'left',totalRow: '{{= parseInt(d.scorePrice) }}'},
                     {field: 'status', title: '状态',
                         templet: function (d) {
                             if (d.status === 1) {
@@ -149,7 +169,7 @@
                                     +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="chargeDisagree" shiro:hasPermission="user:update">拒绝</button>'
                                     +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="paymentInfo" shiro:hasPermission="user:update">查看收款方式</button>'
                             }else{
-                                return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="paymentInfo" shiro:hasPermission="user:update">查看收款方式</button>'
+                                return ''
                             }
                         },minWidth: 300,align:'center'}
                 ]]
@@ -162,6 +182,7 @@
                 name: $searchForm.find('input[name="name"]').val().trim(),
                 phone: $searchForm.find('input[name="phone"]').val().trim(),
                 status: $searchForm.find("select[name='status']").val(),
+                type: $searchForm.find("select[name='type']").val(),
             };
         }
 
diff --git a/src/main/resources/templates/febs/views/modules/system/poolSet.html b/src/main/resources/templates/febs/views/modules/system/poolSet.html
index 0ffbf7b..958ef7c 100644
--- a/src/main/resources/templates/febs/views/modules/system/poolSet.html
+++ b/src/main/resources/templates/febs/views/modules/system/poolSet.html
@@ -52,6 +52,17 @@
                             <div class="layui-form-mid layui-word-aux">%,进入积分池。</div>
                         </div>
                     </div>
+                    <blockquote class="layui-elem-quote blue-border">积分转换比例设置(转换后,积分池【积分】减少,积分池【现金】增加)</blockquote>
+                    <div class="layui-form-item">
+                        <div class="layui-inline">
+                            <label class="layui-form-label febs-form-item-require">积分:</label>
+                            <div class="layui-form-mid layui-word-aux">每次转换积分数量乘积分当前价格后的:</div>
+                            <div class="layui-input-inline">
+                                <input type="text" name="withdrawScoreCashPercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input">
+                            </div>
+                            <div class="layui-form-mid layui-word-aux">%,进入积分现金池。</div>
+                        </div>
+                    </div>
                 </div>
 
                 <div class="layui-card-footer">
@@ -95,6 +106,7 @@
                 "poolScore": adminPoolSet.poolScore,
                 "poolScorePrice": adminPoolSet.poolScorePrice,
                 "poolCashPercent": adminPoolSet.poolCashPercent,
+                "withdrawScoreCashPercent": adminPoolSet.withdrawScoreCashPercent,
                 "poolScorePercent": adminPoolSet.poolScorePercent
             });
         }

--
Gitblit v1.9.1