| | |
| | | "github.com/gin-gonic/gin" |
| | | "gorm.io/gorm" |
| | | "path" |
| | | "speechAnalysis/conf" |
| | | "speechAnalysis/constvar" |
| | | "speechAnalysis/extend/code" |
| | | "speechAnalysis/extend/util" |
| | |
| | | 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(¶ms); 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(¶ms); 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(¶ms); 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, "成功") |
| | | } |