123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- package services
- import (
- "errors"
- "fmt"
- "hongze/hongze_yb/models/tables/research_variety_tag_relation"
- "hongze/hongze_yb/models/tables/variety_classify"
- "hongze/hongze_yb/models/tables/variety_tag"
- "hongze/hongze_yb/models/tables/yb_community_question_process"
- "hongze/hongze_yb/models/tables/yb_price_driven_tag"
- )
- // TagTreeItem 标签树
- type TagTreeItem struct {
- ClassifyId int `json:"classify_id" description:"分类ID"`
- ClassifyName string `json:"classify_name" description:"分类名称"`
- //TagId int `json:"tag_id" description:"分类ID(用于前端组件)"`
- //TagName string `json:"tag_name" description:"分类名称(用于前端组件)"`
- Sort int `json:"sort" description:"排序"`
- Tags []*TagItem `json:"tags" description:"标签"`
- }
- // TagItem 标签
- type TagItem struct {
- TagId int `json:"tag_id" description:"标签ID"`
- TagName string `json:"tag_name" description:"标签名称"`
- Sort int `json:"sort" description:"排序"`
- ClassifyId int `json:"classify_id" description:"分类ID"`
- ChartPermissionId int `json:"chart_permission_id" description:"品种权限ID"`
- PriceDrivenState int `json:"price_driven_state" description:"价格驱动状态:0-关闭 1-开启"`
- ResearcherList []*TagResearcher `json:"researcher_list" description:"研究员列表"`
- }
- // TagResearcher 研究员信息
- type TagResearcher struct {
- AdminId int `json:"admin_id"`
- AdminName string `json:"admin_name"`
- AllowSelect bool `json:"allow_select" description:"是否允许选中"`
- }
- // GetTagTree 获取标签树
- func GetTagTree(questionId int) (respList []*TagTreeItem, err error) {
- respList = make([]*TagTreeItem, 0)
- // 获取标签分类
- classifyList, e := variety_classify.GetVarietyClassifyList()
- if e != nil {
- err = errors.New("获取标签分类列表失败, Err: " + e.Error())
- return
- }
- classifyLen := len(classifyList)
- if classifyLen == 0 {
- return
- }
- // 获取标签列表
- tagList, e := variety_tag.GetVarietyTagList()
- if e != nil {
- err = errors.New("获取标签列表失败, Err: " + e.Error())
- return
- }
- // 标签研究员组
- relationList := make([]*research_variety_tag_relation.ResearchVarietyTagRelationItem, 0)
- relationList, e = research_variety_tag_relation.GetResearchVarietyTagRelationList()
- if e != nil {
- err = errors.New("获取研究员标签关系失败, Err:" + e.Error())
- return
- }
- // 价格驱动标签
- priceTagList, e := yb_price_driven_tag.GetPriceDrivenTagList()
- if e != nil {
- err = errors.New("获取价格驱动标签列表失败, Err:" + e.Error())
- return
- }
- priceTagLen := len(priceTagList)
- priceTagMap := make(map[int]int, 0)
- for i := 0; i < priceTagLen; i++ {
- priceTagMap[priceTagList[i].VarietyTagID] = priceTagList[i].State
- }
- // 问答社区-研究员是否允许被二次选中
- processMap := make(map[string]bool)
- if questionId > 0 {
- processList, e := yb_community_question_process.GetListByQuestionId(questionId)
- if e != nil {
- err = errors.New("获取问答流程列表失败, Err:" + e.Error())
- return
- }
- for i := range processList {
- k := fmt.Sprintf("%d-%d", processList[i].VarietyTagID, processList[i].ReplierAdminID)
- processMap[k] = true
- }
- }
- // 研究员、价格驱动状态
- tagsArr := make([]*TagItem, 0)
- tagLen := len(tagList)
- for i := 0; i < tagLen; i++ {
- item := tagList[i]
- priceState := priceTagMap[item.VarietyTagID]
- tmp := &TagItem{
- TagId: item.VarietyTagID,
- TagName: item.TagName,
- Sort: item.Sort,
- ClassifyId: item.VarietyClassifyID,
- ChartPermissionId: item.ChartPermissionID,
- PriceDrivenState: priceState,
- }
- members := make([]*TagResearcher, 0)
- for _, r := range relationList {
- if item.VarietyTagID == r.VarietyTagId {
- k := fmt.Sprintf("%d-%d", item.VarietyTagID, r.AdminId)
- as := true
- if processMap[k] {
- as = false
- }
- members = append(members, &TagResearcher{
- AdminId: r.AdminId,
- AdminName: r.AdminName,
- AllowSelect: as,
- })
- }
- }
- tmp.ResearcherList = members
- tagsArr = append(tagsArr, tmp)
- }
- // 分类标签
- for i := 0; i < classifyLen; i++ {
- classifyItem := new(TagTreeItem)
- classifyItem.ClassifyId = classifyList[i].VarietyClassifyID
- classifyItem.ClassifyName = classifyList[i].ClassifyName
- //classifyItem.TagId = classifyList[i].VarietyClassifyID
- //classifyItem.TagName = classifyList[i].ClassifyName
- classifyItem.Sort = classifyList[i].Sort
- classifyItem.Tags = make([]*TagItem, 0)
- for _, t := range tagsArr {
- if classifyItem.ClassifyId == t.ClassifyId {
- classifyItem.Tags = append(classifyItem.Tags, t)
- }
- }
- respList = append(respList, classifyItem)
- }
- return
- }
|