LoginController.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package com.caimei.controller.user;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.caimei.entity.CmOperationUser;
  5. import com.caimei.entity.WxJsonModel;
  6. import com.caimei.service.user.LoginService;
  7. import com.caimei.utils.HttpRequest;
  8. import com.caimei.utils.SessionHelper;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.beans.factory.annotation.Value;
  13. import org.springframework.core.env.Environment;
  14. import org.springframework.stereotype.Controller;
  15. import org.springframework.util.StringUtils;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.RequestParam;
  18. import org.springframework.web.bind.annotation.ResponseBody;
  19. import javax.servlet.http.HttpServletRequest;
  20. import javax.servlet.http.HttpSession;
  21. import java.util.Calendar;
  22. import java.util.Date;
  23. import java.util.HashMap;
  24. import java.util.Map;
  25. /**
  26. * 登录
  27. */
  28. @Controller
  29. @RequestMapping("/login")
  30. public class LoginController {
  31. protected static final Logger logger = LoggerFactory.getLogger(LoginController.class);
  32. @Autowired
  33. private LoginService loginService;
  34. @Value("${miniprogram.ValidTime}")
  35. private Integer ValidTime;
  36. @Autowired
  37. private Environment env;
  38. public WxJsonModel login(String code, HttpServletRequest request, Integer organizeID) {
  39. logger.info("Start get SessionKey");
  40. WxJsonModel res = WxJsonModel.newInstance();
  41. Map<String, Object> map = new HashMap<>();
  42. String referer = request.getHeader("Referer"); //获取当前微信小程序的环境
  43. logger.info("referer-is----:" + referer);
  44. map.put("referer", referer);
  45. String requestUrl = "https://api.weixin.qq.com/sns/jscode2session";
  46. Map<String, String> requestUrlParam = new HashMap<String, String>();
  47. requestUrlParam.put("appid", env.getProperty("AppId" + organizeID));//小程序appId
  48. requestUrlParam.put("secret", env.getProperty("AppSecret") + organizeID);//小程序appsecret
  49. requestUrlParam.put("js_code", code);//小程序端返回的code
  50. requestUrlParam.put("grant_type", "authorization_code");//默认参数
  51. //发送post请求读取调用微信接口获取openid用户唯一标识
  52. String infos;
  53. try {
  54. infos = HttpRequest.sendPost(requestUrl, requestUrlParam);
  55. } catch (Exception e) {
  56. res.setData(map);
  57. return res.error("服务器内部异常");
  58. }
  59. //解析相应内容(转换成json对象)
  60. JSONObject jsonObject = JSON.parseObject(infos);
  61. String openid = jsonObject.getString("openid");
  62. logger.info("openid----->" + openid);
  63. String session_key = jsonObject.getString("session_key");
  64. String errcode = jsonObject.getString("errcode");
  65. String errmsg = jsonObject.getString("errmsg");
  66. if (!StringUtils.isEmpty(errcode) &&
  67. (errcode.equals("-1") || errcode.equals("40029") || errcode.equals("45011"))) {
  68. res.setMsg(errmsg);
  69. res.setData(map);
  70. map.put("sessionKey", session_key);
  71. res.setCode("-1");
  72. return res;
  73. }
  74. return res.success(openid);
  75. }
  76. /**
  77. * 判断是否是游客
  78. *
  79. * @param code
  80. * @param request
  81. * @return
  82. */
  83. @ResponseBody
  84. @RequestMapping("/doLogin")
  85. public WxJsonModel doLogin(@RequestParam(value = "code", required = true) String code,
  86. @RequestParam(value = "userOrganizeID") Integer userOrganizeID,
  87. HttpServletRequest request) {
  88. WxJsonModel res = WxJsonModel.newInstance();
  89. WxJsonModel model = login(code, request, userOrganizeID);
  90. if (model.getCode().equals("-1")) {
  91. return model;
  92. }
  93. String openid = (String) model.getData();
  94. //传入session,返回用户信息,更新sessionId
  95. HttpSession session = SessionHelper.getSession();
  96. String sessionId = session.getId();
  97. session.setAttribute("openid", openid);
  98. session.setAttribute("organizeID", userOrganizeID);
  99. CmOperationUser operationUser = loginService.doLogin(openid, userOrganizeID);
  100. if (operationUser == null) {
  101. String mobile = loginService.cellPhone(userOrganizeID);
  102. return res.error("-1", mobile, "游客,请登录");
  103. }
  104. operationUser.setSessionId(sessionId);
  105. return res.success("1", operationUser);
  106. }
  107. /**
  108. * 判断邀请码是否有效
  109. *
  110. * @param invitationCode 邀请码
  111. * @param userOrganizeID 组织id
  112. * @return 0: 请输入邀请码
  113. * -2: 邀请码已失效
  114. * -3: 邀请码已被使用
  115. */
  116. @RequestMapping("/isEnabled")
  117. @ResponseBody
  118. public WxJsonModel isEnabled(String invitationCode, Integer userOrganizeID) {
  119. WxJsonModel res = WxJsonModel.newInstance();
  120. String mobile = loginService.cellPhone(userOrganizeID);
  121. if (invitationCode == null || invitationCode.equals("")) {
  122. return res.error("0", mobile);
  123. }
  124. CmOperationUser operationUser = loginService.isEnabled(invitationCode, userOrganizeID);
  125. if (operationUser == null) {
  126. return res.error("-1", "邀请码错误");
  127. }
  128. Date date = new Date();
  129. Calendar calendar = Calendar.getInstance();
  130. calendar.setTime(operationUser.getInvitationCodeTime());
  131. calendar.add(Calendar.DATE, ValidTime);
  132. if (operationUser.getStatus().equals("1") && date.getTime() > calendar.getTime().getTime() && operationUser.getDelFlag().equals("0")) {
  133. return res.error("-2", mobile);
  134. }
  135. if (operationUser.getStatus().equals("2") && operationUser.getDelFlag().equals("0")) {
  136. return res.error("-3", mobile);
  137. }
  138. if (operationUser.getClubStatus().equals("91")) {
  139. return res.error("-1", "您所在的会所已下线");
  140. }
  141. if (!operationUser.getDelFlag().equals("0")) {
  142. return res.error("-1", "您的账号已下线");
  143. }
  144. return res.error("1", "邀请码通过");
  145. }
  146. /**
  147. * 注册并登录
  148. *
  149. * @param code
  150. * @param request
  151. * @return
  152. */
  153. @RequestMapping("/register")
  154. @ResponseBody
  155. public WxJsonModel register(@RequestParam(value = "code", required = true) String code,
  156. CmOperationUser operationUser, HttpServletRequest request) {
  157. WxJsonModel model = login(code, request, operationUser.getUserOrganizeID());
  158. if (model.getCode().equals("-1")) {
  159. return model;
  160. }
  161. String openid = (String) model.getData();
  162. operationUser.setOpenid(openid);
  163. WxJsonModel jsonModel = loginService.update(operationUser, request);
  164. return jsonModel;
  165. }
  166. }