UserspaceRegisterController.java 9.6 KB

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