From 684779576c02c13cb2a18a7d93e88da7e57fd4b8 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期二, 31 三月 2020 11:25:13 +0800
Subject: [PATCH] 2.1 需求

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java |  305 +++++---------------------------------------------
 1 files changed, 33 insertions(+), 272 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java
index b7f9e41..5f194e4 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java
@@ -1,9 +1,5 @@
 package com.yeshi.fanli.service.impl.user.vip;
 
-import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -14,7 +10,6 @@
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.yeshi.utils.DateUtil;
 
 import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPInfoMapper;
 import com.yeshi.fanli.dto.msg.MsgAccountVipDTO;
@@ -26,12 +21,10 @@
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
 import com.yeshi.fanli.entity.bus.user.UserInviteSeparate;
+import com.yeshi.fanli.entity.bus.user.UserInviteValidNum;
 import com.yeshi.fanli.entity.bus.user.UserSystemCoupon;
 import com.yeshi.fanli.entity.bus.user.vip.UserVIPInfo;
 import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo;
-import com.yeshi.fanli.entity.integral.IntegralDetail;
-import com.yeshi.fanli.entity.shop.BanLiShopOrder;
-import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
 import com.yeshi.fanli.exception.msg.MsgAccountDetailException;
 import com.yeshi.fanli.exception.user.vip.UserVIPInfoException;
@@ -45,6 +38,7 @@
 import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
 import com.yeshi.fanli.service.inter.user.integral.IntegralDetailService;
 import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.invite.UserInviteValidNumService;
 import com.yeshi.fanli.service.inter.user.msg.MsgAccountDetailService;
 import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
 import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService;
@@ -99,6 +93,9 @@
 
 	@Resource
 	private MsgAccountDetailService msgAccountDetailService;
+	
+	@Resource
+	private UserInviteValidNumService userInviteValidNumService;
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -116,157 +113,6 @@
 		userVIPInfoMapper.insert(info);
 	}
 
-	@Transactional(rollbackFor = Exception.class)
-	@Override
-	public void passVIPApply(Long uid) throws UserVIPInfoException {
-		UserVIPInfo userVIPInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid);
-		if (userVIPInfo == null) {
-			throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�");
-		}
-		if (userVIPInfo.getState() != UserVIPInfo.STATE_VERIFING) {
-			throw new UserVIPInfoException(2, "鐢宠鏈浜庡鏍哥姸鎬�");
-		}
-
-		if (!verifyConform(uid))
-			throw new UserVIPInfoException(1, "绯荤粺楠岃瘉锛氫笉婊¤冻鍗囩骇鏉′欢");
-
-		UserVIPInfo info = new UserVIPInfo();
-		info.setId(userVIPInfo.getId());
-		info.setSuccessTime(new Date());
-		info.setState(UserVIPInfo.STATE_SUCCESS);
-		info.setUpdateTime(new Date());
-		userVIPInfoMapper.updateByPrimaryKeySelective(info);
-
-		// 涓嬬骇鐨勮秴绾т細鍛� 涓嶈劚绂�
-		userInviteSeparateService.updateInvalidByBossId(uid);
-
-		// 棰濆淇℃伅
-		UserInfoExtra userInfoExtra = userInfoExtraService.getByUidForUpdate(uid);
-		if (userInfoExtra == null)
-			throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�");
-
-		// 娣诲姞閲戝竵
-		IntegralDetail detail = new IntegralDetail();
-		detail.setTitle("鍗囩骇VIP绂忓埄");
-		detail.setUid(uid);
-		detail.setMoney(Constant.VIP_COLDCOIN_NUM);
-		detail.setCreateTime(new Date());
-		detail.setUniqueKey("VIP-" + uid);
-		integralDetailService.insertSelective(detail);
-		userInfoExtraService.addGoldCoinByUid(uid, Constant.VIP_COLDCOIN_NUM);
-
-		try {
-			// 濂栧姳鍒�
-			BigDecimal percent = new BigDecimal(configService.get(ConfigKeyEnum.exchangeRebatePercent.getKey()));
-			for (int i = 0; i < Constant.VIP_COUPON_REWARD_NUM; i++) {
-				userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.rebatePercentCoupon.name(),
-						UserSystemCoupon.SOURCE_SYSTEM_PUSH, percent, false);
-			}
-
-			// 璧犻�佸厤鍗曞埜
-			for (int i = 0; i < Constant.VIP_COUPON_GIVEFREE_NUM; i++) {
-				userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCouponGive.name(),
-						UserSystemCoupon.SOURCE_SYSTEM_PUSH, null, false);
-			}
-		} catch (Exception e) {
-			throw new UserVIPInfoException(1, "鍒歌禒閫佸け璐�");
-		}
-
-		// 娑堟伅
-		MsgOtherVIPDTO msgOther = new MsgOtherVIPDTO();
-		msgOther.setContent1("鎭枩浣狅紝宸叉垚涓鸿秴绾т細鍛�");
-		msgOther.setContent2("婊¤冻鍗囩骇鏉′欢");
-		msgOther.setContent3(TimeUtil.formatDateDot(new Date()));
-		userOtherMsgNotificationService.passVIPApplyMsg(uid, "杩斿埄濂栧姳鍒稿拰銆佽禒閫佸厤鍗曞埜鍜岄噾甯佽鍒版垜鐨�-绂忓埄涓績涓煡鐪�", msgOther);
-
-		// 閫氱煡涓婄骇
-		callBoss(uid);
-	}
-
-	/**
-	 * 閫氱煡涓婄骇鑴辩鍏崇郴
-	 * 
-	 * @param uid
-	 */
-	@Transactional
-	private void callBoss(Long uid) {
-		// 鏄惁瀛樺湪涓婄骇
-		ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
-		if (threeSale == null)
-			return;
-		// 涓婄骇鏄惁涓轰細鍛�
-		Long bossId = threeSale.getBoss().getId();
-		UserVIPInfo bossVIP = userVIPInfoMapper.selectByPrimaryKeyForUpdate(bossId);
-		if (bossVIP != null && bossVIP.getState() != null && bossVIP.getState() == UserVIPInfo.STATE_SUCCESS)
-			return;
-
-		// 涔嬪墠鎻掑叆璁板綍澶辨晥
-		userInviteSeparateService.updateStateByWorkerIdAndBossId(uid, bossId, UserInviteSeparate.STATE_INVALID);
-
-		// 闄愬埗鏃堕棿
-		int limitDays = Integer.parseInt(userVipConfigService.getValueByKey("invite_separate_limit_days"));
-		UserInviteSeparate inviteSeparate = new UserInviteSeparate();
-		inviteSeparate.setBossId(bossId);
-		inviteSeparate.setWorkerId(uid);
-		inviteSeparate.setState(UserInviteSeparate.STATE_INIT);
-		inviteSeparate.setEndTime(DateUtil.plusDayDate(limitDays, new Date()));
-		inviteSeparate.setCreateTime(new Date());
-		inviteSeparate.setUpdateTime(new Date());
-		userInviteSeparateService.insertSelective(inviteSeparate);
-
-		UserInfo userInfo = userInfoService.selectByPKey(uid);
-		// 娑堟伅
-		MsgOtherVIPDTO msgboss = new MsgOtherVIPDTO();
-		msgboss.setContent1(userInfo.getNickName() + " " + uid);
-		msgboss.setContent2("浜�" + TimeUtil.formatDateDot(new Date()) + "鎴愬姛鍗囩骇鎴愪负瓒呯骇浼氬憳");
-		msgboss.setContent3("浠婃棩璧�" + limitDays + "澶╁唴锛屼綘鏈兘鎴愪负瓒呯骇浼氬憳灏嗕細涓庡叾鑴辩閭�璇峰叧绯� ");
-		userOtherMsgNotificationService.teamVIPCallBoss(bossId, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgboss);
-	}
-
-	@Transactional(rollbackFor = Exception.class)
-	@Override
-	public void rejectVIPApply(Long uid, String reason) throws UserVIPInfoException {
-		UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid);
-		if (userInfo == null) {
-			throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�");
-		}
-		if (userInfo.getState() != UserVIPInfo.STATE_VERIFING) {
-			throw new UserVIPInfoException(2, "鐢宠鏈浜庡鏍哥姸鎬�");
-		}
-
-		UserVIPInfo info = new UserVIPInfo();
-		info.setId(userInfo.getId());
-		info.setState(UserVIPInfo.STATE_INVALID);
-		info.setUpdateTime(new Date());
-		userVIPInfoMapper.updateByPrimaryKeySelective(info);
-
-		// 娑堟伅
-		MsgOtherVIPDTO msgOther = new MsgOtherVIPDTO();
-		msgOther.setContent1("寰堟姳姝夛紝鏈�氳繃瓒呯骇浼氬憳鐢宠");
-		msgOther.setContent2("鏈弧瓒宠秴绾т細鍛樺崌绾ф潯浠舵垨鐤戜技鍑虹幇杩濊 ");
-		userOtherMsgNotificationService.rejectVIPApply(uid, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgOther);
-	}
-
-	@Transactional(rollbackFor = Exception.class)
-	@Override
-	public void applyVIP(Long uid) throws UserVIPInfoException {
-		UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid);
-		if (userInfo == null) {
-			userInfo = new UserVIPInfo();
-			userInfo.setId(uid);
-			addUserVIPInfo(userInfo);
-		}
-
-		if (userInfo.getState() != UserVIPInfo.STATE_INVALID)
-			throw new UserVIPInfoException(2, "宸茬粡鐢宠杩�");
-
-		UserVIPInfo info = new UserVIPInfo();
-		info.setId(userInfo.getId());
-		info.setApplyTime(new Date());
-		info.setState(UserVIPInfo.STATE_VERIFING);
-		info.setUpdateTime(new Date());
-		userVIPInfoMapper.updateByPrimaryKeySelective(info);
-	}
 
 	@Override
 	public boolean isVIP(Long uid) {
@@ -309,83 +155,6 @@
 		return map;
 	}
 
-	@Override
-	public boolean verifyConform(Long uid) {
-		if (uid == null || uid <= 0)
-			return false;
-
-		UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid);
-		if (extra == null)
-			return false;
-
-		// 1銆佺洿鎺ョ矇涓濓紙浠� 2020 骞� 1 鏈� 1 鏃ヨ捣鐩存帴绮変笣浜х敓鏈夋晥璁㈠崟锛�
-		BigDecimal payMoney = new BigDecimal(userVipConfigService.getValueByKey("require_order_pay"));
-		// long teamNum =
-		// hongBaoV2CountService.countValidOrderTeamUserByUid(uid,
-		// TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney);
-		long teamNum = 0L;
-		long vipBegin = TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME);
-		List<ThreeSale> listThreeSale = threeSaleSerivce.getValidWorkerIdsByTime(uid, vipBegin);
-		if (listThreeSale != null && listThreeSale.size() > 0) {
-			for (ThreeSale three : listThreeSale) {
-				UserInfo worker = three.getWorker();
-				if (worker == null || worker.getId() == null) {
-					continue;
-				}
-				// 1銆侀個璇峰叧绯绘垚鍔熷悗锛�2銆佸崟锛堝垎浜� + 鑷喘锛夊疄浠樻澶т簬1鍏�
-				long countValid = hongBaoV2CountService.countValidOrderByUidAndTime(worker.getId(),
-						three.getSucceedTime(), payMoney);
-				if (countValid > 0) {
-					teamNum++;
-				}
-			}
-		}
-
-		// 鍖哄垎鑰佺敤鎴峰拰鏂扮敤鎴�
-		String limtDate = userVipConfigService.getValueByKey("vip_execute_time");
-		Date executeDate = null;
-		try {
-			SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
-			executeDate = format.parse(limtDate);
-		} catch (ParseException e) {
-			e.printStackTrace();
-		}
-		if (executeDate == null)
-			return false;
-
-		if (extra.getFirstLoginTime() == null || extra.getFirstLoginTime().getTime() < executeDate.getTime()) {
-			long limitNum = Long.parseLong(userVipConfigService.getValueByKey("require_invite_num_old_user"));
-			if (teamNum < limitNum)
-				return false;
-		} else {
-			long limitNum = Long.parseLong(userVipConfigService.getValueByKey("require_invite_num_new_user"));
-			if (teamNum < limitNum)
-				return false;
-		}
-
-		// 2銆佺疮璁¤嚜璐繑鍒┾墺100 鍏冿紙浠庢敞鍐屾澘鏍楀揩鐪佽捣锛夛紱
-		BigDecimal fanMoney = new BigDecimal(userVipConfigService.getValueByKey("require_fan_money"));
-		BigDecimal purchase = hongBaoV2CountService.getRewardMoneyBySelf(uid);
-		if (purchase.compareTo(fanMoney) < 0)
-			return false;
-
-		// 3銆佺疮璁¢噾甯佲墺10000 鏋氾紙浠庢敞鍐屾澘鏍楀揩鐪佽捣锛夛紱
-		BigDecimal goldCoin = integralDetailService.getCumulativeMoney(uid);
-		BigDecimal limitGoldCoin = new BigDecimal(userVipConfigService.getValueByKey("require_gold_coin"));
-		if (goldCoin.compareTo(limitGoldCoin) < 0)
-			return false;
-
-		// 4銆佷娇鐢ㄧ孩鍖呪墺1 娆�
-		List<Integer> list = new ArrayList<Integer>();
-		list.add(BanLiShopOrder.STATE_SUCCESS);
-		long useHongBao = banLiShopOrderService.countByUidAndState(uid, list);
-		long limitHongBao = Long.parseLong(userVipConfigService.getValueByKey("require_shop_buy"));
-		if (useHongBao < limitHongBao)
-			return false;
-
-		// 绗﹀悎鏉′欢
-		return true;
-	}
 
 	@Override
 	public List<UserVIPInfo> listQuery(int page, int count, String key, Integer state) {
@@ -454,13 +223,13 @@
 
 	@Transactional(rollbackFor = Exception.class)
 	@Override
-	public void applyVIPNew(Long uid) throws UserVIPInfoException {
+	public void applyVIP(Long uid) throws UserVIPInfoException {
 		UserVIPPreInfo latestProcess = userVIPPreInfoService.getLatestProcessInfo(uid);
 		if (latestProcess == null || latestProcess.getProcess() != UserVIPPreInfo.PROCESS_2) {
 			throw new UserVIPInfoException(1, "璇ョ敤鎴疯繕涓嶆槸楂樼骇浼氬憳");
 		}
 
-		if (!verifyVipNew(uid))
+		if (!verifyVip(uid))
 			throw new UserVIPInfoException(1, "绯荤粺楠岃瘉锛氫笉婊¤冻鍗囩骇鏉′欢");
 
 		UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid);
@@ -498,7 +267,7 @@
 
 	@Transactional(rollbackFor = Exception.class)
 	@Override
-	public void passVIPApplyNew(Long uid) throws UserVIPInfoException {
+	public void passVIPApply(Long uid) throws UserVIPInfoException {
 		UserVIPInfo userVIPInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid);
 		if (userVIPInfo == null) {
 			throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�");
@@ -512,7 +281,7 @@
 			throw new UserVIPInfoException(1, "璇ョ敤鎴疯繕涓嶆槸楂樼骇浼氬憳");
 		}
 
-		if (!verifyVipNew(uid))
+		if (!verifyVip(uid))
 			throw new UserVIPInfoException(1, "绯荤粺楠岃瘉锛氫笉婊¤冻鍗囩骇鏉′欢");
 
 		// 棰濆淇℃伅
@@ -528,34 +297,20 @@
 		info.setUpdateTime(new Date());
 		userVIPInfoMapper.updateByPrimaryKeySelective(info);
 
-		// 娣诲姞閲戝竵
-		userInfoExtraService.addGoldCoinByUid(uid, Constant.VIP_COLDCOIN_NUM);
-		// 娣诲姞閲戝竵鏄庣粏
-		IntegralDetail detail = new IntegralDetail();
-		detail.setTitle("鍗囩骇VIP绂忓埄");
-		detail.setUid(uid);
-		detail.setMoney(Constant.VIP_COLDCOIN_NUM);
-		detail.setCreateTime(new Date());
-		detail.setUniqueKey("VIP-" + uid);
-		integralDetailService.insertSelective(detail);
-
 		try {
-			// 濂栧姳鍒�
-			BigDecimal percent = new BigDecimal(configService.get(ConfigKeyEnum.exchangeRebatePercent.getKey()));
-			for (int i = 0; i < Constant.VIP_COUPON_REWARD_NUM; i++) {
-				userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.rebatePercentCoupon.name(),
-						UserSystemCoupon.SOURCE_SYSTEM_PUSH, percent, false);
-			}
-
 			// 璧犻�佸厤鍗曞埜
-			for (int i = 0; i < Constant.VIP_COUPON_GIVEFREE_NUM; i++) {
-				userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCouponGive.name(),
-						UserSystemCoupon.SOURCE_SYSTEM_PUSH, null, false);
+			String giveCoupon = userVipConfigService.getValueByKey("vip_pre_10_gift_givefree_coupon");
+			if (!StringUtil.isNullOrEmpty(giveCoupon)) {
+				int num = Integer.parseInt(giveCoupon);
+				for (int i = 0; i < num; i++) {
+					userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.freeCouponGive.name(),
+							UserSystemCoupon.SOURCE_SYSTEM_PUSH, null, false);
+				}
 			}
 		} catch (Exception e) {
 			throw new UserVIPInfoException(1, "鍒歌禒閫佸け璐�");
 		}
-
+		
 		// 娑堟伅
 		MsgAccountVipDTO msgDto = new MsgAccountVipDTO();
 		msgDto.setStatus("宸插皢浣犵殑璐︽埛鐢遍珮绾т細鍛樺崌绾т负瓒呯骇浼氬憳");
@@ -568,16 +323,22 @@
 	 * @param uid
 	 * @return
 	 */
-	private boolean verifyVipNew(Long uid) {
-		// 閭�璇疯鍗�
-		long countZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY,
+	private boolean verifyVip(Long uid) {
+		// 鑷喘璁㈠崟
+		long doneZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY,
 				HongBaoV2.TYPE_ZIGOU);
-		// 閭�璇疯鍗�
-		long countShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY,
+		// 鍒嗕韩璁㈠崟
+		long doneShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY,
 				HongBaoV2.TYPE_SHARE_GOODS);
-		// 闃熷憳
-		long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
-		long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
+		
+		// 鏈夋晥绮変笣
+		int doneFirst = 0;
+		int doneSecond = 0;
+		UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(uid);
+		if (userInviteValidNum != null) {
+			doneFirst = userInviteValidNum.getNumFirst() == null ? 0 : userInviteValidNum.getNumFirst();
+			doneSecond = userInviteValidNum.getNumSecond() == null ? 0 : userInviteValidNum.getNumSecond();
+		}
 
 		long limitZiGou = 0;
 		String zigou = userVipConfigService.getValueByKey("vip_pre_10_zigou_order_count");
@@ -603,7 +364,7 @@
 			limitSecond = Long.parseLong(second);
 		}
 		
-		if (countZiGou >= limitZiGou || countShare >= limitShare || (firstTeam >= limitFirst && secondTeam >= limitSecond)) {
+		if (doneZiGou >= limitZiGou || doneShare >= limitShare || (doneFirst >= limitFirst && doneSecond >= limitSecond)) {
 			return true;
 		}
 		return false;
@@ -611,7 +372,7 @@
 
 	@Transactional(rollbackFor = Exception.class)
 	@Override
-	public void rejectVIPApplyNew(Long uid, String reason) throws UserVIPInfoException {
+	public void rejectVIPApply(Long uid, String reason) throws UserVIPInfoException {
 		UserVIPInfo userInfo = userVIPInfoMapper.selectByPrimaryKeyForUpdate(uid);
 		if (userInfo == null) {
 			throw new UserVIPInfoException(1, "鐢ㄦ埛淇℃伅涓嶅瓨鍦�");

--
Gitblit v1.8.0