diff --git a/playlet-admin/src/main/java/com/playlet/web/controller/app/PlayletUserAppController.java b/playlet-admin/src/main/java/com/playlet/web/controller/app/PlayletUserAppController.java index 319b3d6..95b6f40 100644 --- a/playlet-admin/src/main/java/com/playlet/web/controller/app/PlayletUserAppController.java +++ b/playlet-admin/src/main/java/com/playlet/web/controller/app/PlayletUserAppController.java @@ -2,6 +2,7 @@ package com.playlet.web.controller.app; import com.playlet.common.core.domain.Result; import com.playlet.system.domain.PlayletUser; +import com.playlet.web.req.PlayUserReq; import com.playlet.web.service.app.PlayletUserAppService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -31,4 +32,38 @@ public class PlayletUserAppController { } } + @ResponseBody + @PostMapping(value = "/loginByPhone") + @ApiOperation(value = "小程序通过手机验证码登录系统", httpMethod = "POST") + public Result loginByOpenid(@RequestBody PlayUserReq userReq){ + try { + return Result.success(playletUserAppService.getByPhone(userReq)); + }catch (Exception e){ + return Result.error(e.getMessage()); + } + } + + @ResponseBody + @PostMapping(value = "/loginByPassword") + @ApiOperation(value = "小程序通过手机和密码登录系统", httpMethod = "POST") + public Result loginByPassword(@RequestBody PlayUserReq userReq){ + try { + return Result.success(playletUserAppService.getByPassword(userReq)); + }catch (Exception e){ + return Result.error(e.getMessage()); + } + } + + @ResponseBody + @PostMapping(value = "/updatePlayletUser") + @ApiOperation(value = "修改用户资料", httpMethod = "POST") + public Result updatePlayletUser(@RequestBody PlayletUser playletUser){ + try { + playletUserAppService.updatePlayletUser(playletUser); + return Result.success(); + }catch (Exception e){ + return Result.error(e.getMessage()); + } + } + } diff --git a/playlet-admin/src/main/java/com/playlet/web/controller/tool/SwaggerController.java b/playlet-admin/src/main/java/com/playlet/web/controller/tool/SwaggerController.java index be27f78..9a89c8a 100644 --- a/playlet-admin/src/main/java/com/playlet/web/controller/tool/SwaggerController.java +++ b/playlet-admin/src/main/java/com/playlet/web/controller/tool/SwaggerController.java @@ -1,6 +1,5 @@ package com.playlet.web.controller.tool; -import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/playlet-admin/src/main/java/com/playlet/web/controller/tool/TestController.java b/playlet-admin/src/main/java/com/playlet/web/controller/tool/TestController.java deleted file mode 100644 index 2d64c17..0000000 --- a/playlet-admin/src/main/java/com/playlet/web/controller/tool/TestController.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.playlet.web.controller.tool; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import com.playlet.common.core.controller.BaseController; -import com.playlet.common.core.domain.R; -import com.playlet.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.annotations.ApiOperation; - -/** - * swagger 用户测试方法 - * - * @author ruoyi - */ -//@Api("用户信息管理") -@RestController -@RequestMapping("/test/user") -public class TestController extends BaseController -{ - private final static Map users = new LinkedHashMap(); - { - users.put(1, new UserEntity(1, "admin", "admin123", "15888888888")); - users.put(2, new UserEntity(2, "ry", "admin123", "15666666666")); - } - - @ApiOperation("获取用户列表") - @GetMapping("/list") - public R> userList() - { - List userList = new ArrayList(users.values()); - return R.ok(userList); - } - - @ApiOperation("获取用户详细") - @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) - @GetMapping("/{userId}") - public R getUser(@PathVariable Integer userId) - { - if (!users.isEmpty() && users.containsKey(userId)) - { - return R.ok(users.get(userId)); - } - else - { - return R.fail("用户不存在"); - } - } - - @ApiOperation("新增用户") - @ApiImplicitParams({ - @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class), - @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class), - @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class), - @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class) - }) - @PostMapping("/save") - public R save(UserEntity user) - { - if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) - { - return R.fail("用户ID不能为空"); - } - users.put(user.getUserId(), user); - return R.ok(); - } - - @ApiOperation("更新用户") - @PutMapping("/update") - public R update(@RequestBody UserEntity user) - { - if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) - { - return R.fail("用户ID不能为空"); - } - if (users.isEmpty() || !users.containsKey(user.getUserId())) - { - return R.fail("用户不存在"); - } - users.remove(user.getUserId()); - users.put(user.getUserId(), user); - return R.ok(); - } - - @ApiOperation("删除用户信息") - @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) - @DeleteMapping("/{userId}") - public R delete(@PathVariable Integer userId) - { - if (!users.isEmpty() && users.containsKey(userId)) - { - users.remove(userId); - return R.ok(); - } - else - { - return R.fail("用户不存在"); - } - } -} - -@ApiModel(value = "UserEntity", description = "用户实体") -class UserEntity -{ - @ApiModelProperty("用户ID") - private Integer userId; - - @ApiModelProperty("用户名称") - private String username; - - @ApiModelProperty("用户密码") - private String password; - - @ApiModelProperty("用户手机") - private String mobile; - - public UserEntity() - { - - } - - public UserEntity(Integer userId, String username, String password, String mobile) - { - this.userId = userId; - this.username = username; - this.password = password; - this.mobile = mobile; - } - - public Integer getUserId() - { - return userId; - } - - public void setUserId(Integer userId) - { - this.userId = userId; - } - - public String getUsername() - { - return username; - } - - public void setUsername(String username) - { - this.username = username; - } - - public String getPassword() - { - return password; - } - - public void setPassword(String password) - { - this.password = password; - } - - public String getMobile() - { - return mobile; - } - - public void setMobile(String mobile) - { - this.mobile = mobile; - } -} diff --git a/playlet-admin/src/main/java/com/playlet/web/req/PlayUserReq.java b/playlet-admin/src/main/java/com/playlet/web/req/PlayUserReq.java index 906df83..8b7f3e6 100644 --- a/playlet-admin/src/main/java/com/playlet/web/req/PlayUserReq.java +++ b/playlet-admin/src/main/java/com/playlet/web/req/PlayUserReq.java @@ -1,6 +1,7 @@ package com.playlet.web.req; import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -13,10 +14,13 @@ public class PlayUserReq { private String nickName; + @ApiModelProperty(value = "手机号") private String phone; + @ApiModelProperty(value = "验证码") private String code; + @ApiModelProperty(value = "密码") private String password; private String inviteCode; diff --git a/playlet-admin/src/main/java/com/playlet/web/service/app/PlayletUserAppService.java b/playlet-admin/src/main/java/com/playlet/web/service/app/PlayletUserAppService.java index c477498..120acc4 100644 --- a/playlet-admin/src/main/java/com/playlet/web/service/app/PlayletUserAppService.java +++ b/playlet-admin/src/main/java/com/playlet/web/service/app/PlayletUserAppService.java @@ -1,6 +1,7 @@ package com.playlet.web.service.app; import com.playlet.system.domain.PlayletUser; +import com.playlet.web.req.PlayUserReq; /** *

短剧小程序用户service

@@ -14,4 +15,21 @@ public interface PlayletUserAppService { */ PlayletUser getByOpenId(String openid); + /** + * @param playUserReq 手机号登陆 + * @return 结果 + */ + PlayletUser getByPhone(PlayUserReq playUserReq) throws Exception; + + /** + * @param playUserReq 密码登录 + * @return 结果 + */ + PlayletUser getByPassword(PlayUserReq playUserReq) throws Exception; + + /** + * @param playletUser 填写用户资料 + */ + void updatePlayletUser(PlayletUser playletUser); + } diff --git a/playlet-admin/src/main/java/com/playlet/web/service/app/impl/PlayletUserAppServiceImpl.java b/playlet-admin/src/main/java/com/playlet/web/service/app/impl/PlayletUserAppServiceImpl.java index ea5f5ea..fe65be0 100644 --- a/playlet-admin/src/main/java/com/playlet/web/service/app/impl/PlayletUserAppServiceImpl.java +++ b/playlet-admin/src/main/java/com/playlet/web/service/app/impl/PlayletUserAppServiceImpl.java @@ -2,12 +2,16 @@ package com.playlet.web.service.app.impl; import cn.hutool.core.util.ObjectUtil; import com.playlet.common.constant.PlayletConstants; +import com.playlet.common.constant.RedisConstants; import com.playlet.system.domain.PlayletUser; import com.playlet.system.service.IPlayletUserService; +import com.playlet.web.req.PlayUserReq; import com.playlet.web.service.app.PlayletUserAppService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.util.Date; @@ -19,6 +23,8 @@ public class PlayletUserAppServiceImpl implements PlayletUserAppService { private final IPlayletUserService iPlayletUserService; + private final StringRedisTemplate stringRedisTemplate; + @Override public PlayletUser getByOpenId(String openid) { PlayletUser playletUser = iPlayletUserService.lambdaQuery().eq(PlayletUser::getOpenId, openid).one(); @@ -32,4 +38,33 @@ public class PlayletUserAppServiceImpl implements PlayletUserAppService { return playletUser; } + @Override + public PlayletUser getByPhone(PlayUserReq playUserReq) throws Exception{ + String alreadyCode = stringRedisTemplate.opsForValue().get(RedisConstants.SMS_CODE_PREFIX + playUserReq.getPhone()); + if(StringUtils.isEmpty(alreadyCode)){ + throw new Exception("验证码已过期!"); + } + if(!alreadyCode.equals(playUserReq.getCode())){ + throw new Exception("短信验证码错误!"); + } + return iPlayletUserService.lambdaQuery() + .eq(PlayletUser::getPhone, playUserReq.getPhone()).one(); + } + + @Override + public PlayletUser getByPassword(PlayUserReq playUserReq) throws Exception { + PlayletUser playletUser = iPlayletUserService.lambdaQuery() + .eq(PlayletUser::getPhone, playUserReq.getPhone()) + .eq(PlayletUser::getPassword, playUserReq.getPassword()).one(); + if(playletUser == null){ + throw new Exception("账号或密码错误!"); + }else { + return playletUser; + } + } + + @Override + public void updatePlayletUser(PlayletUser playletUser) { + iPlayletUserService.updateById(playletUser); + } } diff --git a/playlet-admin/src/main/java/com/playlet/web/service/impl/SmsServiceImpl.java b/playlet-admin/src/main/java/com/playlet/web/service/impl/SmsServiceImpl.java index 82b6914..dd59949 100644 --- a/playlet-admin/src/main/java/com/playlet/web/service/impl/SmsServiceImpl.java +++ b/playlet-admin/src/main/java/com/playlet/web/service/impl/SmsServiceImpl.java @@ -5,14 +5,18 @@ import com.aliyun.dysmsapi20170525.models.SendSmsRequest; import com.aliyun.dysmsapi20170525.models.SendSmsResponse; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; +import com.playlet.common.constant.RedisConstants; import com.playlet.web.core.config.SmsConfig; import com.playlet.web.service.SmsService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import java.util.concurrent.TimeUnit; + @Slf4j @Service @RequiredArgsConstructor(onConstructor = @__(@Autowired)) @@ -25,6 +29,10 @@ public class SmsServiceImpl implements SmsService { @Override public void sendSmsCode(String phone) throws Exception{ // 短信验证码 + String alreadyCode = stringRedisTemplate.opsForValue().get(RedisConstants.SMS_CODE_PREFIX + phone); + if(StringUtils.isNotEmpty(alreadyCode)){ + throw new Exception("已发的验证码还在有效期!"); + } String code = String.valueOf((int)((Math.random() * 9 + 1) * Math.pow(10,5))); // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html Client client = createClient(smsConfig.getAccessKeyId(), smsConfig.getAccessKeySecret()); @@ -37,6 +45,7 @@ public class SmsServiceImpl implements SmsService { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("发送给{}短信响应为{}", phone, sendSmsResponse); + stringRedisTemplate.opsForValue().set(RedisConstants.SMS_CODE_PREFIX + phone, code, 300, TimeUnit.SECONDS); } /** diff --git a/playlet-admin/src/main/resources/application.yml b/playlet-admin/src/main/resources/application.yml index 5fae754..7f89112 100644 --- a/playlet-admin/src/main/resources/application.yml +++ b/playlet-admin/src/main/resources/application.yml @@ -45,6 +45,20 @@ user: # Spring配置 spring: + # redis配置 + redis: + database: 1 + host: 121.62.23.77 + port: 6379 + password: Clunt@12345 + timeout: 6000ms # 连接超时时长(毫秒) + lettuce: + pool: + max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) + max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) + max-idle: 10 # 连接池中的最大空闲连接 + min-idle: 5 # 连接池中的最小空闲连接 + # 模板引擎 thymeleaf: mode: HTML diff --git a/playlet-common/src/main/java/com/playlet/common/constant/RedisConstants.java b/playlet-common/src/main/java/com/playlet/common/constant/RedisConstants.java new file mode 100644 index 0000000..1db57f2 --- /dev/null +++ b/playlet-common/src/main/java/com/playlet/common/constant/RedisConstants.java @@ -0,0 +1,10 @@ +package com.playlet.common.constant; + +public class RedisConstants { + + /** + * 短剧APP验证码缓存前缀 + */ + public static final String SMS_CODE_PREFIX = "PLAYLET_SMS_PREFIX_"; + +}