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/mapper/UserHeadDetailsMapper.java |   10 ++
 gc-order/src/main/java/com/xzx/gc/order/service/DistribService.java       |  145 ++++++++++++++++++++++++++++++++++++
 gc-order/src/main/resources/mapper/order/JhyOrderItemsMapper.xml          |    6 +
 gc-core/src/main/java/com/xzx/gc/entity/UserHeadDetails.java              |    2 
 gc-order/src/main/resources/mapper/order/UserHeadRelateMapper.xml         |    9 ++
 gc-core/src/main/java/com/xzx/gc/common/constant/CommonEnum.java          |    7 +
 gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadRelateMapper.java  |   10 ++
 gc-user/src/main/java/com/xzx/gc/user/service/DistribService.java         |    5 +
 gc-order/src/main/java/com/xzx/gc/order/mapper/JhyOrderItemsMapper.java   |    3 
 gc-order/src/main/resources/mapper/order/RedPaperRuleMapper.xml           |    3 
 gc-order/src/main/resources/mapper/order/UserHeadDetailsMapper.xml        |    9 ++
 gc-order/src/main/java/com/xzx/gc/order/mapper/RedPaperRuleMapper.java    |    1 
 gc-order/src/main/java/com/xzx/gc/order/service/JhyOrderService.java      |    5 +
 13 files changed, 214 insertions(+), 1 deletions(-)

diff --git a/gc-core/src/main/java/com/xzx/gc/common/constant/CommonEnum.java b/gc-core/src/main/java/com/xzx/gc/common/constant/CommonEnum.java
index 741f965..f599b83 100644
--- a/gc-core/src/main/java/com/xzx/gc/common/constant/CommonEnum.java
+++ b/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;
 
diff --git a/gc-core/src/main/java/com/xzx/gc/entity/UserHeadDetails.java b/gc-core/src/main/java/com/xzx/gc/entity/UserHeadDetails.java
index 3d6ead3..a800d2c 100644
--- a/gc-core/src/main/java/com/xzx/gc/entity/UserHeadDetails.java
+++ b/gc-core/src/main/java/com/xzx/gc/entity/UserHeadDetails.java
@@ -23,4 +23,6 @@
     private String headUserId;
 
     private String userId;
+
+    private String remark;
 }
diff --git a/gc-order/src/main/java/com/xzx/gc/order/mapper/JhyOrderItemsMapper.java b/gc-order/src/main/java/com/xzx/gc/order/mapper/JhyOrderItemsMapper.java
index 3229829..ce5bcec 100644
--- a/gc-order/src/main/java/com/xzx/gc/order/mapper/JhyOrderItemsMapper.java
+++ b/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);
 }
diff --git a/gc-order/src/main/java/com/xzx/gc/order/mapper/RedPaperRuleMapper.java b/gc-order/src/main/java/com/xzx/gc/order/mapper/RedPaperRuleMapper.java
index e094e8f..4b3a103 100644
--- a/gc-order/src/main/java/com/xzx/gc/order/mapper/RedPaperRuleMapper.java
+++ b/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();
 }
\ No newline at end of file
diff --git a/gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadDetailsMapper.java b/gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadDetailsMapper.java
new file mode 100644
index 0000000..f158117
--- /dev/null
+++ b/gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadDetailsMapper.java
@@ -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);
+}
diff --git a/gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadRelateMapper.java b/gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadRelateMapper.java
new file mode 100644
index 0000000..78f3411
--- /dev/null
+++ b/gc-order/src/main/java/com/xzx/gc/order/mapper/UserHeadRelateMapper.java
@@ -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);
+}
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);
+    }
+}
diff --git a/gc-order/src/main/java/com/xzx/gc/order/service/JhyOrderService.java b/gc-order/src/main/java/com/xzx/gc/order/service/JhyOrderService.java
index 3add922..27e1bf8 100644
--- a/gc-order/src/main/java/com/xzx/gc/order/service/JhyOrderService.java
+++ b/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());
     }
 }
diff --git a/gc-order/src/main/resources/mapper/order/JhyOrderItemsMapper.xml b/gc-order/src/main/resources/mapper/order/JhyOrderItemsMapper.xml
index df9edd4..c94fc89 100644
--- a/gc-order/src/main/resources/mapper/order/JhyOrderItemsMapper.xml
+++ b/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>
\ No newline at end of file
diff --git a/gc-order/src/main/resources/mapper/order/RedPaperRuleMapper.xml b/gc-order/src/main/resources/mapper/order/RedPaperRuleMapper.xml
index c0ee352..1ff327e 100644
--- a/gc-order/src/main/resources/mapper/order/RedPaperRuleMapper.xml
+++ b/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>
\ No newline at end of file
diff --git a/gc-order/src/main/resources/mapper/order/UserHeadDetailsMapper.xml b/gc-order/src/main/resources/mapper/order/UserHeadDetailsMapper.xml
new file mode 100644
index 0000000..1b57913
--- /dev/null
+++ b/gc-order/src/main/resources/mapper/order/UserHeadDetailsMapper.xml
@@ -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>
\ No newline at end of file
diff --git a/gc-order/src/main/resources/mapper/order/UserHeadRelateMapper.xml b/gc-order/src/main/resources/mapper/order/UserHeadRelateMapper.xml
new file mode 100644
index 0000000..4eafa25
--- /dev/null
+++ b/gc-order/src/main/resources/mapper/order/UserHeadRelateMapper.xml
@@ -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>
\ No newline at end of file
diff --git a/gc-user/src/main/java/com/xzx/gc/user/service/DistribService.java b/gc-user/src/main/java/com/xzx/gc/user/service/DistribService.java
index 99d01ae..861f591 100644
--- a/gc-user/src/main/java/com/xzx/gc/user/service/DistribService.java
+++ b/gc-user/src/main/java/com/xzx/gc/user/service/DistribService.java
@@ -119,14 +119,17 @@
         userHeadRelate.setHeadUserId(headId);
         userHeadRelate.setUserId(userId);
         userHeadRelate.setScore(BigDecimal.ZERO);
+        userHeadRelate.setCreatedTime(new Date());
         userHeadRelate.setAmount(BigDecimal.ZERO);
         userHeadRelateMapper.insert(userHeadRelate);
 
         SysMessage sysMessage = new SysMessage();
         sysMessage.setCreateTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
-        sysMessage.setCreateUserId(userId);
+        sysMessage.setCreateUserId(headId);
+        sysMessage.setUserId(headId);
         sysMessage.setMobilePhone(accountInfo.getAccountName());
         sysMessage.setMessageType("4");
+        sysMessage.setMessageSubTypeName("团队消息");
         sysMessage.setMessage("手机号:" + accountInfo.getAccountName() + "的用户, 成功加入您的团队");
         sysMessage.setFlag("2");
         sysMessageMapper.insert(sysMessage);

--
Gitblit v1.9.1