cloudroam
2024-12-26 7d7ac69a8af85ab9e67c1dc2c6f52b03d27669e4
add:阿里云短信模板获取签名和模板信息
已修改16个文件
已添加6个文件
673 ■■■■ 文件已修改
pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/sms/SmsTaskDTO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/sms/SmsTaskQueryDTO.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/sms/SmsTemplateDTO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/sms/SmsTemplateQueryDTO.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/sms/SmsTaskDetailVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/sms/SmsTaskVO.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/SmsTaskDetailMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/SmsTaskMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/SmsTemplateMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/impl/sms/SmsTaskDetailServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/impl/sms/SmsTaskServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/impl/sms/SmsTemplateServiceImpl.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/sms/SmsTaskDetailService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/sms/SmsTaskService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/sms/SmsTemplateService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/v2/sms/SmsTaskController.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/v2/sms/SmsTaskDetailController.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/v2/sms/SmsTemplateController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sms/SmsTaskDetailMapper.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sms/SmsTaskMapper.xml 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sms/SmsTemplateMapper.xml 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -275,6 +275,11 @@
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
src/main/java/com/mzl/flower/dto/request/sms/SmsTaskDTO.java
对比新文件
@@ -0,0 +1,29 @@
package com.mzl.flower.dto.request.sms;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class SmsTaskDTO {
    @ApiModelProperty(value = "短信任务管理id")
    private Long id;
    @ApiModelProperty("短信模板ID")
    private Long smsTemplateId;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("任务类型")
    private String type;
    @ApiModelProperty("导入文件路径")
    private String fileUrl;
    @ApiModelProperty("手机号")
    private String phones;
    @ApiModelProperty("发送数量")
    private Long num;
}
src/main/java/com/mzl/flower/dto/request/sms/SmsTaskQueryDTO.java
对比新文件
@@ -0,0 +1,37 @@
package com.mzl.flower.dto.request.sms;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class SmsTaskQueryDTO {
    @ApiModelProperty(value = "短信任务管理id")
    private Long id;
    @ApiModelProperty("短信模板ID")
    private Long smsTemplateId;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("任务类型")
    private String type;
    @ApiModelProperty("导入文件路径")
    private String fileUrl;
    @ApiModelProperty("手机号")
    private String phones;
    @ApiModelProperty("发送数量")
    private Long num;
    @ApiModelProperty(value = "开始时间")
    private Date startDate;
    @ApiModelProperty(value = "结束时间")
    private Date endDate;
}
src/main/java/com/mzl/flower/dto/request/sms/SmsTemplateDTO.java
对比新文件
@@ -0,0 +1,23 @@
package com.mzl.flower.dto.request.sms;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Data
public class SmsTemplateDTO {
    @ApiModelProperty(value = "短信模板管理id")
    private Long id;
    @ApiModelProperty("编码")
    private String code;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("描述")
    private String description;
}
src/main/java/com/mzl/flower/dto/request/sms/SmsTemplateQueryDTO.java
对比新文件
@@ -0,0 +1,28 @@
package com.mzl.flower.dto.request.sms;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class SmsTemplateQueryDTO {
    @ApiModelProperty(value = "短信模板管理id")
    private Long id;
    @ApiModelProperty("编码")
    private String code;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("描述")
    private String description;
    @ApiModelProperty(value = "开始时间")
    private Date startDate;
    @ApiModelProperty(value = "结束时间")
    private Date endDate;
}
src/main/java/com/mzl/flower/dto/response/sms/SmsTaskDetailVO.java
对比新文件
@@ -0,0 +1,23 @@
package com.mzl.flower.dto.response.sms;
import com.mzl.flower.base.AbstractTransDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class SmsTaskDetailVO extends AbstractTransDTO {
    @ApiModelProperty(value = "任务详情id")
    private Long id;
    @ApiModelProperty("短信任务表ID")
    private Long smsTaskId;
    @ApiModelProperty("短信模板表ID")
    private Long smsTemplateId;
    @ApiModelProperty("接收号码")
    private String phone;
    @ApiModelProperty("发送结果")
    private String result;
}
src/main/java/com/mzl/flower/dto/response/sms/SmsTaskVO.java
对比新文件
@@ -0,0 +1,30 @@
package com.mzl.flower.dto.response.sms;
import com.mzl.flower.base.AbstractTransDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class SmsTaskVO extends AbstractTransDTO {
    @ApiModelProperty(value = "短信任务管理id")
    private Long id;
    @ApiModelProperty("短信模板ID")
    private Long smsTemplateId;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("任务类型")
    private String type;
    @ApiModelProperty("导入文件路径")
    private String fileUrl;
    @ApiModelProperty("手机号")
    private String phones;
    @ApiModelProperty("发送数量")
    private Long num;
}
src/main/java/com/mzl/flower/mapper/SmsTaskDetailMapper.java
@@ -1,7 +1,13 @@
package com.mzl.flower.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO;
import com.mzl.flower.dto.response.sms.SmsTaskDetailVO;
import com.mzl.flower.entity.SmsTaskDetailDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +19,5 @@
 */
public interface SmsTaskDetailMapper extends BaseMapper<SmsTaskDetailDO> {
    List<SmsTaskDetailVO> queryPage(@Param("dto") SmsTaskQueryDTO dto, Page page);
}
src/main/java/com/mzl/flower/mapper/SmsTaskMapper.java
@@ -1,11 +1,19 @@
package com.mzl.flower.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO;
import com.mzl.flower.dto.request.sms.SmsTemplateQueryDTO;
import com.mzl.flower.dto.response.sms.SmsTaskVO;
import com.mzl.flower.entity.SmsTaskDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mzl.flower.entity.SmsTemplateDO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 *  Mapper 接口
 * Mapper 接口
 * </p>
 *
 * @author @TaoJie
@@ -13,4 +21,6 @@
 */
public interface SmsTaskMapper extends BaseMapper<SmsTaskDO> {
    List<SmsTaskVO> queryPage(@Param("dto") SmsTaskQueryDTO dto, Page page);
}
src/main/java/com/mzl/flower/mapper/SmsTemplateMapper.java
@@ -1,7 +1,12 @@
package com.mzl.flower.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.sms.SmsTemplateQueryDTO;
import com.mzl.flower.entity.SmsTemplateDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
@@ -13,4 +18,6 @@
 */
public interface SmsTemplateMapper extends BaseMapper<SmsTemplateDO> {
    List<SmsTemplateDO> queryPage(@Param("dto") SmsTemplateQueryDTO dto, Page page);
}
src/main/java/com/mzl/flower/service/impl/sms/SmsTaskDetailServiceImpl.java
@@ -1,10 +1,19 @@
package com.mzl.flower.service.impl.sms;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO;
import com.mzl.flower.dto.response.sms.SmsTaskDetailVO;
import com.mzl.flower.dto.response.sms.SmsTaskVO;
import com.mzl.flower.entity.SmsTaskDetailDO;
import com.mzl.flower.mapper.SmsTaskDetailMapper;
import com.mzl.flower.mapper.SmsTaskMapper;
import com.mzl.flower.service.sms.SmsTaskDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * <p>
@@ -15,6 +24,15 @@
 * @since 2024-12-25
 */
@Service
@Transactional
@RequiredArgsConstructor
public class SmsTaskDetailServiceImpl extends ServiceImpl<SmsTaskDetailMapper, SmsTaskDetailDO> implements SmsTaskDetailService {
    private final SmsTaskDetailMapper smsTaskDetailMapper;
    @Override
    public Page<SmsTaskDetailVO> queryPage(SmsTaskQueryDTO dto, Page page) {
        List<SmsTaskDetailVO> list = smsTaskDetailMapper.queryPage(dto, page);
        page.setRecords(list);
        return page;
    }
}
src/main/java/com/mzl/flower/service/impl/sms/SmsTaskServiceImpl.java
@@ -1,10 +1,21 @@
package com.mzl.flower.service.impl.sms;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.dto.request.sms.SmsTaskDTO;
import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO;
import com.mzl.flower.dto.response.sms.SmsTaskVO;
import com.mzl.flower.entity.SmsTaskDO;
import com.mzl.flower.mapper.SmsTaskMapper;
import com.mzl.flower.service.sms.SmsTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * <p>
@@ -15,6 +26,39 @@
 * @since 2024-12-25
 */
@Service
@Transactional
@RequiredArgsConstructor
public class SmsTaskServiceImpl extends ServiceImpl<SmsTaskMapper, SmsTaskDO> implements SmsTaskService {
    private final SmsTaskMapper smsTaskMapper;
    @Override
    public void saveSmsTask(SmsTaskDTO smsTaskDTO) {
        SmsTaskDO smsTaskDO = new SmsTaskDO();
        BeanUtils.copyProperties(smsTaskDTO, smsTaskDO);
        smsTaskMapper.insert(smsTaskDO);
    }
    @Override
    public void updateSmsTask(SmsTaskDTO smsTaskDTO) {
        SmsTaskDO smsTaskDO = smsTaskMapper.selectById(smsTaskDTO.getId());
        BeanUtils.copyProperties(smsTaskDTO, smsTaskDO);
        smsTaskDO.update(SecurityUtils.getUserId());
        smsTaskMapper.updateById(smsTaskDO);
    }
    @Override
    public void deleteSmsTask(Long id) {
        SmsTaskDO smsTaskDO = smsTaskMapper.selectById(id);
        if (smsTaskDO == null) {
            throw new ValidationException("短信任务ID不存在");
        }
        smsTaskMapper.deleteById(id);
    }
    @Override
    public Page<SmsTaskVO> queryPage(SmsTaskQueryDTO dto, Page page) {
        List<SmsTaskVO> list = smsTaskMapper.queryPage(dto, page);
        page.setRecords(list);
        return page;
    }
}
src/main/java/com/mzl/flower/service/impl/sms/SmsTemplateServiceImpl.java
@@ -1,10 +1,23 @@
package com.mzl.flower.service.impl.sms;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.dto.request.sms.SmsTemplateDTO;
import com.mzl.flower.dto.request.sms.SmsTemplateQueryDTO;
import com.mzl.flower.dto.response.member.MemberVO;
import com.mzl.flower.entity.SmsTemplateDO;
import com.mzl.flower.entity.menber.Member;
import com.mzl.flower.entity.menber.MemberGrowthRecord;
import com.mzl.flower.mapper.SmsTemplateMapper;
import com.mzl.flower.service.sms.SmsTemplateService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * <p>
@@ -15,6 +28,39 @@
 * @since 2024-12-25
 */
@Service
@Transactional
@RequiredArgsConstructor
public class SmsTemplateServiceImpl extends ServiceImpl<SmsTemplateMapper, SmsTemplateDO> implements SmsTemplateService {
    private final SmsTemplateMapper smsTemplateMapper;
    @Override
    public void saveSmsTemplate(SmsTemplateDTO smsTemplateDTO) {
        SmsTemplateDO smsTemplateDO = new SmsTemplateDO();
        BeanUtils.copyProperties(smsTemplateDTO, smsTemplateDO);
        smsTemplateMapper.insert(smsTemplateDO);
    }
    @Override
    public void updateSmsTemplate(SmsTemplateDTO smsTemplateDTO) {
        SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectById(smsTemplateDTO.getId());
        BeanUtils.copyProperties(smsTemplateDTO, smsTemplateDO);
        smsTemplateDO.update(SecurityUtils.getUserId());
        smsTemplateMapper.updateById(smsTemplateDO);
    }
    @Override
    public void deleteSmsTemplate(Long id) {
        SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectById(id);
        if (smsTemplateDO == null) {
            throw new ValidationException("短信模板ID不存在");
        }
        smsTemplateMapper.deleteById(id);
    }
    @Override
    public Page<SmsTemplateDO> queryPage(SmsTemplateQueryDTO dto, Page page) {
        List<SmsTemplateDO> list = smsTemplateMapper.queryPage(dto, page);
        page.setRecords(list);
        return page;
    }
}
src/main/java/com/mzl/flower/service/sms/SmsTaskDetailService.java
@@ -1,7 +1,10 @@
package com.mzl.flower.service.sms;
import com.mzl.flower.entity.SmsTaskDetailDO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO;
import com.mzl.flower.dto.response.sms.SmsTaskDetailVO;
import com.mzl.flower.entity.SmsTaskDetailDO;
/**
 * <p>
@@ -13,4 +16,6 @@
 */
public interface SmsTaskDetailService extends IService<SmsTaskDetailDO> {
    Page<SmsTaskDetailVO> queryPage(SmsTaskQueryDTO dto, Page page);
}
src/main/java/com/mzl/flower/service/sms/SmsTaskService.java
@@ -1,7 +1,11 @@
package com.mzl.flower.service.sms;
import com.mzl.flower.entity.SmsTaskDO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mzl.flower.dto.request.sms.SmsTaskDTO;
import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO;
import com.mzl.flower.dto.response.sms.SmsTaskVO;
import com.mzl.flower.entity.SmsTaskDO;
/**
 * <p>
@@ -13,4 +17,12 @@
 */
public interface SmsTaskService extends IService<SmsTaskDO> {
    void saveSmsTask(SmsTaskDTO smsTaskDTO);
    void updateSmsTask(SmsTaskDTO smsTaskDTO);
    void deleteSmsTask(Long id);
    Page<SmsTaskVO> queryPage(SmsTaskQueryDTO dto, Page page);
}
src/main/java/com/mzl/flower/service/sms/SmsTemplateService.java
@@ -1,11 +1,15 @@
package com.mzl.flower.service.sms;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.sms.SmsTemplateDTO;
import com.mzl.flower.dto.request.sms.SmsTemplateQueryDTO;
import com.mzl.flower.dto.response.member.MemberVO;
import com.mzl.flower.entity.SmsTemplateDO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * <p>
 *  服务类
 * 服务类
 * </p>
 *
 * @author @TaoJie
@@ -13,4 +17,12 @@
 */
public interface SmsTemplateService extends IService<SmsTemplateDO> {
    void saveSmsTemplate(SmsTemplateDTO smsTemplateDTO);
    void updateSmsTemplate(SmsTemplateDTO smsTemplateDTO);
    void deleteSmsTemplate(Long id);
    Page<SmsTemplateDO> queryPage(SmsTemplateQueryDTO dto, Page page);
}
src/main/java/com/mzl/flower/web/v2/sms/SmsTaskController.java
@@ -5,59 +5,63 @@
import com.mzl.flower.base.BaseController;
import com.mzl.flower.base.R;
import com.mzl.flower.base.ReturnDataDTO;
import com.mzl.flower.dto.request.sms.SmsTaskDTO;
import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO;
import com.mzl.flower.dto.request.sms.SmsTemplateDTO;
import com.mzl.flower.dto.request.sms.SmsTemplateQueryDTO;
import com.mzl.flower.dto.response.sms.SmsTaskVO;
import com.mzl.flower.entity.SmsTemplateDO;
import com.mzl.flower.service.sms.SmsTaskService;
import com.mzl.flower.service.sms.SmsTemplateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
import com.mzl.flower.entity.SmsTaskDO;
import javax.validation.constraints.Min;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import org.springframework.web.bind.annotation.RestController;
/**
* @author @TaoJie
* @since 2024-12-25
*/
@Api(value = "短信任务管理", tags = "短信任务管理")
@RestController
@RequestMapping("/v2/sms-task")
@RequiredArgsConstructor
public class SmsTaskController extends BaseController {
    @PostMapping("")
    public ResponseEntity<ReturnDataDTO> create() {
    private final SmsTaskService smsTaskService;
    @PostMapping("/new")
    @ApiOperation(value = "保存短信任务模板", httpMethod = "POST")
    public ResponseEntity<ReturnDataDTO> create(@RequestBody SmsTaskDTO smsTaskDTO) {
        smsTaskService.saveSmsTask(smsTaskDTO);
        return returnData(R.SUCCESS.getCode(), null);
    }
    @PutMapping("/{id}")
    public ResponseEntity<ReturnDataDTO> update(@PathVariable @Positive(message = "{id.positive}") Integer id) {
    @PostMapping(value = "/edit")
    @ApiOperation(value = "更新短信任务模板", httpMethod = "POST")
    public ResponseEntity<ReturnDataDTO> update(@RequestBody SmsTaskDTO smsTaskDTO) {
        smsTaskService.updateSmsTask(smsTaskDTO);
        return returnData(R.SUCCESS.getCode(), null);
    }
    @DeleteMapping("/{id}")
    public ResponseEntity<ReturnDataDTO> delete(@PathVariable @Positive(message = "{id.positive}") Integer id) {
    @GetMapping(value = "/delete")
    @ApiOperation(value = "删除短信任务模板 ", httpMethod = "GET", notes = "ID")
    public ResponseEntity<ReturnDataDTO> delete(@NotNull(message = "id不能为空") Long id) {
        smsTaskService.deleteSmsTask(id);
        return returnData(R.SUCCESS.getCode(), null);
    }
    @GetMapping("/{id}")
    public ResponseEntity<ReturnDataDTO> get(@PathVariable(value = "id") @Positive(message = "{id.positive}") Integer id) {
        return null;
    @GetMapping("/list")
    @ApiOperation(value = "短信模板任务列表", httpMethod = "GET")
    public ResponseEntity<ReturnDataDTO<Page<SmsTaskVO>>> getSmsTaskList(Page page, SmsTaskQueryDTO dto) {
        return returnData(R.SUCCESS.getCode(), smsTaskService.queryPage(dto, page));
    }
    @GetMapping("/page")
    public ResponseEntity<ReturnDataDTO<Page<SmsTaskDO>>>  page(
            @RequestParam(name = "page", required = false, defaultValue = "0")
            @Min(value = 0, message = "{page.number.min}") Integer page,
            @RequestParam(name = "count", required = false, defaultValue = "10")
            @Min(value = 1, message = "{page.count.min}")
            @Max(value = 30, message = "{page.count.max}") Integer count
    ) {
        return null;
    }
}
src/main/java/com/mzl/flower/web/v2/sms/SmsTaskDetailController.java
@@ -5,61 +5,31 @@
import com.mzl.flower.base.BaseController;
import com.mzl.flower.base.R;
import com.mzl.flower.base.ReturnDataDTO;
import com.mzl.flower.entity.SmsTemplateDO;
import com.mzl.flower.dto.request.sms.SmsTaskQueryDTO;
import com.mzl.flower.dto.response.sms.SmsTaskDetailVO;
import com.mzl.flower.service.sms.SmsTaskDetailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import com.mzl.flower.entity.SmsTaskDetailDO;
import javax.validation.constraints.Min;
import javax.validation.constraints.Max;
import javax.validation.constraints.Positive;
import org.springframework.web.bind.annotation.RestController;
/**
* @author @TaoJie
* @since 2024-12-25
*/
@Api(value = "任务详情管理", tags = "任务详情管理")
@RestController
@RequestMapping("/v2/sms-task-detail")
@RequiredArgsConstructor
public class SmsTaskDetailController  extends BaseController {
    @PostMapping("")
    public ResponseEntity<ReturnDataDTO> create() {
        return returnData(R.SUCCESS.getCode(), null);
    private final SmsTaskDetailService smsTaskDetailService;
    @GetMapping("/list")
    @ApiOperation(value = "任务详情列表", httpMethod = "GET")
    public ResponseEntity<ReturnDataDTO<Page<SmsTaskDetailVO>>> getSmsTaskList(Page page, SmsTaskQueryDTO dto) {
        return returnData(R.SUCCESS.getCode(), smsTaskDetailService.queryPage(dto, page));
    }
    @PutMapping("/{id}")
    public ResponseEntity<ReturnDataDTO> update(@PathVariable @Positive(message = "{id.positive}") Integer id) {
        return returnData(R.SUCCESS.getCode(), null);
    }
    @DeleteMapping("/{id}")
    public ResponseEntity<ReturnDataDTO> delete(@PathVariable @Positive(message = "{id.positive}") Integer id) {
        return returnData(R.SUCCESS.getCode(), null);
    }
    @GetMapping("/{id}")
    public  ResponseEntity<ReturnDataDTO> get(@PathVariable(value = "id") @Positive(message = "{id.positive}") Integer id) {
        return returnData(R.SUCCESS.getCode(), null);
    }
    @GetMapping("/page")
    public ResponseEntity<ReturnDataDTO<Page<SmsTaskDetailDO>>> page(
            @RequestParam(name = "page", required = false, defaultValue = "0")
            @Min(value = 0, message = "{page.number.min}") Integer page,
            @RequestParam(name = "count", required = false, defaultValue = "10")
            @Min(value = 1, message = "{page.count.min}")
            @Max(value = 30, message = "{page.count.max}") Integer count
    ) {
        return null;
    }
}
src/main/java/com/mzl/flower/web/v2/sms/SmsTemplateController.java
@@ -1,64 +1,90 @@
package com.mzl.flower.web.v2.sms;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateListRequest;
import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateListResponse;
import com.aliyun.dysmsapi20170525.models.QuerySmsTemplateListResponseBody;
import com.aliyun.tea.TeaException;
import com.aliyun.teautil.models.RuntimeOptions;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.base.BaseController;
import com.mzl.flower.base.R;
import com.mzl.flower.base.ReturnDataDTO;
import com.mzl.flower.dto.response.coupon.CouponTemplatePointVO;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import com.mzl.flower.dto.request.sms.SmsTemplateDTO;
import com.mzl.flower.dto.request.sms.SmsTemplateQueryDTO;
import com.mzl.flower.entity.SmsTemplateDO;
import com.mzl.flower.service.sms.SmsTemplateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.Min;
import javax.validation.constraints.Max;
import javax.validation.constraints.Positive;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author @TaoJie
* @since 2024-12-25
*/
@Api(value = "短信模板管理", tags = "短信模板管理")
@RestController
@RequestMapping("/v2/sms-template")
@RequiredArgsConstructor
public class SmsTemplateController extends BaseController {
    @PostMapping("")
    public ResponseEntity<ReturnDataDTO> create() {
    private  final SmsTemplateService smsTemplateService;
    @PostMapping("/new")
    @ApiOperation(value = "保存短信模板", httpMethod = "POST")
    public ResponseEntity<ReturnDataDTO> create(@RequestBody SmsTemplateDTO smsTemplateDTO) {
        smsTemplateService.saveSmsTemplate(smsTemplateDTO);
        return returnData(R.SUCCESS.getCode(), null);
    }
    @PutMapping("/{id}")
    public ResponseEntity<ReturnDataDTO> update(@PathVariable @Positive(message = "{id.positive}") Integer id) {
    @PostMapping(value = "/edit")
    @ApiOperation(value = "更新短信模板", httpMethod = "POST")
    public ResponseEntity<ReturnDataDTO> update(@RequestBody SmsTemplateDTO smsTemplateDTO) {
        smsTemplateService.updateSmsTemplate(smsTemplateDTO);
        return returnData(R.SUCCESS.getCode(), null);
    }
    @DeleteMapping("/{id}")
    public ResponseEntity<ReturnDataDTO> delete(@PathVariable @Positive(message = "{id.positive}") Integer id) {
    @GetMapping(value = "/delete")
    @ApiOperation(value = "删除短信模板 ", httpMethod = "GET", notes = "ID")
    public ResponseEntity<ReturnDataDTO> delete(@NotNull(message = "id不能为空") Long id) {
        smsTemplateService.deleteSmsTemplate(id);
        return returnData(R.SUCCESS.getCode(), null);
    }
    @GetMapping("/{id}")
    public SmsTemplateDO get(@PathVariable(value = "id") @Positive(message = "{id.positive}") Integer id) {
        return null;
    @GetMapping("/list")
    @ApiOperation(value = "短信模板列表", httpMethod = "GET")
    public ResponseEntity<ReturnDataDTO<Page<SmsTemplateDO>>> getSmsTemplateList(Page page, SmsTemplateQueryDTO dto) {
        return returnData(R.SUCCESS.getCode(), smsTemplateService.queryPage(dto, page));
    }
    @GetMapping("/page")
    public ResponseEntity<ReturnDataDTO<Page<SmsTemplateDO>>> page(
            @RequestParam(name = "page", required = false, defaultValue = "0")
            @Min(value = 0, message = "{page.number.min}") Integer page,
            @RequestParam(name = "count", required = false, defaultValue = "10")
            @Min(value = 1, message = "{page.count.min}")
            @Max(value = 30, message = "{page.count.max}") Integer count
    ) {
        return null;
    @GetMapping("/template/list")
    @ApiOperation(value = "短信模板列表", httpMethod = "GET")
    public ResponseEntity<ReturnDataDTO<Page<SmsTemplateDO>>> getALSmsTemplateList(Page page, SmsTemplateQueryDTO dto) throws Exception {
        Client client = createClient();
        QuerySmsTemplateListRequest querySmsTemplateListRequest = new QuerySmsTemplateListRequest();
        RuntimeOptions runtime = new RuntimeOptions();
        List<QuerySmsTemplateListResponseBody.QuerySmsTemplateListResponseBodySmsTemplateList> smsTemplateList;
        try {
            QuerySmsTemplateListResponse querySmsTemplateListResponse = client.querySmsTemplateListWithOptions(querySmsTemplateListRequest, runtime);
            smsTemplateList = querySmsTemplateListResponse.getBody().getSmsTemplateList();
        } catch (TeaException error) {
            return returnData(R.RUNTIME_EXCEPTION.getCode(), error.getMessage());
        } catch (Exception _error) {
            return returnData(R.RUNTIME_EXCEPTION.getCode(), _error.getMessage());
        }
        return returnData(R.SUCCESS.getCode(), smsTemplateList);
    }
    public static Client createClient() throws Exception {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config().setAccessKeyId("LTAI5tFGHa9bwhuEDKH6YPnc").setAccessKeySecret("BrY0BM4pvDXhVKOMLsXzgzlhVe1keQ");
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new Client(config);
    }
}
src/main/resources/mapper/sms/SmsTaskDetailMapper.xml
@@ -2,18 +2,30 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mzl.flower.mapper.SmsTaskDetailMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.mzl.flower.entity.SmsTaskDetailDO">
        <id column="id" property="id" />
        <result column="deleted" property="deleted" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="sms_task_id" property="smsTaskId" />
        <result column="sms_template_id" property="smsTemplateId" />
        <result column="phone" property="phone" />
        <result column="result" property="result" />
    </resultMap>
    <select id="queryPage" resultType="com.mzl.flower.dto.response.sms.SmsTaskDetailVO">
        select t.* from t_sms_task_detail t
        where t.deleted= 0
        <if test="dto.id!=null ">
            and t.id = #{dto.id}
        </if>
        <if test="dto.result != null and dto.result != ''">
            and t.result like concat('%', #{dto.result}, '%')
        </if>
        <if test="dto.phone != null and dto.phone != ''">
            and t.phone like concat('%', #{dto.phone}, '%')
        </if>
        <if test="dto.startDate!=null ">
            <![CDATA[
               AND t.create_time >= #{dto.startDate}
            ]]>
        </if>
        <if test="dto.endDate!=null ">
            <![CDATA[
               AND t.create_time <= #{dto.endDate}
            ]]>
        </if>
    </select>
</mapper>
src/main/resources/mapper/sms/SmsTaskMapper.xml
@@ -2,20 +2,33 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mzl.flower.mapper.SmsTaskMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.mzl.flower.entity.SmsTaskDO">
        <id column="id" property="id" />
        <result column="deleted" property="deleted" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="name" property="name" />
        <result column="sms_template_id" property="smsTemplateId" />
        <result column="type" property="type" />
        <result column="file_url" property="fileUrl" />
        <result column="phones" property="phones" />
        <result column="num" property="num" />
    </resultMap>
    <select id="queryPage" resultType="com.mzl.flower.dto.response.sms.SmsTaskVO">
        select t.* from t_sms_task t
        where t.deleted= 0
        <if test="dto.id!=null ">
            and t.id = #{dto.id}
        </if>
        <if test="dto.code != null and dto.code != ''">
            and t.code like concat('%', #{dto.code}, '%')
        </if>
        <if test="dto.name != null and dto.name != ''">
            and t.name like concat('%', #{dto.name}, '%')
        </if>
        <if test="dto.description != null and dto.description != ''">
            and t.description like concat('%', #{dto.description}, '%')
        </if>
        <if test="dto.startDate!=null ">
            <![CDATA[
               AND t.create_time >= #{dto.startDate}
            ]]>
        </if>
        <if test="dto.endDate!=null ">
            <![CDATA[
               AND t.create_time <= #{dto.endDate}
            ]]>
        </if>
    </select>
</mapper>
src/main/resources/mapper/sms/SmsTemplateMapper.xml
@@ -2,17 +2,33 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mzl.flower.mapper.SmsTemplateMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.mzl.flower.entity.SmsTemplateDO">
        <id column="id" property="id" />
        <result column="deleted" property="deleted" />
        <result column="create_by" property="createBy" />
        <result column="create_time" property="createTime" />
        <result column="update_by" property="updateBy" />
        <result column="update_time" property="updateTime" />
        <result column="code" property="code" />
        <result column="name" property="name" />
        <result column="description" property="description" />
    </resultMap>
    <select id="queryPage" resultType="com.mzl.flower.entity.SmsTemplateDO">
        select t.* from t_sms_template t
        where t.deleted= 0
        <if test="dto.id!=null ">
            and t.id = #{dto.id}
        </if>
        <if test="dto.code != null and dto.code != ''">
            and t.code like concat('%', #{dto.code}, '%')
        </if>
        <if test="dto.name != null and dto.name != ''">
            and t.name like concat('%', #{dto.name}, '%')
        </if>
        <if test="dto.description != null and dto.description != ''">
            and t.description like concat('%', #{dto.description}, '%')
        </if>
        <if test="dto.startDate!=null ">
            <![CDATA[
               AND t.create_time >= #{dto.startDate}
            ]]>
        </if>
        <if test="dto.endDate!=null ">
            <![CDATA[
               AND t.create_time <= #{dto.endDate}
            ]]>
        </if>
    </select>
</mapper>