This commit is contained in:
efren
2025-07-14 13:09:57 +08:00
parent 33f441cfa5
commit 0e366da5e8
5 changed files with 119 additions and 16 deletions

View File

@ -3,18 +3,19 @@ package com.chinaunicom.mall.ebtp.extend.sms.controller;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
import com.chinaunicom.mall.ebtp.extend.sms.constant.SmsErrorEnum;
import com.chinaunicom.mall.ebtp.extend.sms.entity.SmsBaseResponseDTO;
import com.chinaunicom.mall.ebtp.extend.sms.entity.SmsCallbackRequestDTO;
import com.chinaunicom.mall.ebtp.extend.sms.entity.SmsSendResponseDTO;
import com.chinaunicom.mall.ebtp.extend.sms.entity.SmsTemplateDTO;
import com.chinaunicom.mall.ebtp.extend.sms.service.SmsCallbackService;
import com.chinaunicom.mall.ebtp.extend.sms.service.SmsService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping("/sms")
public class SmsController {
@ -22,6 +23,9 @@ public class SmsController {
@Resource
private SmsService smsService;
@Resource
private SmsCallbackService smsCallbackService;
private static final String SMS_SUCCESS_CODE = "000000";// 短信接口成功代码
private static final String SMS_ERRER_DESC = "sms错误代码/描述: ";
@ -48,28 +52,29 @@ public class SmsController {
"statusCode": "000000",
"templateSMS": {
"smsMessageSid": "b9fb1cc5acc3428c8d40c87428380b72",
"dateCreated": "20250618100527"
"dateCreated": "20250618100527",
"reqId": "1687056327_1"// 业务ID
}
}
发送短信,保存发送记录, 与callback接口配合使用
reqId: 自定义消息ID比如可以用某个业务的名字
callback收到后会根据业务去处理调用对应业务的方法
*/
@GetMapping("/send")
public BaseResponse<SmsSendResponseDTO.TemplateSMS> sendSms(@RequestParam String[] mobiles, @RequestParam String templateId, @RequestParam String[] datas) {
// String[] datas = new String[]{"测试内容"}; // 模板参数
// return smsService.sendTemplateSms(
// "18686879363", // 接收手机号
// "1180212", // 模板ID
// datas, // 模板参数
// null, // 子扩展码
// null // 自定义消息ID
// );
public BaseResponse<SmsSendResponseDTO.TemplateSMS> sendSms(
@RequestParam String[] mobiles,
@RequestParam String templateId,
@RequestParam String[] datas,
@RequestParam String reqId,
@RequestParam(required = false) String subAppend) {
// 字符串数组转逗号拼接字符串
String mobileStr = String.join(",", mobiles);
SmsSendResponseDTO smsSendResponseDTO = smsService.sendTemplateSms(
mobileStr, // 接收手机号
templateId, // 模板ID
datas, // 模板参数
null, // 子扩展码
null // 自定义消息ID
subAppend, // 子扩展码
reqId // 自定义消息ID
);
if (!SMS_SUCCESS_CODE.equals(smsSendResponseDTO.getStatusCode())) {
@ -77,4 +82,25 @@ public class SmsController {
}
return BaseResponse.success(smsSendResponseDTO.getTemplateSMS());
}
/**
* 2.2.上行短信/状态报告推送接口
* 短信回调接口
* 该接口用于接收短信服务商的回调请求,包括上行短信和状态报告等信息。
* 短信平台不处理任何返回只关注接口请求是否200, 所以返回信息没有实际意义
* smsType String 必选 短信类型0上行短信1手机接收状态报告
* 消息总线模式各个模块哪个需要接收全都调用一次根据业务ID自行去对应业务表中判断处理
* @param callbackRequestDTO 回调请求数据
* @return 返回处理结果
*/
@PostMapping("/callback")
public BaseResponse<String> smsCallback(@RequestBody SmsCallbackRequestDTO callbackRequestDTO) {
log.info(callbackRequestDTO.toString());
// 保存 回调信息
boolean saveResult = smsCallbackService.save(callbackRequestDTO.getRequest());
// TODO 转发各个业务平台接口 (需在脚手架配置feign)
return BaseResponse.success("Callback received");
}
}

View File

@ -0,0 +1,9 @@
package com.chinaunicom.mall.ebtp.extend.sms.dao;
import com.chinaunicom.mall.ebtp.common.base.dao.IBaseMapper;
import com.chinaunicom.mall.ebtp.extend.sms.entity.SmsCallbackRequestDTO;
import com.chinaunicom.mall.ebtp.extend.tianyancha.entity.TianyanchaNormalDTO;
public interface SmsCallbackMapper extends IBaseMapper<SmsCallbackRequestDTO.Request> {
}

View File

@ -0,0 +1,37 @@
package com.chinaunicom.mall.ebtp.extend.sms.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonProperty;
@Data
@ApiModel(value = "短信回调表", description = "短信回调表")
public class SmsCallbackRequestDTO {
@JsonProperty("Request")
private Request request;
@Data
@TableName(value = "sms_callback", autoResultMap = true)
public static class Request {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;// 主键ID
private String action; // 必选 功能操作标识 SMSArrived
private String smsType; // 必选 短信类型0上行短信1手机接收状态报告
private String recvTime; // 必选 收到上行短信/短信送达手机时间格式yyyyMMddHHmmss
private String apiVersion; // 必选 REST API版本号格式YYYY-MM-DD
private String fromNum; // 必选 发送/接收短信的手机号码
private String content; // 必选 短信内容或短信ID
private String appendCode; // 可选 短信扩展码
private String subAppend; // 可选 自定义短信扩展码
private String status; // 可选 短信到达状态
private String dateSent; // 可选 短信发送时间
private String deliverCode; // 可选 到达状态描述
private String reqId; // 可选 第三方自定义消息id
private String smsCount; // 可选 下行短信计费条数
private String spCode; // 可选 下行通道码号
}
}

View File

@ -0,0 +1,10 @@
package com.chinaunicom.mall.ebtp.extend.sms.service;
import com.chinaunicom.mall.ebtp.common.base.service.IBaseService;
import com.chinaunicom.mall.ebtp.extend.sms.entity.SmsCallbackRequestDTO;
import org.springframework.stereotype.Service;
@Service
public interface SmsCallbackService extends IBaseService<SmsCallbackRequestDTO.Request> {
}

View File

@ -0,0 +1,21 @@
package com.chinaunicom.mall.ebtp.extend.sms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chinaunicom.mall.ebtp.extend.sms.dao.SmsCallbackMapper;
import com.chinaunicom.mall.ebtp.extend.sms.entity.SmsCallbackRequestDTO;
import com.chinaunicom.mall.ebtp.extend.sms.service.SmsCallbackService;
import com.chinaunicom.mall.ebtp.extend.tianyancha.dao.TianyanchaNormalMapper;
import com.chinaunicom.mall.ebtp.extend.tianyancha.entity.TianyanchaNormalDTO;
import com.chinaunicom.mall.ebtp.extend.tianyancha.service.TianyanchaNormalService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@Service
@Slf4j
public class SmsCallbackServiceImpl extends ServiceImpl<SmsCallbackMapper, SmsCallbackRequestDTO.Request> implements SmsCallbackService {
}