package com.yeshi.fanli.controller.client.v2; import java.io.PrintWriter; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.yeshi.utils.JsonUtil; import com.yeshi.fanli.entity.accept.AcceptData; import com.yeshi.fanli.entity.bus.user.SMSHistory; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.push.DeviceActive; import com.yeshi.fanli.entity.system.BusinessSystem; import com.yeshi.fanli.exception.user.UserAccountException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.config.BusinessSystemService; import com.yeshi.fanli.service.inter.homemodule.HomeNavbarUserService; import com.yeshi.fanli.service.inter.money.UserMoneyService; import com.yeshi.fanli.service.inter.order.LostOrderService; import com.yeshi.fanli.service.inter.order.config.HongBaoManageService; import com.yeshi.fanli.service.inter.push.DeviceActiveService; import com.yeshi.fanli.service.inter.push.DeviceTokenHWService; import com.yeshi.fanli.service.inter.push.DeviceTokenOPPOService; import com.yeshi.fanli.service.inter.push.DeviceTokenVIVOService; import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService; import com.yeshi.fanli.service.inter.tlj.UserTaoLiJinOriginService; import com.yeshi.fanli.service.inter.user.BindRemindService; import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService; import com.yeshi.fanli.service.inter.user.ShamUserService; import com.yeshi.fanli.service.inter.user.SpreadUserImgService; import com.yeshi.fanli.service.inter.user.TBPidService; import com.yeshi.fanli.service.inter.user.UserAccountBindingHistoryService; import com.yeshi.fanli.service.inter.user.UserAccountService; import com.yeshi.fanli.service.inter.user.UserInfoDeleteRecordService; import com.yeshi.fanli.service.inter.user.UserInfoModifyRecordService; import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.inter.user.UserShareGoodsRecordService; import com.yeshi.fanli.service.inter.user.UserSystemCouponService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; 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 com.yeshi.fanli.util.annotation.RequestSerializableByKey; import net.sf.json.JSONObject; /** * 账户系统 * * @author Administrator * */ @Controller @RequestMapping("api/v2/user") public class UserAccountControllerV2 { @Resource private UserInfoService userInfoService; @Resource private BusinessSystemService businessSystemService; @Resource private ShamUserService shamUserService; @Resource private ThreeSaleSerivce threeSaleSerivce; @Resource private LostOrderService lostOrderService; @Resource private HongBaoManageService hongBaoManageService; @Resource private UserAccountService userAccountService; @Resource private RedisManager redisManager; @Resource private TBPidService tbPidService; @Resource private DeviceTokenHWService deviceTokenHWService; @Resource private DeviceTokenOPPOService deviceTokenOPPOService; @Resource private DeviceTokenVIVOService deviceTokenVIVOService; @Resource private TaoBaoUnionConfigService taoBaoUnionConfigService; @Resource private SpreadUserImgService spreadUserImgService; @Resource private UserShareGoodsRecordService userShareGoodsRecordService; @Resource private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService; @Resource private UserSystemCouponService userSystemCouponService; @Resource private UserMoneyService userMoneyService; @Resource private UserAccountBindingHistoryService userAccountBindingHistoryService; @Resource private HomeNavbarUserService homeNavbarUserService; @Resource private UserInfoDeleteRecordService userInfoDeleteRecordService; @Resource private UserTaoLiJinOriginService userTaoLiJinOriginService; @Resource private UserInfoModifyRecordService userInfoModifyRecordService; @Resource private DeviceActiveService deviceActiveService; @Resource private BindRemindService bindRemindService; /** * 新版登录 V1.5.3 * * @param acceptData * @param vcode * @param phone * @param code * @param loginType * 登录方式: 1-手机登录 2-微信登录 * @param request * @param out */ @RequestMapping(value = "login", method = RequestMethod.POST) public void login(AcceptData acceptData, int loginType, String vcode, String phone, String code, HttpServletRequest request, PrintWriter out) { try { BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult("系统不存在")); return; } UserInfo userInfo = null; // 手机登录 if (loginType == 1) { userInfo = userAccountService.loginPhone(request, loginType, vcode, phone, system.getAppid()); } // 微信登录 if (loginType == 2) { userInfo = userAccountService.loginWeiXinNew(request, acceptData, loginType, code, system.getAppid()); } if (userInfo == null) { out.print(JsonUtil.loadFalseResult("登录失败")); } else { JSONObject data = new JSONObject(); data.put("userInfo", UserUtil.filterForClientUser(userInfo)); out.print(JsonUtil.loadTrueResult(data)); final UserInfo uuser = userInfo; ThreadUtil.run(new Runnable() { public void run() { String device = acceptData.getDevice(); try { // 同步自定义导航 homeNavbarUserService.synchroDeviceToUser(uuser.getId(), device); } catch (Exception e) { LogHelper.errorDetailInfo(e); } // 绑定oppo,VIVO推送 DeviceActive active = deviceActiveService.getFirstActiveInfo(acceptData.getDevice()); if (active != null) { deviceTokenOPPOService.bindUid(uuser.getId(), active.getId()); deviceTokenVIVOService.bindUid(uuser.getId(), active.getId()); } } }); } } catch (UserAccountException e) { int errorCode = e.getCode(); if (errorCode == 101) { // 需要绑定手机号 JSONObject data = new JSONObject(); data.put("key", e.getMsg()); JSONObject object = new JSONObject(); object.put("code", errorCode); object.put("data", data); out.print(object.toString()); } else { out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg())); try { LogHelper.cookieLog("登录出错:" + e.getCode() + "-" + e.getMessage()); } catch (Exception e1) { e1.printStackTrace(); } } } catch (Exception e) { out.print(JsonUtil.loadFalseResult("登录失败")); try { LogHelper.errorDetailInfo(e); } catch (Exception e1) { e1.printStackTrace(); } } } /** * 绑定电话号码 V2.0.1 微信登录 * * @param acceptData * @param vcode * @param phone * @param out */ @RequestSerializableByKey(key = "'bindPhoneLogin-'+#phone") @RequestMapping(value = "bindPhoneLogin") public void bindPhoneLogin(AcceptData acceptData, String vcode, String phone, String key, HttpServletRequest request, PrintWriter out) { BusinessSystem system = businessSystemService.getBusinessSystemCache(acceptData.getPlatform(), acceptData.getPackages()); if (system == null) { out.print(JsonUtil.loadFalseResult("系统不存在")); return; } if (StringUtil.isNullOrEmpty(vcode)) { out.print(JsonUtil.loadFalseResult("验证码不能为空")); return; } if (StringUtil.isNullOrEmpty(phone)) { out.print(JsonUtil.loadFalseResult("电话号码不能为空")); return; } if (StringUtil.isNullOrEmpty(key)) { out.print(JsonUtil.loadFalseResult("key值不能为空")); 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 { UserInfo userInfo = userAccountService.bindPhoneToLogin(phone, key, system.getAppid(), request); JSONObject data = new JSONObject(); data.put("userInfo", UserUtil.filterForClientUser(userInfo)); out.print(JsonUtil.loadTrueResult(data)); } catch (UserAccountException e) { out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg())); } catch (Exception e) { out.print(JsonUtil.loadFalseResult(1, "绑定失败")); } } /** * 绑定电话号码 V2.0.1 微信登录 * * @param acceptData * @param vcode * @param phone * @param out */ @RequestMapping(value = "recordBind") public void recordBind(AcceptData acceptData, Long uid, PrintWriter out) { if (uid == null || uid <= 0) { out.print(JsonUtil.loadFalseResult("用户id为空")); return; } bindRemindService.addBindPhone(uid); out.print(JsonUtil.loadTrueResult("记录成功")); } }