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