From ec60e757d358636dcac1589c44a66f3e276fe58c Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期一, 29 六月 2020 14:41:42 +0800
Subject: [PATCH] 拉新

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java |  170 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 148 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 6db986e..eaeedc7 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
@@ -467,7 +467,7 @@
 	@Override
 	@RequestSerializableByKeyService(key = "#orderUid")
 	@Transactional(rollbackFor = Exception.class)
-	public void winRedPackByOrder(Long orderUid, String orderNo, Integer source) {
+	public void winRedPackByOrder(Long orderUid, String orderNo, Integer source, Date downTime) {
 		if (orderUid == null || StringUtil.isNullOrEmpty(orderNo)) {
 			return;
 		}
@@ -476,20 +476,29 @@
 		UserInfoRegister register = userInfoRegisterService.selectByPrimaryKey(orderUid);
 		if (register == null) 
 			return;
-		// 娉ㄥ唽48灏忔椂 + 浠ュ唴
+		// 娉ㄥ唽48灏忔椂 浠ュ唴 :鏂颁汉
 		long registerTime = register.getCreateTime().getTime();
-		
+		// 48灏忔椂闄愬埗
+		if (downTime.getTime() < registerTime || downTime.getTime() > registerTime + 1000*60*60*48)
+			return;
 		
 		// 鏄惁瀛樺湪涓婁笅绾у叧绯�
 		ThreeSale threeSale = threeSaleSerivce.getByWorkerId(orderUid);
 		if (threeSale == null)
 			return;
-
 		Long bossId = threeSale.getBoss().getId();
 		if (bossId == 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;
+		
+		// 璇ラ個璇锋槸鍚﹀凡娣诲姞
 		RedPackWinInvite threeStage = redPackWinInviteMapper.getByUidAndTeamUid(bossId, orderUid);
 		if (threeStage != null)
 			return;
@@ -500,27 +509,15 @@
 			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) {
 			// 閭�璇峰叧绯讳箣鍚�
-			long downTime = commonOrder.getThirdCreateTime().getTime();
-			if (downTime < threeSale.getCreateTime())
-				continue;
-			// 48灏忔椂闄愬埗
-			if (downTime < registerTime || downTime > registerTime + 1000*60*60*48)
+			long thirdTime = commonOrder.getThirdCreateTime().getTime();
+			if (thirdTime < threeSale.getCreateTime())
 				continue;
 			// 浠樻閲戦闄愬埗
 			BigDecimal payment = commonOrder.getPayment();
@@ -556,19 +553,148 @@
 		winInvite.setType(RedPackWinInviteTypeEnum.inviteDownOrder);
 		winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.inviteDownOrder.name() + ":" + orderUid));
 		redPackWinInviteMapper.insertSelective(winInvite);
+	}
+	
+	@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;
 		
+		// 鏄惁宸插鍔�
+		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;
+			// 浠樻閲戦闄愬埗
+			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) {
+			// 浠樻閲戦闄愬埗
+			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.freeCouponBuy, 
+					UserSystemCoupon.SOURCE_PULL_NEW, 1, true, 2);
 		} catch (UserSystemCouponException e) {
 			e.printStackTrace();
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
-	
 	
 	@Override
 	public List<Long> listWinUid(int start, int count) {

--
Gitblit v1.8.0