From fc1f912905287cd1ff9f81207f05f158301f7563 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 15 Jun 2022 19:05:17 +0800
Subject: [PATCH] fix some problem

---
 src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java               |    6 
 src/main/resources/templates/febs/views/modules/mallMember/mallSystemPay.html   |    1 
 src/main/java/cc/mrbird/febs/mall/quartz/OrderSettlementJob.java                |   93 +++++++++
 src/main/resources/mapper/modules/MallAchieveRecordMapper.xml                   |    5 
 src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java                  |    2 
 src/main/java/cc/mrbird/febs/mall/service/IMallAchieveService.java              |    9 
 src/test/java/cc/mrbird/febs/ProfitTest.java                                    |   30 +++
 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java |    7 
 src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java     |   36 +++
 src/main/resources/mapper/modules/MallMemberMapper.xml                          |   61 +++--
 src/main/resources/mapper/modules/MallOrderInfoMapper.xml                       |   35 ++
 src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java             |    7 
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java  |   27 ++
 src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html  |   45 ++++
 src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java                     |    5 
 src/main/java/cc/mrbird/febs/mall/entity/MallMember.java                        |   10 +
 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java          |    3 
 src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java           |    7 
 src/main/java/cc/mrbird/febs/mall/service/impl/MemberProfitServiceImpl.java     |  113 ++++++++++-
 src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java                         |    5 
 src/main/java/cc/mrbird/febs/mall/service/impl/MallAchieveServiceImpl.java      |   50 +++++
 src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java                 |   33 +++
 src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java          |    2 
 23 files changed, 531 insertions(+), 61 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
index a172447..ae23dd7 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -12,6 +12,9 @@
     INDRECT_BONUS("BONUS_TYPE", "INDRECT_BONUS"),
     AGENT_BONUS("BONUS_TYPE", "AGENT_BONUS"),
     THANKFUL_BONUS("BONUS_TYPE", "THANKFUL_BONUS"),
+    DIRECTOR_BONUS("BONUS_TYPE", "DIRECTOR_BONUS"),
+    COMMUNITY_BONUS("BONUS_TYPE", "COMMUNITY_BONUS"),
+
     //积分中奖概率
     WIN_SCORE("WIN_PROBABILITY", "WIN_SCORE"),
     //佣金中奖概率
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
index 9c3f041..215b2cd 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
@@ -14,6 +14,7 @@
 import cc.mrbird.febs.mall.vo.AdminAgentLevelOptionTreeVo;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -34,6 +35,7 @@
 
     /**
      * 平台账单
+     *
      * @param mallMember
      * @param request
      * @return
@@ -46,6 +48,7 @@
 
     /**
      * 会员列表
+     *
      * @param mallMember
      * @param request
      * @return
@@ -58,6 +61,7 @@
 
     /**
      * 会员列表---禁止
+     *
      * @param id
      * @return
      */
@@ -69,6 +73,7 @@
 
     /**
      * 会员列表---开启
+     *
      * @param id
      * @return
      */
@@ -78,13 +83,25 @@
         return mallMemberService.openAccount(id);
     }
 
+    @GetMapping("changeIdentityYes/{type}/{id}")
+    public FebsResponse changeIdentityYes(@PathVariable("type") Integer type, @PathVariable("id") Long id) {
+        mallMemberService.changeIdentity(type, id, 1);
+        return new FebsResponse().success();
+    }
+
+    @GetMapping("changeIdentityNo/{type}/{id}")
+    public FebsResponse changeIdentityNo(@PathVariable("type") Integer type, @PathVariable("id") Long id) {
+        mallMemberService.changeIdentity(type, id, 2);
+        return new FebsResponse().success();
+    }
+
     /**
      * 会员列表-资金流水
      */
     @GetMapping("/moneyFlow")
     public FebsResponse moneyFlow(QueryRequest request, MallMember mallMember, Integer parentId) {
-        if(parentId==null){
-            ViewMallMemberController.idFromMoneyFlow=0;
+        if (parentId == null) {
+            ViewMallMemberController.idFromMoneyFlow = 0;
         }
         mallMember.setId(ViewMallMemberController.idFromMoneyFlow);
         Map<String, Object> dataTable = getDataTable(mallMemberService.moneyFlow(request, mallMember));
@@ -111,6 +128,7 @@
 
     /**
      * 资金流水-列表
+     *
      * @param moneyFlowListDto
      * @param request
      * @return
@@ -123,6 +141,7 @@
 
     /**
      * 会员提现-列表
+     *
      * @param moneyChargeListDto
      * @param request
      * @return
@@ -135,6 +154,7 @@
 
     /**
      * 会员提现-同意
+     *
      * @param id
      * @return
      */
@@ -146,6 +166,7 @@
 
     /**
      * 会员提现-拒绝
+     *
      * @param id
      * @return
      */
@@ -157,6 +178,7 @@
 
     /**
      * 代理列表
+     *
      * @param agentDto
      * @param request
      * @return
@@ -169,6 +191,7 @@
 
     /**
      * 代理级别-列表
+     *
      * @param agentLevelDto
      * @param request
      * @return
@@ -193,7 +216,7 @@
      */
     @GetMapping("getAgentLevelOption/tree")
     @ControllerEndpoint(exceptionMessage = "获取等级失败")
-    public List<AdminAgentLevelOptionTreeVo> getAgentLevelOption(){
+    public List<AdminAgentLevelOptionTreeVo> getAgentLevelOption() {
         return mallMemberService.getAgentLevelOption();
     }
 
@@ -203,8 +226,8 @@
      */
     @GetMapping("/agentChild")
     public FebsResponse agentChild(QueryRequest request, MallMember mallMember, Integer parentId) {
-        if(parentId==null){
-            ViewMallMemberController.idFromAgentAllMember=0;
+        if (parentId == null) {
+            ViewMallMemberController.idFromAgentAllMember = 0;
         }
         mallMember.setId(ViewMallMemberController.idFromAgentAllMember);
         Map<String, Object> dataTable = getDataTable(mallMemberService.agentChild(request, mallMember));
@@ -213,6 +236,7 @@
 
     /**
      * 代理列表---激活
+     *
      * @param id
      * @return
      */
@@ -233,6 +257,7 @@
 
     /**
      * 奖励设置-列表
+     *
      * @param rankAwardDto
      * @param request
      * @return
@@ -254,6 +279,7 @@
 
     /**
      * App版本-列表
+     *
      * @param appVersion
      * @param request
      * @return
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java b/src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java
new file mode 100644
index 0000000..81c7a79
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallAchieveRecord.java
@@ -0,0 +1,33 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author wzy
+ * @date 2022-06-15
+ **/
+@Data
+@TableName("mall_achieve_record")
+public class MallAchieveRecord extends BaseEntity {
+
+    private Long memberId;
+
+    private BigDecimal amount;
+
+    private BigDecimal costAmount;
+
+    private Date achieveTime;
+
+    private Long orderId;
+
+    private Long orderItemId;
+
+    private Integer isNormal;
+
+    private Date payTime;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
index 33d1d25..0deba36 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java
@@ -122,4 +122,14 @@
     @TableField(exist = false)
     private String levelName;
 
+    /**
+     * 董事
+     */
+    private Integer director;
+
+    /**
+     * 店长
+     */
+    private Integer storeMaster;
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
index 0a52615..833a188 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallOrderItem.java
@@ -37,4 +37,9 @@
     private BigDecimal costPrice;
 
     private Integer isNormal;
+
+    /**
+     * 是否结清
+     */
+    private Integer hasSettle;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java
new file mode 100644
index 0000000..85e4ca9
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallAchieveRecordMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.MallAchieveRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface MallAchieveRecordMapper extends BaseMapper<MallAchieveRecord> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
index 4470b42..b48d370 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java
@@ -81,4 +81,6 @@
     List<MallMember> selectMemberListHasChild();
 
     List<MallMember> selectMemberDirectForHasLevel(@Param("inviteId") String inviteId);
+
+    List<MallMember> selectDirectorsOrStoreMaster(@Param("type") Integer type);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
index 3db8173..568c99a 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
@@ -51,7 +51,11 @@
 
     BigDecimal selectTotalAmountForDate(@Param("date") Date date, @Param("member") Long memberId);
 
-    BigDecimal selectTotalAmountUnCostForDate(@Param("date") Date date, @Param("member") Long memberId, @Param("type") String type);
+    BigDecimal selectTotalAmountUnCostForDate(@Param("date") Date date, @Param("member") Long memberId, @Param("dateType") String dateType, @Param("isNormal") Integer isNormal);
 
     MallOrderInfo selectByOrderNo(@Param("orderNo") String orderNo);
+
+    int updateOrderConfirmStatus(@Param("date") Date date);
+
+    List<MallOrderInfo> selectOrderInfoWithNormalGoods(@Param("date") Date date);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/quartz/OrderSettlementJob.java b/src/main/java/cc/mrbird/febs/mall/quartz/OrderSettlementJob.java
new file mode 100644
index 0000000..2906b05
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/OrderSettlementJob.java
@@ -0,0 +1,93 @@
+package cc.mrbird.febs.mall.quartz;
+
+import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
+import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
+import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
+import cc.mrbird.febs.mall.entity.MallGoodsSku;
+import cc.mrbird.febs.mall.entity.MallMember;
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.mall.entity.MallOrderItem;
+import cc.mrbird.febs.mall.mapper.MallGoodsSkuMapper;
+import cc.mrbird.febs.mall.mapper.MallMemberMapper;
+import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.mapper.MallOrderItemMapper;
+import cc.mrbird.febs.mall.service.IApiMallMemberWalletService;
+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.DateTime;
+import cn.hutool.core.date.DateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2022-06-15
+ **/
+@Slf4j
+@Component
+public class OrderSettlementJob {
+
+    @Autowired
+    private MallOrderInfoMapper mallOrderInfoMapper;
+
+    @Autowired
+    private IApiMallMemberWalletService memberWalletService;
+
+    @Autowired
+    private IMallMoneyFlowService mallMoneyFlowService;
+
+    @Autowired
+    private MallMemberMapper mallMemberMapper;
+
+    @Autowired
+    private MallGoodsSkuMapper mallGoodsSkuMapper;
+
+    @Autowired
+    private IMemberProfitService memberProfitService;
+
+    /**
+     * 普通商品结算
+     */
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void normalGoodsSettlementJob() {
+        log.info("普通商品结算");
+        List<MallOrderInfo> orderInfos = mallOrderInfoMapper.selectOrderInfoWithNormalGoods(DateUtil.offsetDay(new Date(), -10));
+        if (CollUtil.isEmpty(orderInfos)) {
+            return;
+        }
+
+        for (MallOrderInfo orderInfo : orderInfos) {
+            MallMember member = mallMemberMapper.selectById(orderInfo.getMemberId());
+            if (AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) {
+                continue;
+            }
+
+            for (MallOrderItem item : orderInfo.getItems()) {
+                MallGoodsSku sku = mallGoodsSkuMapper.selectById(item.getSkuId());
+                BigDecimal score = sku.getPresentPrice();
+
+                memberWalletService.add(score, member.getId(), "score");
+                mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue());
+            }
+
+            // 普通商品动态分红结算
+            memberProfitService.dynamicProfit(orderInfo.getId(), 1);
+        }
+    }
+
+    /**
+     * 自动确认收货
+     */
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void orderAutoConfirmJob() {
+        log.info("自动确认收货");
+        mallOrderInfoMapper.updateOrderConfirmStatus(DateUtil.offsetDay(new Date(), -7));
+    }
+}
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 aa97eb0..19fe2ad 100644
--- a/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
+++ b/src/main/java/cc/mrbird/febs/mall/quartz/ProfitJob.java
@@ -45,6 +45,11 @@
         memberProfitService.agentProfit(null);
     }
 
+    @Scheduled(cron = "0 30 1 * * ?")
+    public void storeAndDirectorJob() {
+        memberProfitService.storeAndDirectorProfit(null);
+    }
+
     /**
      * 感恩奖
      */
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java
index 35c6b67..bb75da6 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java
@@ -22,6 +22,8 @@
 
     FebsResponse openAccount(@NotNull(message = "{required}") Long id);
 
+    void changeIdentity(Integer type, Long id, Integer value);
+
     MallMemberVo getMallMemberInfoById(@NotNull(message = "{required}") long id);
 
     IPage<AdminMallMoneyFlowVo> moneyFlow(QueryRequest request, MallMember mallMember);
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IMallAchieveService.java b/src/main/java/cc/mrbird/febs/mall/service/IMallAchieveService.java
new file mode 100644
index 0000000..e771e32
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMallAchieveService.java
@@ -0,0 +1,9 @@
+package cc.mrbird.febs.mall.service;
+
+import cc.mrbird.febs.mall.entity.MallAchieveRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IMallAchieveService extends IService<MallAchieveRecord> {
+
+    void add(Long orderItemId);
+}
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 c4dccd5..6c5b161 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IMemberProfitService.java
@@ -18,6 +18,8 @@
      */
     void dynamicProfit(Long orderId);
 
+    void dynamicProfit(Long orderId, Integer isNormal);
+
     /**
      * 代理分红
      */
@@ -32,4 +34,9 @@
      * 感恩奖
      */
     void thankfulProfit();
+
+    /**
+     * 店补/董事
+     */
+    void storeAndDirectorProfit(Date profitDate);
 }
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 7dc3136..449fbd4 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
@@ -96,6 +96,24 @@
     }
 
     @Override
+    public void changeIdentity(Integer type, Long id, Integer value) {
+        MallMember mallMember = mallMemberMapper.selectById(id);
+        if(mallMember == null) {
+            throw new FebsException("参数错误");
+        }
+
+        if (type == 1) {
+            mallMember.setDirector(value);
+        } else if (type == 2){
+            mallMember.setStoreMaster(value);
+        } else {
+            throw new FebsException("参数错误");
+        }
+
+        this.baseMapper.updateById(mallMember);
+    }
+
+    @Override
     public MallMemberVo getMallMemberInfoById(long id) {
         MallMemberVo mallMemberVo = mallMemberMapper.getMallMemberInfoById(id);
         return mallMemberVo;
@@ -322,8 +340,9 @@
         }
 
         BigDecimal bigDecimal = mallSystemPayDto.getAddBalance();
+        boolean isReduce = false;
         if(bigDecimal.compareTo(BigDecimal.ZERO) <= 0){
-            return new FebsResponse().fail().message("拨付数目需要大于0");
+            isReduce = true;
         }
 
         Integer type = mallSystemPayDto.getType();
@@ -338,7 +357,11 @@
             throw new FebsException("参数错误");
         }
 
-        iApiMallMemberWalletService.add(mallSystemPayDto.getAddBalance(), mallSystemPayDto.getId(), filedType);
+        if (isReduce) {
+            iApiMallMemberWalletService.reduce(mallSystemPayDto.getAddBalance().negate(), mallSystemPayDto.getId(), filedType);
+        } else {
+            iApiMallMemberWalletService.add(mallSystemPayDto.getAddBalance(), mallSystemPayDto.getId(), filedType);
+        }
         mallMoneyFlowService.addMoneyFlow(memberId, bigDecimal, MoneyFlowTypeEnum.SYSTEM.getValue(), null, type);
         return new FebsResponse().success();
     }
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 320def2..7ef0eda 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
@@ -248,19 +248,12 @@
                         if (mallGoods.getIsNormal() == 2) {
                             hasTc = true;
                             score = sku.getPresentPrice().multiply(mallGoods.getStaticMulti());
-
-                            // 普通商品1:1 返还积分
-                        } else {
-                            if (!AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())) {
-                                score = sku.getPresentPrice();
-                            }
                         }
 
                         if (score.compareTo(BigDecimal.ZERO) > 0) {
                             memberWalletService.add(score, member.getId(), "score");
                             mallMoneyFlowService.addMoneyFlow(member.getId(), score, MoneyFlowTypeEnum.STATIC_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue());
                         }
-
                     }
                 }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallAchieveServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallAchieveServiceImpl.java
new file mode 100644
index 0000000..c0bbe34
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallAchieveServiceImpl.java
@@ -0,0 +1,50 @@
+package cc.mrbird.febs.mall.service.impl;
+
+import cc.mrbird.febs.mall.entity.MallAchieveRecord;
+import cc.mrbird.febs.mall.entity.MallOrderInfo;
+import cc.mrbird.febs.mall.entity.MallOrderItem;
+import cc.mrbird.febs.mall.mapper.MallAchieveRecordMapper;
+import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.mapper.MallOrderItemMapper;
+import cc.mrbird.febs.mall.service.IMallAchieveService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author wzy
+ * @date 2022-06-15
+ **/
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MallAchieveServiceImpl extends ServiceImpl<MallAchieveRecordMapper, MallAchieveRecord> implements IMallAchieveService {
+
+    private final MallOrderItemMapper mallOrderItemMapper;
+    private final MallOrderInfoMapper mallOrderInfoMapper;
+
+    @Override
+    public void add(Long orderItemId) {
+        MallOrderItem item = mallOrderItemMapper.selectById(orderItemId);
+        MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(item.getOrderId());
+
+        if (orderInfo.getOrderType() == 2) {
+            return;
+        }
+
+        MallAchieveRecord achieve = new MallAchieveRecord();
+        achieve.setMemberId(orderInfo.getMemberId());
+        achieve.setAchieveTime(item.getCreatedTime());
+        achieve.setAmount(item.getAmount());
+        achieve.setCostAmount(item.getCostPrice().multiply(BigDecimal.valueOf(item.getCnt())));
+        achieve.setOrderId(item.getOrderId());
+        achieve.setOrderItemId(item.getId());
+        achieve.setIsNormal(item.getIsNormal());
+        achieve.setPayTime(orderInfo.getPayTime());
+        this.baseMapper.insert(achieve);
+    }
+}
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 ab73e32..287b60e 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,6 +8,7 @@
 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;
@@ -27,6 +28,7 @@
 import java.math.RoundingMode;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author wzy
@@ -45,6 +47,7 @@
     private final IMallMoneyFlowService moneyFlowService;
     private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     private final MallMoneyFlowMapper mallMoneyFlowMapper;
+    private final IMallAchieveService mallAchieveService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -56,7 +59,12 @@
         }
 
         Date profitDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1);
-        BigDecimal totalIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D");
+        // 套餐业绩
+        BigDecimal tcIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D", 2);
+        // 普通商品业绩
+        BigDecimal normalIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D", 1);
+        BigDecimal totalIncome = tcIncome.add(normalIncome);
+
         if (totalIncome.compareTo(BigDecimal.ZERO) == 0) {
             return;
         }
@@ -90,6 +98,11 @@
         }
     }
 
+    @Override
+    public void dynamicProfit(Long orderId) {
+        dynamicProfit(orderId, 2);
+    }
+
     /**
      * 直推20%,隔代收益为直推奖励金额的30%,a_b_c_d,d购买1000套餐,c得200,b得200*30%=60元,a得60*30%=18元。。。
      * 以此类推,结算到一元为止。
@@ -98,7 +111,7 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void dynamicProfit(Long orderId) {
+    public void dynamicProfit(Long orderId, Integer isNormal) {
         log.info("######直推奖励, 订单ID:{}######", orderId);
         MallOrderInfo orderInfo = mallOrderInfoMapper.selectById(orderId);
         if (orderInfo.getOrderType() == 2) {
@@ -126,9 +139,9 @@
                 continue;
             }
 
-            Integer isReturn = null;
-            if (item.getIsNormal() == 1) {
-                isReturn = 2;
+            // 判断套餐或者普通商品,结算对应商品的动态分红
+            if (!Objects.equals(item.getIsNormal(), isNormal)) {
+                continue;
             }
 
             // =======直推返利== start =====
@@ -146,7 +159,7 @@
 
             walletService.add(dynamicProfit, parent.getId(), "commission");
 
-            moneyFlowService.addMoneyFlow(parent.getId(), dynamicProfit, MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.COMMISSION.getValue(), isReturn);
+            moneyFlowService.addMoneyFlow(parent.getId(), dynamicProfit, MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.COMMISSION.getValue());
             moneyFlowService.addMoneyFlow(parent.getId(), dynamicProfit.negate(), MoneyFlowTypeEnum.DYNAMIC_ACHIEVE.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue());
             // =======直推返利== end =====
 
@@ -196,10 +209,16 @@
                 }
 
                 walletService.add(direct, parentMember.getId(), "commission");
-                moneyFlowService.addMoneyFlow(parentMember.getId(), direct, MoneyFlowTypeEnum.RECOMMEND_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.COMMISSION.getValue(), isReturn);
+                moneyFlowService.addMoneyFlow(parentMember.getId(), direct, MoneyFlowTypeEnum.RECOMMEND_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.COMMISSION.getValue());
                 moneyFlowService.addMoneyFlow(parentMember.getId(), direct.negate(), MoneyFlowTypeEnum.RECOMMEND_BONUS.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue());
             }
             // =======隔代奖== end =====
+
+            item.setHasSettle(1);
+            mallOrderItemMapper.updateById(item);
+
+            // 添加业绩
+            mallAchieveService.add(item.getId());
         }
     }
 
@@ -210,8 +229,11 @@
         if (profitDate == null) {
             profitDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1);
         }
-        BigDecimal totalIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D");
-
+        // 套餐业绩
+        BigDecimal tcIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D", 2);
+        // 普通商品业绩
+        BigDecimal normalIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D", 1);
+        BigDecimal totalIncome = tcIncome.add(normalIncome);
 
         DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.AGENT_BONUS.getType(), DataDictionaryEnum.AGENT_BONUS.getCode());
         BigDecimal profit = totalIncome.divide(new BigDecimal(dic.getValue()), 2, RoundingMode.HALF_UP);
@@ -262,7 +284,11 @@
             return;
         }
 
-        BigDecimal totalIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "M");
+        // 套餐业绩
+        BigDecimal tcIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "M", 2);
+        // 普通商品业绩
+        BigDecimal normalIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "M", 1);
+        BigDecimal totalIncome = tcIncome.add(normalIncome);
 
         List<DataDictionaryCustom> rankAward = dataDictionaryCustomMapper.selectDicByType("RANK_AWARD");
         DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANK_BONUS.getType(), DataDictionaryEnum.RANK_BONUS.getCode());
@@ -312,11 +338,11 @@
             }
 
             BigDecimal reduceProfit = income.multiply(prop);
-            if (reduceProfit.compareTo(BigDecimal.ZERO) > 0) {
+            if (reduceProfit.compareTo(BigDecimal.ZERO) < 1) {
                 continue;
             }
 
-            int reduce = walletService.reduce(reduceProfit.negate(), mallMember.getId(), "commission");
+            int reduce = walletService.reduce(reduceProfit, mallMember.getId(), "commission");
             if (reduce == 2) {
                 continue;
             }
@@ -328,7 +354,7 @@
                     continue;
                 }
 
-                int reduce1 = walletService.reduce(preProfit.negate(), child.getId(), "score");
+                int reduce1 = walletService.reduce(preProfit, child.getId(), "score");
                 if (reduce1 == 2) {
                     continue;
                 }
@@ -340,4 +366,65 @@
         }
         log.info("######==感恩奖==end==####");
     }
+
+    @Override
+    public void storeAndDirectorProfit(Date profitDate) {
+        log.info("#####==店补/董事==start==######");
+        if (profitDate == null) {
+            profitDate = DateUtil.offset(new Date(), DateField.DAY_OF_YEAR, -1);
+        }
+        // 套餐业绩
+        BigDecimal tcIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D", 2);
+        // 普通商品业绩
+        BigDecimal normalIncome = mallOrderInfoMapper.selectTotalAmountUnCostForDate(profitDate, null, "D", 1);
+        BigDecimal totalIncome = tcIncome.add(normalIncome);
+
+        // 董事
+        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.DIRECTOR_BONUS.getType(), DataDictionaryEnum.DIRECTOR_BONUS.getCode());
+        List<MallMember> directors = mallMemberMapper.selectDirectorsOrStoreMaster(1);
+        if (CollUtil.isNotEmpty(directors)) {
+            BigDecimal total = totalIncome.multiply(new BigDecimal(dic.getValue()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
+            BigDecimal pre = total.divide(new BigDecimal(directors.size()), 2, RoundingMode.HALF_UP);
+
+            for (MallMember director : directors) {
+                if (pre.compareTo(BigDecimal.ZERO) < 1) {
+                    continue;
+                }
+
+                int reduce = walletService.reduce(pre, director.getId(), "score");
+                if (reduce == 2) {
+                    continue;
+                }
+
+                walletService.add(pre, director.getId(), "commission");
+                moneyFlowService.addMoneyFlow(director.getId(), pre, MoneyFlowTypeEnum.DIRECTOR_BONUS.getValue(), null, FlowTypeEnum.COMMISSION.getValue());
+                moneyFlowService.addMoneyFlow(director.getId(), pre.negate(), MoneyFlowTypeEnum.DIRECTOR_BONUS.getValue(), null, FlowTypeEnum.SCORE.getValue());
+            }
+        }
+
+        // 店补
+        dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.COMMUNITY_BONUS.getType(), DataDictionaryEnum.COMMUNITY_BONUS.getCode());
+        List<MallMember> storeMasters = mallMemberMapper.selectDirectorsOrStoreMaster(2);
+        if (CollUtil.isNotEmpty(storeMasters)) {
+            BigDecimal total = totalIncome.multiply(new BigDecimal(dic.getValue()).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
+            BigDecimal pre = total.divide(new BigDecimal(storeMasters.size()), 2, RoundingMode.HALF_UP);
+
+            for (MallMember storeMaster : storeMasters) {
+                if (pre.compareTo(BigDecimal.ZERO) < 1) {
+                    continue;
+                }
+
+                int reduce = walletService.reduce(pre, storeMaster.getId(), "score");
+                if (reduce == 2) {
+                    continue;
+                }
+
+                walletService.add(pre, storeMaster.getId(), "commission");
+                moneyFlowService.addMoneyFlow(storeMaster.getId(), pre, MoneyFlowTypeEnum.COMMUNITY_BONUS.getValue(), null, FlowTypeEnum.COMMISSION.getValue());
+                moneyFlowService.addMoneyFlow(storeMaster.getId(), pre.negate(), MoneyFlowTypeEnum.COMMUNITY_BONUS.getValue(), null, FlowTypeEnum.SCORE.getValue());
+            }
+        }
+
+        log.info("#####==店补/董事==end==######");
+    }
 }
diff --git a/src/main/resources/mapper/modules/MallAchieveRecordMapper.xml b/src/main/resources/mapper/modules/MallAchieveRecordMapper.xml
new file mode 100644
index 0000000..8a51fdc
--- /dev/null
+++ b/src/main/resources/mapper/modules/MallAchieveRecordMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cc.mrbird.febs.mall.mapper.MallAchieveRecordMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml
index 30a114d..5ce313a 100644
--- a/src/main/resources/mapper/modules/MallMemberMapper.xml
+++ b/src/main/resources/mapper/modules/MallMemberMapper.xml
@@ -318,35 +318,34 @@
     </select>
 
 <!--    <select id="selectRankListInPage" resultType="cc.mrbird.febs.mall.entity.MallMember">-->
-<!--        select * from (-->
-<!--          select a.id, a.name, a.invite_id, a.avatar, sum(b.amount) amount,max(order_time) orderTime from mall_member a, mall_order_info b-->
-<!--          where  a.id=b.member_id and b.status = 4-->
-<!--        &lt;!&ndash; 日 &ndash;&gt;-->
-<!--        <if test="record.query == '1'">-->
-
-<!--        </if>-->
-<!--        &lt;!&ndash; 月 &ndash;&gt;-->
-<!--        <if test="record.query == '2'">-->
-<!--            and date_format(#{record.createdTime},'%Y-%m') = date_format(b.order_time,'%Y-%m')-->
-<!--        </if>-->
-<!--        <if test="record.amount != null">-->
-<!--            and amount = #{record.amount}-->
-<!--        </if>-->
-<!--          group by a.id-->
-<!--      ) a order by amount desc, a.orderTime desc-->
+<!--        select a.*, b.*-->
+<!--        from mall_member a-->
+<!--            inner join (-->
+<!--                select b.referrer_id refererId, sum(a.amount) amount, max(a.order_time) orderTime-->
+<!--                    from mall_order_info a-->
+<!--                    inner join mall_member b on a.member_id=b.ID-->
+<!--                    inner join mall_order_item c on a.id = c.order_id and c.is_normal=2-->
+<!--                where a.status in (2, 3, 4) and a.order_type=1-->
+<!--                &lt;!&ndash; 月 &ndash;&gt;-->
+<!--                <if test="record.query == '2'">-->
+<!--                    and date_format(#{record.createdTime},'%Y-%m') = date_format(b.order_time,'%Y-%m')-->
+<!--                </if>-->
+<!--                group by b.referrer_id-->
+<!--            ) b  on a.invite_id=b.refererId-->
+<!--        order by b.amount desc, b.orderTime desc-->
 <!--    </select>-->
+
     <select id="selectRankListInPage" resultType="cc.mrbird.febs.mall.entity.MallMember">
         select a.*, b.*
         from mall_member a
             inner join (
-                select b.referrer_id refererId, sum(a.amount) amount, max(a.order_time) orderTime
-                    from mall_order_info a
+                select b.referrer_id refererId, sum(a.amount) amount, max(a.pay_time) orderTime
+                from mall_achieve_record a
                     inner join mall_member b on a.member_id=b.ID
-                    inner join mall_order_item c on a.id = c.order_id and c.is_normal=2
-                where a.status in (2, 3, 4) and a.order_type=1
+                where 1=1
                 <!-- 月 -->
                 <if test="record.query == '2'">
-                    and date_format(#{record.createdTime},'%Y-%m') = date_format(b.order_time,'%Y-%m')
+                    and date_format(#{record.createdTime},'%Y-%m') = date_format(a.achieve_time,'%Y-%m')
                 </if>
                 group by b.referrer_id
             ) b  on a.invite_id=b.refererId
@@ -355,15 +354,14 @@
 
     <select id="selectAchieveByMemberId" resultType="java.math.BigDecimal">
         select IFNULL(sum(IFNULL(a.amount, 0)), 0)
-        from mall_order_info a
+        from mall_achieve_record a
              inner join mall_member b on a.member_id=b.ID
-             inner join mall_order_item c on a.id = c.order_id and c.is_normal=2
-        where a.status in (2, 3, 4) and a.order_type=1
+        where 1=1
         <if test="type == 1">
             and b.invite_id=#{inviteId}
         </if>
         <if test="type == 2">
-            and b.referrer_id=#{inviteId}
+            and find_in_set(#{inviteId}, b.referrer_ids)
         </if>
     </select>
 
@@ -381,4 +379,17 @@
         select * from mall_member
         where referrer_id=#{inviteId} and level != 'ZERO_LEVEL'
     </select>
+
+    <select id="selectDirectorsOrStoreMaster" resultType="cc.mrbird.febs.mall.entity.MallMember">
+        select * from mall_member
+        <where>
+            1=1
+            <if test="type == 1">
+                and director = 1
+            </if>
+            <if test="type == 2">
+                and store_master = 1
+            </if>
+        </where>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
index 9964fe6..00a6577 100644
--- a/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
+++ b/src/main/resources/mapper/modules/MallOrderInfoMapper.xml
@@ -232,7 +232,7 @@
             and member_id=#{memberId}
         </if>
         <if test="date != null">
-            and date_format(a.receving_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+            and date_format(a.receiving_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
         </if>
     </select>
 
@@ -240,22 +240,41 @@
         select IFNULL(sum(IFNULL(b.amount,0) - IFNULL(b.cost_price*b.cnt, 0)),0)
         from mall_order_info a
         inner join mall_order_item b on a.id=b.order_id
-        where a.status in (2, 3, 4) and a.is_normal = 2 and a.order_type=1
+        where a.order_type=1
+        <if test="isNormal == 2">
+            and a.status in (2, 3, 4) and b.is_normal = 2 and b.has_settle=1
+        </if>
+        <if test="isNormal == 1">
+            and a.status=4 and b.is_normal = 1 and b.has_settle=1
+        </if>
         <if test="member != null">
             and member_id=#{memberId}
         </if>
-        <if test="date != null and type == 'D'">
-            and date_format(a.receving_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+        <if test='date != null and dateType == "D"'>
+            and date_format(a.pay_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
         </if>
-        <if test="date != null and type == 'M'">
-            and date_format(a.receving_time, '%Y-%m') = date_format(#{date}, '%Y-%m')
+        <if test='date != null and dateType == "M"'>
+            and date_format(a.pay_time, '%Y-%m') = date_format(#{date}, '%Y-%m')
         </if>
-        <if test="date != null and type == 'Y'">
-            and date_format(a.receving_time, '%Y') = date_format(#{date}, '%Y')
+        <if test='date != null and dateType == "Y"'>
+            and date_format(a.pay_time, '%Y') = date_format(#{date}, '%Y')
         </if>
     </select>
 
     <select id="selectByOrderNo" resultType="cc.mrbird.febs.mall.entity.MallOrderInfo">
         select * from mall_order_info where order_no=#{orderNo}
     </select>
+
+    <update id="updateOrderConfirmStatus">
+        update mall_order_info
+        set status=4,
+            receiving_time=new Date()
+        where status=3 and date_format(pay_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+    </update>
+
+    <select id="selectOrderInfoWithNormalGoods" resultMap="OrderInfoMap">
+        select * from mall_order_info a
+        inner join mall_order_item b on a.id=b.order_id and b.is_normal=1
+        where date_format(pay_time, '%Y-%m-%d') = date_format(#{date}, '%Y-%m-%d')
+    </select>
 </mapper>
\ No newline at end of file
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 305289e..b4e86de 100644
--- a/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html
+++ b/src/main/resources/templates/febs/views/modules/mallMember/mallMemberList.html
@@ -60,6 +60,20 @@
     <input type="checkbox" value={{d.id}} lay-text="正常|禁用" lay-skin="switch" lay-filter="switchStatus">
     {{# } }}
 </script>
+<script type="text/html" id="switchStoreMaster">
+    {{# if(d.storeMaster === 1) { }}
+    <input type="checkbox" value={{d.id}} lay-text="是|否" checked lay-skin="switch" lay-filter="switchStoreMaster">
+    {{# } else { }}
+    <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="switchStoreMaster">
+    {{# } }}
+</script>
+<script type="text/html" id="switchDirector">
+    {{# if(d.director === 1) { }}
+    <input type="checkbox" value={{d.id}} lay-text="是|否" checked lay-skin="switch" lay-filter="switchDirector">
+    {{# } else { }}
+    <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="switchDirector">
+    {{# } }}
+</script>
 <style>
     .layui-form-onswitch {
         background-color: #5FB878 !important;
@@ -155,6 +169,19 @@
             });
         }
 
+        function changeIdentityYes(type, id) {
+            febs.get(ctx + 'admin/mallMember/changeIdentityYes/' + type + "/" + id, null, function () {
+                febs.alert.success('设置成功');
+                $query.click();
+            });
+        }
+        function changeIdentityNo(type, id) {
+            febs.get(ctx + 'admin/mallMember/changeIdentityNo/' + type + "/" + id, null, function () {
+                febs.alert.success('设置成功');
+                $query.click();
+            });
+        }
+
         function resetPwd(id, type) {
             febs.post(ctx + 'admin/mallMember/resetPwdNew/' + type + "/"+ id, null, function () {
                 febs.alert.success('重置成功');
@@ -194,6 +221,8 @@
                     {field: 'inviteId', title: '邀请码', minWidth: 100,align:'left'},
                     {field: 'referrerName', title: '推荐人', minWidth: 100,align:'left'},
                     {field: 'levelName', title: '会员类型', minWidth: 100,align:'left'},
+                    {field: 'storeMaster', title: '店长', templet:'#switchStoreMaster', minWidth: 100},
+                    {field: 'director', title: '董事', templet:'#switchDirector', minWidth: 100},
                     {field: 'accountType', title: '账号类型',
                         templet: function (d) {
                             if (d.accountType === 2) {
@@ -323,5 +352,21 @@
                 closeAccount(data.value);
             }
         })
+
+        form.on('switch(switchStoreMaster)', function (data) {
+            if (data.elem.checked) {
+                changeIdentityYes(2, data.value);
+            } else {
+                changeIdentityNo(2, data.value);
+            }
+        })
+
+        form.on('switch(switchDirector)', function (data) {
+            if (data.elem.checked) {
+                changeIdentityYes(1, data.value);
+            } else {
+                changeIdentityNo(1, data.value);
+            }
+        })
     })
 </script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/mallMember/mallSystemPay.html b/src/main/resources/templates/febs/views/modules/mallMember/mallSystemPay.html
index 4ace921..6cdd4de 100644
--- a/src/main/resources/templates/febs/views/modules/mallMember/mallSystemPay.html
+++ b/src/main/resources/templates/febs/views/modules/mallMember/mallSystemPay.html
@@ -38,6 +38,7 @@
             <label class="layui-form-label febs-form-item-require">拨付数目:</label>
             <div class="layui-input-block">
                 <input type="number" name="addBalance" lay-verify="required" autocomplete="off" class="layui-input">
+                <div class="layui-word-aux">输入负数即减少数量</div>
             </div>
         </div>
         <div class="layui-form-item febs-hide">
diff --git a/src/test/java/cc/mrbird/febs/ProfitTest.java b/src/test/java/cc/mrbird/febs/ProfitTest.java
index 2c93c7f..0b5ea8c 100644
--- a/src/test/java/cc/mrbird/febs/ProfitTest.java
+++ b/src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -1,11 +1,19 @@
 package cc.mrbird.febs;
 
+import cc.mrbird.febs.mall.entity.MallOrderItem;
+import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.mapper.MallOrderItemMapper;
 import cc.mrbird.febs.mall.service.IAgentService;
+import cc.mrbird.febs.mall.service.IMallAchieveService;
 import cc.mrbird.febs.mall.service.IMemberProfitService;
 import cc.mrbird.febs.rabbit.consumer.AgentConsumer;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
 
 /**
  * @author wzy
@@ -32,4 +40,26 @@
     public void thankfulProfit() {
         memberProfitService.thankfulProfit();
     }
+
+    @Autowired
+    private MallOrderInfoMapper mallOrderInfoMapper;
+
+    @Test
+    public void directorProfitTest() {
+        memberProfitService.storeAndDirectorProfit(new Date());
+    }
+
+    @Autowired
+    private MallOrderItemMapper mallOrderItemMapper;
+
+    @Autowired
+    private IMallAchieveService mallAchieveService;
+
+    @Test
+    public void achieveTest() {
+        List<MallOrderItem> items = mallOrderItemMapper.selectList(null);
+        for (MallOrderItem item : items) {
+            mallAchieveService.add(item.getId());
+        }
+    }
 }

--
Gitblit v1.9.1