Helius
2021-07-15 5b69ea34662548b18c65884762c04ceebe023529
finish distrib profit
5 files added
6 files modified
189 ■■■■■ changed files
gc-core/src/main/java/com/xzx/gc/common/constant/CommonEnum.java 7 ●●●●● patch | view | raw | blame | history
gc-order/src/main/java/com/xzx/gc/order/mapper/JhyOrderItemsMapper.java 3 ●●●●● patch | view | raw | blame | history
gc-order/src/main/java/com/xzx/gc/order/mapper/RedPaperRuleMapper.java 1 ●●●● patch | view | raw | blame | history
gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadDetailsMapper.java 10 ●●●●● patch | view | raw | blame | history
gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadRelateMapper.java 10 ●●●●● patch | view | raw | blame | history
gc-order/src/main/java/com/xzx/gc/order/service/DistribService.java 126 ●●●●● patch | view | raw | blame | history
gc-order/src/main/java/com/xzx/gc/order/service/JhyOrderService.java 5 ●●●●● patch | view | raw | blame | history
gc-order/src/main/resources/mapper/order/JhyOrderItemsMapper.xml 6 ●●●●● patch | view | raw | blame | history
gc-order/src/main/resources/mapper/order/RedPaperRuleMapper.xml 3 ●●●●● patch | view | raw | blame | history
gc-order/src/main/resources/mapper/order/UserHeadDetailsMapper.xml 9 ●●●●● patch | view | raw | blame | history
gc-order/src/main/resources/mapper/order/UserHeadRelateMapper.xml 9 ●●●●● patch | view | raw | blame | history
gc-core/src/main/java/com/xzx/gc/common/constant/CommonEnum.java
@@ -92,6 +92,13 @@
    待审核("1"),
    已审核("2"),
    审核不通过("3"),
    // first_reward,order_num_first,regular_point,regular_money_percent,point_reward
    团长首单奖励("first_reward"),
    首单后返利数量("order_num_first"),
    返利固定积分("regular_point"),
    返利环保币比例("regular_money_percent"),
    完成数量后返积分("point_reward")
    ;//枚举结束
    private String value;
gc-order/src/main/java/com/xzx/gc/order/mapper/JhyOrderItemsMapper.java
@@ -4,9 +4,12 @@
import com.xzx.gc.util.GcMapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
public interface JhyOrderItemsMapper extends GcMapper<JhyOrderItems> {
    List<JhyOrderItems> selectOrderItems(@Param("orderId") Long orderId);
    BigDecimal selectOrderScoreByOrderId(@Param("orderId") Long orderId);
}
gc-order/src/main/java/com/xzx/gc/order/mapper/RedPaperRuleMapper.java
@@ -58,4 +58,5 @@
    List<XzxUserRedpaperRuleModel> queryRoyalty(@Param("partnerIds")List<String> partnerIds, @Param("partnerId")String partnerId);
    RedPaperRule selectDistribRule();
}
gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadDetailsMapper.java
New file
@@ -0,0 +1,10 @@
package com.xzx.gc.order.mapper;
import com.xzx.gc.entity.UserHeadDetails;
import com.xzx.gc.util.GcMapper;
import org.apache.ibatis.annotations.Param;
public interface UserHeadDetailsMapper extends GcMapper<UserHeadDetails> {
    Integer selectDetailsCount(@Param("userId") String userId);
}
gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadRelateMapper.java
New file
@@ -0,0 +1,10 @@
package com.xzx.gc.order.mapper;
import com.xzx.gc.entity.UserHeadRelate;
import com.xzx.gc.util.GcMapper;
import org.apache.ibatis.annotations.Param;
public interface UserHeadRelateMapper extends GcMapper<UserHeadRelate> {
    UserHeadRelate selectRelateByUserId(@Param("userId") String userId);
}
gc-order/src/main/java/com/xzx/gc/order/service/DistribService.java
New file
@@ -0,0 +1,126 @@
package com.xzx.gc.order.service;
import cn.hutool.core.util.StrUtil;
import com.xzx.gc.common.constant.CommonEnum;
import com.xzx.gc.entity.*;
import com.xzx.gc.order.mapper.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * @author wzy
 * @date 2021-07-14
 **/
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class DistribService {
    @Autowired
    private UserHeadDetailsMapper userHeadDetailsMapper;
    @Autowired
    private UserHeadRelateMapper userHeadRelateMapper;
    @Autowired
    private JhyOrderMapper jhyOrderMapper;
    @Autowired
    private RedPaperRuleMapper redPaperRuleMapper;
    @Autowired
    private JhyOrderItemsMapper jhyOrderItemsMapper;
    public void distribRecord(Long orderId, String userId) {
        UserHeadRelate userHeadRelate = userHeadRelateMapper.selectRelateByUserId(userId);
        if (userHeadRelate == null) {
            return;
        }
        RedPaperRule redPaperRule = redPaperRuleMapper.selectDistribRule();
        if (0 == redPaperRule.getStatus()) {
            return;
        }
        Integer count = userHeadDetailsMapper.selectDetailsCount(userId);
        List<String> remark = new ArrayList<>();
        BigDecimal totalReturnScore = BigDecimal.ZERO;
        BigDecimal totalReturnCoin = BigDecimal.ZERO;
        BigDecimal totalScore = jhyOrderItemsMapper.selectOrderScoreByOrderId(orderId);
        JhyOrder order = jhyOrderMapper.selectByPrimaryKey(orderId);
        if (count == 0) {
            String value = getRuleValue(redPaperRule, CommonEnum.团长首单奖励.getValue());
            // 首单返利
            if (StrUtil.isNotBlank(value) && !"0".equals(value)) {
                BigDecimal money = new BigDecimal(value);
                totalReturnScore = totalReturnScore.add(money);
                remark.add("首单返利:" + money);
            }
        }
        if (count > 0) {
            String value = getRuleValue(redPaperRule, CommonEnum.首单后返利数量.getValue());
            if (StrUtil.isNotBlank(value) && !"0".equals(value)) {
                // 首单完成后,在value单内,返利积分或者环保币
                if (count - 1 <= Integer.parseInt(value)) {
                    String scoreStr = getRuleValue(redPaperRule, CommonEnum.返利固定积分.getValue());
                    String coinStr = getRuleValue(redPaperRule, CommonEnum.返利环保币比例.getValue());
                    // 根据积分返利固定积分
                    if (StrUtil.isNotBlank(scoreStr) && !"0".equals(scoreStr)) {
                        BigDecimal score = new BigDecimal(scoreStr);
                        totalReturnScore = totalReturnScore.add(score);
                        remark.add("首单完成后返固定积分:" + scoreStr);
                    }
                    // 根据订单总积分, 1:40比例,换算成环保币,返对应百分比
                    if (StrUtil.isNotBlank(coinStr) && !"0".equals(coinStr)) {
                        BigDecimal coinRatio = new BigDecimal(coinStr).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_DOWN);
                        BigDecimal totalCoin = totalScore.multiply(new BigDecimal(40));
                        BigDecimal returnCoin = totalCoin.multiply(coinRatio).setScale(2, BigDecimal.ROUND_DOWN);
                        totalReturnCoin = totalReturnCoin.add(returnCoin);
                        remark.add("首单完成后返比例环保币:" + returnCoin +"(" + coinRatio +")");
                    }
                    // 当用户进行订单数量,超过value单后,每完成一单返利指定积分
                } else {
                    String finishValue = getRuleValue(redPaperRule, CommonEnum.完成数量后返积分.getValue());
                    if (StrUtil.isNotBlank(finishValue) && !"0".equals(finishValue)) {
                        BigDecimal score = new BigDecimal(finishValue);
                        totalReturnScore = totalReturnScore.add(score);
                        remark.add("完成指定"+ Integer.parseInt(value) +"数量后每单返利:" + score);
                    }
                }
            }
        }
        UserHeadDetails userHeadDetails = new UserHeadDetails();
        userHeadDetails.setHeadUserId(userHeadRelate.getHeadUserId());
        userHeadDetails.setUserId(userId);
        userHeadDetails.setOrderNo(order.getOrderNo());
        userHeadDetails.setAmount(totalReturnCoin);
        userHeadDetails.setScore(totalReturnScore);
        userHeadDetails.setCreatedTime(new Date());
        userHeadDetailsMapper.insert(userHeadDetails);
        userHeadRelate.setAmount(userHeadRelate.getAmount().add(totalReturnCoin));
        userHeadRelate.setScore(userHeadDetails.getScore().add(totalReturnScore));
        userHeadRelateMapper.updateByPrimaryKey(userHeadRelate);
    }
    private String getRuleValue(RedPaperRule redPaperRule, String key) {
        List<String> rules = StrUtil.split(redPaperRule.getSharingProfitType(), ',');
        List<String> values = StrUtil.split(redPaperRule.getShareRatio(), ',');
        int i = rules.indexOf(key);
        return values.get(i);
    }
}
gc-order/src/main/java/com/xzx/gc/order/service/JhyOrderService.java
@@ -58,6 +58,9 @@
    @Autowired
    private IdUtils idUtils;
    @Autowired
    private DistribService distribService;
    public void addJhyOrder(AddJhyOrderDto orderDto) {
        JhyInfo jhyInfo = jhyInfoMapper.selectJhyInfoByUserId(orderDto.getUserId());
        if (jhyInfo != null && JhyInfo.CHECK_PASS.equals(jhyInfo.getStatus())) {
@@ -230,5 +233,7 @@
        userAccount.setCollectScore(userScore.add(totalScore).setScale( 0, BigDecimal.ROUND_DOWN ).toString());
        accountMapper.updateByPrimaryKey(userAccount);
        distribService.distribRecord(order.getId(), confirmDto.getUserId());
    }
}
gc-order/src/main/resources/mapper/order/JhyOrderItemsMapper.xml
@@ -7,4 +7,10 @@
        left join xzx_sys_environmental_info b on a.item_type=b.id
        where a.order_id=#{orderId}
    </select>
    <select id="selectOrderScoreByOrderId" resultType="java.math.BigDecimal">
        select sum(score) from xzx_jhy_order_items
        where order_id=#{orderId}
        group by order_id
    </select>
</mapper>
gc-order/src/main/resources/mapper/order/RedPaperRuleMapper.xml
@@ -318,4 +318,7 @@
        </if>
    </select>
    <select id="selectDistribRule" resultType="com.xzx.gc.entity.RedPaperRule">
        select * from xzx_user_redpaper_rule where rule_type=9
    </select>
</mapper>
gc-order/src/main/resources/mapper/order/UserHeadDetailsMapper.xml
New file
@@ -0,0 +1,9 @@
<?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="com.xzx.gc.order.mapper.UserHeadDetailsMapper">
    <select id="selectDetailsCount" resultType="java.lang.Integer">
        select count(1) from xzx_user_head_details
        where user_id=#{userId}
    </select>
</mapper>
gc-order/src/main/resources/mapper/order/UserHeadRelateMapper.xml
New file
@@ -0,0 +1,9 @@
<?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="com.xzx.gc.order.mapper.UserHeadRelateMapper">
    <select id="selectRelateByUserId" resultType="com.xzx.gc.entity.UserHeadRelate">
        select * from xzx_user_head_relate where user_id=#{userId}
    </select>
</mapper>