Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qa-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QA
qa-platform
Commits
4c45cac9
Commit
4c45cac9
authored
Aug 14, 2021
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增短信、push、站内信发送接口
parent
a107b998
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
532 additions
and
0 deletions
+532
-0
CommonController.java
.../cn/qg/qaplatform/controller/stools/CommonController.java
+14
-0
MsgController.java
...ava/cn/qg/qaplatform/controller/stools/MsgController.java
+84
-0
MsgSendVo.java
src/main/java/cn/qg/qaplatform/entity/stools/MsgSendVo.java
+18
-0
MsgTemplate.java
...main/java/cn/qg/qaplatform/entity/stools/MsgTemplate.java
+151
-0
PhoneNoWhiteList.java
...java/cn/qg/qaplatform/entity/stools/PhoneNoWhiteList.java
+42
-0
MsgMapper.java
src/main/java/cn/qg/qaplatform/mapper/stools/MsgMapper.java
+7
-0
PhoneNoWhiteListMapper.java
...n/qg/qaplatform/mapper/stools/PhoneNoWhiteListMapper.java
+7
-0
MsgService.java
...main/java/cn/qg/qaplatform/service/stools/MsgService.java
+31
-0
MsgServiceImpl.java
.../cn/qg/qaplatform/service/stools/impl/MsgServiceImpl.java
+178
-0
No files found.
src/main/java/cn/qg/qaplatform/controller/stools/CommonController.java
View file @
4c45cac9
...
...
@@ -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"
);
...
...
src/main/java/cn/qg/qaplatform/controller/stools/MsgController.java
0 → 100644
View file @
4c45cac9
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
);
}
}
src/main/java/cn/qg/qaplatform/entity/stools/MsgSendVo.java
0 → 100644
View file @
4c45cac9
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
;
}
src/main/java/cn/qg/qaplatform/entity/stools/MsgTemplate.java
0 → 100644
View file @
4c45cac9
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
;
}
src/main/java/cn/qg/qaplatform/entity/stools/PhoneNoWhiteList.java
0 → 100644
View file @
4c45cac9
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
;
}
src/main/java/cn/qg/qaplatform/mapper/stools/MsgMapper.java
0 → 100644
View file @
4c45cac9
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
>
{
}
src/main/java/cn/qg/qaplatform/mapper/stools/PhoneNoWhiteListMapper.java
0 → 100644
View file @
4c45cac9
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
>
{
}
src/main/java/cn/qg/qaplatform/service/stools/MsgService.java
0 → 100644
View file @
4c45cac9
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
);
}
src/main/java/cn/qg/qaplatform/service/stools/impl/MsgServiceImpl.java
0 → 100644
View file @
4c45cac9
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
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment