Commit 4c45cac9 authored by 黎博's avatar 黎博

新增短信、push、站内信发送接口

parent a107b998
......@@ -25,12 +25,26 @@ public class CommonController {
@Autowired
LoginInfoService loginInfoService;
/**
* 添加登录白名单
* @param namespace 环境
* @param key 白名单值,设备id/手机号
* @param keyType 白名单类型,0-手机号,1-设备id
* @return
*/
@GetMapping("/whitelist")
public JsonResult addLoginWhiteList(String namespace, String key, Integer keyType) {
boolean result = commonService.addLoginWhiteList(namespace, key, keyType);
return JsonResult.success(result);
}
/**
* 登录信息展示
* @param namespace 环境
* @param pageNum 第几页
* @param pageSize 每页多少个
* @return
*/
@GetMapping("/logininfo/list")
public JsonResult getLoginInfoList(String namespace, Integer pageNum, Integer pageSize) {
SwitchDataSource.dataSourceSwitch(namespace, "login_risk");
......
package cn.qg.qaplatform.controller.stools;
import cn.qg.qaplatform.config.SwitchDataSource;
import cn.qg.qaplatform.entity.stools.MsgSendVo;
import cn.qg.qaplatform.entity.stools.MsgTemplate;
import cn.qg.qaplatform.service.stools.MsgService;
import cn.qg.qaplatform.utils.JsonResult;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* 消息中心相关接口
* @author libo
* 2021-08-13
*/
@RestController
@RequestMapping("/msg")
public class MsgController {
@Autowired
MsgService msgService;
/**
* 发送push
* @param msgSendVo
* @return
*/
@PostMapping("/send/push")
public JsonResult sendPush(@RequestBody MsgSendVo msgSendVo) {
return JsonResult.success(msgService.sendPush(msgSendVo.getNamespace(), msgSendVo.getPhoneNo(), msgSendVo.getContentId(), msgSendVo.getContentArgs()));
}
/**
* 发送站内信
* @param msgSendVo
* @return
*/
@PostMapping("/send/stationLetter")
public JsonResult sendStationLetter(@RequestBody MsgSendVo msgSendVo) {
return JsonResult.success(msgService.sendStationLetter(msgSendVo.getNamespace(), msgSendVo.getPhoneNo(), msgSendVo.getContentId(), msgSendVo.getContentArgs()));
}
/**
* 发送行业短信
* @param msgSendVo
* @return
*/
@PostMapping("/send/quick")
public JsonResult sendMsgQuick(@RequestBody MsgSendVo msgSendVo) {
return JsonResult.success(msgService.sendMsgQuick(msgSendVo.getNamespace(), msgSendVo.getPhoneNo(), msgSendVo.getContentId(), msgSendVo.getContentArgs()));
}
@PostMapping("/send/market")
public JsonResult sendMsgMarket(@RequestBody MsgSendVo msgSendVo) {
return JsonResult.success(msgService.sendMsgQuick(msgSendVo.getNamespace(), msgSendVo.getPhoneNo(), msgSendVo.getContentId(), msgSendVo.getContentArgs()));
}
/**
* 获取短信模板列表
* @param namespace
* @param templateType
* @param pageNum
* @param pageSize
* @return
*/
@GetMapping("/template/list")
public JsonResult getMsgTemplateList(String namespace, Integer templateType, Integer pageNum, Integer pageSize) {
SwitchDataSource.dataSourceSwitch(namespace, "msg");
Page<MsgTemplate> page = new Page<>(pageNum, pageSize);
QueryWrapper<MsgTemplate> msgTemplateQueryWrapper = new QueryWrapper<>();
msgTemplateQueryWrapper.eq("template_type", templateType);
IPage<MsgTemplate> msgTemplateIPage = msgService.page(page, msgTemplateQueryWrapper);
Map<String, Object> map = new HashMap<>();
map.put("total", msgTemplateIPage.getTotal());
map.put("list", msgTemplateIPage.getRecords());
return JsonResult.success(map);
}
}
package cn.qg.qaplatform.entity.stools;
import lombok.Data;
import java.util.List;
@Data
public class MsgSendVo {
private String namespace;
private String phoneNo;
private String contentId;
private List<String> contentArgs;
}
package cn.qg.qaplatform.entity.stools;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* 消息模板实体类
*/
@Data
@TableName(value = "msg_template")
public class MsgTemplate {
/**
* 主键
*/
@TableId
private Integer id;
private Integer type;
/**
* 消息标题
*/
private String title;
/**
* 文案内容
*/
private String content;
/**
* 文案参数个数
*/
private Integer argumentsNumber;
/**
* 文案描述
*/
private String remark;
/**
* 落地页连接
*/
private String navUrl;
private Long navUrlExpireTime;
/**
* 图片连接
*/
private String picUrl;
/**
* 用户群体
*/
private Integer userSource;
/**
* 文本验证码
*/
private Boolean isTxtV;
/**
* 文本短信
*/
private Boolean isTxtMsg;
/**
* 语音验证码
*/
private Boolean isVoiceV;
/**
* 语音短信
*/
private Boolean isVoiceMsg;
/**
* APP推送消息
*/
private Boolean isPushMsg;
/**
* 是否透传条数
*/
private Boolean isPassThrough;
/**
* 存入数据库
*/
private Boolean isSaveApp;
/**
* 营销短信
*/
private Boolean isSmsMarket;
/**
* 轻度催收短信
*/
private Boolean isSmsCollection;
private Boolean isVariable;
/**
* 逻辑删除
*/
private Boolean deleted;
/**
* 操作人
*/
private String operator;
/**
* 操作人姓名
*/
private String operatorName;
private Date createdAt;
private Date updatedAt;
/**
* 微信推送
*/
private Boolean isWechat;
/**
* 文案内容替换
*/
private String contentReplace;
/**
* 渠道类型
*/
private Integer channelType;
/**
* 模板类型
*/
private Integer templateType;
/**
* 消息平台/通道,多个之间英文,分隔,SmsPlatformType - 行业短信;SmsMarketPlatformType - 营销短信,其他类型暂不区分通道
*/
private String platform;
}
package cn.qg.qaplatform.entity.stools;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.util.Date;
@Data
public class PhoneNoWhiteList {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 白名单类型 1 测试用
*/
private String listType;
/**
* 用户姓名
*/
private String userName;
private String phoneNo;
/**
* 是否已删除
*/
private Integer deleted;
/**
* 创建时间
*/
private Date createdAt;
/**
* 更新时间
*/
private Date updatedAt;
}
package cn.qg.qaplatform.mapper.stools;
import cn.qg.qaplatform.entity.stools.MsgTemplate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface MsgMapper extends BaseMapper<MsgTemplate> {
}
package cn.qg.qaplatform.mapper.stools;
import cn.qg.qaplatform.entity.stools.PhoneNoWhiteList;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface PhoneNoWhiteListMapper extends BaseMapper<PhoneNoWhiteList> {
}
package cn.qg.qaplatform.service.stools;
import cn.qg.qaplatform.entity.stools.MsgTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface MsgService extends IService<MsgTemplate> {
/**
* 发送push
*/
boolean sendPush(String namespace, String phoneNo, String contentId, List<String> contentArgs);
/**
* 发送站内信
*/
boolean sendStationLetter(String namespace, String phoneNo, String contentId, List<String> contentArgs);
/**
* 发送行业短信
*/
boolean sendMsgQuick(String namespace, String phoneNo, String contentId, List<String> contentArgs);
/**
* 发送营销短信
*/
boolean sendMsgMarket(String namespace, String phoneNo, String contentId, List<String> contentArgs);
}
package cn.qg.qaplatform.service.stools.impl;
import cn.qg.qaplatform.config.SwitchDataSource;
import cn.qg.qaplatform.entity.stools.MsgTemplate;
import cn.qg.qaplatform.entity.stools.PhoneNoWhiteList;
import cn.qg.qaplatform.entity.zdata.XjfqGenProcessVo;
import cn.qg.qaplatform.mapper.stools.MsgMapper;
import cn.qg.qaplatform.mapper.stools.PhoneNoWhiteListMapper;
import cn.qg.qaplatform.service.stools.MsgService;
import cn.qg.qaplatform.service.zdata.xyqb.XyqbBasicQueryService;
import cn.qg.qaplatform.utils.HttpClientUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jayway.jsonpath.JsonPath;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class MsgServiceImpl extends ServiceImpl<MsgMapper, MsgTemplate> implements MsgService {
@Autowired
XyqbBasicQueryService xyqbBasicQueryService;
@Autowired
PhoneNoWhiteListMapper phoneNoWhiteListMapper;
/**
* 发送push
*/
@Override
public boolean sendPush(String namespace, String phoneNo, String contentId, List<String> contentArgs) {
String userId = xyqbBasicQueryService.getUserInfoByPhoneNo(namespace, phoneNo).getUserId();
String url = "https://msgapi-" + namespace + ".liangkebang.net/middle_office/send/message/appPush";
List<Map<String, Object>> paramList = new ArrayList<>();
Map<String, Object> sendMap = new HashMap<>();
sendMap.put("merchantId", "3");
sendMap.put("phoneNo", phoneNo);
sendMap.put("userIds", userId);
sendMap.put("contentId", contentId);
if (contentArgs != null && contentArgs.size() > 0) {
sendMap.put("contentArgs", contentArgs);
}
paramList.add(sendMap);
Map<String, Object> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
log.info("开始发送push,url:{}, 参数:{}", url, paramList);
JSONObject response = HttpClientUtils.doPostJson(url, JSON.toJSONString(paramList), headers);
log.info("收到响应:{}", response);
return JsonPath.read(response, "$.code").equals("0");
}
/**
* 发送站内信
*/
@Override
public boolean sendStationLetter(String namespace, String phoneNo, String contentId, List<String> contentArgs) {
String userId = xyqbBasicQueryService.getUserInfoByPhoneNo(namespace, phoneNo).getUserId();
String url = "https://msgapi-" + namespace + ".liangkebang.net/middle_office/send/message/stationLetter";
List<Map<String, Object>> paramList = new ArrayList<>();
Map<String, Object> sendMap = new HashMap<>();
sendMap.put("merchantId", "3");
sendMap.put("phoneNo", phoneNo);
sendMap.put("userIds", userId);
sendMap.put("contentId", contentId);
if (contentArgs != null && contentArgs.size() > 0) {
sendMap.put("contentArgs", contentArgs);
}
paramList.add(sendMap);
Map<String, Object> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
log.info("开始发送站内信,url:{}, 参数:{}", url, paramList);
JSONObject response = HttpClientUtils.doPostJson(url, JSON.toJSONString(paramList), headers);
log.info("收到响应:{}", response);
return JsonPath.read(response, "$.code").equals("0");
}
/**
* 发送行业短信
*/
@Override
public boolean sendMsgQuick(String namespace, String phoneNo, String contentId, List<String> contentArgs) {
handlePhoneNoWhiteList(namespace, phoneNo);
XjfqGenProcessVo xjfqGenProcessVo = xyqbBasicQueryService.getUserInfoByPhoneNo(namespace, phoneNo);
String userId;
if (xjfqGenProcessVo == null) {
log.info("用户中心查不到手机号{},因此本次不发送短信.", phoneNo);
return false;
} else {
userId = xjfqGenProcessVo.getUserId();
}
String url = "https://msgapi-" + namespace + ".liangkebang.net/middle_office/send/message/quick";
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("merchantId", "3");
paramsMap.put("phoneNo", phoneNo);
paramsMap.put("userIds", userId);
paramsMap.put("contentId", contentId);
if (contentArgs != null && contentArgs.size() > 0) {
paramsMap.put("contentArgs", contentArgs);
}
Map<String, Object> headers = new HashMap<>();
log.info("开始发送营销短信,url:{}, 参数:{}", url, paramsMap);
JSONObject response = HttpClientUtils.doPostJson(url, JSON.toJSONString(paramsMap), headers);
log.info("收到响应:{}", response);
return JsonPath.read(response, "$.code").equals("0");
}
/**
* 发送营销短信
*/
@Override
public boolean sendMsgMarket(String namespace, String phoneNo, String contentId, List<String> contentArgs) {
handlePhoneNoWhiteList(namespace, phoneNo);
SwitchDataSource.dataSourceSwitch(namespace, "msg");
QueryWrapper<PhoneNoWhiteList> whiteListQueryWrapper = new QueryWrapper<>();
whiteListQueryWrapper.eq("phone_no", phoneNo);
PhoneNoWhiteList phoneNoWhite = phoneNoWhiteListMapper.selectOne(whiteListQueryWrapper);
if (phoneNoWhite == null) {
log.info("该手机号不在白名单:{},先将其添加到手机号白名单.", phoneNo);
PhoneNoWhiteList phoneNoWhiteListEntity = new PhoneNoWhiteList();
phoneNoWhiteListEntity.setPhoneNo(phoneNo);
phoneNoWhiteListEntity.setUserName(phoneNo);
phoneNoWhiteListEntity.setListType("1");
phoneNoWhiteListEntity.setDeleted(0);
phoneNoWhiteListMapper.insert(phoneNoWhiteListEntity);
} else {
log.info("{}该手机号已在手机号白名单.", phoneNo);
}
String url = "https://msgapi-" + namespace + ".liangkebang.net/middle_office/send/message/market";
Map<String, Object> paramsMap = new HashMap<>();
Map<String, Object> headers = new HashMap<>();
paramsMap.put("merchantId", "3");
paramsMap.put("phoneNo", phoneNo);
paramsMap.put("contentId", contentId);
paramsMap.put("platformId", "8");
if (contentArgs != null && contentArgs.size() > 0) {
paramsMap.put("contentArgs", contentArgs);
}
List<Map<String, Object>> paramList = new ArrayList<>();
paramList.add(paramsMap);
headers.put("Content-Type", "application/json");
log.info("开始发送营销短信,url:{}, 参数:{}", url, paramList);
JSONObject response = HttpClientUtils.doPostJson(url, JSON.toJSONString(paramList), headers);
log.info("收到响应:{}", response);
return JsonPath.read(response, "$.code").equals("0");
}
/**
* 判断是否在白名单,如果不在,则添加到短信白名单
* @param namespace 环境
* @param phoneNo 手机号
*/
public void handlePhoneNoWhiteList(String namespace, String phoneNo) {
SwitchDataSource.dataSourceSwitch(namespace, "msg");
QueryWrapper<PhoneNoWhiteList> whiteListQueryWrapper = new QueryWrapper<>();
whiteListQueryWrapper.eq("phone_no", phoneNo);
PhoneNoWhiteList phoneNoWhite = phoneNoWhiteListMapper.selectOne(whiteListQueryWrapper);
if (phoneNoWhite == null) {
log.info("该手机号不在白名单:{},先将其添加到手机号白名单.", phoneNo);
PhoneNoWhiteList phoneNoWhiteListEntity = new PhoneNoWhiteList();
phoneNoWhiteListEntity.setPhoneNo(phoneNo);
phoneNoWhiteListEntity.setUserName("测试");
phoneNoWhiteListEntity.setListType("1");
phoneNoWhiteListEntity.setDeleted(0);
phoneNoWhiteListMapper.insert(phoneNoWhiteListEntity);
} else {
log.info("{}该手机号已在手机号白名单.", phoneNo);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment