From 4d7db6fd66f5b2c9cae9954e46314f9711ce1e8f Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 06 十一月 2019 18:51:40 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 168 insertions(+), 0 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java new file mode 100644 index 0000000..c03afe6 --- /dev/null +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java @@ -0,0 +1,168 @@ +package com.yeshi.fanli.service.impl.redpack; + +import java.math.BigDecimal; +import java.util.Date; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.yeshi.utils.DateUtil; + +import com.yeshi.fanli.dao.mongodb.redpack.RedPackWinNewUserDao; +import com.yeshi.fanli.entity.bus.user.UserInfoExtra; +import com.yeshi.fanli.entity.redpack.RedPackWinNewUser; +import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService; +import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService; +import com.yeshi.fanli.service.inter.redpack.RedPackConfigService; +import com.yeshi.fanli.service.inter.redpack.RedPackWinNewUserService; +import com.yeshi.fanli.service.inter.user.UserInfoExtraService; +import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.MoneyBigDecimalUtil; +import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; +import com.yeshi.fanli.util.factory.RedPackDetailFactory; +import com.yeshi.fanli.vo.redpack.RedPackWinDetailVO; + +@Service +public class RedPackWinNewUserServiceImpl implements RedPackWinNewUserService { + + @Resource + private RedPackWinNewUserDao redPackWinNewUserDao; + + @Resource + private RedPackConfigService redPackConfigService; + + @Resource + private UserInfoExtraService userInfoExtraService; + + @Resource + private RedPackBalanceService redPackBalanceService; + + @Resource + private UserMoneyMsgNotificationService userMoneyMsgNotificationService; + + + @Override + public boolean verifyHasReward(Long uid) { + try { + if (uid == null || uid <= 0) + return true; // 鏈櫥褰曞脊鍑� + + UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); + if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null) + return false; + + Date nowTime = new Date(); + Date firstLoginTime = userInfoExtra.getFirstLoginTime(); + int days = DateUtil.daysBetween2(firstLoginTime, nowTime); + if (days > Constant.RED_PACK_NEW_USER_DAYS) + return false; // 宸茬粡瓒呭嚭璁剧疆澶╂暟 + + RedPackWinNewUser redPackWin = redPackWinNewUserDao.getByUid(uid); + if (redPackWin != null) { + if (redPackWin.getMoney().compareTo(Constant.RED_PACK_NEW_USER_MONEY) >= 0) + return false; // 宸查鍙栧畬 + + Date updateTime = redPackWin.getUpdateTime(); + int daysNum = DateUtil.daysBetween2(updateTime, nowTime); + if (daysNum == 0) + return false; // 浠婃棩宸查鍙� + + Integer num = redPackWin.getNum(); + if (num >= Constant.RED_PACK_NEW_USER_DAYS) + return false; // 棰嗗彇娆℃暟瓒呴檺 + } + return true; + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + return false; + } + + + + @RequestSerializableByKeyService(key = "#uid") + @Transactional(rollbackFor = Exception.class) + @Override + public RedPackWinDetailVO receiveReward(Long uid) throws Exception { + if (uid == null || uid <= 0) + return null; // 鏈櫥褰曞脊鍑� + + UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); + if (userInfoExtra == null || userInfoExtra.getFirstLoginTime() == null) + return null; + + Date nowTime = new Date(); + Date firstLoginTime = userInfoExtra.getFirstLoginTime(); + int days = DateUtil.daysBetween2(firstLoginTime, nowTime); + if (days > Constant.RED_PACK_NEW_USER_DAYS) + return null; // 宸茬粡瓒呭嚭璁剧疆澶╂暟 + + RedPackWinNewUser redPackWin = redPackWinNewUserDao.getByUid(uid); + if (redPackWin != null) { + if (redPackWin.getMoney().compareTo(Constant.RED_PACK_NEW_USER_MONEY) >= 0) + return null; // 宸查鍙栧畬 + + Date updateTime = redPackWin.getUpdateTime(); + int daysNum = DateUtil.daysBetween2(updateTime, nowTime); + if (daysNum == 0) + return null; // 浠婃棩宸查鍙� + + Integer num = redPackWin.getNum(); + if (num >= Constant.RED_PACK_NEW_USER_DAYS) + return null; // 棰嗗彇娆℃暟瓒呴檺 + } + + BigDecimal money = null; + if (redPackWin == null) { // 绗竴娆� + if (days == Constant.RED_PACK_NEW_USER_DAYS) { // 鏈�鍚庝竴澶� + money = Constant.RED_PACK_NEW_USER_MONEY; + } else { // 璁$畻闅忔満濂栧姳 + double randomNum = Constant.RED_PACK_NEW_USER_MIN + Math.random() * (Constant.RED_PACK_NEW_USER_MAX - Constant.RED_PACK_NEW_USER_MIN); + randomNum = randomNum/100; + BigDecimal rate = new BigDecimal(randomNum).setScale(2, BigDecimal.ROUND_DOWN); + money = MoneyBigDecimalUtil.mul(Constant.RED_PACK_NEW_USER_MONEY,rate); + } + } else if (days == Constant.RED_PACK_NEW_USER_DAYS) { // 鏈�鍚庝竴澶� + money = MoneyBigDecimalUtil.sub(Constant.RED_PACK_NEW_USER_MONEY, redPackWin.getMoney()); + } else { // 璁$畻鍓╀綑闅忔満濂栧姳 10%-25% + double randomNum = 10 + Math.random() * (20 - 10); + BigDecimal rate = new BigDecimal(randomNum/100).setScale(2, BigDecimal.ROUND_DOWN); + money = MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.sub(Constant.RED_PACK_NEW_USER_MONEY,redPackWin.getMoney()),rate); + } + + int num = 1; + money = money.setScale(2); + if (redPackWin == null) { + redPackWin = new RedPackWinNewUser(); + redPackWin.setNum(1); + redPackWin.setMoney(money); + redPackWin.setUid(uid.toString()); + redPackWin.setCreateTime(nowTime); + redPackWin.setUpdateTime(nowTime); + } else { + num = redPackWin.getNum() + 1; + redPackWin = new RedPackWinNewUser(); + redPackWin.setUid(uid.toString()); + redPackWin.setNum(num); + redPackWin.setMoney(MoneyBigDecimalUtil.add(money, redPackWin.getMoney())); + redPackWin.setUpdateTime(nowTime); + } + redPackWinNewUserDao.save(redPackWin); + + // 4銆佸鍔犵孩鍖� + redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createNewUserReward(uid,num, money)); + + RedPackWinDetailVO winDetailVO = new RedPackWinDetailVO(); + winDetailVO.setTitle("鏂颁汉绾㈠寘"); + winDetailVO.setBless("鎭枩浣狅紒宸查" + num + "/" + Constant.RED_PACK_NEW_USER_DAYS + "娆�"); + winDetailVO.setMoney(money.toString()); + winDetailVO.setDesc("棰嗗彇鎴愬姛锛屽凡瀛樺叆鈥滄垜鐨�-绾㈠寘鈥�"); + winDetailVO.setTips(redPackConfigService.getValueByKey("new_user_win_tips")); + return winDetailVO; + } + + + +} -- Gitblit v1.8.0