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