Browse Source

fix: 语音识别接口

hsun 11 months ago
parent
commit
f5a2e40970

+ 69 - 5
controllers/speech_recognition/speech_recognition.go

@@ -687,15 +687,79 @@ func (this *SpeechRecognitionController) List() {
 			cond += fmt.Sprintf(` AND %s = ?`, speech_recognition.SpeechRecognitionCols.SysUserId)
 			pars = append(pars, params.CreateUserId)
 		}
-		if params.MenuId > 0 {
-			cond += fmt.Sprintf(` AND %s = ?`, speech_recognition.SpeechRecognitionCols.MenuId)
-			pars = append(pars, params.MenuId)
+		// 语音识别目录-筛选子目录集合
+		if params.MenuId > 0 && !params.IsTagMenu {
+			{
+				menuOb := new(speech_recognition.SpeechRecognitionMenu)
+				menus, e := menuOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
+				if e != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取语音识别目录列表失败, Err: " + e.Error()
+					return
+				}
+				childIds := services.GetSpeechRecognitionMenuChildrenRecursive(menus, params.MenuId)
+				menuIds := make([]int, 0)
+				menuIds = append(menuIds, params.MenuId)
+				if len(childIds) > 0 {
+					menuIds = append(menuIds, childIds...)
+				}
+				cond += fmt.Sprintf(` AND %s IN (%s)`, speech_recognition.SpeechRecognitionCols.MenuId, utils.GetOrmInReplace(len(menuIds)))
+				pars = append(pars, menuIds)
+			}
+		}
+		// 标签目录-筛选目录下所有标签
+		tagIds := make([]int, 0)
+		if params.MenuId > 0 && params.IsTagMenu {
+			{
+				menuOb := new(speech_recognition.SpeechRecognitionTagMenu)
+				menus, e := menuOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
+				if e != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取标签目录列表失败, Err: " + e.Error()
+					return
+				}
+				childIds := services.GetSpeechRecognitionTagMenuChildrenRecursive(menus, params.MenuId)
+				menuIds := make([]int, 0)
+				menuIds = append(menuIds, params.MenuId)
+				if len(childIds) > 0 {
+					menuIds = append(menuIds, childIds...)
+				}
+				// 获取目录下所有标签
+				tagOb := new(speech_recognition.SpeechRecognitionTag)
+				ids, e := tagOb.GetTagIdsByMenuIds(menuIds)
+				if e != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "通过目录IDs获取标签IDs失败, Err: " + e.Error()
+					return
+				}
+				// 此处查询无结果直接返回
+				if len(ids) == 0 {
+					br.Data = dataResp
+					br.Ret = 200
+					br.Success = true
+					br.Msg = "获取成功"
+					return
+				}
+				tagIds = ids
+			}
 		}
 
 		// 标签筛选
-		if params.TagId > 0 {
+		if params.TagId > 0 && params.TagIds == "" {
+			tagIds = append(tagIds, params.TagId)
+		}
+		if params.TagId <= 0 && params.TagIds != "" {
+			tagArr := strings.Split(params.TagIds, ",")
+			if len(tagArr) > 0 {
+				for _, v := range tagArr {
+					t, _ := strconv.Atoi(v)
+					tagIds = append(tagIds, t)
+				}
+			}
+		}
+		if len(tagIds) > 0 {
 			mappingOb := new(speech_recognition.SpeechRecognitionTagMapping)
-			tagSpeechIds, e := mappingOb.GetSpeechIdsByTagId(params.TagId)
+			tagSpeechIds, e := mappingOb.GetSpeechIdsByTagIds(tagIds)
 			if e != nil {
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取标签关联语音识别失败, Err: " + e.Error()

+ 3 - 1
models/speech_recognition/speech_recognition.go

@@ -428,7 +428,9 @@ type SpeechRecognitionListReq struct {
 	EndTime      string `form:"EndTime" description:"结束时间"`
 	CreateUserId int    `form:"CreateUserId" description:"创建人ID"`
 	TagId        int    `form:"TagId" description:"标签ID"`
-	MenuId       int    `form:"FormId" description:"目录ID"`
+	TagIds       string `form:"TagIds" description:"标签IDs, 英文逗号分隔"`
+	MenuId       int    `form:"MenuId" description:"目录ID"`
+	IsTagMenu    bool   `form:"IsTagMenu" description:"是否为标签目录"`
 }
 
 // SpeechRecognitionListResp 语音识别列表响应体

+ 10 - 0
models/speech_recognition/speech_recognition_tag.go

@@ -213,3 +213,13 @@ func (m *SpeechRecognitionTag) GetFirstByMenuId(menuId int) (item *SpeechRecogni
 	err = o.Raw(sql, menuId).QueryRow(&item)
 	return
 }
+
+func (m *SpeechRecognitionTag) GetTagIdsByMenuIds(menuIds []int) (tagIds []int, err error) {
+	if len(menuIds) == 0 {
+		return
+	}
+	o := orm.NewOrm()
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s IN (%s) GROUP BY %s`, SpeechRecognitionTagCols.SpeechRecognitionTagId, m.TableName(), SpeechRecognitionTagCols.MenuId, utils.GetOrmInReplace(len(menuIds)), SpeechRecognitionTagCols.SpeechRecognitionTagId)
+	_, err = o.Raw(sql, menuIds).QueryRows(&tagIds)
+	return
+}

+ 6 - 3
models/speech_recognition/speech_recognition_tag_mapping.go

@@ -137,9 +137,12 @@ func (m *SpeechRecognitionTagMapping) ClearMappingBySpeechId(speechId int) (err
 	return
 }
 
-func (m *SpeechRecognitionTagMapping) GetSpeechIdsByTagId(tagId int) (speechIds []int, err error) {
+func (m *SpeechRecognitionTagMapping) GetSpeechIdsByTagIds(tagIds []int) (speechIds []int, err error) {
+	if len(tagIds) == 0 {
+		return
+	}
 	o := orm.NewOrm()
-	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = ? GROUP BY %s`, SpeechRecognitionTagMappingCols.SpeechRecognitionId, m.TableName(), SpeechRecognitionTagMappingCols.TagId, SpeechRecognitionTagMappingCols.SpeechRecognitionId)
-	_, err = o.Raw(sql, tagId).QueryRows(&speechIds)
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s IN (%s) GROUP BY %s`, SpeechRecognitionTagMappingCols.SpeechRecognitionId, m.TableName(), SpeechRecognitionTagMappingCols.TagId, utils.GetOrmInReplace(len(tagIds)), SpeechRecognitionTagMappingCols.SpeechRecognitionId)
+	_, err = o.Raw(sql, tagIds).QueryRows(&speechIds)
 	return
 }