diff --git a/pom.xml b/pom.xml index 9dec4b1..5fd7585 100644 --- a/pom.xml +++ b/pom.xml @@ -213,7 +213,7 @@ com.imyeyu.font.icon timi-icon-font - 0.0.1 + 0.0.2 org.springframework.boot @@ -240,11 +240,6 @@ org.flywaydb flyway-mysql - - com.e2ins.ms.notify - e2ins-msg-notify-service-sdk - 0.0.9 - com.tencentcloudapi tencentcloud-sdk-java-sms diff --git a/src/main/java/com/imyeyu/api/config/BeanConfig.java b/src/main/java/com/imyeyu/api/config/BeanConfig.java index c52e365..f7472d3 100644 --- a/src/main/java/com/imyeyu/api/config/BeanConfig.java +++ b/src/main/java/com/imyeyu/api/config/BeanConfig.java @@ -1,12 +1,9 @@ package com.imyeyu.api.config; -import com.e2ins.ms.notify.SmsNotifyService; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategies; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.imyeyu.utils.Time; @@ -32,12 +29,6 @@ public class BeanConfig { .build(); } - @Bean - public SmsNotifyService smsNotifyService() { - // TODO - return new SmsNotifyService(null, null); - } - @Bean public Yaml yaml() { return new Yaml(); diff --git a/src/main/java/com/imyeyu/api/modules/common/controller/NotifyController.java b/src/main/java/com/imyeyu/api/modules/common/controller/NotifyController.java index 720f4cb..8621182 100644 --- a/src/main/java/com/imyeyu/api/modules/common/controller/NotifyController.java +++ b/src/main/java/com/imyeyu/api/modules/common/controller/NotifyController.java @@ -7,11 +7,16 @@ import com.imyeyu.api.modules.common.entity.Notify; import com.imyeyu.api.modules.common.entity.NotifyDetail; import com.imyeyu.api.modules.common.service.NotifyDetailService; import com.imyeyu.api.modules.common.service.NotifyService; +import com.imyeyu.api.modules.common.service.SmsService; import com.imyeyu.api.modules.user.entity.User; import com.imyeyu.api.modules.user.service.UserLoginService; import com.imyeyu.api.modules.user.service.UserService; import com.imyeyu.java.TimiJava; +import com.imyeyu.spring.annotation.AOPLog; +import com.imyeyu.spring.annotation.CaptchaValid; +import com.imyeyu.spring.annotation.RequestRateLimit; import com.imyeyu.spring.annotation.RequiredToken; +import com.imyeyu.spring.bean.CaptchaData; import com.imyeyu.spring.bean.Page; import com.imyeyu.spring.bean.PageResult; import com.imyeyu.spring.util.ResponseView; @@ -37,6 +42,8 @@ import java.util.stream.Stream; @RequestMapping("/notify") public class NotifyController { + + private final SmsService smsService; private final UserService userService; private final NotifyService service; private final UserLoginService userLoginService; @@ -104,6 +111,14 @@ public class NotifyController { service.cancel(id); } + @AOPLog + @CaptchaValid + @RequestRateLimit(value = 1, inSeconds = 59) + @PostMapping("/sms/captcha/create") + public String smsCaptchaCreate(@RequestBody CaptchaData req) { + return smsService.captchaCreate(req.getData()); + } + /// 查询当前用户的站内通知 /// /// @param page 分页参数 diff --git a/src/main/java/com/imyeyu/api/modules/common/entity/BaseQueueEntity.java b/src/main/java/com/imyeyu/api/modules/common/entity/BaseQueueEntity.java index b49a04c..2b8a32f 100644 --- a/src/main/java/com/imyeyu/api/modules/common/entity/BaseQueueEntity.java +++ b/src/main/java/com/imyeyu/api/modules/common/entity/BaseQueueEntity.java @@ -1,5 +1,6 @@ package com.imyeyu.api.modules.common.entity; +import com.fasterxml.jackson.databind.JsonNode; import com.imyeyu.spring.annotation.table.AutoUUID; import com.imyeyu.spring.annotation.table.Id; import com.imyeyu.spring.entity.Creatable; @@ -28,7 +29,7 @@ public class BaseQueueEntity implements IDEntity, Creatable, Destroyable protected String data; /** 参数 */ - protected String args; + protected JsonNode args; /** 发送去向 */ protected String sendTo; diff --git a/src/main/java/com/imyeyu/api/modules/common/entity/NotifyDetail.java b/src/main/java/com/imyeyu/api/modules/common/entity/NotifyDetail.java index 96482d5..7087cb0 100644 --- a/src/main/java/com/imyeyu/api/modules/common/entity/NotifyDetail.java +++ b/src/main/java/com/imyeyu/api/modules/common/entity/NotifyDetail.java @@ -1,6 +1,7 @@ package com.imyeyu.api.modules.common.entity; import com.fasterxml.jackson.annotation.JsonView; +import com.fasterxml.jackson.databind.JsonNode; import com.imyeyu.api.TimiServerAPI; import com.imyeyu.api.modules.common.service.BaseQueueService; import com.imyeyu.api.modules.common.service.HTTPQueueService; @@ -103,7 +104,7 @@ public class NotifyDetail extends UUIDEntity { /** 参数 */ @JsonView(ResponseView.Public.class) - private String args; + private JsonNode args; /** 发送来源 */ @JsonView(ResponseView.Public.class) diff --git a/src/main/java/com/imyeyu/api/modules/common/service/SmsService.java b/src/main/java/com/imyeyu/api/modules/common/service/SmsService.java index 282e1c5..defc3f8 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/SmsService.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/SmsService.java @@ -1,30 +1,30 @@ -//package com.imyeyu.api.modules.common.service; -// -//import com.e2ins.ms.notify.entity.Notify; -//import com.e2ins.ms.notify.entity.NotifyDetail; -// -///** -// * -// * -// * @author 夜雨 -// * @since 2026-05-14 12:12 -// */ -//public interface SmsService { -// -// /** -// * 创建短信验证码通知 -// * -// * @param detail 通知 -// * @return 通知详情 ID -// */ -// String captchaCreate(Notify detail); -// -// /** -// * 校验短信验证码 -// * -// * @param detailId 通知详情 ID -// * @param captcha 请求验证码 -// * @return 通知详情 -// */ -// NotifyDetail captchaVerify(String detailId, String captcha); -//} +package com.imyeyu.api.modules.common.service; + +import com.imyeyu.api.modules.common.entity.Notify; +import com.imyeyu.api.modules.common.entity.NotifyDetail; + +/** + * + * + * @author 夜雨 + * @since 2026-05-14 12:12 + */ +public interface SmsService { + + /** + * 创建短信验证码通知 + * + * @param detail 通知 + * @return 通知详情 ID + */ + String captchaCreate(Notify detail); + + /** + * 校验短信验证码 + * + * @param detailId 通知详情 ID + * @param captcha 请求验证码 + * @return 通知详情 + */ + NotifyDetail captchaVerify(String detailId, String captcha); +} diff --git a/src/main/java/com/imyeyu/api/modules/common/service/implement/SmsQueueServiceImplement.java b/src/main/java/com/imyeyu/api/modules/common/service/implement/SmsQueueServiceImplement.java index 670b515..ba7cdd5 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/implement/SmsQueueServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/implement/SmsQueueServiceImplement.java @@ -1,6 +1,5 @@ package com.imyeyu.api.modules.common.service.implement; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.imyeyu.api.modules.common.config.NotifyQueueConfig; import com.imyeyu.api.modules.common.entity.NotifyDetail; @@ -11,9 +10,9 @@ import com.imyeyu.api.modules.common.service.SmsQueueService; import com.imyeyu.api.modules.common.util.QCloudSmsProxy; import com.imyeyu.java.bean.timi.TimiCode; import com.imyeyu.java.bean.timi.TimiException; +import com.imyeyu.utils.Regex; import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse; import com.tencentcloudapi.sms.v20210111.models.SendStatus; -import com.imyeyu.utils.Regex; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -56,12 +55,7 @@ public class SmsQueueServiceImplement extends AbstractQueueService redisUserToken; @@ -104,20 +102,15 @@ public class UserLoginServiceImplement implements UserLoginService, TimiJava { @Override - public LoginResponse loginBySms(CaptchaVerifyReq req) { - try { - NotifyDetail detail = smsNotifyService.captchaVerify(req); - // 无报错即成功 - User user = userService.getByPhoneNo(detail.getSendTo()); - if (!user.isValidPhone()) { - user.setPhoneNoVerifyAt(Time.now()); - userService.update(user); - } - return login(UUID.randomUUID().toString(), user.getId()); - } catch (IOException e) { - log.error("login by sms error", e); - throw new TimiException(TimiCode.ERROR, "验证短信失败"); + public LoginResponse loginBySms(SmsCaptchaVerifyRequest request) { + NotifyDetail detail = smsService.captchaVerify(request.getDetailId(), request.getCaptcha()); + // 无报错即成功 + User user = userService.getByPhoneNo(detail.getSendTo()); + if (!user.isValidPhone()) { + user.setPhoneNoVerifyAt(Time.now()); + userService.update(user); } + return login(UUID.randomUUID().toString(), user.getId()); } @Override