zhangqian
2024-05-13 649b262b570d1c463e927a99eb1ede611da31344
controllers/audio.go
@@ -5,7 +5,6 @@
   "github.com/gin-gonic/gin"
   "gorm.io/gorm"
   "path"
   "speechAnalysis/conf"
   "speechAnalysis/constvar"
   "speechAnalysis/extend/code"
   "speechAnalysis/extend/util"
@@ -144,54 +143,93 @@
      return
   }
   audio, err := models.NewAudioSearch().SetID(params.ID).First()
   err := service.Process(params.ID)
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "查找音频失败")
      util.ResponseFormat(c, code.InternalError, err.Error())
      return
   }
   if audio.AudioStatus != constvar.AudioStatusUploadOk && audio.AudioStatus != constvar.AudioStatusFailed {
      util.ResponseFormat(c, code.RequestParamError, "状态不正确")
      return
   }
   err = models.NewAudioSearch().SetID(params.ID).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusProcessing})
   if err != nil {
      util.ResponseFormat(c, code.RequestParamError, "处理失败")
      return
   }
   go func() {
      resp, err := service.AnalysisAudio(audio.FilePath, conf.AanlysisConf.Url)
      if err != nil {
         logx.Errorf("err when AnalysisAudio:%v", err)
         _ = models.NewAudioSearch().SetID(params.ID).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusFailed})
         return
      }
      if resp.Code != 0 {
         logx.Errorf("AnalysisAudio error return:%v", resp)
         _ = models.NewAudioSearch().SetID(params.ID).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(params.ID).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
      }
   }()
   util.ResponseFormat(c, code.UpdateSuccess, "成功")
}
// BatchProcess
// @Tags      音频
// @Summary   批量处理音频
// @Produce   application/json
// @Param     object  body request.BatchProcessAudio true  "音频信息"
// @Success   200 {object} util.Response "成功"
// @Router    /api-sa/v1/audio/batchProcess [post]
func (slf AudioCtl) BatchProcess(c *gin.Context) {
   var params request.BatchProcessAudio
   if err := c.ShouldBind(&params); err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   var failedNumber int
   for _, audioID := range params.IDs {
      err := service.Process(audioID)
      if err != nil {
         logx.Errorf("%v,编号: %v", err.Error(), audioID)
         failedNumber++
         continue
      }
   }
   if failedNumber == 0 {
      util.ResponseFormat(c, code.UpdateSuccess, "成功")
      return
   } else if failedNumber < len(params.IDs) {
      util.ResponseFormat(c, code.RequestParamError, "部分处理失败")
      return
   } else {
      util.ResponseFormat(c, code.RequestParamError, "全部处理失败")
      return
   }
}
// Delete
// @Tags      音频
// @Summary   删除音频
// @Produce   application/json
// @Param     object  body request.ProcessAudio true  "音频信息"
// @Success   200 {object} util.Response "成功"
// @Router    /api-sa/v1/audio/delete [post]
func (slf AudioCtl) Delete(c *gin.Context) {
   var params request.ProcessAudio
   if err := c.ShouldBind(&params); err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   err := service.DeleteAudio(params.ID)
   if err != nil {
      util.ResponseFormat(c, code.InternalError, err.Error())
      return
   }
   util.ResponseFormat(c, code.DeleteSuccess, "成功")
}
// BatchDelete
// @Tags      音频
// @Summary   批量删除音频
// @Produce   application/json
// @Param     object  body request.BatchProcessAudio true  "音频信息"
// @Success   200 {object} util.Response "成功"
// @Router    /api-sa/v1/audio/batchDelete [post]
func (slf AudioCtl) BatchDelete(c *gin.Context) {
   var params request.BatchProcessAudio
   if err := c.ShouldBind(&params); err != nil {
      util.ResponseFormat(c, code.RequestParamError, err.Error())
      return
   }
   err := service.BatchDeleteAudio(params.IDs)
   if err != nil {
      util.ResponseFormat(c, code.InternalError, err.Error())
      return
   }
   util.ResponseFormat(c, code.DeleteSuccess, "成功")
}