155 lines
3.9 KiB
Go
155 lines
3.9 KiB
Go
package l_msg_api
|
||
|
||
import (
|
||
"context"
|
||
"encoding/json"
|
||
"errors"
|
||
"fmt"
|
||
"gitea.cdlsxd.cn/rzy_tools/request"
|
||
)
|
||
|
||
type MessageCenter struct {
|
||
Host string // 消息中心地址
|
||
ClientKey string // 客户端id,获取授权token需要
|
||
ClientSecret string
|
||
header map[string]string
|
||
option *mesOptionData
|
||
base
|
||
}
|
||
|
||
func NewMessageCenter(host, clientKey, clientSecret, serverIndex, tempIndex string, args ...MesOption) (*MessageCenter, error) {
|
||
msg := &MessageCenter{
|
||
Host: host,
|
||
ClientKey: clientKey,
|
||
ClientSecret: clientSecret,
|
||
base: base{
|
||
ServerIndex: serverIndex,
|
||
TempIndex: tempIndex,
|
||
},
|
||
option: new(mesOptionData),
|
||
}
|
||
err := msg.setHeader()
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
for _, arg := range args {
|
||
arg(msg.option)
|
||
}
|
||
return msg, err
|
||
}
|
||
|
||
// OACreate 发起OA审批
|
||
func (m *MessageCenter) OACreate(ctx context.Context, dTalkUserId, treadNo string, formModel *FormsData) (data OAResponse, err error) {
|
||
formModel.formBase = formBase{
|
||
OutTradeNo: treadNo,
|
||
OriginatorUserId: dTalkUserId,
|
||
}
|
||
err = m.send(ctx, oaCreat, m.parseOACreateParam(formModel), &data)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// OAGetDetail OA详情
|
||
func (m *MessageCenter) OAGetDetail(ctx context.Context, outTradeNo string) (data OAGetDetailData, err error) {
|
||
param, _ := json.Marshal(oAGetDetailRequest{
|
||
Base: m.base,
|
||
OutTradeNo: outTradeNo,
|
||
})
|
||
err = m.send(ctx, oaGet, param, &data)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// SendSms 短信
|
||
// business SmsBusiness
|
||
func (m *MessageCenter) SendSms(ctx context.Context, tels []string, jsonParam string, args ...SmsOption) (data SmsSend, err error) {
|
||
var (
|
||
e = new(smsOptionData)
|
||
)
|
||
if len(tels) == 0 {
|
||
err = errors.New("手机号不能为空")
|
||
return
|
||
}
|
||
for _, arg := range args {
|
||
arg(e)
|
||
}
|
||
if e.Business != "" {
|
||
if _, ex := smsBusinessWithRequestPath[e.Business]; !ex {
|
||
err = errors.New("business参数错误")
|
||
return
|
||
}
|
||
} else {
|
||
e.Business = SmsBusinessDefault
|
||
}
|
||
path := smsBusinessWithRequestPath[e.Business]
|
||
|
||
param := m.parseSmsSendParam(tels, jsonParam)
|
||
err = m.send(ctx, path, param, &data)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// SendBlackBoard 钉钉公告
|
||
// deptidList //接收部门ID列表,最大的列表长度为20。
|
||
// UseridList //接收部用户ID列表,最大的列表长度为20。
|
||
func (m *MessageCenter) SendBlackBoard(ctx context.Context, title, content string, deptidList []int, useridList []string) (data Default, err error) {
|
||
receiver := blackboardReceiverView{
|
||
deptidList, useridList,
|
||
}
|
||
err = m.send(ctx, sendSms, m.parseSendBlackBoardParam(title, content, receiver), &data)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// OAComment OA评论,CommentUserId为空则默认审核发起人评论
|
||
func (m *MessageCenter) OAComment(ctx context.Context, outTradeNo, text, commentUserId string, file *DingOACommentReqFile) (data OAResponse, err error) {
|
||
req := &oACommentRequest{
|
||
Base: m.base,
|
||
OutTradeNo: outTradeNo,
|
||
Text: text,
|
||
CommentUserId: commentUserId,
|
||
}
|
||
if file != nil {
|
||
req.File = *file
|
||
}
|
||
param, _ := json.Marshal(req)
|
||
|
||
err = m.send(ctx, oaComment, param, &data)
|
||
if err != nil {
|
||
return
|
||
}
|
||
return
|
||
}
|
||
|
||
// OAComment OA评论,CommentUserId为空则默认审核发起人评论
|
||
func (m *MessageCenter) FinanceBankList(ctx context.Context, financeBank *FinanceBank, page uint32, pageSize uint32) (data FinanceBankResp, err error) {
|
||
|
||
res, err := m.OtherSend(ctx, &request.Request{
|
||
Method: "GET",
|
||
Url: fmt.Sprintf("%s%s", financeUrl, financeBanks),
|
||
Params: mapInterfaceToMapString(structToMap(financeBankRequest{
|
||
Keyword: financeBank.Keyword,
|
||
BankName: financeBank.BankName,
|
||
Province: financeBank.Province,
|
||
City: financeBank.City,
|
||
Code: financeBank.Code,
|
||
Page: page,
|
||
PageSize: pageSize,
|
||
IsDesc: financeBank.IsDesc,
|
||
})),
|
||
})
|
||
if err != nil {
|
||
return
|
||
}
|
||
err = json.Unmarshal(res.Content, &data)
|
||
return
|
||
}
|