ai_scheduler/internal/biz/qywx_app.go

167 lines
4.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package biz
import (
"ai_scheduler/internal/biz/handle/qywx"
"ai_scheduler/internal/data/constants"
errors "ai_scheduler/internal/data/error"
"ai_scheduler/internal/data/impl"
"ai_scheduler/internal/data/model"
"ai_scheduler/internal/pkg"
"ai_scheduler/internal/pkg/l_request"
"ai_scheduler/internal/tools/bbxt"
"context"
"log"
"strings"
"time"
"ai_scheduler/internal/config"
"xorm.io/builder"
)
// AiRouterBiz 智能路由服务
type QywxAppBiz struct {
conf *config.Config
botGroupQywxImpl *impl.BotGroupQywxImpl
qywxGroupHandle *qywx.Group
qywxOtherHandle *qywx.Other
}
// NewDingTalkBotBiz
func NewQywxAppBiz(
conf *config.Config,
botGroupQywxImpl *impl.BotGroupQywxImpl,
qywxGroupHandle *qywx.Group,
qywxOtherHandle *qywx.Other,
) *QywxAppBiz {
return &QywxAppBiz{
conf: conf,
botGroupQywxImpl: botGroupQywxImpl,
qywxGroupHandle: qywxGroupHandle,
qywxOtherHandle: qywxOtherHandle,
}
}
func (q *QywxAppBiz) InitGroup(ctx context.Context) (string, error) {
chatId := pkg.RandomString(q.conf.Qywx.ChatIdLen)
GroupInfo := &model.AiBotGroupQywx{
Title: "bot_group_" + time.Now().Format(time.DateOnly),
ChatID: chatId,
ConfigID: q.conf.Qywx.DefaultConfigId,
AppSecret: q.conf.Qywx.AppSecret,
}
_, err := q.botGroupQywxImpl.Add(GroupInfo)
if err != nil {
return "", err
}
resp, err := q.qywxGroupHandle.Create(
ctx,
qywx.GroupCreateReq{
Name: GroupInfo.Title,
Chatid: GroupInfo.ChatID,
Userlist: strings.Split(q.conf.Qywx.InitAccount, ","),
},
q.conf.Qywx.CorpId,
GroupInfo.AppSecret,
)
if err != nil {
return "", err
}
return resp.Chatid, nil
}
func (q *QywxAppBiz) GetGroupInfo(ctx context.Context, groupId int) (group model.AiBotGroupQywx, err error) {
cond := builder.NewCond()
cond = cond.And(builder.Eq{"group_id": groupId})
cond = cond.And(builder.Eq{"status": constants.Enable})
err = q.botGroupQywxImpl.GetOneBySearchToStrut(&cond, &group)
return
}
func (q *QywxAppBiz) SendReport(ctx context.Context, groupInfo *model.AiBotGroupQywx, report *bbxt.ReportRes) (err error) {
//confitent := fmt.Sprintf("%s\n%s", report.Title, fmt.Sprintf("![图片](%s)", report.Url))
upload, err := q.qywxOtherHandle.UploadMediaWithUrl(ctx, report.Url, "image", q.conf.Qywx.CorpId, groupInfo.AppSecret)
if err != nil {
return
}
err = q.qywxGroupHandle.SendText(ctx, qywx.GroupSendTextReq{
Chatid: groupInfo.ChatID,
Text: qywx.Text{
Content: report.ReportName + "\n" + report.Title,
},
}, q.conf.Qywx.CorpId, groupInfo.AppSecret)
if err != nil {
return
}
err = q.qywxGroupHandle.SendImg(ctx, qywx.GroupSendImgReq{
Chatid: groupInfo.ChatID,
Image: qywx.Image{
MediaId: upload.MediaId,
},
}, q.conf.Qywx.CorpId, groupInfo.AppSecret)
if err != nil {
return
}
return
}
// SendReportV2 发送到货易通指定的群聊
func (q *QywxAppBiz) SendReportHYT(ctx context.Context, groupInfo *model.AiBotGroupQywx, report *bbxt.ReportRes) (err error) {
// 文本消息
err = q.sendReportHYT(groupInfo, &bbxt.ReportRes{
Title: report.Title,
})
if err != nil {
return err
}
time.Sleep(1 * time.Second) // 等待1秒避免被频控
// 图片消息
err = q.sendReportHYT(groupInfo, &bbxt.ReportRes{
ReportName: report.ReportName,
Url: report.Url,
})
if err != nil {
return err
}
time.Sleep(1 * time.Second) // 等待1秒避免被频控
return nil
}
func (q *QywxAppBiz) sendReportHYT(groupInfo *model.AiBotGroupQywx, report *bbxt.ReportRes) (err error) {
req := l_request.Request{
Method: "POST",
Url: "https://hyt.86698.cn/admin_upload/api/v1/sendWxCommon",
Headers: map[string]string{
"Content-Type": "application/json",
},
Json: map[string]interface{}{
"room_id": groupInfo.ChatID, // 群ID
"oss_url": report.Url, // 图片URL
"file_type": 2, // 文件类型2:图片
"file_name": report.ReportName, // 文件名称
"content": report.Title, // 输入文本,此处有值就走文本发送,没有就走文件发送
},
}
resp, err := req.Send()
if err != nil {
return err
}
if resp.StatusCode != 200 {
return errors.SysErrf("发送到货易通群聊失败,状态码:%d", resp.StatusCode)
}
// 记录相应结果日志
log.Printf("发送到货易通群聊成功,状态码:%d, 响应体:%s", resp.StatusCode, resp.Text)
return nil
}