UserspaceRegisterController.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package com.uas.sso.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.uas.sso.AccountConfig;
  4. import com.uas.sso.SSOHelper;
  5. import com.uas.sso.SSOToken;
  6. import com.uas.sso.core.PasswordStrength;
  7. import com.uas.sso.core.Status;
  8. import com.uas.sso.core.Step;
  9. import com.uas.sso.core.Type;
  10. import com.uas.sso.entity.App;
  11. import com.uas.sso.entity.User;
  12. import com.uas.sso.entity.UserAccount;
  13. import com.uas.sso.entity.Userspace;
  14. import com.uas.sso.logging.LoggerManager;
  15. import com.uas.sso.logging.RegisterBufferedLogger;
  16. import com.uas.sso.service.AppService;
  17. import com.uas.sso.service.UserAccountService;
  18. import com.uas.sso.service.UserService;
  19. import com.uas.sso.service.UserspaceService;
  20. import com.uas.sso.util.PasswordLevelUtils;
  21. import org.springframework.beans.factory.annotation.Autowired;
  22. import org.springframework.stereotype.Controller;
  23. import org.springframework.ui.ModelMap;
  24. import org.springframework.util.StringUtils;
  25. import org.springframework.web.bind.annotation.RequestMapping;
  26. import org.springframework.web.bind.annotation.RequestMethod;
  27. import org.springframework.web.bind.annotation.ResponseBody;
  28. import java.util.List;
  29. /**
  30. * 企业注册controller
  31. *
  32. * @author wangmh
  33. * @date 2018/1/4
  34. */
  35. @RequestMapping("/sso/userspace/register")
  36. @Controller
  37. public class UserspaceRegisterController extends BaseController {
  38. @Autowired
  39. private UserService userService;
  40. @Autowired
  41. private UserspaceService userspaceService;
  42. @Autowired
  43. private UserAccountService userAccountService;
  44. @Autowired
  45. private AppService appService;
  46. private RegisterBufferedLogger registerLogger = LoggerManager.getLogger(RegisterBufferedLogger.class);
  47. /**
  48. * 企业注册第一步,验证手机号
  49. *
  50. * @param mobile 手机号
  51. * @param code 验证码
  52. * @param token 验证码tokenId
  53. * @return
  54. */
  55. @RequestMapping(value = "/checkAdminTel", method = RequestMethod.POST)
  56. @ResponseBody
  57. public ModelMap checkAdminTel(String mobile, String code, String token, String appId) {
  58. // 校验验证码
  59. checkMobileCode(token, mobile, code);
  60. // 设置返回数据
  61. ModelMap data = new ModelMap();
  62. User user = userService.findByMobile(mobile);
  63. if (user == null) {
  64. data.put("hasRegister", false);
  65. } else {
  66. data.put("hasRegister", true);
  67. data.put("hasEmail", !StringUtils.isEmpty(user.getEmail()));
  68. }
  69. request.getSession().setAttribute("mobile", mobile);
  70. // 删除token
  71. tokenService.delete(token);
  72. // 添加日志
  73. appId = StringUtils.isEmpty(appId) ? AccountConfig.ACCOUNT_CENTER : appId;
  74. registerLogger.info(Type.REGISTER_USERSPACE.getValue(), Step.FIRST.getValue(), "企业注册", mobile, appId);
  75. return success(data);
  76. }
  77. /**
  78. * 企业注册第二步,填写企业信息
  79. *
  80. * @param userspace 企业信息
  81. * @return
  82. */
  83. @RequestMapping(method = RequestMethod.POST)
  84. @ResponseBody
  85. public ModelMap register(Userspace userspace, User user, String appId, String baseUrl) {
  86. // 获取企业信息
  87. String spaceName = userspace.getSpaceName();
  88. String businessCode = userspace.getBusinessCode();
  89. String adminName = user.getVipName();
  90. String password = user.getPassword();
  91. String adminEmail = user.getEmail();
  92. // 校验参数
  93. appId = StringUtils.isEmpty(appId) ? AccountConfig.ACCOUNT_CENTER : appId;
  94. String mobile = (String) request.getSession().getAttribute("mobile");
  95. if (StringUtils.isEmpty(mobile)) {
  96. return error("请刷新后重试");
  97. }
  98. if (StringUtils.isEmpty(spaceName)) {
  99. return error("请填写正确的企业名称");
  100. }
  101. if (StringUtils.isEmpty(businessCode)) {
  102. return error("请填写正确的企业营业执照号");
  103. }
  104. if (StringUtils.isEmpty(password)) {
  105. return error("密码不能为空");
  106. }
  107. User admin = userService.findByMobile(mobile);
  108. if (admin == null) {
  109. // 新用户: 管理员名称,密码不能为空
  110. if (StringUtils.isEmpty(adminName)) {
  111. return error("请填写正确的管理员名称");
  112. }
  113. // 新用户要校验密码强度
  114. PasswordStrength strength = PasswordLevelUtils.checkPasswordLevel(password);
  115. if (PasswordStrength.WEAK.getValue() == strength.getValue()) {
  116. return error("密码须为8-20字符的英文、数字混合");
  117. }
  118. }
  119. // 设置企业管理员信息
  120. if (admin == null) {
  121. // 新用户直接注册
  122. admin = new User();
  123. admin.setMobile(mobile);
  124. admin.setVipName(adminName);
  125. admin.setPassword(password);
  126. admin.setEmail(adminEmail);
  127. } else {
  128. // 老用户校验密码
  129. userService.checkPassword(admin.getUserUU(), user.getPassword(), false);
  130. // 老用户邮箱不为已认证的话设置邮箱
  131. if (admin.getEmailValidCode() != Status.AUTHENTICATED.getCode()) {
  132. admin.setEmail(adminEmail);
  133. admin.setEmailValidCode((short) Status.NOT_APPLYING.getCode());
  134. }
  135. }
  136. // 企业注册
  137. userspace.setAdmin(admin);
  138. userspace = userspaceService.register(userspace, appId);
  139. // 发送邮件和短信
  140. ModelMap info = new ModelMap();
  141. info.addAttribute("enname", userspace.getSpaceName());
  142. info.addAttribute("enuu", userspace.getSpaceUU());
  143. sendEmail("templateForSendMailAfterRegister", admin.getEmail(), info);
  144. sendSms("templateForSendSmsAfterRegister", admin.getMobile(), userspace.getSpaceName(), userspace.getSpaceUU());
  145. // 添加日志
  146. registerLogger.info(Type.REGISTER_USERSPACE.getValue(), Step.SECOND.getValue(), "企业注册", userspace, appId);
  147. App app = appService.findOne(appId);
  148. if ("mall".equals(appId)) {
  149. UserAccount userAccount = userAccountService.findOneByUserUU(appId, admin.getUserUU(), userspace.getSpaceUU());
  150. List<String> loginUrls = appService.findAllLoginUrl();
  151. ModelMap data = new ModelMap();
  152. data.addAttribute("data", userAccount)
  153. .addAttribute("loginUrls", loginUrls)
  154. .addAttribute("currentUrl", baseUrl)
  155. .addAttribute("type", "mall");
  156. SSOToken st = new SSOToken(request, userAccount.getMobile());
  157. st.setData(JSON.toJSONString(userAccount));
  158. SSOHelper.setSSOCookie(request, response, st, true);
  159. return success(data);
  160. } else if ("city".equals(appId) || "city".equals(app.getUserControl())) {
  161. UserAccount userAccount = userAccountService.findOneByUserUU(appId, admin.getUserUU(), userspace.getSpaceUU());
  162. List<String> loginUrls = appService.findAllLoginUrl();
  163. ModelMap data = new ModelMap();
  164. data.addAttribute("bgImage", "https://dfs.ubtob.com/group1/M00/88/AE/CgpkyFsPxC-ADHD8ACBM14PiAS8632.png")
  165. .addAttribute("type", "city");
  166. data.addAttribute("data", userAccount)
  167. .addAttribute("loginUrls", loginUrls)
  168. .addAttribute("currentUrl", baseUrl);
  169. SSOToken st = new SSOToken(request, userAccount.getMobile());
  170. st.setData(JSON.toJSONString(userAccount));
  171. SSOHelper.setSSOCookie(request, response, st, true);
  172. return success(data);
  173. }
  174. return success();
  175. }
  176. /**
  177. * 获取验证码
  178. *
  179. * @param mobile 手机号
  180. * @param mobileArea
  181. * @return success(tokenId)
  182. */
  183. @RequestMapping(value = "/checkCode", method = RequestMethod.GET)
  184. @ResponseBody
  185. public ModelMap getCode(String mobile, String mobileArea) {
  186. // 校验手机号
  187. checkMobile(mobile, mobileArea);
  188. // 获取验证码
  189. String token = getMobileToken(mobile);
  190. // 设置返回数据
  191. ModelMap data = new ModelMap();
  192. data.put("token", token);
  193. data.put("code", request.getSession().getAttribute("code"));
  194. request.getSession().setAttribute("token", token);
  195. return data;
  196. }
  197. /**
  198. * 校验验证码
  199. *
  200. * @param code 验证码
  201. * @param token 验证码tokenId
  202. * @return 验证成功:success()
  203. */
  204. @RequestMapping(value = "/checkCode", method = RequestMethod.POST)
  205. @ResponseBody
  206. public ModelMap checkCode(String token, String mobile, String code) {
  207. // 校验token是否正确
  208. String sessionToken = (String) request.getSession().getAttribute("token");
  209. if (StringUtils.isEmpty(sessionToken) || !sessionToken.equals(token)) {
  210. return error("请重新获取验证码");
  211. }
  212. // 校验验证码
  213. checkMobileCode(token, mobile, code);
  214. // 设置返回值
  215. return success();
  216. }
  217. }