package cn.lili.controller.passport; import cn.lili.common.aop.annotation.DemoSite; import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; import cn.lili.modules.sms.SmsUtil; import cn.lili.modules.verification.entity.enums.VerificationEnums; import cn.lili.modules.verification.service.VerificationService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotNull; /** * 店铺端,商家登录接口 * * @author Chopper * @since 2020/12/22 15:02 */ @RestController @Api(tags = "店铺端,商家登录接口 ") @RequestMapping("/store/passport/login") public class StorePassportController { /** * 会员 */ @Autowired private MemberService memberService; @Autowired private SmsUtil smsUtil; @Autowired private VerificationService verificationService; @ApiOperation(value = "登录接口") @ApiImplicitParams({ @ApiImplicitParam(name = "username", value = "用户名", required = true, paramType = "query"), @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "query") }) @PostMapping("/userLogin") public ResultMessage userLogin(@NotNull(message = "用户名不能为空") @RequestParam String username, @NotNull(message = "密码不能为空") @RequestParam String password, @RequestHeader String uuid) { if (verificationService.check(uuid, VerificationEnums.LOGIN)) { return ResultUtil.data(this.memberService.usernameStoreLogin(username, password)); } else { throw new ServiceException(ResultCode.VERIFICATION_ERROR); } } @ApiOperation(value = "短信登录接口") @ApiImplicitParams({ @ApiImplicitParam(name = "mobile", value = "手机号", required = true, paramType = "query"), @ApiImplicitParam(name = "code", value = "验证码", required = true, paramType = "query") }) @PostMapping("/smsLogin") public ResultMessage smsLogin(@NotNull(message = "手机号为空") @RequestParam String mobile, @NotNull(message = "验证码为空") @RequestParam String code, @RequestHeader String uuid) { if (smsUtil.verifyCode(mobile, VerificationEnums.LOGIN, uuid, code)) { return ResultUtil.data(memberService.mobilePhoneStoreLogin(mobile)); } else { throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR); } } @ApiOperation(value = "注销接口") @PostMapping("/logout") public ResultMessage logout() { this.memberService.logout(UserEnums.STORE); return ResultUtil.success(); } @ApiOperation(value = "通过短信重置密码") @ApiImplicitParams({ @ApiImplicitParam(name = "mobile", value = "手机号", required = true, paramType = "query"), @ApiImplicitParam(name = "password", value = "是否保存登录", required = true, paramType = "query") }) @PostMapping("/resetByMobile") public ResultMessage resetByMobile(@NotNull(message = "手机号为空") @RequestParam String mobile, @NotNull(message = "验证码为空") @RequestParam String code, @RequestHeader String uuid) { //校验短信验证码是否正确 if (smsUtil.verifyCode(mobile, VerificationEnums.FIND_USER, uuid, code)) { //校验是否通过手机号可获取会员,存在则将会员信息存入缓存,有效时间3分钟 memberService.findByMobile(uuid, mobile); return ResultUtil.success(); } else { throw new ServiceException(ResultCode.VERIFICATION_SMS_CHECKED_ERROR); } } @ApiOperation(value = "修改密码") @ApiImplicitParams({ @ApiImplicitParam(name = "password", value = "密码", required = true, paramType = "query") }) @PostMapping("/resetPassword") public ResultMessage resetByMobile(@NotNull(message = "密码为空") @RequestParam String password, @RequestHeader String uuid) { return ResultUtil.data(memberService.resetByMobile(uuid, password)); } @ApiOperation(value = "修改密码") @ApiImplicitParams({ @ApiImplicitParam(name = "password", value = "旧密码", required = true, paramType = "query"), @ApiImplicitParam(name = "newPassword", value = "新密码", required = true, paramType = "query") }) @PostMapping("/modifyPass") public ResultMessage modifyPass(@NotNull(message = "旧密码不能为空") @RequestParam String password, @NotNull(message = "新密码不能为空") @RequestParam String newPassword) { AuthUser tokenUser = UserContext.getCurrentUser(); if (tokenUser == null) { throw new ServiceException(ResultCode.USER_NOT_LOGIN); } return ResultUtil.data(memberService.modifyPass(password, newPassword)); } @ApiOperation(value = "刷新token") @GetMapping("/refresh/{refreshToken}") public ResultMessage refreshToken(@NotNull(message = "刷新token不能为空") @PathVariable String refreshToken) { return ResultUtil.data(this.memberService.refreshStoreToken(refreshToken)); } }