Ver código fonte

feat(store): 新增短信验证码管理功能

- 新增短信验证码实体类 StoreVerificationCode 及相关字段定义
- 实现短信验证码的 CRUD 接口 StoreVerificationCodeController
- 提供分页查询、详情查看、新增、更新和删除验证码记录的功能
- 集成 MyBatis Plus 实现数据库操作及逻辑删除支持
- 添加 Swagger 注解用于接口文档说明与参数描述
- 实现 Service 层业务逻辑包括数据校验与时间戳维护
fcw 2 semanas atrás
pai
commit
a88912cc32

+ 73 - 0
alien-entity/src/main/java/shop/alien/entity/store/StoreVerificationCode.java

@@ -0,0 +1,73 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 短信验证码记录
+ */
+@Data
+@TableName("store_verification_code")
+public class StoreVerificationCode extends Model<StoreVerificationCode> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("业务类型 (0:登录,1:修改密码,2:注册,3:修改手机号,4:注销店铺,5:注销账号,6:忘记密码)")
+    @TableField("business_type")
+    private Integer businessType;
+
+    @ApiModelProperty("手机号")
+    @TableField("phone")
+    private String phone;
+
+    @ApiModelProperty("端区分(0:用户,1:商家,2:律师端)")
+    @TableField("app_type")
+    private Integer appType;
+
+    @ApiModelProperty("验证码")
+    @TableField("code")
+    private String code;
+
+    @ApiModelProperty("创建时间")
+    @TableField("created_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty("更新时间")
+    @TableField("updated_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty("创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty("更新人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+
+    @ApiModelProperty("删除标志(0:正常,1:删除)")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+}
+

+ 13 - 0
alien-entity/src/main/java/shop/alien/mapper/StoreVerificationCodeMapper.java

@@ -0,0 +1,13 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.store.StoreVerificationCode;
+
+/**
+ * 短信验证码 Mapper
+ */
+@Mapper
+public interface StoreVerificationCodeMapper extends BaseMapper<StoreVerificationCode> {
+}
+

+ 20 - 0
alien-entity/src/main/resources/mapper/StoreVerificationCodeMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="shop.alien.mapper.StoreVerificationCodeMapper">
+
+    <resultMap id="BaseResultMap" type="shop.alien.entity.store.StoreVerificationCode">
+        <id column="id" property="id"/>
+        <result column="business_type" property="businessType"/>
+        <result column="phone" property="phone"/>
+        <result column="app_type" property="appType"/>
+        <result column="code" property="code"/>
+        <result column="created_time" property="createdTime"/>
+        <result column="updated_time" property="updatedTime"/>
+        <result column="created_user_id" property="createdUserId"/>
+        <result column="updated_user_id" property="updatedUserId"/>
+        <result column="delete_flag" property="deleteFlag"/>
+    </resultMap>
+
+</mapper>
+

+ 85 - 0
alien-store/src/main/java/shop/alien/store/controller/StoreVerificationCodeController.java

@@ -0,0 +1,85 @@
+package shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiOperationSupport;
+import io.swagger.annotations.ApiSort;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.StoreVerificationCode;
+import shop.alien.store.service.StoreVerificationCodeService;
+
+/**
+ * 短信验证码 CRUD
+ */
+@Api(tags = {"二期-验证码管理"})
+@Slf4j
+@ApiSort(30)
+@CrossOrigin
+@RestController
+@RequestMapping("/storeVerificationCode")
+@RequiredArgsConstructor
+public class StoreVerificationCodeController {
+
+    private final StoreVerificationCodeService storeVerificationCodeService;
+
+    @ApiOperation("分页查询验证码记录")
+    @ApiOperationSupport(order = 1)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "appType", value = "端区分(0:用户,1:商家,2:律师端)", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "businessType", value = "业务类型", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "pageNum", value = "页码", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "pageSize", value = "每页数量", dataType = "Integer", paramType = "query")
+    })
+    @GetMapping("/page")
+    public R<IPage<StoreVerificationCode>> page(@RequestParam(value = "phone", required = false) String phone,
+                                                @RequestParam(value = "appType", required = false) Integer appType,
+                                                @RequestParam(value = "businessType", required = false) Integer businessType,
+                                                @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+                                                @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
+        log.info("StoreVerificationCodeController.page?phone={}&appType={}&businessType={}&pageNum={}&pageSize={}",
+                phone, appType, businessType, pageNum, pageSize);
+        return R.data(storeVerificationCodeService.pageList(phone, appType, businessType, pageNum, pageSize));
+    }
+
+    @ApiOperation("根据ID获取验证码记录")
+    @ApiOperationSupport(order = 2)
+    @ApiImplicitParam(name = "id", value = "主键id", dataType = "Integer", paramType = "path", required = true)
+    @GetMapping("/{id}")
+    public R<StoreVerificationCode> detail(@PathVariable("id") Integer id) {
+        log.info("StoreVerificationCodeController.detail?id={}", id);
+        return R.data(storeVerificationCodeService.getById(id));
+    }
+
+    @ApiOperation("新增验证码记录")
+    @ApiOperationSupport(order = 3)
+    @PostMapping
+    public R<StoreVerificationCode> create(@RequestBody StoreVerificationCode request) {
+        log.info("StoreVerificationCodeController.create?request={}", request);
+        return R.data(storeVerificationCodeService.create(request));
+    }
+
+    @ApiOperation("更新验证码记录")
+    @ApiOperationSupport(order = 4)
+    @PutMapping
+    public R<StoreVerificationCode> update(@RequestBody StoreVerificationCode request) {
+        log.info("StoreVerificationCodeController.update?request={}", request);
+        return R.data(storeVerificationCodeService.updateRecord(request));
+    }
+
+    @ApiOperation("删除验证码记录")
+    @ApiOperationSupport(order = 5)
+    @ApiImplicitParam(name = "id", value = "主键id", dataType = "Integer", paramType = "path", required = true)
+    @DeleteMapping("/{id}")
+    public R<Boolean> delete(@PathVariable("id") Integer id) {
+        log.info("StoreVerificationCodeController.delete?id={}", id);
+        return R.data(storeVerificationCodeService.removeRecord(id));
+    }
+}
+

+ 36 - 0
alien-store/src/main/java/shop/alien/store/service/StoreVerificationCodeService.java

@@ -0,0 +1,36 @@
+package shop.alien.store.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.store.StoreVerificationCode;
+
+/**
+ * 短信验证码 service
+ */
+public interface StoreVerificationCodeService extends IService<StoreVerificationCode> {
+
+    /**
+     * 分页查询
+     */
+    IPage<StoreVerificationCode> pageList(String phone,
+                                          Integer appType,
+                                          Integer businessType,
+                                          Integer pageNum,
+                                          Integer pageSize);
+
+    /**
+     * 新增记录
+     */
+    StoreVerificationCode create(StoreVerificationCode request);
+
+    /**
+     * 更新记录
+     */
+    StoreVerificationCode updateRecord(StoreVerificationCode request);
+
+    /**
+     * 删除
+     */
+    boolean removeRecord(Integer id);
+}
+

+ 71 - 0
alien-store/src/main/java/shop/alien/store/service/impl/StoreVerificationCodeServiceImpl.java

@@ -0,0 +1,71 @@
+package shop.alien.store.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import shop.alien.entity.store.StoreVerificationCode;
+import shop.alien.mapper.StoreVerificationCodeMapper;
+import shop.alien.store.service.StoreVerificationCodeService;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * 短信验证码 service 实现
+ */
+@Service
+@RequiredArgsConstructor
+public class StoreVerificationCodeServiceImpl extends ServiceImpl<StoreVerificationCodeMapper, StoreVerificationCode>
+        implements StoreVerificationCodeService {
+
+    @Override
+    public IPage<StoreVerificationCode> pageList(String phone, Integer appType, Integer businessType, Integer pageNum, Integer pageSize) {
+        LambdaQueryWrapper<StoreVerificationCode> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StringUtils.isNotBlank(phone), StoreVerificationCode::getPhone, phone);
+        wrapper.eq(null != appType, StoreVerificationCode::getAppType, appType);
+        wrapper.eq(null != businessType, StoreVerificationCode::getBusinessType, businessType);
+        wrapper.eq(StoreVerificationCode::getDeleteFlag, 0);
+        wrapper.orderByDesc(StoreVerificationCode::getCreatedTime);
+        Page<StoreVerificationCode> page = new Page<>(null == pageNum ? 1 : pageNum, null == pageSize ? 10 : pageSize);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    public StoreVerificationCode create(StoreVerificationCode request) {
+        request.setId(null);
+        Date now = new Date();
+        request.setCreatedTime(now);
+        request.setUpdatedTime(now);
+        request.setDeleteFlag(0);
+        this.save(request);
+        return request;
+    }
+
+    @Override
+    public StoreVerificationCode updateRecord(StoreVerificationCode request) {
+        if (Objects.isNull(request.getId())) {
+            throw new IllegalArgumentException("id不能为空");
+        }
+        request.setUpdatedTime(new Date());
+        this.updateById(request);
+        return this.getById(request.getId());
+    }
+
+    @Override
+    public boolean removeRecord(Integer id) {
+        if (Objects.isNull(id)) {
+            return false;
+        }
+        StoreVerificationCode entity = new StoreVerificationCode();
+        entity.setId(id);
+        entity.setDeleteFlag(1);
+        entity.setUpdatedTime(new Date());
+        return this.updateById(entity);
+    }
+
+}
+