dengbiao vor 1 Monat
Ursprung
Commit
958e440b7e
6 geänderte Dateien mit 318 neuen und 0 gelöschten Zeilen
  1. +27
    -0
      app/db/im/model/group.go
  2. +33
    -0
      app/hdl/im/hdl_group.go
  3. +58
    -0
      app/hdl/im/hdl_send_message.go
  4. +57
    -0
      app/md/im/md_group.go
  5. +3
    -0
      app/router/router.go
  6. +140
    -0
      app/svc/im/svc_group.go

+ 27
- 0
app/db/im/model/group.go Datei anzeigen

@@ -0,0 +1,27 @@
package model

// Group 群组
type Group struct {
Id int64 // 群组id
Name string // 组名
AvatarUrl string // 头像
Introduction string // 群简介
UserNum int32 // 群组人数
IsAllMemberBanned int32 // 是否全员禁言(1:是 2:否)
IsAllAddFriend int32 // 是否允许加好友(1:是 2:否)
Extra string // 附加字段
CreateTime string // 创建时间
UpdateTime string // 更新时间
}

type GroupUser struct {
Id int64 // 自增主键
GroupId int64 // 群组id
UserId int64 // 用户id
MemberType int // 群组类型
Remarks string // 备注
Extra string // 附加属性
Status int // 状态
CreateTime string // 创建时间
UpdateTime string // 更新时间
}

+ 33
- 0
app/hdl/im/hdl_group.go Datei anzeigen

@@ -0,0 +1,33 @@
package im

import (
"applet/app/e"
md "applet/app/md/im"
svc "applet/app/svc/im"
"github.com/gin-gonic/gin"
)

// GroupList
// @Summary Im-群组(列表)
// @Tags 群组
// @Description 群组(列表)
// @Accept json
// @Produce json
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @param req body md.GroupListReq true "相关参数"
// @Success 200 {object} md.GroupListResp ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/im/groupList [POST]
func GroupList(c *gin.Context) {
var req *md.GroupListReq
if err1 := c.ShouldBindJSON(&req); err1 != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error())
return
}
err, resp := svc.GroupList(*req)
if err != nil {
e.OutErr(c, e.ERR, err.Error())
return
}
e.OutSuc(c, resp, nil)
}

+ 58
- 0
app/hdl/im/hdl_send_message.go Datei anzeigen

@@ -0,0 +1,58 @@
package im

import (
"applet/app/e"
md "applet/app/md/im"
svc "applet/app/svc/im"
"github.com/gin-gonic/gin"
)

// BatchSendGroupMessage
// @Summary Im-发送群组消息
// @Tags 发送群组消息
// @Description 发送群组消息
// @Accept json
// @Produce json
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @param req body md.GroupListReq true "相关参数"
// @Success 200 {object} md.GroupListResp ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/im/batchSendGroupMessage [POST]
func BatchSendGroupMessage(c *gin.Context) {
var req *md.GroupListReq
if err1 := c.ShouldBindJSON(&req); err1 != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error())
return
}
err, resp := svc.GroupList(*req)
if err != nil {
e.OutErr(c, e.ERR, err.Error())
return
}
e.OutSuc(c, resp, nil)
}

// BatchSendUserMessage
// @Summary Im-发送用户消息
// @Tags 发送用户消息
// @Description 发送用户消息
// @Accept json
// @Produce json
// @param Authorization header string true "验证参数Bearer和token空格拼接"
// @param req body md.GroupListReq true "相关参数"
// @Success 200 {object} md.GroupListResp ""
// @Failure 400 {object} md.Response "具体错误"
// @Router /api/im/batchSendUserMessage [POST]
func BatchSendUserMessage(c *gin.Context) {
var req *md.GroupListReq
if err1 := c.ShouldBindJSON(&req); err1 != nil {
e.OutErr(c, e.ERR_INVALID_ARGS, err1.Error())
return
}
err, resp := svc.GroupList(*req)
if err != nil {
e.OutErr(c, e.ERR, err.Error())
return
}
e.OutSuc(c, resp, nil)
}

+ 57
- 0
app/md/im/md_group.go Datei anzeigen

@@ -0,0 +1,57 @@
package md

type GroupListReq struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
Name string `json:"name"` //群名称
GroupAdmin string `json:"group_admin"` //群主
StartTimeStart string `json:"start_time_start" example:"创建时间-起始"`
StartTimeEnd string `json:"start_time_end" example:"创建时间-截止"`
}

type GroupListResp struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
Total int64 `json:"total"`
List []struct {
Id int64 // 群组id
Name string // 组名
AvatarUrl string // 头像
Introduction string // 群简介
UserNum int32 // 群组人数
IsAllMemberBanned int32 // 是否全员禁言(1:是 2:否)
IsAllAddFriend int32 // 是否允许加好友(1:是 2:否)
Extra string // 附加字段
CreateTime string // 创建时间
UpdateTime string // 更新时间
PhoneNumber string // 群主账号
Nickname string // 群主昵称
} `json:"list"`
}

type GroupUserListReq struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
GroupId int `json:"name"` //群id
Phone string `json:"phone" example:"手机号"` //手机号
Nickname string `json:"nickname" example:"昵称"` //昵称
}

type GroupUserListResp struct {
Page int `json:"page"`
PageSize int `json:"page_size"`
Total int64 `json:"total"`
List []struct {
Id int64 // 自增主键
GroupId int64 // 群组id
UserId int64 // 用户id
MemberType int // 群组类型
Remarks string // 备注
Extra string // 附加属性
Status int // 状态
CreateTime string // 创建时间
UpdateTime string // 更新时间
PhoneNumber string // 账号
Nickname string // 昵称
} `json:"list"`
}

+ 3
- 0
app/router/router.go Datei anzeigen

@@ -257,6 +257,9 @@ func rIm(r *gin.RouterGroup) {
r.POST("/updateCustomerServiceMemo", im.UpdateCustomerServiceMemo)
r.GET("/redPackageRecordsDetail", im.RedPackageRecordsDetail)
r.POST("/pageSendRedPackageOrd", im.PageSendRedPackageOrd)
r.POST("/groupList", im.GroupList)
r.POST("/batchSendGroupMessage", im.BatchSendGroupMessage)
r.POST("/batchSendUserMessage", im.BatchSendUserMessage)
}

func rFinancialCenter(r *gin.RouterGroup) {


+ 140
- 0
app/svc/im/svc_group.go Datei anzeigen

@@ -0,0 +1,140 @@
package svc

import (
"applet/app/db"
"applet/app/db/im/model"
md "applet/app/md/im"
"errors"
"fmt"
)

func GroupList(req md.GroupListReq) (err error, resp md.GroupListResp) {
sess := db.DbIm.Where("1=1")
var groupIds []int64
if req.GroupAdmin != "" {
var user model.User
has, err := db.DbIm.Where("`phone_number`=?", req.GroupAdmin).Get(&user)
if err != nil {
return
}
if !has {
return errors.New("群主账号不存在"), resp
}
var groupUserList []*model.GroupUser
err = db.DbIm.Where("`user_id`=? and member_type= 1", user.Id).Find(&groupUserList)
if err != nil {
return
}
for _, v := range groupUserList {
groupIds = append(groupIds, v.GroupId)
}
}

var mm []*model.Group
if len(groupIds) > 0 {
sess.In("id", groupIds)
}
resp.Total, err = sess.Limit(req.PageSize, (req.Page-1)*req.PageSize).Asc("id").FindAndCount(&mm)
if err != nil {
return
}
resp.Page = req.Page
resp.PageSize = req.PageSize
for _, v := range mm {
var tmp = struct {
Id int64 // 群组id
Name string // 组名
AvatarUrl string // 头像
Introduction string // 群简介
UserNum int32 // 群组人数
IsAllMemberBanned int32 // 是否全员禁言(1:是 2:否)
IsAllAddFriend int32 // 是否允许加好友(1:是 2:否)
Extra string // 附加字段
CreateTime string // 创建时间
UpdateTime string // 更新时间
PhoneNumber string // 群主账号
Nickname string // 群主昵称
}{
Id: v.Id,
Name: v.Name,
AvatarUrl: v.AvatarUrl,
Introduction: v.Introduction,
UserNum: v.UserNum,
IsAllMemberBanned: v.IsAllMemberBanned,
IsAllAddFriend: v.IsAllAddFriend,
Extra: v.Extra,
CreateTime: v.CreateTime,
UpdateTime: v.UpdateTime,
}
var groupUser model.GroupUser
has, err := db.DbIm.Where("`group_id`=? and member_type= 1", v.Id).Get(&groupUser)
if err != nil {
return
}
if has {
var user model.User
has, err = db.DbIm.ID(groupUser.UserId).Get(&user)
if err != nil {
return
}
if has {
tmp.PhoneNumber = user.PhoneNumber
tmp.Nickname = user.Nickname
}
}
}
return
}

type GroupUserJoinUser struct {
model.GroupUser `xorm:"extends"`
model.User `xorm:"extends"`
}

func GroupUserList(req md.GroupUserListReq) (err error, resp md.GroupUserListResp) {
sess := db.DbIm.Table("group_user").Where("1=1")
sess.Join("LEFT", "user", "group_user.user_id = user.id")
if req.Phone != "" {
sess.And("user.phone LIKE ?", "%"+req.Phone+"%")
}
if req.Nickname != "" {
sess.And("user.nickname LIKE ?", "%"+req.Nickname+"%")
}
var mm []*GroupUserJoinUser
resp.Total, err = sess.Limit(req.PageSize, (req.Page-1)*req.PageSize).Asc("group_user.id").FindAndCount(&mm)
sql, _ := sess.LastSQL()
fmt.Println("GroupUserList___SQL:::", sql)
if err != nil {
return
}
resp.Page = req.Page
resp.PageSize = req.PageSize
for _, v := range mm {
resp.List = append(resp.List, struct {
Id int64 // 自增主键
GroupId int64 // 群组id
UserId int64 // 用户id
MemberType int // 群组类型
Remarks string // 备注
Extra string // 附加属性
Status int // 状态
CreateTime string // 创建时间
UpdateTime string // 更新时间
PhoneNumber string // 账号
Nickname string // 昵称
}{
Id: v.GroupUser.Id,
GroupId: int64(v.GroupUser.GroupId),
UserId: v.GroupUser.UserId,
MemberType: v.GroupUser.MemberType,
Remarks: v.GroupUser.Remarks,
Extra: v.GroupUser.Extra,
Status: v.GroupUser.Status,
CreateTime: v.GroupUser.CreateTime,
UpdateTime: v.GroupUser.UpdateTime,
PhoneNumber: v.User.PhoneNumber,
Nickname: v.User.Nickname,
})
}
return
}

Laden…
Abbrechen
Speichern