skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
@@ -4,7 +4,9 @@ import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest; import cn.gistack.sm.sms.entity.SmsRecord; import cn.gistack.sm.sms.entity.SmsRequest; import cn.gistack.sm.sms.entity.SmsResult; import cn.gistack.sm.sms.service.ISmsRecordService; import cn.gistack.sm.sms.service.ISmsResultService; import cn.gistack.sm.sms.util.SmsUtils; import cn.gistack.system.user.entity.User; import cn.gistack.system.user.feign.IUserClient; @@ -35,6 +37,8 @@ private final ISmsRecordService smsRecordService; private final ISmsResultService smsResultService; private final BladeRedis bladeRedis; private final IUserClient userClient; @@ -64,7 +68,10 @@ String sendMsg = SmsUtils.sendMsg(request); JSONObject jsonObject = JSON.parseObject(sendMsg); // 记录发送记录操作 saveSendRecord(request, sendMsg); SmsResult smsResult = saveSendResult(request, 1); if (null != smsResult){ saveSendRecord(request, sendMsg,smsResult.getId()); } // 保存验证码到 redis saveCodeForRedis(request.getUserNumber(), randNumber); // 返回发送信息 @@ -123,16 +130,46 @@ * 发送记录保存 * @param request 发送信息 * @param sendMsg 响应数据 * @param resultId 发送结果id */ private void saveSendRecord(SMSSendRequest request, String sendMsg) { private void saveSendRecord(SMSSendRequest request, String sendMsg,Long resultId) { // 在保存明细 SmsRecord smsRecord = new SmsRecord(); smsRecord.setPhone(request.getUserNumber()); // smsRecord.setPhone(request.getUserNumber()); smsRecord.setTel(request.getUserNumber()); smsRecord.setContent(request.getMessageContent()); smsRecord.setTemplateId(request.getTemplateId()); smsRecord.setResContent(sendMsg); smsRecord.setResultId(resultId); // 解析 sendMsg JSONObject jsonObject = JSON.parseObject(sendMsg); smsRecord.setResponseStatus(jsonObject.getString("code")); smsRecord.setResponseMsg(jsonObject.getString("msg")); //插入记录 smsRecordService.save(smsRecord); } /** * 发送记录保存 * @param request 发送信息 * @param number 号码个数 */ private SmsResult saveSendResult(SMSSendRequest request,Integer number) { // 先保存结果表 SmsResult smsResult = new SmsResult(); smsResult.setTemplateId(request.getTemplateId()); smsResult.setContent(request.getMessageContent()); smsResult.setNumber(number); //插入记录 boolean save = smsResultService.save(smsResult); if (save){ return smsResult; } // 返回 return null; } /** * 发送邮件提醒 @@ -143,6 +180,12 @@ public R sendEmailMsg(@RequestBody SmsRequest smsRequest){ // 处理数据(可能是多个手机号情况) List<String> list = Arrays.asList(smsRequest.getPhone().split(",")); // 保存发送结果 // 记录保存 SMSSendRequest request = new SMSSendRequest(); request.setMessageContent(smsRequest.getContent()); request.setTemplateId("2431012165299"); SmsResult smsResult = saveSendResult(request, list.size()); // 遍历 for (String phone : list) { DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest(); @@ -153,21 +196,23 @@ // 发送邮件短信 String dynSendMsg = SmsUtils.dynSendMethod(dynSMSSendRequest); // 记录保存 SMSSendRequest request = new SMSSendRequest(); request.setUserNumber(phone); request.setMessageContent(smsRequest.getContent()); request.setTemplateId(dynSMSSendRequest.getTemplateId()); // 记录发送记录操作 saveSendRecord(request, dynSendMsg); if (null != smsResult) { SMSSendRequest smsSendRequest = new SMSSendRequest(); smsSendRequest.setUserNumber(phone); smsSendRequest.setMessageContent(smsRequest.getContent()); smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); // 记录发送记录操作 saveSendRecord(smsSendRequest, dynSendMsg,smsResult.getId()); } }else { // 手机号有误记录 // 记录保存 SMSSendRequest request = new SMSSendRequest(); request.setUserNumber(phone); request.setMessageContent(smsRequest.getContent()); request.setTemplateId(dynSMSSendRequest.getTemplateId()); SMSSendRequest smsSendRequest = new SMSSendRequest(); smsSendRequest.setUserNumber(phone); smsSendRequest.setMessageContent(smsRequest.getContent()); smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); // 记录发送记录操作 saveSendRecord(request, "手机号错误未发送..."); saveSendRecord(smsSendRequest, "手机号错误未发送...",null); } } return R.status(true); skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsRecordController.java
@@ -2,6 +2,7 @@ import cn.gistack.sm.sms.entity.SmsRecord; import cn.gistack.sm.sms.service.ISmsRecordService; import cn.gistack.sm.sms.vo.SmsRecordVO; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -40,6 +41,18 @@ } /** * 自定义分页列表查询 * @param query 分页查询对象 * @param smsRecord * @return */ @ApiOperation(value="短信发送记录-自定义分页列表查询", notes="短信发送记录-自定义分页列表查询") @GetMapping(value = "/page") public R selectSmsRecordPage(SmsRecordVO smsRecord, Query query) { return R.data(smsRecordService.selectSmsRecordPage(Condition.getPage(query), smsRecord)); } /** * 添加 */ @ApiOperation(value="短信发送记录-添加", notes="短信发送记录-添加") skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsResultController.java
New file @@ -0,0 +1,112 @@ package cn.gistack.sm.sms.controller; import cn.gistack.sm.sms.entity.SmsResult; import cn.gistack.sm.sms.service.ISmsResultService; import cn.gistack.sm.sms.vo.SmsResultVO; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; import java.util.Arrays; /** * 短信发送结果控制层 * @author zhongrj * @date 2023-04-23 */ @Slf4j @Api(tags="短信发送结果") @RestController @RequestMapping("/smsResult/smsResult") @AllArgsConstructor public class SmsResultController extends BladeController { private ISmsResultService smsResultService; /** * 分页列表查询 * @return */ @ApiOperation(value="短信发送结果-分页列表查询", notes="短信发送结果-分页列表查询") @GetMapping(value = "/list") public R queryPageList(SmsResult smsResult, Query query) { IPage<SmsResult> pageList = smsResultService.page(Condition.getPage(query), Condition.getQueryWrapper(smsResult)); return R.data(pageList); } /** * 自定义分页列表查询 * @param query 分页查询对象 * @param smsResult * @return */ @ApiOperation(value="短信发送结果-自定义分页列表查询", notes="短信发送结果-自定义分页列表查询") @GetMapping(value = "/page") public R selectSmsResultPage(SmsResultVO smsResult, Query query) { return R.data(smsResultService.selectSmsResultPage(Condition.getPage(query), smsResult)); } /** * 添加 */ @ApiOperation(value="短信发送结果-添加", notes="短信发送结果-添加") @PostMapping(value = "/add") public R add(@RequestBody SmsResult smsResult) { return R.data(smsResultService.save(smsResult)); } /** * 编辑 * @return */ @ApiOperation(value="短信发送结果-编辑", notes="短信发送结果-编辑") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public R edit(@RequestBody SmsResult smsResult) { return R.data(smsResultService.updateById(smsResult)); } /** * 通过id删除 * * @param id * @return */ @ApiOperation(value="短信发送结果-通过id删除", notes="短信发送结果-通过id删除") @PostMapping(value = "/delete") public R delete(@RequestParam(name="id",required=true) String id) { return R.data(smsResultService.removeById(id)); } /** * 批量删除 * * @param ids * @return */ @ApiOperation(value="短信发送结果-批量删除", notes="短信发送结果-批量删除") @PostMapping(value = "/deleteBatch") public R deleteBatch(@RequestParam(name="ids",required=true) String ids) { return R.data(smsResultService.removeByIds(Arrays.asList(ids.split(",")))); } /** * 通过id查询 * * @param id * @return */ @ApiOperation(value="短信发送结果-通过id查询", notes="短信发送结果-通过id查询") @GetMapping(value = "/queryById") public R queryById(@RequestParam(name="id",required=true) String id) { SmsResult SmsResult = smsResultService.getById(id); return R.data(SmsResult); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/entity/SmsRecord.java
@@ -1,6 +1,8 @@ package cn.gistack.sm.sms.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -24,9 +26,15 @@ private String templateId; /** * 手机号(可能有多个,以英文逗号分隔) * 手机号 */ @ApiModelProperty(value = "手机号(可能有多个,以英文逗号分隔)") @ApiModelProperty(value = "手机号") private String tel; /** * 手机号(废弃) */ @ApiModelProperty(value = "手机号(废弃)") private String phone; /** @@ -41,4 +49,23 @@ @ApiModelProperty(value = "响应内容") private String resContent; /** * 响应状态 */ @ApiModelProperty(value = "响应状态") private String responseStatus; /** * 响应消息 */ @ApiModelProperty(value = "响应消息") private String responseMsg; /** * 响应消息 */ @ApiModelProperty(value = "响应消息") @JsonSerialize(using = ToStringSerializer.class) private Long resultId; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/entity/SmsResult.java
New file @@ -0,0 +1,39 @@ package cn.gistack.sm.sms.entity; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.tenant.mp.TenantEntity; /** * 短信发送结果 */ @Data @TableName("sm_sms_result") @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value = "sm_sms_result对象", description = "短信发送结果") public class SmsResult extends BaseEntity { /** * 模板id */ @ApiModelProperty(value = "模板id") private String templateId; /** * 发送号码个数 */ @ApiModelProperty(value = "发送号码个数") private Integer number; /** * 消息内容 */ @ApiModelProperty(value = "消息内容") private String content; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.java
@@ -1,7 +1,12 @@ package cn.gistack.sm.sms.mapper; import cn.gistack.sm.sms.entity.SmsRecord; import cn.gistack.sm.sms.vo.SmsRecordVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 短信发送记录 @@ -9,4 +14,11 @@ */ public interface SmsRecordMapper extends BaseMapper<SmsRecord> { /** * 自定义分页列表查询 * @param page 分页查询对象 * @param smsRecord * @return */ List<SmsRecordVO> selectSmsRecordPage(IPage<SmsRecordVO> page,@Param("smsRecord") SmsRecordVO smsRecord); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsRecordMapper.xml
@@ -2,4 +2,12 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.gistack.sm.sms.mapper.SmsRecordMapper"> <!--自定义分页列表查询--> <select id="selectSmsRecordPage" resultType="cn.gistack.sm.sms.vo.SmsRecordVO"> select * from sm_sms_record where 1=1 and is_deleted = 0 <if test="smsRecord.phone!=null and smsRecord.phone!=''"> and phone like concat(concat('%',#{smsRecord.phone}),'%') </if> </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsResultMapper.java
New file @@ -0,0 +1,23 @@ package cn.gistack.sm.sms.mapper; import cn.gistack.sm.sms.entity.SmsResult; import cn.gistack.sm.sms.vo.SmsResultVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 短信发送记录 * @author zhongrj */ public interface SmsResultMapper extends BaseMapper<SmsResult> { /** * 自定义分页列表查询 * @param page 分页查询对象 * @param smsResult * @return */ List<SmsResultVO> selectSmsResultPage(IPage<SmsResultVO> page,@Param("smsResult") SmsResultVO smsResult); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/mapper/SmsResultMapper.xml
New file @@ -0,0 +1,10 @@ <?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="cn.gistack.sm.sms.mapper.SmsResultMapper"> <!--自定义分页列表查询--> <select id="selectSmsResultPage" resultType="cn.gistack.sm.sms.vo.SmsResultVO"> select * from sm_sms_result where 1=1 and is_deleted = 0 </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/ISmsRecordService.java
@@ -1,7 +1,17 @@ package cn.gistack.sm.sms.service; import cn.gistack.sm.sms.entity.SmsRecord; import cn.gistack.sm.sms.vo.SmsRecordVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; public interface ISmsRecordService extends BaseService<SmsRecord> { /** * 自定义分页列表查询 * @param page 分页查询对象 * @param smsRecord * @return */ Object selectSmsRecordPage(IPage<SmsRecordVO> page, SmsRecordVO smsRecord); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/ISmsResultService.java
New file @@ -0,0 +1,17 @@ package cn.gistack.sm.sms.service; import cn.gistack.sm.sms.entity.SmsResult; import cn.gistack.sm.sms.vo.SmsResultVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; public interface ISmsResultService extends BaseService<SmsResult> { /** * 自定义分页列表查询 * @param page 分页查询对象 * @param smsResult * @return */ Object selectSmsResultPage(IPage<SmsResultVO> page, SmsResultVO smsResult); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsRecordServiceImpl.java
@@ -3,6 +3,8 @@ import cn.gistack.sm.sms.entity.SmsRecord; import cn.gistack.sm.sms.mapper.SmsRecordMapper; import cn.gistack.sm.sms.service.ISmsRecordService; import cn.gistack.sm.sms.vo.SmsRecordVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.stereotype.Service; @@ -12,4 +14,20 @@ */ @Service public class SmsRecordServiceImpl extends BaseServiceImpl<SmsRecordMapper, SmsRecord> implements ISmsRecordService { /** * 自定义分页列表查询 * @param page 分页查询对象 * @param smsRecord * @return */ @Override public Object selectSmsRecordPage(IPage<SmsRecordVO> page, SmsRecordVO smsRecord) { if (null!=smsRecord.getIsExport()){ // 导出,不分页 return baseMapper.selectSmsRecordPage(null,smsRecord); } // 查询返回 return page.setRecords(baseMapper.selectSmsRecordPage(page,smsRecord)); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsResultServiceImpl.java
New file @@ -0,0 +1,33 @@ package cn.gistack.sm.sms.service.impl; import cn.gistack.sm.sms.entity.SmsResult; import cn.gistack.sm.sms.mapper.SmsResultMapper; import cn.gistack.sm.sms.service.ISmsResultService; import cn.gistack.sm.sms.vo.SmsResultVO; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.stereotype.Service; /** * 短信发送结果 * @author zhongrj */ @Service public class SmsResultServiceImpl extends BaseServiceImpl<SmsResultMapper, SmsResult> implements ISmsResultService { /** * 自定义分页列表查询 * @param page 分页查询对象 * @param smsResult * @return */ @Override public Object selectSmsResultPage(IPage<SmsResultVO> page, SmsResultVO smsResult) { if (null!=smsResult.getIsExport()){ // 导出,不分页 return baseMapper.selectSmsResultPage(null,smsResult); } // 查询返回 return page.setRecords(baseMapper.selectSmsResultPage(page,smsResult)); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/vo/SmsRecordVO.java
@@ -9,4 +9,9 @@ */ @Data public class SmsRecordVO extends SmsRecord { /** * 是否导出,不为空是导出,不分页 */ private Integer isExport; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/vo/SmsResultVO.java
New file @@ -0,0 +1,17 @@ package cn.gistack.sm.sms.vo; import cn.gistack.sm.sms.entity.SmsResult; import lombok.Data; /** * 短信发送结果vo * @author zhongrj */ @Data public class SmsResultVO extends SmsResult { /** * 是否导出,不为空是导出,不分页 */ private Integer isExport; }