From 8f1b5245c592cd6dc5eb5a73f9a0ceb2a85f2048 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 19 一月 2021 18:27:35 +0800
Subject: [PATCH] 外网部署参数修改

---
 service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardResultManager.java |  155 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 137 insertions(+), 18 deletions(-)

diff --git a/service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardResultManager.java b/service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardResultManager.java
index 5e5946f..d228d0a 100644
--- a/service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardResultManager.java
+++ b/service-lucky/src/main/java/com/ks/lucky/service/impl/LuckyActivityAwardResultManager.java
@@ -4,14 +4,28 @@
 import com.google.gson.Gson;
 import com.ks.app.entity.AppAlipayInfoWithBLOBs;
 import com.ks.app.entity.AppInfo;
+import com.ks.app.util.AlipayAppUtil;
 import com.ks.lucky.exception.LuckyActivityAwardException;
 import com.ks.lucky.exception.LuckyActivityAwardResultException;
+import com.ks.lucky.exception.LuckyMQException;
 import com.ks.lucky.mapper.LuckyActivityAwardResultExtraMapper;
 import com.ks.lucky.mapper.LuckyActivityAwardResultMapper;
 import com.ks.lucky.pojo.DO.LuckyActivityAwardResult;
 import com.ks.lucky.pojo.DO.LuckyActivityAwardResultExtra;
 import com.ks.lucky.pojo.DO.LuckyActivityAwards;
+import com.ks.lucky.pojo.DO.LuckyMQ;
 import com.ks.lucky.pojo.DTO.ActivityAwardParams;
+import com.ks.lucky.pojo.DTO.RedPackage;
+import com.ks.lucky.pojo.DTO.mq.ActivityDrawnMsgDTO;
+import com.ks.lucky.query.ActivityAwardResultQuery;
+import com.ks.lucky.service.LuckyMQService;
+import com.ks.lucky.util.Constant;
+import com.ks.lucky.util.LoggerUtil;
+import com.ks.lucky.util.RedPackageUtil;
+import com.ks.lucky.util.mq.CMQManager;
+import com.ks.lucky.util.mq.LuckyMQFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.yeshi.utils.StringUtil;
@@ -21,19 +35,22 @@
 import org.yeshi.utils.entity.alipay.AlipayTransferAccount;
 import org.yeshi.utils.entity.alipay.AlipayTransferInfo;
 import org.yeshi.utils.exception.AlipayTransferException;
+import org.yeshi.utils.generater.entity.ExceptionData;
 
 import javax.annotation.Resource;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.Set;
+import java.math.RoundingMode;
+import java.util.*;
 
 /**
  * 濂栭」绠$悊
  */
 @Component
 public class LuckyActivityAwardResultManager {
+
+    Logger logger = LoggerFactory.getLogger(LuckyActivityAwardResultManager.class);
 
     @Resource
     private LuckyActivityAwardManager luckyActivityAwardManager;
@@ -47,8 +64,11 @@
     @Resource
     private LuckyActivityAwardResultExtraMapper luckyActivityAwardResultExtraMapper;
 
+    @Resource
+    private LuckyMQService luckyMQService;
 
-
+    @Resource
+    private LuckyActivityAwardResultManager luckyActivityAwardResultManager;
 
 
     /**
@@ -60,6 +80,29 @@
      */
     @Transactional(rollbackFor = Exception.class)
     public void addRecord(Set<String> uids, Long activityId, long awardId) {
+        LuckyActivityAwards award = luckyActivityAwardManager.getAwardDetail(awardId);
+        Map<String, BigDecimal> moneyMap = new HashMap<>();
+        //璁$畻姣忎釜浜虹殑鏀粯瀹濈孩鍖呴噾棰�
+        if (award.getActivityAwardParams().getType() == ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage) {
+            switch (award.getAwardWay()) {
+                //闅忔満
+                case LuckyActivityAwards.AWARD_WAY_RANDOM:
+                    RedPackage redPackage = new RedPackage(award.getActivityAwardParams().getRedPackage().doubleValue(), award.getCount());
+                    for (String uid : uids) {
+                        double money = RedPackageUtil.getRandomPackage(redPackage);
+                        moneyMap.put(uid, new BigDecimal(money));
+                    }
+                    break;
+                //骞冲垎
+                case LuckyActivityAwards.AWARD_WAY_DIVIDE:
+                    BigDecimal permoney = award.getActivityAwardParams().getRedPackage().divide(new BigDecimal(award.getCount()), 2, RoundingMode.FLOOR);
+                    for (String uid : uids) {
+                        moneyMap.put(uid, permoney);
+                    }
+                    break;
+            }
+        }
+
 
         for (String uidStr : uids) {
             long appId = Long.parseLong(uidStr.split("#")[0]);
@@ -78,7 +121,15 @@
             LuckyActivityAwardResultExtra extra = new LuckyActivityAwardResultExtra();
             extra.setAwardResultId(result.getId());
             extra.setCreateTime(new Date());
+            extra.setRedPackage(moneyMap.get(uidStr));
             luckyActivityAwardResultExtraMapper.insertSelective(extra);
+
+            //娣诲姞閫氱煡
+            try {
+                CMQManager.getInstance().publishActivityDrawnMsg(ActivityDrawnMsgDTO.create(result));
+            } catch (Exception e) {
+
+            }
         }
 
 
@@ -93,12 +144,14 @@
      */
     @Transactional(rollbackFor = Exception.class)
     public void sendAward(LuckyActivityAwardResult result, LuckyActivityAwardResultExtra extra) throws LuckyActivityAwardException, LuckyActivityAwardResultException {
+        //鍔犺閿�
+        luckyActivityAwardResultMapper.selectByPrimaryKeyForUpdate(result.getId());
         LuckyActivityAwards awards = luckyActivityAwardManager.getAwardDetail(result.getAwardId());
         if (awards == null) {
             throw new LuckyActivityAwardException(LuckyActivityAwardException.CODE_NOT_EXIST, "濂栭」涓嶅瓨鍦�");
         }
         String paramsStr = awards.getAwardParams();
-        ActivityAwardParams params = new Gson().fromJson(paramsStr, ActivityAwardParams.class);
+        ActivityAwardParams params = ActivityAwardParams.getBean(paramsStr);
         AppInfo app = appManager.getAppDetail(result.getAppId());
 
         if (params.getType() == ActivityAwardParams.ActivityAwardTypeEnum.alipayRedPackage) {
@@ -112,7 +165,6 @@
                 throw new LuckyActivityAwardResultException(LuckyActivityAwardResultException.CODE_PARAMS_NOT_ENOUGH, "鍙傛暟涓嶅畬鏁达紝缂哄皯alipayUid涓巖edPackage鍙傛暟");
             }
 
-
             String orderId = alipayInfo.getAlipayAppId() + "_award_" + result.getId();
             BigDecimal money = extra.getRedPackage();
             String alipayUid = extra.getAlipyUid();
@@ -124,15 +176,13 @@
             } catch (AlipayApiException e) {
                 throw new LuckyActivityAwardResultException(1, e.getErrMsg());
             }
+            luckyActivityAwardResultManager.setResultReceived(result.getId());
 
-            LuckyActivityAwardResult update = new LuckyActivityAwardResult();
-            update.setId(result.getId());
-            update.setState(LuckyActivityAwardResult.STATE_RECIEVED);
-            update.setStateDesc("宸查鍙�");
-            update.setUpdateTime(new Date());
         } else if (params.getType() == ActivityAwardParams.ActivityAwardTypeEnum.wxRedPackage) {
             //TODO 寰俊鍙戠孩鍖�
         }
+
+        //鍒犻櫎閫氱煡
 
 
     }
@@ -142,11 +192,7 @@
      * 鍙戞敮浠樺疂绾㈠寘
      */
     private void sendAlipayRedPackage(String outBizNo, String alipayUid, String orderTitle, BigDecimal money, AppAlipayInfoWithBLOBs alipayInfo) throws AlipayTransferException, AlipayApiException {
-        InputStream appCert = new ByteArrayInputStream(alipayInfo.getAlipayAppCertPublicKey());
-        InputStream publicCert = new ByteArrayInputStream(alipayInfo.getAlipayPublicCert());
-        InputStream rootCert = new ByteArrayInputStream(alipayInfo.getAlipayRootCert());
-
-        AlipayAppInfo appInfo = new AlipayAppInfo(alipayInfo.getAlipayAppId(), alipayInfo.getAlipayPrivateKey(), new AlipayCertInfo(appCert, publicCert, rootCert));
+        AlipayAppInfo appInfo = AlipayAppUtil.getAlipayAppInfo(alipayInfo);
         AlipayTransferInfo transferInfo = new AlipayTransferInfo();
         transferInfo.setAccount(new AlipayTransferAccount(alipayUid));
         transferInfo.setMoney(money);
@@ -159,9 +205,82 @@
     }
 
 
-    @Transactional
-    public void setResultShow(Long activityId) {
-        luckyActivityAwardResultMapper.setStateByActivityId(activityId, LuckyActivityAwardResult.STATE_NOT_RECIEVE, "绛夊緟棰嗗彇", new Date());
+    @Transactional(rollbackFor = Exception.class)
+    public void setResultShow(Long activityId) throws LuckyMQException {
+        Date date = new Date();
+        luckyActivityAwardResultMapper.setStateByActivityId(activityId, LuckyActivityAwardResult.STATE_NOT_RECIEVE, "绛夊緟棰嗗彇", date);
+        ActivityAwardResultQuery query = new ActivityAwardResultQuery();
+        query.activityId = activityId;
+        long count = luckyActivityAwardResultMapper.count(query);
+        query.count = (int) count;
+
+        List<LuckyActivityAwardResult> resultList = luckyActivityAwardResultMapper.list(query);
+        if (resultList != null && resultList.size() > 0) {
+            for (LuckyActivityAwardResult result : resultList) {
+                //娣诲姞杩囨湡棰嗗彇閫氱煡
+                LuckyMQ mq = LuckyMQFactory.createActivityDrawnOutDate(result.getId(), new Date(date.getTime() + Constant.ACTIVITY_DRAWN_RECIEVE_VALID_TIME));
+                luckyMQService.addMQ(mq);
+
+                //娣诲姞閫氱煡
+                try {
+                    CMQManager.getInstance().publishActivityDrawnMsg(ActivityDrawnMsgDTO.create(result));
+                } catch (Exception e) {
+                    logger.error("鍙戝竷娲诲姩涓鐨勮闃呮秷鎭嚭閿欙細", result.getId(), e.getMessage());
+                }
+            }
+        }
+    }
+
+    /**
+     * 浣夸腑濂栬繃鏈�
+     *
+     * @param id
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void setResultOutDate(Long id) {
+        LuckyActivityAwardResult result = luckyActivityAwardResultMapper.selectByPrimaryKeyForUpdate(id);
+        if (result.getState() != LuckyActivityAwardResult.STATE_NOT_RECIEVE) {
+            return;
+        }
+        LoggerUtil.activityJoinLogger.info("璁剧疆涓杩囨湡鏈寮�濮嬶細awardResultId-{}",id);
+
+        LuckyActivityAwardResult update = new LuckyActivityAwardResult();
+        update.setId(id);
+        update.setState(LuckyActivityAwardResult.STATE_OUT_OF_DATE);
+        update.setStateDesc("杩囨湡鏈鍙�");
+        update.setUpdateTime(new Date());
+        luckyActivityAwardResultMapper.updateByPrimaryKeySelective(update);
+
+        result.setStateDesc(update.getStateDesc());
+        result.setState(update.getState());
+        //鍙戝竷娑堟伅
+        CMQManager.getInstance().publishActivityDrawnMsg(ActivityDrawnMsgDTO.create(result));
+        LoggerUtil.activityJoinLogger.info("璁剧疆涓杩囨湡鏈鎴愬姛锛歛wardResultId-{}",id);
+    }
+
+    /**
+     * 棰嗗彇
+     *
+     * @param resultId
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void setResultReceived(Long resultId) {
+        LuckyActivityAwardResult result = luckyActivityAwardResultMapper.selectByPrimaryKeyForUpdate(resultId);
+        if (result.getState() != LuckyActivityAwardResult.STATE_NOT_RECIEVE) {
+            return;
+        }
+
+        LuckyActivityAwardResult update = new LuckyActivityAwardResult();
+        update.setId(resultId);
+        update.setState(LuckyActivityAwardResult.STATE_RECIEVED);
+        update.setStateDesc("宸查鍙�");
+        update.setUpdateTime(new Date());
+        luckyActivityAwardResultMapper.updateByPrimaryKeySelective(update);
+
+        result.setStateDesc(update.getStateDesc());
+        result.setState(update.getState());
+        //鍙戝竷娑堟伅
+        CMQManager.getInstance().publishActivityDrawnMsg(ActivityDrawnMsgDTO.create(result));
     }
 
 }

--
Gitblit v1.8.0