From c1b462af63ae1d293bf967d3c3da07d9348f8e76 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 05 Aug 2021 15:18:51 +0800
Subject: [PATCH] add /distrib/shareMoments

---
 gc-user/src/main/resources/mapper/user/ScoreDetailsMapper.xml              |    5 ++
 gc-user/src/main/java/com/xzx/gc/user/service/DistribService.java          |   67 +++++++++++++++++++++++++++++++++
 gc-user/src/main/java/com/xzx/gc/user/mapper/ScoreDetailsMapper.java       |    7 +++
 gc-order/src/main/java/com/xzx/gc/order/service/DistribService.java        |    2 
 gc-user/src/main/resources/mapper/user/RedPaperRuleMapper.xml              |    4 ++
 gc-user/src/main/java/com/xzx/gc/user/mapper/RedPaperRuleMapper.java       |    4 ++
 gc-user/src/main/java/com/xzx/gc/user/controller/ApiDistribController.java |    7 +++
 gc-core/src/main/java/com/xzx/gc/common/constant/CommonEnum.java           |    4 +
 8 files changed, 98 insertions(+), 2 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 423f909..2f61200 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
@@ -100,7 +100,9 @@
     返利环保币比例("regular_money_percent"),
     完成数量后返积分("point_reward"),
 
-    推荐首单奖励("first_score")
+    推荐首单奖励("first_score"),
+    朋友圈分享奖励("share_score"),
+    朋友圈分享限次("share_score_time")
     ;//枚举结束
     private String value;
 
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
index 8e2fe94..65b15db 100644
--- 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
@@ -238,7 +238,7 @@
             scoreDetails.setOriginalScore(collectScore);
             scoreDetails.setChangeScore(returnScore);
             scoreDetails.setCreatedTime(new Date());
-            scoreDetails.setType(ScoreDetails.SCORE_TYPE_OTHER);
+            scoreDetails.setType(ScoreDetails.SCORE_TYPE_INVITE_FIRST_ORDER);
             scoreDetails.setUserId(accountInfo.getUserId());
             scoreDetails.setOrderNo(orderId.toString());
             scoreDetailsMapper.insert(scoreDetails);
diff --git a/gc-user/src/main/java/com/xzx/gc/user/controller/ApiDistribController.java b/gc-user/src/main/java/com/xzx/gc/user/controller/ApiDistribController.java
index 25e1a5f..8bb8d95 100644
--- a/gc-user/src/main/java/com/xzx/gc/user/controller/ApiDistribController.java
+++ b/gc-user/src/main/java/com/xzx/gc/user/controller/ApiDistribController.java
@@ -70,4 +70,11 @@
         return JsonResult.success(distribService.findHeadTeamListInPage(headTeamDto));
     }
 
+    @ApiOperation("分享到朋友圈")
+    @PostMapping(value = "/distrib/shareMoments")
+    public JsonResult<String> shareMoments(HttpServletRequest request) {
+        distribService.shareToMoments(getUserId(request));
+        return JsonResult.success("分享成功");
+    }
+
 }
diff --git a/gc-user/src/main/java/com/xzx/gc/user/mapper/RedPaperRuleMapper.java b/gc-user/src/main/java/com/xzx/gc/user/mapper/RedPaperRuleMapper.java
index 95d9dc8..9de084f 100644
--- a/gc-user/src/main/java/com/xzx/gc/user/mapper/RedPaperRuleMapper.java
+++ b/gc-user/src/main/java/com/xzx/gc/user/mapper/RedPaperRuleMapper.java
@@ -4,9 +4,13 @@
 import com.xzx.gc.util.GcMapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface RedPaperRuleMapper extends GcMapper<RedPaperRule> {
 
     RedPaperRule getOne(@Param("now") String now, @Param("ruleType") String ruleType, @Param("partnerId") String partnerId);
 
     RedPaperRule selectByRuleName(@Param("ruleStr")String ruleStr);
+
+    List<RedPaperRule> selectByRuleType(@Param("type") String type);
 }
\ No newline at end of file
diff --git a/gc-user/src/main/java/com/xzx/gc/user/mapper/ScoreDetailsMapper.java b/gc-user/src/main/java/com/xzx/gc/user/mapper/ScoreDetailsMapper.java
new file mode 100644
index 0000000..ac7d554
--- /dev/null
+++ b/gc-user/src/main/java/com/xzx/gc/user/mapper/ScoreDetailsMapper.java
@@ -0,0 +1,7 @@
+package com.xzx.gc.user.mapper;
+
+import com.xzx.gc.entity.ScoreDetails;
+import com.xzx.gc.util.GcMapper;
+
+public interface ScoreDetailsMapper extends GcMapper<ScoreDetails> {
+}
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 598264b..1e1ab40 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
@@ -6,7 +6,9 @@
 import cn.hutool.core.date.DateUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.xzx.gc.common.constant.CommonEnum;
 import com.xzx.gc.common.exception.RestException;
+import com.xzx.gc.common.utils.RedisUtil;
 import com.xzx.gc.common.utils.StringUtils;
 import com.xzx.gc.entity.*;
 import com.xzx.gc.user.dto.*;
@@ -30,6 +32,7 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.HashMap;
 import java.util.List;
 
@@ -55,6 +58,10 @@
     private UserShareInfoMapper userShareInfoMapper;
     @Autowired
     private SysMessageMapper sysMessageMapper;
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private ScoreDetailsMapper scoreDetailsMapper;
 
     public ViewSettingVo viewSetting(String ruleStr) {
         ViewSettingVo viewSettingVo = new ViewSettingVo();
@@ -468,4 +475,64 @@
             redPaperRuleMapper.updateByPrimaryKey(redPaperRule);
         }
     }
+
+    public void shareToMoments(String userId) {
+        List<RedPaperRule> redPaperRules = redPaperRuleMapper.selectByRuleType("10");
+        if (CollUtil.isEmpty(redPaperRules)) {
+            return;
+        }
+
+        RedPaperRule rule = redPaperRules.get(0);
+        String shareTimes = getRuleValue(rule, CommonEnum.朋友圈分享限次.getValue());
+
+        String shareScore = getRuleValue(rule, CommonEnum.朋友圈分享奖励.getValue());
+        String key = "moments:times:" + userId;
+        Integer times = redisUtil.getAsInt("moments:times:" + userId);
+        times = times == null ? 1 : times + 1;
+
+        if (StrUtil.isNotBlank(shareTimes)) {
+            if (times > Integer.parseInt(shareTimes)) {
+                throw new RestException("达到24小时内最大分享次数");
+            }
+
+            if (StrUtil.isNotBlank(shareScore)) {
+                return;
+            }
+
+            AccountInfo accountInfo = accountMapper.selectOneByUserId(userId);
+            BigDecimal returnScore = new BigDecimal(shareScore);
+            BigDecimal collectScore = StrUtil.isNotBlank(accountInfo.getCollectScore()) ? new BigDecimal(accountInfo.getCollectScore()) : BigDecimal.ZERO;
+            accountInfo.setCollectScore(collectScore.add(returnScore).setScale(0, RoundingMode.DOWN).toString());
+            accountMapper.updateByPrimaryKey(accountInfo);
+
+            ScoreDetails scoreDetails = new ScoreDetails();
+            scoreDetails.setCurrentScore(new BigDecimal(accountInfo.getCollectScore()));
+            scoreDetails.setOriginalScore(collectScore);
+            scoreDetails.setChangeScore(returnScore);
+            scoreDetails.setCreatedTime(new Date());
+            scoreDetails.setType(ScoreDetails.SCORE_TYPE_INVITE_FIRST_ORDER);
+            scoreDetails.setUserId(accountInfo.getUserId());
+            scoreDetailsMapper.insert(scoreDetails);
+
+            SysMessage sysMessage = new SysMessage();
+            sysMessage.setCreateTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+            sysMessage.setCreateUserId(accountInfo.getUserId());
+            sysMessage.setUserId(accountInfo.getUserId());
+            sysMessage.setMessageType("4");
+            sysMessage.setMessageSubTypeName("朋友圈分享");
+            sysMessage.setMessage("朋友圈分享, 积分:" + returnScore);
+            sysMessage.setFlag("2");
+            sysMessageMapper.insert(sysMessage);
+
+            redisUtil.setex(key, times.toString(), 84400);
+        }
+    }
+
+    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-user/src/main/resources/mapper/user/RedPaperRuleMapper.xml b/gc-user/src/main/resources/mapper/user/RedPaperRuleMapper.xml
index 6bcc8b1..f7f71ef 100644
--- a/gc-user/src/main/resources/mapper/user/RedPaperRuleMapper.xml
+++ b/gc-user/src/main/resources/mapper/user/RedPaperRuleMapper.xml
@@ -21,4 +21,8 @@
   <select id="selectByRuleName" resultType="com.xzx.gc.entity.RedPaperRule">
     select * from xzx_user_redpaper_rule where rule_name = #{ruleStr}
   </select>
+
+  <select id="selectByRuleType" resultType="com.xzx.gc.entity.RedPaperRule">
+    select * from xzx_user_redpaper_rule where rule_type=#{type}
+  </select>
 </mapper>
\ No newline at end of file
diff --git a/gc-user/src/main/resources/mapper/user/ScoreDetailsMapper.xml b/gc-user/src/main/resources/mapper/user/ScoreDetailsMapper.xml
new file mode 100644
index 0000000..a99744b
--- /dev/null
+++ b/gc-user/src/main/resources/mapper/user/ScoreDetailsMapper.xml
@@ -0,0 +1,5 @@
+<?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="">
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.1