From efdb99f8cecc4afb592afad79c761081d5d5cf22 Mon Sep 17 00:00:00 2001 From: lee <4766465@qq.com> Date: Wed, 18 Dec 2024 13:27:00 +0800 Subject: [PATCH] init --- yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopUserRegisterController.java | 199 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 199 insertions(+), 0 deletions(-) diff --git a/yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopUserRegisterController.java b/yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopUserRegisterController.java new file mode 100644 index 0000000..2dc0056 --- /dev/null +++ b/yami-shop-api/src/main/java/com/yami/shop/api/controller/ShopUserRegisterController.java @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ +package com.yami.shop.api.controller; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Maps; +import com.yami.shop.bean.app.param.CheckRegisterSmsParam; +import com.yami.shop.bean.app.param.SendSmsParam; +import com.yami.shop.bean.dto.ShopUserRegisterDto; +import com.yami.shop.bean.enums.SendType; +import com.yami.shop.common.config.Constant; +import com.yami.shop.common.exception.YamiShopBindException; +import com.yami.shop.common.i18n.I18nMessage; +import com.yami.shop.common.i18n.LanguageEnum; +import com.yami.shop.common.response.ServerResponseEntity; +import com.yami.shop.common.util.PrincipalUtil; +import com.yami.shop.common.util.RedisUtil; +import com.yami.shop.security.common.bo.UserInfoInTokenBO; +import com.yami.shop.security.common.enums.SysTypeEnum; +import com.yami.shop.security.common.manager.PasswordManager; +import com.yami.shop.security.common.manager.TokenStore; +import com.yami.shop.security.common.vo.TokenInfoVO; +import com.yami.shop.service.SmsLogService; +import com.yami.shop.service.SysConfigService; +import com.yami.shop.sys.common.model.ShopEmployee; +import com.yami.shop.sys.common.service.ShopEmployeeService; +import com.yami.shop.sys.common.service.ShopMenuService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @Author lth + * @Date 2021/7/7 14:43 + */ +@RestController +@RequestMapping("/p/shop/shopUserRegister") +@Tag(name = "店铺注册接口") +@AllArgsConstructor +public class ShopUserRegisterController { + + private final SysConfigService sysConfigService; + private final SmsLogService smsLogService; + private final ShopEmployeeService shopEmployeeService; + private final PasswordEncoder passwordEncoder; + private final PasswordManager passwordManager; + private final ShopMenuService shopMenuService; + private final TokenStore tokenStore; + + private static final String CHECK_UPDATE_PWD_SMS_FLAG = "updateShopEmployeePwdSmsFlag"; + + @GetMapping("/getMerchantRegisterProtocol") + @Operation(summary = "获取商家注册协议" , description = "获取商家注册协议") + public ServerResponseEntity<String> getMerchantRegisterProtocol() { + Integer dbLang = I18nMessage.getDbLang(); + if(Objects.equals(LanguageEnum.LANGUAGE_EN.getLang(), dbLang)) { + return ServerResponseEntity.success(sysConfigService.getValue(Constant.MERCHANT_REGISTER_PROTOCOL_EN)); + } + return ServerResponseEntity.success(sysConfigService.getValue(Constant.MERCHANT_REGISTER_PROTOCOL_CN)); + } + + @GetMapping("/getShopProtocol") + @Operation(summary = "获取开店协议" , description = "获取开店协议") + public ServerResponseEntity<String> getShopProtocol() { + Integer dbLang = I18nMessage.getDbLang(); + if(Objects.equals(LanguageEnum.LANGUAGE_EN.getLang(), dbLang)) { + return ServerResponseEntity.success(sysConfigService.getValue(Constant.SHOP_PROTOCOL_EN)); + } + return ServerResponseEntity.success(sysConfigService.getValue(Constant.SHOP_PROTOCOL_CN)); + } + + @PostMapping("/sendCode") + @Operation(summary = "发送申请开店验证码" , description = "发送申请开店验证码") + public ServerResponseEntity<Void> sendCode(@Valid @RequestBody SendSmsParam sendSmsParam) { + int count = shopEmployeeService.count(Wrappers.lambdaQuery(ShopEmployee.class).eq(ShopEmployee::getMobile, sendSmsParam.getMobile())); + if (count > 0) { + // 手机号已存在 + throw new YamiShopBindException("yami.phone.number.already.exists"); + } + smsLogService.sendSms(SendType.VALID, sendSmsParam.getMobile(), sendSmsParam.getMobile(), Maps.newHashMap()); + return ServerResponseEntity.success(); + } + + @PostMapping + @Operation(summary = "注册商家" , description = "注册商家") + public ServerResponseEntity<TokenInfoVO> register(@Valid @RequestBody ShopUserRegisterDto shopUserRegisterDTO) { + ShopEmployee shopEmployee = shopEmployeeService.registerMerchant(shopUserRegisterDTO); + UserInfoInTokenBO userInfoInToken = new UserInfoInTokenBO(); + userInfoInToken.setUserId(shopEmployee.getEmployeeId().toString()); + userInfoInToken.setSysType(SysTypeEnum.MULTISHOP.value()); + userInfoInToken.setEnabled(shopEmployee.getStatus() == 1); + userInfoInToken.setShopId(shopEmployee.getShopId()); + userInfoInToken.setOtherId(shopEmployee.getEmployeeId()); + userInfoInToken.setPerms(shopMenuService.getShopPermissions(shopEmployee)); + // 存储token返回vo + TokenInfoVO tokenInfoVO = tokenStore.storeAndGetVo(userInfoInToken); + return ServerResponseEntity.success(tokenInfoVO); + } + + @PostMapping("/sendUpdatePwdCode") + @Operation(summary = "发送修改密码验证码接口" , description = "发送修改密码验证码接口") + public ServerResponseEntity<Void> sendUpdatePwdCode(@Valid @RequestBody SendSmsParam sendSmsParam) { + ShopEmployee shopEmployee = shopEmployeeService.getOne(Wrappers.lambdaQuery(ShopEmployee.class).eq(ShopEmployee::getMobile, sendSmsParam.getMobile())); + if (Objects.isNull(shopEmployee)) { + // 手机号不存在 + throw new YamiShopBindException("yami.phone.number.not.exists"); + } + smsLogService.sendSms(SendType.VALID, shopEmployee.getEmployeeId().toString(), sendSmsParam.getMobile(), Maps.newHashMap()); + return ServerResponseEntity.success(); + } + + @PutMapping("/checkUpdatePwdSms") + @Operation(summary = "修改密码校验验证码" , description = "校验验证码返回校验成功的标识") + public ServerResponseEntity<String> checkUpdatePwdSms(@Valid @RequestBody CheckRegisterSmsParam checkRegisterSmsParam) { + boolean isCheckPass = false; + if (Objects.nonNull(checkRegisterSmsParam) && Objects.nonNull(checkRegisterSmsParam.getMobile())) { + Matcher m = Pattern.compile(PrincipalUtil.MOBILE_REGEXP).matcher(checkRegisterSmsParam.getMobile()); + isCheckPass = m.matches(); + } + if (!isCheckPass) { + throw new YamiShopBindException("yami.user.err.phone"); + } + + ShopEmployee shopEmployee = shopEmployeeService.getOne(Wrappers.lambdaQuery(ShopEmployee.class).eq(ShopEmployee::getMobile, checkRegisterSmsParam.getMobile())); + if (Objects.isNull(shopEmployee)) { + // 手机号不存在 + throw new YamiShopBindException("yami.phone.number.not.exists"); + } + if(StrUtil.isBlank(checkRegisterSmsParam.getValidCode())){ + throw new YamiShopBindException("yami.user.code.empty"); + } + String defaultCode = sysConfigService.getValue("UPDATE_DEFAULT_CODE"); + // 验证码登录 + if(!defaultCode.equals(checkRegisterSmsParam.getValidCode())) { + if (!smsLogService.checkValidCode(shopEmployee.getMobile(), checkRegisterSmsParam.getValidCode(), SendType.VALID)) { + // 验证码有误或已过期 + throw new YamiShopBindException("yami.user.code.error"); + } + } + String checkRegisterSmsFlag = IdUtil.simpleUUID(); + RedisUtil.set(CHECK_UPDATE_PWD_SMS_FLAG + checkRegisterSmsFlag, checkRegisterSmsParam.getMobile(), 600); + return ServerResponseEntity.success(checkRegisterSmsFlag); + } + + @PutMapping("/updatePwd") + @Operation(summary = "修改密码" , description = "修改密码") + public ServerResponseEntity<Void> updatePwd(@RequestBody ShopUserRegisterDto shopUserRegisterDto) { + ShopEmployee shopEmployee = shopEmployeeService.getOne(Wrappers.lambdaQuery(ShopEmployee.class).eq(ShopEmployee::getMobile, shopUserRegisterDto.getMobile())); + if (Objects.isNull(shopEmployee)) { + // 手机号不存在 + throw new YamiShopBindException("yami.phone.number.not.exists"); + } + // 看看有没有校验验证码成功的标识 + if (StrUtil.isBlank(shopUserRegisterDto.getCheckRegisterSmsFlag())) { + // 验证码已过期,请重新发送验证码校验 + throw new YamiShopBindException("yami.verification.expire"); + } else { + String checkRegisterSmsFlag = CHECK_UPDATE_PWD_SMS_FLAG + shopUserRegisterDto.getCheckRegisterSmsFlag(); + String checkRegisterSmsFlagMobile = RedisUtil.get(checkRegisterSmsFlag); + if (!Objects.equals(checkRegisterSmsFlagMobile, shopUserRegisterDto.getMobile())) { + // 验证码已过期,请重新发送验证码校验 + throw new YamiShopBindException("yami.verification.expire"); + } + } + String decryptPassword = passwordManager.decryptPassword(shopUserRegisterDto.getPassword()); + if (StrUtil.isBlank(decryptPassword)) { + // 新密码不能为空 + throw new YamiShopBindException("yami.user.password.no.exist"); + } + if (StrUtil.equals(passwordEncoder.encode(decryptPassword), shopEmployee.getPassword())) { + // 新密码不能与原密码相同! + throw new YamiShopBindException("yami.user.password.check"); + } + Boolean updateRes = shopEmployeeService.updatePasswordByEmployeeId(shopEmployee.getEmployeeId(), passwordEncoder.encode(decryptPassword)); + if (!updateRes) { + throw new YamiShopBindException("更新失败"); + } else { + RedisUtil.del(CHECK_UPDATE_PWD_SMS_FLAG + shopUserRegisterDto.getCheckRegisterSmsFlag()); + } + return ServerResponseEntity.success(); + } + +} -- Gitblit v1.9.3