Эх сурвалжийг харах

fix:新增获取研究员列表接口

Roc 2 жил өмнө
parent
commit
06693d164d

+ 26 - 0
controllers/variety_tag.go

@@ -0,0 +1,26 @@
+package controllers
+
+import (
+	"hongze/hongze_mobile_admin/services"
+)
+
+// VarietyTagController 标签库
+type VarietyTagController struct {
+	BaseAuth
+}
+
+// TagTree
+// @Title 标签树
+// @Description 标签树
+// @Success 200 string "获取成功"
+// @router /variety_tag/tag_tree [get]
+func (c *VarietyTagController) TagTree() {
+	// 是否包含被禁用的研究员标签
+	include, _ := c.GetInt("IncludeDisableMember")
+	resp, e := services.GetTagTree(include)
+	if e != nil {
+		c.FailWithMessage("获取失败", "TagTree-获取标签树失败, Err: "+e.Error())
+		return
+	}
+	c.OkDetailed(resp, "获取成功")
+}

+ 112 - 0
models/tables/research_variety_tag_relation/research_variety_tag_relation.go

@@ -0,0 +1,112 @@
+package research_variety_tag_relation
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+// ResearchVarietyTagRelation 研究员标签关系表
+type ResearchVarietyTagRelation struct {
+	Id           int `orm:"column(id);pk"`
+	VarietyTagId int `json:"variety_tag_id" description:"标签ID"`
+	AdminId      int `json:"admin_id" description:"研究员ID"`
+}
+
+// ResearchVarietyTagRelationListByAdminId 根据研究员ID获取标签关系列表
+func ResearchVarietyTagRelationListByAdminId(adminId int) (list []*ResearchVarietyTagRelation, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM research_variety_tag_relation WHERE admin_id = ?`
+	_, err = o.Raw(sql, adminId).QueryRows(&list)
+	return
+}
+
+type ResearchTagRelation struct {
+	Id              int `json:"id"`
+	ResearchGroupId int `json:"research_group_id" description:"分组ID"`
+	AdminId         int `json:"admin_id" description:"研究员ID"`
+}
+
+// ResearchTagRelationListByAdminId 根据研究员ID获取标签关系列表
+func ResearchTagRelationListByAdminId(adminId int) (list []*ResearchTagRelation, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT id, variety_tag_id AS research_group_id, admin_id FROM research_variety_tag_relation WHERE admin_id = ?`
+	_, err = o.Raw(sql, adminId).QueryRows(&list)
+	return
+}
+
+// ResearchVarietyTagRelationItem 研究员标签关系
+type ResearchVarietyTagRelationItem struct {
+	VarietyTagId int    `json:"variety_tag_id" description:"标签ID"`
+	AdminId      int    `json:"admin_id" description:"研究员ID"`
+	AdminName    string `json:"admin_name" description:"研究员姓名"`
+}
+
+// GetResearchVarietyTagRelationList 获取研究员标签关系列表
+func GetResearchVarietyTagRelationList(include int) (list []*ResearchVarietyTagRelationItem, err error) {
+	// 是否包含已禁止的研究员, 默认不包含
+	condition := ` WHERE b.enabled = 1 `
+	if include == 1 {
+		condition = ` WHERE 1=1 `
+	}
+	o := orm.NewOrm()
+	sql := `SELECT
+				a.variety_tag_id,
+				a.admin_id,
+				b.real_name AS admin_name
+			FROM
+				research_variety_tag_relation AS a
+			INNER JOIN admin AS b ON a.admin_id = b.admin_id `
+	sql += condition
+	sql += ` ORDER BY
+				a.variety_tag_id ASC,
+				a.admin_id ASC`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// UpdateAdminVarietyTagRelation 更新研究员标签关系
+func UpdateAdminVarietyTagRelation(adminId int, items []*ResearchVarietyTagRelation) (err error) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+	sql := `DELETE FROM research_variety_tag_relation WHERE admin_id = ?`
+	if _, err = o.Raw(sql, adminId).Exec(); err != nil {
+		return
+	}
+	itemsLen := len(items)
+	if itemsLen > 0 {
+		_, err = o.InsertMulti(itemsLen, items)
+	}
+	return
+}
+
+// AdminVarietyTagRelationList 研究员研究方向列表
+type AdminVarietyTagRelationList struct {
+	AdminId      int    `json:"admin_id"`
+	GroupNameStr string `json:"group_name_str"`
+}
+
+// GetAdminVarietyTagRelationListByAdminId 获取研究员研究方向分组列表
+func GetAdminVarietyTagRelationListByAdminId(adminIds string) (list []*AdminVarietyTagRelationList, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+				a.admin_id,
+				GROUP_CONCAT(b.tag_name) AS group_name_str
+			FROM
+				research_variety_tag_relation AS a
+			INNER JOIN variety_tag AS b ON a.variety_tag_id = b.variety_tag_id
+			WHERE
+				a.admin_id IN (` + adminIds + `)
+			GROUP BY
+				a.admin_id`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}

+ 32 - 0
models/tables/variety_classify/variety_classify.go

@@ -0,0 +1,32 @@
+package variety_classify
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// VarietyClassify 标签库分类表
+type VarietyClassify struct {
+	VarietyClassifyId int       `orm:"column(variety_classify_id);pk" description:"标签分类ID"`
+	ClassifyName      string    `json:"classify_name" description:"标签分类名称"`
+	Sort              int       `json:"sort" description:"排序"`
+	State             int       `json:"state" description:"显示状态 0-禁用 1-启用"`
+	CreateTime        time.Time `json:"create_time" description:"创建时间"`
+	ModifyTime        time.Time `json:"modify_time" description:"更新时间"`
+}
+
+// GetVarietyClassifyList 获取标签分类列表
+func GetVarietyClassifyList() (list []*VarietyClassify, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM variety_classify WHERE state = 1 ORDER BY sort`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// GetVarietyClassifyById 主键获取分类
+func GetVarietyClassifyById(classifyId int) (item *VarietyClassify, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM variety_classify WHERE variety_classify_id = ? LIMIT 1`
+	err = o.Raw(sql, classifyId).QueryRow(&item)
+	return
+}

+ 45 - 0
models/tables/variety_tag/variety_tag.go

@@ -0,0 +1,45 @@
+package variety_tag
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// VarietyTag 标签表
+type VarietyTag struct {
+	VarietyTagId                int       `orm:"column(variety_tag_id);pk" description:"标签ID"`
+	VarietyClassifyId           int       `json:"variety_classify_id" description:"标签分类ID"`
+	VarietyClassifyName         string    `json:"variety_classify_name" description:"标签分类名称"`
+	TagName                     string    `json:"tag_name" description:"标签名称"`
+	ChartPermissionClassifyName string    `json:"chart_permission_classify_name" description:"品种权限分类名"`
+	ChartPermissionId           int       `json:"chart_permission_id" description:"品种权限ID"`
+	ChartPermissionName         string    `json:"chart_permission_name" description:"品种权限名称"`
+	Sort                        int       `json:"sort" description:"排序"`
+	State                       int       `json:"state" description:"显示状态 0-禁用 1-启用"`
+	CreateTime                  time.Time `json:"create_time" description:"创建时间"`
+	ModifyTime                  time.Time `json:"modify_time" description:"更新时间"`
+}
+
+// GetVarietyTagById 主键获取标签
+func GetVarietyTagById(tagId int) (item *VarietyTag, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM variety_tag WHERE variety_tag_id = ? LIMIT 1`
+	err = o.Raw(sql, tagId).QueryRow(&item)
+	return
+}
+
+// GetVarietyTagList 获取标签列表
+func GetVarietyTagList() (list []*VarietyTag, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM variety_tag WHERE state = 1 ORDER BY sort`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// GetVarietyTagListByClassifyId 根据分类获取标签列表
+func GetVarietyTagListByClassifyId(classifyId int) (list []*VarietyTag, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM variety_tag WHERE variety_classify_id = ? AND state = 1 ORDER BY sort`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}

+ 44 - 0
models/tables/yb_price_driven_tag/yb_price_driven_tag.go

@@ -0,0 +1,44 @@
+package yb_price_driven_tag
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+// VarietyClassify 标签库分类表
+type PriceDrivenTag struct {
+	Id             int       `orm:"column(id);pk" `
+	VarietyTagId   int       `json:"variety_tag_id" description:"标签ID"`
+	VarietyTagName string    `json:"variety_tag_name" description:"标签名称"`
+	State          int       `json:"state" description:"显示状态 0-禁用 1-启用"`
+	CreateTime     time.Time `json:"create_time" description:"创建时间"`
+	ModifyTime     time.Time `json:"modify_time" description:"更新时间"`
+}
+
+// TableName 表名变更
+func (priceDrivenTag *PriceDrivenTag) TableName() string {
+	return "yb_price_driven_tag"
+}
+
+// Update 更新
+func (priceDrivenTag *PriceDrivenTag) Update(cols []string) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Update(priceDrivenTag, cols...)
+	return
+}
+
+// GetPriceDrivenTagList 获取价格驱动标签列表
+func GetPriceDrivenTagList() (list []*PriceDrivenTag, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM yb_price_driven_tag`
+	_, err = o.Raw(sql).QueryRows(&list)
+	return
+}
+
+// GetPriceDrivenTagByTagId 通过标签ID获取价格驱动标签
+func GetPriceDrivenTagByTagId(tagId int) (item *PriceDrivenTag, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM yb_price_driven_tag WHERE variety_tag_id = ? LIMIT 1`
+	err = o.Raw(sql, tagId).QueryRow(&item)
+	return
+}

+ 145 - 0
services/variety_tag.go

@@ -0,0 +1,145 @@
+package services
+
+import (
+	"errors"
+	"hongze/hongze_mobile_admin/models/tables/research_variety_tag_relation"
+	"hongze/hongze_mobile_admin/models/tables/variety_classify"
+	"hongze/hongze_mobile_admin/models/tables/variety_tag"
+	"hongze/hongze_mobile_admin/models/tables/yb_price_driven_tag"
+	"strconv"
+	"strings"
+)
+
+// 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"`
+}
+
+// 获取标签树
+func GetTagTree(include 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, e := research_variety_tag_relation.GetResearchVarietyTagRelationList(include)
+	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
+	}
+	// 标签成员、价格驱动状态
+	tagsArr := make([]*TagItem, 0)
+	tagLen := len(tagList)
+	for i := 0; i < tagLen; i++ {
+		item := tagList[i]
+		members := make([]*TagResearcher, 0)
+		for _, r := range relationList {
+			if item.VarietyTagId == r.VarietyTagId {
+				members = append(members, &TagResearcher{
+					AdminId:   r.AdminId,
+					AdminName: r.AdminName,
+				})
+			}
+		}
+		// 价格驱动
+		priceState := priceTagMap[item.VarietyTagId]
+		tagsArr = append(tagsArr, &TagItem{
+			TagId:             item.VarietyTagId,
+			TagName:           item.TagName,
+			Sort:              item.Sort,
+			ClassifyId:        item.VarietyClassifyId,
+			ChartPermissionId: item.ChartPermissionId,
+			PriceDrivenState:  priceState,
+			ResearcherList:    members,
+		})
+	}
+	// 分类标签
+	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
+}
+
+// UpdateResearcherTagGroup 更新研究员标签分组
+func UpdateResearcherTagGroup(adminId int, groupIds string) (err error) {
+	if adminId == 0 {
+		return
+	}
+	items := make([]*research_variety_tag_relation.ResearchVarietyTagRelation, 0)
+	groupIdArr := strings.Split(groupIds, ",")
+	if groupIds != "" {
+		for _, v := range groupIdArr {
+			groupId, e := strconv.Atoi(v)
+			if e != nil {
+				err = errors.New("分组ID有误")
+				return
+			}
+			items = append(items, &research_variety_tag_relation.ResearchVarietyTagRelation{
+				VarietyTagId: groupId,
+				AdminId:      adminId,
+			})
+		}
+	}
+	if e := research_variety_tag_relation.UpdateAdminVarietyTagRelation(adminId, items); e != nil {
+		err = errors.New("更新研究员标签分组失败, Err:" + e.Error())
+	}
+	return
+}