sms
This commit is contained in:
@ -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");
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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> {
|
||||
}
|
@ -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; // 可选 下行通道码号
|
||||
}
|
||||
}
|
@ -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> {
|
||||
}
|
||||
|
@ -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 {
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user