From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期二, 25 二月 2025 16:41:22 +0800
Subject: [PATCH] 淘宝转链接口更新

---
 fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/UserAccountController.java |  941 +++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 668 insertions(+), 273 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/UserAccountController.java b/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/UserAccountController.java
index 1868641..b41161b 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/UserAccountController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/wxmp/v1/UserAccountController.java
@@ -1,273 +1,668 @@
-package com.yeshi.fanli.controller.wxmp.v1;
-
-import java.io.PrintWriter;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-import org.aspectj.weaver.JoinPointSignature;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.yeshi.utils.IPUtil;
-import org.yeshi.utils.JsonUtil;
-import org.yeshi.utils.entity.wx.WXMPSessionInfo;
-import org.yeshi.utils.entity.wx.WXMPUserInfo;
-import org.yeshi.utils.wx.WXXCXUtil;
-
-import com.google.gson.Gson;
-import com.yeshi.fanli.dto.WXMPAcceptData;
-import com.yeshi.fanli.dto.user.wx.WXMPLoginData;
-import com.yeshi.fanli.dto.user.wx.WXMPLoginResult;
-import com.yeshi.fanli.entity.bus.user.UserInfo;
-import com.yeshi.fanli.exception.user.UserAccountException;
-import com.yeshi.fanli.exception.user.UserInfoExtraException;
-import com.yeshi.fanli.service.inter.user.UserAccountService;
-import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
-import com.yeshi.fanli.service.inter.user.UserInfoService;
-import com.yeshi.fanli.service.inter.user.wx.WXMPUserLoginService;
-import com.yeshi.fanli.util.Constant;
-import com.yeshi.fanli.util.RedisManager;
-import com.yeshi.fanli.util.StringUtil;
-import com.yeshi.fanli.util.ThreadUtil;
-import com.yeshi.fanli.util.account.UserUtil;
-
-import net.sf.json.JSONObject;
-
-@Controller("WXMPUserAccountController")
-@RequestMapping("/wxmp/api/v1/useraccount")
-public class UserAccountController {
-
-	@Resource
-	private UserInfoExtraService userInfoExtraService;
-
-	@Resource
-	private UserInfoService userInfoService;
-
-	@Resource
-	private UserAccountService userAccountService;
-
-	@Resource
-	private WXMPUserLoginService wxMPUserLoginService;
-
-	@Resource
-	private RedisManager redisManager;
-
-	/**
-	 * 閫氳繃閭�璇风爜鑾峰彇鐢ㄦ埛淇℃伅
-	 * 
-	 * @param acceptData
-	 * @param inviteCode
-	 * @param out
-	 */
-	@RequestMapping("getInviteCodeInfo")
-	public void getInviteCodeInfo(WXMPAcceptData acceptData, String inviteCode, PrintWriter out) {
-
-		if (StringUtil.isNullOrEmpty(inviteCode)) {
-			out.print(JsonUtil.loadFalseResult("閭�璇风爜涓虹┖"));
-			return;
-		}
-
-		try {
-			UserInfo userInfo = userInfoExtraService.getUserByInviteCode(inviteCode);
-			if (userInfo != null && userInfo.getState() == UserInfo.STATE_NORMAL) {
-				JSONObject json = new JSONObject();
-				json.put("id", userInfo.getId());
-				json.put("nickName", userInfo.getNickName());
-				json.put("portrait", userInfo.getPortrait());
-				JSONObject data = new JSONObject();
-				data.put("user", json);
-				out.print(JsonUtil.loadTrueResult(data));
-				return;
-			}
-		} catch (UserInfoExtraException e) {
-
-		}
-		out.print(JsonUtil.loadFalseResult("閭�璇风爜涓嶅瓨鍦�"));
-	}
-
-	@RequestMapping("phoneLogin")
-	public void phoneLogin(WXMPAcceptData acceptData, String code, String phoneEncryptedData, String phoneIv,
-			String inviteCode, String userData, HttpServletRequest request, HttpSession session, PrintWriter out) {
-		if (StringUtil.isNullOrEmpty(acceptData.getOpenId())) {
-			out.print(JsonUtil.loadFalseResult("openId涓虹┖"));
-			return;
-		}
-
-		if (StringUtil.isNullOrEmpty(phoneEncryptedData) || StringUtil.isNullOrEmpty(phoneIv)) {
-			out.print(JsonUtil.loadFalseResult("鐢佃瘽鍔犲瘑鏁版嵁涓虹┖"));
-			return;
-		}
-
-		String sessionKey = null;
-		WXMPSessionInfo sessionInfo = (WXMPSessionInfo) session.getAttribute(UserController.WXMP_SESSION_INFO_KEY);
-		if (sessionInfo == null) {
-			out.print(JsonUtil.loadFalseResult(90000, "璇烽噸鏂扮櫥褰�"));
-			return;
-		}
-
-		sessionKey = sessionInfo.getSessionKey();
-
-		if (StringUtil.isNullOrEmpty(sessionKey)) {
-			out.print(JsonUtil.loadFalseResult("code鏃犳晥"));
-			return;
-		}
-		String phoneNumber = WXXCXUtil.getPhoneNumber(sessionKey, phoneEncryptedData, phoneIv);
-		if (StringUtil.isNullOrEmpty(phoneNumber)) {
-			out.print(JsonUtil.loadFalseResult("鑾峰彇鐢佃瘽鍙风爜澶辫触"));
-			return;
-		}
-
-		UserInfo boss = null;
-		if (!StringUtil.isNullOrEmpty(inviteCode)) {
-			try {
-				boss = userInfoExtraService.getUserByInviteCode(inviteCode);
-			} catch (UserInfoExtraException e) {
-				e.printStackTrace();
-			}
-			if (boss != null && boss.getState() != UserInfo.STATE_NORMAL)
-				boss = null;
-		}
-
-		UserInfo lastUserInfo = null;
-		if (!StringUtil.isNullOrEmpty(userData)) {
-			String key = StringUtil.Md5("wxmp-user-login-" + acceptData.getAppId() + "-" + acceptData.getOpenId());
-			String data = redisManager.getCommonString(key);
-			if (!StringUtil.isNullOrEmpty(data)) {
-				lastUserInfo = new Gson().fromJson(data, UserInfo.class);
-			}
-		}
-
-		try {
-			WXMPLoginResult result = wxMPUserLoginService.wxmpLogin(new WXMPLoginData.Builder(Constant.APPID)
-					.setBoss(boss).setLastUser(lastUserInfo).setPhone(phoneNumber).build());
-			printWXMPLoginResult(acceptData.getAppId(), acceptData.getOpenId(), result, request, out);
-		} catch (UserAccountException e) {
-			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
-		}
-
-	}
-
-	@RequestMapping("wxLogin")
-	public void wxLogin(WXMPAcceptData acceptData, String wxEncryptedData, String wxIv, String inviteCode,
-			HttpServletRequest request, HttpSession session, PrintWriter out) {
-		if (StringUtil.isNullOrEmpty(acceptData.getOpenId())) {
-			out.print(JsonUtil.loadFalseResult("openId涓虹┖"));
-			return;
-		}
-
-		if (StringUtil.isNullOrEmpty(wxEncryptedData) || StringUtil.isNullOrEmpty(wxIv)) {
-			out.print(JsonUtil.loadFalseResult("寰俊鐢ㄦ埛鍔犲瘑鏁版嵁涓虹┖"));
-			return;
-		}
-		WXMPSessionInfo sessionInfo = (WXMPSessionInfo) session.getAttribute(UserController.WXMP_SESSION_INFO_KEY);
-		if (sessionInfo == null) {
-			out.print(JsonUtil.loadFalseResult(90000, "璇烽噸鏂扮櫥褰�"));
-			return;
-		}
-
-		String sessionKey = sessionInfo.getSessionKey();
-		if (StringUtil.isNullOrEmpty(sessionKey)) {
-			out.print(JsonUtil.loadFalseResult("code鏃犳晥"));
-			return;
-		}
-
-		WXMPUserInfo userInfo = WXXCXUtil.getUserInfo(sessionKey, wxEncryptedData, wxIv);
-		if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getUnionId())) {
-			out.print(JsonUtil.loadFalseResult("鑾峰彇寰俊淇℃伅澶辫触"));
-			return;
-		}
-
-		try {
-			WXMPLoginResult result = wxMPUserLoginService
-					.wxmpLogin(new WXMPLoginData.Builder(Constant.APPID).setWxUser(userInfo).build());
-			printWXMPLoginResult(acceptData.getAppId(), acceptData.getOpenId(), result, request, out);
-		} catch (UserAccountException e) {
-			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
-		}
-	}
-
-	@RequestMapping("bindInviteCode")
-	public void bindInviteCode(WXMPAcceptData acceptData, String inviteCode, String userData,
-			HttpServletRequest request, PrintWriter out) {
-		if (StringUtil.isNullOrEmpty(acceptData.getOpenId())) {
-			out.print(JsonUtil.loadFalseResult("openId涓虹┖"));
-			return;
-		}
-		if (StringUtil.isNullOrEmpty(inviteCode)) {
-			out.print(JsonUtil.loadFalseResult("閭�璇风爜涓虹┖"));
-			return;
-		}
-
-		String key = StringUtil.Md5("wxmp-user-login-" + acceptData.getAppId() + "-" + acceptData.getOpenId());
-		UserInfo user = new Gson().fromJson(redisManager.getCommonString(key), UserInfo.class);
-		if (user == null) {
-			out.print(JsonUtil.loadFalseResult("鐢ㄦ埛鏁版嵁涓虹┖"));
-			return;
-		}
-
-		UserInfo boss = null;
-		if (!StringUtil.isNullOrEmpty(inviteCode)) {
-			try {
-				boss = userInfoExtraService.getUserByInviteCode(inviteCode);
-			} catch (UserInfoExtraException e) {
-				e.printStackTrace();
-			}
-			if (boss != null && boss.getState() != UserInfo.STATE_NORMAL)
-				boss = null;
-		}
-
-		if (boss == null) {
-			out.print(JsonUtil.loadFalseResult("閭�璇风爜鏈夎"));
-			return;
-		}
-
-		try {
-			WXMPLoginResult result = wxMPUserLoginService
-					.wxmpLogin(new WXMPLoginData.Builder(Constant.APPID).setLastUser(user).setBoss(boss).build());
-			printWXMPLoginResult(acceptData.getAppId(), acceptData.getOpenId(), result, request, out);
-		} catch (UserAccountException e) {
-			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
-		}
-	}
-
-	private void printWXMPLoginResult(String appId, String openId, WXMPLoginResult result, HttpServletRequest request,
-			PrintWriter out) {
-		JSONObject data = new JSONObject();
-		String key = StringUtil.Md5("wxmp-user-login-" + appId + "-" + openId);
-		switch (result.getCode()) {
-		case WXMPLoginResult.CODE_SUCCESS:
-			UserInfo user = userInfoService.selectAvailableByPrimaryKey(result.getUser().getId());
-			data.put("user", UserUtil.filterForClientUser(user));
-			data.put("type", 0);
-			out.print(JsonUtil.loadTrueResult(data));
-			final String ip = IPUtil.getRemotIP(request);
-			final int port = request.getRemotePort();
-			ThreadUtil.run(new Runnable() {
-
-				@Override
-				public void run() {// 鐧诲綍鎴愬姛
-					UserInfo update = new UserInfo(user.getId());
-					update.setLastLoginTime(System.currentTimeMillis());
-					update.setLastLoginIp(ip + ":" + port);
-					userAccountService.updateUserSelective(update);
-				}
-			});
-			break;
-		case WXMPLoginResult.CODE_BIND_PHONE:
-			// 闇�瑕佺粦瀹氱數璇濆彿鐮�
-			redisManager.saveObj(result.getUser(), key, 60 * 5);// 鍙紦瀛�5鍒嗛挓
-			data.put("userData", key);
-			data.put("type", 2);
-			break;
-		case WXMPLoginResult.CODE_BIND_INVITE_CODE:
-			redisManager.saveObj(result.getUser(), key, 60 * 5);// 鍙紦瀛�5鍒嗛挓
-			data.put("userData", key);
-			data.put("type", 1);
-			break;
-		}
-
-		out.print(JsonUtil.loadTrueResult(data));
-	}
-
-}
+package com.yeshi.fanli.controller.wxmp.v1;
+
+import java.io.PrintWriter;
+import java.lang.reflect.Type;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.yeshi.utils.IPUtil;
+import org.yeshi.utils.JsonUtil;
+import org.yeshi.utils.entity.wx.WXMPSessionInfo;
+import org.yeshi.utils.entity.wx.WXMPUserInfo;
+import org.yeshi.utils.entity.wx.WeiXinUser;
+import org.yeshi.utils.wx.WXXCXUtil;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+import com.google.gson.JsonSerializationContext;
+import com.google.gson.JsonSerializer;
+import com.yeshi.fanli.dto.WXMPAcceptData;
+import com.yeshi.fanli.dto.user.wx.WXMPLoginData;
+import com.yeshi.fanli.dto.user.wx.WXMPLoginResult;
+import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode;
+import com.yeshi.fanli.entity.bus.user.ForbiddenUserIdentifyCode.ForbiddenUserIdentifyCodeTypeEnum;
+import com.yeshi.fanli.entity.bus.user.SMSHistory;
+import com.yeshi.fanli.entity.bus.user.ThreeSale;
+import com.yeshi.fanli.entity.bus.user.UserInfo;
+import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
+import com.yeshi.fanli.entity.bus.user.vip.UserVIPInfo;
+import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum;
+import com.yeshi.fanli.entity.shop.BanLiShopOrder;
+import com.yeshi.fanli.entity.system.ConfigKeyEnum;
+import com.yeshi.fanli.exception.user.UserAccountException;
+import com.yeshi.fanli.exception.user.UserInfoExtraException;
+import com.yeshi.fanli.exception.user.vip.UserVIPInfoException;
+import com.yeshi.fanli.log.LogHelper;
+import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
+import com.yeshi.fanli.service.inter.money.UserMoneyDetailService;
+import com.yeshi.fanli.service.inter.order.CommonOrderService;
+import com.yeshi.fanli.service.inter.shop.BanLiShopOrderService;
+import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService;
+import com.yeshi.fanli.service.inter.user.UserAccountService;
+import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
+import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
+import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
+import com.yeshi.fanli.service.inter.user.wx.WXMPUserLoginService;
+import com.yeshi.fanli.util.Constant;
+import org.yeshi.utils.MoneyBigDecimalUtil;
+import com.yeshi.fanli.util.RedisKeyEnum;
+import com.yeshi.fanli.util.RedisManager;
+import com.yeshi.fanli.util.StringUtil;
+import com.yeshi.fanli.util.ThreadUtil;
+import org.yeshi.utils.TimeUtil;
+import com.yeshi.fanli.util.account.UserUtil;
+import com.yeshi.fanli.vo.user.UserVipRateVO;
+
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+@Controller("WXMPUserAccountController")
+@RequestMapping("/wxmp/api/v1/useraccount")
+public class UserAccountController {
+
+	@Resource
+	private UserInfoExtraService userInfoExtraService;
+
+	@Resource
+	private UserInfoService userInfoService;
+
+	@Resource
+	private UserAccountService userAccountService;
+
+	@Resource
+	private WXMPUserLoginService wxMPUserLoginService;
+
+	@Resource
+	private RedisManager redisManager;
+
+	@Resource
+	private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService;
+
+	@Resource
+	private UserMoneyDetailService userMoneyDetailService;
+
+	@Resource
+	private ConfigService configService;
+
+	@Resource
+	private UserVIPInfoService userVIPInfoService;
+
+	@Resource
+	private UserVipConfigService userVipConfigService;
+
+	@Resource
+	private BanLiShopOrderService banLiShopOrderService;
+
+	@Resource
+	private HongBaoV2CountService hongBaoV2CountService;
+	
+	@Resource
+	private ThreeSaleSerivce threeSaleSerivce;
+
+	@Resource
+	private CommonOrderService commonOrderService;
+	
+	
+
+	/**
+	 * 閫氳繃閭�璇风爜鑾峰彇鐢ㄦ埛淇℃伅
+	 * 
+	 * @param acceptData
+	 * @param inviteCode
+	 * @param out
+	 */
+	@RequestMapping("getInviteCodeInfo")
+	public void getInviteCodeInfo(WXMPAcceptData acceptData, String inviteCode, PrintWriter out) {
+
+		if (StringUtil.isNullOrEmpty(inviteCode)) {
+			out.print(JsonUtil.loadFalseResult("閭�璇风爜涓虹┖"));
+			return;
+		}
+
+		try {
+			UserInfo userInfo = userInfoExtraService.getUserByInviteCode(inviteCode);
+			if (userInfo != null && userInfo.getState() == UserInfo.STATE_NORMAL) {
+				JSONObject json = new JSONObject();
+				json.put("id", userInfo.getId());
+				json.put("nickName", userInfo.getNickName());
+				json.put("portrait", userInfo.getPortrait());
+				JSONObject data = new JSONObject();
+				data.put("user", json);
+				out.print(JsonUtil.loadTrueResult(data));
+				return;
+			}
+		} catch (UserInfoExtraException e) {
+
+		}
+		out.print(JsonUtil.loadFalseResult("閭�璇风爜涓嶅瓨鍦�"));
+	}
+
+	@RequestMapping("phoneLogin")
+	public void phoneLogin(WXMPAcceptData acceptData, String code, String phoneEncryptedData, String phoneIv,
+			String inviteCode, String userData, HttpServletRequest request, HttpSession session, PrintWriter out) {
+		if (StringUtil.isNullOrEmpty(acceptData.getOpenId())) {
+			out.print(JsonUtil.loadFalseResult("openId涓虹┖"));
+			return;
+		}
+
+		if (StringUtil.isNullOrEmpty(phoneEncryptedData) || StringUtil.isNullOrEmpty(phoneIv)) {
+			out.print(JsonUtil.loadFalseResult("鐢佃瘽鍔犲瘑鏁版嵁涓虹┖"));
+			return;
+		}
+
+		String sessionKey = null;
+		WXMPSessionInfo sessionInfo = WXXCXUtil.getSessionInfo(Constant.WXMP_APP_INFO, code);
+		if (sessionInfo == null) {
+			out.print(JsonUtil.loadFalseResult(90000, "璇烽噸鏂扮櫥褰�"));
+			return;
+		} else {
+			session.setAttribute(UserController.WXMP_SESSION_INFO_KEY, sessionInfo);
+		}
+
+		sessionKey = sessionInfo.getSessionKey();
+
+		if (StringUtil.isNullOrEmpty(sessionKey)) {
+			out.print(JsonUtil.loadFalseResult("code鏃犳晥"));
+			return;
+		}
+		String phoneNumber = WXXCXUtil.getPhoneNumber(sessionKey, phoneEncryptedData, phoneIv);
+		LogHelper.test("灏忕▼搴忚幏鍙栧埌鐨勭數璇濆彿鐮佷负:"+phoneNumber);
+		
+		if (StringUtil.isNullOrEmpty(phoneNumber)) {
+			out.print(JsonUtil.loadFalseResult("鑾峰彇鐢佃瘽鍙风爜澶辫触"));
+			return;
+		}
+
+		UserInfo boss = null;
+		if (!StringUtil.isNullOrEmpty(inviteCode)) {
+			try {
+				boss = userInfoExtraService.getUserByInviteCode(inviteCode);
+			} catch (UserInfoExtraException e) {
+				e.printStackTrace();
+			}
+			if (boss != null && boss.getState() != UserInfo.STATE_NORMAL)
+				boss = null;
+		}
+
+		UserInfo lastUserInfo = null;
+		if (!StringUtil.isNullOrEmpty(userData)) {
+			String redisKey = RedisKeyEnum.getRedisKey(RedisKeyEnum.wxmpUserLogin,
+					StringUtil.Md5(acceptData.getAppId() + "-" + acceptData.getOpenId()));
+			String data = redisManager.getCommonString(redisKey);
+			if (!StringUtil.isNullOrEmpty(data)) {
+				lastUserInfo = new Gson().fromJson(data, UserInfo.class);
+			}
+		}
+
+		try {
+			WXMPLoginResult result = wxMPUserLoginService.wxmpLogin(new WXMPLoginData.Builder(Constant.APPID)
+					.setBoss(boss).setLastUser(lastUserInfo).setPhone(phoneNumber).build());
+			printWXMPLoginResult(acceptData.getAppId(), acceptData.getOpenId(), result, request, out);
+		} catch (UserAccountException e) {
+			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
+		}
+
+	}
+
+	@RequestMapping("wxLogin")
+	public void wxLogin(WXMPAcceptData acceptData, String wxEncryptedData, String wxIv, String inviteCode, String code,
+			HttpServletRequest request, HttpSession session, PrintWriter out) {
+		if (StringUtil.isNullOrEmpty(acceptData.getOpenId())) {
+			out.print(JsonUtil.loadFalseResult("openId涓虹┖"));
+			return;
+		}
+
+		if (StringUtil.isNullOrEmpty(wxEncryptedData) || StringUtil.isNullOrEmpty(wxIv)) {
+			out.print(JsonUtil.loadFalseResult("寰俊鐢ㄦ埛鍔犲瘑鏁版嵁涓虹┖"));
+			return;
+		}
+		WXMPSessionInfo sessionInfo = WXXCXUtil.getSessionInfo(Constant.WXMP_APP_INFO, code);
+
+		String sessionKey = sessionInfo.getSessionKey();
+		if (StringUtil.isNullOrEmpty(sessionKey)) {
+			out.print(JsonUtil.loadFalseResult("code鏃犳晥"));
+			return;
+		}
+
+		WXMPUserInfo userInfo = WXXCXUtil.getUserInfo(sessionKey, wxEncryptedData, wxIv);
+		if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getUnionId())) {
+			out.print(JsonUtil.loadFalseResult("鑾峰彇寰俊淇℃伅澶辫触"));
+			return;
+		}
+
+		try {
+			WXMPLoginResult result = wxMPUserLoginService
+					.wxmpLogin(new WXMPLoginData.Builder(Constant.APPID).setWxUser(userInfo).build());
+			printWXMPLoginResult(acceptData.getAppId(), acceptData.getOpenId(), result, request, out);
+		} catch (UserAccountException e) {
+			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
+		}
+	}
+
+	@RequestMapping("bindInviteCode")
+	public void bindInviteCode(WXMPAcceptData acceptData, String inviteCode, String userData,
+			HttpServletRequest request, PrintWriter out) {
+		if (StringUtil.isNullOrEmpty(acceptData.getOpenId())) {
+			out.print(JsonUtil.loadFalseResult("openId涓虹┖"));
+			return;
+		}
+		if (StringUtil.isNullOrEmpty(inviteCode)) {
+			out.print(JsonUtil.loadFalseResult("閭�璇风爜涓虹┖"));
+			return;
+		}
+
+		String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.wxmpUserLogin,
+				StringUtil.Md5(acceptData.getAppId() + "-" + acceptData.getOpenId()));
+
+		UserInfo user = new Gson().fromJson(redisManager.getCommonString(key), UserInfo.class);
+		if (user == null) {
+			out.print(JsonUtil.loadFalseResult("鐢ㄦ埛鏁版嵁涓虹┖"));
+			return;
+		}
+
+		UserInfo boss = null;
+		if (!StringUtil.isNullOrEmpty(inviteCode)) {
+			try {
+				boss = userInfoExtraService.getUserByInviteCode(inviteCode);
+			} catch (UserInfoExtraException e) {
+				e.printStackTrace();
+			}
+			if (boss != null && boss.getState() != UserInfo.STATE_NORMAL)
+				boss = null;
+		}
+
+		if (boss == null) {
+			out.print(JsonUtil.loadFalseResult("閭�璇风爜鏈夎"));
+			return;
+		}
+
+		try {
+			WXMPLoginResult result = wxMPUserLoginService
+					.wxmpLogin(new WXMPLoginData.Builder(Constant.APPID).setLastUser(user).setBoss(boss).build());
+			printWXMPLoginResult(acceptData.getAppId(), acceptData.getOpenId(), result, request, out);
+		} catch (UserAccountException e) {
+			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
+		}
+	}
+
+	private void printWXMPLoginResult(String appId, String openId, WXMPLoginResult result, HttpServletRequest request,
+			PrintWriter out) {
+		JSONObject data = new JSONObject();
+		String key = RedisKeyEnum.getRedisKey(RedisKeyEnum.wxmpUserLogin, StringUtil.Md5(appId + "-" + openId));
+
+		switch (result.getCode()) {
+		case WXMPLoginResult.CODE_SUCCESS:
+			UserInfo user = userInfoService.selectAvailableByPrimaryKey(result.getUser().getId());
+			data.put("user", UserUtil.filterForClientUser(user));
+			data.put("type", 0);
+			out.print(JsonUtil.loadTrueResult(data));
+			final String ip = IPUtil.getRemotIP(request);
+			final int port = request.getRemotePort();
+			ThreadUtil.run(new Runnable() {
+
+				@Override
+				public void run() {// 鐧诲綍鎴愬姛
+					UserInfo update = new UserInfo(user.getId());
+					update.setLastLoginTime(System.currentTimeMillis());
+					update.setLastLoginIp(ip + ":" + port);
+					userAccountService.updateUserSelective(update);
+				}
+			});
+			return;
+		case WXMPLoginResult.CODE_BIND_PHONE:
+			// 闇�瑕佺粦瀹氱數璇濆彿鐮�
+			redisManager.saveObj(result.getUser(), key, 60 * 5);// 鍙紦瀛�5鍒嗛挓
+			data.put("userData", key);
+			data.put("type", 2);
+			break;
+		case WXMPLoginResult.CODE_BIND_INVITE_CODE:
+			redisManager.saveObj(result.getUser(), key, 60 * 5);// 鍙紦瀛�5鍒嗛挓
+			data.put("userData", key);
+			data.put("type", 1);
+			break;
+		}
+
+		out.print(JsonUtil.loadTrueResult(data));
+	}
+
+	@RequestMapping("bindWX")
+	public void bindWX(WXMPAcceptData acceptData, Long uid, String wxEncryptedData, String wxIv,
+			HttpServletRequest request, HttpSession session, PrintWriter out) {
+		if (StringUtil.isNullOrEmpty(acceptData.getOpenId())) {
+			out.print(JsonUtil.loadFalseResult("openId涓虹┖"));
+			return;
+		}
+
+		if (uid == null) {
+			out.print(JsonUtil.loadFalseResult("uid涓虹┖"));
+			return;
+		}
+
+		if (StringUtil.isNullOrEmpty(wxEncryptedData) || StringUtil.isNullOrEmpty(wxIv)) {
+			out.print(JsonUtil.loadFalseResult("寰俊淇℃伅涓虹┖"));
+			return;
+		}
+
+		WXMPSessionInfo sessionInfo = (WXMPSessionInfo) session.getAttribute(UserController.WXMP_SESSION_INFO_KEY);
+		if (sessionInfo == null) {
+			out.print(JsonUtil.loadFalseResult(90000, "璇烽噸鏂扮櫥褰�"));
+			return;
+		}
+
+		String sessionKey = sessionInfo.getSessionKey();
+		if (StringUtil.isNullOrEmpty(sessionKey)) {
+			out.print(JsonUtil.loadFalseResult("code鏃犳晥"));
+			return;
+		}
+
+		WXMPUserInfo userInfo = WXXCXUtil.getUserInfo(sessionKey, wxEncryptedData, wxIv);
+		if (userInfo == null || StringUtil.isNullOrEmpty(userInfo.getUnionId())) {
+			out.print(JsonUtil.loadFalseResult("鑾峰彇寰俊淇℃伅澶辫触"));
+			return;
+		}
+
+		// 缁戝畾寰俊
+
+		WeiXinUser wxUser = new WeiXinUser();
+		wxUser.setHeadimgurl(userInfo.getAvatarUrl());
+		wxUser.setCity(userInfo.getCity());
+		wxUser.setCountry(userInfo.getCountry());
+		wxUser.setNickname(userInfo.getNickName());
+		wxUser.setOpenid("");
+		wxUser.setProvince(userInfo.getProvince());
+		wxUser.setSex(userInfo.getGender());
+		wxUser.setUnionid(userInfo.getUnionId());
+
+		try {
+			UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
+			// 鍒ゆ柇taoBaoUid鏄惁宸茬粡灏佺
+			ForbiddenUserIdentifyCode ic = forbiddenUserIdentifyCodeService
+					.listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.wxUnionId, user.getWxUnionId());
+			if (ic != null && ic.getEffective() != null && ic.getEffective()) {
+				out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
+				// 灏佺鐢ㄦ埛
+				// 灏佺缁戝畾鐨勬甯哥敤鎴�
+				if (user != null && user.getState() != null && user.getState() == UserInfo.STATE_NORMAL) {
+					userAccountService.forbiddenUser(uid, "灏佺锛氱粦瀹氳灏佺鐨勫井淇″彿");
+				}
+				return;
+			}
+
+			userAccountService.bindWeiXin(uid, wxUser);
+			user = userInfoService.getUserByIdWithMybatis(uid);
+			JSONObject data = new JSONObject();
+			data.put("user", UserUtil.filterForClientUser(user));
+			out.print(JsonUtil.loadTrueResult(data));
+		} catch (UserAccountException e) {
+			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
+		}
+	}
+
+	/**
+	 * 缁戝畾鐢佃瘽鍙风爜 V1.5.3
+	 * 
+	 * @param acceptData
+	 * @param vcode
+	 * @param phone
+	 * @param out
+	 */
+	@RequestMapping(value = "bindPhone")
+	public void bindPhone(WXMPAcceptData acceptData, Long uid, String vcode, String phone, PrintWriter out) {
+		if (StringUtil.isNullOrEmpty(vcode)) {
+			out.print(JsonUtil.loadFalseResult("楠岃瘉鐮佷笉鑳戒负绌�"));
+			return;
+		}
+
+		if (StringUtil.isNullOrEmpty(phone)) {
+			out.print(JsonUtil.loadFalseResult("鐢佃瘽鍙风爜涓嶈兘涓虹┖"));
+			return;
+		}
+
+		phone = phone.replaceAll(" ", "");
+
+		String oldVCode = redisManager.getSMSVCode(phone, SMSHistory.TYPE_BIND);
+		if (Constant.IS_OUTNET) {
+			if (!vcode.equalsIgnoreCase(oldVCode)) {
+				out.print(JsonUtil.loadFalseResult(9001, "楠岃瘉鐮侀敊璇紝閲嶆柊杈撳叆"));
+				return;
+			}
+			redisManager.clearSMSFrequencyLimit(phone, SMSHistory.TYPE_BIND);
+		}
+
+		try {
+			// 缁戝畾鐢ㄦ埛
+			userAccountService.bindPhoneNew(uid, phone);
+
+			UserInfo user = userInfoService.getUserByIdWithMybatis(uid);
+			// 鍒ゆ柇鐢佃瘽鍙风爜鏄惁宸茬粡灏佺
+			ForbiddenUserIdentifyCode ic = forbiddenUserIdentifyCodeService
+					.listByTypeAndIdentifyCode(ForbiddenUserIdentifyCodeTypeEnum.phone, phone);
+			if (ic != null && ic.getEffective() != null && ic.getEffective()) {
+				out.print(JsonUtil.loadFalseResult(Constant.CODE_FORBIDDEN_USER, Constant.FORBIDDEN_USER_REASON_DESC));
+				// 灏佺鐢ㄦ埛
+				// 灏佺缁戝畾鐨勬甯哥敤鎴�
+				if (user != null && user.getState() != null && user.getState() == UserInfo.STATE_NORMAL) {
+					userAccountService.forbiddenUser(uid, "灏佺锛氱粦瀹氳灏佺鐨勭數璇濆彿鐮�");
+				}
+				return;
+			}
+
+			JSONObject data = new JSONObject();
+			data.put("user", UserUtil.filterForClientUser(user));
+			out.print(JsonUtil.loadTrueResult(data));
+		} catch (UserAccountException e) {
+			out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
+		} catch (Exception e) {
+			out.print(JsonUtil.loadFalseResult(1, "缁戝畾澶辫触"));
+		}
+	}
+
+	/**
+	 * 鑾峰彇vip淇℃伅
+	 * 
+	 * @param acceptData
+	 * @param uid
+	 * @param out
+	 */
+	@RequestMapping(value = "getVIPInfo")
+	public void getVIPInfo(String callback, WXMPAcceptData acceptData, Long uid, PrintWriter out) {
+		if (uid == null || uid <= 0) {
+			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�"));
+			return;
+		}
+
+		UserInfo userInfo = userInfoService.selectByPKey(uid);
+		if (userInfo == null) {
+			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "璇ョ敤鎴蜂笉瀛樺湪"));
+			return;
+		}
+		//
+		String inviteCode = userInfoExtraService.getInviteCodeByUid(uid);
+
+		UserVipRateVO vo = new UserVipRateVO();
+		vo.setId(uid);
+		vo.setInviteCode(inviteCode);
+		vo.setNickName(userInfo.getNickName());
+		vo.setPortrait(userInfo.getPortrait());
+		vo.setHelpLink(userVipConfigService.getValueByKey("help_link_vip_h5"));
+		vo.setCsdLink(configService.getValue(ConfigKeyEnum.customerServiceLink.getKey(),acceptData.getSystem()));
+
+		Date now = new Date();
+		Date start = new Date(0);
+
+		// 杩斿埄璁㈠崟銆佸鍔卞埜鎻愭垚
+		List<UserMoneyDetailTypeEnum> typeFanli = new ArrayList<>();
+		typeFanli.add(UserMoneyDetailTypeEnum.fanli);
+		typeFanli.add(UserMoneyDetailTypeEnum.orderReward);
+		BigDecimal finishMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeFanli, start, now)
+				.abs();
+
+		// 閭�璇疯鍗曘�佸垎浜鍗曘�佽ˉ璐�
+		List<UserMoneyDetailTypeEnum> typeList = new ArrayList<>();
+		typeList.add(UserMoneyDetailTypeEnum.share);
+		typeList.add(UserMoneyDetailTypeEnum.invite);
+		typeList.add(UserMoneyDetailTypeEnum.inviteAndShare);
+		typeList.add(UserMoneyDetailTypeEnum.systemEqualize);
+		typeList.add(UserMoneyDetailTypeEnum.subsidy);
+		BigDecimal rewardMoney = userMoneyDetailService.statisticUserTypeMoneyWithDate(uid, typeList, start, now).abs();
+
+		UserVIPInfo userVIPInfo = userVIPInfoService.selectByUid(uid);
+		vo.setVipInfo(userVIPInfo);
+		String leftTime = "";
+		if (userVIPInfo != null && userVIPInfo.getApplyTime() != null) {
+			// TODO 璁$畻鏃堕棿
+			long s = 48 * 60 * 60 - ((System.currentTimeMillis() - userVIPInfo.getApplyTime().getTime()) / 1000);
+			if (s > 3600) {
+				leftTime = s / 3600 + "灏忔椂";
+				leftTime = "杩樺墿" + leftTime;
+			} else if (s >= 60) {
+				leftTime = s / 60 + "鍒嗛挓";
+				leftTime = "杩樺墿" + leftTime;
+			} else if (s > 0) {
+				leftTime = s + "绉�";
+				leftTime = "杩樺墿" + leftTime;
+			}
+		}
+		vo.setLeftTime(leftTime);
+
+		if (userVIPInfo != null && userVIPInfo.getState() != null
+				&& userVIPInfo.getState() == UserVIPInfo.STATE_SUCCESS) { // VIP
+			vo.setSuccessTime(TimeUtil.getGernalTime(userVIPInfo.getSuccessTime().getTime(), "yyyy.MM.dd"));
+			vo.setConserveMoney(finishMoney);
+			vo.setEarnMoney(rewardMoney);
+		} else {
+			BigDecimal rate = new BigDecimal("0.409");
+			vo.setConserveMoney(MoneyBigDecimalUtil.mul2(finishMoney, rate));
+			vo.setEarnMoney(MoneyBigDecimalUtil.mul2(rewardMoney, rate));
+		}
+		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.setFinishTeam(hongBaoV2CountService.countValidOrderTeamUserByUid(uid,
+//				TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME), payMoney));
+		
+		int finishTeam = 0;
+		long vipBegin = TimeUtil.convertDateToTemp(Constant.VIP_ONLINE_TIME);
+		List<ThreeSale> listThreeSale = threeSaleSerivce.getValidWorkerIdsByTime(uid, vipBegin);
+		if (listThreeSale != null && listThreeSale.size() > 0) {
+			for (ThreeSale three: listThreeSale) {
+				UserInfo worker = three.getWorker();
+				if (worker == null || worker.getId() == null) {
+					continue;
+				}
+				// 1銆侀個璇峰叧绯绘垚鍔熷悗锛�2銆佸崟锛堝垎浜� + 鑷喘锛夊疄浠樻澶т簬1鍏�
+				long countValid = commonOrderService.countOrderByUidAndSettled(worker.getId(),  payMoney);
+				if (countValid > 0) {
+					finishTeam ++;
+				}
+			}
+		}
+		vo.setFinishTeam(finishTeam);
+		
+		vo.setFinishHongBao(banLiShopOrderService.countByUidAndState(uid, list));
+
+		// 鍖哄垎鑰佺敤鎴峰拰鏂扮敤鎴�
+		String limtDate = userVipConfigService.getValueByKey("vip_execute_time");
+		Date executeDate = null;
+		try {
+			SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
+			executeDate = format.parse(limtDate);
+		} catch (ParseException e) {
+			e.printStackTrace();
+		}
+		UserInfoExtra extra = userInfoExtraService.getUserInfoExtra(uid);
+		if (extra != null
+				&& (extra.getFirstLoginTime() == null || extra.getFirstLoginTime().getTime() < executeDate.getTime())) {
+			vo.setLimitTeam(Long.parseLong(userVipConfigService.getValueByKey("require_invite_num_old_user")));
+		} else {
+			vo.setLimitTeam(Long.parseLong(userVipConfigService.getValueByKey("require_invite_num_new_user")));
+		}
+		vo.setLimitHongBao(Long.parseLong(userVipConfigService.getValueByKey("require_shop_buy")));
+		vo.setLimitMoney(new BigDecimal(userVipConfigService.getValueByKey("require_fan_money")));
+		vo.setLimitgoldCoin(Long.parseLong(userVipConfigService.getValueByKey("require_gold_coin")));
+
+		GsonBuilder gsonBuilder = new GsonBuilder();
+		gsonBuilder.registerTypeAdapter(BigDecimal.class, new JsonSerializer<BigDecimal>() {
+			@Override
+			public JsonElement serialize(BigDecimal value, Type theType, JsonSerializationContext context) {
+				if (value == null) {
+					return new JsonPrimitive("");
+				} else {
+					// 淇濈暀2浣嶅皬鏁�
+					value = value.setScale(2);
+					return new JsonPrimitive(value.toString());
+				}
+			}
+		});
+		Gson gson = gsonBuilder.create();
+
+		JSONObject data = new JSONObject();
+		data.put("info", gson.toJson(vo));
+		data.put("welfare", JSONArray.fromObject(userVipConfigService.getValueByKey("vip_welfare")));
+		if (!StringUtil.isNullOrEmpty(callback)) {
+			out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult(data)));
+		} else {
+			out.print(JsonUtil.loadTrueResult(gson.toJson(data)));
+		}
+	}
+
+	/**
+	 * 寮�閫歏IP
+	 * 
+	 * @param callback
+	 * @param acceptData
+	 * @param uid
+	 * @param out
+	 */
+	@RequestMapping(value = "applyVip")
+	public void applyVip(String callback, WXMPAcceptData acceptData, Long uid, PrintWriter out) {
+		if (uid == null || uid <= 0) {
+			JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(1, "鐢ㄦ埛鏈櫥褰�"));
+			return;
+		}
+		
+		try {
+			userVIPInfoService.applyVIP(uid);
+		} catch (UserVIPInfoException e) {
+			if (!StringUtil.isNullOrEmpty(callback)) {
+				out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadFalseResult(e.getMsg())));
+			} else {
+				out.print(JsonUtil.loadFalseResult(e.getMsg()));
+			}
+			return;
+		}
+
+		if (!StringUtil.isNullOrEmpty(callback)) {
+			out.print(JsonUtil.loadJSONP(callback, JsonUtil.loadTrueResult("鐢宠鎴愬姛锛屾鍦ㄥ彈鐞嗕腑")));
+		} else {
+			out.print(JsonUtil.loadTrueResult("鐢宠鎴愬姛锛屾鍦ㄥ彈鐞嗕腑"));
+		}
+	}
+
+	@RequestMapping("logout")
+	public void logout(WXMPAcceptData acceptData, Long uid, PrintWriter out) {
+		if (uid == null) {
+			out.print(JsonUtil.loadFalseResult("uid涓虹┖"));
+			return;
+		}
+		out.print(JsonUtil.loadTrueResult(""));
+	}
+}

--
Gitblit v1.8.0