From b59fef5c00b15fdfdfa9d4be26e5bf6b41c75458 Mon Sep 17 00:00:00 2001
From: admin <2780501319@qq.com>
Date: 星期日, 23 二月 2020 00:16:52 +0800
Subject: [PATCH] 2.0.7相关服务端功能添加

---
 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java               |   41 +
 fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/UserInviteService.java           |   13 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java          |   11 
 fanli/src/main/java/com/yeshi/fanli/vo/goods/MoneyInfoVO.java                                  |   31 +
 fanli/src/main/java/com/yeshi/fanli/service/inter/user/notify/UserActivedRecordService.java    |   29 +
 fanli/src/main/java/com/yeshi/fanli/vo/user/UserDialogBtnVO.java                               |   42 ++
 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ConfigController.java                 |   99 ++++
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java               |    2 
 fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java                           |    3 
 utils/src/main/java/org/yeshi/utils/wx/WXUtil.java                                             |   11 
 fanli/src/main/java/com/yeshi/fanli/dto/ConfigParamsDTO.java                                   |   11 
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java              |  141 ++++--
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java                |   30 
 fanli/src/main/java/com/yeshi/fanli/dao/user/notify/UserActivedRecordDao.java                  |   11 
 fanli/src/main/java/com/yeshi/fanli/vo/user/UserDialogVO.java                                  |   69 +++
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java               |   63 ---
 utils/src/main/java/org/yeshi/utils/HttpUtil.java                                              |    1 
 fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java            |   12 
 fanli/src/main/java/com/yeshi/fanli/util/Constant.java                                         |    2 
 fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java                                     |   48 +-
 fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java                |   17 
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPInfoServiceImpl.java          |  130 +++---
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/notify/UserActivedRecordServiceImpl.java |   53 ++
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java                 |    2 
 fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java                    |    8 
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteServiceImpl.java        |   39 +
 fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java       |   15 
 fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java    |   17 
 fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoExtraService.java               |    3 
 fanli/src/main/java/com/yeshi/fanli/dto/user/UserInviteLevelEnum.java                          |   21 +
 fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/WXMPDynamicInfoServiceImpl.java       |    3 
 fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java            |   45 +
 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/InviteGetMoneyController.java         |   27 +
 fanli/src/main/java/com/yeshi/fanli/entity/bus/user/notify/UserActivedRecord.java              |   75 +++
 fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java               |   51 ++
 35 files changed, 886 insertions(+), 290 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ConfigController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ConfigController.java
index 02decb8..87cbb54 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ConfigController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ConfigController.java
@@ -18,6 +18,8 @@
 import com.yeshi.fanli.entity.bus.homemodule.SwiperPicture;
 import com.yeshi.fanli.entity.bus.msg.MsgDeviceReadState;
 import com.yeshi.fanli.entity.bus.user.UserActiveLog;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.common.JumpDetailV2;
 import com.yeshi.fanli.entity.config.AppHomeFloatImg;
 import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.entity.taobao.ClientTBPid;
@@ -31,10 +33,14 @@
 import com.yeshi.fanli.service.inter.user.TBPidService;
 import com.yeshi.fanli.service.inter.user.UserActiveLogService;
 import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.notify.UserActivedRecordService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.StringUtil;
 import com.yeshi.fanli.util.ThreadUtil;
 import com.yeshi.fanli.util.VersionUtil;
+import com.yeshi.fanli.vo.user.UserDialogBtnVO;
+import com.yeshi.fanli.vo.user.UserDialogVO;
 
 import net.sf.json.JSONObject;
 
@@ -74,10 +80,15 @@
 
 	@Resource
 	private UserActiveLogService userActiveLogService;
-	
+
 	@Resource
 	private SwiperPictureService swiperPictureService;
 
+	@Resource
+	private UserActivedRecordService userActivedRecordService;
+
+	@Resource
+	private UserInfoService userInfoService;
 
 	/**
 	 * s 棣栭〉閰嶇疆淇℃伅
@@ -104,7 +115,6 @@
 		if (!StringUtil.isNullOrEmpty(notifyImg)) {
 			data.put("floatNotifyImg", notifyImg);
 		}
-
 
 		// 鏃犳柊浜哄脊妗� 鍒欐煡璇㈤粯璁�
 		FloatAD floatAD = floatADService.getEffectiveFloatAD(FloatAD.POSITION_INDEX, 0);
@@ -138,8 +148,8 @@
 		} else {// 鑰佷汉
 			data.put("userTimeType", 1);
 		}
-		data.put("hotFuctionLink",
-				configService.getByVersion(ConfigKeyEnum.hotFunctionUrl.getKey(), platform, Integer.parseInt(acceptData.getVersion())));//
+		data.put("hotFuctionLink", configService.getByVersion(ConfigKeyEnum.hotFunctionUrl.getKey(), platform,
+				Integer.parseInt(acceptData.getVersion())));//
 		out.print(JsonUtil.loadTrueResult(data));
 	}
 
@@ -163,7 +173,8 @@
 		}
 
 		// 鏄惁闇�瑕佽喘鐗╁煄杞摼
-		boolean convert = "0".equalsIgnoreCase(configService.get(ConfigKeyEnum.showTaobaoCartConvert.getKey())) ? false : true;
+		boolean convert = "0".equalsIgnoreCase(configService.get(ConfigKeyEnum.showTaobaoCartConvert.getKey())) ? false
+				: true;
 
 		if (!"cart".equalsIgnoreCase(position) && !convert) {
 			out.print(JsonUtil.loadFalseResult(""));
@@ -238,8 +249,37 @@
 		out.print(JsonUtil.loadTrueResult(data));
 	}
 
+	/**
+	 * 鍏抽棴鎻愰啋
+	 * 
+	 * @param acceptData
+	 * @param uid
+	 * @param id
+	 * @param type
+	 *            0-鍏抽棴 1-鐐瑰嚮鍙宠竟鎸夐挳 2-鐐瑰嚮宸﹁竟鎸夐挳
+	 * @param out
+	 */
+	@RequestMapping(value = "closeDialogNotify", method = RequestMethod.POST)
+	public void closeDialogNotify(AcceptData acceptData, Long uid, String id, int type, PrintWriter out) {
+
+		if (uid == null) {
+			out.print(JsonUtil.loadFalseResult("鐢ㄦ埛鏈櫥褰�"));
+			return;
+		}
+		if (StringUtil.isNullOrEmpty(id)) {
+			out.print(JsonUtil.loadFalseResult("id涓虹┖"));
+			return;
+		}
+		if (id.equalsIgnoreCase("tearcherNotify")) {
+			userActivedRecordService.setTearcherNotified(uid);
+			out.print(JsonUtil.loadTrueResult(""));
+		} else {
+			out.print(JsonUtil.loadFalseResult("id涓嶅瓨鍦�"));
+		}
+	}
+
 	@RequestMapping(value = "getUserConfig", method = RequestMethod.POST)
-	public void getUserConfig(AcceptData acceptData, PrintWriter out) {
+	public void getUserConfig(AcceptData acceptData, Long uid, PrintWriter out) {
 		try {
 			// 鐢ㄦ埛鍗忚閾炬帴
 			String serviceProtocol = configService.get(ConfigKeyEnum.serviceProtocolLink.getKey());
@@ -249,22 +289,54 @@
 			data.put("serviceProtocolLink", serviceProtocol);
 			data.put("privacyProtocolLink", privacyProtocol);
 			// 璐墿杞﹁烦杞柟寮�(鍖呭惈jumpDetail涓巔arams)
-			JSONObject source = JSONObject.fromObject(configService.getByVersion(ConfigKeyEnum.taobaoCartJumpDetail.getKey(),
-					acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion())));
+			JSONObject source = JSONObject
+					.fromObject(configService.getByVersion(ConfigKeyEnum.taobaoCartJumpDetail.getKey(),
+							acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion())));
 			data.put("taoBaoCart", source);
-			
+
 			if (VersionUtil.greaterThan_2_0_2(acceptData.getPlatform(), acceptData.getVersion())) {
 				// 鎴戠殑鐣岄潰banner
-				List<SwiperPicture> banner = swiperPictureService.getByBannerCardAndVersion("my_interface_banner",acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
+				List<SwiperPicture> banner = swiperPictureService.getByBannerCardAndVersion("my_interface_banner",
+						acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
 				if (banner == null)
 					banner = new ArrayList<SwiperPicture>();
 				data.put("banner", JsonUtil.getApiCommonGson().toJson(banner));
-			} 
-			
+			}
+
 			if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
 				// 杞摼鐨勭綉椤甸摼鎺�
 				String convertLinkUrl = configService.get(ConfigKeyEnum.convertDocWebLink.getKey());
 				data.put("convertLinkUrl", convertLinkUrl);
+				if (uid != null) {
+
+					String tearcherLink = configService.getByVersion(ConfigKeyEnum.tearcherLink.getKey(),
+							acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
+					if (userActivedRecordService.canNotifyAddTearcher(uid)) {
+						UserInfo userInfo = userInfoService.selectAvailableByPrimaryKey(uid);
+						if (userInfo != null) {
+							JumpDetailV2 jumpDetail = jumpDetailV2Service.getByTypeCache("web",
+									Constant.getPlatformCode(acceptData.getPlatform()),
+									Integer.parseInt(acceptData.getVersion()));
+
+							JSONObject negativeParams = new JSONObject();
+							negativeParams.put("url", configService.getByVersion(ConfigKeyEnum.newerGonglue.getKey(),
+									acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion())));
+
+							JSONObject positiveParams = new JSONObject();
+							positiveParams.put("url", tearcherLink);
+
+							UserDialogVO dialog = new UserDialogVO("tearcherNotify", true,
+									"HI," + userInfo.getNickName(),
+									"鎴戞槸浣犵殑瀵煎笀锛屼负浣犲湪鐪佽禋杩囩▼涓В闅剧瓟鐤戯紝瀵逛綘涓�瀵逛竴杈呭锛屽�惧惉浣犵殑闇�姹傛�荤粨骞跺弽棣堢粰鏉挎牀蹇渷瀹樻柟杩愯惀鍥㈤槦锛屽揩鏉ユ坊鍔犳垜鍚с��",
+									new UserDialogBtnVO("澶嶅埗瀵煎笀寰俊", jumpDetail, positiveParams),
+									new UserDialogBtnVO("鍘绘柊鎵嬫敾鐣�", jumpDetail, negativeParams));
+							data.put("dialog", dialog);
+						}
+					}
+
+					data.put("tearcherLink", tearcherLink);
+				}
+
 			}
 			out.print(JsonUtil.loadTrueResult(data));
 		} catch (Exception e) {
@@ -312,7 +384,8 @@
 	public void getOrderConfig(AcceptData acceptData, PrintWriter out) {
 		JSONObject data = new JSONObject();
 		// 娴嬭瘯
-		data.put("showTaoBaoOrder", "0".equalsIgnoreCase(configService.get(ConfigKeyEnum.showTaobaoOrder.getKey()).trim()) ? false : true);
+		data.put("showTaoBaoOrder",
+				"0".equalsIgnoreCase(configService.get(ConfigKeyEnum.showTaobaoOrder.getKey()).trim()) ? false : true);
 		data.put("taoBaoOrderUrl", "https://main.m.taobao.com/olist/index.html");
 		out.print(JsonUtil.loadTrueResult(data));
 	}
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/InviteGetMoneyController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/InviteGetMoneyController.java
index 2e14866..25dcd11 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/InviteGetMoneyController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/InviteGetMoneyController.java
@@ -36,6 +36,7 @@
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.RedisManager;
 import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.VersionUtil;
 import com.yeshi.fanli.util.account.UserUtil;
 import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
 
@@ -127,7 +128,8 @@
 		data.put("activityRules", valueBr);
 		data.put("inviteList", String.format("http://%s/%s/client/share/friends_new.html",
 				Constant.systemCommonConfig.getProjectHost(), Constant.systemCommonConfig.getProjectName()));
-		List<SwiperPicture> pictureList = swiperPictureService.getByBannerCardAndVersion("invite_top_banner",acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
+		List<SwiperPicture> pictureList = swiperPictureService.getByBannerCardAndVersion("invite_top_banner",
+				acceptData.getPlatform(), Integer.parseInt(acceptData.getVersion()));
 		if (pictureList != null && pictureList.size() > 0) {
 			SwiperPicture picture = pictureList.get(0);
 			com.alibaba.fastjson.JSONObject pictureJson = new com.alibaba.fastjson.JSONObject();
@@ -182,8 +184,10 @@
 		}
 
 		// 閭�璇烽摼鎺�
-//		String shortLink = HttpUtil.getShortLink("http://" + Constant.wxGZConfig.getLoginHost() + "/"
-//				+ Constant.systemCommonConfig.getProjectName() + "/client/threeShareNew?uid=" + uid);
+		// String shortLink = HttpUtil.getShortLink("http://" +
+		// Constant.wxGZConfig.getLoginHost() + "/"
+		// + Constant.systemCommonConfig.getProjectName() +
+		// "/client/threeShareNew?uid=" + uid);
 		data.put("inviteLink", "http://a.app.qq.com/o/simple.jsp?pkgname=com.yeshi.ec.rebate");
 
 		String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
@@ -258,8 +262,14 @@
 				JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("婵�娲诲け璐�"));
 				return;
 			}
+			if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
+				String myInviteCode = userInfoExtraService.getInviteCodeByUid(uid);
+				JSONObject data = new JSONObject();
+				data.put("inviteCode", myInviteCode);
+				JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
 
-			JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("閭�璇风爜婵�娲绘垚鍔�"));
+			} else
+				JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("閭�璇风爜婵�娲绘垚鍔�"));
 
 		} catch (UserInfoExtraException e) {
 			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMsg()));
@@ -285,7 +295,14 @@
 		try {
 			userInfoExtraService.activationInviteWX(
 					Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion()), uid, code);
-			out.print(JsonUtil.loadTrueResult("閭�璇风爜婵�娲绘垚鍔�"));
+
+			if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
+				String myInviteCode = userInfoExtraService.getInviteCodeByUid(uid);
+				JSONObject data = new JSONObject();
+				data.put("inviteCode", myInviteCode);
+				JsonUtil.printMode(out, "", JsonUtil.loadTrueResult(data));
+			} else
+				out.print(JsonUtil.loadTrueResult("閭�璇风爜婵�娲绘垚鍔�"));
 		} catch (UserInfoExtraException e) {
 			out.print(JsonUtil.loadFalseResult(e.getMsg()));
 		} catch (Exception e) {
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
index cb7540b..c7a03b0 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java
@@ -40,6 +40,7 @@
 import com.yeshi.fanli.dto.HongBaoDTO;
 import com.yeshi.fanli.dto.money.AccountDetails;
 import com.yeshi.fanli.dto.order.OrderItem;
+import com.yeshi.fanli.dto.user.UserInviteLevelEnum;
 import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
 import com.yeshi.fanli.entity.AppVersionInfo;
 import com.yeshi.fanli.entity.accept.AcceptData;
@@ -108,6 +109,7 @@
 import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
 import com.yeshi.fanli.service.inter.user.invite.ThreeSaleExtraInfoSerivce;
 import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.invite.UserInviteService;
 import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
 import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
 import com.yeshi.fanli.util.AESUtil;
@@ -242,14 +244,17 @@
 
 	@Resource
 	private UserVIPInfoService userVIPInfoService;
-	
+
 	@Resource
 	private UserVipConfigService userVipConfigService;
-	
+
 	@Resource
 	private RedPackForbidService redPackForbidService;
 
-	private static final String EXTRACT_MIN_MONEY = ConfigKeyEnum.extractMoneyMin.getKey(); 
+	@Resource
+	private UserInviteService userInviteService;
+
+	private static final String EXTRACT_MIN_MONEY = ConfigKeyEnum.extractMoneyMin.getKey();
 	private static final String EXTRACT_MAX_MONEY = ConfigKeyEnum.extractMoneyMAX.getKey();
 
 	/**
@@ -1139,7 +1144,6 @@
 			return;
 		}
 
-		
 		if (!Constant.IS_TEST) {
 			// 鍒ゆ柇鎵嬫満楠岃瘉鐮佺殑姝g‘鎬�
 			String oldCode = redisManager.getSMSVCode(user.getPhone(), SMSHistory.TYPE_LOGIN);
@@ -2150,7 +2154,7 @@
 					tailor = true;
 					invitCode = userInfoExtra.getInviteCode();
 				}
-				
+
 				if (userInfoExtra.getUserRank() != null) {
 					String picture = userInfoExtra.getUserRank().getPicture();
 					String icon = userInfoExtra.getUserRank().getIcon();
@@ -2169,13 +2173,13 @@
 					if (!StringUtil.isNullOrEmpty(userInfoExtra.getWeiXin()))
 						userInfo.setWeiXin(userInfoExtra.getWeiXin());
 				}
-				
+
 				// 浜岀淮鐮�
 				userInfo.setErCode(userInfoExtra.getErCode());
 			}
 			// 鏄剧ず閭�璇风爜鐗瑰埗鍏ュ彛
 			data.put("tailor", tailor);
-			
+
 			// 1.6.5 涔嬪悗杩斿洖 寰俊鍙锋彁绀�
 			if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion()))
 				userInfo.setWeiXinTip("娣诲姞寰俊鍙峰悗锛屼綘鐨勯個璇蜂汉鍜岀洿鎺ョ矇涓濆彲浠ラ�氳繃寰俊涓庝綘寤虹珛鑱旂郴銆�");
@@ -2183,7 +2187,7 @@
 			// 鏌ヨ鏄惁涓篤IP
 			if (VersionUtil.greaterThan_2_0_5(acceptData.getPlatform(), acceptData.getVersion())) {
 				userInfo.setVip(userVIPInfoService.isVIP(uid));
-				
+
 				boolean verifyForbid = redPackForbidService.verifyForbid(uid);
 				data.put("redPackLock", verifyForbid);
 			}
@@ -2204,8 +2208,8 @@
 					bindPhone = bindRemindService.bindRemind(uid, BindRemind.TYPE_PHONE);
 				data.put("bindPhone", bindPhone);
 			}
-			
-			if  (!StringUtil.isNullOrEmpty(invitCode)) {
+
+			if (!StringUtil.isNullOrEmpty(invitCode)) {
 				// 2.0.6 杩斿洖閭�璇蜂汉
 				if (VersionUtil.greaterThan_2_0_6(acceptData.getPlatform(), acceptData.getVersion())) {
 					String bossName = "";
@@ -2216,8 +2220,15 @@
 					data.put("bossName", bossName);
 				}
 			}
-			
-			
+
+			if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
+				JSONObject inviteLevel = new JSONObject();
+				UserInviteLevelEnum level = userInviteService.getUserInviteLevel(uid);
+				inviteLevel.put("level", level.name());
+				inviteLevel.put("link", level.getLink());
+				data.put("inviteLevel", inviteLevel);
+			}
+
 			out.print(JsonUtil.loadTrueResult(data));
 
 			final UserInfo uuser = userInfo;
@@ -2399,14 +2410,12 @@
 					return;
 				}
 			}
-			
+
 			// 浜岀淮鐮�
 			if (qrCodeFile != null) {
 				userInfoExtraService.uploadERCode(qrCodeFile, uid);
 			}
-			
-			
-			
+
 			out.print(JsonUtil.loadTrueResult("淇濆瓨鎴愬姛"));
 		} catch (UserInfoException e) {
 			out.print(JsonUtil.loadFalseResult(e.getMsg()));
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java
index 30df3a2..89fe953 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ConfigControllerV2.java
@@ -382,69 +382,6 @@
 		out.print(JsonUtil.loadTrueResult(data));
 	}
 
-	@RequestMapping(value = "getUserConfig", method = RequestMethod.POST)
-	public void getUserConfig(AcceptData acceptData, PrintWriter out) {
-		try {
-			// 鐢ㄦ埛鍗忚閾炬帴
-			String serviceProtocol = configService.get(ConfigKeyEnum.serviceProtocolLink.getKey());
-			// 闅愮鏉℃閾炬帴
-			String privacyProtocol = configService.get(ConfigKeyEnum.privacyProtocolLink.getKey());
-			JSONObject data = new JSONObject();
-			data.put("serviceProtocolLink", serviceProtocol);
-			data.put("privacyProtocolLink", privacyProtocol);
-			// 璐墿杞﹁烦杞柟寮�(鍖呭惈jumpDetail涓巔arams)
-			JSONObject source = JSONObject.fromObject(configService.get(ConfigKeyEnum.taobaoCartJumpDetail.getKey()));
-			data.put("taoBaoCart", source);
-			out.print(JsonUtil.loadTrueResult(data));
-		} catch (Exception e) {
-			out.print(JsonUtil.loadFalseResult("鑾峰彇澶辫触"));
-			e.printStackTrace();
-		}
-
-	}
-
-	/**
-	 * 璁㈠崟瑙f瀽閰嶇疆
-	 * 
-	 * @param acceptData
-	 * @param out
-	 */
-	@RequestMapping(value = "getOrderParseConfig", method = RequestMethod.POST)
-	public void getOrderParseConfig(AcceptData acceptData, int type, PrintWriter out) {
-
-		switch (type) {
-		case Constant.SOURCE_TYPE_TAOBAO:
-			if ("0".equalsIgnoreCase(configService.get(ConfigKeyEnum.autoFindTaobaoOrder.getKey())))
-				out.print(JsonUtil.loadFalseResult(1, "鏆備笉鏀寔"));
-			else {
-				String orderJS = configService.get(ConfigKeyEnum.taobaoOrderParseJS.getKey());
-				JSONObject data = new JSONObject();
-				try {
-					data.put("orderJS", DESUtil.encode(orderJS, StringUtil.getBase64String("YeShiFANLI889*+"),
-							StringUtil.getBase64String("*M#34f?,")));
-					data.put("orderUrl",
-							DESUtil.encode("https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm",
-									StringUtil.getBase64String("YeShiFANLI889*+"),
-									StringUtil.getBase64String("*M#34f?,")));
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-				out.print(JsonUtil.loadTrueResult(data));
-			}
-			break;
-
-		case Constant.SOURCE_TYPE_JD: {
-
-		}
-			break;
-
-		case Constant.SOURCE_TYPE_PDD: {
-
-		}
-			break;
-		}
-	}
-
 	/**
 	 * 鑾峰彇璁㈠崟閰嶇疆
 	 * 
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
index c1d14e7..e125c23 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -516,10 +516,11 @@
 		data.put("words", configService.get(ConfigKeyEnum.articleHotWords.getKey()));
 		out.print(JsonUtil.loadTrueResult(data));
 	}
-	//鍙戝湀娴嬭瘯
-	@RequestMapping(value = "evaluate", method = RequestMethod.POST)
-	public void evaluate(AcceptData acceptData, PrintWriter out) {
-		out.print(configService.get("test"));
+
+	// //鍙戝湀娴嬭瘯
+	public void evaluateTest(AcceptData acceptData, PrintWriter out) {
+		JSONObject data = JSONObject.fromObject(configService.get("test"));
+		out.print(data.toString());
 	}
 
 	/**
@@ -531,6 +532,11 @@
 	 */
 	@RequestMapping(value = "evaluate", method = RequestMethod.POST)
 	public void evaluate(AcceptData acceptData, Integer page, PrintWriter out) {
+		if ("1".equalsIgnoreCase(configService.get("test-open"))) {
+			evaluateTest(acceptData, out);
+			return;
+		}
+
 		long cid = 1;
 		long subId = 1;
 		List<DynamicInfo> listd = dynamicInfoService.queryV2(2, 74, (page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE,
@@ -541,7 +547,10 @@
 
 		List<GoodsEvaluate> list = new ArrayList<>();
 
+		int p = 0;
 		for (DynamicInfo info : listd) {
+			p++;
+
 			GoodsEvaluate goodsEvaluate = new GoodsEvaluate();
 			goodsEvaluate.setId(info.getId());
 			ActivityUser user = info.getUser();
@@ -555,6 +564,7 @@
 
 			List<ImgInfo> imgList = new ArrayList<>();
 			int i = 0;
+
 			for (GoodsPicture goodsPicture : imgs) {
 				ImgInfo imgInfo = new ImgInfo();
 				GoodsDetailVO goodsVO = goodsPicture.getGoodsVO();
@@ -578,22 +588,45 @@
 
 				imgInfo.setLarge(false);
 				imgInfo.setUrl(goodsPicture.getUrl());
-			    imgInfo.setUrlHD(goodsPicture.getUrl());
+				imgInfo.setUrlHD(goodsPicture.getUrl());
 
-//				if (i == 0) {
-//					imgInfo.setUrl(goodsPicture.getUrl());
-//					imgInfo.setType(ImgEnum.video);
-//					imgInfo.setLarge(true);
-//					imgInfo.setVideoUrl(
-//							"http://pgcvideo.cdn.xiaodutv.com/754825344_367171606_2020010816001720200108174342.mp4?Cache-Control=max-age%3D8640000&responseExpires=Fri%2C+17+Apr+2020+18%3A11%3A55+GMT&xcode=0b0f3962eddaf66837d4af61a22c57bae3a5055540c75232&time=1579077845&_=1578992502888");
-//				} else {
-//					imgInfo.setType(ImgEnum.img);
-//					imgInfo.setLarge(true);
-//					imgInfo.setUrl(goodsPicture.getUrl());
-//				}
-//				i++;
+				// if (i == 0) {
+				// imgInfo.setUrl(goodsPicture.getUrl());
+				// imgInfo.setType(ImgEnum.video);
+				// imgInfo.setLarge(true);
+				// imgInfo.setVideoUrl(
+				// "http://pgcvideo.cdn.xiaodutv.com/754825344_367171606_2020010816001720200108174342.mp4?Cache-Control=max-age%3D8640000&responseExpires=Fri%2C+17+Apr+2020+18%3A11%3A55+GMT&xcode=0b0f3962eddaf66837d4af61a22c57bae3a5055540c75232&time=1579077845&_=1578992502888");
+				// } else {
+				// imgInfo.setType(ImgEnum.img);
+				// imgInfo.setLarge(true);
+				// imgInfo.setUrl(goodsPicture.getUrl());
+				// }
+				// i++;
 
 				imgList.add(imgInfo);
+			}
+
+			if (p == 1) {
+				ImgInfo imgInfo = new ImgInfo();
+				imgInfo.setLarge(true);
+				imgInfo.setType(ImgEnum.img);
+				imgInfo.setUrl(
+						"http://ec-1255749512.file.myqcloud.com/img/invite/new/10ea86eb8db94f7cbb5e68864480d5fe.jpg");
+				imgInfo.setH(1334);
+				imgInfo.setW(750);
+				imgList.add(0, imgInfo);
+
+				imgInfo = new ImgInfo();
+				imgInfo.setType(ImgEnum.video);
+				imgInfo.setLarge(true);
+				imgInfo.setUrl(
+						"http://ec-1255749512.file.myqcloud.com/img/invite/new/10ea86eb8db94f7cbb5e68864480d5fe.jpg");
+				imgInfo.setH(315);
+				imgInfo.setW(560);
+				imgInfo.setUrl("https://zzya.beva.cn/img/Fr56bczo_F8NvroeG54jLH5ey0aC.jpg");
+				imgInfo.setVideoUrl("http://img.flqapp.com/resource/video.mp4");
+				imgList.add(0, imgInfo);
+
 			}
 
 			goodsEvaluate.setImgList(imgList);
@@ -603,18 +636,18 @@
 			commentInfo.setContent("馃槅7.9鍏凁焿�1鍙効绔ョ墮鍒�!!瀹夊Ξ璐濇媺鍗¢�氱増鍎跨鐗欌瓡PBT鏉愯川锛屾瘺鍒风粏鑵绘煍猸曞瑙傚崱閫氫汉鐗╅�犲瀷璁捐");
 			commentInfo.setType(CommentInfoEnum.goodsCoupon);
 
-//			ClientTextStyleVO text1 = new ClientTextStyleVO();
-//			text1.setContent("鐚秴");
-//			text1.setColor("#1D9B31");
-//			
-//			ClientTextStyleVO text2 = new ClientTextStyleVO();
-//			text2.setContent("婊�150鍑�15");
-//			text2.setColor("#E5005C");
-//			List<ClientTextStyleVO> tagList = new ArrayList<>();  
-//			tagList.add(text1);
-//			tagList.add(text2);
-//			commentInfo.setTagList(tagList);
-//			commentInfo.setTagDesc("闄ょ敓椴滃強閮ㄥ垎閰掓按闄ょ敓椴滃強闄ょ敓椴滃強");
+			// ClientTextStyleVO text1 = new ClientTextStyleVO();
+			// text1.setContent("鐚秴");
+			// text1.setColor("#1D9B31");
+			//
+			// ClientTextStyleVO text2 = new ClientTextStyleVO();
+			// text2.setContent("婊�150鍑�15");
+			// text2.setColor("#E5005C");
+			// List<ClientTextStyleVO> tagList = new ArrayList<>();
+			// tagList.add(text1);
+			// tagList.add(text2);
+			// commentInfo.setTagList(tagList);
+			// commentInfo.setTagDesc("闄ょ敓椴滃強閮ㄥ垎閰掓按闄ょ敓椴滃強闄ょ敓椴滃強");
 
 			CommentInfo commentInfo2 = new CommentInfo();
 			commentInfo2.setContent("馃槅7.9鍏凁焿�1鍙効绔ョ墮鍒�!!瀹夊Ξ璐濇媺鍗¢�氱増鍎跨鐗欌瓡PBT鏉愯川锛屾瘺鍒风粏鑵绘煍猸曞瑙傚崱閫氫汉鐗╅�犲瀷璁捐");
@@ -642,10 +675,12 @@
 			list.add(goodsEvaluate);
 		}
 
-//		List<GoodsEvaluate> list = goodsEvaluateService.queryValidEvaluateCache((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE);
-//		if (list == null) {
-//			list = new ArrayList<>();
-//		}
+		// List<GoodsEvaluate> list =
+		// goodsEvaluateService.queryValidEvaluateCache((page - 1) *
+		// Constant.PAGE_SIZE, Constant.PAGE_SIZE);
+		// if (list == null) {
+		// list = new ArrayList<>();
+		// }
 
 		GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
 		gsonBuilder.registerTypeAdapter(CommentInfoEnum.class, new JsonSerializer<CommentInfoEnum>() {
@@ -729,17 +764,18 @@
 	}
 
 	@RequestMapping(value = "evaluateShare", method = RequestMethod.POST)
-	public void evaluateShare(AcceptData acceptData, Long uid, String id, Integer type, Long goodsId, Integer goodsType, PrintWriter out) {
+	public void evaluateShare(AcceptData acceptData, Long uid, String id, Integer type, Long goodsId, Integer goodsType,
+			PrintWriter out) {
 		if (uid == null) {
 			out.print(JsonUtil.loadFalseResult("鐢ㄦ埛鏈櫥褰�"));
 			return;
 		}
-		
+
 		if (StringUtil.isNullOrEmpty(id) || type == null) {
 			out.print(JsonUtil.loadFalseResult("浼犻�掑弬鏁颁笉鑳戒负绌�"));
 			return;
 		}
-		
+
 		if (type == 1 && (goodsId == null || goodsType == null)) {
 			out.print(JsonUtil.loadFalseResult("鍟嗗搧鍙傛暟涓嶈兘涓虹┖"));
 			return;
@@ -778,12 +814,12 @@
 			out.print(JsonUtil.loadFalseResult("璇ュ浘鐗囧唴瀹瑰凡涓嶅瓨鍦�"));
 			return;
 		}
-		
+
 		int total = 0;
 		for (GoodsPicture goodsPicture : imgs) {
 			GoodsDetailVO goodsVO = goodsPicture.getGoodsVO();
 			if (goodsVO != null) {
-				total ++;
+				total++;
 			}
 		}
 
@@ -794,9 +830,10 @@
 				list.add(goodsPicture.getUrl());
 				continue;
 			}
-			
+
 			if (type == 1) {
-				if (goodsVO.getGoodsId().longValue() == goodsId.longValue() && goodsVO.getGoodsType() == goodsType.intValue()) {
+				if (goodsVO.getGoodsId().longValue() == goodsId.longValue()
+						&& goodsVO.getGoodsType() == goodsType.intValue()) {
 					String jumpLink = getJumpLink(goodsVO, user);
 					if (!StringUtil.isNullOrEmpty(jumpLink)) {
 						list.add(jumpLink);
@@ -824,7 +861,7 @@
 			out.print(JsonUtil.loadFalseResult("璇ヤ俊鎭凡涓嬫灦"));
 			return;
 		}
-		
+
 		JSONObject data = new JSONObject();
 		data.put("count", shareCount);
 		data.put("list", list);
@@ -843,10 +880,10 @@
 			}
 		} else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_JD) {
 			JDGoods jdGoods = jdGoodsCacheUtil.getGoodsInfo(goodsVO.getGoodsId());
-			if (jdGoods == null ) {
+			if (jdGoods == null) {
 				return null;
 			}
-			
+
 			String couponUrl = null;
 			JDCouponInfo couponInfo = JDUtil.getShowCouponInfo(jdGoods);
 			if (couponInfo != null) {
@@ -856,7 +893,8 @@
 			jumpLink = JDApiUtil.convertLinkWithSubUnionId(materialId, couponUrl, JDApiUtil.POSITION_SHARE + "",
 					user.getId() + "");
 		} else if (goodsVO.getGoodsType() == Constant.SOURCE_TYPE_PDD) {
-			jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsVO.getGoodsId(), PinDuoDuoApiUtil.PID_SHARE + "", user.getId() + "");
+			jumpLink = PinDuoDuoApiUtil.getPromotionUrl(goodsVO.getGoodsId(), PinDuoDuoApiUtil.PID_SHARE + "",
+					user.getId() + "");
 		}
 		FileUploadResult uploadResult = qrCodeService.drawGoodsPoster(jumpLink, user.getPortrait(), goodsVO);
 		if (uploadResult != null) {
@@ -864,13 +902,14 @@
 		}
 		return null;
 	}
-	
-	
+
 	/**
-	 *  璇勮澶嶅埗
+	 * 璇勮澶嶅埗
+	 * 
 	 * @param acceptData
 	 * @param id
-	 * @param cid 璇勮id
+	 * @param cid
+	 *            璇勮id
 	 * @param out
 	 */
 	@RequestMapping(value = "evaluateComment", method = RequestMethod.POST)
@@ -879,7 +918,7 @@
 			out.print(JsonUtil.loadFalseResult("id涓嶈兘涓虹┖"));
 			return;
 		}
-		
+
 		DynamicInfo dynamicInfo = dynamicInfoService.getById(id);
 		if (dynamicInfo == null) {
 			out.print(JsonUtil.loadFalseResult("璇ュ唴瀹瑰凡涓嶅瓨鍦�"));
@@ -896,7 +935,7 @@
 			out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
 			return;
 		}
-		
+
 		UserExtraTaoBaoInfo taoBaoInfo = userExtraTaoBaoInfoService.getByUid(uid);
 		String relationId = null;
 		if (taoBaoInfo != null && taoBaoInfo.getRelationId() != null && taoBaoInfo.getRelationValid() != null
@@ -907,7 +946,7 @@
 			out.print(JsonUtil.loadFalseResult(2, "娣樺疂鏈巿鏉冿紝璇峰墠寰�\"鎴戠殑\"缁戝畾娣樺疂璐﹀彿"));
 			return;
 		}
-		
+
 		JSONObject data = new JSONObject();
 		data.put("text", "瀹夊Ξ璐濇媺鍗¢�氱増鍎挎媺鍗¢�氱増鎷夊崱閫氱増鎷夊崱閫氱増鎷夊崱閫氱増鎷夊崱閫氱増鎷夊崱閫氱増鎷夊崱閫氱増");
 		out.print(JsonUtil.loadTrueResult(data));
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
index 92f3bb6..22599b6 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/GoodsControllerV2.java
@@ -374,6 +374,7 @@
 
 		ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
 				acceptData.getVersion());
+		paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
 
 		GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertTaoBao(goods, paramsDTO);
 		if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
@@ -381,6 +382,7 @@
 			goodsDetail.getMoneyInfo().setShareMoney(
 					"楼" + TaoBaoUtil.getGoodsHongBaoMoney(goods, hongBaoManageService.getVIPShareRate()));
 			goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
+			goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
 		}
 		goodsDetail.getMoneyInfo()
 				.setRateInfoHelpUrl(configService.get(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey()));
@@ -605,8 +607,9 @@
 	 * @param from
 	 * @param out
 	 */
-	@RequestMapping(value = "getDetailJD", method = RequestMethod.POST)
+	@RequestMapping(value = "getDetailJD")
 	public void getDetialJD(AcceptData acceptData, Long id, Long uid, String from, PrintWriter out) {
+//		uid=2255993L;
 		// 绯荤粺楠岃瘉
 		BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
 				acceptData.getPackages());
@@ -637,12 +640,14 @@
 
 		ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
 				acceptData.getVersion());
+		paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
 		GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertJDGoods(jdGoods, paramsDTO);
 		if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
 			goodsDetail.getMoneyInfo().setFanliMoney(goodsDetail.getMoneyInfo().getMaxMoney());
 			goodsDetail.getMoneyInfo()
 					.setShareMoney("楼" + JDUtil.getGoodsFanLiMoney(jdGoods, hongBaoManageService.getVIPShareRate()));
 			goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
+			goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
 		}
 		goodsDetail.getMoneyInfo()
 				.setRateInfoHelpUrl(configService.get(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey()));
@@ -697,12 +702,12 @@
 			rewardCoupon.setDesc("鐢ㄨ繑鍒╁鍔卞埜鏈�楂樿繑");
 		}
 		rewardCoupon.setParams(params1.toString());
-		
+
 		otherInfo.setRewardCoupon(rewardCoupon);
 		if ("ios".equalsIgnoreCase(acceptData.getPlatform())
 				&& configService.iosOnLining(Integer.parseInt(acceptData.getVersion())))
 			otherInfo.setRewardCoupon(null);
-		
+
 		goodsDetail.setOtherInfo(otherInfo);
 
 		CouponInfoVO couponInfo = goodsDetail.getCouponInfo();
@@ -800,11 +805,12 @@
 		out.print(JsonUtil.loadTrueResult(object.toString()));
 
 		final JDGoods goods = jdGoods;
+		final Long fuid=uid;
 		ThreadUtil.run(new Runnable() {
 			public void run() {
 				// 娣诲姞娴忚璁板綍
 				try {
-					scanHistoryV2Service.addJDScanHistory(uid, acceptData.getDevice(), goods);
+					scanHistoryV2Service.addJDScanHistory(fuid, acceptData.getDevice(), goods);
 				} catch (Exception e) {
 					e.printStackTrace();
 				}
@@ -839,12 +845,15 @@
 
 		ConfigParamsDTO paramsDTO = hongBaoManageService.getShowComputeRate(acceptData.getPlatform(),
 				acceptData.getVersion());
+		paramsDTO.setBaseFanliRate(hongBaoManageService.getBaseFanliRate());
+
 		GoodsDetailVO goodsDetail = GoodsDetailVOFactory.convertPDDGoods(pddGoods, paramsDTO);
 		if (goodsDetail != null && goodsDetail.getMoneyInfo() != null && userVIPInfoService.isVIP(uid)) {
 			goodsDetail.getMoneyInfo().setFanliMoney(goodsDetail.getMoneyInfo().getMaxMoney());
 			goodsDetail.getMoneyInfo().setShareMoney(
 					"楼" + PinDuoDuoUtil.getGoodsFanLiMoney(pddGoods, hongBaoManageService.getVIPShareRate()));
 			goodsDetail.getMoneyInfo().setRateInfo(goodsDetail.getMoneyInfo().getMaxRateInfo());
+			goodsDetail.getMoneyInfo().setCompositionInfo(goodsDetail.getMoneyInfo().getMaxCompositionInfo());
 		}
 		goodsDetail.getMoneyInfo()
 				.setRateInfoHelpUrl(configService.get(ConfigKeyEnum.goodsDetailFanliRateHelpUrl.getKey()));
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
index 710b690..063fd5e 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/InviteControllerV2.java
@@ -620,7 +620,7 @@
 			data.put("helpLink", configService.get(ConfigKeyEnum.inviteHelpLink.getKey()));
 			data.put("inviteRules",  values.getValue().replace("\n", "<br><br>"));
 			data.put("imgUrlList", JsonUtil.getSimpleGsonWithDate().toJson(imgList));
-			data.put("inviteLink", "http://a.app.qq.com/o/simple.jsp?pkgname=com.yeshi.ec.rebate");
+			data.put("inviteLink", Constant.YINGYONGBAO_LINK);
 			out.print(JsonUtil.loadTrue(0, JsonUtil.getSimpleGson().toJson(data), "鎴愬姛"));
 		} catch (Exception e) {
 			LogHelper.errorDetailInfo(e);
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
index 40e69b7..e42cbf1 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/ShareControllerV2.java
@@ -162,20 +162,21 @@
 			BigDecimal fanliMoney) {
 		List<ShareGoodsCommentChoiceInfo> list = new ArrayList<>();
 		if (!StringUtil.isNullOrEmpty(token))
-			list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_TOKEN, "娣樺彛浠�", token, true, false));
+			list.add(
+					new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_TOKEN, "娣樺彛浠�", token, true, false));
 		if (!StringUtil.isNullOrEmpty(link)) {
-			list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_LINK, "閾炬帴",link, true, false));
+			list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_LINK, "閾炬帴", link, true, false));
 		}
 		if (!StringUtil.isNullOrEmpty(inviteCode)) {
-			list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_INVITE_CODE, "閭�璇风爜", inviteCode, false,
-					true));
+			list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_INVITE_CODE, "閭�璇风爜", inviteCode,
+					false, true));
 		}
 
-		list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_DOWNLOAD_LINK, "涓嬭浇閾炬帴", "http://www.baidu.com", false,
-				true));
+		list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_DOWNLOAD_LINK, "涓嬭浇閾炬帴",
+				"http://www.baidu.com", false, true));
 
-		list.add(
-				new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_FANLI_MONEY, "杩斿埄閲戦", "楼 "+fanliMoney, false, true));
+		list.add(new ShareGoodsCommentChoiceInfo(ShareGoodsCommentChoiceInfo.TYPE_FANLI_MONEY, "杩斿埄閲戦",
+				"楼 " + fanliMoney, false, true));
 
 		return list;
 	}
@@ -561,7 +562,8 @@
 					taoBaoLink.getGoods(), shareInfo.getToken()));
 
 			// 鎻愮ず鍥炬枃鍐呭
-			String imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs.getKey());
+			String imgs =  configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), platform,
+					Integer.parseInt(version));
 			JSONArray array = JSONArray.fromObject(imgs);
 			int p = (int) (array.size() * Math.random());
 			if (p < array.size()) {
@@ -703,7 +705,8 @@
 		}
 		shareInfo.setDescText(descText);
 
-		String imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs.getKey());
+		String imgs = configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), acceptData.getPlatform(),
+				Integer.parseInt(acceptData.getVersion()));
 		JSONArray array = JSONArray.fromObject(imgs);
 		int p = (int) (array.size() * Math.random());
 		if (p < array.size()) {
@@ -732,7 +735,7 @@
 		// 璁剧疆璇勮鏂囨湰閫夐」
 		shareInfo.setCommentTextChoiceList(getCommentChoiceList(null, shareInfo.getClickUrl(), inviteCode,
 				JDUtil.getGoodsFanLiMoney(jdGoods, hongBaoManageService.getFanLiRate())));
-		
+
 		shareInfo.setCommentText(shareInfo.getShareText());
 		shareInfo.setRecommendText(shareInfo.getDescText());
 
@@ -839,7 +842,8 @@
 		shareInfo.setDescText(descText);
 
 		//
-		String imgs = configService.get(ConfigKeyEnum.goodsShareNotifyImgs.getKey());
+		String imgs =  configService.getByVersion(ConfigKeyEnum.goodsShareNotifyImgs.getKey(), acceptData.getPlatform(),
+				Integer.parseInt(acceptData.getVersion()));
 		JSONArray array = JSONArray.fromObject(imgs);
 		int p = (int) (array.size() * Math.random());
 		if (p < array.size()) {
@@ -869,7 +873,7 @@
 		// 璁剧疆璇勮鏂囨湰閫夐」
 		shareInfo.setCommentTextChoiceList(getCommentChoiceList(null, shareInfo.getClickUrl(), inviteCode,
 				PinDuoDuoUtil.getGoodsFanLiMoney(goods, hongBaoManageService.getFanLiRate())));
-		
+
 		shareInfo.setCommentText(shareInfo.getShareText());
 		shareInfo.setRecommendText(shareInfo.getDescText());
 
diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java
index 17ddb7d..d4178a3 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserAccountControllerV2.java
@@ -232,6 +232,7 @@
 			} else {
 				JSONObject data = new JSONObject();
 				data.put("userInfo", UserUtil.filterForClientUser(userInfo));
+				data.put("inviteCode", userInfoExtraService.getInviteCodeByUid(userInfo.getId()));
 				out.print(JsonUtil.loadTrueResult(data));
 
 				final UserInfo uuser = userInfo;
@@ -441,16 +442,15 @@
 		}
 		vo.setFinishMoney(hongBaoV2CountService.getRewardMoneyBySelf(uid));
 
-		
 		List<Integer> list = new ArrayList<Integer>();
 		list.add(BanLiShopOrder.STATE_SUCCESS);
 		BigDecimal payMoney = new BigDecimal(userVipConfigService.getValueByKey("require_order_pay"));
 
 		vo.setFinishGoldCoin(Long.parseLong(integralDetailService.getCumulativeMoney(uid).setScale(0).toString()));
-		vo.setFinishTeam(hongBaoV2CountService.countValidOrderTeamUserByUid(uid, TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney));
+		vo.setFinishTeam(hongBaoV2CountService.countValidOrderTeamUserByUid(uid,
+				TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney));
 		vo.setFinishHongBao(banLiShopOrderService.countByUidAndState(uid, list));
 
-		
 		// 鍖哄垎鑰佺敤鎴峰拰鏂扮敤鎴�
 		String limtDate = userVipConfigService.getValueByKey("vip_execute_time");
 		Date executeDate = null;
@@ -521,7 +521,8 @@
 		BigDecimal payMoney = new BigDecimal(userVipConfigService.getValueByKey("require_order_pay"));
 
 		BigDecimal finishGoldCoin = integralDetailService.getCumulativeMoney(uid);
-		long finishTeam = hongBaoV2CountService.countValidOrderTeamUserByUid(uid, TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney);
+		long finishTeam = hongBaoV2CountService.countValidOrderTeamUserByUid(uid,
+				TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney);
 		long finishHongBao = banLiShopOrderService.countByUidAndState(uid, list);
 		BigDecimal finishMoney = hongBaoV2CountService.getRewardMoneyBySelf(uid);
 
@@ -536,7 +537,7 @@
 		} catch (ParseException e) {
 			e.printStackTrace();
 		}
-				
+
 		UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid);
 		if (extra != null
 				&& (extra.getFirstLoginTime() == null || extra.getFirstLoginTime().getTime() < executeDate.getTime())) {
diff --git a/fanli/src/main/java/com/yeshi/fanli/dao/user/notify/UserActivedRecordDao.java b/fanli/src/main/java/com/yeshi/fanli/dao/user/notify/UserActivedRecordDao.java
new file mode 100644
index 0000000..915c85b
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/dao/user/notify/UserActivedRecordDao.java
@@ -0,0 +1,11 @@
+package com.yeshi.fanli.dao.user.notify;
+
+import org.springframework.stereotype.Repository;
+
+import com.yeshi.fanli.dao.MongodbBaseDao;
+import com.yeshi.fanli.entity.bus.user.notify.UserActivedRecord;
+
+@Repository
+public class UserActivedRecordDao extends MongodbBaseDao<UserActivedRecord> {
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/dto/ConfigParamsDTO.java b/fanli/src/main/java/com/yeshi/fanli/dto/ConfigParamsDTO.java
index 8d148dd..af431ae 100644
--- a/fanli/src/main/java/com/yeshi/fanli/dto/ConfigParamsDTO.java
+++ b/fanli/src/main/java/com/yeshi/fanli/dto/ConfigParamsDTO.java
@@ -9,10 +9,19 @@
 	private BigDecimal shareRate;
 	// 濂栧姳鍒告渶楂樿繑姣斾緥
 	private BigDecimal maxRewardRate;
-
+	// 鍩虹杩斿埄姣斾緥淇℃伅
+	private BigDecimal baseFanliRate;
 	// VIP杩斿埄姣斾緥
 	private BigDecimal vipFanLiRate;// 浼氬憳杩斿埄姣斾緥
 
+	public BigDecimal getBaseFanliRate() {
+		return baseFanliRate;
+	}
+
+	public void setBaseFanliRate(BigDecimal baseFanliRate) {
+		this.baseFanliRate = baseFanliRate;
+	}
+
 	public BigDecimal getVipFanLiRate() {
 		return vipFanLiRate;
 	}
diff --git a/fanli/src/main/java/com/yeshi/fanli/dto/user/UserInviteLevelEnum.java b/fanli/src/main/java/com/yeshi/fanli/dto/user/UserInviteLevelEnum.java
new file mode 100644
index 0000000..e1de0ef
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/dto/user/UserInviteLevelEnum.java
@@ -0,0 +1,21 @@
+package com.yeshi.fanli.dto.user;
+
+public enum UserInviteLevelEnum {
+	noActive("鏈縺娲�", ""), actived("宸茬粡婵�娲�", ""), vipApply("瓒呯骇浼氬憳鐢宠涓�", ""), vip("瓒呯骇浼氬憳", ""), tearcherApply("瀵煎笀鐢宠涓�",
+			""), tearcher("瀵煎笀", "");
+	private String name;
+	private String link;
+
+	private UserInviteLevelEnum(String name, String link) {
+		this.name = name;
+		this.link = link;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public String getLink() {
+		return this.link;
+	}
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/bus/user/notify/UserActivedRecord.java b/fanli/src/main/java/com/yeshi/fanli/entity/bus/user/notify/UserActivedRecord.java
new file mode 100644
index 0000000..53e16bc
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/bus/user/notify/UserActivedRecord.java
@@ -0,0 +1,75 @@
+package com.yeshi.fanli.entity.bus.user.notify;
+
+import java.util.Date;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.Field;
+
+/**
+ * 鐢ㄦ埛婵�娲昏褰曡〃
+ * 
+ * @author Administrator
+ *
+ */
+@Document(collection = "userActivedRecord")
+public class UserActivedRecord {
+	@Id
+	private Long uid;
+	@Field
+	private Boolean addTearcherNotify;// 娣诲姞瀵煎笀鎻愰啋
+	@Field
+	private Date addTearchNotifyTime;
+	@Field
+	private Date createTime;
+	@Field
+	private Date updateTime;
+
+	public UserActivedRecord(Long uid) {
+		this.uid = uid;
+	}
+
+	public UserActivedRecord() {
+	}
+
+	public Long getUid() {
+		return uid;
+	}
+
+	public void setUid(Long uid) {
+		this.uid = uid;
+	}
+
+	public Boolean getAddTearcherNotify() {
+		return addTearcherNotify;
+	}
+
+	public void setAddTearcherNotify(Boolean addTearcherNotify) {
+		this.addTearcherNotify = addTearcherNotify;
+	}
+
+	public Date getAddTearchNotifyTime() {
+		return addTearchNotifyTime;
+	}
+
+	public void setAddTearchNotifyTime(Date addTearchNotifyTime) {
+		this.addTearchNotifyTime = addTearchNotifyTime;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java b/fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
index 0f475ea..8c69536 100644
--- a/fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
+++ b/fanli/src/main/java/com/yeshi/fanli/entity/system/ConfigKeyEnum.java
@@ -167,7 +167,8 @@
 	convertDocWebLink("convert_doc_web_link","鏂囨杞摼缃戦〉"),
 	convertDocHelpLink("convert_doc_help_link","鏂囨杞摼甯姪缃戦〉"),
 	convertDocTip("convert_doc_tip","鏂囨杞摼娓╅Θ鎻愮ず"),
-	newerGonglue("newer_gonglue_url","鏂版墜鏀荤暐閾炬帴")
+	newerGonglue("newer_gonglue_url","鏂版墜鏀荤暐閾炬帴"),
+	tearcherLink("tearcher_link","瀵煎笀閾炬帴")
 	;
 
 	private final String key;
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/WXMPDynamicInfoServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/WXMPDynamicInfoServiceImpl.java
index 9033284..3278dc8 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/WXMPDynamicInfoServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/WXMPDynamicInfoServiceImpl.java
@@ -66,7 +66,8 @@
 		try {
 			convertContent = convertLinkManager.convertLinkFromText(info.getContent(), uid, true);
 		} catch (Exception e) {
-			throw new WXMPDynamicInfoException(2, e.getMessage());
+			e.printStackTrace();
+			throw new WXMPDynamicInfoException(2, "杞摼鍑洪敊");
 		}
 		wxmpDynamicInfoDao.addShareCount(id);
 		return convertContent;
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java
index 52819b9..b9f55d3 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/homemodule/SpecialServiceImpl.java
@@ -269,7 +269,7 @@
 		String type = contentType.substring(contentType.indexOf("/") + 1);
 
 		// 鏂囦欢璺緞
-		String filePath =FilePathEnum.special.getPath() + UUID.randomUUID().toString().replace("-", "") + "." + type;
+		String filePath = FilePathEnum.special.getPath() + UUID.randomUUID().toString().replace("-", "") + "." + type;
 		// 鎵ц涓婁紶
 		String fileLink = COSManager.getInstance().uploadFile(inputStream, filePath).getUrl();
 
@@ -289,7 +289,7 @@
 	}
 
 	@Override
-	@Transactional(rollbackFor=Exception.class)
+	@Transactional(rollbackFor = Exception.class)
 	public void updateOrder(Long id, Integer moveType, Integer sex) throws SpecialException {
 
 		if (id == null || moveType == null || (!moveType.equals(1) && !moveType.equals(-1)) || sex == null) {
@@ -355,7 +355,7 @@
 				COSManager.getInstance().deleteFile(subPicture);
 			}
 		}
-		
+
 		if (listSpecial != null)
 			for (Special special : listSpecial) {
 				List<AdActivityVersionControl> versionList = adActivityVersionControlService
@@ -555,6 +555,12 @@
 						s.setParams(special.getParams());
 					}
 				}
+
+				if (s.getJumpDetail() != null) {
+					s.getJumpDetail().setNeedLogin(s.isJumpLogin()
+							| (s.getJumpDetail().getNeedLogin() != null && s.getJumpDetail().getNeedLogin()));
+				}
+
 			}
 
 		// 鏁版嵁澶勭悊
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java
index f3c5d7e..8718a37 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/order/config/HongBaoManageServiceImpl.java
@@ -358,4 +358,21 @@
 		return paramsDTO;
 	}
 
+	@Override
+	public BigDecimal getBaseFanliRate(long time) {
+		String key = "base_fanli_rate";
+		HongBaoManage hongBaoManage = hongBaoManageMapper.selectByKeyAndMaxValidTime(key, time);
+		if (hongBaoManage == null)
+			hongBaoManage = hongBaoManageMapper.selectByKey(key);
+		if (hongBaoManage != null)
+			return new BigDecimal(hongBaoManage.getValue());
+		LogHelper.error("鑾峰彇鍩虹杩斿埄姣斾緥鍑洪敊");
+		return null;
+	}
+
+	@Override
+	public BigDecimal getBaseFanliRate() {
+		return getBaseFanliRate(System.currentTimeMillis());
+	}
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
index 7212b8b..1dc815a 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
@@ -15,6 +15,7 @@
 
 import javax.annotation.Resource;
 
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -39,6 +40,7 @@
 import com.yeshi.fanli.entity.bus.user.UserRank;
 import com.yeshi.fanli.entity.bus.user.UserRankRecord;
 import com.yeshi.fanli.entity.bus.user.WeiXinUser;
+import com.yeshi.fanli.entity.bus.user.notify.UserActivedRecord;
 import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.exception.user.ThreeSaleException;
 import com.yeshi.fanli.exception.user.UserInfoExtraException;
@@ -52,6 +54,7 @@
 import com.yeshi.fanli.service.inter.user.UserInviteRecordService;
 import com.yeshi.fanli.service.inter.user.UserRankService;
 import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.notify.UserActivedRecordService;
 import com.yeshi.fanli.util.Constant;
 import com.yeshi.fanli.util.FilePathEnum;
 import com.yeshi.fanli.util.InviteCodeFilterUtil;
@@ -96,6 +99,10 @@
 
 	@Resource
 	private UserInviteRecordService userInviteRecordService;
+
+	@Resource
+	@Lazy
+	private UserActivedRecordService userActivedRecordService;
 
 	@Resource(name = "producer")
 	private Producer producer;
@@ -380,6 +387,7 @@
 			userInfoExtra.setCreateTime(new Date());
 			userInfoExtraMapper.insertSelective(userInfoExtra);
 		}
+		userActivedRecordService.add(new UserActivedRecord(uid));
 
 		if (!Constant.IS_TEST) { // 鍙戦�佹縺娲绘垚鍔熸秷鎭�
 			Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.inviteCodeActive,
@@ -449,8 +457,9 @@
 				if (asInputStream == null) {
 					LogHelper.test("寰俊澶村儚涓嬭浇澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl);
 				} else {
-					FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format(
-							FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + ""));
+					FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream,
+							String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(),
+									System.currentTimeMillis() + ""));
 					if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) {
 						headimgurl = result.getUrl();
 					} else {
@@ -499,7 +508,9 @@
 			userInfoExtra.setCreateTime(new Date());
 			userInfoExtraMapper.insertSelective(userInfoExtra);
 		}
+		userActivedRecordService.add(new UserActivedRecord(uid));
 		
+
 		if (!Constant.IS_TEST) { // 鍙戦�佹縺娲绘垚鍔熸秷鎭�
 			Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.inviteCodeActive,
 					new Gson().toJson(new InviteCodeActiveMQMsg(uid, new Date())));
@@ -568,8 +579,9 @@
 				if (asInputStream == null) {
 					LogHelper.test("寰俊澶村儚涓嬭浇澶辫触: " + weiXinUser.getUnionid() + " " + headimgurl);
 				} else {
-					FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream, String.format(
-							FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(), System.currentTimeMillis() + ""));
+					FileUploadResult result = COSManager.getInstance().uploadFile(asInputStream,
+							String.format(FilePathEnum.userWXPortrait.getPath() + "%s_%s.jpg", weiXinUser.getUnionid(),
+									System.currentTimeMillis() + ""));
 					if (result != null && !StringUtil.isNullOrEmpty(result.getUrl())) {
 						headimgurl = result.getUrl();
 					} else {
@@ -621,6 +633,8 @@
 			userInfoExtraMapper.insertSelective(userInfoExtra);
 		}
 		
+		userActivedRecordService.add(new UserActivedRecord(uid));
+
 		if (!Constant.IS_TEST) { // 鍙戦�佹縺娲绘垚鍔熸秷鎭�
 			Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.inviteCodeActive,
 					new Gson().toJson(new InviteCodeActiveMQMsg(uid, new Date())));
@@ -822,7 +836,7 @@
 		userInfoExtraMapper.updateAutoExtract(days);
 	}
 
-	@Transactional(rollbackFor=Exception.class)
+	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void updateInviteCodeVip(String inviteCodeVip, Long uid) throws UserInfoExtraException {
 		if (inviteCodeVip == null || inviteCodeVip.length() < 4 || inviteCodeVip.length() > 12)
@@ -857,34 +871,34 @@
 		update.setInviteCodeVip(inviteCodeVip);
 		update.setUpdateTime(new Date());
 		userInfoExtraMapper.updateByPrimaryKeySelective(update);
-	   
-		if(!Constant.IS_TEST) { //鍙戦�侀個璇风爜鏇存敼鎴愬姛鐨勬秷鎭�
+
+		if (!Constant.IS_TEST) { // 鍙戦�侀個璇风爜鏇存敼鎴愬姛鐨勬秷鎭�
 			Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userInfoUpdate,
-					new Gson().toJson(new UserInfoUpdateMQMsg(uid, UserInfoUpdateTypeEnum.inviteCode, inviteCodeVip, new Date())));
+					new Gson().toJson(new UserInfoUpdateMQMsg(uid, UserInfoUpdateTypeEnum.inviteCode, inviteCodeVip,
+							new Date())));
 			producer.send(message);
 		}
 	}
-	
-	
+
 	@Override
 	public void uploadERCode(MultipartFile file, Long uid) {
 		UserInfoExtra extra = userInfoExtraMapper.getInfoExtraByUid(uid);
 		if (extra == null)
 			return;
-		
+
 		// 鍘嬬缉
-		String targetPath = FileUtil.getCacheDir() + "/erCode_" + uid + "_" + System.currentTimeMillis()+ ".jpg";
+		String targetPath = FileUtil.getCacheDir() + "/erCode_" + uid + "_" + System.currentTimeMillis() + ".jpg";
 		try {
 			Thumbnails.of(file.getInputStream()).size(200, 200).toFile(targetPath);
 		} catch (IOException e) {
 			LogHelper.errorDetailInfo(e);
 			return;
 		}
-		
+
 		// 鎵ц涓婁紶
 		String filePath = FilePathEnum.userERcode.getPath() + UUID.randomUUID().toString().replace("-", "") + ".jpg";
 		String fileLink = COSManager.getInstance().uploadFile(new File(targetPath), filePath).getUrl();
-	
+
 		// 鍒犻櫎鏈湴鍥剧墖
 		if (new File(targetPath).exists()) {
 			new File(targetPath).delete();
@@ -892,7 +906,7 @@
 
 		// 鍘熶簩缁寸爜
 		String erCode = extra.getErCode();
-		
+
 		UserInfoExtra update = new UserInfoExtra();
 		update.setId(extra.getId());
 		update.setErCode(fileLink);
@@ -903,4 +917,5 @@
 			COSManager.getInstance().deleteFile(erCode);
 		}
 	}
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java
index 2ef543d..e9ae937 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoServiceImpl.java
@@ -27,6 +27,7 @@
 import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
 import com.yeshi.fanli.dao.mybatis.UserShareGoodsHistoryMapper;
 import com.yeshi.fanli.dao.mybatis.share.ShareMapper;
+import com.yeshi.fanli.dto.user.UserInviteLevelEnum;
 import com.yeshi.fanli.entity.bus.user.BindingAccount;
 import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
@@ -655,4 +656,5 @@
 		return userInfoMapper.selectAvailableByPrimaryKey(uid);
 	}
 
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteServiceImpl.java
new file mode 100644
index 0000000..9654b6a
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteServiceImpl.java
@@ -0,0 +1,39 @@
+package com.yeshi.fanli.service.impl.user.invite;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import com.yeshi.fanli.dto.user.UserInviteLevelEnum;
+import com.yeshi.fanli.entity.bus.user.vip.UserVIPInfo;
+import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
+import com.yeshi.fanli.service.inter.user.invite.UserInviteService;
+import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
+import com.yeshi.fanli.util.StringUtil;
+
+@Service
+public class UserInviteServiceImpl implements UserInviteService {
+	@Resource
+	private UserInfoExtraService userInfoExtraService;
+
+	@Resource
+	private UserVIPInfoService userVIPInfoService;
+
+	@Override
+	public UserInviteLevelEnum getUserInviteLevel(Long uid) {
+		String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
+		if (StringUtil.isNullOrEmpty(inviteCode)) {
+			return UserInviteLevelEnum.noActive;
+		}
+		UserVIPInfo info = userVIPInfoService.selectByUid(uid);
+		if (info == null || info.getState() == UserVIPInfo.STATE_INVALID)
+			return UserInviteLevelEnum.actived;
+		if (info.getState() == UserVIPInfo.STATE_VERIFING)
+			return UserInviteLevelEnum.vipApply;
+
+		// TODO 娌℃湁鍒ゆ柇瀵煎笀
+
+		return UserInviteLevelEnum.vip;
+	}
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/notify/UserActivedRecordServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/notify/UserActivedRecordServiceImpl.java
new file mode 100644
index 0000000..07c62df
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/notify/UserActivedRecordServiceImpl.java
@@ -0,0 +1,53 @@
+package com.yeshi.fanli.service.impl.user.notify;
+
+import java.util.Date;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+
+import com.yeshi.fanli.dao.user.notify.UserActivedRecordDao;
+import com.yeshi.fanli.entity.bus.user.notify.UserActivedRecord;
+import com.yeshi.fanli.service.inter.user.notify.UserActivedRecordService;
+
+@Service
+public class UserActivedRecordServiceImpl implements UserActivedRecordService {
+
+	@Resource
+	private UserActivedRecordDao userActivedRecordDao;
+
+	@Override
+	public boolean canNotifyAddTearcher(Long uid) {
+		UserActivedRecord record = userActivedRecordDao.get(uid);
+		if (record == null)
+			return false;
+		if (record.getAddTearcherNotify() == null || record.getAddTearcherNotify() == false)
+			return true;
+		else
+			return false;
+	}
+
+	@Override
+	public void setTearcherNotified(Long uid) {
+		UserActivedRecord record = userActivedRecordDao.get(uid);
+		if (record == null)
+			return;
+		if (record.getAddTearcherNotify() == null || !record.getAddTearcherNotify()) {
+			record.setAddTearchNotifyTime(new Date());
+			record.setUpdateTime(new Date());
+			record.setAddTearcherNotify(true);
+			userActivedRecordDao.save(record);
+		}
+	}
+
+	@Override
+	public void add(UserActivedRecord record) {
+		UserActivedRecord old = userActivedRecordDao.get(record.getUid());
+		if (old != null)
+			return;
+		if (record.getCreateTime() == null)
+			record.setCreateTime(new Date());
+		userActivedRecordDao.save(record);
+	}
+
+}
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 0a913a1..c1dcae6 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
@@ -49,42 +49,41 @@
 
 	@Resource
 	private UserVIPInfoMapper userVIPInfoMapper;
-	
+
 	@Resource
 	private UserInfoService userInfoService;
-	
+
 	@Resource
 	private UserInfoExtraService userInfoExtraService;
-	
+
 	@Resource
 	private UserVipConfigService userVipConfigService;
-	
+
 	@Lazy
 	@Resource
 	private HongBaoV2CountService hongBaoV2CountService;
-	
+
 	@Resource
 	private IntegralDetailService integralDetailService;
-	
+
 	@Resource
 	private BanLiShopOrderService banLiShopOrderService;
-	
+
 	@Resource
 	private UserOtherMsgNotificationService userOtherMsgNotificationService;
-	
+
 	@Resource
 	private ThreeSaleSerivce threeSaleSerivce;
-	
+
 	@Resource
 	private UserInviteSeparateService userInviteSeparateService;
-	
+
 	@Resource
 	private ConfigService configService;
-	
+
 	@Lazy
 	@Resource
 	private UserSystemCouponService userSystemCouponService;
-
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -112,25 +111,25 @@
 		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绂忓埄");
@@ -140,54 +139,55 @@
 		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(), 
+				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(), 
+				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) 
+		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(configService.get(ConfigKeyEnum.inviteSeparateLimitDays.getKey()));
 		UserInviteSeparate inviteSeparate = new UserInviteSeparate();
@@ -198,16 +198,16 @@
 		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.setContent1(userInfo.getNickName() + " " + uid);
 		msgboss.setContent2("浜�" + TimeUtil.formatDateDot(new Date()) + "鎴愬姛鍗囩骇鎴愪负瓒呯骇浼氬憳");
-		msgboss.setContent3("浠婃棩璧�"+limitDays+"澶╁唴锛屼綘鏈兘鎴愪负瓒呯骇浼氬憳灏嗕細涓庡叾鑴辩閭�璇峰叧绯� ");
+		msgboss.setContent3("浠婃棩璧�" + limitDays + "澶╁唴锛屼綘鏈兘鎴愪负瓒呯骇浼氬憳灏嗕細涓庡叾鑴辩閭�璇峰叧绯� ");
 		userOtherMsgNotificationService.teamVIPCallBoss(bossId, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgboss);
 	}
-	
+
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void rejectVIPApply(Long uid, String reason) throws UserVIPInfoException {
@@ -224,7 +224,7 @@
 		info.setState(UserVIPInfo.STATE_INVALID);
 		info.setUpdateTime(new Date());
 		userVIPInfoMapper.updateByPrimaryKeySelective(info);
-		
+
 		// 娑堟伅
 		MsgOtherVIPDTO msgOther = new MsgOtherVIPDTO();
 		msgOther.setContent1("寰堟姳姝夛紝鏈�氳繃瓒呯骇浼氬憳鐢宠");
@@ -288,20 +288,19 @@
 		return map;
 	}
 
-	
 	@Override
 	public boolean verifyConform(Long uid) {
 		if (uid == null || uid <= 0)
 			return false;
-		
+
 		UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid);
-		if (extra == null) 
+		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 = hongBaoV2CountService.countValidOrderTeamUserByUid(uid,
+				TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney);
 
 		// 鍖哄垎鑰佺敤鎴峰拰鏂扮敤鎴�
 		String limtDate = userVipConfigService.getValueByKey("vip_execute_time");
@@ -314,7 +313,7 @@
 		}
 		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)
@@ -324,19 +323,19 @@
 			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);
@@ -344,73 +343,74 @@
 		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){
-		return userVIPInfoMapper.listQuery((page-1) * count, count, key, state);
+	public List<UserVIPInfo> listQuery(int page, int count, String key, Integer state) {
+		return userVIPInfoMapper.listQuery((page - 1) * count, count, key, state);
 	}
-	
+
 	@Override
-	public long countQuery(String key, Integer state){
+	public long countQuery(String key, Integer state) {
 		return userVIPInfoMapper.countQuery(key, state);
 	}
-	
-	
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void inviteSeparate(Long workerId, Long bossId) {
 		if (workerId == null || bossId == null)
 			return;
-		
+
 		// 鏌ヨ璁板綍
 		UserInviteSeparate userInviteSeparate = userInviteSeparateService.selectByWorkerIdAndBossId(workerId, bossId);
 		if (userInviteSeparate == null)
 			return;
-		
+
 		// 鏄惁瀛樺湪閭�璇峰叧绯�
 		ThreeSale threeSale = threeSaleSerivce.getMyBoss(workerId);
-		if (threeSale == null) 
+		if (threeSale == null)
 			return;
 		Long bossIdExist = threeSale.getBoss().getId();
 		if (bossIdExist == null || bossId.longValue() != bossIdExist.longValue())
 			return;
-		
+
 		// 涓婄骇浼氬憳鎯呭喌
 		boolean separate = false;
 		UserVIPInfo userVIPInfo = userVIPInfoMapper.selectByPrimaryKey(bossId);
-		if (userVIPInfo != null && userVIPInfo.getState() != null && userVIPInfo.getState() == UserVIPInfo.STATE_SUCCESS) {
+		if (userVIPInfo != null && userVIPInfo.getState() != null
+				&& userVIPInfo.getState() == UserVIPInfo.STATE_SUCCESS) {
 			if (userInviteSeparate.getEndTime().getTime() < userVIPInfo.getSuccessTime().getTime()) {
 				separate = true; // 缁撴潫鏃堕棿宸茬粡瓒呰繃
 			}
 		} else {
-			separate = true; // 涓婄骇闈炰細鍛� 
+			separate = true; // 涓婄骇闈炰細鍛�
 		}
-		
+
 		if (!separate) {
 			// 鏈劚绂�
-			userInviteSeparateService.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_INVALID);
+			userInviteSeparateService.updateStateByWorkerIdAndBossId(workerId, bossId,
+					UserInviteSeparate.STATE_INVALID);
 		} else {
 			// 鑴辩鍏崇郴
-			userInviteSeparateService.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_SUCCESS);
-			
+			userInviteSeparateService.updateStateByWorkerIdAndBossId(workerId, bossId,
+					UserInviteSeparate.STATE_SUCCESS);
+
 			// 鑴辩閭�璇峰叧绯�
 			threeSaleSerivce.inviteSeparate(workerId, bossId);
-			
+
 			int limitDays = Integer.parseInt(configService.get(ConfigKeyEnum.inviteSeparateLimitDays.getKey()));
 			// 娑堟伅
 			UserInfo userInfo = userInfoService.selectByPKey(workerId);
 			MsgOtherVIPDTO msgboss = new MsgOtherVIPDTO();
-			msgboss.setContent1(userInfo.getNickName() + workerId + "浜�" +TimeUtil.formatDateDot(userInviteSeparate.getCreateTime())+"鎴愬姛鍗囩骇鎴愪负瓒呯骇浼氬憳 ");
-			msgboss.setContent2("寰堥仐鎲撅紝浣犳湭鑳藉湪"+limitDays+"澶╁崌绾т负瓒呯骇浼氬憳 ");
+			msgboss.setContent1(userInfo.getNickName() + workerId + "浜�"
+					+ TimeUtil.formatDateDot(userInviteSeparate.getCreateTime()) + "鎴愬姛鍗囩骇鎴愪负瓒呯骇浼氬憳 ");
+			msgboss.setContent2("寰堥仐鎲撅紝浣犳湭鑳藉湪" + limitDays + "澶╁崌绾т负瓒呯骇浼氬憳 ");
 			msgboss.setContent3("宸蹭笌鍏惰劚绂婚個璇峰叧绯�");
 			userOtherMsgNotificationService.teamSplitCallBoss(bossId, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgboss);
 		}
 	}
-	
-	
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java
index ef56f3f..dd32f17 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/order/config/HongBaoManageService.java
@@ -188,4 +188,19 @@
 	 */
 	public ConfigParamsDTO getShowComputeRate(String platform, String version);
 
+	/**
+	 * 鑾峰彇鍩虹鐨勮繑鍒╂瘮渚�
+	 * 
+	 * @param time
+	 * @return
+	 */
+	public BigDecimal getBaseFanliRate(long time);
+
+	/**
+	 * 鑾峰彇鍩虹鐨勮繑鍒╂瘮渚�
+	 * 
+	 * @return
+	 */
+	public BigDecimal getBaseFanliRate();
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoExtraService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoExtraService.java
index c12ac4b..6b70da6 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoExtraService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoExtraService.java
@@ -5,6 +5,7 @@
 import org.apache.ibatis.annotations.Param;
 import org.springframework.web.multipart.MultipartFile;
 
+import com.yeshi.fanli.dto.user.UserInviteLevelEnum;
 import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
@@ -210,5 +211,5 @@
 	 * @param uid
 	 */
 	public void uploadERCode(MultipartFile file, Long uid);
-
+	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java
index e246837..8492404 100644
--- a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/UserInfoService.java
@@ -6,6 +6,7 @@
 
 import org.springframework.web.multipart.MultipartFile;
 
+import com.yeshi.fanli.dto.user.UserInviteLevelEnum;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.exception.user.UserInfoException;
 import com.yeshi.fanli.vo.user.UserInfoVO;
@@ -81,10 +82,11 @@
 	 * @return
 	 */
 	public List<UserInfoVO> query(long start, int count, Integer userState, String key, Integer keyType,
-			String userRank, Integer days, String startTime, String endTime, Integer orderField, Integer orderMode,Integer userType);
+			String userRank, Integer days, String startTime, String endTime, Integer orderField, Integer orderMode,
+			Integer userType);
 
 	public long queryCount(Integer userState, String key, Integer keyType, String userRank, Integer days,
-			String startTime, String endTime,Integer userType);
+			String startTime, String endTime, Integer userType);
 
 	public double querySumMoney(String key, Integer userType, Integer days, String startTime, String endTime);
 
@@ -226,4 +228,6 @@
 	 */
 	public UserInfo selectAvailableByPrimaryKey(Long uid);
 
+
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/UserInviteService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/UserInviteService.java
new file mode 100644
index 0000000..ec57a3e
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/UserInviteService.java
@@ -0,0 +1,13 @@
+package com.yeshi.fanli.service.inter.user.invite;
+
+import com.yeshi.fanli.dto.user.UserInviteLevelEnum;
+
+public interface UserInviteService {
+	/**
+	 * 鑾峰彇閭�璇风瓑绾�
+	 * 
+	 * @param uid
+	 * @return
+	 */
+	public UserInviteLevelEnum getUserInviteLevel(Long uid);
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/service/inter/user/notify/UserActivedRecordService.java b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/notify/UserActivedRecordService.java
new file mode 100644
index 0000000..1eae8fe
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/service/inter/user/notify/UserActivedRecordService.java
@@ -0,0 +1,29 @@
+package com.yeshi.fanli.service.inter.user.notify;
+
+import com.yeshi.fanli.entity.bus.user.notify.UserActivedRecord;
+
+public interface UserActivedRecordService {
+
+	/**
+	 * 鏄惁鍙互鎻愰啋鐢ㄦ埛娣诲姞瀵煎笀
+	 * 
+	 * @param uid
+	 * @return
+	 */
+	public boolean canNotifyAddTearcher(Long uid);
+
+	/**
+	 * 璁剧疆娣诲姞瀵煎笀涓哄凡缁忔彁閱�
+	 * 
+	 * @param uid
+	 */
+	public void setTearcherNotified(Long uid);
+	
+	
+	/**
+	 * 娣诲姞鏁版嵁
+	 * @param record
+	 */
+	public void add(UserActivedRecord record);
+
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/util/Constant.java b/fanli/src/main/java/com/yeshi/fanli/util/Constant.java
index 301ee5e..309a32f 100644
--- a/fanli/src/main/java/com/yeshi/fanli/util/Constant.java
+++ b/fanli/src/main/java/com/yeshi/fanli/util/Constant.java
@@ -26,7 +26,7 @@
 
 	public static int PAGE_SIZE = 20;
 
-	public static String YINGYONGBAO_LINK = "https://a.app.qq.com/o/simple.jsp?pkgname=com.yeshi.ec.rebate";
+	public static String YINGYONGBAO_LINK = "https://w.url.cn/s/AHUuT7i";
 
 	public final static String UIDAESKEY = "WW782ss@8*px/%2v";
 
diff --git a/fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java b/fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java
index c519bd8..81389cc 100644
--- a/fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java
+++ b/fanli/src/main/java/com/yeshi/fanli/util/factory/goods/GoodsDetailVOFactory.java
@@ -167,13 +167,21 @@
 		BigDecimal commission = CommonGoodsUtil.getCommission(goods, params.getFanLiRate());
 		moneyInfoVO.setFanliMoney("楼" + commission);
 
+		BigDecimal maxCommission = CommonGoodsUtil.getCommission(goods, params.getVipFanLiRate());
 		if (params.getMaxRewardRate() != null)
 			moneyInfoVO
 					.setMaxMoney("楼" + commission.add(MoneyBigDecimalUtil.mul(commission, params.getMaxRewardRate())));
 		else
-			moneyInfoVO.setMaxMoney("楼" + CommonGoodsUtil.getCommission(goods, params.getVipFanLiRate()));
+			moneyInfoVO.setMaxMoney("楼" + maxCommission);
 
 		moneyInfoVO.setShareMoney(CommonGoodsUtil.getCommissionInfo(goods, params.getShareRate()));
+
+		moneyInfoVO.setRateInfo("杩斿埄姣� " + MoneyBigDecimalUtil.div(commission.multiply(new BigDecimal(100)),
+				CommonGoodsUtil.getAfterUseCouplePrice(goods)) + "%");
+		
+		moneyInfoVO.setMaxRateInfo("杩斿埄姣� " + MoneyBigDecimalUtil.div(maxCommission.multiply(new BigDecimal(100)),
+				CommonGoodsUtil.getAfterUseCouplePrice(goods)) + "%");
+
 		goodsInfo.setMoneyInfo(moneyInfoVO);
 
 		// 鍒镐俊鎭�
@@ -408,7 +416,9 @@
 		moneyInfoVO.setMoneyType(1); // 榛樿鏄剧ず锛氳繑 楼6.6
 
 		BigDecimal commission = TaoBaoUtil.getGoodsHongBaoMoney(goods, params.getFanLiRate());
-
+		BigDecimal baseCommisstion = null;
+		if (params.getBaseFanliRate() != null)
+			baseCommisstion = TaoBaoUtil.getGoodsHongBaoMoney(goods, params.getBaseFanliRate());
 		moneyInfoVO.setFanliMoney("楼" + commission);
 		if (params.getMaxRewardRate() != null)
 			moneyInfoVO
@@ -423,8 +433,18 @@
 			BigDecimal maxRate = MoneyBigDecimalUtil.div(maxCommission.multiply(new BigDecimal(100)), price);
 			moneyInfoVO.setMaxRateInfo("杩斿埄姣� " + maxRate + "%");
 			moneyInfoVO.setMaxMoney("楼" + maxCommission);
+			if (baseCommisstion != null) {
+				String desc = String.format("浣i噾楼 %s+骞冲彴琛ヨ创楼 %s", baseCommisstion.setScale(2).toString(),
+						commission.subtract(baseCommisstion).setScale(2).toString());
+				String maxDesc = String.format("浣i噾楼 %s+骞冲彴琛ヨ创楼 %s", baseCommisstion.setScale(2).toString(),
+						maxCommission.subtract(baseCommisstion).setScale(2).toString());
+				moneyInfoVO.setCompositionInfo(desc);
+				moneyInfoVO.setMaxCompositionInfo(maxDesc);
+			}
 		}
+
 		moneyInfoVO.setShareMoney(TaoBaoUtil.getGoodsHongBaoInfo(goods, params.getShareRate()));
+
 		goodsInfo.setMoneyInfo(moneyInfoVO);
 
 		// 鍒镐俊鎭�
@@ -586,6 +606,10 @@
 		moneyInfoVO.setMoneyType(1); // 榛樿鏄剧ず锛氳繑 楼6.6
 		BigDecimal commission = JDUtil.getGoodsFanLiMoney(goods, params.getFanLiRate());
 		moneyInfoVO.setFanliMoney("楼" + commission);
+		BigDecimal baseCommisstion = null;
+		if (params.getBaseFanliRate() != null)
+			baseCommisstion = JDUtil.getGoodsFanLiMoney(goods, params.getBaseFanliRate());
+
 		if (params.getMaxRewardRate() != null)
 			moneyInfoVO
 					.setMaxMoney("楼" + commission.add(MoneyBigDecimalUtil.mul(commission, params.getMaxRewardRate())));
@@ -598,6 +622,15 @@
 			BigDecimal maxRate = MoneyBigDecimalUtil.div(maxCommission.multiply(new BigDecimal(100)), price);
 			moneyInfoVO.setMaxRateInfo("杩斿埄姣� " + maxRate + "%");
 			moneyInfoVO.setMaxMoney("楼" + maxCommission);
+
+			if (baseCommisstion != null) {
+				String desc = String.format("浣i噾楼 %s+骞冲彴琛ヨ创楼 %s", baseCommisstion.setScale(2).toString(),
+						commission.subtract(baseCommisstion).setScale(2).toString());
+				String maxDesc = String.format("浣i噾楼 %s+骞冲彴琛ヨ创楼 %s", baseCommisstion.setScale(2).toString(),
+						maxCommission.subtract(baseCommisstion).setScale(2).toString());
+				moneyInfoVO.setCompositionInfo(desc);
+				moneyInfoVO.setMaxCompositionInfo(maxDesc);
+			}
 		}
 		moneyInfoVO.setShareMoney("楼" + JDUtil.getGoodsFanLiMoney(goods, params.getShareRate()));
 		goodsInfo.setMoneyInfo(moneyInfoVO);
@@ -780,6 +813,10 @@
 			goodsInfo.setCouponInfo(coupon);
 		}
 
+		BigDecimal baseCommisstion = null;
+		if (params.getBaseFanliRate() != null)
+			baseCommisstion = PinDuoDuoUtil.getGoodsFanLiMoney(goods, params.getBaseFanliRate());
+
 		if (params.getMaxRewardRate() != null)
 			moneyInfoVO
 					.setMaxMoney("楼" + commission.add(MoneyBigDecimalUtil.mul(commission, params.getMaxRewardRate())));
@@ -793,6 +830,15 @@
 			moneyInfoVO.setMaxRateInfo("杩斿埄姣� " + maxRate + "%");
 
 			moneyInfoVO.setMaxMoney("楼" + maxCommission);
+
+			if (baseCommisstion != null) {
+				String desc = String.format("浣i噾楼 %s+骞冲彴琛ヨ创楼 %s", baseCommisstion.setScale(2).toString(),
+						commission.subtract(baseCommisstion).setScale(2).toString());
+				String maxDesc = String.format("浣i噾楼 %s+骞冲彴琛ヨ创楼 %s", baseCommisstion.setScale(2).toString(),
+						maxCommission.subtract(baseCommisstion).setScale(2).toString());
+				moneyInfoVO.setCompositionInfo(desc);
+				moneyInfoVO.setMaxCompositionInfo(maxDesc);
+			}
 		}
 		goodsInfo.setMoneyInfo(moneyInfoVO);
 
@@ -822,5 +868,4 @@
 		return goodsInfo;
 	}
 
-	
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java b/fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java
index 314b361..84c79cb 100644
--- a/fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java
+++ b/fanli/src/main/java/com/yeshi/fanli/util/jd/JDApiUtil.java
@@ -145,33 +145,41 @@
 
 	public static String convertLinkWithSubUnionId(String materialId, String couponUrl, String positionId,
 			String subUnionId) {
-		JSONObject json = new JSONObject();
-		json.put("materialId", materialId);
-		json.put("siteId", APP_ID);
-		json.put("positionId", positionId);
+		String log = "浜笢杞摼鍑洪敊:";
+		try {
+			JSONObject json = new JSONObject();
+			json.put("materialId", materialId);
+			json.put("siteId", APP_ID);
+			json.put("positionId", positionId);
 
-		if (!StringUtil.isNullOrEmpty(couponUrl))
-			json.put("couponUrl", couponUrl);
+			if (!StringUtil.isNullOrEmpty(couponUrl))
+				json.put("couponUrl", couponUrl);
 
-		if (!StringUtil.isNullOrEmpty(subUnionId))
-			json.put("subUnionId", subUnionId);
+			if (!StringUtil.isNullOrEmpty(subUnionId))
+				json.put("subUnionId", subUnionId);
 
-		// 1锛氶暱閾撅紝 2 锛氱煭閾� 锛�3锛� 闀块摼+鐭摼
-		json.put("chainType", 3);
-		JSONObject root = new JSONObject();
-		root.put("promotionCodeReq", json);
+			// 1锛氶暱閾撅紝 2 锛氱煭閾� 锛�3锛� 闀块摼+鐭摼
+			json.put("chainType", 3);
+			JSONObject root = new JSONObject();
+			root.put("promotionCodeReq", json);
 
-		String result = baseRequest2("jd.union.open.promotion.bysubunionid.get", null, root);
+			String result = baseRequest2("jd.union.open.promotion.bysubunionid.get", null, root);
 
-		JSONObject resultJson = JSONObject.fromObject(result);
-		result = resultJson.optJSONObject("jd_union_open_promotion_bysubunionid_get_response").optString("result");
-		System.out.println(result);
-		if (result == null) {
-			return null;
+			log += json.toString() + "####" + result;
+			JSONObject resultJson = JSONObject.fromObject(result);
+			result = resultJson.optJSONObject("jd_union_open_promotion_bysubunionid_get_response").optString("result");
+			System.out.println(result);
+			if (result == null) {
+				return null;
+			}
+
+			resultJson = JSONObject.fromObject(result);
+			return resultJson.optJSONObject("data").optString("shortURL");
+		} catch (Exception e) {
+			LogHelper.error(log);
 		}
 
-		resultJson = JSONObject.fromObject(result);
-		return resultJson.optJSONObject("data").optString("shortURL");
+		return null;
 	}
 
 	public static JDGoods queryGoodsDetail(Long skuId) {
diff --git a/fanli/src/main/java/com/yeshi/fanli/vo/goods/MoneyInfoVO.java b/fanli/src/main/java/com/yeshi/fanli/vo/goods/MoneyInfoVO.java
index df4a1d9..6680f54 100644
--- a/fanli/src/main/java/com/yeshi/fanli/vo/goods/MoneyInfoVO.java
+++ b/fanli/src/main/java/com/yeshi/fanli/vo/goods/MoneyInfoVO.java
@@ -4,7 +4,7 @@
 
 import com.google.gson.annotations.Expose;
 
-public class MoneyInfoVO implements Serializable{
+public class MoneyInfoVO implements Serializable {
 	/**
 	 * 
 	 */
@@ -18,12 +18,31 @@
 	@Expose
 	private String maxMoney;// 鏈�楂樿繑鍥�
 	@Expose
-	private String rateInfo;//姣斾緥淇℃伅
+	private String rateInfo;// 姣斾緥淇℃伅
 	@Expose
-	private String rateInfoHelpUrl;//姣斾緥甯姪閾炬帴
+	private String rateInfoHelpUrl;// 姣斾緥甯姪閾炬帴
+	@Expose
+	private String compositionInfo;// 鏋勬垚淇℃伅
+
+	private String maxRateInfo;// 鏈�澶ф瘮渚嬩俊鎭�
 	
-	private String maxRateInfo;//鏈�澶ф瘮渚嬩俊鎭�
-	
+	private String maxCompositionInfo;//鏈�澶ф瀯鎴愪俊鎭�
+
+	public String getMaxCompositionInfo() {
+		return maxCompositionInfo;
+	}
+
+	public void setMaxCompositionInfo(String maxCompositionInfo) {
+		this.maxCompositionInfo = maxCompositionInfo;
+	}
+
+	public String getCompositionInfo() {
+		return compositionInfo;
+	}
+
+	public void setCompositionInfo(String compositionInfo) {
+		this.compositionInfo = compositionInfo;
+	}
 
 	public String getMaxRateInfo() {
 		return maxRateInfo;
@@ -80,5 +99,5 @@
 	public void setMaxMoney(String maxMoney) {
 		this.maxMoney = maxMoney;
 	}
-	
+
 }
diff --git a/fanli/src/main/java/com/yeshi/fanli/vo/user/UserDialogBtnVO.java b/fanli/src/main/java/com/yeshi/fanli/vo/user/UserDialogBtnVO.java
new file mode 100644
index 0000000..6ed2056
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/vo/user/UserDialogBtnVO.java
@@ -0,0 +1,42 @@
+package com.yeshi.fanli.vo.user;
+
+import com.yeshi.fanli.entity.common.JumpDetailV2;
+
+import net.sf.json.JSONObject;
+
+public class UserDialogBtnVO {
+	private String name;
+	private JumpDetailV2 jumpDetail;
+	private JSONObject params;
+
+	public UserDialogBtnVO(String name, JumpDetailV2 jumpDetail, JSONObject params) {
+		super();
+		this.name = name;
+		this.jumpDetail = jumpDetail;
+		this.params = params;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public JumpDetailV2 getJumpDetail() {
+		return jumpDetail;
+	}
+
+	public void setJumpDetail(JumpDetailV2 jumpDetail) {
+		this.jumpDetail = jumpDetail;
+	}
+
+	public JSONObject getParams() {
+		return params;
+	}
+
+	public void setParams(JSONObject params) {
+		this.params = params;
+	}
+}
diff --git a/fanli/src/main/java/com/yeshi/fanli/vo/user/UserDialogVO.java b/fanli/src/main/java/com/yeshi/fanli/vo/user/UserDialogVO.java
new file mode 100644
index 0000000..7a260c3
--- /dev/null
+++ b/fanli/src/main/java/com/yeshi/fanli/vo/user/UserDialogVO.java
@@ -0,0 +1,69 @@
+package com.yeshi.fanli.vo.user;
+
+public class UserDialogVO {
+	private String id;
+	private boolean close;
+	private String title;
+	private String content;
+	private UserDialogBtnVO positive;
+	private UserDialogBtnVO negative;
+
+	public UserDialogVO(String id, boolean close, String title, String content, UserDialogBtnVO positive,
+			UserDialogBtnVO negative) {
+		super();
+		this.id = id;
+		this.close = close;
+		this.title = title;
+		this.content = content;
+		this.positive = positive;
+		this.negative = negative;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public boolean isClose() {
+		return close;
+	}
+
+	public void setClose(boolean close) {
+		this.close = close;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public UserDialogBtnVO getPositive() {
+		return positive;
+	}
+
+	public void setPositive(UserDialogBtnVO positive) {
+		this.positive = positive;
+	}
+
+	public UserDialogBtnVO getNegative() {
+		return negative;
+	}
+
+	public void setNegative(UserDialogBtnVO negative) {
+		this.negative = negative;
+	}
+}
diff --git a/utils/src/main/java/org/yeshi/utils/HttpUtil.java b/utils/src/main/java/org/yeshi/utils/HttpUtil.java
index 99c6035..161c024 100644
--- a/utils/src/main/java/org/yeshi/utils/HttpUtil.java
+++ b/utils/src/main/java/org/yeshi/utils/HttpUtil.java
@@ -623,6 +623,7 @@
 
 	/**
 	 * 鑾峰彇post杩斿洖location
+	 * 
 	 * @param url
 	 * @return
 	 */
diff --git a/utils/src/main/java/org/yeshi/utils/wx/WXUtil.java b/utils/src/main/java/org/yeshi/utils/wx/WXUtil.java
index 0d91cfb..3eaf0a9 100644
--- a/utils/src/main/java/org/yeshi/utils/wx/WXUtil.java
+++ b/utils/src/main/java/org/yeshi/utils/wx/WXUtil.java
@@ -219,4 +219,15 @@
 		String result = HttpUtil.post(url, root.toString());
 	}
 
+	public static String getShortUrl(String accessToken, String url) {
+
+		String requestUrl = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token=" + accessToken;
+		JSONObject data = new JSONObject();
+		data.put("action", "long2short");
+		data.put("long_url", url);
+		String result = HttpUtil.post(requestUrl, data.toString());
+		System.out.println(result);
+		return "";
+	}
+
 }

--
Gitblit v1.8.0