作者 郑周

1. 消息列表

... ... @@ -41,6 +41,7 @@ type (
}
MessageBusinessRequest struct {
Type int `json:"type"`
Page int `json:"page"`
Size int `json:"size"`
}
... ... @@ -50,10 +51,10 @@ type (
}
MessageBusinessItem struct {
Id int64 `json:"id"`
CompanyId int64 `json:"companyId"` // 公司ID
Type int `json:"type"` // 分类 (1回复 2点赞 3被采纳)
OptType int `json:"optType"` // 操作类型(1针对文章、1针对评论、2针对圆桌)
TriggerId int64 `json:"triggerId"` // 触发者ID
CompanyId int64 `json:"companyId"` // 操作人公司ID
UserId int64 `json:"userId"` // 操作人用户ID
RecipientId int64 `json:"recipientId"` // 接收者ID
ArticleId int64 `json:"articleId"` // 文章ID
CommentId int64 `json:"commentId"` // 评论ID
... ... @@ -61,15 +62,25 @@ type (
DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID
Content string `json:"content"` // 消息内容
CreatedAt int64 `json:"createdAt"` // 创建时间
UserTrigger User `json:"userTrigger"` // 触发者
User *User `json:"user"` // 操作人
Article *SimpleArticle `json:"article"` // 文章
Comment *Comment `json:"comment"` // 评论(不一定是自己,可能是被人@到)
}
User struct {
Id int64 `json:"id"`
CompanyId int64 `json:"companyId,omitempty"` // 公司ID
DepartmentId int64 `json:"departmentId,omitempty"` // 部门ID
CompanyName string `json:"companyName,omitempty"` // 公司名称
Name string `json:"name,omitempty"` // 名称
Avatar string `json:"avatar,omitempty"` // 头像
Position string `json:"position,omitempty"` // 职位
}
SimpleArticle struct {
Id int64 `json:"id"`
Title string `json:"title"` // 文章标题
CountLove int `json:"countLove"` // 点赞数量
CountComment int `json:"countComment"` // 评论数量
}
)
... ...
package message
import (
"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result"
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
... ... @@ -19,13 +20,6 @@ func MiniBusinessHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
l := message.NewMiniBusinessLogic(r.Context(), svcCtx)
resp, err := l.MiniBusiness(&req)
//result.HttpResult(r, w, resp, err)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
result.HttpResult(r, w, resp, err)
}
}
... ...
... ... @@ -21,10 +21,5 @@ func MiniSystemHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
l := message.NewMiniSystemLogic(r.Context(), svcCtx)
resp, err := l.MiniSystem(&req)
result.HttpResult(r, w, resp, err)
//if err != nil {
// httpx.ErrorCtx(r.Context(), w, err)
//} else {
// httpx.OkJsonCtx(r.Context(), w, resp)
//}
}
}
... ...
... ... @@ -25,25 +25,183 @@ func NewMiniBusinessLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Mini
}
func (l *MiniBusinessLogic) MiniBusiness(req *types.MessageBusinessRequest) (resp *types.MessageBusinessResponse, err error) {
queryOptions := domain.NewQueryOptions().WithOffsetLimit(req.Page, req.Size)
total, list, err := l.svcCtx.MessageBusinessRepository.Find(l.ctx, l.svcCtx.DefaultDBConn(), queryOptions)
if err != nil {
return nil, err
}
var msgType = req.Type
total, list, err := l.svcCtx.MessageBusinessRepository.Find(l.ctx, l.svcCtx.DefaultDBConn(), domain.NewQueryOptions().
WithOffsetLimit(req.Page, req.Size).
WithKV("type", msgType))
if err != nil {
return nil, err
}
// 输出
resp = &types.MessageBusinessResponse{}
resp.Total = total
resp.List = make([]types.MessageBusinessItem, 0)
if total == 0 {
return resp, nil
}
var companyIdMap = map[int64]*domain.Company{}
var userIdMap = map[int64]*domain.User{}
var articleIdMap = map[int64]*domain.Article{}
var commentIdMap = map[int64]*domain.Comment{}
//var discussionIdMap = map[int64]int{}
//var discussionOpinionIdMap = map[int64]int{}
for _, item := range list {
if item.CompanyId != 0 {
companyIdMap[item.CompanyId] = nil
}
if item.UserId != 0 {
userIdMap[item.UserId] = nil
}
if item.ArticleId != 0 {
articleIdMap[item.ArticleId] = nil
}
if item.CommentId != 0 {
commentIdMap[item.CommentId] = nil
}
//if item.DiscussionId != 0 {
// discussionIdMap[item.DiscussionId] = 0
//}
//if item.DiscussionOpinionId != 0 {
// discussionOpinionIdMap[item.DiscussionOpinionId] = 0
//}
}
var companyIds = make([]int64, 0) // 公司ID
var userIds = make([]int64, 0) // 用户ID
var articleIds = make([]int64, 0) // 文章ID
var commentIds = make([]int64, 0) // 评论ID
//var discussionIds = make([]int64, 0) // 讨论ID 暂时搁置
//var discussionOpinionIds = make([]int64, 0) // 观点ID
for k, _ := range companyIdMap {
companyIds = append(companyIds, k)
}
for k, _ := range userIdMap {
userIds = append(userIds, k)
}
for k, _ := range articleIdMap {
articleIds = append(articleIds, k)
}
for k, _ := range commentIdMap {
commentIds = append(commentIds, k)
}
//for k, _ := range discussionIdMap {
// discussionIds = append(discussionIds, k)
//}
//for k, _ := range discussionOpinionIdMap {
// discussionOpinionIds = append(discussionOpinionIds, k)
//}
// 获取公司
if len(companyIds) > 0 {
_, companyList, err := l.svcCtx.CompanyRepository.Find(l.ctx, l.svcCtx.DefaultDBConn(),
domain.NewQueryOptions().
WithFindOnly().
WithKV("ids", userIds).
WithKV("limit", len(userIds)))
if err != nil {
return nil, err
}
for i := range companyList {
companyIdMap[companyList[i].Id] = companyList[i]
}
}
// 获取用户
if len(userIds) > 0 {
_, userList, err := l.svcCtx.UserRepository.Find(l.ctx, l.svcCtx.DefaultDBConn(),
domain.NewQueryOptions().
WithFindOnly().
WithKV("ids", userIds).
WithKV("limit", len(userIds)))
if err != nil {
return nil, err
}
for i := range userList {
userIdMap[userList[i].Id] = userList[i]
}
}
// 获取评论
if len(commentIds) > 0 {
_, commentList, err := l.svcCtx.CommentRepository.Find(l.ctx, l.svcCtx.DefaultDBConn(),
domain.NewQueryOptions().
WithFindOnly().
WithKV("ids", commentIds).
WithKV("limit", len(commentIds)))
if err != nil {
return nil, err
}
for i := range commentList {
commentIdMap[commentList[i].Id] = commentList[i]
}
}
// 只有这个才需要
if msgType == int(domain.MsgTypeReply) || msgType == int(domain.MsgTypeLike) {
// 获取文章数据
if len(articleIds) > 0 {
_, articleList, err := l.svcCtx.ArticleRepository.Find(l.ctx, l.svcCtx.DefaultDBConn(),
domain.NewQueryOptions().
WithFindOnly().
WithKV("ids", articleIds).
WithKV("limit", len(articleIds)))
if err != nil {
return nil, err
}
for i := range articleList {
articleIdMap[articleList[i].Id] = articleList[i]
}
}
}
for _, item := range list {
to := types.MessageBusinessItem{
Id: item.Id,
Type: item.Type,
//Title: item.Title,
Content: item.Content,
CreatedAt: item.CreatedAt,
Id: item.Id,
Type: item.Type,
OptType: item.OptType,
CompanyId: item.CompanyId,
UserId: item.UserId,
RecipientId: item.RecipientId,
ArticleId: item.ArticleId,
CommentId: item.CommentId,
DiscussionId: item.DiscussionId,
DiscussionOpinionId: item.DiscussionOpinionId,
Content: item.Content,
CreatedAt: item.CreatedAt,
}
if v, ok := userIdMap[item.UserId]; ok {
to.User = &types.User{
Id: v.Id,
CompanyId: v.CompanyId,
Position: v.Position,
Name: v.Name,
}
if v, ok := companyIdMap[item.CompanyId]; ok {
to.User.CompanyName = v.Name
}
}
if v, ok := articleIdMap[item.ArticleId]; ok {
to.Article = &types.SimpleArticle{
Id: v.Id,
Title: v.Title,
CountLove: v.CountLove,
CountComment: v.CountComment,
}
}
if _, ok := commentIdMap[item.CommentId]; ok {
to.Comment = &types.Comment{
//Id: v.Id,
//Title: v.Title,
//CountLove: v.CountLove,
//CountComment: v.CountComment,
}
}
resp.List = append(resp.List, to)
}
return resp, nil
... ...
... ... @@ -30,6 +30,7 @@ type MessageSystemItem struct {
}
type MessageBusinessRequest struct {
Type int `json:"type"`
Page int `json:"page"`
Size int `json:"size"`
}
... ... @@ -40,28 +41,37 @@ type MessageBusinessResponse struct {
}
type MessageBusinessItem struct {
Id int64 `json:"id"`
CompanyId int64 `json:"companyId"` // 公司ID
Type int `json:"type"` // 分类 (1回复 2点赞 3被采纳)
OptType int `json:"optType"` // 操作类型(1针对文章、1针对评论、2针对圆桌)
TriggerId int64 `json:"triggerId"` // 触发者ID
RecipientId int64 `json:"recipientId"` // 接收者ID
ArticleId int64 `json:"articleId"` // 文章ID
CommentId int64 `json:"commentId"` // 评论ID
DiscussionId int64 `json:"discussionId"` // 圆桌ID
DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID
Content string `json:"content"` // 消息内容
CreatedAt int64 `json:"createdAt"` // 创建时间
UserTrigger User `json:"userTrigger"` // 触发者
Id int64 `json:"id"`
Type int `json:"type"` // 分类 (1回复 2点赞 3被采纳)
OptType int `json:"optType"` // 操作类型(1针对文章、1针对评论、2针对圆桌)
CompanyId int64 `json:"companyId"` // 操作人公司ID
UserId int64 `json:"userId"` // 操作人用户ID
RecipientId int64 `json:"recipientId"` // 接收者ID
ArticleId int64 `json:"articleId"` // 文章ID
CommentId int64 `json:"commentId"` // 评论ID
DiscussionId int64 `json:"discussionId"` // 圆桌ID
DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID
Content string `json:"content"` // 消息内容
CreatedAt int64 `json:"createdAt"` // 创建时间
User *User `json:"user"` // 操作人
Article *SimpleArticle `json:"article"` // 文章
Comment *Comment `json:"comment"` // 评论(不一定是自己,可能是被人@到)
}
type User struct {
Id int64 `json:"id"`
CompanyId int64 `json:"companyId,omitempty"` // 公司ID
CompanyName string `json:"companyName,omitempty"` // 公司名称
Name string `json:"name,omitempty"` // 名称
Avatar string `json:"avatar,omitempty"` // 头像
Position string `json:"position,omitempty"` // 职位
}
type SimpleArticle struct {
Id int64 `json:"id"`
CompanyId int64 `json:"companyId,omitempty"` // 公司ID
DepartmentId int64 `json:"departmentId,omitempty"` // 部门ID
Name string `json:"name,omitempty"` // 名称
Avatar string `json:"avatar,omitempty"` // 头像
Position string `json:"position,omitempty"` // 职位
Title string `json:"title"` // 文章标题
CountLove int `json:"countLove"` // 点赞数量
CountComment int `json:"countComment"` // 评论数量
}
type TagCreateRequest struct {
... ...
... ... @@ -11,16 +11,16 @@ import (
// MessageBusiness 消息中心业务
type MessageBusiness struct {
Id int64 // 唯一标识
CompanyId int64 `json:"companyId"` // 公司ID
Type int `json:"type"` // 分类 (1回复 2点赞 3被采纳)
OptType int `json:"optType"` // 操作类型(1针对文章、1针对评论、2针对圆桌)
TriggerId int64 `json:"triggerId"` // 触发者ID
RecipientId int64 `json:"recipientId"` // 接收者ID
ArticleId int64 `json:"articleId"` // 文章ID
CommentId int64 `json:"commentId"` // 评论ID
DiscussionId int64 `json:"discussionId"` // 圆桌ID
DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID
Content string `json:"content"` // 消息内容
Type int `json:"type"` // 分类 (1回复 2点赞 3被采纳)
OptType int `json:"optType"` // 操作类型(1针对文章、1针对评论、2针对圆桌)
CompanyId int64 `json:"companyId"` // 操作人公司ID
UserId int64 `json:"userId"` // 操作人用户ID
RecipientId int64 `json:"recipientId"` // 接收人用户ID
ArticleId int64 `json:"articleId"` // 文章ID
CommentId int64 `json:"commentId,omitempty"` // 评论ID
DiscussionId int64 `json:"discussionId,omitempty"` // 圆桌ID
DiscussionOpinionId int64 `json:"discussionOpinionId,omitempty"` // 观点ID
Content string `json:"content,omitempty"` // 消息内容
CreatedAt int64 `json:",omitempty"`
UpdatedAt int64 `json:",omitempty"`
DeletedAt int64 `json:",omitempty"`
... ...
... ... @@ -120,6 +120,9 @@ func (repository *ArticleRepository) Find(ctx context.Context, conn transaction.
)
queryFunc := func() (interface{}, error) {
tx = tx.Model(&ms).Order("id desc")
if v, ok := queryOptions["ids"]; ok {
tx.Where("id in (?)", v)
}
if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil {
return dms, tx.Error
}
... ...
... ... @@ -139,6 +139,9 @@ func (repository *CompanyRepository) Find(ctx context.Context, conn transaction.
)
queryFunc := func() (interface{}, error) {
tx = tx.Model(&ms).Order("id desc")
if v, ok := queryOptions["ids"]; ok {
tx.Where("id in (?)", v)
}
if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil {
return dms, tx.Error
}
... ...
... ... @@ -142,6 +142,9 @@ func (repository *UserRepository) Find(ctx context.Context, conn transaction.Con
)
queryFunc := func() (interface{}, error) {
tx = tx.Model(&ms).Order("id desc")
if v, ok := queryOptions["ids"]; ok {
tx.Where("id in (?)", v)
}
if v, ok := queryOptions["phone"]; ok {
tx.Where("phone = ?", v)
}
... ...
... ... @@ -7,11 +7,11 @@ import (
type MessageBusiness struct {
Id int64 // 唯一标识
CompanyId int64 `json:"companyId"` // 公司ID
Type int `json:"type"` // 分类 (1回复 2点赞 3被采纳)
OptType int `json:"optType"` // 操作类型(1针对文章、1针对评论、2针对圆桌)
TriggerId int64 `json:"triggerId"` // 触发者ID
RecipientId int64 `json:"recipientId"` // 接收者ID
CompanyId int64 `json:"companyId"` // 操作人公司ID
UserId int64 `json:"userId"` // 操作人用户ID
RecipientId int64 `json:"recipientId"` // 接收人用户ID
ArticleId int64 `json:"articleId"` // 文章ID
CommentId int64 `json:"commentId"` // 评论ID
DiscussionId int64 `json:"discussionId"` // 圆桌ID
... ...