From 22c82c833f4411a75714e8e62f1380bd463ca537 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 15 Jul 2021 14:59:57 +0800 Subject: [PATCH] Merge branch 'score-shop' of http://120.27.238.55:7000/r/xzx into score-shop --- gc-order/src/main/java/com/xzx/gc/order/service/DistribService.java | 145 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 145 insertions(+), 0 deletions(-) diff --git a/gc-order/src/main/java/com/xzx/gc/order/service/DistribService.java b/gc-order/src/main/java/com/xzx/gc/order/service/DistribService.java new file mode 100644 index 0000000..05e17a7 --- /dev/null +++ b/gc-order/src/main/java/com/xzx/gc/order/service/DistribService.java @@ -0,0 +1,145 @@ +package com.xzx.gc.order.service; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +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; + @Autowired + private SysMessageMapper sysMessageMapper; + @Autowired + private AccountMapper accountMapper; + @Autowired + private UserMapper userMapper; + + 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); + UserInfo userInfo = userMapper.selectByPrimaryKey(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()); + userHeadDetails.setRemark(CollUtil.join(remark, ",")); + userHeadDetailsMapper.insert(userHeadDetails); + + userHeadRelate.setAmount(userHeadRelate.getAmount().add(totalReturnCoin)); + userHeadRelate.setScore(userHeadDetails.getScore().add(totalReturnScore)); + userHeadRelateMapper.updateByPrimaryKey(userHeadRelate); + + SysMessage sysMessage = new SysMessage(); + sysMessage.setCreateTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); + sysMessage.setCreateUserId(userHeadRelate.getHeadUserId()); + sysMessage.setUserId(userHeadRelate.getHeadUserId()); + sysMessage.setMessageType("4"); + sysMessage.setMessageSubTypeName("返利消息"); + sysMessage.setMessage("收到用户:" + Base64.decodeStr(userInfo.getNickName()) + "的订单返利, 积分:" + totalReturnScore +", 环保币:" + totalReturnCoin); + sysMessage.setFlag("2"); + sysMessageMapper.insert(sysMessage); + } + + 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); + } +} -- Gitblit v1.9.1