UserspaceRegisterController.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  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.logging.LoggerManager;
  13. import com.uas.sso.logging.RegisterBufferedLogger;
  14. import com.uas.sso.service.AppService;
  15. import com.uas.sso.service.UserAccountService;
  16. import com.uas.sso.service.UserService;
  17. import com.uas.sso.service.UserspaceService;
  18. import com.uas.sso.util.PasswordLevelUtils;
  19. import com.uas.sso.foreign.weixin.entity.OAuthInfo;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Controller;
  22. import org.springframework.ui.ModelMap;
  23. import org.springframework.util.StringUtils;
  24. import org.springframework.web.bind.annotation.RequestMapping;
  25. import org.springframework.web.bind.annotation.RequestMethod;
  26. import org.springframework.web.bind.annotation.ResponseBody;
  27. import java.util.List;
  28. import java.util.Optional;
  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, String t) {
  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. // 设置第三方id
  137. if (!StringUtils.isEmpty(t)) {
  138. Token unionidToken = tokenService.findOne(t);
  139. Optional<ModelMap> optionalMap = Optional.ofNullable(unionidToken).map(value -> (ModelMap) value.getBind());
  140. String type = optionalMap.map(value -> (String) value.get("type")).orElse(null);
  141. switch (type) {
  142. case "weixin":
  143. admin.setWxUnionid(optionalMap.map(value -> (OAuthInfo) value.get("data")).map(OAuthInfo::getUnionid).orElse(null));
  144. break;
  145. case "bihe":
  146. admin.setBhOpenId(optionalMap.map(value -> (BiHeInfo) value.get("data")).map(BiHeInfo::getOpenId).orElse(null));
  147. break;
  148. default:
  149. break;
  150. }
  151. tokenService.delete(t);
  152. }
  153. // 企业注册
  154. userspace.setAdmin(admin);
  155. userspace = userspaceService.register(userspace, appId);
  156. // 发送邮件和短信
  157. ModelMap info = new ModelMap();
  158. info.addAttribute("enname", userspace.getSpaceName());
  159. info.addAttribute("enuu", userspace.getSpaceUU());
  160. sendEmail("templateForSendMailAfterRegister", admin.getEmail(), info);
  161. sendSms("templateForSendSmsAfterRegister", admin.getMobile(), userspace.getSpaceName(), userspace.getSpaceUU());
  162. // 添加日志
  163. registerLogger.info(Type.REGISTER_USERSPACE.getValue(), Step.SECOND.getValue(), "企业注册", userspace, appId);
  164. App app = appService.findOne(appId);
  165. if ("mall".equals(appId)) {
  166. UserAccount userAccount = userAccountService.findOneByUserUU(appId, admin.getUserUU(), userspace.getSpaceUU());
  167. List<String> loginUrls = appService.findAllLoginUrl();
  168. ModelMap data = new ModelMap();
  169. data.addAttribute("data", userAccount)
  170. .addAttribute("loginUrls", loginUrls)
  171. .addAttribute("currentUrl", baseUrl)
  172. .addAttribute("type", "mall");
  173. SSOToken st = new SSOToken(request, userAccount.getMobile());
  174. st.setData(JSON.toJSONString(userAccount));
  175. SSOHelper.setSSOCookie(request, response, st, true);
  176. return success(data);
  177. } else if ("city".equals(appId) || "city".equals(app.getUserControl())) {
  178. UserAccount userAccount = userAccountService.findOneByUserUU(appId, admin.getUserUU(), userspace.getSpaceUU());
  179. List<String> loginUrls = appService.findAllLoginUrl();
  180. ModelMap data = new ModelMap();
  181. data.addAttribute("bgImage", "https://dfs.ubtob.com/group1/M00/88/AE/CgpkyFsPxC-ADHD8ACBM14PiAS8632.png")
  182. .addAttribute("type", "city");
  183. data.addAttribute("data", userAccount)
  184. .addAttribute("loginUrls", loginUrls)
  185. .addAttribute("currentUrl", baseUrl);
  186. SSOToken st = new SSOToken(request, userAccount.getMobile());
  187. st.setData(JSON.toJSONString(userAccount));
  188. SSOHelper.setSSOCookie(request, response, st, true);
  189. return success(data);
  190. }
  191. return success();
  192. }
  193. /**
  194. * 获取验证码
  195. *
  196. * @param mobile 手机号
  197. * @param mobileArea
  198. * @return success(tokenId)
  199. */
  200. @RequestMapping(value = "/checkCode", method = RequestMethod.GET)
  201. @ResponseBody
  202. public ModelMap getCode(String mobile, String mobileArea) {
  203. // 校验手机号
  204. checkMobile(mobile, mobileArea);
  205. // 获取验证码
  206. String token = getMobileToken(mobile);
  207. // 设置返回数据
  208. ModelMap data = new ModelMap();
  209. data.put("token", token);
  210. data.put("code", request.getSession().getAttribute("code"));
  211. request.getSession().setAttribute("token", token);
  212. return data;
  213. }
  214. /**
  215. * 校验验证码
  216. *
  217. * @param code 验证码
  218. * @param token 验证码tokenId
  219. * @return 验证成功:success()
  220. */
  221. @RequestMapping(value = "/checkCode", method = RequestMethod.POST)
  222. @ResponseBody
  223. public ModelMap checkCode(String token, String mobile, String code) {
  224. // 校验token是否正确
  225. String sessionToken = (String) request.getSession().getAttribute("token");
  226. if (StringUtils.isEmpty(sessionToken) || !sessionToken.equals(token)) {
  227. return error("请重新获取验证码");
  228. }
  229. // 校验验证码
  230. checkMobileCode(token, mobile, code);
  231. // 设置返回值
  232. return success();
  233. }
  234. }