From 28cf328a098334b51a3e9d2d56f983fb8c862211 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期六, 23 五月 2020 09:54:38 +0800
Subject: [PATCH] 足迹、收藏订单兼容新需求

---
 fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserInfoController.java |  719 ++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 483 insertions(+), 236 deletions(-)

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 f076565..c9ad810 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
@@ -1,11 +1,6 @@
 package com.yeshi.fanli.controller.client.v1;
 
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.InvocationTargetException;
@@ -21,7 +16,6 @@
 import java.util.UUID;
 
 import javax.annotation.Resource;
-import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.beanutils.PropertyUtils;
@@ -46,20 +40,27 @@
 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;
 import com.yeshi.fanli.entity.bus.user.AccountMessage;
+import com.yeshi.fanli.entity.bus.user.BindRemind;
 import com.yeshi.fanli.entity.bus.user.BindingAccount;
 import com.yeshi.fanli.entity.bus.user.Extract;
 import com.yeshi.fanli.entity.bus.user.ExtractRecord;
 import com.yeshi.fanli.entity.bus.user.LostOrder;
+import com.yeshi.fanli.entity.bus.user.PreviewInfo.PreviewEnum;
 import com.yeshi.fanli.entity.bus.user.SMSHistory;
 import com.yeshi.fanli.entity.bus.user.ThreeSale;
 import com.yeshi.fanli.entity.bus.user.ThreeSaleExtraInfo;
 import com.yeshi.fanli.entity.bus.user.UserActiveLog;
 import com.yeshi.fanli.entity.bus.user.UserInfo;
 import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
+import com.yeshi.fanli.entity.bus.user.UserInfoModifyRecord.ModifyTypeEnum;
 import com.yeshi.fanli.entity.bus.user.WeiXinUser;
+import com.yeshi.fanli.entity.bus.user.vip.GiveVIPApplyInfo;
+import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
 import com.yeshi.fanli.entity.common.AdminUser;
 import com.yeshi.fanli.entity.common.Config;
 import com.yeshi.fanli.entity.goods.CollectionGoodsV2;
@@ -67,46 +68,61 @@
 import com.yeshi.fanli.entity.money.UserMoneyDetail;
 import com.yeshi.fanli.entity.order.HongBaoOrder;
 import com.yeshi.fanli.entity.system.BusinessSystem;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
 import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
 import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBriefExtra;
-import com.yeshi.fanli.exception.BindingAccountException;
 import com.yeshi.fanli.exception.goods.CollectionGoodsException;
 import com.yeshi.fanli.exception.taobao.TaoKeApiException;
 import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
+import com.yeshi.fanli.exception.user.BindingAccountException;
 import com.yeshi.fanli.exception.user.UserCustomSettingsException;
 import com.yeshi.fanli.exception.user.UserInfoException;
 import com.yeshi.fanli.exception.user.UserInfoExtraException;
 import com.yeshi.fanli.log.LogHelper;
 import com.yeshi.fanli.service.AdminUserService;
+import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
 import com.yeshi.fanli.service.inter.config.AppVersionService;
 import com.yeshi.fanli.service.inter.config.BusinessSystemService;
 import com.yeshi.fanli.service.inter.config.ConfigService;
 import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
 import com.yeshi.fanli.service.inter.goods.CollectionGoodsV2Service;
-import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
-import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
-import com.yeshi.fanli.service.inter.hongbao.ThreeSaleExtraInfoSerivce;
-import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
+import com.yeshi.fanli.service.inter.money.extract.BindingAccountService;
+import com.yeshi.fanli.service.inter.money.extract.ExtractRecordService;
+import com.yeshi.fanli.service.inter.money.extract.ExtractService;
 import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
+import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
 import com.yeshi.fanli.service.inter.order.LostOrderService;
 import com.yeshi.fanli.service.inter.order.OrderService;
+import com.yeshi.fanli.service.inter.order.config.HongBaoManageService;
+import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService;
+import com.yeshi.fanli.service.inter.redpack.RedPackForbidService;
+import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinDetailService;
 import com.yeshi.fanli.service.inter.user.AccountMessageService;
-import com.yeshi.fanli.service.inter.user.BindingAccountService;
-import com.yeshi.fanli.service.inter.user.ExtractRecordService;
-import com.yeshi.fanli.service.inter.user.ExtractService;
+import com.yeshi.fanli.service.inter.user.BindRemindService;
 import com.yeshi.fanli.service.inter.user.MaskKeyService;
+import com.yeshi.fanli.service.inter.user.PreviewInfoService;
 import com.yeshi.fanli.service.inter.user.ShamUserService;
 import com.yeshi.fanli.service.inter.user.SpreadUserImgService;
 import com.yeshi.fanli.service.inter.user.UserAccountService;
 import com.yeshi.fanli.service.inter.user.UserActiveLogService;
 import com.yeshi.fanli.service.inter.user.UserCustomSettingsService;
 import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
+import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService;
 import com.yeshi.fanli.service.inter.user.UserInfoService;
-import com.yeshi.fanli.service.inter.user.UserMoneyDetailService;
+import com.yeshi.fanli.service.inter.user.UserRankService;
 import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService;
+import com.yeshi.fanli.service.inter.user.invite.TeamFansInfoService;
+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.GiveVIPApplyInfoService;
+import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
+import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
+import com.yeshi.fanli.service.manger.user.UserLevelManager;
 import com.yeshi.fanli.util.AESUtil;
 import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.FileUtil;
+import com.yeshi.fanli.util.FilePathEnum;
 import com.yeshi.fanli.util.GsonUtil;
 import com.yeshi.fanli.util.HongBaoUtil;
 import com.yeshi.fanli.util.RedisManager;
@@ -114,8 +130,10 @@
 import com.yeshi.fanli.util.ThreadUtil;
 import com.yeshi.fanli.util.TimeUtil;
 import com.yeshi.fanli.util.Utils;
+import com.yeshi.fanli.util.VersionUtil;
 import com.yeshi.fanli.util.account.UserUtil;
 import com.yeshi.fanli.util.annotation.RequestSerializableByKey;
+import com.yeshi.fanli.util.annotation.UserActive;
 import com.yeshi.fanli.util.email.MailSenderUtil;
 import com.yeshi.fanli.util.factory.AccountDetailsFactory;
 import com.yeshi.fanli.util.factory.HongBaoFactory;
@@ -123,11 +141,10 @@
 import com.yeshi.fanli.util.taobao.TaoBaoUtil;
 import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
 import com.yeshi.fanli.util.wx.WXLoginUtil;
+import com.yeshi.fanli.vo.user.MineInfoVO;
 import com.yeshi.fanli.vo.user.UserInfoExtraVO;
 import com.yeshi.fanli.vo.user.UserSettingsVO;
 
-import net.coobird.thumbnailator.Thumbnails;
-import net.coobird.thumbnailator.Thumbnails.Builder;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 
@@ -215,14 +232,54 @@
 
 	@Resource
 	private AccountMessageService accountMessageService;
-	
+
 	@Resource
 	private MaskKeyService maskKeyService;
-	
 
-	private static final String PASSWORD_MAX_ERROR = "password_max_error";
-	private static final String EXTRACT_MIN_MONEY = "extract_min_money";
-	private static final String EXTRACT_MAX_MONEY = "extract_max_money";
+	@Resource
+	private UserTaoLiJinDetailService userTaoLiJinDetailService;
+
+	@Resource
+	private UserInfoModifyRecordService userInfoModifyRecordService;
+
+	@Resource
+	private BindRemindService bindRemindService;
+
+	@Resource
+	private RedPackBalanceService redPackBalanceService;
+
+	@Resource
+	private UserRankService userRankService;
+
+	@Resource
+	private UserVIPInfoService userVIPInfoService;
+
+	@Resource
+	private UserVipConfigService userVipConfigService;
+
+	@Resource
+	private RedPackForbidService redPackForbidService;
+
+	@Resource
+	private UserInviteService userInviteService;
+
+	@Resource
+	private TeamFansInfoService teamFansInfoService;
+
+	@Resource
+	private UserLevelManager userLevelManager;
+
+	@Resource
+	private JumpDetailV2Service jumpDetailV2Service;
+
+	@Resource
+	private GiveVIPApplyInfoService giveVIPApplyInfoService;
+
+	@Resource
+	private PreviewInfoService previewInfoService;
+
+	private static final String EXTRACT_MIN_MONEY = ConfigKeyEnum.extractMoneyMin.getKey();
+	private static final String EXTRACT_MAX_MONEY = ConfigKeyEnum.extractMoneyMAX.getKey();
 
 	/**
 	 * 鑾峰彇鐢ㄦ埛淇℃伅
@@ -264,6 +321,8 @@
 				userActiveLog.setVersionCode(acceptData.getVersion());
 				userActiveLog.setOsVersion(acceptData.getOsVersion());
 				userActiveLog.setDeviceType(acceptData.getDeviceType());
+				userActiveLog.setDevice(acceptData.getDevice());
+
 				userActiveLogService.addUserActiveLog(userActiveLog);
 
 				outUserInfo(acceptData, out, remotIP, find, acceptData.getDevice());
@@ -292,7 +351,9 @@
 			int loginType = form.getLoginType();
 			// WeiXinUserParam wxParam = null;
 			// 濡傛灉鏄井淇$櫥闄嗭紝閭i渶瑕佸厛鑾峰彇鍒板井淇$殑unionid
-			WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
+			WXAccountInfoDTO account = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
+			WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, account.getAppId(),
+					account.getAppSecret());
 			if (loginType == Constant.WEIXIN && StringUtil.isNullOrEmpty(form.getWxUnionId())) {
 				// wxParam = WXinUtil.getWxParam(code);
 				if (weiXinUser == null) {
@@ -332,7 +393,7 @@
 				form.setPortrait(weiXinUser.getHeadimgurl());
 				String wxHeadImg = COSManager.getInstance()
 						.uploadFile(HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()),
-								Constant.WXHEADURL + UUID.randomUUID().toString())
+								FilePathEnum.userPortrait.getPath() + UUID.randomUUID().toString())
 						.getUrl();
 				form.setWxPic(wxHeadImg);
 				form.setNickName(weiXinUser.getNickname());
@@ -387,7 +448,11 @@
 												 * StringUtil.isNullOrEmpty(form
 												 * .getWxOpenId())
 												 */) {
-				WeiXinUser xinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
+
+				WXAccountInfoDTO account = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
+
+				WeiXinUser xinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, account.getAppId(),
+						account.getAppSecret());
 				if (xinUser == null) {
 					out.print(JsonUtil.loadFalseResult("鐧诲綍澶辫触"));
 					return;
@@ -399,7 +464,7 @@
 				form.setWxName(xinUser.getNickname());
 				String wxHeadImg = COSManager.getInstance()
 						.uploadFile(HttpUtil.getAsInputStream(xinUser.getHeadimgurl()),
-								Constant.WXHEADURL + UUID.randomUUID().toString())
+								FilePathEnum.userPortrait + UUID.randomUUID().toString())
 						.getUrl();
 				form.setWxPic(wxHeadImg);
 			} else if (formLoginType == Constant.TAOBAO) {
@@ -561,7 +626,7 @@
 			data.put("inviteList", String.format("http://%s/%s/client/share/friends_new_online.html",
 					Constant.systemCommonConfig.getProjectHost(), Constant.systemCommonConfig.getProjectName()));
 		else
-			data.put("inviteList", configService.get("team_list"));
+			data.put("inviteList", configService.get(ConfigKeyEnum.teamList.getKey()));
 
 		// 鐣岄潰鐘舵��
 		UserSettingsVO mySettings = null;
@@ -587,7 +652,9 @@
 		if (mySettings.getNoInvitationBonus() == null) {
 			mySettings.setNoInvitationBonus(0);
 		}
-
+		if (mySettings.getOpenSpreadHongBao() == null) {
+			mySettings.setOpenSpreadHongBao(0);
+		}
 		data.put("moduleState", mySettings);
 
 		int welfareCenterNews = 0;
@@ -598,7 +665,9 @@
 				welfareCenterNews = userInfoExtra.getCouponNews();
 			}
 
-			if (userInfoExtra.getInviteCode() != null && userInfoExtra.getInviteCode().trim().length() > 0) {
+			if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip())) {
+				invitCode = userInfoExtra.getInviteCodeVip();
+			} else {
 				invitCode = userInfoExtra.getInviteCode();
 			}
 		}
@@ -612,19 +681,14 @@
 		final UserInfo uuser = user;
 		ThreadUtil.run(new Runnable() {
 			public void run() {
-
-				try {
-					// 鑾峰彇閭�璇风爜锛氳嫢鏃犻個璇风爜涓斿瓨鍦ㄦ湁鏁堢殑闃熷憳鍏崇郴 鍒欒嚜鍔ㄧ敓鎴愰個璇风爜
-					userInfoExtraService.getUserInviteCode(uuser.getId());
-				} catch (UserInfoExtraException e) {
-					e.printStackTrace();
-				}
+				// 鑾峰彇閭�璇风爜锛氳嫢鏃犻個璇风爜涓斿瓨鍦ㄦ湁鏁堢殑闃熷憳鍏崇郴 鍒欒嚜鍔ㄧ敓鎴愰個璇风爜
+				userInfoExtraService.getInviteCodeByUid(uuser.getId());
 
 				LogHelper.userInfo(GsonUtil.toJsonExpose(uuser));
 				uuser.setLastLoginIp(remotIP);
 				uuser.setLastLoginTime(java.lang.System.currentTimeMillis());
 				userInfoService.updateLoginInfo(uuser);
-				// 鏇存柊鐢ㄦ埛闄勫姞淇℃伅锛岃�佺敤鎴蜂笉瀛樺湪鐨勯渶瑕佹坊鍔�
+				// 鐢ㄦ埛绛夌骇鏇存柊
 				try {
 					userInfoExtraService.updateUserRankByUid(uuser.getId());
 				} catch (UserInfoExtraException e) {
@@ -644,7 +708,9 @@
 		}
 		int loginType = form.getLoginType();
 		if (loginType == Constant.WEIXIN) {
-			WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code);
+			WXAccountInfoDTO account = Constant.getWXAccount(acceptData.getPlatform(), acceptData.getVersion());
+			WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUserWithSavePortrait(code, account.getAppId(),
+					account.getAppSecret());
 
 			if (weiXinUser == null) {
 				out.print(JsonUtil.loadFalseResult("缁戝畾澶辫触锛岀敤鎴峰紓甯歌閲嶈瘯锛�"));
@@ -665,7 +731,7 @@
 			find.setWxUnionId(weiXinUser.getUnionid());
 			String wxHeadImg = COSManager.getInstance()
 					.uploadFile(HttpUtil.getAsInputStream(weiXinUser.getHeadimgurl()),
-							Constant.WXHEADURL + UUID.randomUUID().toString())
+							FilePathEnum.userPortrait.getPath() + UUID.randomUUID().toString())
 					.getUrl();
 			find.setWxPic(wxHeadImg);
 		} else { // 缁戝畾娣樺疂
@@ -757,8 +823,8 @@
 		data.put("maxError", 1);
 		String minMoney = configService.get(EXTRACT_MIN_MONEY); // 鍗曠瑪鎻愮幇鐨勬渶灏忛噾棰�
 		String maxMoney = configService.get(EXTRACT_MAX_MONEY); // 鍗曠瑪鎻愮幇鐨勬渶灏忛噾棰�
-		String maxDayMoney = configService.get("extract_money_day"); // 姣忔棩鏈�澶ф彁鐜伴噾棰�
-		int maxDayCount = Integer.parseInt(configService.get("extract_count_day"));
+		String maxDayMoney = configService.get(ConfigKeyEnum.extractMoneyDay.getKey()); // 姣忔棩鏈�澶ф彁鐜伴噾棰�
+		int maxDayCount = Integer.parseInt(configService.get(ConfigKeyEnum.extractDayCount.getKey()));
 		ExtractRecord extractRecord = extractRecordService.getExtractRecordByUid(uid);
 		boolean canExtract = true;
 		String errorMsg = "";
@@ -773,8 +839,8 @@
 		data.put("canExtract", canExtract);
 		data.put("extractErrorMsg", errorMsg);
 
-		data.put("minMoney", minMoney);//鍗曠瑪鏈�浣�
-		data.put("maxMoney", maxMoney);//鍗曠瑪鏈�楂�
+		data.put("minMoney", minMoney);// 鍗曠瑪鏈�浣�
+		data.put("maxMoney", maxMoney);// 鍗曠瑪鏈�楂�
 		data.put("maxDayCount", maxDayCount);
 		data.put("bindingAccountList", gson.toJson(filterBindingAccount(bindingAccountList)));
 
@@ -819,8 +885,8 @@
 		}
 
 		String minMoney = configService.get(EXTRACT_MIN_MONEY); // 鍗曠瑪鎻愮幇鐨勬渶灏忛噾棰�
-		String maxDayMoney = configService.get("extract_money_day"); // 姣忔棩鏈�澶ф彁鐜伴噾棰�
-		int maxDayCount = Integer.parseInt(configService.get("extract_count_day"));
+		String maxDayMoney = configService.get(ConfigKeyEnum.extractMoneyDay.getKey()); // 姣忔棩鏈�澶ф彁鐜伴噾棰�
+		int maxDayCount = Integer.parseInt(configService.get(ConfigKeyEnum.extractDayCount.getKey()));
 		ExtractRecord extractRecord = extractRecordService.getExtractRecordByUid(uid);
 		boolean canExtract = true;
 		String errorMsg = "";
@@ -1081,7 +1147,7 @@
 	 * @param type
 	 * @param out
 	 */
-	@RequestSerializableByKey(key="uid")
+	@RequestSerializableByKey(key = "#uid")
 	@RequestMapping(value = "extractmoneynew", method = RequestMethod.POST)
 	public void extractMoneyNew(AcceptData acceptData, long uid, BigDecimal money, String vcode,
 			HttpServletRequest request, int type, PrintWriter out) {
@@ -1102,11 +1168,13 @@
 			return;
 		}
 
-		// 鍒ゆ柇鎵嬫満楠岃瘉鐮佺殑姝g‘鎬�
-		String oldCode = redisManager.getSMSVCode(user.getPhone(), SMSHistory.TYPE_LOGIN);
-		if (StringUtil.isNullOrEmpty(oldCode) || !oldCode.equalsIgnoreCase(vcode)) {
-			out.print(JsonUtil.loadFalseResult(90001, "楠岃瘉鐮侀敊璇�"));
-			return;
+		if (!Constant.IS_TEST) {
+			// 鍒ゆ柇鎵嬫満楠岃瘉鐮佺殑姝g‘鎬�
+			String oldCode = redisManager.getSMSVCode(user.getPhone(), SMSHistory.TYPE_LOGIN);
+			if (StringUtil.isNullOrEmpty(oldCode) || !oldCode.equalsIgnoreCase(vcode)) {
+				out.print(JsonUtil.loadFalseResult(90001, "楠岃瘉鐮侀敊璇�"));
+				return;
+			}
 		}
 
 		BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(),
@@ -1177,7 +1245,7 @@
 					}
 
 					long[] targetUids = new long[] { 3L, 4L };
-					Config config = configService.getConfig("extract_code_email_from");
+					Config config = configService.getConfig(ConfigKeyEnum.extractCodeEmailFrom.getKey());
 					String[] sts = config.getValue().split(",");
 					String account = sts[0];
 					String pwd = sts[1];
@@ -1196,9 +1264,9 @@
 		} else if (etype == 3) {
 			out.print(JsonUtil.loadFalseResult("鎻愮幇閲戦澶т簬鎴戠殑绾㈠寘"));
 		} else if (etype == 111) {
-			out.print(JsonUtil.loadFalseResult("鏇存崲浜嗘墜鏈哄彿鍚�7澶╁唴涓嶅厑璁告彁鐜�"));
+			out.print(JsonUtil.loadFalseResult("淇敼鎵嬫満鍙峰悗锛�7澶╁唴鏃犳硶鎻愮幇"));
 		} else if (etype == 110) {
-			out.print(JsonUtil.loadFalseResult(Constant.znxConfig.getExtractWrongMsg()));
+			out.print(JsonUtil.loadFalseResult("鏈夊敭鍚庤鍗曞皻鏈墸娆�"));
 		}
 
 	}
@@ -1346,39 +1414,49 @@
 		// count>0 鏈夋秷鎭�
 		int count = accountMessageService.getCanOpenCount(uid);
 		out.print(JsonUtil.loadTrueResult(count));
+
+		ThreadUtil.run(new Runnable() {
+			@Override
+			public void run() {
+				// 鐢ㄦ埛绛夌骇鏇存柊
+				try {
+					userInfoExtraService.updateUserRankByUid(uid);
+				} catch (Exception e) {
+					LogHelper.errorDetailInfo(e);
+				}
+			}
+		});
 	}
 
 	@RequestMapping("collectionGoods")
 	public void collectionGoods(AcceptData acceptData, long uid, long auctionId, int type, PrintWriter out) {
-		CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId);
-		if (type == 1) {
-			if (find != null) {
-				out.print(JsonUtil.loadFalseResult(""));
-				return;
-			}
-			try {
-				TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
-				collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
-				out.print(JsonUtil.loadTrueResult("鏀惰棌鎴愬姛"));
-			} catch (TaobaoGoodsDownException e) {
-				out.print(JsonUtil.loadFalseResult(1, "鍟嗗搧宸蹭笅鏋�"));
-			} catch (CollectionGoodsException e1) {
-				out.print(JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
-			}
-		} else {
-			if (find == null) {
-				out.print(JsonUtil.loadTrueResult("鍙栨秷鏀惰棌鎴愬姛"));
-				return;
-			} else {
+		try {
+			CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId,
+					Constant.SOURCE_TYPE_TAOBAO);
+			if (type == 1) {
+				if (find != null) {
+					out.print(JsonUtil.loadFalseResult(""));
+					return;
+				}
 				try {
-					collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId);
+					TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
+					collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
+					out.print(JsonUtil.loadTrueResult("鏀惰棌鎴愬姛"));
+				} catch (TaobaoGoodsDownException e) {
+					out.print(JsonUtil.loadFalseResult(1, "鍟嗗搧宸蹭笅鏋�"));
+				}
+			} else {
+				if (find == null) {
 					out.print(JsonUtil.loadTrueResult("鍙栨秷鏀惰棌鎴愬姛"));
-				} catch (CollectionGoodsException e) {
-					out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
+					return;
+				} else {
+					collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId, Constant.SOURCE_TYPE_TAOBAO);
+					out.print(JsonUtil.loadTrueResult("鍙栨秷鏀惰棌鎴愬姛"));
 				}
 			}
+		} catch (CollectionGoodsException e1) {
+			out.print(JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
 		}
-
 	}
 
 	/**
@@ -1391,30 +1469,40 @@
 	 * @param out
 	 */
 	@RequestMapping("collectionGoodsJp")
-	public void collectionGoodsJp(String callback, AcceptData acceptData, Long uid, Long auctionId, PrintWriter out) {
+	public void collectionGoodsJp(String callback, AcceptData acceptData, Long uid, Long auctionId, Integer goodsType,
+			PrintWriter out) {
 
 		if (uid == null || auctionId == null) {
 			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(""));
 			return;
 		}
 
-		CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId);
+		if (goodsType == null) {
+			goodsType = Constant.SOURCE_TYPE_TAOBAO;
+		}
+
+		CollectionGoodsV2 find = collectionGoodsV2Service.findByUidAndAuctionId(uid, auctionId, goodsType);
 
 		if (find == null) {
-			// 娣诲姞鏀惰棌
-			try {
-				TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
-				collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
-				JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(1));
-			} catch (TaobaoGoodsDownException e) {
-				JsonUtil.printMode(out, callback, (JsonUtil.loadFalseResult(1, "鍟嗗搧宸蹭笅鏋�")));
-			} catch (CollectionGoodsException e1) {
-				JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
+			if (goodsType == Constant.SOURCE_TYPE_JD) {
+
+			} else if (goodsType == Constant.SOURCE_TYPE_PDD) {
+
+			} else {
+				try {
+					TaoBaoGoodsBrief taoBaoGoodsBrief = redisManager.getTaoBaoGoodsBrief(auctionId);
+					collectionGoodsV2Service.addCollection(uid, taoBaoGoodsBrief);
+					JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(1));
+				} catch (TaobaoGoodsDownException e) {
+					JsonUtil.printMode(out, callback, (JsonUtil.loadFalseResult(1, "鍟嗗搧宸蹭笅鏋�")));
+				} catch (CollectionGoodsException e1) {
+					JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e1.getCode(), e1.getMsg()));
+				}
 			}
 		} else {
 			// 鍙栨秷鏀惰棌
 			try {
-				collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId);
+				collectionGoodsV2Service.cancelCollectionByAuctionId(uid, auctionId, goodsType);
 				JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult("鍙栨秷鏀惰棌鎴愬姛"));
 			} catch (CollectionGoodsException e) {
 				JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
@@ -1427,11 +1515,11 @@
 	public void collectionGoodsList(AcceptData acceptData, long uid, int page, PrintWriter out) {
 
 		List<CollectionGoodsV2> collectionGoodsList = collectionGoodsV2Service.getCollectionGoodsList(uid, page + 1,
-				Constant.PAGE_SIZE);
+				Constant.PAGE_SIZE, Constant.SOURCE_TYPE_TAOBAO, true);
 
 		List<TaoBaoGoodsBriefExtra> list = new ArrayList<TaoBaoGoodsBriefExtra>();
 
-		long count = collectionGoodsV2Service.getCollectionGoodsCount(uid);
+		long count = collectionGoodsV2Service.getCollectionGoodsCount(uid, Constant.SOURCE_TYPE_TAOBAO, true);
 		JSONObject data = new JSONObject();
 
 		List<TaoBaoGoodsBrief> listTaoKeGoods = new ArrayList<TaoBaoGoodsBrief>();
@@ -1508,14 +1596,16 @@
 	}
 
 	@RequestMapping("deleteCollectionGoods")
-	public void deleteCollectionGoods(AcceptData acceptData, String ids, Integer type, long uid, PrintWriter out) {
+	public void deleteCollectionGoods(AcceptData acceptData, String ids, Integer type, long uid, Integer goodsType,
+			PrintWriter out) {
 		if (type != null && type == 1) {
 			clearConllectionGoods(acceptData, uid, out);
 		} else {
 			if (!StringUtil.isNullOrEmpty(ids)) {
 				Arrays.asList(ids.split(",")).parallelStream().forEach(auctionIdStr -> {
 					try {
-						collectionGoodsV2Service.cancelCollectionByAuctionId(uid, Long.parseLong(auctionIdStr));
+						collectionGoodsV2Service.cancelCollectionByAuctionId(uid, Long.parseLong(auctionIdStr),
+								goodsType);
 					} catch (Exception e) {
 						e.printStackTrace();
 					}
@@ -1613,19 +1703,17 @@
 
 			JSONObject resultData = new JSONObject();
 			if (type == 1) {
-				resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid, null);
+				resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid);
 			} else if (type == 2) {
-				resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid, null);
+				resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid);
 			}
 
 			// 瀹夊崜绯荤粺杩斿洖鎵�鏈夋暟鎹�
 			String platform = acceptData.getPlatform();
 			if ("android".equalsIgnoreCase(platform)) {
-				long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
-				long firstTeamTotal = threeSaleSerivce.countFirstTeam(uid, null);
+				long firstTeam = threeSaleSerivce.countFirstTeam(uid);
 
-				long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
-				long secondTeamTotal = threeSaleSerivce.countSecondTeam(uid, null);
+				long secondTeam = threeSaleSerivce.countSecondTeam(uid);
 
 				JSONObject bossData = null;
 				ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
@@ -1643,31 +1731,29 @@
 					bossData.put("inviteTime", "閭�璇锋椂闂�: " + sdf.format(inviteTime));
 				}
 
-				String helpLink = configService.get("team_help_url");
+				String helpLink = configService.get(ConfigKeyEnum.teamHelpUrl.getKey());
 				if (helpLink == null) {
 					helpLink = "";
 				}
 
 				boolean hasCode = false;
-				String inviteCode = userInfoExtraService.getUserInviteCode(uid);
+				String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
 				if (inviteCode != null && inviteCode.trim().length() > 0) {
 					hasCode = true; // 宸叉湁閭�璇风爜
 				} else {
 					// 閭�璇锋縺娲婚摼鎺�
-					resultData.put("activationlink", configService.get("invite_activation_url"));
+					resultData.put("activationlink", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
 				}
 				resultData.put("hasCode", hasCode);
 
 				resultData.put("helpLink", helpLink);
 				resultData.put("firstTeam", firstTeam);
-				resultData.put("firstTeamTotal", firstTeamTotal);
+				resultData.put("firstTeamTotal", firstTeam);
 				resultData.put("secondTeam", secondTeam);
-				resultData.put("secondTeamTotal", secondTeamTotal);
+				resultData.put("secondTeamTotal", secondTeam);
 				resultData.put("boss", bossData);
 			}
 			out.print(JsonUtil.loadTrueResult(resultData));
-		} catch (UserInfoExtraException e) {
-			out.print(JsonUtil.loadFalseResult(e.getMsg()));
 		} catch (Exception e) {
 			out.print(JsonUtil.loadFalseResult("缁熻澶辫触"));
 			e.printStackTrace();
@@ -1690,17 +1776,17 @@
 
 			JSONObject resultData = new JSONObject();
 			if (type == 1) {
-				resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid, 1);
+				resultData = threeSaleSerivce.getMyFirstTeam((page - 1) * pageSize, pageSize, uid);
 			} else if (type == 2) {
-				resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid, 1);
+				resultData = threeSaleSerivce.getMySecondTeam((page - 1) * pageSize, pageSize, uid);
 			}
 
 			// 瀹夊崜绯荤粺杩斿洖鎵�鏈夋暟鎹�
 			String platform = acceptData.getPlatform();
 			if ("android".equalsIgnoreCase(platform)) {
-				long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
+				long firstTeam = threeSaleSerivce.countFirstTeam(uid);
 
-				long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
+				long secondTeam = threeSaleSerivce.countSecondTeam(uid);
 
 				JSONObject bossData = null;
 				ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
@@ -1718,18 +1804,18 @@
 					bossData.put("inviteTime", "閭�璇锋椂闂�: " + sdf.format(inviteTime));
 				}
 
-				String helpLink = configService.get("team_help_url");
+				String helpLink = configService.get(ConfigKeyEnum.teamHelpUrl.getKey());
 				if (helpLink == null) {
 					helpLink = "";
 				}
 
 				boolean hasCode = false;
-				String inviteCode = userInfoExtraService.getUserInviteCode(uid);
+				String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
 				if (inviteCode != null && inviteCode.trim().length() > 0) {
 					hasCode = true; // 宸叉湁閭�璇风爜
 				} else {
 					// 閭�璇锋縺娲婚摼鎺�
-					resultData.put("activationlink", configService.get("invite_activation_url"));
+					resultData.put("activationlink", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
 				}
 				resultData.put("hasCode", hasCode);
 
@@ -1739,8 +1825,6 @@
 				resultData.put("boss", bossData);
 			}
 			out.print(JsonUtil.loadTrueResult(resultData));
-		} catch (UserInfoExtraException e) {
-			out.print(JsonUtil.loadFalseResult(e.getMsg()));
 		} catch (Exception e) {
 			out.print(JsonUtil.loadFalseResult("缁熻澶辫触"));
 			e.printStackTrace();
@@ -1757,11 +1841,9 @@
 	@RequestMapping(value = "countMyTeam", method = RequestMethod.POST)
 	public void countMyTeam(AcceptData acceptData, long uid, PrintWriter out) {
 		try {
-			long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
-			long firstTeamTotal = threeSaleSerivce.countFirstTeam(uid, null);
+			long firstTeam = threeSaleSerivce.countFirstTeam(uid);
 
-			long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
-			long secondTeamTotal = threeSaleSerivce.countSecondTeam(uid, null);
+			long secondTeam = threeSaleSerivce.countSecondTeam(uid);
 			JSONObject bossData = new JSONObject();
 			ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
 			if (threeSale != null) {
@@ -1779,36 +1861,33 @@
 
 			JSONObject resultData = new JSONObject();
 
-			String helpLink = configService.get("team_help_url");
+			String helpLink = configService.get(ConfigKeyEnum.teamHelpUrl.getKey());
 			if (helpLink == null) {
 				helpLink = "";
 			}
 			resultData.put("helpLink", helpLink);
 			resultData.put("firstTeam", firstTeam);
-			resultData.put("firstTeamTotal", firstTeamTotal);
+			resultData.put("firstTeamTotal", firstTeam);
 			resultData.put("secondTeam", secondTeam);
-			resultData.put("secondTeamTotal", secondTeamTotal);
+			resultData.put("secondTeamTotal", secondTeam);
 			resultData.put("boss", bossData);
 
 			boolean hasCode = false;
-			String inviteCode = userInfoExtraService.getUserInviteCode(uid);
+			String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
 			if (inviteCode != null && inviteCode.trim().length() > 0) {
 				hasCode = true; // 宸叉湁閭�璇风爜
 			} else {
 				// 閭�璇锋縺娲婚摼鎺�
-				resultData.put("activationlink", configService.get("invite_activation_url"));
+				resultData.put("activationlink", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
 			}
 			resultData.put("hasCode", hasCode);
 
 			out.print(JsonUtil.loadTrueResult(resultData));
 
-		} catch (UserInfoExtraException e) {
-			out.print(JsonUtil.loadFalseResult(e.getMsg()));
 		} catch (Exception e) {
 			out.print(JsonUtil.loadFalseResult("缁熻澶辫触"));
 			e.printStackTrace();
 		}
-
 	}
 
 	/**
@@ -1823,84 +1902,51 @@
 	 */
 	@RequestMapping(value = "setextrainfo", method = RequestMethod.POST)
 	public void setExtraInfo(AcceptData acceptData, long uid, long inviteId, String memoName, PrintWriter out) {
+		ThreeSale threeSale = threeSaleSerivce.selectByPrimaryKey(inviteId);
+		if (threeSale == null) {
+			out.print(JsonUtil.loadFalseResult("璇ヨ褰曚笉瀛樺湪"));
+			return;
+		}
 
-		try {
-			List<ThreeSale> listThreeSale = threeSaleSerivce.listbyIdAndBossId(inviteId, uid, null);
-			if (listThreeSale == null || listThreeSale.size() == 0) {
-				out.print(JsonUtil.loadFalseResult("璇ヨ褰曚笉瀛樺湪"));
-				return;
-			}
+		UserInfo worker = threeSale.getWorker();
+		if (worker == null) {
+			out.print(JsonUtil.loadFalseResult("璇ヨ褰曚笉瀛樺湪"));
+			return;
+		}
 
-			UserInfo worker = listThreeSale.get(0).getWorker();
-			if (worker == null) {
-				out.print(JsonUtil.loadFalseResult("璇ヨ褰曚笉瀛樺湪"));
-				return;
-			}
+		int type = 1;
+		if (threeSale.getBoss().getId() != uid) {
+			type = 2;
+		}
 
-			List<ThreeSaleExtraInfo> list = threeSaleExtraInfoSerivce.listbyBossIdAndWorkerId(uid, worker.getId());
-			if (list == null || list.size() == 0) {
-
-				ThreeSaleExtraInfo extraInfo = new ThreeSaleExtraInfo();
-				extraInfo.setWorker(worker);
-				extraInfo.setNickname(memoName);
-				extraInfo.setCreateTime(new Date());
-				extraInfo.setUpdateTime(new Date());
-
-				UserInfo boss = new UserInfo(uid);
-				extraInfo.setBoss(boss);
-
-				threeSaleExtraInfoSerivce.insert(extraInfo);
-
+		ThreeSaleExtraInfo extraInfo = threeSaleExtraInfoSerivce.getbyBossIdAndWorkerId(uid, worker.getId());
+		if (extraInfo == null) {
+			extraInfo = new ThreeSaleExtraInfo();
+			Long bossUid = threeSale.getBoss().getId();
+			if (uid == bossUid) {
+				extraInfo.setType(1); // 鐩存帴
 			} else {
-				ThreeSaleExtraInfo extraInfo = list.get(0);
-				extraInfo.setNickname(memoName);
-				extraInfo.setUpdateTime(new Date());
-				threeSaleExtraInfoSerivce.updateByPrimaryKey(extraInfo);
+				extraInfo.setType(2); // 闂存帴
 			}
 
-			out.print(JsonUtil.loadTrueResult("淇濆瓨鎴愬姛"));
-
-		} catch (Exception e) {
-			out.print(JsonUtil.loadFalseResult("淇濆瓨澶辫触"));
-			e.printStackTrace();
+			extraInfo.setWorker(worker);
+			extraInfo.setNickname(memoName);
+			extraInfo.setCreateTime(new Date());
+			extraInfo.setUpdateTime(new Date());
+			extraInfo.setBoss(new UserInfo(uid));
+			threeSaleExtraInfoSerivce.insertSelective(extraInfo);
+		} else {
+			ThreeSaleExtraInfo updateInfo = new ThreeSaleExtraInfo();
+			updateInfo.setId(extraInfo.getId());
+			updateInfo.setNickname(memoName);
+			updateInfo.setUpdateTime(new Date());
+			threeSaleExtraInfoSerivce.updateByPrimaryKeySelective(updateInfo);
 		}
 
-	}
+		// 鏇存柊绮変笣璁板綍淇℃伅
+		teamFansInfoService.updateMemoName(worker.getId(), type, memoName);
 
-	/**
-	 * 鍒犻櫎闃熷憳鍏崇郴
-	 * 
-	 * @param acceptData
-	 * @param uid
-	 * @param inviteId
-	 *            閭�璇穒d
-	 * @param out
-	 */
-	@RequestMapping(value = "removethreesale", method = RequestMethod.POST)
-	public void removethreesale(AcceptData acceptData, long uid, long inviteId, PrintWriter out) {
-		try {
-			List<ThreeSale> listThreeSale = threeSaleSerivce.listbyIdAndBossId(inviteId, uid, 1);
-			if (listThreeSale == null || listThreeSale.size() == 0) {
-				out.print(JsonUtil.loadFalseResult("鎿嶄綔鏁版嵁鏃犳晥"));
-				return;
-			}
-
-			UserInfo worker = listThreeSale.get(0).getWorker();
-			if (worker == null) {
-				out.print(JsonUtil.loadFalseResult("鎿嶄綔鏁版嵁鏃犳晥"));
-				return;
-			}
-
-			// 鍒犻櫎鍏崇郴
-			threeSaleSerivce.deleteByPrimaryKey(inviteId);
-			// 鍒犻櫎澶囨敞
-			threeSaleExtraInfoSerivce.deleteByBossIdAndWorkerId(uid, worker.getId());
-
-			out.print(JsonUtil.loadTrueResult("鍒犻櫎鎴愬姛"));
-		} catch (Exception e) {
-			out.print(JsonUtil.loadFalseResult("鍒犻櫎澶辫触"));
-			e.printStackTrace();
-		}
+		out.print(JsonUtil.loadTrueResult("淇濆瓨鎴愬姛"));
 	}
 
 	/**
@@ -1993,17 +2039,17 @@
 
 		try {
 
-			String inviteCode = userInfoExtraService.getUserInviteCode(uid);
+			String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
 
 			JSONObject inviteData = new JSONObject();
 			if (inviteCode == null || inviteCode.trim().length() == 0) {
 				// 鏃犻個璇风爜
 				inviteData.put("content", "閭�璇锋縺娲�");
-				inviteData.put("link", configService.get("invite_activation_url"));
+				inviteData.put("link", configService.get(ConfigKeyEnum.inviteActivationUrl.getKey()));
 			} else {
 				// 宸叉湁閭�璇风爜
 				inviteData.put("content", "閭�璇风爜");
-				inviteData.put("link", configService.get("invite_activation_success_url"));
+				inviteData.put("link", configService.get(ConfigKeyEnum.inviteActivationSuccessUrl.getKey()));
 			}
 
 			JSONObject data = new JSONObject();
@@ -2011,8 +2057,6 @@
 
 			out.print(JsonUtil.loadTrueResult(data));
 
-		} catch (UserInfoExtraException e) {
-			out.print(JsonUtil.loadFalseResult(e.getMsg()));
 		} catch (Exception e) {
 			out.print(JsonUtil.loadFalseResult("鑾峰彇澶辫触"));
 			e.printStackTrace();
@@ -2027,6 +2071,7 @@
 	 * @param requst
 	 * @param out
 	 */
+	@UserActive(uid = "#uid")
 	@RequestMapping(value = "getuserinfoNew", method = RequestMethod.POST)
 	public void getuserinfoNew(AcceptData acceptData, Long uid, HttpServletRequest requst, PrintWriter out) {
 		try {
@@ -2052,6 +2097,7 @@
 			userActiveLog.setVersionCode(acceptData.getVersion());
 			userActiveLog.setOsVersion(acceptData.getOsVersion());
 			userActiveLog.setDeviceType(acceptData.getDeviceType());
+			userActiveLog.setDevice(acceptData.getDevice());
 			userActiveLogService.addUserActiveLog(userActiveLog);
 
 			// 澶勭悊鐢ㄦ埛淇℃伅
@@ -2059,8 +2105,6 @@
 
 			GsonBuilder gsonBuilder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation();
 			JSONObject data = new JSONObject();
-			data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo));
-
 			// 鐣岄潰鐘舵��
 			UserSettingsVO mySettings = null;
 			try {
@@ -2085,8 +2129,21 @@
 			if (mySettings.getNoInvitationBonus() == null) {
 				mySettings.setNoInvitationBonus(0);
 			}
+
+			if (mySettings.getNoDisplayPhoneNum() == null) {
+				mySettings.setNoDisplayPhoneNum(0);
+			}
+
+			if (mySettings.getOpenSpreadHongBao() == null) {
+				if (userTaoLiJinDetailService.countDetail(uid) > 0) {
+					mySettings.setOpenSpreadHongBao(1);
+				} else {
+					mySettings.setOpenSpreadHongBao(0);
+				}
+			}
 			data.put("moduleState", mySettings);
 
+			boolean tailor = false;
 			int welfareCenterNews = 0;
 			String invitCode = null;
 			UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
@@ -2094,8 +2151,11 @@
 				if (userInfoExtra.getCouponNews() != null) {
 					welfareCenterNews = userInfoExtra.getCouponNews();
 				}
-
-				if (userInfoExtra.getInviteCode() != null && userInfoExtra.getInviteCode().trim().length() > 0) {
+				// vip閭�璇风爜浼樺厛
+				if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip())) {
+					invitCode = userInfoExtra.getInviteCodeVip();
+				} else if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode())) {
+					tailor = true;
 					invitCode = userInfoExtra.getInviteCode();
 				}
 
@@ -2108,21 +2168,151 @@
 					userInfo.setRankNamePicture(null);
 					userInfo.setRankIcon(null);
 				}
+
+				// 1.6.5 涔嬪悗杩斿洖鎬у埆銆佸井淇″彿
+				if (VersionUtil.greaterThan_1_6_5(acceptData.getPlatform(), acceptData.getVersion())) {
+					if (userInfoExtra.getSex() != null)
+						userInfo.setSex(userInfoExtra.getSex());
+
+					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("娣诲姞寰俊鍙峰悗锛屼綘鐨勯個璇蜂汉鍜岀洿鎺ョ矇涓濆彲浠ラ�氳繃寰俊涓庝綘寤虹珛鑱旂郴銆�");
+
+			// 鏌ヨ鏄惁涓篤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);
 			}
 
+			data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo));
 			data.put("invitCode", invitCode); // 閭�璇风爜
+			if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip()))
+				data.put("invitCodeUpdated", true);// 閭�璇风爜鏄惁宸茬粡淇敼杩�
+			else
+				data.put("invitCodeUpdated", false);
 			data.put("welfareCenterNews", welfareCenterNews);// 绂忓埄涓績娑堟伅
+			data.put("vipLink", userVipConfigService.getValueByKey("vip_link"));// 瓒呯骇浼氬憳鍗囩骇閾炬帴
+
+			// 2.0.1涔嬪悗缁戝畾鎵嬫満鍙�
+			if (VersionUtil.greaterThan_2_0_1(acceptData.getPlatform(), acceptData.getVersion())) {
+				boolean bindPhone = false;
+				if (StringUtil.isNullOrEmpty(userInfo.getPhone()))
+					bindPhone = bindRemindService.bindRemind(uid, BindRemind.TYPE_PHONE);
+				data.put("bindPhone", bindPhone);
+			}
+
+			if (!StringUtil.isNullOrEmpty(invitCode)) {
+				// 2.0.6 杩斿洖閭�璇蜂汉
+				if (VersionUtil.greaterThan_2_0_6(acceptData.getPlatform(), acceptData.getVersion())) {
+					String bossName = "";
+					ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid);
+					if (threeSale != null && threeSale.getBoss() != null) {
+						bossName = threeSale.getBoss().getNickName();
+					}
+					data.put("bossName", bossName);
+				}
+			}
+
+			if (VersionUtil.greaterThan_2_0_7(acceptData.getPlatform(), acceptData.getVersion())) {
+				UserInviteLevelEnum level = null;
+				// VIP棰勮淇℃伅
+				if (VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
+					String redisContent = previewInfoService.getRedisContent(uid, PreviewEnum.mineInfo);
+					if (!StringUtil.isNullOrEmpty(redisContent)) {
+						MineInfoVO vo = new Gson().fromJson(redisContent, MineInfoVO.class);
+						if (vo != null) {
+							if (!StringUtil.isNullOrEmpty(vo.getBalance()))
+								userInfo.setMyHongBao(new BigDecimal(vo.getBalance()));
+
+							if (!StringUtil.isNullOrEmpty(vo.getLevel()))
+								for (UserInviteLevelEnum levelEnum : UserInviteLevelEnum.values()) {
+									if (levelEnum.name().equals(vo.getLevel())) {
+										level = levelEnum;
+										break;
+									}
+								}
+						}
+					}
+				}
+
+				if (level == null) {
+					if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
+						level = userInviteService.getUserInviteLevelNew(uid);
+					} else {
+						level = userInviteService.getUserInviteLevel(uid);
+					}
+				}
+				JSONObject inviteLevel = new JSONObject();
+				inviteLevel.put("level", level.name());
+				inviteLevel.put("link", level.getLink());
+				data.put("inviteLevel", inviteLevel);
+			}
+
+			if (VersionUtil.greaterThan_2_1_1(acceptData.getPlatform(), acceptData.getVersion())) {
+				data.put("fansCountLink", configService.get(ConfigKeyEnum.teamStatisticsLink.getKey()));
+				// 浼氬憳鍔ㄤ綔
+				// 鏌ヨ鏄惁涓鸿秴绾т細鍛橈紝鏄殑璇濊繑鍥炶秴浼氱鐞嗛摼鎺�
+				UserLevelEnum level = userLevelManager.getUserLevel(uid);
+
+				JSONObject vipAction = null;
+				String managerLink = userVipConfigService.getValueByKey("vip_manager_link");
+				if ((level == UserLevelEnum.superVIP || level == UserLevelEnum.tearcher)
+						&& !StringUtil.isNullOrEmpty(managerLink)) {
+					vipAction = new JSONObject();
+					vipAction.put("name", "瓒呬細绠$悊");
+					vipAction.put("jumpDetail",
+							jumpDetailV2Service.getByTypeCache("web",
+									acceptData.getPlatform().equalsIgnoreCase("android") ? 1 : 2,
+									Integer.parseInt(acceptData.getVersion())));
+					JSONObject params = new JSONObject();
+					params.put("url", userVipConfigService.getValueByKey("vip_manager_link"));
+					vipAction.put("params", params);
+				} else {
+					// 鏌ヨ鏄惁鍙互鎻愪氦浼氬憳鐢宠锛屾槸鐨勮瘽杩斿洖璧勬枡濉啓椤甸潰
+					List<GiveVIPApplyInfo> list = giveVIPApplyInfoService.listByStateAndTargetUid(uid,
+							GiveVIPApplyInfo.STATE_NO_INFO, 1, 20);
+					if (list != null && list.size() > 0) {
+						String link = userVipConfigService.getValueByKey("apply_vip_upload_info_link");
+						if (!StringUtil.isNullOrEmpty(link)) {
+							vipAction = new JSONObject();
+							vipAction.put("name", "鐢宠浼氬憳");
+							vipAction.put("jumpDetail",
+									jumpDetailV2Service.getByTypeCache("web",
+											acceptData.getPlatform().equalsIgnoreCase("android") ? 1 : 2,
+											Integer.parseInt(acceptData.getVersion())));
+							JSONObject params = new JSONObject();
+							params.put("url", link.replace("[ID]", list.get(0).getId()));
+							vipAction.put("params", params);
+						}
+					}
+				}
+
+				if (vipAction != null)
+					data.put("vipAction", vipAction);
+
+			}
+			
+			data.put("user", JsonUtil.getConvertBigDecimalToStringBuilder(gsonBuilder).create().toJson(userInfo));
+
 			out.print(JsonUtil.loadTrueResult(data));
 
 			final UserInfo uuser = userInfo;
 			ThreadUtil.run(new Runnable() {
 				public void run() {
-					try {
-						// 鑾峰彇閭�璇风爜锛氳嫢鏃犻個璇风爜涓斿瓨鍦ㄦ湁鏁堢殑闃熷憳鍏崇郴 鍒欒嚜鍔ㄧ敓鎴愰個璇风爜
-						userInfoExtraService.getUserInviteCode(uuser.getId());
-					} catch (UserInfoExtraException e) {
-						e.printStackTrace();
-					}
+					// 鑾峰彇閭�璇风爜锛氳嫢鏃犻個璇风爜涓斿瓨鍦ㄦ湁鏁堢殑闃熷憳鍏崇郴 鍒欒嚜鍔ㄧ敓鎴愰個璇风爜
+					userInfoExtraService.getInviteCodeByUid(uuser.getId());
 
 					// 鏇存柊鐢ㄦ埛闄勫姞淇℃伅锛岃�佺敤鎴蜂笉瀛樺湪鐨勯渶瑕佹坊鍔�
 					try {
@@ -2137,7 +2327,7 @@
 			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
 		} catch (Exception e) {
 			out.print(JsonUtil.loadFalseResult("鑾峰彇澶辫触"));
-			e.printStackTrace();
+			LogHelper.errorDetailInfo(e);
 		}
 	}
 
@@ -2167,9 +2357,9 @@
 		}
 	}
 
-	
 	/**
 	 * 鐢ㄦ埛鏇存崲澶村儚
+	 * 
 	 * @param acceptData
 	 * @param fileList
 	 * @param uid
@@ -2177,22 +2367,23 @@
 	 * @param out
 	 */
 	@RequestMapping(value = "uploadPortrait")
-	public void uploadPortrait(AcceptData acceptData, MultipartFile file, Long uid, HttpServletRequest request, PrintWriter out) {
+	public void uploadPortrait(AcceptData acceptData, MultipartFile file, Long uid, HttpServletRequest request,
+			PrintWriter out) {
 		try {
 			if (uid == null) {
 				out.print(JsonUtil.loadFalseResult("鐢ㄦ埛鏈櫥褰�"));
 				return;
 			}
-			
+
 			if (file == null) {
 				out.print(JsonUtil.loadFalseResult("涓婁紶鏂囦欢涓嶈兘涓虹┖"));
 				return;
 			}
-			
+
 			userInfoService.uploadPortrait(file, uid);
-			
+
 			out.print(JsonUtil.loadTrueResult("淇濆瓨鎴愬姛"));
-			
+
 		} catch (UserInfoException e) {
 			out.print(JsonUtil.loadFalseResult(e.getMsg()));
 			try {
@@ -2216,37 +2407,93 @@
 			}
 		}
 	}
-	
+
 	/**
-	 * 鏇存崲鏄电О
+	 * 鏇存崲鍩虹淇℃伅
+	 * 
 	 * @param acceptData
 	 * @param nickName
 	 * @param uid
 	 * @param out
 	 */
 	@RequestMapping(value = "saveInfo")
-	public void saveInfo(AcceptData acceptData, String nickName, Long uid, PrintWriter out) {
+	public void saveInfo(AcceptData acceptData, String nickName, String weiXin, Integer sex, Long uid,
+			String inviteCode, MultipartFile qrCodeFile, HttpServletRequest request, PrintWriter out) {
 		try {
 			if (uid == null) {
 				out.print(JsonUtil.loadFalseResult("鐢ㄦ埛鏈櫥褰�"));
 				return;
 			}
-			if (StringUtil.isNullOrEmpty(nickName)) {
-				out.print(JsonUtil.loadFalseResult("鏄电О涓嶈兘涓虹┖"));
-				return;
+
+			// 淇敼鏄电О
+			if (!StringUtil.isNullOrEmpty(nickName)) {
+				if (nickName.length() > 200) {
+					out.print(JsonUtil.loadFalseResult("鏄电О杩囬暱"));
+					return;
+				}
+
+				if (maskKeyService.examineContent(nickName)) {
+					out.print(JsonUtil.loadFalseResult("涓嶈兘鍖呭惈鏁忔劅璇嶆眹"));
+					return;
+				}
+				userInfoService.saveUserInfo(nickName, uid);
+
+				userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.nickName, nickName);
 			}
-			if (nickName.length() > 200) {
-				out.print(JsonUtil.loadFalseResult("鏄电О杩囬暱"));
-				return;
+
+			// 淇敼寰俊鍙�
+			if (!StringUtil.isNullOrEmpty(weiXin)) {
+				if (weiXin.length() > 32) {
+					out.print(JsonUtil.loadFalseResult("寰俊鍙疯繃闀�"));
+					return;
+				}
+
+				UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+				if (userInfoExtra != null) {
+					UserInfoExtra extra = new UserInfoExtra();
+					extra.setId(userInfoExtra.getId());
+					extra.setWeiXin(weiXin);
+					userInfoExtraService.saveUserInfoExtra(extra);
+
+					userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.setWeiXinNum, weiXin);
+				}
 			}
-			
-			if(maskKeyService.examineContent(nickName)) {
-				out.print(JsonUtil.loadFalseResult("涓嶈兘鍖呭惈鏁忔劅璇嶆眹"));
-				return;
+
+			// 淇敼鎬у埆
+			if (sex != null && sex > 0 && sex < 3) {
+				UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
+				if (userInfoExtra != null) {
+					UserInfoExtra extra = new UserInfoExtra();
+					extra.setId(userInfoExtra.getId());
+					extra.setSex(sex);
+					userInfoExtraService.saveUserInfoExtra(extra);
+
+					userInfoModifyRecordService.addModifyRecord(uid, ModifyTypeEnum.gender, sex + "");
+				}
 			}
-			
-			userInfoService.saveUserInfo(nickName, uid);
-			
+
+			// 淇敼閭�璇风爜
+			if (!StringUtil.isNullOrEmpty(inviteCode)) {// 閭�璇风爜涓嶄负绌�
+				inviteCode = inviteCode.trim();
+				if (inviteCode.length() >= 4 && inviteCode.length() <= 12) {
+					try {
+						userInfoExtraService.updateInviteCodeVip(inviteCode, uid);
+						out.print(JsonUtil.loadTrueResult("淇濆瓨鎴愬姛"));
+						return;
+					} catch (UserInfoExtraException e) {
+						out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMessage()));
+					}
+				} else {
+					out.print(JsonUtil.loadFalseResult(1, "閭�璇风爜蹇呴』涓�4鍒�12浣�"));
+					return;
+				}
+			}
+
+			// 浜岀淮鐮�
+			if (qrCodeFile != null) {
+				userInfoExtraService.uploadERCode(qrCodeFile, uid);
+			}
+
 			out.print(JsonUtil.loadTrueResult("淇濆瓨鎴愬姛"));
 		} catch (UserInfoException e) {
 			out.print(JsonUtil.loadFalseResult(e.getMsg()));

--
Gitblit v1.8.0