From fdb91cc72f7cbe8c095a1ce6442c9259ff01ff06 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 05 Aug 2021 16:47:12 +0800
Subject: [PATCH] add invite award

---
 gc-core/src/main/java/com/xzx/gc/entity/ScoreDetails.java           |    3 ++-
 gc-user/src/main/java/com/xzx/gc/user/service/DistribService.java   |   40 ++++++++++++++++++++++++++++++++++++++++
 gc-user/src/main/resources/mapper/user/AccountMapper.xml            |    5 +++++
 gc-user/src/main/java/com/xzx/gc/user/mapper/AccountMapper.java     |    2 ++
 gc-core/src/main/java/com/xzx/gc/common/constant/CommonEnum.java    |    3 ++-
 gc-user/src/main/java/com/xzx/gc/user/service/UserLoginService.java |    4 ++++
 6 files changed, 55 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 2f61200..8be4562 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
@@ -102,7 +102,8 @@
 
     推荐首单奖励("first_score"),
     朋友圈分享奖励("share_score"),
-    朋友圈分享限次("share_score_time")
+    朋友圈分享限次("share_score_time"),
+    邀请奖励("register_score")
     ;//枚举结束
     private String value;
 
diff --git a/gc-core/src/main/java/com/xzx/gc/entity/ScoreDetails.java b/gc-core/src/main/java/com/xzx/gc/entity/ScoreDetails.java
index 8c81b93..a604357 100644
--- a/gc-core/src/main/java/com/xzx/gc/entity/ScoreDetails.java
+++ b/gc-core/src/main/java/com/xzx/gc/entity/ScoreDetails.java
@@ -16,7 +16,7 @@
     //用户ID
     private String userId;
 
-    //交易类型 1-用户充值2-集物员支付3-用户兑换所得4-用户消费5-消费退回6-管理员充值7-其他
+    //交易类型 1-用户充值2-集物员支付3-用户兑换所得4-用户消费5-消费退回6-管理员充值7-其他 8-邀请后首单返利 9-分享朋友圈 10-邀请奖励
     private Integer type;
     public static final Integer SCORE_TYPE_USER_RECHARGE = 1;
     public static final Integer SCORE_TYPE_PAY = 2;
@@ -27,6 +27,7 @@
     public static final Integer SCORE_TYPE_OTHER = 7;
     public static final Integer SCORE_TYPE_INVITE_FIRST_ORDER = 8;
     public static final Integer SCORE_TYPE_SHARE_MOMENTS = 9;
+    public static final Integer SCORE_TYPE_INVITE = 10;
 
     //原始积分
     private BigDecimal originalScore;
diff --git a/gc-user/src/main/java/com/xzx/gc/user/mapper/AccountMapper.java b/gc-user/src/main/java/com/xzx/gc/user/mapper/AccountMapper.java
index 6c0335f..c8c6f09 100644
--- a/gc-user/src/main/java/com/xzx/gc/user/mapper/AccountMapper.java
+++ b/gc-user/src/main/java/com/xzx/gc/user/mapper/AccountMapper.java
@@ -78,5 +78,7 @@
     String selectJDSLExportByHeadUserId(@Param("accountId")String id, @Param("record")ExportDistribDataListDto distribDataListDto);
 
     List<AccountInfo> selectAccountInfoByIds(@Param("list") List<String> list);
+
+    AccountInfo selectAccountInfoByPhone(@Param("phone") String phone);
 }
 
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 d877616..10489b6 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
@@ -528,6 +528,46 @@
         }
     }
 
+    public void inviteAward(String phone) {
+        AccountInfo accountInfo = accountMapper.selectAccountInfoByPhone(phone);
+
+        List<RedPaperRule> redPaperRules = redPaperRuleMapper.selectByRuleType("10");
+        if (CollUtil.isEmpty(redPaperRules)) {
+            return;
+        }
+
+        RedPaperRule rule = redPaperRules.get(0);
+        String invite = getRuleValue(rule, CommonEnum.邀请奖励.getValue());
+
+        if (StrUtil.isBlank(invite)) {
+            return;
+        }
+
+        BigDecimal returnScore = new BigDecimal(invite);
+        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);
+        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);
+    }
+
     private String getRuleValue(RedPaperRule redPaperRule, String key) {
         List<String> rules = StrUtil.split(redPaperRule.getSharingProfitType(), ',');
         List<String> values = StrUtil.split(redPaperRule.getShareRatio(), ',');
diff --git a/gc-user/src/main/java/com/xzx/gc/user/service/UserLoginService.java b/gc-user/src/main/java/com/xzx/gc/user/service/UserLoginService.java
index 50c4e8c..9d57d57 100644
--- a/gc-user/src/main/java/com/xzx/gc/user/service/UserLoginService.java
+++ b/gc-user/src/main/java/com/xzx/gc/user/service/UserLoginService.java
@@ -93,6 +93,8 @@
 
     @Autowired
     private AccountService accountService;
+    @Autowired
+    private DistribService distribService;
 
 
 
@@ -246,6 +248,8 @@
                                 userShareInfo.setRegisterTime(DateUtil.now());
                                 userShareInfoMapper.insertSelective(userShareInfo);
                                 log.info("用户绑定成功,邀请人:{},被邀请人:{}", userShareInfo.getMobilePhone(), userShareInfo.getRegisterMobilePhone());
+
+                                distribService.inviteAward(userShareInfo.getMobilePhone());
                             }else{
                                 log.warn("邀请人:{}不是普通用户",userShareInfo.getMobilePhone());
                             }
diff --git a/gc-user/src/main/resources/mapper/user/AccountMapper.xml b/gc-user/src/main/resources/mapper/user/AccountMapper.xml
index e30a1fb..a417c05 100644
--- a/gc-user/src/main/resources/mapper/user/AccountMapper.xml
+++ b/gc-user/src/main/resources/mapper/user/AccountMapper.xml
@@ -554,4 +554,9 @@
             #{id}
         </foreach>
     </select>
+
+    <select id="selectAccountInfoByPhone" resultType="com.xzx.gc.entity.AccountInfo">
+        select a.* from xzx_account_info a, xzx_user_info b
+        where a.user_id=b.user_id and b.mobile_phone=#{phone}
+    </select>
 </mapper>

--
Gitblit v1.9.1