| | |
| | | |
| | | import ( |
| | | "errors" |
| | | "fmt" |
| | | "github.com/gin-gonic/gin" |
| | | "gorm.io/gorm" |
| | | "io" |
| | | "os" |
| | | "path" |
| | | "speechAnalysis/constvar" |
| | | "speechAnalysis/extend/code" |
| | |
| | | SetTrainNumber(params.TrainNumber). |
| | | SetDriverNumber(params.DriverNumber). |
| | | SetStation(params.StationNumber). |
| | | SetBeginTime(params.BeginTime). |
| | | SetEndTime(params.EndTime). |
| | | SetIsFollowed(params.IsFollowed). |
| | | SetAudioStatusList(params.StatusList). |
| | | Find() |
| | | |
| | | if err != nil { |
| | |
| | | } |
| | | |
| | | util.ResponseFormat(c, code.UpdateSuccess, "成功") |
| | | } |
| | | |
| | | // AudioInfo |
| | | // @Tags 音频 |
| | | // @Summary 音频详情,含解析结果 |
| | | // @Produce application/json |
| | | // @Param object query request.ProcessAudio true "参数" |
| | | // @Success 200 {object} util.Response{data=models.Audio} "成功" |
| | | // @Router /api-sa/v1/audio/info [get] |
| | | func (slf AudioCtl) AudioInfo(c *gin.Context) { |
| | | var params request.ProcessAudio |
| | | if err := c.ShouldBindQuery(¶ms); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err.Error()) |
| | | return |
| | | } |
| | | |
| | | audio, err := models.NewAudioSearch().SetID(params.ID).First() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.InternalError, "请求失败") |
| | | return |
| | | } |
| | | audioText, err := models.NewAudioTextSearch().SetAudioID(audio.ID).First() |
| | | if err == nil { |
| | | audio.AudioText = audioText.AudioText |
| | | } |
| | | |
| | | util.ResponseFormat(c, code.UpdateSuccess, audio) |
| | | } |
| | | |
| | | // AudioDownload |
| | | // @Tags 音频 |
| | | // @Summary 音频下载 |
| | | // @Produce application/json |
| | | // @Param object query request.ProcessAudio true "参数" |
| | | // @Success 200 {object} util.Response{data=models.Audio} "成功" |
| | | // @Router /api-sa/v1/audio/download [get] |
| | | func (slf AudioCtl) AudioDownload(c *gin.Context) { |
| | | var params request.ProcessAudio |
| | | if err := c.ShouldBindQuery(¶ms); err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, err.Error()) |
| | | return |
| | | } |
| | | |
| | | audio, err := models.NewAudioSearch().SetID(params.ID).First() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.InternalError, "查询失败") |
| | | return |
| | | } |
| | | |
| | | if audio.FilePath == "" { |
| | | util.ResponseFormat(c, code.InternalError, "查询失败") |
| | | return |
| | | } |
| | | |
| | | file, err := os.Open(audio.FilePath) |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.InternalError, "文件打开失败") |
| | | return |
| | | } |
| | | defer file.Close() |
| | | |
| | | fileInfo, err := file.Stat() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.InternalError, "获取文件信息失败") |
| | | return |
| | | } |
| | | |
| | | c.Header("Content-Disposition", "inline; filename="+audio.Name) // 在浏览器中直接打开 |
| | | c.Header("Content-Length", fmt.Sprint(fileInfo.Size())) |
| | | c.Header("Content-Type", "audio/mpeg") // 设置音频文件类型 |
| | | |
| | | if _, err := io.Copy(c.Writer, file); err != nil { |
| | | util.ResponseFormat(c, code.InternalError, "文件传输失败") |
| | | return |
| | | } |
| | | } |
| | | |
| | | // BatchProcess |
| | |
| | | return |
| | | } |
| | | |
| | | err := service.DeleteAudio(params.ID) |
| | | audio, err := models.NewAudioSearch().SetID(params.ID).First() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.RequestParamError, "音频不存在") |
| | | return |
| | | } |
| | | |
| | | if audio.AudioStatus == constvar.AudioStatusProcessing || audio.AudioStatus == constvar.AudioStatusFinish { |
| | | util.ResponseFormat(c, code.RequestParamError, "音频正在处理或者处理完成,不可删除") |
| | | return |
| | | } |
| | | |
| | | err = service.DeleteAudio(params.ID) |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.InternalError, err.Error()) |
| | | return |
| | | } |
| | | |
| | | go func() { |
| | | err = os.Remove(audio.FilePath) |
| | | if err != nil { |
| | | logx.Warnf("remove file err:%v, file:%v", err, audio.FilePath) |
| | | } |
| | | }() |
| | | |
| | | util.ResponseFormat(c, code.DeleteSuccess, "成功") |
| | | } |
| | |
| | | return |
| | | } |
| | | |
| | | err := service.BatchDeleteAudio(params.IDs) |
| | | audioList, err := models.NewAudioSearch().SetIDs(params.IDs).FindNotTotal() |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.InternalError, "内部错误") |
| | | return |
| | | } |
| | | |
| | | for _, audio := range audioList { |
| | | if audio.AudioStatus == constvar.AudioStatusProcessing || audio.AudioStatus == constvar.AudioStatusFinish { |
| | | util.ResponseFormat(c, code.RequestParamError, "音频正在处理或者处理完成,不可删除") |
| | | return |
| | | } |
| | | } |
| | | |
| | | err = service.BatchDeleteAudio(params.IDs) |
| | | if err != nil { |
| | | util.ResponseFormat(c, code.InternalError, err.Error()) |
| | | return |
| | | } |
| | | |
| | | go func() { |
| | | for _, audio := range audioList { |
| | | err = os.Remove(audio.FilePath) |
| | | if err != nil { |
| | | logx.Warnf("remove file err:%v, file:%v", err, audio.FilePath) |
| | | } |
| | | } |
| | | }() |
| | | |
| | | util.ResponseFormat(c, code.DeleteSuccess, "成功") |
| | | } |
| | | |