From e65037e672ecab852e2a6c5b242cdadfd1a58b33 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 25 十一月 2019 09:30:24 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java | 210 +++++++++++++++++++++++++++------------------------- 1 files changed, 110 insertions(+), 100 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java index b7710be..2f4db5e 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java @@ -18,6 +18,7 @@ import com.yeshi.fanli.entity.bus.user.UserActiveLog; import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo; import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.redpack.RedPackWinInvite; import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum; import com.yeshi.fanli.service.inter.count.HongBaoV2CountService; @@ -36,6 +37,7 @@ import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.VersionUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; +import com.yeshi.fanli.util.annotation.redpack.RedPackGetVersionLimit; import com.yeshi.fanli.util.factory.RedPackDetailFactory; @Service @@ -43,103 +45,103 @@ @Resource private RedPackWinInviteMapper redPackWinInviteMapper; - + @Resource private RedPackConfigService redPackConfigService; - + @Resource private RedPackBalanceService redPackBalanceService; @Resource - private CommonOrderService commonOrderService; - + private CommonOrderService commonOrderService; + @Resource private ThreeSaleSerivce threeSaleSerivce; - + @Resource private UserMoneyMsgNotificationService userMoneyMsgNotificationService; - - @Resource + + @Resource private UserInfoService userInfoService; - - @Resource + + @Resource private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; - - @Resource + + @Resource private IntegralTaskRecordService integralTaskRecordService; - + @Resource private UserActiveLogService userActiveLogService; - + @Resource private HongBaoV2CountService hongBaoV2CountService; - - + @Override public List<RedPackWinInvite> getRewardList(int start, int count, Long uid) { return redPackWinInviteMapper.getRewardList(start, count, uid); } - - + @Override public Long countRewardRecord(Long uid) { return redPackWinInviteMapper.countRewardRecord(uid); } - + @Override public BigDecimal getRewardMoney(Long uid) { return redPackWinInviteMapper.getRewardMoney(uid); } - + @Override @RequestSerializableByKeyService(key = "#teamUid") @Transactional(rollbackFor = Exception.class) - public void inviteSucceedReward(Long teamUid) throws Exception{ + public void inviteSucceedReward(Long teamUid) throws Exception { // 鏄惁鍦ㄤ笂绾夸箣鍚庣殑閭�璇峰叧绯� ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid, Constant.RED_PACK_REWARD_TIME); if (threeSale == null) return; - + // 涓婄骇id Long bossId = threeSale.getBoss().getId(); UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId); if (activeLog == null) return; - + // 灏忎簬2.0.2鐗堟湰涓嶅鍔� if (!VersionUtil.greaterThan_2_1("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android", activeLog.getVersionCode())) return; // 鍚屼竴闃熷憳濂栧姳涓�娆� - int totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.oneStageReward.name()); + int totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid, + RedPackWinInviteTypeEnum.oneStageReward.name()); if (totalReward > 0) return; - + // 寤虹珛閭�璇峰叧绯绘椂闂磋秴杩�20澶� Long succeedTime = threeSale.getSucceedTime(); Date endDate = DateUtil.plusDayDate(Constant.ONE_STAGE_LIMIT_DAYS, new Date(succeedTime)); if (endDate.getTime() < java.lang.System.currentTimeMillis()) return; - + // 缁戝畾鐢佃瘽鍙风爜鍜屽井淇� UserInfo userInfo = userInfoService.selectByPKey(teamUid); - if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getPhone()) || StringUtil.isNullOrEmpty(userInfo.getWxOpenId())) + if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getPhone()) + || StringUtil.isNullOrEmpty(userInfo.getWxOpenId())) return; - + // 鎺堟潈娣樺疂 UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(teamUid); if (taoBaoInfo == null || StringUtil.isNullOrEmpty(taoBaoInfo.getTaoBaoUid())) return; - + // 濂藉弸浜х敓涓�绗旇繑鍒╄鍗曪紙鑷喘锛変笖 24 灏忔椂鍐呬笉澶辨晥锛� long validOrder = commonOrderService.count24HValidOrderByUid(teamUid, new Date(succeedTime)); - if (validOrder < 1) + if (validOrder < 1) return; - + // 濂栧姳閲戦 BigDecimal money = Constant.ONE_STAGE_MONEY; - + // 鑾峰緱绾㈠寘 RedPackWinInvite winInvite = new RedPackWinInvite(); winInvite.setCreateTime(new Date()); @@ -148,92 +150,93 @@ winInvite.setUid(bossId); winInvite.setTeamUid(teamUid); winInvite.setMoney(money); + winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.oneStageReward.name() + ":" + teamUid)); redPackWinInviteMapper.insertSelective(winInvite); - + // 澧炲姞绾㈠寘 redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createInvite(winInvite)); - + // 娑堟伅 MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO(); dto.setNickName(userInfo.getNickName()); dto.setPortrait(userInfo.getPortrait()); - userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackOneStageReward, - money, "闃熷憳锛堝ソ鍙嬶級瀹屾垚绗竴闃舵", new Gson().toJson(dto)); + userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackOneStageReward, money, + "闃熷憳锛堝ソ鍙嬶級瀹屾垚绗竴闃舵", new Gson().toJson(dto)); } - - + @RequestSerializableByKeyService(key = "#uid") + @RedPackGetVersionLimit(uid = "#uid") @Transactional(rollbackFor = Exception.class) @Override - public void orderArriveReward(Long uid, Integer source, String orderNo) throws Exception { + public void inviteOrderArriveReward(Long uid, Integer source, String orderNo) throws Exception { if (uid == null || source == null || StringUtil.isNullOrEmpty(orderNo)) return; - - ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(uid, Constant.RED_PACK_REWARD_TIME); - if(threeSale == null) + + // 鑾峰彇璁㈠崟瀵瑰簲涓嬪崟浜� + List<CommonOrder> list = commonOrderService.listBySourceTypeAndOrderId(source, orderNo); + if (list == null || list.isEmpty()) return; - bossReward(threeSale.getBoss().getId(), uid, source, orderNo); - } - - - /** - * 涓婄骇濂栧姳 - * @param uid - * @param teamUid - * @param source - * @param orderNo - * @throws Exception - */ - @Transactional - private void bossReward(Long bossId, Long teamUid, Integer source, String orderNo) throws Exception { - UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId); - if (activeLog == null) + + CommonOrder commonOrder = list.get(0); + if (commonOrder == null || commonOrder.getUserInfo() == null) return; - - // 灏忎簬2.0.2鐗堟湰涓嶅鍔� - if (!VersionUtil.greaterThan_2_1("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android", - activeLog.getVersionCode())) + + // 涓嬪崟浜篿d + Long teamUid = commonOrder.getUserInfo().getId(); + if (teamUid == null) return; - + + // 楠岃瘉涓婁笅绾у叧绯� + ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid, Constant.RED_PACK_REWARD_TIME); + if (threeSale == null || threeSale.getBoss().getId().longValue() != uid.longValue()) + return; + // 绗竴闃舵(楠岃瘉) - RedPackWinInvite oneStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.oneStageReward.name()); + RedPackWinInvite oneStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(uid, teamUid, + RedPackWinInviteTypeEnum.oneStageReward.name()); if (oneStage == null) return; - + // 绗簩闃舵(楠岃瘉) - RedPackWinInvite twoStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.twoStageReward.name()); + RedPackWinInvite twoStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(uid, teamUid, + RedPackWinInviteTypeEnum.twoStageReward.name()); if (twoStage == null) { - twoStageRewardToBoss(bossId, teamUid, oneStage.getCreateTime(), source, orderNo); + twoStageRewardToBoss(uid, teamUid, oneStage.getCreateTime(), source, orderNo); return; - } - + } + // 绗笁闃舵 - threeStageRewardToBoss(bossId, teamUid, twoStage.getCreateTime(), source, orderNo); + threeStageRewardToBoss(uid, teamUid, twoStage.getCreateTime(), source, orderNo); } - + /** - * 涓婄骇濂栧姳--绗簩闃舵 + * 涓婄骇濂栧姳--绗簩闃舵 + * * @param uid * @param source * @param orderNo * @param bossId */ @Transactional - private void twoStageRewardToBoss(Long bossId, Long teamUid, Date oneStageTime, Integer source, String orderNo) throws Exception{ - // 绗竴闃舵瀹屾垚涔嬪悗鐨�90澶╁唴 ; 闃熷弸浜х敓鐨勮鍗曚腑锛堣嚜璐�+鍒嗕韩锛夛紝閭�璇蜂汉绱浜х敓鈮�1 鍏冨閲� + private void twoStageRewardToBoss(Long bossId, Long teamUid, Date oneStageTime, Integer source, String orderNo) + throws Exception { + // 绗竴闃舵瀹屾垚涔嬪悗鐨�90澶╁唴 ; 闃熷弸浜х敓鐨勮鍗曚腑锛堣嚜璐�+鍒嗕韩锛夛紝閭�璇蜂汉绱浜х敓鈮�1 鍏冨閲� Date endDate = DateUtil.plusDayDate(Constant.TWO_STAGE_LIMIT_DAYS, oneStageTime); - BigDecimal rewardMoney = hongBaoV2CountService.getShareRewardByTeamUid(bossId, teamUid, endDate); + + // 缁熻璁㈠崟濂栭噾 锛堚�滃ソ鍙嬭嚜璐�濆拰鈥滃ソ鍙嬪垎浜�濓級 + BigDecimal rewardMoney = hongBaoV2CountService.getOrderRewardByTeamUid(bossId, teamUid, endDate); if (rewardMoney == null || rewardMoney.compareTo(Constant.TWO_STAGE_ORDER_REWARD_MIN) < 0) return; - + // 璁$畻濂栧姳 BigDecimal money = Constant.TWO_STAGE_MONEY_MIN; long total = redPackWinInviteMapper.countByUidAndType(bossId, RedPackWinInviteTypeEnum.twoStageReward.name()); if (total > 0 && total < Constant.TWO_STAGE_MONEY_ADD_NUM) { long num = total % Constant.TWO_STAGE_MONEY_ADD_NUM; - money = MoneyBigDecimalUtil.add(money, MoneyBigDecimalUtil.mul(Constant.TWO_STAGE_MONEY_ADD, new BigDecimal(num))); + money = MoneyBigDecimalUtil.add(money, + MoneyBigDecimalUtil.mul(Constant.TWO_STAGE_MONEY_ADD, new BigDecimal(num))); } - + // 鑾峰緱绾㈠寘璁板綍 RedPackWinInvite winInvite = new RedPackWinInvite(); winInvite.setUid(bossId); @@ -244,59 +247,64 @@ winInvite.setCreateTime(new Date()); winInvite.setUpdateTime(new Date()); winInvite.setType(RedPackWinInviteTypeEnum.twoStageReward); + winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.twoStageReward.name() + ":" + teamUid)); redPackWinInviteMapper.insertSelective(winInvite); - + // 4銆佸鍔犵孩鍖� redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createIncreaseReward(winInvite)); - + // 5銆佹秷鎭� UserInfo userInfo = userInfoService.selectByPKey(teamUid); MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO(); dto.setNickName(userInfo.getNickName()); dto.setPortrait(userInfo.getPortrait()); - userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackTwoStageReward, - money, "闃熷憳锛堝ソ鍙嬶級瀹屾垚绗簩闃舵", new Gson().toJson(dto)); + userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackTwoStageReward, money, + "闃熷憳锛堝ソ鍙嬶級瀹屾垚绗簩闃舵", new Gson().toJson(dto)); } - /** * 涓婄骇濂栧姳锛氭鏈堝紑濮嬩骇鐢熸弧瓒虫潯浠剁殑鍒嗕韩璁㈠崟锛堝垎浜鍗曞疄浠樻鈮�10鍏冿級 杩炵画15涓湀 鑷劧鏈堣幏寰楋紙宸插埌璐︼級姣忔湀鏈�楂�2鍏� + * * @param uid * @param source * @param orderNo * @param bossId */ @Transactional - private void threeStageRewardToBoss(Long bossId, Long teamUid, Date twoStageTime, Integer source, String orderNo) throws Exception{ + private void threeStageRewardToBoss(Long bossId, Long teamUid, Date twoStageTime, Integer source, String orderNo) + throws Exception { // 浜屻�佷笁闃舵涓嶅彲鍚屾湀 if (DateUtil.isSameMonth(twoStageTime, new Date())) return; - + // 鏄惁宸查鍙栨湰鏈� - RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUidAndTypeMonth(bossId, teamUid, RedPackWinInviteTypeEnum.threeStageReward.name()); + RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUidAndTypeMonth(bossId, teamUid, + RedPackWinInviteTypeEnum.threeStageReward.name()); if (threeStage != null) return; - - // 宸插鍔辨鏁� - int totalNum = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.threeStageReward.name()); + + // 宸插鍔辨鏁� + int totalNum = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid, + RedPackWinInviteTypeEnum.threeStageReward.name()); if (totalNum >= Constant.THREE_STAGE_REWARD_MONTH) return; - + // 鏄惁宸查棿鏂� int monthSpace = DateUtil.getMonthSpace(twoStageTime, new Date()); - if (monthSpace != totalNum + 1) + if (monthSpace != totalNum + 1) return; - - // 姣忔湀缁欎綘绱浜х敓鈮�2 鍏� - BigDecimal rewardMoney = hongBaoV2CountService.getShareRewardByTeamUidLastMonth(bossId, teamUid); + + // 缁熻鏈湀鑾峰緱濂栭噾 锛堚�滃ソ鍙嬭嚜璐�濆拰鈥滃ソ鍙嬪垎浜�濓級 + BigDecimal rewardMoney = hongBaoV2CountService.getOrderRewardByTeamUidTheMonth(bossId, teamUid); if (rewardMoney == null || rewardMoney.compareTo(Constant.THREE_STAGE_ORDER_REWARD_MIN) < 0) return; - + // 璁$畻闅忔満濂栧姳 - double randomMoney = Constant.THREE_STAGE_RANDOM_MIN + Math.random() * (Constant.THREE_STAGE_RANDOM_MAX - Constant.THREE_STAGE_RANDOM_MIN); + double randomMoney = Constant.THREE_STAGE_RANDOM_MIN + + Math.random() * (Constant.THREE_STAGE_RANDOM_MAX - Constant.THREE_STAGE_RANDOM_MIN); // 淇濈暀涓や綅灏忔暟 BigDecimal money = new BigDecimal(randomMoney).setScale(2, BigDecimal.ROUND_HALF_UP); - + // 3銆佽幏寰楃孩鍖呰褰� RedPackWinInvite winInvite = new RedPackWinInvite(); winInvite.setCreateTime(new Date()); @@ -307,18 +315,20 @@ winInvite.setMoney(money); winInvite.setSource(source); winInvite.setOrderNo(orderNo); + winInvite.setIdentifyCode( + StringUtil.Md5(RedPackWinInviteTypeEnum.threeStageReward.name() + ":" + teamUid + "-" + monthSpace)); redPackWinInviteMapper.insertSelective(winInvite); - + // 4銆佸鍔犵孩鍖� redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createSeriesReward(winInvite)); - + // 娑堟伅 UserInfo userInfo = userInfoService.selectByPKey(teamUid); MsgRedPackTeamRewardContentDTO dto = new MsgRedPackTeamRewardContentDTO(); dto.setNickName(userInfo.getNickName()); dto.setPortrait(userInfo.getPortrait()); userMoneyMsgNotificationService.teamRedPackRewardMsg(bossId, MsgTypeMoneyTypeEnum.redPackThreeStageReward, - money, "闃熷憳锛堝ソ鍙嬶級瀹屾垚绗笁闃舵杩炵画[绗�"+ monthSpace + "涓湀]", new Gson().toJson(dto)); + money, "闃熷憳锛堝ソ鍙嬶級瀹屾垚绗笁闃舵杩炵画[绗�" + monthSpace + "涓湀]", new Gson().toJson(dto)); } - + } -- Gitblit v1.8.0