ai_scheduler/internal/services/advice/file.go

91 lines
2.1 KiB
Go

package advice
import (
"ai_scheduler/internal/biz"
"ai_scheduler/internal/config"
errorcode "ai_scheduler/internal/data/error"
"ai_scheduler/internal/entitys"
"ai_scheduler/internal/pkg"
"ai_scheduler/internal/pkg/file_download"
"context"
"errors"
"net/url"
"github.com/gofiber/fiber/v2"
)
// FileService 文件处理
type FileService struct {
adviceBiz *biz.AdviceFileBiz
cfg *config.Config
adviceProjectBiz *biz.AdviceProjectBiz
}
// NewFileService
func NewFileService(
adviceBiz *biz.AdviceFileBiz,
cfg *config.Config,
adviceProjectBiz *biz.AdviceProjectBiz,
) *FileService {
return &FileService{
adviceBiz: adviceBiz,
cfg: cfg,
adviceProjectBiz: adviceProjectBiz,
}
}
func (a *FileService) WordAna(c *fiber.Ctx) error {
req := &entitys.WordAnaReq{}
if err := c.BodyParser(req); err != nil {
return err
}
if req.ProjectId == 0 {
return errorcode.ParamErr("ProjectId is empty")
}
//项目信息
projectInfo, err := a.adviceProjectBiz.Info(c.UserContext(), &entitys.AdvicerProjectInfoReq{
ProjectId: req.ProjectId,
})
if err != nil {
return err
}
// URL 解码
fileURL, err := url.PathUnescape(req.WordFileUrl)
if err != nil {
return errors.New("URL 解码失败")
}
result, _, err := file_download.GetWordTextFromURL(fileURL, file_download.IsWordFile)
if err != nil {
return err
}
ana, err := a.adviceBiz.WordAna(context.Background(), result, projectInfo)
if err != nil {
return err
}
err = c.JSON(ana)
return err
}
func (a *FileService) WordAnat(path string) ([]byte, error) {
// URL 解码
projectInfo, err := a.adviceProjectBiz.Info(context.Background(), &entitys.AdvicerProjectInfoReq{
ProjectId: 127,
})
fileURL, err := url.PathUnescape(path)
if err != nil {
return nil, errors.New("URL 解码失败")
}
result, _, err := file_download.GetWordTextFromURL(fileURL, file_download.IsWordFile)
if err != nil {
return nil, err
}
ana, err := a.adviceBiz.WordAna(context.Background(), result, projectInfo)
if err != nil {
return nil, err
}
return pkg.JsonByteIgonErr(ana), err
}