From dc5be7d38446f70e6ff86df311119c32b41fe7f8 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期六, 28 十一月 2020 16:37:05 +0800 Subject: [PATCH] 大淘客搜索接口升级 --- fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java | 221 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 199 insertions(+), 22 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 791a108..6f84731 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 @@ -19,8 +19,10 @@ 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.bus.user.UserInfoRegister; import com.yeshi.fanli.entity.bus.user.UserSystemCoupon; import com.yeshi.fanli.entity.order.CommonOrder; +import com.yeshi.fanli.entity.redpack.RedPackDetail; import com.yeshi.fanli.entity.redpack.RedPackWinInvite; import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum; import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum; @@ -33,15 +35,17 @@ import com.yeshi.fanli.service.inter.redpack.RedPackConfigService; import com.yeshi.fanli.service.inter.redpack.RedPackWinInviteService; import com.yeshi.fanli.service.inter.user.UserActiveLogService; +import com.yeshi.fanli.service.inter.user.UserInfoRegisterService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import com.yeshi.fanli.service.inter.user.integral.IntegralTaskRecordService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; +import com.yeshi.fanli.service.inter.user.invite.UserInviteMsgNotificationService; import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService; import com.yeshi.fanli.util.Constant; -import com.yeshi.fanli.util.MoneyBigDecimalUtil; +import org.yeshi.utils.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; -import com.yeshi.fanli.util.TimeUtil; +import org.yeshi.utils.TimeUtil; import com.yeshi.fanli.util.VersionUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; import com.yeshi.fanli.util.annotation.redpack.RedPackGetVersionLimit; @@ -71,6 +75,9 @@ @Resource private UserInfoService userInfoService; + + @Resource + private UserInfoRegisterService userInfoRegisterService; @Resource private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService; @@ -89,6 +96,9 @@ @Resource private UserSystemCouponService userSystemCouponService; + + @Resource + private UserInviteMsgNotificationService userInviteMsgNotificationService; @Override @@ -465,19 +475,40 @@ if (orderUid == null || StringUtil.isNullOrEmpty(orderNo)) { return; } + // 楠岃瘉鏄惁鏈鍗� + CommonOrder firstOrder = commonOrderService.getFirstOrder(orderUid); + if (!firstOrder.getOrderNo().equals(orderNo) || firstOrder.getSourceType() != source) + return; + Date downTime = firstOrder.getThirdCreateTime(); + // 娉ㄥ唽鏃堕棿 + UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid); + if (register == null) + return; + long registerTime = register.getCreateTime().getTime(); + // 娉ㄥ唽48灏忔椂鍐呬笅鍗曢檺鍒� + if (downTime.getTime() < registerTime || downTime.getTime() > registerTime + 1000*60*60*48L) + return; + // 鏄惁瀛樺湪涓婁笅绾у叧绯� ThreeSale threeSale = threeSaleSerivce.getByWorkerId(orderUid); if (threeSale == null) return; - Long bossId = threeSale.getBoss().getId(); if (bossId == null) return; - // 璇ラ個璇锋槸鍚﹀凡棰嗗彇 + // 璇ラ個璇锋槸鍚﹀凡娣诲姞 RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUid(bossId, orderUid); if (threeStage != null) + return; + + // 灏忎簬2.1.3鐗堟湰涓嶅鍔� + UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId); + if (activeLog == null) + return; + if (!VersionUtil.greaterThan_2_1_3("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android", + activeLog.getVersionCode())) return; // 鏌ヨ璁㈠崟 @@ -486,21 +517,20 @@ return; } - // 48灏忔椂鍐呰鍗� - long spaceTime = 1000 * 60 * 48; - Long succeedTime = threeSale.getSucceedTime(); - Date thirdCreateTime = list.get(0).getThirdCreateTime(); - if (thirdCreateTime == null || thirdCreateTime.getTime() > succeedTime + spaceTime) { - return; - } - // 鍟嗗搧姣斾緥闄愬埗 BigDecimal limitRate = new BigDecimal(redPackConfigService.getValueByKey("goods_reate_limit")); BigDecimal limitPayMent = new BigDecimal(redPackConfigService.getValueByKey("goods_pay_ment_limit")); - boolean satisfy = false; // 閬嶅巻鏄惁瀛樺湪绗﹀悎鐩稿簲鍟嗗搧 for (CommonOrder commonOrder: list) { + // 璁㈠崟鏈粨绠� + if(commonOrder.getState() != CommonOrder.STATE_JS) + continue; + + // 閭�璇峰叧绯讳箣鍚� + long thirdTime = commonOrder.getThirdCreateTime().getTime(); + if (thirdTime < threeSale.getCreateTime()) + continue; // 浠樻閲戦闄愬埗 BigDecimal payment = commonOrder.getPayment(); if (payment == null || payment.compareTo(limitPayMent) < 0) @@ -512,7 +542,7 @@ if(eIncome == null || settlement == null) { continue; } - BigDecimal rete = MoneyBigDecimalUtil.div(eIncome, settlement); + BigDecimal rete =MoneyBigDecimalUtil.mul(MoneyBigDecimalUtil.div(eIncome, settlement), BigDecimal.valueOf(100)) ; if (rete.compareTo(limitRate) >= 0) { satisfy = true; break; @@ -536,18 +566,163 @@ winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.inviteDownOrder.name() + ":" + orderUid)); redPackWinInviteMapper.insertSelective(winInvite); + // 娑堟伅鎻愰啋 + UserInfo userInfo = userInfoService.selectByPKey(orderUid); + userInviteMsgNotificationService.pullNewRedPack(bossId, userInfo.getNickName(), userInfo.getPortrait()); + } + + @Override + @RequestSerializableByKeyService(key = "#orderUid") + public boolean verifyOrder(Long orderUid, String orderNo, Integer source, Date downTime) { + boolean satisfy = false; + // 娉ㄥ唽鏃堕棿 + UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid); + if (register == null) + return satisfy; + // 娉ㄥ唽48灏忔椂 浠ュ唴:鏂颁汉 + long registerTime = register.getCreateTime().getTime(); + // 48灏忔椂闄愬埗 + if (downTime.getTime() > registerTime || downTime.getTime() < registerTime + 1000*60*60*48) + return satisfy; + + // 楠岃瘉鏄惁鏈鍗� + CommonOrder firstOrder = commonOrderService.getFirstOrder(orderUid); + if (!firstOrder.getOrderNo().equals(orderNo) || firstOrder.getSourceType() != source) + return satisfy; + + // 鏄惁宸插鍔� + List<UserSystemCoupon> coupons = userSystemCouponService.getUserCouponBySource(orderUid, UserSystemCoupon.SOURCE_PULL_NEW); + if (coupons != null && coupons.size() > 0) { + return satisfy; + } + + // 鏄惁瀛樺湪涓婁笅绾у叧绯� + ThreeSale threeSale = threeSaleSerivce.getByWorkerId(orderUid); + if (threeSale == null) + return satisfy; + Long bossId = threeSale.getBoss().getId(); + if (bossId == null) + return satisfy; + + // 灏忎簬2.1.3鐗堟湰涓嶅鍔� + UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(orderUid); + if (activeLog == null) + return satisfy; + if (!VersionUtil.greaterThan_2_1_3("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android", + activeLog.getVersionCode())) + return satisfy; + + // 鏌ヨ璁㈠崟 + List<CommonOrder> list = commonOrderService.getByOrderNo(orderUid, orderNo); + if (list == null || list.size() ==0) + return satisfy; + + // 鍟嗗搧姣斾緥闄愬埗 + BigDecimal limitRate = new BigDecimal(redPackConfigService.getValueByKey("goods_reate_limit")); + BigDecimal limitPayMent = new BigDecimal(redPackConfigService.getValueByKey("goods_pay_ment_limit")); + // 閬嶅巻鏄惁瀛樺湪绗﹀悎鐩稿簲鍟嗗搧 + for (CommonOrder commonOrder: list) { + // 閭�璇峰叧绯讳箣鍚� + long thirdTime = commonOrder.getThirdCreateTime().getTime(); + if (thirdTime < threeSale.getCreateTime()) + continue; + // 璁㈠崟澶辨晥 + if(commonOrder.getState() != CommonOrder.STATE_FK && commonOrder.getState() != CommonOrder.STATE_JS) + continue; + + // 浠樻閲戦闄愬埗 + BigDecimal payment = commonOrder.getPayment(); + if (payment == null || payment.compareTo(limitPayMent) <= 0) + continue; + + // 鍟嗗搧浣i噾姣斾緥闄愬埗 + BigDecimal eIncome = commonOrder.geteIncome(); + BigDecimal settlement = commonOrder.getSettlement(); + if(eIncome == null || settlement == null) { + continue; + } + BigDecimal rete = MoneyBigDecimalUtil.div(eIncome, settlement); + if (rete.compareTo(limitRate) >= 0) { + satisfy = true; + break; + } + } + + return satisfy; + } + + @Override + @RequestSerializableByKeyService(key = "#orderUid") + @Transactional(rollbackFor = Exception.class) + public void winFreeCoupon(Long orderUid, String orderNo, Integer source, Date downTime) { + if (orderUid == null || StringUtil.isNullOrEmpty(orderNo)) { + return; + } + + // 娉ㄥ唽鏃堕棿 + UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid); + if (register == null) + return; + // 娉ㄥ唽48灏忔椂 浠ュ唴:鏂颁汉 + long registerTime = register.getCreateTime().getTime(); + // 48灏忔椂闄愬埗 + if (downTime.getTime() > registerTime || downTime.getTime() < registerTime + 1000*60*60*48) + return; + + // 鏄惁宸插鍔� + List<UserSystemCoupon> coupons = userSystemCouponService.getUserCouponBySource(orderUid, UserSystemCoupon.SOURCE_PULL_NEW); + if (coupons != null && coupons.size() > 0) { + return; + } + + // 鏌ヨ璁㈠崟 + List<CommonOrder> list = commonOrderService.getByOrderNo(orderUid, orderNo); + if (list == null || list.size() ==0) { + return; + } + + // 鍟嗗搧姣斾緥闄愬埗 + BigDecimal limitRate = new BigDecimal(redPackConfigService.getValueByKey("goods_reate_limit")); + BigDecimal limitPayMent = new BigDecimal(redPackConfigService.getValueByKey("goods_pay_ment_limit")); + + boolean satisfy = false; + // 閬嶅巻鏄惁瀛樺湪绗﹀悎鐩稿簲鍟嗗搧 + for (CommonOrder commonOrder: list) { + // 璁㈠崟澶辨晥 + if(commonOrder.getState() != CommonOrder.STATE_FK && commonOrder.getState() != CommonOrder.STATE_JS) + continue; + // 浠樻閲戦闄愬埗 + BigDecimal payment = commonOrder.getPayment(); + if (payment == null || payment.compareTo(limitPayMent) <= 0) + continue; + + // 鍟嗗搧浣i噾姣斾緥闄愬埗 + BigDecimal eIncome = commonOrder.geteIncome(); + BigDecimal settlement = commonOrder.getSettlement(); + if(eIncome == null || settlement == null) { + continue; + } + BigDecimal rete = MoneyBigDecimalUtil.div(eIncome, settlement); + if (rete.compareTo(limitRate) >= 0) { + satisfy = true; + break; + } + } + + if (!satisfy) { + return; + } // 璧犻�佽喘涔拌�呬竴寮犲厤鍗曞埜 try { - userSystemCouponService.freeCouponWinBySystem(orderUid, CouponTypeEnum.freeCouponBuy, UserSystemCoupon.SOURCE_EXCHANGE, - 1, true, 2); + userSystemCouponService.freeCouponWinBySystem(orderUid, CouponTypeEnum.freeCoupon, + UserSystemCoupon.SOURCE_PULL_NEW, 1, true, 2, 1); } catch (UserSystemCouponException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } - @Override public List<Long> listWinUid(int start, int count) { @@ -569,11 +744,13 @@ return count; } -// @Override -// public void arriveMoney(Long uid, ) { -// // 4銆佸鍔犵孩鍖� -// redPackBalanceService.addRedPack(bossId, money, RedPackDetailFactory.createSeriesReward(winInvite)); -// } + @Override + @Transactional(rollbackFor = Exception.class) + public void arriveMoney(Long uid, BigDecimal money, Date date) throws Exception { + RedPackDetail detail = RedPackDetailFactory.createByMonth(uid, money, date); + redPackBalanceService.addRedPack(uid, money, detail); + + } -- Gitblit v1.8.0