Browse Source

需求池-研究方向改动

hsun 2 years ago
parent
commit
f69e15101a

+ 20 - 3
controller/community/question.go

@@ -43,7 +43,7 @@ func QuestionList(c *gin.Context) {
 		req.PageSize = utils.PageSize20
 	}
 	userinfo := user.GetInfoByClaims(c)
-	list, err := community.GetQuestionList(req.PageIndex, req.PageSize, req.OnlyMine, req.ChartPermissionId, req.ReplyStatus, userinfo)
+	list, err := community.GetQuestionList(req.PageIndex, req.PageSize, req.OnlyMine, req.ChartPermissionId, req.ReplyStatus, req.GroupId, userinfo)
 	if err != nil {
 		response.FailMsg("获取失败", "QuestionList ErrMsg:"+err.Error(), c)
 		return
@@ -141,8 +141,9 @@ func QuestionReply(c *gin.Context) {
 		return
 	}
 	userinfo := user.GetInfoByClaims(c)
-	if err := community.ReplyUserQuestion(int(userinfo.UserID), req.QuestionId, req.AudioList); err != nil {
-		response.FailMsg("提交失败", "QuestionReply ErrMsg:"+err.Error(), c)
+	msg, err := community.ReplyUserQuestion(int(userinfo.UserID), req.QuestionId, req.AudioList)
+	if err != nil {
+		response.FailMsg(msg, "QuestionReply ErrMsg:"+err.Error(), c)
 		return
 	}
 	response.Ok("操作成功", c)
@@ -277,3 +278,19 @@ func QuestionUnread(c *gin.Context) {
 	}
 	response.OkData("获取成功", total, c)
 }
+
+// ResearchGroupList 研究方向分组列表
+// @Tags 问答社区模块
+// @Description 研究方向分组列表
+// @Success 200 {int} int "获取成功"
+// @failure 400 {string} string "获取失败"
+// @Router /question/research_group [get]
+func ResearchGroupList(c *gin.Context)  {
+	list, err := community.GetResearchGroupTree()
+	if err != nil {
+		fmt.Println(err.Error())
+		response.FailMsg("获取失败", "ResearchGroupList ErrMsg:"+err.Error(), c)
+		return
+	}
+	response.OkData("获取成功", list, c)
+}

+ 1 - 0
models/request/community.go

@@ -6,6 +6,7 @@ type QuestionListReq struct {
 	OnlyMine          int `json:"only_mine" form:"only_mine"`
 	ChartPermissionId int `json:"chart_permission_id" form:"chart_permission_id"`
 	ReplyStatus       int `json:"reply_status" form:"reply_status"`
+	GroupId           int `json:"group_id" form:"group_id"`
 }
 
 type QuestionDetailReq struct {

+ 36 - 17
models/response/community.go

@@ -1,23 +1,25 @@
 package response
 
 type CommunityQuestionItem struct {
-	CommunityQuestionID int                           `json:"community_question_id"`
-	UserId              int                           `json:"user_id"`
-	QuestionContent     string                        `json:"question_content"`
-	ReplierRealName     string                        `json:"replier_real_name"`
-	ReplierRank         string                        `json:"replier_rank"`
-	ReplierAvatar       string                        `json:"replier_avatar"`
-	ChartPermissionID   int                           `json:"chart_permission_id"`
-	ChartPermissionName string                        `json:"chart_permission_name"`
-	IsRead              int                           `json:"is_read"`
-	ReplierIsRead       int                           `json:"replier_is_read"`
-	CreateTime          string                        `json:"create_time"`
-	ReplyTime           string                        `json:"reply_time"`
-	IsTop               int                           `json:"is_top"`
-	ReplyStatus         int                           `json:"reply_status" description:"回复状态 1-待分配 2-待回答 3-已回答"`
-	AuthOk              bool                          `json:"auth_ok" description:"是否有权限"`
-	PermissionInfo      PermissionCheckInfo           `json:"permission_info"`
-	AudioList           []*CommunityQuestionAudioItem `json:"audio_list"`
+	CommunityQuestionID     int                           `json:"community_question_id"`
+	UserId                  int                           `json:"user_id"`
+	QuestionContent         string                        `json:"question_content"`
+	ReplierRealName         string                        `json:"replier_real_name"`
+	ReplierRank             string                        `json:"replier_rank"`
+	ReplierAvatar           string                        `json:"replier_avatar"`
+	ChartPermissionID       int                           `json:"chart_permission_id"`
+	ChartPermissionName     string                        `json:"chart_permission_name"`
+	ResearchGroupSecondId   int                           `json:"research_group_second_id"`
+	ResearchGroupSecondName string                        `json:"research_group_second_name"`
+	IsRead                  int                           `json:"is_read"`
+	ReplierIsRead           int                           `json:"replier_is_read"`
+	CreateTime              string                        `json:"create_time"`
+	ReplyTime               string                        `json:"reply_time"`
+	IsTop                   int                           `json:"is_top"`
+	ReplyStatus             int                           `json:"reply_status" description:"回复状态 1-待分配 2-待回答 3-已回答"`
+	AuthOk                  bool                          `json:"auth_ok" description:"是否有权限"`
+	PermissionInfo          PermissionCheckInfo           `json:"permission_info"`
+	AudioList               []*CommunityQuestionAudioItem `json:"audio_list"`
 }
 
 type CommunityQuestionAudioItem struct {
@@ -39,3 +41,20 @@ type CommunityQuestionAudioUpload struct {
 	AudioPlaySeconds string `json:"audio_play_seconds"`
 	AudioSize        string `json:"audio_size"`
 }
+
+// ResearchGroup 研究方向分组表
+type ResearchGroupItem struct {
+	ResearchGroupId   int    `json:"research_group_id" description:"研究方向分组ID"`
+	ResearchGroupName string `json:"research_group_name" description:"研究方向分组名称"`
+	ParentId          int    `json:"parent_id" description:"父类ID"`
+	ChartPermissionId int    `json:"chart_permission_id" description:"品种权限ID"`
+	Sort              int    `json:"sort" description:"排序"`
+	//Members           []*ResearchGroupMember `json:"members"`
+	Children []*ResearchGroupItem `json:"children"`
+}
+
+// ResearchGroupMember 研究方向组员信息
+type ResearchGroupMember struct {
+	AdminId   int    `json:"admin_id"`
+	AdminName string `json:"admin_name"`
+}

+ 41 - 0
models/tables/research_group/entity.go

@@ -0,0 +1,41 @@
+package research_group
+
+import "time"
+
+// ResearchGroup 研究方向分组表
+type ResearchGroup struct {
+	ResearchGroupID   int       `gorm:"primaryKey;column:research_group_id;type:int(10) unsigned;not null" json:"-"`                  // 研究方向分组ID
+	ResearchGroupName string    `gorm:"column:research_group_name;type:varchar(100);not null;default:''" json:"researchGroupName"`    // 研究方向分组名称
+	ParentID          int       `gorm:"column:parent_id;type:int(10) unsigned;not null;default:0" json:"parentId"`                    // 父类ID
+	ChartPermissionID int       `gorm:"column:chart_permission_id;type:int(10) unsigned;not null;default:0" json:"chartPermissionId"` // 品种权限ID
+	Sort              int       `gorm:"column:sort;type:int(10) unsigned;not null;default:0" json:"sort"`                             // 排序
+	State             int       `gorm:"column:state;type:tinyint(4) unsigned;not null;default:1" json:"state"`                        // 显示状态 0-不显示 1-显示
+	CreateTime        time.Time `gorm:"column:create_time;type:datetime;default:CURRENT_TIMESTAMP" json:"createTime"`                 // 创建时间
+	ModifyTime        time.Time `gorm:"column:modify_time;type:datetime;default:CURRENT_TIMESTAMP" json:"modifyTime"`                 // 更新时间
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *ResearchGroup) TableName() string {
+	return "research_group"
+}
+
+// ResearchGroupColumns get sql column name.获取数据库列名
+var ResearchGroupColumns = struct {
+	ResearchGroupID   string
+	ResearchGroupName string
+	ParentID          string
+	ChartPermissionID string
+	Sort              string
+	State             string
+	CreateTime        string
+	ModifyTime        string
+}{
+	ResearchGroupID:   "research_group_id",
+	ResearchGroupName: "research_group_name",
+	ParentID:          "parent_id",
+	ChartPermissionID: "chart_permission_id",
+	Sort:              "sort",
+	State:             "state",
+	CreateTime:        "create_time",
+	ModifyTime:        "modify_time",
+}

+ 12 - 0
models/tables/research_group/model.go

@@ -0,0 +1,12 @@
+package research_group
+
+import "hongze/hongze_yb/global"
+
+// GetResearchGroupList 获取研究方向分组列表
+func GetResearchGroupList() (list []*ResearchGroup, err error) {
+	err = global.DEFAULT_MYSQL.Model(ResearchGroup{}).
+		Where("state = 1").
+		Order("sort ASC").
+		Scan(&list).Error
+	return
+}

+ 1 - 0
routers/community.go

@@ -16,4 +16,5 @@ func InitCommunity(r *gin.Engine)  {
 	rGroup.GET("/question/list/total", community.QuestionListTotal)
 	rGroup.POST("/question/reply/upload_audio", community.QuestionUploadAudio)
 	rGroup.GET("/question/unread", community.QuestionUnread)
+	rGroup.GET("/question/research_group", community.ResearchGroupList)
 }

+ 91 - 34
services/community/question.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"hongze/hongze_yb/models/request"
 	"hongze/hongze_yb/models/response"
+	"hongze/hongze_yb/models/tables/research_group"
 	"hongze/hongze_yb/models/tables/user_record"
 	"hongze/hongze_yb/models/tables/yb_community_question"
 	"hongze/hongze_yb/models/tables/yb_community_question_audio"
@@ -18,7 +19,7 @@ import (
 )
 
 // GetQuestionList 获取问答列表
-func GetQuestionList(pageIndex, pageSize, onlyMine, chartPermissionId, replyStatus int, userInfo user.UserInfo) (resp []*response.CommunityQuestionItem, err error) {
+func GetQuestionList(pageIndex, pageSize, onlyMine, chartPermissionId, replyStatus, groupId int, userInfo user.UserInfo) (resp []*response.CommunityQuestionItem, err error) {
 	condition := make(map[string]interface{})
 	condition["is_deleted ="] = 0
 	// 用户身份
@@ -51,6 +52,9 @@ func GetQuestionList(pageIndex, pageSize, onlyMine, chartPermissionId, replyStat
 	if chartPermissionId > 0 {
 		condition["chart_permission_id ="] = chartPermissionId
 	}
+	if groupId > 0 {
+		condition["research_group_second_id ="] = groupId
+	}
 	// 问题列表
 	questionList, e := yb_community_question.GetPageListByCondition(condition, pageIndex, pageSize)
 	if e != nil {
@@ -99,22 +103,24 @@ func GetQuestionList(pageIndex, pageSize, onlyMine, chartPermissionId, replyStat
 			avatar = utils.HZ_DEFAULT_AVATAR
 		}
 		item := &response.CommunityQuestionItem{
-			CommunityQuestionID: v.CommunityQuestionID,
-			UserId:              v.UserID,
-			QuestionContent:     v.QuestionContent,
-			ReplierRealName:     v.ReplierRealName,
-			ReplierRank:         replierRank,
-			ReplierAvatar:       avatar,
-			ChartPermissionID:   v.CommunityQuestionID,
-			ChartPermissionName: v.ChartPermissionName,
-			IsRead:              v.IsRead,
-			ReplierIsRead:       v.ReplierIsRead,
-			ReplyStatus:         v.ReplyStatus,
-			CreateTime:          v.CreateTime.Format(utils.FormatDateTime),
-			ReplyTime:           v.ReplyTime.Format(utils.FormatDateTime),
-			AuthOk:              authOk,
-			PermissionInfo:      permissionInfo,
-			AudioList:           audios,
+			CommunityQuestionID:     v.CommunityQuestionID,
+			UserId:                  v.UserID,
+			QuestionContent:         v.QuestionContent,
+			ReplierRealName:         v.ReplierRealName,
+			ReplierRank:             replierRank,
+			ReplierAvatar:           avatar,
+			ChartPermissionID:       v.CommunityQuestionID,
+			ChartPermissionName:     v.ChartPermissionName,
+			ResearchGroupSecondId:   v.ResearchGroupSecondID,
+			ResearchGroupSecondName: v.ResearchGroupSecondName,
+			IsRead:                  v.IsRead,
+			ReplierIsRead:           v.ReplierIsRead,
+			ReplyStatus:             v.ReplyStatus,
+			CreateTime:              v.CreateTime.Format(utils.FormatDateTime),
+			ReplyTime:               v.ReplyTime.Format(utils.FormatDateTime),
+			AuthOk:                  authOk,
+			PermissionInfo:          permissionInfo,
+			AudioList:               audios,
 		}
 		if !isResearcher && item.IsRead == 0 && item.UserId == userId {
 			item.IsTop = 1
@@ -162,22 +168,24 @@ func GetQuestionDetail(questionId int, userInfo user.UserInfo) (item *response.C
 		avatar = utils.HZ_DEFAULT_AVATAR
 	}
 	item = &response.CommunityQuestionItem{
-		CommunityQuestionID: detail.CommunityQuestionID,
-		UserId:              detail.UserID,
-		QuestionContent:     detail.QuestionContent,
-		ReplierRealName:     detail.ReplierRealName,
-		ReplierRank:         replierRank,
-		ReplierAvatar:       detail.ReplierAvatar,
-		ChartPermissionID:   detail.ChartPermissionID,
-		ChartPermissionName: detail.ChartPermissionName,
-		IsRead:              detail.IsRead,
-		ReplierIsRead:       detail.ReplierIsRead,
-		ReplyStatus:         detail.ReplyStatus,
-		CreateTime:          detail.CreateTime.Format(utils.FormatDateTime),
-		ReplyTime:           detail.ReplyTime.Format(utils.FormatDateTime),
-		AuthOk:              authOk,
-		PermissionInfo:      permissionInfo,
-		AudioList:           audios,
+		CommunityQuestionID:     detail.CommunityQuestionID,
+		UserId:                  detail.UserID,
+		QuestionContent:         detail.QuestionContent,
+		ReplierRealName:         detail.ReplierRealName,
+		ReplierRank:             replierRank,
+		ReplierAvatar:           detail.ReplierAvatar,
+		ChartPermissionID:       detail.ChartPermissionID,
+		ChartPermissionName:     detail.ChartPermissionName,
+		ResearchGroupSecondId:   detail.ResearchGroupSecondID,
+		ResearchGroupSecondName: detail.ResearchGroupSecondName,
+		IsRead:                  detail.IsRead,
+		ReplierIsRead:           detail.ReplierIsRead,
+		ReplyStatus:             detail.ReplyStatus,
+		CreateTime:              detail.CreateTime.Format(utils.FormatDateTime),
+		ReplyTime:               detail.ReplyTime.Format(utils.FormatDateTime),
+		AuthOk:                  authOk,
+		PermissionInfo:          permissionInfo,
+		AudioList:               audios,
 	}
 	errMsg = "获取成功"
 	return
@@ -212,21 +220,25 @@ func CreateQuestion(userId int, mobile, realName, content string) (err error) {
 }
 
 // ReplyUserQuestion 回复问题
-func ReplyUserQuestion(replierId, questionId int, audios []*request.ReplyReqAudioList) (err error) {
+func ReplyUserQuestion(replierId, questionId int, audios []*request.ReplyReqAudioList) (errMsg string, err error) {
 	item, e := yb_community_question.GetItemById(questionId)
 	if e != nil {
+		errMsg = "问答信息有误"
 		err = errors.New("获取提问信息失败 Err:" + e.Error())
 		return
 	}
 	if item.ReplyStatus < 2 {
+		errMsg = "回复状态有误"
 		err = errors.New("回复状态有误")
 		return
 	}
 	if item.ReplyStatus == 3 {
+		errMsg = "请勿重复提交"
 		err = errors.New("问题已回复,请勿重复提交")
 		return
 	}
 	if item.ReplierUserID != replierId {
+		errMsg = "回复人不匹配"
 		err = errors.New(fmt.Sprintf("回复人与分配人不匹配, 当前回复人ID: %d, 分配的回复人ID: %d", replierId, item.ReplierUserID))
 		return
 	}
@@ -356,3 +368,48 @@ func GetMyQuestionUnread(userInfo user.UserInfo) (total int, err error) {
 	total = int(num)
 	return
 }
+
+// GetResearchGroupTree 获取研究方向分组
+func GetResearchGroupTree() (respList []*response.ResearchGroupItem, err error) {
+	respList = make([]*response.ResearchGroupItem, 0)
+	list, e := research_group.GetResearchGroupList()
+	if e != nil {
+		err = errors.New("获取研究方向分组失败, Err:" + e.Error())
+		return
+	}
+	listLen := len(list)
+	if listLen == 0 {
+		return
+	}
+	// 分类
+	firstList := make([]*response.ResearchGroupItem, 0)
+	secondList := make([]*response.ResearchGroupItem, 0)
+	for i := 0; i < listLen; i++ {
+		item := new(response.ResearchGroupItem)
+		item.ResearchGroupId = list[i].ResearchGroupID
+		item.ResearchGroupName = list[i].ResearchGroupName
+		item.ParentId = list[i].ParentID
+		item.ChartPermissionId = list[i].ChartPermissionID
+		item.Sort = list[i].Sort
+		if list[i].ParentID == 0 {
+			firstList = append(firstList, item)
+		} else {
+			secondList = append(secondList, item)
+		}
+	}
+	if len(firstList) == 0 {
+		return
+	}
+	// 匹配子分类
+	for _, p := range firstList {
+		children := make([]*response.ResearchGroupItem, 0)
+		for _, child := range secondList {
+			if p.ResearchGroupId == child.ParentId {
+				children = append(children, child)
+			}
+		}
+		p.Children = children
+	}
+	respList = firstList
+	return
+}