167 lines
4.3 KiB
Go
167 lines
4.3 KiB
Go
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("", 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
|
||
}
|