Browse Source

Merge branch 'yb/5.0' of hongze/hongze_yb into master

hsun 2 years ago
parent
commit
d53fd60caa

+ 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)
+}

+ 31 - 0
middleware/check_base_auth.go

@@ -0,0 +1,31 @@
+package middleware
+
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb/controller/response"
+	"hongze/hongze_yb/services/company"
+	"hongze/hongze_yb/services/user"
+)
+
+// CheckBaseAuth 基本权限校验
+func CheckBaseAuth() gin.HandlerFunc {
+
+	return func(c *gin.Context) {
+
+		userInfo := user.GetInfoByClaims(c)
+
+		ok, checkInfo, _, err := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
+		if err != nil {
+			response.FailMsg("用户权限验证失败", "CheckBaseAuth-用户权限验证失败" + err.Error(), c)
+			c.Abort()
+			return
+		}
+		if !ok {
+			response.AuthError(checkInfo, "暂无权限", c)
+			c.Abort()
+			return
+		}
+
+		c.Next()
+	}
+}

+ 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
+}

+ 2 - 1
routers/community.go

@@ -7,7 +7,7 @@ import (
 )
 
 func InitCommunity(r *gin.Engine)  {
-	rGroup := r.Group("api/community").Use(middleware.Token())
+	rGroup := r.Group("api/community").Use(middleware.Token(), middleware.CheckBaseAuth())
 	rGroup.GET("/question/list", community.QuestionList)
 	rGroup.GET("/question/detail", community.QuestionDetail)
 	rGroup.POST("/question/ask", community.QuestionAsk)
@@ -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)
 }

+ 102 - 46
services/community/question.go

@@ -5,10 +5,10 @@ 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"
-	"hongze/hongze_yb/services/company"
 	"hongze/hongze_yb/services/user"
 	"hongze/hongze_yb/services/wechat"
 	"hongze/hongze_yb/utils"
@@ -18,7 +18,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 +51,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 {
@@ -72,11 +75,11 @@ func GetQuestionList(pageIndex, pageSize, onlyMine, chartPermissionId, replyStat
 		return
 	}
 	// 用户权限
-	authOk, permissionInfo, _, e := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
-	if e != nil {
-		err = errors.New("获取用户权限失败 Err:" + e.Error())
-		return
-	}
+	//authOk, permissionInfo, _, e := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
+	//if e != nil {
+	//	err = errors.New("获取用户权限失败 Err:" + e.Error())
+	//	return
+	//}
 
 	userId := int(userInfo.UserID)
 	resp = make([]*response.CommunityQuestionItem, 0)
@@ -99,22 +102,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
@@ -152,32 +157,34 @@ func GetQuestionDetail(questionId int, userInfo user.UserInfo) (item *response.C
 	}
 	replierRank := fmt.Sprintf("弘则%s研究员", detail.ResearchGroupFirstName)
 	// 用户权限
-	authOk, permissionInfo, _, e := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
-	if e != nil {
-		err = errors.New("获取用户权限失败 Err:" + e.Error())
-		return
-	}
+	//authOk, permissionInfo, _, e := company.CheckBaseFiccPermission(userInfo.CompanyID, int(userInfo.UserID))
+	//if e != nil {
+	//	err = errors.New("获取用户权限失败 Err:" + e.Error())
+	//	return
+	//}
 	avatar := detail.ReplierAvatar
 	if avatar == "" {
 		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,22 +219,26 @@ 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 {
-		err = errors.New(fmt.Sprintf("回复人与分配人不匹配, 回复人ID: %d, 分配人ID: %d", item.ReplierUserID, replierId))
+		errMsg = "回复人不匹配"
+		err = errors.New(fmt.Sprintf("回复人与分配人不匹配, 当前回复人ID: %d, 分配的回复人ID: %d", replierId, item.ReplierUserID))
 		return
 	}
 	// 问题
@@ -356,3 +367,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
+}