소스 검색

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

xyxie 2 년 전
부모
커밋
dd9d0e8f6b

+ 1 - 1
controller/community/question.go

@@ -26,7 +26,7 @@ import (
 // @Param page_size				query int false "每页数量"
 // @Param only_mine				query int false "只看我的"
 // @Param variety_tag_id		query int false "标签ID"
-// @Param reply_status			query int false "回复状态 0-全部 2-待回答 3-已回答"
+// @Param reply_status			query int false "回复状态 0-全部 2-未回答 3-已回答,4-待回答(研究员)"
 // @Success 200 {object} []respond.CommunityQuestionItem
 // @failure 400 {string} string "获取失败"
 // @Router /question/list [get]

+ 2 - 2
logic/user/user.go

@@ -8,7 +8,7 @@ import (
 	"hongze/hongze_yb/models/tables/company"
 	"hongze/hongze_yb/models/tables/company_product"
 	"hongze/hongze_yb/models/tables/rddp/msg_code"
-	"hongze/hongze_yb/models/tables/research_group_relation"
+	"hongze/hongze_yb/models/tables/research_variety_tag_relation"
 	"hongze/hongze_yb/models/tables/wx_user"
 	"hongze/hongze_yb/models/tables/yb_apply_record"
 	"hongze/hongze_yb/models/tables/yb_index_tab"
@@ -226,7 +226,7 @@ func GetUserInfo(userInfo user.UserInfo) (userDetail Detail, err error, errMsg s
 	// 查询是否为研究员
 	isResearcher := 0
 	if isInner == 1 {
-		researchGroupList, e := research_group_relation.GetResearchGroupRelationByAdminId(int(adminInfo.AdminID))
+		researchGroupList, e := research_variety_tag_relation.GetResearchVarietyTagRelationByAdminId(int(adminInfo.AdminID))
 		if e != nil {
 			errMsg = "查询是否为研究员失败"
 			err = errors.New("用户身份信息有误")

+ 5 - 3
models/response/community.go

@@ -12,6 +12,7 @@ type CommunityQuestionItem struct {
 	ResearchGroupSecondId   int    `json:"research_group_second_id"`
 	ResearchGroupSecondName string `json:"research_group_second_name"`
 	IsRead                  int    `json:"is_read"`
+	ReplierUserID           int    `json:"replier_user_id"  description:"回复人的user_id"`
 	ReplierIsRead           int    `json:"replier_is_read"`
 	CreateTime              string `json:"create_time"`
 	ReplyTime               string `json:"reply_time"`
@@ -32,9 +33,10 @@ type CommunityQuestionAudioItem struct {
 }
 
 type CommunityQuestionListTotal struct {
-	Wait    int `json:"wait"`
-	Replied int `json:"replied"`
-	Total   int `json:"total"`
+	Wait       int `json:"wait"`       //未回答的数量
+	Replied    int `json:"replied"`    //已回答的数量
+	Total      int `json:"total"`      //全部的数量
+	Distribute int `json:"distribute"` //待回答的数量
 }
 
 type CommunityQuestionAudioUpload struct {

+ 24 - 0
models/tables/research_variety_tag_relation/entity.go

@@ -0,0 +1,24 @@
+package research_variety_tag_relation
+
+// ResearchVarietyTagRelation 研究员研究方向分组关系表
+type ResearchVarietyTagRelation struct {
+	Id           int `gorm:"primaryKey;column:id;type:int(10) unsigned;not null" json:"-"`
+	VarietyTagID int `gorm:"column:variety_tag_id;type:int(10) unsigned;not null;default:0" json:"varietyTagID"` //标签库ID
+	AdminID      int `gorm:"column:admin_id;type:int(10) unsigned;not null;default:0" json:"adminId"` // 研究员ID
+}
+
+// TableName get sql table name.获取数据库表名
+func (m *ResearchVarietyTagRelation) TableName() string {
+	return "research_variety_tag_relation"
+}
+
+// ResearchVarietyTagRelationColumns get sql column name.获取数据库列名
+var ResearchVarietyTagRelationColumns = struct {
+	ID           string
+	VarietyTagID string
+	AdminID      string
+}{
+	ID:           "id",
+	VarietyTagID: "variety_tag_id",
+	AdminID:      "admin_id",
+}

+ 9 - 0
models/tables/research_variety_tag_relation/model.go

@@ -0,0 +1,9 @@
+package research_variety_tag_relation
+
+import "hongze/hongze_yb/global"
+
+// GetResearchVarietyTagRelationByAdminId 获取研究员研究方向分组
+func GetResearchVarietyTagRelationByAdminId(adminId int) (items []*ResearchVarietyTagRelation, err error) {
+	err = global.DEFAULT_MYSQL.Model(ResearchVarietyTagRelation{}).Where("admin_id = ?", adminId).Scan(&items).Error
+	return
+}

+ 1 - 0
models/tables/yb_community_audio_listen_log/entity.go

@@ -17,3 +17,4 @@ func (l *YbCommunityAudioListenLog) TableName() string {
 	return "yb_community_audio_listen_log"
 }
 
+

+ 14 - 29
models/tables/yb_community_question/model.go

@@ -1,10 +1,8 @@
 package yb_community_question
 
 import (
-	"errors"
 	"hongze/hongze_yb/global"
 	"hongze/hongze_yb/models/tables/yb_community_question_audio"
-	"hongze/hongze_yb/utils"
 	"time"
 )
 
@@ -19,14 +17,9 @@ func (item *YbCommunityQuestion) Update(updateCols []string) (err error) {
 }
 
 // GetPageListByCondition 获取问答列表-分页
-func GetPageListByCondition(where map[string]interface{}, pageIndex, pageSize int) (list []*YbCommunityQuestion, err error) {
-	cond, vals, e := utils.WhereBuild(where)
-	if e != nil {
-		err = errors.New("系统异常,生成查询语句失败")
-		return
-	}
+func GetPageListByCondition(condition string, pars []interface{},pageIndex, pageSize int) (list []*YbCommunityQuestion, err error) {
 	offset := (pageIndex - 1) * pageSize
-	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).Where(cond, vals...).Offset(offset).Limit(pageSize).Order("create_time DESC").Scan(&list).Error
+	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).Where(condition, pars...).Offset(offset).Limit(pageSize).Order("create_time DESC").Scan(&list).Error
 	return
 }
 
@@ -62,40 +55,32 @@ func UpdateQuestionAndAudioList(item *YbCommunityQuestion, updateCols []string,
 }
 
 type QuestionListCount struct {
-	ReplyStatus int `json:"reply_status"`
-	Total       int `json:"total"`
+	ReplierUserId uint64 `json:"replier_user_id"`
+	UserId        uint64 `json:"user_id"`
+	ReplyStatus   int `json:"reply_status"`
+	Total         int `json:"total"`
 }
 
 // GetQuestionListCount 获取问答数量统计
-func GetQuestionListCount(where map[string]interface{}) (list []*QuestionListCount, err error) {
-	cond, vals, e := utils.WhereBuild(where)
-	if e != nil {
-		err = errors.New("系统异常,GetQuestionListCount 生成查询语句失败")
-		return
-	}
+func GetQuestionListCount(condition string, pars []interface{}) (list []*QuestionListCount, err error) {
 	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).
-		Select("reply_status, COUNT(1) total").
-		Where(cond, vals...).
-		Group("reply_status").
+		Select("reply_status, replier_user_id, user_id, COUNT(1) total").
+		Where(condition, pars...).
+		Group("reply_status, replier_user_id, user_id").
 		Scan(&list).Error
 	return
 }
 
 // GetUnreadNum 获取未读数
-func GetUnreadNum(where map[string]interface{}) (num int64, err error) {
-	cond, vals, e := utils.WhereBuild(where)
-	if e != nil {
-		err = errors.New("系统异常,GetUnreadNum 生成查询语句失败")
-		return
-	}
-	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).Where(cond, vals...).Count(&num).Error
+func GetUnreadNum(condition string, pars []interface{}) (num int64, err error) {
+	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).Where(condition, pars...).Count(&num).Error
 	return
 }
 
 // UpdateReplierRead 更新回复人已读
 func UpdateReplierRead(replierUserId int, questionIds []int) (err error) {
 	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).
-		Where("replier_user_id = ? AND community_question_id IN (?)", replierUserId, questionIds).
+		Where("replier_user_id = ? AND community_question_id IN (?) AND replier_is_read=0", replierUserId, questionIds).
 		Updates(YbCommunityQuestion{
 			ReplierIsRead: 1,
 			ModifyTime: time.Now().Local(),
@@ -106,7 +91,7 @@ func UpdateReplierRead(replierUserId int, questionIds []int) (err error) {
 // UpdateUserRead 更新用户已读
 func UpdateUserRead(userId int, questionIds []int) (err error) {
 	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestion{}).
-		Where("user_id = ? AND community_question_id IN (?)", userId, questionIds).
+		Where("user_id = ? AND community_question_id IN (?) AND is_read=0", userId, questionIds).
 		Updates(YbCommunityQuestion{
 			IsRead: 1,
 			ModifyTime: time.Now().Local(),

+ 2 - 2
routers/price_driven.go

@@ -2,14 +2,14 @@ package routers
 
 import (
 	"github.com/gin-gonic/gin"
-	"hongze/hongze_yb/controller/company"
+	"hongze/hongze_yb/controller"
 	"hongze/hongze_yb/controller/price_driven"
 	"hongze/hongze_yb/middleware"
 )
 
 func InitPriceDriven(r *gin.Engine) {
 	rGroup := r.Group("api/price_driven").Use(middleware.Token(), middleware.CheckBaseAuth())
-	rGroup.GET("/tab", company.GetHomeFiccPermissions)
+	rGroup.GET("/tab", controller.GetVarietyTagTree)
 	rGroup.GET("/detail", price_driven.PriceDrivenDetail)
 	rGroup.POST("/visit_log", price_driven.PriceDrivenVisitLog)
 }

+ 82 - 48
services/community/question.go

@@ -20,8 +20,8 @@ import (
 
 // GetQuestionList 获取问答列表
 func GetQuestionList(pageIndex, pageSize, onlyMine, varietyTagId, replyStatus, groupId int, userInfo user.UserInfo) (resp []*response.CommunityQuestionItem, err error) {
-	condition := make(map[string]interface{})
-	condition["is_deleted ="] = 0
+	condition := " is_deleted = 0"
+	var pars []interface{}
 	// 用户身份
 	isResearcher, _, e := user.GetResearcherByUserInfo(userInfo)
 	if e != nil {
@@ -29,34 +29,45 @@ func GetQuestionList(pageIndex, pageSize, onlyMine, varietyTagId, replyStatus, g
 		return
 	}
 	if onlyMine == 1 {
-		if isResearcher {
-			condition["replier_user_id ="] = userInfo.UserID
+		if isResearcher {  //如果是研究员
+			if replyStatus == 4  {  //分配给研究员未回答的问题
+				condition += " and replier_user_id=? and reply_status = 2"
+				pars = append(pars, userInfo.UserID)
+			} else if replyStatus == 2 { //研究员提问的问题未分配或者未回答的问题
+				condition += " and user_id=? and reply_status >0 and reply_status <3"
+				pars = append(pars, userInfo.UserID)
+			} else if replyStatus == 3 { //分配给研究员的已回答和研究员提问的被回答的问题
+				condition += " and (replier_user_id=? or user_id=?) and reply_status =3"
+				pars = append(pars, userInfo.UserID, userInfo.UserID)
+			}else if replyStatus == 0 {  //分配给研究员或者研究员提问的所以问题
+				condition += " and (replier_user_id=? or user_id=?)"
+				pars = append(pars, userInfo.UserID, userInfo.UserID)
+			}
 		} else {
-			condition["user_id ="] = userInfo.UserID
+			condition += " and user_id=?"
+			pars = append(pars, userInfo.UserID)
+			if replyStatus == 2 {  // 普通用户未回答为待分配和未回答
+				condition += " and reply_status >0 and reply_status <3"
+			} else if replyStatus == 3{
+				condition += " and reply_status = 3"
+			}
 		}
-	}
-	if replyStatus > 0 {
-		if replyStatus == 2 && !isResearcher {
-			// 普通用户待回答为待分配和待回答
-			condition["reply_status >"] = 0
-			condition["reply_status <"] = 3
-		} else {
-			condition["reply_status ="] = replyStatus
-		}
-	} else {
-		if isResearcher {
-			// 不展示未分配的
-			condition["reply_status >"] = 1
+	}else{
+		if replyStatus == 3 {
+			condition += " and reply_status = 3"
 		}
 	}
+
 	if varietyTagId > 0 {
-		condition["variety_tag_id ="] = varietyTagId
+		condition += " and variety_tag_id =?"
+		pars = append(pars, varietyTagId)
 	}
 	if groupId > 0 {
-		condition["research_group_second_id ="] = groupId
+		condition += " and research_group_second_id =?"
+		pars = append(pars, groupId)
 	}
 	// 问题列表
-	questionList, e := yb_community_question.GetPageListByCondition(condition, pageIndex, pageSize)
+	questionList, e := yb_community_question.GetPageListByCondition(condition, pars, pageIndex, pageSize)
 	if e != nil {
 		err = errors.New("获取问题列表失败 Err:" + e.Error())
 		return
@@ -115,15 +126,16 @@ func GetQuestionList(pageIndex, pageSize, onlyMine, varietyTagId, replyStatus, g
 			ResearchGroupSecondId:   v.ResearchGroupSecondID,
 			ResearchGroupSecondName: v.ResearchGroupSecondName,
 			IsRead:                  v.IsRead,
+			ReplierUserID:           v.ReplierUserID,
 			ReplierIsRead:           v.ReplierIsRead,
 			ReplyStatus:             v.ReplyStatus,
 			CreateTime:              v.CreateTime.Format(utils.FormatDateTime),
 			ReplyTime:               v.ReplyTime.Format(utils.FormatDateTime),
 			//AuthOk:                  authOk,
 			//PermissionInfo:          permissionInfo,
-			AudioList:               audios,
+			AudioList: audios,
 		}
-		if !isResearcher && item.IsRead == 0 && item.UserId == userId {
+		if item.IsRead == 0 && item.UserId == userId {
 			item.IsTop = 1
 		}
 		resp = append(resp, item)
@@ -294,8 +306,16 @@ func ReadQuestionReply(questionIds string, userInfo user.UserInfo) (err error) {
 		return
 	}
 	if isResearcher {
+		// 设置分配给研究员的问答已读
 		e = yb_community_question.UpdateReplierRead(int(userInfo.UserID), questionIdArr)
+		if e != nil {
+			err = errors.New("更新问答已读失败 Err:" + e.Error())
+			return
+		}
+		// 设置研究员提问的问答已读
+		e = yb_community_question.UpdateUserRead(int(userInfo.UserID), questionIdArr)
 	} else {
+		// 设置普通用户的问答已读
 		e = yb_community_question.UpdateUserRead(int(userInfo.UserID), questionIdArr)
 	}
 	if e != nil {
@@ -311,38 +331,52 @@ func GetQuestionListTotal(userInfo user.UserInfo) (resp *response.CommunityQuest
 		err = errors.New("获取用户身份失败 Err:" + e.Error())
 		return
 	}
-	condition := make(map[string]interface{}, 0)
-	condition["is_deleted ="] = 0
+	condition := " is_deleted = 0"
+	var pars []interface{}
 	if isResearcher {
-		condition["replier_user_id ="] = userInfo.UserID
+		condition += " and (replier_user_id=? or user_id=?)"
+		pars = append(pars, userInfo.UserID, userInfo.UserID)
 	} else {
-		condition["user_id ="] = userInfo.UserID
+		condition += " and user_id=?"
+		pars = append(pars, userInfo.UserID)
 	}
-	countList, e := yb_community_question.GetQuestionListCount(condition)
+	countList, e := yb_community_question.GetQuestionListCount(condition, pars)
 	if e != nil {
 		err = errors.New("获取回复人问题统计失败 Err:" + e.Error())
 		return
 	}
 	resp = new(response.CommunityQuestionListTotal)
-	var distribute, wait, replied int
+	var distribute, wait, replied, total int
 	for _, v := range countList {
-		if v.ReplyStatus == 1 {
-			distribute = v.Total
-		}
-		if v.ReplyStatus == 2 {
-			wait = v.Total
-		}
-		if v.ReplyStatus == 3 {
-			replied = v.Total
+		total += v.Total
+		if isResearcher {
+			if v.UserId == userInfo.UserID {
+				if v.ReplyStatus == 1 || v.ReplyStatus == 2 {  //研究员提问的待分配的问题
+					wait += v.Total
+				}
+			}
+			if v.ReplierUserId == userInfo.UserID  && v.ReplyStatus == 2{ //分配给研究员的未回答的问题
+				distribute += v.Total
+			}
+			if v.ReplyStatus == 3 {
+				replied += v.Total
+			}
+		}else{
+			if v.ReplyStatus == 1 || v.ReplyStatus == 2 {  //未分配和未回答的数量
+				wait += v.Total
+			}else if v.ReplyStatus == 3 {  //已回答的数量
+				replied += v.Total
+			}
 		}
+
 	}
 	if isResearcher {
-		resp.Wait = wait
-	} else {
-		resp.Wait = distribute + wait
+		resp.Distribute = distribute
 	}
+	resp.Wait = wait
 	resp.Replied = replied
-	resp.Total = resp.Wait + resp.Replied
+	resp.Total = total
+
 	return
 }
 
@@ -353,16 +387,16 @@ func GetMyQuestionUnread(userInfo user.UserInfo) (total int, err error) {
 		err = errors.New("获取用户身份失败 Err:" + e.Error())
 		return
 	}
-	condition := make(map[string]interface{}, 0)
-	condition["is_deleted ="] = 0
+	condition := " is_deleted = 0"
+	var pars []interface{}
 	if isResearcher {
-		condition["replier_user_id ="] = userInfo.UserID
-		condition["replier_is_read ="] = 0
+		condition += " and ((replier_user_id=? and replier_is_read=0) or (user_id=? and is_read=0))"
+		pars = append(pars, userInfo.UserID, userInfo.UserID)
 	} else {
-		condition["user_id ="] = userInfo.UserID
-		condition["is_read ="] = 0
+		condition += " and user_id=? and is_read=0"
+		pars = append(pars, userInfo.UserID)
 	}
-	num, e := yb_community_question.GetUnreadNum(condition)
+	num, e := yb_community_question.GetUnreadNum(condition, pars)
 	if e != nil {
 		err = errors.New("获取我的未读数失败 Err:" + e.Error())
 		return

+ 2 - 2
services/user/user.go

@@ -7,7 +7,7 @@ import (
 	"github.com/silenceper/wechat/v2/miniprogram/auth"
 	admin2 "hongze/hongze_yb/models/tables/admin"
 	"hongze/hongze_yb/models/tables/rddp/session"
-	"hongze/hongze_yb/models/tables/research_group_relation"
+	"hongze/hongze_yb/models/tables/research_variety_tag_relation"
 	"hongze/hongze_yb/models/tables/user_record"
 	"hongze/hongze_yb/models/tables/wx_user"
 	"hongze/hongze_yb/models/tables/wx_user_log"
@@ -467,7 +467,7 @@ func GetResearcherByUserInfo(userInfo UserInfo) (ok bool, adminInfo *admin2.Admi
 	if adminInfo.Enabled != 1 {
 		return
 	}
-	researchGroupList, e := research_group_relation.GetResearchGroupRelationByAdminId(int(adminInfo.AdminID))
+	researchGroupList, e := research_variety_tag_relation.GetResearchVarietyTagRelationByAdminId(int(adminInfo.AdminID))
 	if e != nil {
 		err = e
 		return