From a2ae9b3d890bc7fcaa34ab65e5cdaf8ccfa07c2b Mon Sep 17 00:00:00 2001 From: yujian <yujian@123.com> Date: 星期三, 13 十一月 2019 15:35:12 +0800 Subject: [PATCH] 红包弹框加入设备验证 --- fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinNewUserServiceImpl.java | 91 ++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 80 insertions(+), 11 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 index d596829..165b86b 100644 --- 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 @@ -11,14 +11,19 @@ import com.yeshi.fanli.dao.mongodb.redpack.RedPackWinNewUserDao; import com.yeshi.fanli.entity.bus.user.UserInfoExtra; +import com.yeshi.fanli.entity.push.DeviceActive; +import com.yeshi.fanli.entity.redpack.RedPackBalance; 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.push.DeviceActiveService; 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.StringUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; import com.yeshi.fanli.util.factory.RedPackDetailFactory; import com.yeshi.fanli.vo.redpack.RedPackWinDetailVO; @@ -41,11 +46,75 @@ @Resource private UserMoneyMsgNotificationService userMoneyMsgNotificationService; + @Resource + private DeviceActiveService deviceActiveService; + + + @Override + public boolean verifyHasReward(Long uid, String device) { + try { + if (StringUtil.isNullOrEmpty(device) && (uid == null || uid <= 0)) + return false; + + if (uid == null || uid <= 0) { + DeviceActive deviceActive = deviceActiveService.getFirstActiveInfo(device); + if (deviceActive == null) + return true; // 鏂拌澶囧脊鍑� + + Date nowTime = new Date(); + Date createTime = deviceActive.getCreateTime(); + int days = DateUtil.daysBetween2(createTime, nowTime); + if (days >= Constant.RED_PACK_NEW_USER_DAYS) { + return false; // 宸茬粡瓒呭嚭璁剧疆澶╂暟 + } + return true; // 鏈秴杩囨椂闂� + } + + RedPackBalance redPackBalance = redPackBalanceService.selectByPrimaryKey(uid); + if (redPackBalance != null && redPackBalance.getState() != null + && redPackBalance.getState() == RedPackBalance.STATE_LOCKED) + return false; // 绾㈠寘灏佺 + + 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; @@ -53,7 +122,7 @@ Date nowTime = new Date(); Date firstLoginTime = userInfoExtra.getFirstLoginTime(); int days = DateUtil.daysBetween2(firstLoginTime, nowTime); - if (days > Constant.RED_PACK_NEW_USER_DAYS) + if (days >= Constant.RED_PACK_NEW_USER_DAYS) return null; // 宸茬粡瓒呭嚭璁剧疆澶╂暟 RedPackWinNewUser redPackWin = redPackWinNewUserDao.getByUid(uid); @@ -73,23 +142,28 @@ BigDecimal money = null; if (redPackWin == null) { // 绗竴娆� - if (days == Constant.RED_PACK_NEW_USER_DAYS) { // 鏈�鍚庝竴澶� + if (days == Constant.RED_PACK_NEW_USER_DAYS - 1) { // 鏈�鍚庝竴澶� 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); - BigDecimal rate = new BigDecimal(randomNum/100).setScale(2); + 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) { // 鏈�鍚庝竴澶� + } else if (days == Constant.RED_PACK_NEW_USER_DAYS - 1) { // 鏈�鍚庝竴澶� 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 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); + // 4銆佸鍔犵孩鍖� + redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createNewUserReward(uid, days, money)); + + // 鎻掑叆棰嗗彇璁板綍 + int num = 1; if (redPackWin == null) { redPackWin = new RedPackWinNewUser(); redPackWin.setNum(1); @@ -99,16 +173,11 @@ 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("鏂颁汉绾㈠寘"); -- Gitblit v1.8.0