xiaoyong931011
2022-09-01 854e2bd522c16327a1be43a4e09e0ff8c795b865
20220822
3 files added
6 files modified
188 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java 7 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallLeaderAchieve.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderAchieveMapper.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/quartz/OrderSettlementJob.java 94 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallLeaderAchieveMapper.xml 24 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallOrderInfoMapper.xml 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -20,6 +20,8 @@
    //团长返利参数
    BONUS_SWITCH("LEADERBONUS_SETTING", "BONUS_SWITCH"),
    BONUS_PERCENT("LEADERBONUS_SETTING", "BONUS_PERCENT"),
    //订单7天自动确认收货
    OEDER_AUTO_CONFIRM("OEDER_AUTO_CONFIRM", "OEDER_AUTO_CONFIRM"),
    SCORE_SIGN_SETTING("SCORE_SETTING", "SCORE_SIGN_SETTING"),
    STATIC_BONUS("BONUS_TYPE", "STATIC_BONUS"),
src/main/java/cc/mrbird/febs/common/enumerates/MoneyFlowTypeEnum.java
@@ -93,7 +93,12 @@
    /**
     * 充值
     */
    RECHARGE(18);
    RECHARGE(18),
    /**
     * 团长提成
     */
    LEADERACHIEVE(19);
    private final int value;
src/main/java/cc/mrbird/febs/mall/entity/MallLeaderAchieve.java
New file
@@ -0,0 +1,27 @@
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;
//团长提成表
@Data
@TableName("mall_leader_achieve")
public class MallLeaderAchieve extends BaseEntity {
    //订单所属的用户ID
    private Long memberId;
    //订单编号
    private String orderNo;
    //订单金额
    private BigDecimal amount;
    //团长特征码
    private String uniqueCode;
    //1:未提成 2:已提成
    private Integer state;
    public static final Integer STATE_ONE = 1;
    public static final Integer STATE_TWO = 2;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallLeaderAchieveMapper.java
New file
@@ -0,0 +1,17 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.entity.MallLeaderAchieve;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
public interface MallLeaderAchieveMapper extends BaseMapper<MallLeaderAchieve> {
    List<Map<String, String>> selectListByStateAndCreateTimeAndUniqueCode(@Param("state")Integer i, @Param("offsetDay")DateTime offsetDay);
    int updateByUniqueCodeStateAndTime(@Param("uniqueCode")String uniqueCode, @Param("state")Integer stateOne, @Param("offsetDay")DateTime dateTime);
}
src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
@@ -8,6 +8,7 @@
import cc.mrbird.febs.mall.vo.AdminMallOrderInfoVo;
import cc.mrbird.febs.mall.vo.AdminMallOrderVo;
import cc.mrbird.febs.mall.vo.AdminOrderDetailVo;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -66,4 +67,5 @@
    List<Map<String, Integer>> selectMemberOrderStatusCntByUniquecode(@Param("uniqueCode")String uniqueCode);
    List<MallOrderInfo> selectOrderByStatusAndPayTime(@Param("status")Integer i, @Param("paytime")DateTime offsetDay);
}
src/main/java/cc/mrbird/febs/mall/quartz/OrderSettlementJob.java
@@ -1,16 +1,12 @@
package cc.mrbird.febs.mall.quartz;
import cc.mrbird.febs.common.enumerates.AgentLevelEnum;
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.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.common.utils.MallUtils;
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;
@@ -18,6 +14,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -25,7 +22,9 @@
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author wzy
@@ -51,10 +50,25 @@
    private MallGoodsSkuMapper mallGoodsSkuMapper;
    @Autowired
    private MallLeaderAchieveMapper mallLeaderAchieveMapper;
    @Autowired
    private MallTeamLeaderMapper mallTeamLeaderMapper;
    @Autowired
    private DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Autowired
    private IMemberProfitService memberProfitService;
    @Autowired
    private IMallAchieveService mallAchieveService;
    @Autowired
    private IApiMallMemberWalletService memberWalletService;
    @Autowired
    private IMallMoneyFlowService mallMoneyFlowService;
    /**
     * 普通商品结算
@@ -94,6 +108,68 @@
    @Scheduled(cron = "0 0 0 * * ?")
    public void orderAutoConfirmJob() {
        log.info("自动确认收货");
        mallOrderInfoMapper.updateOrderConfirmStatus(DateUtil.offsetDay(new Date(), -7));
        DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.OEDER_AUTO_CONFIRM.getType(), DataDictionaryEnum.OEDER_AUTO_CONFIRM.getCode());
        Integer value = Integer.parseInt(dic.getValue());
        List<MallOrderInfo> orderInfos = mallOrderInfoMapper.selectOrderByStatusAndPayTime(3,DateUtil.offsetDay(new Date(), -value));
        if(CollUtil.isNotEmpty(orderInfos)){
            for(MallOrderInfo orderInfo : orderInfos){
                //生成一条团长提成记录
                MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve();
                mallLeaderAchieve.setMemberId(orderInfo.getMemberId());
                mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo());
                mallLeaderAchieve.setAmount(orderInfo.getAmount());
                mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode());
                mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE);
                mallLeaderAchieveMapper.insert(mallLeaderAchieve);
            }
            mallOrderInfoMapper.updateOrderConfirmStatus(DateUtil.offsetDay(new Date(), -value));
        }
    }
    /**
     * 自动确认收货
     */
//    @Scheduled(cron = "0 0 1 * * ?")
    @Scheduled(cron = "1 * * * * ?")
    public void leaderAchieveAuto() {
        log.info("团长每日提成");
        DataDictionaryCustom dicBonusSwitch = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_SWITCH.getType(), DataDictionaryEnum.BONUS_SWITCH.getCode());
        String bonusSwitch = dicBonusSwitch.getValue();
        if("1".equals(bonusSwitch)){
            DataDictionaryCustom dicBonusPercent = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.BONUS_PERCENT.getType(), DataDictionaryEnum.BONUS_PERCENT.getCode());
            BigDecimal bonusPercent = new BigDecimal(dicBonusPercent.getValue()).setScale(2,BigDecimal.ROUND_DOWN);;
            //获取每日提成总数
            /**
             * a.unique_code uniqueCode 团长特征码
             * , IFNULL(sum(a.amount),0) amount 每日提成总金额
             */
            DateTime dateTime = DateUtil.offsetDay(new Date(), -1);
            List<Map<String, String>> allLeaderAchieve = mallLeaderAchieveMapper.selectListByStateAndCreateTimeAndUniqueCode(MallLeaderAchieve.STATE_ONE,dateTime);
            if (CollUtil.isNotEmpty(allLeaderAchieve)) {
                for (Map<String, String> map : allLeaderAchieve) {
                    String uniqueCode = map.get("uniqueCode");
                    //直接舍弃小数点的第三位
                    BigDecimal amount = new BigDecimal(map.get("amount")).setScale(2,BigDecimal.ROUND_DOWN);
                    BigDecimal achieveMoney = amount.multiply(bonusPercent).setScale(2,BigDecimal.ROUND_DOWN);
                    MallMember mallMember = mallMemberMapper.selectInfoByInviteId(uniqueCode);
                    memberWalletService.addBalance(achieveMoney,mallMember.getId());
                    String achieveNo = "TC."+ MallUtils.getOrderNum();
                    mallMoneyFlowService.addMoneyFlow(
                            mallMember.getId(),
                            achieveMoney,
                            MoneyFlowTypeEnum.LEADERACHIEVE.getValue(),
                            achieveNo,
                            FlowTypeEnum.BALANCE.getValue());
                    //更新到已提成状态
                    mallLeaderAchieveMapper.updateByUniqueCodeStateAndTime(uniqueCode,MallLeaderAchieve.STATE_ONE,dateTime);
                }
            }
        }
    }
    public static void main(String[] args) {
        BigDecimal bigDecimal = new BigDecimal(0.1256).setScale(2,BigDecimal.ROUND_DOWN);
        System.out.println(bigDecimal);
    }
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -74,6 +74,7 @@
    private final MallTeamLeaderMapper mallTeamLeaderMapper;
    private final MallMemberMapper mallMemberMapper;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    private final MallLeaderAchieveMapper mallLeaderAchieveMapper;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -484,6 +485,15 @@
        orderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
        orderInfo.setReceivingTime(new Date());
        this.baseMapper.updateById(orderInfo);
        //生成一条团长提成记录
        MallLeaderAchieve mallLeaderAchieve = new MallLeaderAchieve();
        mallLeaderAchieve.setMemberId(orderInfo.getMemberId());
        mallLeaderAchieve.setOrderNo(orderInfo.getOrderNo());
        mallLeaderAchieve.setAmount(orderInfo.getAmount());
        mallLeaderAchieve.setUniqueCode(orderInfo.getTakeUniqueCode());
        mallLeaderAchieve.setState(MallLeaderAchieve.STATE_ONE);
        mallLeaderAchieveMapper.insert(mallLeaderAchieve);
    }
    @Override
src/main/resources/mapper/modules/MallLeaderAchieveMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.MallLeaderAchieveMapper">
    <select id="selectListByStateAndCreateTimeAndUniqueCode" resultType="java.util.Map">
        select
            a.unique_code uniqueCode,
            IFNULL(sum(a.amount),0) amount
        from mall_leader_achieve a
        where a.state = #{state}
          and date_format(a.CREATED_TIME, '%Y-%m-%d') = date_format(#{offsetDay}, '%Y-%m-%d')
        group by a.unique_code
    </select>
    <update id="updateByUniqueCodeStateAndTime">
        update mall_leader_achieve
        set state = 2,
            UPDATED_TIME = new Date()
        where unique_code = #{uniqueCode}
        and state = 1
        and date_format(CREATED_TIME, '%Y-%m-%d') = date_format(#{offsetDay}, '%Y-%m-%d')
    </update>
</mapper>
src/main/resources/mapper/modules/MallOrderInfoMapper.xml
@@ -363,4 +363,9 @@
        where del_flag = 2 and take_unique_code = #{uniqueCode}
        group by status
    </select>
    <select id="selectOrderByStatusAndPayTime" resultType="cc.mrbird.febs.mall.entity.MallOrderInfo">
        select * from mall_order_info where status=#{status}
         and date_format(pay_time, '%Y-%m-%d') = date_format(#{paytime}, '%Y-%m-%d')
    </select>
</mapper>