| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- package com.uas.sso.controller;
- import com.alibaba.fastjson.JSON;
- import com.uas.sso.AccountConfig;
- import com.uas.sso.SSOHelper;
- import com.uas.sso.SSOToken;
- import com.uas.sso.foreign.bihe.entity.BiHeInfo;
- import com.uas.sso.core.PasswordStrength;
- import com.uas.sso.core.Status;
- import com.uas.sso.core.Step;
- import com.uas.sso.core.Type;
- import com.uas.sso.entity.*;
- import com.uas.sso.logging.LoggerManager;
- import com.uas.sso.logging.RegisterBufferedLogger;
- import com.uas.sso.service.AppService;
- import com.uas.sso.service.UserAccountService;
- import com.uas.sso.service.UserService;
- import com.uas.sso.service.UserspaceService;
- import com.uas.sso.util.PasswordLevelUtils;
- import com.uas.sso.foreign.weixin.entity.OAuthInfo;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.ModelMap;
- import org.springframework.util.StringUtils;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.ResponseBody;
- import java.util.List;
- import java.util.Optional;
- /**
- * 企业注册controller
- *
- * @author wangmh
- * @date 2018/1/4
- */
- @RequestMapping("/sso/userspace/register")
- @Controller
- public class UserspaceRegisterController extends BaseController {
- @Autowired
- private UserService userService;
- @Autowired
- private UserspaceService userspaceService;
- @Autowired
- private UserAccountService userAccountService;
- @Autowired
- private AppService appService;
- private RegisterBufferedLogger registerLogger = LoggerManager.getLogger(RegisterBufferedLogger.class);
- /**
- * 企业注册第一步,验证手机号
- *
- * @param mobile 手机号
- * @param code 验证码
- * @param token 验证码tokenId
- * @return
- */
- @RequestMapping(value = "/checkAdminTel", method = RequestMethod.POST)
- @ResponseBody
- public ModelMap checkAdminTel(String mobile, String code, String token, String appId) {
- // 校验验证码
- checkMobileCode(token, mobile, code);
- // 设置返回数据
- ModelMap data = new ModelMap();
- User user = userService.findByMobile(mobile);
- if (user == null) {
- data.put("hasRegister", false);
- } else {
- data.put("hasRegister", true);
- data.put("hasEmail", !StringUtils.isEmpty(user.getEmail()));
- }
- request.getSession().setAttribute("mobile", mobile);
- // 删除token
- tokenService.delete(token);
- // 添加日志
- appId = StringUtils.isEmpty(appId) ? AccountConfig.ACCOUNT_CENTER : appId;
- registerLogger.info(Type.REGISTER_USERSPACE.getValue(), Step.FIRST.getValue(), "企业注册", mobile, appId);
- return success(data);
- }
- /**
- * 企业注册第二步,填写企业信息
- *
- * @param userspace 企业信息
- * @return
- */
- @RequestMapping(method = RequestMethod.POST)
- @ResponseBody
- public ModelMap register(Userspace userspace, User user, String appId, String baseUrl, String t) {
- // 获取企业信息
- String spaceName = userspace.getSpaceName();
- String businessCode = userspace.getBusinessCode();
- String adminName = user.getVipName();
- String password = user.getPassword();
- String adminEmail = user.getEmail();
- // 校验参数
- appId = StringUtils.isEmpty(appId) ? AccountConfig.ACCOUNT_CENTER : appId;
- String mobile = (String) request.getSession().getAttribute("mobile");
- if (StringUtils.isEmpty(mobile)) {
- return error("请刷新后重试");
- }
- if (StringUtils.isEmpty(spaceName)) {
- return error("请填写正确的企业名称");
- }
- if (StringUtils.isEmpty(businessCode)) {
- return error("请填写正确的企业营业执照号");
- }
- if (StringUtils.isEmpty(password)) {
- return error("密码不能为空");
- }
- User admin = userService.findByMobile(mobile);
- if (admin == null) {
- // 新用户: 管理员名称,密码不能为空
- if (StringUtils.isEmpty(adminName)) {
- return error("请填写正确的管理员名称");
- }
- // 新用户要校验密码强度
- PasswordStrength strength = PasswordLevelUtils.checkPasswordLevel(password);
- if (PasswordStrength.WEAK.getValue() == strength.getValue()) {
- return error("密码须为8-20字符的英文、数字混合");
- }
- }
- // 设置企业管理员信息
- if (admin == null) {
- // 新用户直接注册
- admin = new User();
- admin.setMobile(mobile);
- admin.setVipName(adminName);
- admin.setPassword(password);
- admin.setEmail(adminEmail);
- } else {
- // 老用户校验密码
- userService.checkPassword(admin.getUserUU(), user.getPassword(), false);
- // 老用户邮箱不为已认证的话设置邮箱
- if (admin.getEmailValidCode() != Status.AUTHENTICATED.getCode()) {
- admin.setEmail(adminEmail);
- admin.setEmailValidCode((short) Status.NOT_APPLYING.getCode());
- }
- }
- // 设置第三方id
- if (!StringUtils.isEmpty(t)) {
- Token unionidToken = tokenService.findOne(t);
- Optional<ModelMap> optionalMap = Optional.ofNullable(unionidToken).map(value -> (ModelMap) value.getBind());
- String type = optionalMap.map(value -> (String) value.get("type")).orElse(null);
- switch (type) {
- case "weixin":
- admin.setWxUnionid(optionalMap.map(value -> (OAuthInfo) value.get("data")).map(OAuthInfo::getUnionid).orElse(null));
- break;
- case "bihe":
- admin.setBhOpenId(optionalMap.map(value -> (BiHeInfo) value.get("data")).map(BiHeInfo::getOpenId).orElse(null));
- break;
- default:
- break;
- }
- tokenService.delete(t);
- }
- // 企业注册
- userspace.setAdmin(admin);
- userspace = userspaceService.register(userspace, appId);
- // 发送邮件和短信
- ModelMap info = new ModelMap();
- info.addAttribute("enname", userspace.getSpaceName());
- info.addAttribute("enuu", userspace.getSpaceUU());
- sendEmail("templateForSendMailAfterRegister", admin.getEmail(), info);
- sendSms("templateForSendSmsAfterRegister", admin.getMobile(), userspace.getSpaceName(), userspace.getSpaceUU());
- // 添加日志
- registerLogger.info(Type.REGISTER_USERSPACE.getValue(), Step.SECOND.getValue(), "企业注册", userspace, appId);
- App app = appService.findOne(appId);
- if ("mall".equals(appId)) {
- UserAccount userAccount = userAccountService.findOneByUserUU(appId, admin.getUserUU(), userspace.getSpaceUU());
- List<String> loginUrls = appService.findAllLoginUrl();
- ModelMap data = new ModelMap();
- data.addAttribute("data", userAccount)
- .addAttribute("loginUrls", loginUrls)
- .addAttribute("currentUrl", baseUrl)
- .addAttribute("type", "mall");
- SSOToken st = new SSOToken(request, userAccount.getMobile());
- st.setData(JSON.toJSONString(userAccount));
- SSOHelper.setSSOCookie(request, response, st, true);
- return success(data);
- } else if ("city".equals(appId) || "city".equals(app.getUserControl())) {
- UserAccount userAccount = userAccountService.findOneByUserUU(appId, admin.getUserUU(), userspace.getSpaceUU());
- List<String> loginUrls = appService.findAllLoginUrl();
- ModelMap data = new ModelMap();
- data.addAttribute("bgImage", "https://dfs.ubtob.com/group1/M00/88/AE/CgpkyFsPxC-ADHD8ACBM14PiAS8632.png")
- .addAttribute("type", "city");
- data.addAttribute("data", userAccount)
- .addAttribute("loginUrls", loginUrls)
- .addAttribute("currentUrl", baseUrl);
- SSOToken st = new SSOToken(request, userAccount.getMobile());
- st.setData(JSON.toJSONString(userAccount));
- SSOHelper.setSSOCookie(request, response, st, true);
- return success(data);
- }
- return success();
- }
- /**
- * 获取验证码
- *
- * @param mobile 手机号
- * @param mobileArea
- * @return success(tokenId)
- */
- @RequestMapping(value = "/checkCode", method = RequestMethod.GET)
- @ResponseBody
- public ModelMap getCode(String mobile, String mobileArea) {
- // 校验手机号
- checkMobile(mobile, mobileArea);
- // 获取验证码
- String token = getMobileToken(mobile);
- // 设置返回数据
- ModelMap data = new ModelMap();
- data.put("token", token);
- data.put("code", request.getSession().getAttribute("code"));
- request.getSession().setAttribute("token", token);
- return data;
- }
- /**
- * 校验验证码
- *
- * @param code 验证码
- * @param token 验证码tokenId
- * @return 验证成功:success()
- */
- @RequestMapping(value = "/checkCode", method = RequestMethod.POST)
- @ResponseBody
- public ModelMap checkCode(String token, String mobile, String code) {
- // 校验token是否正确
- String sessionToken = (String) request.getSession().getAttribute("token");
- if (StringUtils.isEmpty(sessionToken) || !sessionToken.equals(token)) {
- return error("请重新获取验证码");
- }
- // 校验验证码
- checkMobileCode(token, mobile, code);
- // 设置返回值
- return success();
- }
- }
|