zhangqian
2024-05-13 649b262b570d1c463e927a99eb1ede611da31344
service/process.go
@@ -3,10 +3,16 @@
import (
   "bytes"
   "encoding/json"
   "errors"
   "gorm.io/gorm"
   "io"
   "mime/multipart"
   "net/http"
   "os"
   "speechAnalysis/conf"
   "speechAnalysis/constvar"
   "speechAnalysis/models"
   "speechAnalysis/pkg/logx"
)
// Response 结构体用于存储响应体的内容
@@ -74,3 +80,53 @@
   return
}
func Process(audioId uint) (err error) {
   audio, err := models.NewAudioSearch().SetID(audioId).First()
   if err != nil {
      return errors.New("查找音频失败")
   }
   if audio.AudioStatus != constvar.AudioStatusUploadOk && audio.AudioStatus != constvar.AudioStatusFailed {
      return errors.New("状态不正确")
   }
   err = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusProcessing})
   if err != nil {
      return errors.New("DB错误")
   }
   go func() {
      resp, err := AnalysisAudio(audio.FilePath, conf.AanlysisConf.Url)
      if err != nil {
         logx.Errorf("err when AnalysisAudio:%v", err)
         _ = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusFailed})
         return
      }
      if resp.Code != 0 {
         logx.Errorf("AnalysisAudio error return:%v", resp)
         _ = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusFailed})
         return
      }
      logx.Infof("AnalysisAudio result: %v", resp)
      err = models.WithTransaction(func(db *gorm.DB) error {
         err = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusFinish})
         if err != nil {
            return err
         }
         err = models.NewAudioTextSearch().Save(&models.AudioText{
            AudioID:   audio.ID,
            AudioText: resp.Result,
            Score:     resp.Score,
         })
         return err
      })
      if err != nil {
         logx.Infof("AnalysisAudio success but update record failed: %v", err)
         return
      }
   }()
   return nil
}