From 486e22c57ca8a1e2dc6877b539e2f3add67250f1 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 23 十一月 2019 18:28:00 +0800 Subject: [PATCH] 冲突解决 --- fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java | 326 ++++++++++++++++++++++++++---------------------------- 1 files changed, 156 insertions(+), 170 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 2af35c3..b7710be 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 @@ -12,15 +12,15 @@ import com.google.gson.Gson; import com.yeshi.fanli.dao.mybatis.redpack.RedPackWinInviteMapper; -import com.yeshi.fanli.dto.msg.MsgRedPackAddContentDTO; +import com.yeshi.fanli.dto.msg.MsgRedPackTeamRewardContentDTO; import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum; import com.yeshi.fanli.entity.bus.user.ThreeSale; 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; import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService; @@ -37,7 +37,6 @@ import com.yeshi.fanli.util.VersionUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; import com.yeshi.fanli.util.factory.RedPackDetailFactory; -import com.yeshi.fanli.vo.order.CommonOrderVO; @Service public class RedPackWinInviteServiceImpl implements RedPackWinInviteService { @@ -72,6 +71,9 @@ @Resource private UserActiveLogService userActiveLogService; + @Resource + private HongBaoV2CountService hongBaoV2CountService; + @Override public List<RedPackWinInvite> getRewardList(int start, int count, Long uid) { @@ -89,6 +91,76 @@ return redPackWinInviteMapper.getRewardMoney(uid); } + @Override + @RequestSerializableByKeyService(key = "#teamUid") + @Transactional(rollbackFor = Exception.class) + 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()); + 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())) + 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) + return; + + // 濂栧姳閲戦 + BigDecimal money = Constant.ONE_STAGE_MONEY; + + // 鑾峰緱绾㈠寘 + RedPackWinInvite winInvite = new RedPackWinInvite(); + winInvite.setCreateTime(new Date()); + winInvite.setUpdateTime(new Date()); + winInvite.setType(RedPackWinInviteTypeEnum.oneStageReward); + winInvite.setUid(bossId); + winInvite.setTeamUid(teamUid); + winInvite.setMoney(money); + 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)); + } + @RequestSerializableByKeyService(key = "#uid") @Transactional(rollbackFor = Exception.class) @@ -100,19 +172,7 @@ ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(uid, Constant.RED_PACK_REWARD_TIME); if(threeSale == null) return; - - 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; - - // 濂栧姳涓婄骇 - bossReward(bossId, uid, source, orderNo); + bossReward(threeSale.getBoss().getId(), uid, source, orderNo); } @@ -125,68 +185,77 @@ * @throws Exception */ @Transactional - private void bossReward(Long uid, Long teamUid, Integer source, String orderNo) throws Exception { - firstSharedOrderRewardToBoss(uid, teamUid, source, orderNo); - firstSharedOrderRewardTheMonthToBoss(uid, teamUid, source, orderNo); + private void bossReward(Long bossId, Long teamUid, Integer source, String orderNo) throws Exception { + 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; + + // 绗竴闃舵(楠岃瘉) + RedPackWinInvite oneStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.oneStageReward.name()); + if (oneStage == null) + return; + + // 绗簩闃舵(楠岃瘉) + RedPackWinInvite twoStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.twoStageReward.name()); + if (twoStage == null) { + twoStageRewardToBoss(bossId, teamUid, oneStage.getCreateTime(), source, orderNo); + return; + } + + // 绗笁闃舵 + threeStageRewardToBoss(bossId, teamUid, twoStage.getCreateTime(), source, orderNo); } /** - * 涓婄骇濂栧姳锛氳閭�璇蜂汉瀹屾垚棣栫瑪鍒嗕韩璁㈠崟 锛堝凡鍒拌处锛� + * 涓婄骇濂栧姳--绗簩闃舵 * @param uid * @param source * @param orderNo * @param bossId */ @Transactional - private void firstSharedOrderRewardToBoss(Long uid, Long inviteeUid, Integer source, String orderNo) throws Exception{ - // 1銆佸悓涓�闃熷憳濂栧姳涓�娆� - long totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(uid, inviteeUid, RedPackWinInviteTypeEnum.firstSharedOrder.name()); - if (totalReward > 0) + 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); + if (rewardMoney == null || rewardMoney.compareTo(Constant.TWO_STAGE_ORDER_REWARD_MIN) < 0) return; - // 2銆佹槸鍚︿笅绾х殑棣栦釜鍒嗕韩璁㈠崟 - CommonOrder commonOrder = commonOrderService.getFirstShareOrderByUid(inviteeUid); - if (commonOrder == null || !orderNo.equals(commonOrder.getOrderNo()) || source != commonOrder.getSourceType()) - return ; - - // 3銆佸埌璐﹀鍔遍噾棰� 鏄惁澶т簬5 - BigDecimal totalRewardMoney = commonOrderService.getTotalRewardMoneyByOrderNoAndSourceType(orderNo, source); - if (totalRewardMoney == null || totalRewardMoney.compareTo(Constant.RED_PACK_ORDER_REWARD_MIN) < 0) - return; - - // 2銆佸垽鏂槸绗嚑涓汉 - long total = redPackWinInviteMapper.countByUidAndType(uid, RedPackWinInviteTypeEnum.firstSharedOrder.name()); - - // 璁$畻搴斿鍔犵孩鍖呴噾棰� - BigDecimal money = new BigDecimal(redPackConfigService.getValueByKey("first_shared_order")); - long num = total % 9; - if (num > 0) { - BigDecimal addMoney = new BigDecimal(redPackConfigService.getValueByKey("first_shared_order_add")); - money = MoneyBigDecimalUtil.add(money, MoneyBigDecimalUtil.mul(addMoney, new BigDecimal(num))); + // 璁$畻濂栧姳 + 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))); } - // 3銆佽幏寰楃孩鍖呰褰� + // 鑾峰緱绾㈠寘璁板綍 RedPackWinInvite winInvite = new RedPackWinInvite(); - winInvite.setCreateTime(new Date()); - winInvite.setUpdateTime(new Date()); - winInvite.setType(RedPackWinInviteTypeEnum.firstSharedOrder); - winInvite.setUid(uid); - winInvite.setTeamUid(inviteeUid); + winInvite.setUid(bossId); + winInvite.setTeamUid(teamUid); winInvite.setMoney(money); winInvite.setSource(source); winInvite.setOrderNo(orderNo); + winInvite.setCreateTime(new Date()); + winInvite.setUpdateTime(new Date()); + winInvite.setType(RedPackWinInviteTypeEnum.twoStageReward); redPackWinInviteMapper.insertSelective(winInvite); // 4銆佸鍔犵孩鍖� - redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createIncreaseReward(winInvite)); + redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createIncreaseReward(winInvite)); // 5銆佹秷鎭� - MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO(); - dto.setTitle("绾㈠寘澧炲姞"); - dto.setMoney("楼" + money.setScale(2)); - dto.setBalance("楼" + redPackBalanceService.getBalance(uid).setScale(2)); - userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackFirstSharedOrder, - new Gson().toJson(dto), "璇峰埌鈥滄垜鐨�-绾㈠寘鈥濅腑鏌ョ湅"); + 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)); } @@ -198,31 +267,33 @@ * @param bossId */ @Transactional - private void firstSharedOrderRewardTheMonthToBoss(Long uid, Long inviteeUid, Integer source, String orderNo) throws Exception{ - - // 1銆佸垽鏂槸鍚︽槸涓婁釜鏈堥鍗� - CommonOrderVO order = commonOrderService.firstValidOrderLastMonthByUidAndType(inviteeUid, 2); - if (order == null || source != order.getSourceType() || !orderNo.equals(order.getOrderNo()) || - order.getAccountTime() == null) + private void threeStageRewardToBoss(Long bossId, Long teamUid, Date twoStageTime, Integer source, String orderNo) throws Exception{ + // 浜屻�佷笁闃舵涓嶅彲鍚屾湀 + if (DateUtil.isSameMonth(twoStageTime, new Date())) return; - // 鍒嗕韩璁㈠崟瀹炰粯娆锯墺10鍏� - if (order.getPayment() == null || order.getPayment().compareTo(Constant.RED_PACK_PAY_MIN) < 0) + // 鏄惁宸查鍙栨湰鏈� + RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUidAndTypeMonth(bossId, teamUid, RedPackWinInviteTypeEnum.threeStageReward.name()); + if (threeStage != null) + return; + + // 宸插鍔辨鏁� + int totalNum = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.threeStageReward.name()); + if (totalNum >= Constant.THREE_STAGE_REWARD_MONTH) return; - // 2銆佹槸鍚︿笅绾х殑棣栦釜鍒嗕韩璁㈠崟 -// CommonOrder firstorder = commonOrderService.getFirstShareOrderByUid(inviteeUid); -// if (firstorder == null || (orderNo.equals(firstorder.getOrderNo()) && source == firstorder.getSourceType())); -// return; + // 鏄惁宸查棿鏂� + int monthSpace = DateUtil.getMonthSpace(twoStageTime, new Date()); + if (monthSpace != totalNum + 1) + return; - // 绗竴娆″埌璐︾殑娆℃湀寮�濮嬭繛缁�15涓湀 鑷劧鏈堣幏寰楋紙宸插埌璐︼級 -// int monthSpace = DateUtil.getMonthSpace(order.getThirdCreateTime(), firstorder.getThirdCreateTime()); -// if (monthSpace == 0 || monthSpace > Constant.RED_PACK_REWARD_MONTH) -// return; - + // 姣忔湀缁欎綘绱浜х敓鈮�2 鍏� + BigDecimal rewardMoney = hongBaoV2CountService.getShareRewardByTeamUidLastMonth(bossId, teamUid); + if (rewardMoney == null || rewardMoney.compareTo(Constant.THREE_STAGE_ORDER_REWARD_MIN) < 0) + return; // 璁$畻闅忔満濂栧姳 - double randomMoney = Constant.RED_PACK_RANDOM_MIN + Math.random() * (Constant.RED_PACK_RANDOM_MAX - Constant.RED_PACK_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); @@ -230,109 +301,24 @@ RedPackWinInvite winInvite = new RedPackWinInvite(); winInvite.setCreateTime(new Date()); winInvite.setUpdateTime(new Date()); - winInvite.setType(RedPackWinInviteTypeEnum.monthSharedOrder); - winInvite.setUid(uid); - winInvite.setTeamUid(inviteeUid); + winInvite.setType(RedPackWinInviteTypeEnum.threeStageReward); + winInvite.setUid(bossId); + winInvite.setTeamUid(teamUid); winInvite.setMoney(money); winInvite.setSource(source); winInvite.setOrderNo(orderNo); redPackWinInviteMapper.insertSelective(winInvite); // 4銆佸鍔犵孩鍖� - redPackBalanceService.addRedPack(uid, money, RedPackDetailFactory.createSeriesReward(winInvite)); + redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createSeriesReward(winInvite)); - //娑堟伅 - MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO(); - dto.setTitle("绾㈠寘澧炲姞"); - dto.setMoney("楼" + money.setScale(2)); - dto.setBalance("楼" + redPackBalanceService.getBalance(uid).setScale(2)); - userMoneyMsgNotificationService.redPackMsg(uid, MsgTypeMoneyTypeEnum.redPackMonthSharedOrder, - new Gson().toJson(dto), "璇峰埌鈥滄垜鐨�-绾㈠寘鈥濅腑鏌ョ湅"); + // 娑堟伅 + 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)); } - - - @Override - @RequestSerializableByKeyService(key = "#uid") - @Transactional(rollbackFor = Exception.class) - public void inviteSucceedReward(Long uid) throws Exception{ - // 楠岃瘉鏄惁瀛樺湪涓婄骇 - ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(uid, 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; - - // 鍚屼竴闃熷憳濂栧姳涓�娆� - long totalReward = redPackWinInviteMapper.countByUidAndTeamUidAndType(bossId, uid, RedPackWinInviteTypeEnum.inviteSucceed.name()); - if (totalReward > 0) - return; - - // 1銆佺粦瀹氱數璇濆彿鐮� - UserInfo userInfo = userInfoService.selectByPKey(uid); - if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getPhone())) - return; - - // 2銆佹巿鏉冩窐瀹� - UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid); - if (taoBaoInfo == null || StringUtil.isNullOrEmpty(taoBaoInfo.getTaoBaoUid())) - return; - - - boolean finishTask = false; - // 3.1銆佷骇鐢熶换鎰忔湁鏁堣鍗曪紙鏃犻渶鍒拌处锛� - CommonOrder commonOrder = commonOrderService.selectLatestValidByUid(uid); - if (commonOrder != null) - finishTask = true; - - // 3.2銆佸崟浣嶆椂闂寸被绱浜х敓鈮�200閲戝竵 - if (!finishTask) { - long totalGoldCoin = integralTaskRecordService.getTotalGoldCoinByUid(uid); - if (totalGoldCoin >= Constant.RED_PACK_GOLD_COIN) - finishTask = true; - } - - // 3.3銆佹垚鍔熼個璇蜂竴涓ソ鍙� - if (!finishTask) { - long countTeam = threeSaleSerivce.countSuccessFirstTeam(uid); - if (countTeam >= 1) - finishTask = true; - } - - if (finishTask) { - // 濂栧姳閲戦 - BigDecimal money = new BigDecimal(redPackConfigService.getValueByKey("invite_succeed")); - - // 鑾峰緱绾㈠寘璁板綍 - RedPackWinInvite winInvite = new RedPackWinInvite(); - winInvite.setCreateTime(new Date()); - winInvite.setUpdateTime(new Date()); - winInvite.setType(RedPackWinInviteTypeEnum.inviteSucceed); - winInvite.setUid(bossId); - winInvite.setTeamUid(uid); - winInvite.setMoney(money); - redPackWinInviteMapper.insertSelective(winInvite); - - // 澧炲姞绾㈠寘 - redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createInvite(winInvite)); - - // 娑堟伅 - MsgRedPackAddContentDTO dto = new MsgRedPackAddContentDTO(); - dto.setTitle("绾㈠寘澧炲姞"); - dto.setMoney("楼" + money.setScale(2)); - dto.setBalance("楼" + redPackBalanceService.getBalance(bossId).setScale(2)); - userMoneyMsgNotificationService.redPackMsg(bossId, MsgTypeMoneyTypeEnum.redPackInviteSucceed, - new Gson().toJson(dto), "璇峰埌鈥滄垜鐨�-绾㈠寘鈥濅腑鏌ョ湅"); - } - } - } -- Gitblit v1.8.0