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>