pull/351/head
wangchuxiao 2 years ago
parent 3886d49b0a
commit 7f5b12d4d2

@ -111,6 +111,7 @@ func main() {
groupRouterGroup.POST("/set_group_member_nickname", group.SetGroupMemberNickname) groupRouterGroup.POST("/set_group_member_nickname", group.SetGroupMemberNickname)
groupRouterGroup.POST("/set_group_member_info", group.SetGroupMemberInfo) groupRouterGroup.POST("/set_group_member_info", group.SetGroupMemberInfo)
groupRouterGroup.POST("/get_group_abstract_info", group.GetGroupAbstractInfo) groupRouterGroup.POST("/get_group_abstract_info", group.GetGroupAbstractInfo)
groupRouterGroup.POST("/get_groups", group.GetGroups)
//groupRouterGroup.POST("/get_group_all_member_list_by_split", group.GetGroupAllMemberListBySplit) //groupRouterGroup.POST("/get_group_all_member_list_by_split", group.GetGroupAllMemberListBySplit)
} }
superGroupRouterGroup := r.Group("/super_group") superGroupRouterGroup := r.Group("/super_group")

@ -1318,3 +1318,7 @@ func GetGroupAbstractInfo(c *gin.Context) {
c.JSON(http.StatusOK, resp) c.JSON(http.StatusOK, resp)
return return
} }
func GetGroups(c *gin.Context) {
}

@ -23,49 +23,6 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
func DeleteUser(c *gin.Context) {
params := api.DeleteUsersReq{}
if err := c.BindJSON(&params); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
req := &rpc.DeleteUsersReq{}
utils.CopyStructFields(req, &params)
var ok bool
var errInfo string
ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
if !ok {
errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
log.NewInfo(params.OperationID, "DeleteUser args ", req.String())
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
if etcdConn == nil {
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := rpc.NewUserClient(etcdConn)
RpcResp, err := client.DeleteUsers(context.Background(), req)
if err != nil {
log.NewError(req.OperationID, "call delete users rpc server failed", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call delete users rpc server failed"})
return
}
resp := api.DeleteUsersResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, FailedUserIDList: RpcResp.FailedUserIDList}
if len(RpcResp.FailedUserIDList) == 0 {
resp.FailedUserIDList = []string{}
}
log.NewInfo(req.OperationID, "DeleteUser api return", resp)
c.JSON(http.StatusOK, resp)
}
// @Summary 获取所有用户uid列表 // @Summary 获取所有用户uid列表
// @Description 获取所有用户uid列表 // @Description 获取所有用户uid列表
// @Tags 用户相关 // @Tags 用户相关

@ -463,13 +463,11 @@ func GetUsers(c *gin.Context) {
resp api.GetUsersResp resp api.GetUsersResp
reqPb rpc.GetUsersReq reqPb rpc.GetUsersReq
) )
if err := c.Bind(&req); err != nil { if err := c.Bind(&req); err != nil {
log.NewError(req.OperationID, "Bind failed ", err.Error(), req) log.NewError(req.OperationID, "Bind failed ", err.Error(), req)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()}) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return return
} }
var ok bool var ok bool
var errInfo string var errInfo string
ok, _, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID) ok, _, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
@ -479,9 +477,7 @@ func GetUsers(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg}) c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
return return
} }
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req) log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.OperationID = req.OperationID reqPb.OperationID = req.OperationID
reqPb.UserID = req.UserID reqPb.UserID = req.UserID
reqPb.UserName = req.UserName reqPb.UserName = req.UserName
@ -499,7 +495,6 @@ func GetUsers(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()}) c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return return
} }
utils.CopyStructFields(&resp.Data.UserList, respPb.UserList) utils.CopyStructFields(&resp.Data.UserList, respPb.UserList)
resp.CommResp.ErrCode = respPb.CommonResp.ErrCode resp.CommResp.ErrCode = respPb.CommonResp.ErrCode
resp.CommResp.ErrMsg = respPb.CommonResp.ErrMsg resp.CommResp.ErrMsg = respPb.CommonResp.ErrMsg

@ -141,47 +141,6 @@ func GetGroupByName(c *gin.Context) {
openIMHttp.RespHttp200(c, constant.OK, resp) openIMHttp.RespHttp200(c, constant.OK, resp)
} }
func CreateGroup(c *gin.Context) {
var (
req cms_api_struct.CreateGroupRequest
_ cms_api_struct.CreateGroupResponse
reqPb pbGroup.CreateGroupReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.GroupInfo = &commonPb.GroupInfo{}
reqPb.GroupInfo.GroupName = req.GroupName
reqPb.GroupInfo.CreatorUserID = req.GroupMasterId
reqPb.OwnerUserID = req.GroupMasterId
reqPb.OpUserID = req.GroupMasterId
for _, v := range req.GroupMembers {
reqPb.InitMemberList = append(reqPb.InitMemberList, &pbGroup.GroupAddMemberInfo{
UserID: v,
RoleLevel: 1,
})
}
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
_, err := client.CreateGroup(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "CreateGroup failed", err.Error())
openIMHttp.RespHttp200(c, constant.ErrServer, nil)
return
}
openIMHttp.RespHttp200(c, constant.OK, nil)
}
func GetGroupMembers(c *gin.Context) { func GetGroupMembers(c *gin.Context) {
var ( var (
req cms_api_struct.GetGroupMembersRequest req cms_api_struct.GetGroupMembersRequest
@ -228,177 +187,3 @@ func GetGroupMembers(c *gin.Context) {
log.NewInfo("", utils.GetSelfFuncName(), "req: ", resp) log.NewInfo("", utils.GetSelfFuncName(), "req: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp) openIMHttp.RespHttp200(c, constant.OK, resp)
} }
func AddGroupMembers(c *gin.Context) {
var (
req cms_api_struct.RemoveGroupMembersRequest
resp cms_api_struct.RemoveGroupMembersResponse
reqPb pbGroup.AddGroupMembersCMSReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo("", utils.GetSelfFuncName(), "req: ", req)
reqPb.UserIDList = req.Members
reqPb.GroupID = req.GroupId
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
respPb, err := client.AddGroupMembersCMS(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "AddGroupMembersCMS failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
return
}
resp.Success = respPb.Success
resp.Failed = respPb.Failed
log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
}
func RemoveGroupMembers(c *gin.Context) {
var (
req cms_api_struct.RemoveGroupMembersRequest
resp cms_api_struct.RemoveGroupMembersResponse
reqPb pbGroup.RemoveGroupMembersCMSReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.UserIDList = req.Members
reqPb.GroupID = req.GroupId
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
respPb, err := client.RemoveGroupMembersCMS(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "RemoveGroupMembersCMS failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
return
}
resp.Success = respPb.Success
resp.Failed = respPb.Failed
log.NewInfo("", utils.GetSelfFuncName(), "req: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
}
func SetGroupOwner(c *gin.Context) {
var (
req cms_api_struct.SetGroupMasterRequest
_ cms_api_struct.SetGroupMasterResponse
reqPb pbGroup.OperateUserRoleReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.GroupID = req.GroupId
reqPb.UserID = req.UserId
reqPb.RoleLevel = constant.GroupOwner
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
_, err := client.OperateUserRole(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
openIMHttp.RespHttp200(c, constant.ErrServer, nil)
return
}
openIMHttp.RespHttp200(c, constant.OK, nil)
}
func SetGroupOrdinaryUsers(c *gin.Context) {
var (
req cms_api_struct.SetGroupMemberRequest
_ cms_api_struct.AdminLoginResponse
reqPb pbGroup.OperateUserRoleReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.GroupID = req.GroupId
reqPb.UserID = req.UserId
reqPb.RoleLevel = constant.GroupOrdinaryUsers
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
_, err := client.OperateUserRole(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
return
}
openIMHttp.RespHttp200(c, constant.OK, nil)
}
func AlterGroupInfo(c *gin.Context) {
var (
req cms_api_struct.AlterGroupInfoRequest
_ cms_api_struct.SetGroupMasterResponse
reqPb pbGroup.SetGroupInfoReq
)
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OpUserID = c.MustGet("userID").(string)
reqPb.GroupInfoForSet = &commonPb.GroupInfoForSet{
GroupID: req.GroupID,
GroupName: req.GroupName,
Introduction: req.Introduction,
Notification: req.Notification,
FaceURL: req.ProfilePhoto,
}
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
_, err := client.SetGroupInfo(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
return
}
openIMHttp.RespHttp200(c, constant.OK, nil)
}

@ -1,49 +0,0 @@
package organization
import (
"github.com/gin-gonic/gin"
)
func GetStaffs(c *gin.Context) {
}
func GetOrganizations(c *gin.Context) {
}
func GetSquads(c *gin.Context) {
}
func AlterStaff(c *gin.Context) {
}
func AddOrganization(c *gin.Context) {
}
func InquireOrganization(g *gin.Context) {
}
func AlterOrganization(c *gin.Context) {
}
func DeleteOrganization(g *gin.Context) {
}
func GetOrganizationSquads(c *gin.Context) {
}
func AlterStaffsInfo(c *gin.Context) {
}
func AddChildOrganization(c *gin.Context) {
}

@ -40,13 +40,13 @@ func NewGinRouter() *gin.Engine {
groupRouterGroup.GET("/get_groups", group.GetGroups) groupRouterGroup.GET("/get_groups", group.GetGroups)
groupRouterGroup.GET("/get_group_by_name", group.GetGroupByName) groupRouterGroup.GET("/get_group_by_name", group.GetGroupByName)
groupRouterGroup.GET("/get_group_members", group.GetGroupMembers) groupRouterGroup.GET("/get_group_members", group.GetGroupMembers)
groupRouterGroup.POST("/create_group", group.CreateGroup) // groupRouterGroup.POST("/create_group", group.CreateGroup)
groupRouterGroup.POST("/add_members", group.AddGroupMembers) // groupRouterGroup.POST("/add_members", group.AddGroupMembers)
groupRouterGroup.POST("/remove_members", group.RemoveGroupMembers) // groupRouterGroup.POST("/remove_members", group.RemoveGroupMembers)
groupRouterGroup.POST("/get_members_in_group", group.GetGroupMembers) // groupRouterGroup.POST("/get_members_in_group", group.GetGroupMembers)
groupRouterGroup.POST("/set_group_master", group.SetGroupOwner) // groupRouterGroup.POST("/set_group_master", group.SetGroupOwner)
groupRouterGroup.POST("/set_group_ordinary_user", group.SetGroupOrdinaryUsers) // groupRouterGroup.POST("/set_group_ordinary_user", group.SetGroupOrdinaryUsers)
groupRouterGroup.POST("/alter_group_info", group.AlterGroupInfo) // groupRouterGroup.POST("/alter_group_info", group.AlterGroupInfo)
} }
userRouterGroup := r2.Group("/user") userRouterGroup := r2.Group("/user")
{ {

@ -3,11 +3,9 @@ package statistics
import ( import (
"Open_IM/pkg/cms_api_struct" "Open_IM/pkg/cms_api_struct"
"Open_IM/pkg/common/config" "Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
openIMHttp "Open_IM/pkg/common/http"
"Open_IM/pkg/common/log" "Open_IM/pkg/common/log"
"Open_IM/pkg/grpc-etcdv3/getcdv3" "Open_IM/pkg/grpc-etcdv3/getcdv3"
pb "Open_IM/pkg/proto/statistics" admin "Open_IM/pkg/proto/admin_cms"
"Open_IM/pkg/utils" "Open_IM/pkg/utils"
"context" "context"
"net/http" "net/http"
@ -20,12 +18,12 @@ func GetMessagesStatistics(c *gin.Context) {
var ( var (
req cms_api_struct.GetMessageStatisticsRequest req cms_api_struct.GetMessageStatisticsRequest
resp cms_api_struct.GetMessageStatisticsResponse resp cms_api_struct.GetMessageStatisticsResponse
reqPb pb.GetMessageStatisticsReq reqPb admin.GetMessageStatisticsReq
) )
reqPb.StatisticsReq = &pb.StatisticsReq{} reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil { if err := c.Bind(&req); err != nil {
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return return
} }
reqPb.OperationID = utils.OperationIDGenerator() reqPb.OperationID = utils.OperationIDGenerator()
@ -38,20 +36,20 @@ func GetMessagesStatistics(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return return
} }
client := pb.NewUserClient(etcdConn) client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetMessageStatistics(context.Background(), &reqPb) respPb, err := client.GetMessageStatistics(context.Background(), &reqPb)
if err != nil { if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetMessageStatistics failed", err.Error()) log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetMessageStatistics failed", err.Error())
openIMHttp.RespHttp200(c, err, resp) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 400, "errMsg": err.Error()})
return return
} }
// utils.CopyStructFields(&resp, respPb)
resp.GroupMessageNum = int(respPb.GroupMessageNum) resp.GroupMessageNum = int(respPb.GroupMessageNum)
resp.PrivateMessageNum = int(respPb.PrivateMessageNum) resp.PrivateMessageNum = int(respPb.PrivateMessageNum)
for _, v := range respPb.PrivateMessageNumList { for _, v := range respPb.PrivateMessageNumList {
resp.PrivateMessageNumList = append(resp.PrivateMessageNumList, struct { resp.PrivateMessageNumList = append(resp.PrivateMessageNumList, struct {
Date string "json:\"date\"" Date string "json:\"date\""
MessageNum int "json:\"message_num\"" MessageNum int "json:\"messageNum\""
}{ }{
Date: v.Date, Date: v.Date,
MessageNum: int(v.Num), MessageNum: int(v.Num),
@ -60,26 +58,26 @@ func GetMessagesStatistics(c *gin.Context) {
for _, v := range respPb.GroupMessageNumList { for _, v := range respPb.GroupMessageNumList {
resp.GroupMessageNumList = append(resp.GroupMessageNumList, struct { resp.GroupMessageNumList = append(resp.GroupMessageNumList, struct {
Date string "json:\"date\"" Date string "json:\"date\""
MessageNum int "json:\"message_num\"" MessageNum int "json:\"messageNum\""
}{ }{
Date: v.Date, Date: v.Date,
MessageNum: int(v.Num), MessageNum: int(v.Num),
}) })
} }
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp) c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
} }
func GetUserStatistics(c *gin.Context) { func GetUserStatistics(c *gin.Context) {
var ( var (
req cms_api_struct.GetUserStatisticsRequest req cms_api_struct.GetUserStatisticsRequest
resp cms_api_struct.GetUserStatisticsResponse resp cms_api_struct.GetUserStatisticsResponse
reqPb pb.GetUserStatisticsReq reqPb admin.GetUserStatisticsReq
) )
reqPb.StatisticsReq = &pb.StatisticsReq{} reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil { if err := c.Bind(&req); err != nil {
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return return
} }
reqPb.OperationID = utils.OperationIDGenerator() reqPb.OperationID = utils.OperationIDGenerator()
@ -92,21 +90,20 @@ func GetUserStatistics(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return return
} }
client := pb.NewUserClient(etcdConn) client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetUserStatistics(context.Background(), &reqPb) respPb, err := client.GetUserStatistics(context.Background(), &reqPb)
if err != nil { if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error()) log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error(), reqPb.String())
openIMHttp.RespHttp200(c, err, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return return
} }
// utils.CopyStructFields(&resp, respPb)
resp.ActiveUserNum = int(respPb.ActiveUserNum) resp.ActiveUserNum = int(respPb.ActiveUserNum)
resp.IncreaseUserNum = int(respPb.IncreaseUserNum) resp.IncreaseUserNum = int(respPb.IncreaseUserNum)
resp.TotalUserNum = int(respPb.TotalUserNum) resp.TotalUserNum = int(respPb.TotalUserNum)
for _, v := range respPb.ActiveUserNumList { for _, v := range respPb.ActiveUserNumList {
resp.ActiveUserNumList = append(resp.ActiveUserNumList, struct { resp.ActiveUserNumList = append(resp.ActiveUserNumList, struct {
Date string "json:\"date\"" Date string "json:\"date\""
ActiveUserNum int "json:\"active_user_num\"" ActiveUserNum int "json:\"activeUserNum\""
}{ }{
Date: v.Date, Date: v.Date,
ActiveUserNum: int(v.Num), ActiveUserNum: int(v.Num),
@ -115,7 +112,7 @@ func GetUserStatistics(c *gin.Context) {
for _, v := range respPb.IncreaseUserNumList { for _, v := range respPb.IncreaseUserNumList {
resp.IncreaseUserNumList = append(resp.IncreaseUserNumList, struct { resp.IncreaseUserNumList = append(resp.IncreaseUserNumList, struct {
Date string "json:\"date\"" Date string "json:\"date\""
IncreaseUserNum int "json:\"increase_user_num\"" IncreaseUserNum int "json:\"increaseUserNum\""
}{ }{
Date: v.Date, Date: v.Date,
IncreaseUserNum: int(v.Num), IncreaseUserNum: int(v.Num),
@ -124,26 +121,26 @@ func GetUserStatistics(c *gin.Context) {
for _, v := range respPb.TotalUserNumList { for _, v := range respPb.TotalUserNumList {
resp.TotalUserNumList = append(resp.TotalUserNumList, struct { resp.TotalUserNumList = append(resp.TotalUserNumList, struct {
Date string "json:\"date\"" Date string "json:\"date\""
TotalUserNum int "json:\"total_user_num\"" TotalUserNum int "json:\"totalUserNum\""
}{ }{
Date: v.Date, Date: v.Date,
TotalUserNum: int(v.Num), TotalUserNum: int(v.Num),
}) })
} }
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp) c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
} }
func GetGroupStatistics(c *gin.Context) { func GetGroupStatistics(c *gin.Context) {
var ( var (
req cms_api_struct.GetGroupStatisticsRequest req cms_api_struct.GetGroupStatisticsRequest
resp cms_api_struct.GetGroupStatisticsResponse resp cms_api_struct.GetGroupStatisticsResponse
reqPb pb.GetGroupStatisticsReq reqPb admin.GetGroupStatisticsReq
) )
reqPb.StatisticsReq = &pb.StatisticsReq{} reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil { if err := c.Bind(&req); err != nil {
log.NewError("0", "BindJSON failed ", err.Error()) log.NewError(req.OperationID, "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return return
} }
reqPb.OperationID = utils.OperationIDGenerator() reqPb.OperationID = utils.OperationIDGenerator()
@ -156,11 +153,11 @@ func GetGroupStatistics(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return return
} }
client := pb.NewUserClient(etcdConn) client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetGroupStatistics(context.Background(), &reqPb) respPb, err := client.GetGroupStatistics(context.Background(), &reqPb)
if err != nil { if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error()) log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error())
openIMHttp.RespHttp200(c, err, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return return
} }
// utils.CopyStructFields(&resp, respPb) // utils.CopyStructFields(&resp, respPb)
@ -170,7 +167,7 @@ func GetGroupStatistics(c *gin.Context) {
resp.IncreaseGroupNumList = append(resp.IncreaseGroupNumList, resp.IncreaseGroupNumList = append(resp.IncreaseGroupNumList,
struct { struct {
Date string "json:\"date\"" Date string "json:\"date\""
IncreaseGroupNum int "json:\"increase_group_num\"" IncreaseGroupNum int "json:\"increaseGroupNum\""
}{ }{
Date: v.Date, Date: v.Date,
IncreaseGroupNum: int(v.Num), IncreaseGroupNum: int(v.Num),
@ -180,7 +177,7 @@ func GetGroupStatistics(c *gin.Context) {
resp.TotalGroupNumList = append(resp.TotalGroupNumList, resp.TotalGroupNumList = append(resp.TotalGroupNumList,
struct { struct {
Date string "json:\"date\"" Date string "json:\"date\""
TotalGroupNum int "json:\"total_group_num\"" TotalGroupNum int "json:\"totalGroupNum\""
}{ }{
Date: v.Date, Date: v.Date,
TotalGroupNum: int(v.Num), TotalGroupNum: int(v.Num),
@ -188,19 +185,19 @@ func GetGroupStatistics(c *gin.Context) {
} }
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp) c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
} }
func GetActiveUser(c *gin.Context) { func GetActiveUser(c *gin.Context) {
var ( var (
req cms_api_struct.GetActiveUserRequest req cms_api_struct.GetActiveUserRequest
resp cms_api_struct.GetActiveUserResponse resp cms_api_struct.GetActiveUserResponse
reqPb pb.GetActiveUserReq reqPb admin.GetActiveUserReq
) )
reqPb.StatisticsReq = &pb.StatisticsReq{} reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil { if err := c.Bind(&req); err != nil {
log.NewError("0", "BindJSON failed ", err.Error()) log.NewError(req.OperationID, "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return return
} }
reqPb.OperationID = utils.OperationIDGenerator() reqPb.OperationID = utils.OperationIDGenerator()
@ -213,28 +210,28 @@ func GetActiveUser(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return return
} }
client := pb.NewUserClient(etcdConn) client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetActiveUser(context.Background(), &reqPb) respPb, err := client.GetActiveUser(context.Background(), &reqPb)
if err != nil { if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveUser failed ", err.Error()) log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveUser failed ", err.Error())
openIMHttp.RespHttp200(c, err, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return return
} }
utils.CopyStructFields(&resp.ActiveUserList, respPb.Users) utils.CopyStructFields(&resp.ActiveUserList, respPb.Users)
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp) c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
} }
func GetActiveGroup(c *gin.Context) { func GetActiveGroup(c *gin.Context) {
var ( var (
req cms_api_struct.GetActiveGroupRequest req cms_api_struct.GetActiveGroupRequest
resp cms_api_struct.GetActiveGroupResponse resp cms_api_struct.GetActiveGroupResponse
reqPb pb.GetActiveGroupReq reqPb admin.GetActiveGroupReq
) )
reqPb.StatisticsReq = &pb.StatisticsReq{} reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil { if err := c.Bind(&req); err != nil {
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return return
} }
reqPb.OperationID = utils.OperationIDGenerator() reqPb.OperationID = utils.OperationIDGenerator()
@ -247,18 +244,18 @@ func GetActiveGroup(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg}) c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return return
} }
client := pb.NewUserClient(etcdConn) client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetActiveGroup(context.Background(), &reqPb) respPb, err := client.GetActiveGroup(context.Background(), &reqPb)
if err != nil { if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error()) log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error())
openIMHttp.RespHttp200(c, err, nil) c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return return
} }
for _, group := range respPb.Groups { for _, group := range respPb.Groups {
resp.ActiveGroupList = append(resp.ActiveGroupList, struct { resp.ActiveGroupList = append(resp.ActiveGroupList, struct {
GroupName string "json:\"group_name\"" GroupName string "json:\"groupName\""
GroupId string "json:\"group_id\"" GroupId string "json:\"groupID\""
MessageNum int "json:\"message_num\"" MessageNum int "json:\"messageNum\""
}{ }{
GroupName: group.GroupName, GroupName: group.GroupName,
GroupId: group.GroupId, GroupId: group.GroupId,
@ -266,5 +263,5 @@ func GetActiveGroup(c *gin.Context) {
}) })
} }
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp) log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp) c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
} }

@ -54,7 +54,6 @@ func BlockUser(c *gin.Context) {
reqPb pb.BlockUserReq reqPb pb.BlockUserReq
) )
if err := c.BindJSON(&req); err != nil { if err := c.BindJSON(&req); err != nil {
fmt.Println(err)
log.NewError("0", "BindJSON failed ", err.Error()) log.NewError("0", "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, resp) openIMHttp.RespHttp200(c, constant.ErrArgs, resp)
return return

@ -140,12 +140,12 @@ func (s *adminCMSServer) ReduceUserRegisterAddFriendIDList(_ context.Context, re
} }
} }
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", req.String()) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", req.String())
return resp, nil return resp, nil
} }
func (s *adminCMSServer) GetUserRegisterAddFriendIDList(_ context.Context, req *pbAdminCMS.GetUserRegisterAddFriendIDListReq) (*pbAdminCMS.GetUserRegisterAddFriendIDListResp, error) { func (s *adminCMSServer) GetUserRegisterAddFriendIDList(_ context.Context, req *pbAdminCMS.GetUserRegisterAddFriendIDListReq) (*pbAdminCMS.GetUserRegisterAddFriendIDListResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String()) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
resp := &pbAdminCMS.GetUserRegisterAddFriendIDListResp{UserInfoList: []*server_api_params.UserInfo{}} resp := &pbAdminCMS.GetUserRegisterAddFriendIDListResp{}
userIDList, err := imdb.GetRegisterAddFriendList(req.Pagination.ShowNumber, req.Pagination.PageNumber) userIDList, err := imdb.GetRegisterAddFriendList(req.Pagination.ShowNumber, req.Pagination.PageNumber)
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
@ -230,11 +230,11 @@ func (s *adminCMSServer) GetChatLogs(_ context.Context, req *pbAdminCMS.GetChatL
continue continue
} }
pbChatLog.RecvID = group.GroupID pbChatLog.RecvID = group.GroupID
pbChatLog.gr = group.GroupName pbChatLog.GroupName = group.GroupName
} }
resp.ChatLogs = append(resp.ChatLogs, pbChatLog) resp.ChatLogs = append(resp.ChatLogs, pbChatLog)
} }
resp.Pagination = &open_im_sdk.ResponsePagination{ resp.Pagination = &server_api_params.ResponsePagination{
CurrentPage: req.Pagination.PageNumber, CurrentPage: req.Pagination.PageNumber,
ShowNumber: req.Pagination.ShowNumber, ShowNumber: req.Pagination.ShowNumber,
} }
@ -249,13 +249,13 @@ func (s *adminCMSServer) GetActiveGroup(_ context.Context, req *pbAdminCMS.GetAc
fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To)
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error())
return resp, errors.WrapError(constant.ErrArgs) return resp, nil
} }
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "time: ", fromTime, toTime) log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "time: ", fromTime, toTime)
activeGroups, err := imdb.GetActiveGroups(fromTime, toTime, 12) activeGroups, err := imdb.GetActiveGroups(fromTime, toTime, 12)
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveGroups failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveGroups failed", err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
for _, activeGroup := range activeGroups { for _, activeGroup := range activeGroups {
resp.Groups = append(resp.Groups, resp.Groups = append(resp.Groups,
@ -275,13 +275,13 @@ func (s *adminCMSServer) GetActiveUser(_ context.Context, req *pbAdminCMS.GetAct
fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To)
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "time: ", fromTime, toTime) log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "time: ", fromTime, toTime)
activeUsers, err := imdb.GetActiveUsers(fromTime, toTime, 12) activeUsers, err := imdb.GetActiveUsers(fromTime, toTime, 12)
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUsers failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUsers failed", err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
for _, activeUser := range activeUsers { for _, activeUser := range activeUsers {
resp.Users = append(resp.Users, resp.Users = append(resp.Users,
@ -388,17 +388,17 @@ func (s *adminCMSServer) GetGroupStatistics(_ context.Context, req *pbAdminCMS.G
fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To)
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error())
return resp, errors.WrapError(constant.ErrArgs) return resp, nil
} }
increaseGroupNum, err := imdb.GetIncreaseGroupNum(fromTime, toTime.Add(time.Hour*24)) increaseGroupNum, err := imdb.GetIncreaseGroupNum(fromTime, toTime.Add(time.Hour*24))
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseGroupNum failed", err.Error(), fromTime, toTime) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseGroupNum failed", err.Error(), fromTime, toTime)
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
totalGroupNum, err := imdb.GetTotalGroupNum() totalGroupNum, err := imdb.GetTotalGroupNum()
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
resp.IncreaseGroupNum = increaseGroupNum resp.IncreaseGroupNum = increaseGroupNum
resp.TotalGroupNum = totalGroupNum resp.TotalGroupNum = totalGroupNum
@ -441,17 +441,17 @@ func (s *adminCMSServer) GetMessageStatistics(_ context.Context, req *pbAdminCMS
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "times: ", fromTime, toTime) log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "times: ", fromTime, toTime)
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error())
return resp, errors.WrapError(constant.ErrArgs) return resp, nil
} }
privateMessageNum, err := imdb.GetPrivateMessageNum(fromTime, toTime.Add(time.Hour*24)) privateMessageNum, err := imdb.GetPrivateMessageNum(fromTime, toTime.Add(time.Hour*24))
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetPrivateMessageNum failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetPrivateMessageNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
groupMessageNum, err := imdb.GetGroupMessageNum(fromTime, toTime.Add(time.Hour*24)) groupMessageNum, err := imdb.GetGroupMessageNum(fromTime, toTime.Add(time.Hour*24))
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMessageNum failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMessageNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), privateMessageNum, groupMessageNum) log.NewDebug(req.OperationID, utils.GetSelfFuncName(), privateMessageNum, groupMessageNum)
resp.PrivateMessageNum = privateMessageNum resp.PrivateMessageNum = privateMessageNum
@ -493,22 +493,22 @@ func (s *adminCMSServer) GetUserStatistics(_ context.Context, req *pbAdminCMS.Ge
fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To) fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To)
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error())
return resp, errors.WrapError(constant.ErrArgs) return resp, nil
} }
activeUserNum, err := imdb.GetActiveUserNum(fromTime, toTime.Add(time.Hour*24)) activeUserNum, err := imdb.GetActiveUserNum(fromTime, toTime.Add(time.Hour*24))
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUserNum failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUserNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
increaseUserNum, err := imdb.GetIncreaseUserNum(fromTime, toTime.Add(time.Hour*24)) increaseUserNum, err := imdb.GetIncreaseUserNum(fromTime, toTime.Add(time.Hour*24))
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseUserNum failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseUserNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
totalUserNum, err := imdb.GetTotalUserNum() totalUserNum, err := imdb.GetTotalUserNum()
if err != nil { if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetTotalUserNum failed", err.Error()) log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetTotalUserNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB) return resp, nil
} }
resp.ActiveUserNum = activeUserNum resp.ActiveUserNum = activeUserNum
resp.TotalUserNum = totalUserNum resp.TotalUserNum = totalUserNum

@ -1,10 +1,14 @@
package cms_api_struct package cms_api_struct
import server_api_params "Open_IM/pkg/proto/sdk_ws" import (
"Open_IM/pkg/base_info"
server_api_params "Open_IM/pkg/proto/sdk_ws"
)
type AdminLoginRequest struct { type AdminLoginRequest struct {
AdminName string `json:"admin_name" binding:"required"` AdminName string `json:"adminName" binding:"required"`
Secret string `json:"secret" binding:"required"` Secret string `json:"secret" binding:"required"`
OperationID string `json:"operationID" binding:"required"`
} }
type AdminLoginResponse struct { type AdminLoginResponse struct {
@ -30,10 +34,10 @@ type ReduceUserRegisterAddFriendIDListResponse struct {
type GetUserRegisterAddFriendIDListRequest struct { type GetUserRegisterAddFriendIDListRequest struct {
OperationID string `json:"operationID" binding:"required"` OperationID string `json:"operationID" binding:"required"`
RequestPaginationBody base_info.RequestPagination
} }
type GetUserRegisterAddFriendIDListResponse struct { type GetUserRegisterAddFriendIDListResponse struct {
Users []*server_api_params.UserInfo `json:"users"` Users []*server_api_params.UserInfo `json:"users"`
ResponsePagination base_info.ResponsePagination
} }

@ -16,7 +16,7 @@ type GetChatLogsReq struct {
} }
type GetChatLogsResp struct { type GetChatLogsResp struct {
ChatLogs []*pbCommon.MsgData `json:"chat_logs"` ChatLogs []*pbCommon.MsgData `json:"chatLogs"`
ChatLogsNum int `json:"log_nums"` ChatLogsNum int `json:"logNums"`
ResponsePagination ResponsePagination
} }

@ -1,25 +0,0 @@
package cms_api_struct
type GetStaffsResponse struct {
StaffsList []struct {
ProfilePhoto string `json:"profile_photo"`
NickName string `json:"nick_name"`
StaffId int `json:"staff_id"`
Position string `json:"position"`
EntryTime string `json:"entry_time"`
} `json:"staffs_list"`
}
type GetOrganizationsResponse struct {
OrganizationList []struct {
OrganizationId int `json:"organization_id"`
OrganizationName string `json:"organization_name"`
} `json:"organization_list"`
}
type SquadResponse struct {
SquadList []struct {
SquadId int `json:"squad_id"`
SquadName string `json:"squad_name"`
} `json:"squad_list"`
}

@ -1,8 +1,9 @@
package cms_api_struct package cms_api_struct
type GetStatisticsRequest struct { type GetStatisticsRequest struct {
From string `form:"from" binding:"required"` From string `json:"from" binding:"required"`
To string `form:"to" binding:"required"` To string `json:"to" binding:"required"`
OperationID string `json:"operationID" binding:"required"`
} }
type GetMessageStatisticsRequest struct { type GetMessageStatisticsRequest struct {
@ -10,16 +11,16 @@ type GetMessageStatisticsRequest struct {
} }
type GetMessageStatisticsResponse struct { type GetMessageStatisticsResponse struct {
PrivateMessageNum int `json:"private_message_num"` PrivateMessageNum int `json:"privateMessageNum"`
GroupMessageNum int `json:"group_message_num"` GroupMessageNum int `json:"groupMessageNum"`
PrivateMessageNumList []struct { PrivateMessageNumList []struct {
Date string `json:"date"` Date string `json:"date"`
MessageNum int `json:"message_num"` MessageNum int `json:"messageNum"`
} `json:"private_message_num_list"` } `json:"privateMessageNumList"`
GroupMessageNumList []struct { GroupMessageNumList []struct {
Date string `json:"date"` Date string `json:"date"`
MessageNum int `json:"message_num"` MessageNum int `json:"messageNum"`
} `json:"group_message_num_list"` } `json:"groupMessageNumList"`
} }
type GetUserStatisticsRequest struct { type GetUserStatisticsRequest struct {
@ -27,21 +28,21 @@ type GetUserStatisticsRequest struct {
} }
type GetUserStatisticsResponse struct { type GetUserStatisticsResponse struct {
IncreaseUserNum int `json:"increase_user_num"` IncreaseUserNum int `json:"increaseUserNum"`
ActiveUserNum int `json:"active_user_num"` ActiveUserNum int `json:"activeUserNum"`
TotalUserNum int `json:"total_user_num"` TotalUserNum int `json:"totalUserNum"`
IncreaseUserNumList []struct { IncreaseUserNumList []struct {
Date string `json:"date"` Date string `json:"date"`
IncreaseUserNum int `json:"increase_user_num"` IncreaseUserNum int `json:"increaseUserNum"`
} `json:"increase_user_num_list"` } `json:"increaseUserNumList"`
ActiveUserNumList []struct { ActiveUserNumList []struct {
Date string `json:"date"` Date string `json:"date"`
ActiveUserNum int `json:"active_user_num"` ActiveUserNum int `json:"activeUserNum"`
} `json:"active_user_num_list"` } `json:"activeUserNumList"`
TotalUserNumList []struct { TotalUserNumList []struct {
Date string `json:"date"` Date string `json:"date"`
TotalUserNum int `json:"total_user_num"` TotalUserNum int `json:"totalUserNum"`
} `json:"total_user_num_list"` } `json:"totalUserNumList"`
} }
type GetGroupStatisticsRequest struct { type GetGroupStatisticsRequest struct {
@ -50,16 +51,16 @@ type GetGroupStatisticsRequest struct {
// 群聊统计 // 群聊统计
type GetGroupStatisticsResponse struct { type GetGroupStatisticsResponse struct {
IncreaseGroupNum int `json:"increase_group_num"` IncreaseGroupNum int `json:"increaseGroupNum"`
TotalGroupNum int `json:"total_group_num"` TotalGroupNum int `json:"totalGroupNum"`
IncreaseGroupNumList []struct { IncreaseGroupNumList []struct {
Date string `json:"date"` Date string `json:"date"`
IncreaseGroupNum int `json:"increase_group_num"` IncreaseGroupNum int `json:"increaseGroupNum"`
} `json:"increase_group_num_list"` } `json:"increaseGroupNumList"`
TotalGroupNumList []struct { TotalGroupNumList []struct {
Date string `json:"date"` Date string `json:"date"`
TotalGroupNum int `json:"total_group_num"` TotalGroupNum int `json:"totalGroupNum"`
} `json:"total_group_num_list"` } `json:"totalGroupNumList"`
} }
type GetActiveUserRequest struct { type GetActiveUserRequest struct {
@ -69,10 +70,10 @@ type GetActiveUserRequest struct {
type GetActiveUserResponse struct { type GetActiveUserResponse struct {
ActiveUserList []struct { ActiveUserList []struct {
NickName string `json:"nick_name"` NickName string `json:"nickName"`
UserId string `json:"user_id"` UserId string `json:"userID"`
MessageNum int `json:"message_num"` MessageNum int `json:"messageNum"`
} `json:"active_user_list"` } `json:"activeUserList"`
} }
type GetActiveGroupRequest struct { type GetActiveGroupRequest struct {
@ -82,8 +83,8 @@ type GetActiveGroupRequest struct {
type GetActiveGroupResponse struct { type GetActiveGroupResponse struct {
ActiveGroupList []struct { ActiveGroupList []struct {
GroupName string `json:"group_name"` GroupName string `json:"groupName"`
GroupId string `json:"group_id"` GroupId string `json:"groupID"`
MessageNum int `json:"message_num"` MessageNum int `json:"messageNum"`
} `json:"active_group_list"` } `json:"activeGroupList"`
} }

@ -2,7 +2,6 @@ package log
import ( import (
"Open_IM/pkg/common/config" "Open_IM/pkg/common/config"
"bufio"
//"bufio" //"bufio"
"fmt" "fmt"
@ -35,13 +34,13 @@ func loggerInit(moduleName string) *Logger {
//All logs will be printed //All logs will be printed
logger.SetLevel(logrus.Level(config.Config.Log.RemainLogLevel)) logger.SetLevel(logrus.Level(config.Config.Log.RemainLogLevel))
//Close std console output //Close std console output
src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend) // src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
if err != nil { // if err != nil {
panic(err.Error()) // panic(err.Error())
} // }
writer := bufio.NewWriter(src) // writer := bufio.NewWriter(src)
logger.SetOutput(writer) // logger.SetOutput(writer)
//logger.SetOutput(os.Stdout) logger.SetOutput(os.Stdout)
//Log Console Print Style Setting //Log Console Print Style Setting
logger.SetFormatter(&nested.Formatter{ logger.SetFormatter(&nested.Formatter{
TimestampFormat: "2006-01-02 15:04:05.000", TimestampFormat: "2006-01-02 15:04:05.000",

@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} }
func (m *CommonResp) String() string { return proto.CompactTextString(m) } func (m *CommonResp) String() string { return proto.CompactTextString(m) }
func (*CommonResp) ProtoMessage() {} func (*CommonResp) ProtoMessage() {}
func (*CommonResp) Descriptor() ([]byte, []int) { func (*CommonResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{0} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{0}
} }
func (m *CommonResp) XXX_Unmarshal(b []byte) error { func (m *CommonResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommonResp.Unmarshal(m, b) return xxx_messageInfo_CommonResp.Unmarshal(m, b)
@ -83,7 +83,7 @@ func (m *AdminLoginReq) Reset() { *m = AdminLoginReq{} }
func (m *AdminLoginReq) String() string { return proto.CompactTextString(m) } func (m *AdminLoginReq) String() string { return proto.CompactTextString(m) }
func (*AdminLoginReq) ProtoMessage() {} func (*AdminLoginReq) ProtoMessage() {}
func (*AdminLoginReq) Descriptor() ([]byte, []int) { func (*AdminLoginReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{1} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{1}
} }
func (m *AdminLoginReq) XXX_Unmarshal(b []byte) error { func (m *AdminLoginReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AdminLoginReq.Unmarshal(m, b) return xxx_messageInfo_AdminLoginReq.Unmarshal(m, b)
@ -136,7 +136,7 @@ func (m *AdminLoginResp) Reset() { *m = AdminLoginResp{} }
func (m *AdminLoginResp) String() string { return proto.CompactTextString(m) } func (m *AdminLoginResp) String() string { return proto.CompactTextString(m) }
func (*AdminLoginResp) ProtoMessage() {} func (*AdminLoginResp) ProtoMessage() {}
func (*AdminLoginResp) Descriptor() ([]byte, []int) { func (*AdminLoginResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{2} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{2}
} }
func (m *AdminLoginResp) XXX_Unmarshal(b []byte) error { func (m *AdminLoginResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AdminLoginResp.Unmarshal(m, b) return xxx_messageInfo_AdminLoginResp.Unmarshal(m, b)
@ -182,7 +182,7 @@ func (m *AddUserRegisterAddFriendIDListReq) Reset() { *m = AddUserRegist
func (m *AddUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) } func (m *AddUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) }
func (*AddUserRegisterAddFriendIDListReq) ProtoMessage() {} func (*AddUserRegisterAddFriendIDListReq) ProtoMessage() {}
func (*AddUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) { func (*AddUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{3} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{3}
} }
func (m *AddUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error { func (m *AddUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddUserRegisterAddFriendIDListReq.Unmarshal(m, b) return xxx_messageInfo_AddUserRegisterAddFriendIDListReq.Unmarshal(m, b)
@ -227,7 +227,7 @@ func (m *AddUserRegisterAddFriendIDListResp) Reset() { *m = AddUserRegis
func (m *AddUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) } func (m *AddUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) }
func (*AddUserRegisterAddFriendIDListResp) ProtoMessage() {} func (*AddUserRegisterAddFriendIDListResp) ProtoMessage() {}
func (*AddUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) { func (*AddUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{4} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{4}
} }
func (m *AddUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error { func (m *AddUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddUserRegisterAddFriendIDListResp.Unmarshal(m, b) return xxx_messageInfo_AddUserRegisterAddFriendIDListResp.Unmarshal(m, b)
@ -267,7 +267,7 @@ func (m *ReduceUserRegisterAddFriendIDListReq) Reset() { *m = ReduceUser
func (m *ReduceUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) } func (m *ReduceUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) }
func (*ReduceUserRegisterAddFriendIDListReq) ProtoMessage() {} func (*ReduceUserRegisterAddFriendIDListReq) ProtoMessage() {}
func (*ReduceUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) { func (*ReduceUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{5} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{5}
} }
func (m *ReduceUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error { func (m *ReduceUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReduceUserRegisterAddFriendIDListReq.Unmarshal(m, b) return xxx_messageInfo_ReduceUserRegisterAddFriendIDListReq.Unmarshal(m, b)
@ -319,7 +319,7 @@ func (m *ReduceUserRegisterAddFriendIDListResp) Reset() { *m = ReduceUse
func (m *ReduceUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) } func (m *ReduceUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) }
func (*ReduceUserRegisterAddFriendIDListResp) ProtoMessage() {} func (*ReduceUserRegisterAddFriendIDListResp) ProtoMessage() {}
func (*ReduceUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) { func (*ReduceUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{6} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{6}
} }
func (m *ReduceUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error { func (m *ReduceUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReduceUserRegisterAddFriendIDListResp.Unmarshal(m, b) return xxx_messageInfo_ReduceUserRegisterAddFriendIDListResp.Unmarshal(m, b)
@ -358,7 +358,7 @@ func (m *GetUserRegisterAddFriendIDListReq) Reset() { *m = GetUserRegist
func (m *GetUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) } func (m *GetUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) }
func (*GetUserRegisterAddFriendIDListReq) ProtoMessage() {} func (*GetUserRegisterAddFriendIDListReq) ProtoMessage() {}
func (*GetUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) { func (*GetUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{7} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{7}
} }
func (m *GetUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error { func (m *GetUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserRegisterAddFriendIDListReq.Unmarshal(m, b) return xxx_messageInfo_GetUserRegisterAddFriendIDListReq.Unmarshal(m, b)
@ -405,7 +405,7 @@ func (m *GetUserRegisterAddFriendIDListResp) Reset() { *m = GetUserRegis
func (m *GetUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) } func (m *GetUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) }
func (*GetUserRegisterAddFriendIDListResp) ProtoMessage() {} func (*GetUserRegisterAddFriendIDListResp) ProtoMessage() {}
func (*GetUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) { func (*GetUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{8} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{8}
} }
func (m *GetUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error { func (m *GetUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserRegisterAddFriendIDListResp.Unmarshal(m, b) return xxx_messageInfo_GetUserRegisterAddFriendIDListResp.Unmarshal(m, b)
@ -464,7 +464,7 @@ func (m *GetChatLogsReq) Reset() { *m = GetChatLogsReq{} }
func (m *GetChatLogsReq) String() string { return proto.CompactTextString(m) } func (m *GetChatLogsReq) String() string { return proto.CompactTextString(m) }
func (*GetChatLogsReq) ProtoMessage() {} func (*GetChatLogsReq) ProtoMessage() {}
func (*GetChatLogsReq) Descriptor() ([]byte, []int) { func (*GetChatLogsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{9} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{9}
} }
func (m *GetChatLogsReq) XXX_Unmarshal(b []byte) error { func (m *GetChatLogsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetChatLogsReq.Unmarshal(m, b) return xxx_messageInfo_GetChatLogsReq.Unmarshal(m, b)
@ -548,14 +548,15 @@ type ChatLog struct {
SenderPlatformID int32 `protobuf:"varint,5,opt,name=SenderPlatformID" json:"SenderPlatformID,omitempty"` SenderPlatformID int32 `protobuf:"varint,5,opt,name=SenderPlatformID" json:"SenderPlatformID,omitempty"`
SenderNickname string `protobuf:"bytes,6,opt,name=SenderNickname" json:"SenderNickname,omitempty"` SenderNickname string `protobuf:"bytes,6,opt,name=SenderNickname" json:"SenderNickname,omitempty"`
SenderFaceURL string `protobuf:"bytes,7,opt,name=SenderFaceURL" json:"SenderFaceURL,omitempty"` SenderFaceURL string `protobuf:"bytes,7,opt,name=SenderFaceURL" json:"SenderFaceURL,omitempty"`
SessionType int32 `protobuf:"varint,8,opt,name=SessionType" json:"SessionType,omitempty"` GroupName string `protobuf:"bytes,8,opt,name=GroupName" json:"GroupName,omitempty"`
MsgFrom int32 `protobuf:"varint,9,opt,name=MsgFrom" json:"MsgFrom,omitempty"` SessionType int32 `protobuf:"varint,9,opt,name=SessionType" json:"SessionType,omitempty"`
ContentType int32 `protobuf:"varint,10,opt,name=ContentType" json:"ContentType,omitempty"` MsgFrom int32 `protobuf:"varint,10,opt,name=MsgFrom" json:"MsgFrom,omitempty"`
Content string `protobuf:"bytes,11,opt,name=Content" json:"Content,omitempty"` ContentType int32 `protobuf:"varint,11,opt,name=ContentType" json:"ContentType,omitempty"`
Status int32 `protobuf:"varint,12,opt,name=Status" json:"Status,omitempty"` Content string `protobuf:"bytes,12,opt,name=Content" json:"Content,omitempty"`
SendTime int64 `protobuf:"varint,13,opt,name=SendTime" json:"SendTime,omitempty"` Status int32 `protobuf:"varint,13,opt,name=Status" json:"Status,omitempty"`
CreateTime int64 `protobuf:"varint,14,opt,name=CreateTime" json:"CreateTime,omitempty"` SendTime int64 `protobuf:"varint,14,opt,name=SendTime" json:"SendTime,omitempty"`
Ex string `protobuf:"bytes,15,opt,name=Ex" json:"Ex,omitempty"` CreateTime int64 `protobuf:"varint,15,opt,name=CreateTime" json:"CreateTime,omitempty"`
Ex string `protobuf:"bytes,16,opt,name=Ex" json:"Ex,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -565,7 +566,7 @@ func (m *ChatLog) Reset() { *m = ChatLog{} }
func (m *ChatLog) String() string { return proto.CompactTextString(m) } func (m *ChatLog) String() string { return proto.CompactTextString(m) }
func (*ChatLog) ProtoMessage() {} func (*ChatLog) ProtoMessage() {}
func (*ChatLog) Descriptor() ([]byte, []int) { func (*ChatLog) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{10} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{10}
} }
func (m *ChatLog) XXX_Unmarshal(b []byte) error { func (m *ChatLog) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChatLog.Unmarshal(m, b) return xxx_messageInfo_ChatLog.Unmarshal(m, b)
@ -634,6 +635,13 @@ func (m *ChatLog) GetSenderFaceURL() string {
return "" return ""
} }
func (m *ChatLog) GetGroupName() string {
if m != nil {
return m.GroupName
}
return ""
}
func (m *ChatLog) GetSessionType() int32 { func (m *ChatLog) GetSessionType() int32 {
if m != nil { if m != nil {
return m.SessionType return m.SessionType
@ -704,7 +712,7 @@ func (m *GetChatLogsResp) Reset() { *m = GetChatLogsResp{} }
func (m *GetChatLogsResp) String() string { return proto.CompactTextString(m) } func (m *GetChatLogsResp) String() string { return proto.CompactTextString(m) }
func (*GetChatLogsResp) ProtoMessage() {} func (*GetChatLogsResp) ProtoMessage() {}
func (*GetChatLogsResp) Descriptor() ([]byte, []int) { func (*GetChatLogsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{11} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{11}
} }
func (m *GetChatLogsResp) XXX_Unmarshal(b []byte) error { func (m *GetChatLogsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetChatLogsResp.Unmarshal(m, b) return xxx_messageInfo_GetChatLogsResp.Unmarshal(m, b)
@ -764,7 +772,7 @@ func (m *StatisticsReq) Reset() { *m = StatisticsReq{} }
func (m *StatisticsReq) String() string { return proto.CompactTextString(m) } func (m *StatisticsReq) String() string { return proto.CompactTextString(m) }
func (*StatisticsReq) ProtoMessage() {} func (*StatisticsReq) ProtoMessage() {}
func (*StatisticsReq) Descriptor() ([]byte, []int) { func (*StatisticsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{12} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{12}
} }
func (m *StatisticsReq) XXX_Unmarshal(b []byte) error { func (m *StatisticsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StatisticsReq.Unmarshal(m, b) return xxx_messageInfo_StatisticsReq.Unmarshal(m, b)
@ -810,7 +818,7 @@ func (m *GetActiveUserReq) Reset() { *m = GetActiveUserReq{} }
func (m *GetActiveUserReq) String() string { return proto.CompactTextString(m) } func (m *GetActiveUserReq) String() string { return proto.CompactTextString(m) }
func (*GetActiveUserReq) ProtoMessage() {} func (*GetActiveUserReq) ProtoMessage() {}
func (*GetActiveUserReq) Descriptor() ([]byte, []int) { func (*GetActiveUserReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{13} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{13}
} }
func (m *GetActiveUserReq) XXX_Unmarshal(b []byte) error { func (m *GetActiveUserReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetActiveUserReq.Unmarshal(m, b) return xxx_messageInfo_GetActiveUserReq.Unmarshal(m, b)
@ -857,7 +865,7 @@ func (m *UserResp) Reset() { *m = UserResp{} }
func (m *UserResp) String() string { return proto.CompactTextString(m) } func (m *UserResp) String() string { return proto.CompactTextString(m) }
func (*UserResp) ProtoMessage() {} func (*UserResp) ProtoMessage() {}
func (*UserResp) Descriptor() ([]byte, []int) { func (*UserResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{14} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{14}
} }
func (m *UserResp) XXX_Unmarshal(b []byte) error { func (m *UserResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UserResp.Unmarshal(m, b) return xxx_messageInfo_UserResp.Unmarshal(m, b)
@ -910,7 +918,7 @@ func (m *GetActiveUserResp) Reset() { *m = GetActiveUserResp{} }
func (m *GetActiveUserResp) String() string { return proto.CompactTextString(m) } func (m *GetActiveUserResp) String() string { return proto.CompactTextString(m) }
func (*GetActiveUserResp) ProtoMessage() {} func (*GetActiveUserResp) ProtoMessage() {}
func (*GetActiveUserResp) Descriptor() ([]byte, []int) { func (*GetActiveUserResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{15} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{15}
} }
func (m *GetActiveUserResp) XXX_Unmarshal(b []byte) error { func (m *GetActiveUserResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetActiveUserResp.Unmarshal(m, b) return xxx_messageInfo_GetActiveUserResp.Unmarshal(m, b)
@ -956,7 +964,7 @@ func (m *GetActiveGroupReq) Reset() { *m = GetActiveGroupReq{} }
func (m *GetActiveGroupReq) String() string { return proto.CompactTextString(m) } func (m *GetActiveGroupReq) String() string { return proto.CompactTextString(m) }
func (*GetActiveGroupReq) ProtoMessage() {} func (*GetActiveGroupReq) ProtoMessage() {}
func (*GetActiveGroupReq) Descriptor() ([]byte, []int) { func (*GetActiveGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{16} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{16}
} }
func (m *GetActiveGroupReq) XXX_Unmarshal(b []byte) error { func (m *GetActiveGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetActiveGroupReq.Unmarshal(m, b) return xxx_messageInfo_GetActiveGroupReq.Unmarshal(m, b)
@ -1004,7 +1012,7 @@ func (m *GroupResp) Reset() { *m = GroupResp{} }
func (m *GroupResp) String() string { return proto.CompactTextString(m) } func (m *GroupResp) String() string { return proto.CompactTextString(m) }
func (*GroupResp) ProtoMessage() {} func (*GroupResp) ProtoMessage() {}
func (*GroupResp) Descriptor() ([]byte, []int) { func (*GroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{17} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{17}
} }
func (m *GroupResp) XXX_Unmarshal(b []byte) error { func (m *GroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupResp.Unmarshal(m, b) return xxx_messageInfo_GroupResp.Unmarshal(m, b)
@ -1064,7 +1072,7 @@ func (m *GetActiveGroupResp) Reset() { *m = GetActiveGroupResp{} }
func (m *GetActiveGroupResp) String() string { return proto.CompactTextString(m) } func (m *GetActiveGroupResp) String() string { return proto.CompactTextString(m) }
func (*GetActiveGroupResp) ProtoMessage() {} func (*GetActiveGroupResp) ProtoMessage() {}
func (*GetActiveGroupResp) Descriptor() ([]byte, []int) { func (*GetActiveGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{18} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{18}
} }
func (m *GetActiveGroupResp) XXX_Unmarshal(b []byte) error { func (m *GetActiveGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetActiveGroupResp.Unmarshal(m, b) return xxx_messageInfo_GetActiveGroupResp.Unmarshal(m, b)
@ -1110,7 +1118,7 @@ func (m *DateNumList) Reset() { *m = DateNumList{} }
func (m *DateNumList) String() string { return proto.CompactTextString(m) } func (m *DateNumList) String() string { return proto.CompactTextString(m) }
func (*DateNumList) ProtoMessage() {} func (*DateNumList) ProtoMessage() {}
func (*DateNumList) Descriptor() ([]byte, []int) { func (*DateNumList) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{19} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{19}
} }
func (m *DateNumList) XXX_Unmarshal(b []byte) error { func (m *DateNumList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DateNumList.Unmarshal(m, b) return xxx_messageInfo_DateNumList.Unmarshal(m, b)
@ -1156,7 +1164,7 @@ func (m *GetMessageStatisticsReq) Reset() { *m = GetMessageStatisticsReq
func (m *GetMessageStatisticsReq) String() string { return proto.CompactTextString(m) } func (m *GetMessageStatisticsReq) String() string { return proto.CompactTextString(m) }
func (*GetMessageStatisticsReq) ProtoMessage() {} func (*GetMessageStatisticsReq) ProtoMessage() {}
func (*GetMessageStatisticsReq) Descriptor() ([]byte, []int) { func (*GetMessageStatisticsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{20} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{20}
} }
func (m *GetMessageStatisticsReq) XXX_Unmarshal(b []byte) error { func (m *GetMessageStatisticsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetMessageStatisticsReq.Unmarshal(m, b) return xxx_messageInfo_GetMessageStatisticsReq.Unmarshal(m, b)
@ -1205,7 +1213,7 @@ func (m *GetMessageStatisticsResp) Reset() { *m = GetMessageStatisticsRe
func (m *GetMessageStatisticsResp) String() string { return proto.CompactTextString(m) } func (m *GetMessageStatisticsResp) String() string { return proto.CompactTextString(m) }
func (*GetMessageStatisticsResp) ProtoMessage() {} func (*GetMessageStatisticsResp) ProtoMessage() {}
func (*GetMessageStatisticsResp) Descriptor() ([]byte, []int) { func (*GetMessageStatisticsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{21} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{21}
} }
func (m *GetMessageStatisticsResp) XXX_Unmarshal(b []byte) error { func (m *GetMessageStatisticsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetMessageStatisticsResp.Unmarshal(m, b) return xxx_messageInfo_GetMessageStatisticsResp.Unmarshal(m, b)
@ -1272,7 +1280,7 @@ func (m *GetGroupStatisticsReq) Reset() { *m = GetGroupStatisticsReq{} }
func (m *GetGroupStatisticsReq) String() string { return proto.CompactTextString(m) } func (m *GetGroupStatisticsReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupStatisticsReq) ProtoMessage() {} func (*GetGroupStatisticsReq) ProtoMessage() {}
func (*GetGroupStatisticsReq) Descriptor() ([]byte, []int) { func (*GetGroupStatisticsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{22} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{22}
} }
func (m *GetGroupStatisticsReq) XXX_Unmarshal(b []byte) error { func (m *GetGroupStatisticsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupStatisticsReq.Unmarshal(m, b) return xxx_messageInfo_GetGroupStatisticsReq.Unmarshal(m, b)
@ -1321,7 +1329,7 @@ func (m *GetGroupStatisticsResp) Reset() { *m = GetGroupStatisticsResp{}
func (m *GetGroupStatisticsResp) String() string { return proto.CompactTextString(m) } func (m *GetGroupStatisticsResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupStatisticsResp) ProtoMessage() {} func (*GetGroupStatisticsResp) ProtoMessage() {}
func (*GetGroupStatisticsResp) Descriptor() ([]byte, []int) { func (*GetGroupStatisticsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{23} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{23}
} }
func (m *GetGroupStatisticsResp) XXX_Unmarshal(b []byte) error { func (m *GetGroupStatisticsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupStatisticsResp.Unmarshal(m, b) return xxx_messageInfo_GetGroupStatisticsResp.Unmarshal(m, b)
@ -1388,7 +1396,7 @@ func (m *GetUserStatisticsReq) Reset() { *m = GetUserStatisticsReq{} }
func (m *GetUserStatisticsReq) String() string { return proto.CompactTextString(m) } func (m *GetUserStatisticsReq) String() string { return proto.CompactTextString(m) }
func (*GetUserStatisticsReq) ProtoMessage() {} func (*GetUserStatisticsReq) ProtoMessage() {}
func (*GetUserStatisticsReq) Descriptor() ([]byte, []int) { func (*GetUserStatisticsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{24} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{24}
} }
func (m *GetUserStatisticsReq) XXX_Unmarshal(b []byte) error { func (m *GetUserStatisticsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserStatisticsReq.Unmarshal(m, b) return xxx_messageInfo_GetUserStatisticsReq.Unmarshal(m, b)
@ -1439,7 +1447,7 @@ func (m *GetUserStatisticsResp) Reset() { *m = GetUserStatisticsResp{} }
func (m *GetUserStatisticsResp) String() string { return proto.CompactTextString(m) } func (m *GetUserStatisticsResp) String() string { return proto.CompactTextString(m) }
func (*GetUserStatisticsResp) ProtoMessage() {} func (*GetUserStatisticsResp) ProtoMessage() {}
func (*GetUserStatisticsResp) Descriptor() ([]byte, []int) { func (*GetUserStatisticsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{25} return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{25}
} }
func (m *GetUserStatisticsResp) XXX_Unmarshal(b []byte) error { func (m *GetUserStatisticsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserStatisticsResp.Unmarshal(m, b) return xxx_messageInfo_GetUserStatisticsResp.Unmarshal(m, b)
@ -1907,97 +1915,98 @@ var _AdminCMS_serviceDesc = grpc.ServiceDesc{
} }
func init() { func init() {
proto.RegisterFile("admin_cms/admin_cms.proto", fileDescriptor_admin_cms_1a9119d2c1ff8ffc) proto.RegisterFile("admin_cms/admin_cms.proto", fileDescriptor_admin_cms_a6bac7cb5a282446)
} }
var fileDescriptor_admin_cms_1a9119d2c1ff8ffc = []byte{ var fileDescriptor_admin_cms_a6bac7cb5a282446 = []byte{
// 1408 bytes of a gzipped FileDescriptorProto // 1416 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6e, 0xdb, 0xc6, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6e, 0xdb, 0xc6,
0x13, 0x07, 0x25, 0xcb, 0x92, 0x46, 0xb1, 0x63, 0x6f, 0xec, 0x84, 0x51, 0xf2, 0xcf, 0x5f, 0x66, 0x13, 0x07, 0x25, 0xcb, 0xb2, 0x46, 0xb1, 0x63, 0x6f, 0xec, 0x84, 0x51, 0xf2, 0xcf, 0x5f, 0x66,
0x93, 0x42, 0x2d, 0x52, 0xa9, 0x70, 0xd0, 0x53, 0x81, 0x14, 0x8e, 0x94, 0xa8, 0x0a, 0xac, 0xc4, 0x93, 0x42, 0x2d, 0x52, 0xa9, 0x70, 0xd0, 0x53, 0x81, 0x14, 0x8e, 0x94, 0xa8, 0x0a, 0xac, 0xc4,
0x60, 0x92, 0x02, 0x6d, 0xd1, 0x08, 0xac, 0xb4, 0x51, 0x09, 0x47, 0xe4, 0x9a, 0xbb, 0x72, 0x1c, 0x60, 0x92, 0x02, 0x6d, 0xd1, 0x08, 0xac, 0xb4, 0x56, 0x09, 0x5b, 0xe4, 0x9a, 0xbb, 0x72, 0x1c,
0x14, 0xbd, 0xe6, 0xd2, 0x7b, 0x0f, 0x3d, 0xf6, 0x15, 0xfa, 0x04, 0x3d, 0xf6, 0x29, 0x8a, 0xa2, 0x14, 0xbd, 0xe6, 0xd2, 0x7b, 0x0f, 0x3d, 0xf6, 0x15, 0xfa, 0x04, 0x3d, 0xf6, 0x31, 0x8a, 0x3e,
0x2f, 0x52, 0xec, 0x2e, 0x3f, 0x76, 0x49, 0x5a, 0x92, 0x1d, 0xd4, 0x37, 0xce, 0xec, 0x7c, 0xec, 0x47, 0x81, 0x62, 0x77, 0xf9, 0xb1, 0x4b, 0xd2, 0x92, 0xec, 0xa0, 0xbe, 0x71, 0x66, 0xe7, 0x63,
0xfc, 0x7e, 0x33, 0xcb, 0x25, 0xe1, 0xba, 0x33, 0x9e, 0xba, 0xde, 0x70, 0x34, 0xa5, 0xed, 0xf8, 0xe7, 0xf7, 0x9b, 0x59, 0x2e, 0x09, 0x37, 0x9d, 0xd1, 0xc4, 0xf5, 0x06, 0xc3, 0x09, 0x6d, 0xc5,
0xa9, 0x45, 0x02, 0x9f, 0xf9, 0xa8, 0x1a, 0x2b, 0xea, 0x3b, 0x4f, 0x09, 0xf6, 0x86, 0xfd, 0x41, 0x4f, 0x4d, 0x12, 0xf8, 0xcc, 0x47, 0x95, 0x58, 0x51, 0xdb, 0x7e, 0x4e, 0xb0, 0x37, 0xe8, 0xf5,
0x9b, 0x1c, 0x4e, 0xda, 0x62, 0xb5, 0x4d, 0xc7, 0x87, 0xc3, 0x37, 0xb4, 0xfd, 0x26, 0xb4, 0xb6, 0x5b, 0xe4, 0x70, 0xdc, 0x12, 0xab, 0x2d, 0x3a, 0x3a, 0x1c, 0xbc, 0xa1, 0xad, 0x37, 0xa1, 0xb5,
0xee, 0x03, 0x74, 0xfc, 0xe9, 0xd4, 0xf7, 0x6c, 0x4c, 0x09, 0x32, 0xa1, 0x8c, 0x83, 0xa0, 0xe3, 0xf5, 0x10, 0xa0, 0xed, 0x4f, 0x26, 0xbe, 0x67, 0x63, 0x4a, 0x90, 0x09, 0x65, 0x1c, 0x04, 0x6d,
0x8f, 0xb1, 0x69, 0x34, 0x8c, 0x66, 0xc9, 0x8e, 0x44, 0x74, 0x15, 0x56, 0x71, 0x10, 0x0c, 0xe8, 0x7f, 0x84, 0x4d, 0xa3, 0x6e, 0x34, 0x4a, 0x76, 0x24, 0xa2, 0xeb, 0xb0, 0x8c, 0x83, 0xa0, 0x4f,
0xc4, 0x2c, 0x34, 0x8c, 0x66, 0xd5, 0x0e, 0x25, 0x6b, 0x04, 0x6b, 0x7b, 0x3c, 0xdf, 0xbe, 0x3f, 0xc7, 0x66, 0xa1, 0x6e, 0x34, 0x2a, 0x76, 0x28, 0x59, 0x43, 0x58, 0xdd, 0xe5, 0xf9, 0xf6, 0xfc,
0x71, 0x3d, 0x1b, 0x1f, 0xa1, 0x06, 0xd4, 0x9e, 0x12, 0x1c, 0x38, 0xcc, 0xf5, 0xbd, 0x7e, 0x57, 0xb1, 0xeb, 0xd9, 0xf8, 0x18, 0xd5, 0xa1, 0xfa, 0x9c, 0xe0, 0xc0, 0x61, 0xae, 0xef, 0xf5, 0x3a,
0x84, 0xa9, 0xda, 0xaa, 0x8a, 0x27, 0x11, 0x2e, 0xfd, 0x6e, 0x18, 0x2b, 0x12, 0x79, 0x92, 0x67, 0x22, 0x4c, 0xc5, 0x56, 0x55, 0x3c, 0x89, 0x70, 0xe9, 0x75, 0xc2, 0x58, 0x91, 0xc8, 0x93, 0xbc,
0x78, 0x14, 0x60, 0x66, 0x16, 0x65, 0x12, 0x29, 0x59, 0xdf, 0xc1, 0xba, 0x9a, 0x84, 0x12, 0xb4, 0xc0, 0xc3, 0x00, 0x33, 0xb3, 0x28, 0x93, 0x48, 0xc9, 0xfa, 0x0e, 0xd6, 0xd4, 0x24, 0x94, 0xa0,
0x05, 0x25, 0xe6, 0x1f, 0x62, 0x2f, 0x8c, 0x2f, 0x05, 0xf4, 0x19, 0xc0, 0x28, 0x2e, 0x46, 0x04, 0x4d, 0x28, 0x31, 0xff, 0x10, 0x7b, 0x61, 0x7c, 0x29, 0xa0, 0xcf, 0x00, 0x86, 0x71, 0x31, 0x22,
0xaf, 0xed, 0x6e, 0xb7, 0x12, 0x80, 0x92, 0x4a, 0x6d, 0xc5, 0xd0, 0xc2, 0xb0, 0xb3, 0x37, 0x1e, 0x78, 0x75, 0x67, 0xab, 0x99, 0x00, 0x94, 0x54, 0x6a, 0x2b, 0x86, 0x16, 0x86, 0xed, 0xdd, 0xd1,
0xbf, 0xa0, 0x38, 0xb0, 0xf1, 0xc4, 0xa5, 0x0c, 0x07, 0x7b, 0xe3, 0xf1, 0xa3, 0xc0, 0xc5, 0xde, 0xe8, 0x15, 0xc5, 0x81, 0x8d, 0xc7, 0x2e, 0x65, 0x38, 0xd8, 0x1d, 0x8d, 0x9e, 0x04, 0x2e, 0xf6,
0xb8, 0xdf, 0xdd, 0x77, 0x29, 0x0b, 0xeb, 0xf2, 0xb3, 0x75, 0x29, 0x2a, 0x74, 0x0b, 0x60, 0x46, 0x46, 0xbd, 0xce, 0x9e, 0x4b, 0x59, 0x58, 0x97, 0x9f, 0xad, 0x4b, 0x51, 0xa1, 0x3b, 0x00, 0x53,
0x71, 0x20, 0x5d, 0xcc, 0x42, 0xa3, 0xd8, 0xac, 0xda, 0x8a, 0xc6, 0xfa, 0x16, 0xac, 0x45, 0x69, 0x8a, 0x03, 0xe9, 0x62, 0x16, 0xea, 0xc5, 0x46, 0xc5, 0x56, 0x34, 0xd6, 0xb7, 0x60, 0xcd, 0x4b,
0x28, 0x49, 0xd5, 0x60, 0x2c, 0x5b, 0xc3, 0x3b, 0x03, 0x6e, 0xdb, 0x78, 0x3c, 0x1b, 0xe1, 0xf7, 0x43, 0x49, 0xaa, 0x06, 0x63, 0xd1, 0x1a, 0xde, 0x19, 0x70, 0xd7, 0xc6, 0xa3, 0xe9, 0x10, 0xbf,
0xae, 0xe3, 0x26, 0x54, 0x63, 0x51, 0x80, 0x58, 0xb2, 0x13, 0x45, 0xaa, 0xca, 0x62, 0xa6, 0xca, 0x77, 0x1d, 0xb7, 0xa1, 0x12, 0x8b, 0x02, 0xc4, 0x92, 0x9d, 0x28, 0x52, 0x55, 0x16, 0x33, 0x55,
0x97, 0x70, 0x67, 0x89, 0x7d, 0x9c, 0xbf, 0xd0, 0x9f, 0x0d, 0xd8, 0xe9, 0x61, 0xf6, 0xde, 0x55, 0xbe, 0x86, 0x7b, 0x0b, 0xec, 0xe3, 0xe2, 0x85, 0xfe, 0x6c, 0xc0, 0x76, 0x17, 0xb3, 0xf7, 0xae,
0x76, 0x01, 0x88, 0x33, 0x71, 0xbd, 0xa4, 0xcc, 0xda, 0xee, 0xed, 0x16, 0xc5, 0xc1, 0x31, 0x0e, 0xb2, 0x03, 0x40, 0x9c, 0xb1, 0xeb, 0x25, 0x65, 0x56, 0x77, 0xee, 0x36, 0x29, 0x0e, 0x4e, 0x70,
0x86, 0x0e, 0x71, 0x87, 0xc4, 0x09, 0x9c, 0x29, 0x6d, 0xd9, 0xf8, 0x68, 0x86, 0x29, 0x3b, 0x88, 0x30, 0x70, 0x88, 0x3b, 0x20, 0x4e, 0xe0, 0x4c, 0x68, 0xd3, 0xc6, 0xc7, 0x53, 0x4c, 0xd9, 0x7e,
0x6d, 0x6d, 0xc5, 0xcf, 0xfa, 0xc7, 0x00, 0x6b, 0xd1, 0x6e, 0x28, 0x41, 0x5f, 0xc0, 0x25, 0x01, 0x6c, 0x6b, 0x2b, 0x7e, 0xd6, 0xdf, 0x06, 0x58, 0xf3, 0x76, 0x43, 0x09, 0xfa, 0x02, 0xae, 0x08,
0x91, 0xf7, 0xca, 0x17, 0xb0, 0x19, 0x8d, 0x62, 0xb3, 0xb6, 0x7b, 0x23, 0x27, 0xdd, 0x8b, 0xd0, 0x88, 0xbc, 0x03, 0x5f, 0xc0, 0x66, 0xd4, 0x8b, 0x8d, 0xea, 0xce, 0xad, 0x9c, 0x74, 0xaf, 0x42,
0xcc, 0xd6, 0x1c, 0xd0, 0xc3, 0x9c, 0xdd, 0xde, 0xc9, 0xdd, 0x2d, 0x25, 0xbe, 0x47, 0x71, 0xfe, 0x33, 0x5b, 0x73, 0x40, 0x8f, 0x73, 0x76, 0x7b, 0x2f, 0x77, 0xb7, 0x94, 0xf8, 0x1e, 0xc5, 0xf9,
0x76, 0x53, 0x98, 0x17, 0x97, 0xc5, 0xfc, 0xb7, 0x02, 0xac, 0xf7, 0x30, 0xeb, 0xfc, 0xe0, 0xb0, 0xdb, 0x4d, 0x61, 0x5e, 0x5c, 0x14, 0xf3, 0xdf, 0x0a, 0xb0, 0xd6, 0xc5, 0xac, 0xfd, 0x83, 0xc3,
0x7d, 0x7f, 0x42, 0x39, 0xc0, 0x26, 0x94, 0x3b, 0xbe, 0xc7, 0xb0, 0xc7, 0x42, 0x70, 0x23, 0x51, 0xf6, 0xfc, 0x31, 0xe5, 0x00, 0x9b, 0x50, 0x6e, 0xfb, 0x1e, 0xc3, 0x1e, 0x0b, 0xc1, 0x8d, 0x44,
0x0e, 0x31, 0xaf, 0x3e, 0x3a, 0x29, 0xa4, 0xc4, 0xf5, 0x36, 0x1e, 0x1d, 0xf7, 0xbb, 0xd1, 0x70, 0x39, 0xc4, 0xbc, 0xfa, 0xe8, 0xa4, 0x90, 0x12, 0xd7, 0xdb, 0x78, 0x78, 0xd2, 0xeb, 0x44, 0xc3,
0x4b, 0x09, 0xd5, 0xa1, 0xc2, 0x2d, 0x9e, 0xbb, 0x53, 0x6c, 0xae, 0x88, 0x95, 0x58, 0xe6, 0x34, 0x2d, 0x25, 0x54, 0x83, 0x15, 0x6e, 0xf1, 0xd2, 0x9d, 0x60, 0x73, 0x49, 0xac, 0xc4, 0x32, 0xa7,
0x3e, 0xc3, 0x94, 0xba, 0xbe, 0xf7, 0xfc, 0x2d, 0xc1, 0x66, 0x49, 0x34, 0xa3, 0xaa, 0xe2, 0x16, 0xf1, 0x05, 0xa6, 0xd4, 0xf5, 0xbd, 0x97, 0x6f, 0x09, 0x36, 0x4b, 0xa2, 0x19, 0x55, 0x15, 0xb7,
0x61, 0x62, 0x61, 0xb1, 0x2a, 0x2d, 0x14, 0x15, 0x27, 0x3a, 0x41, 0xc3, 0x2c, 0x9f, 0x85, 0xe8, 0x08, 0x13, 0x0b, 0x8b, 0x65, 0x69, 0xa1, 0xa8, 0x38, 0xd1, 0x09, 0x1a, 0x66, 0xf9, 0x3c, 0x44,
0xe4, 0x39, 0x7d, 0xac, 0x55, 0x32, 0xc7, 0x9a, 0xf5, 0x57, 0x11, 0xca, 0x21, 0x42, 0x72, 0xdf, 0x27, 0xcf, 0xe9, 0x63, 0x6d, 0x25, 0x73, 0xac, 0x59, 0xff, 0x14, 0xa1, 0x1c, 0x22, 0x24, 0xf7,
0x3c, 0xc1, 0x80, 0x4e, 0x92, 0xf6, 0x53, 0x54, 0xe8, 0x2e, 0x6c, 0x52, 0x16, 0xb8, 0xde, 0xa4, 0xcd, 0x13, 0xf4, 0xe9, 0x38, 0x69, 0x3f, 0x45, 0x85, 0xee, 0xc3, 0x06, 0x65, 0x81, 0xeb, 0x8d,
0xf3, 0xda, 0xc5, 0x1e, 0x93, 0x76, 0x12, 0xb0, 0xec, 0x82, 0x82, 0x69, 0xf1, 0x14, 0x4c, 0x57, 0xdb, 0x47, 0x2e, 0xf6, 0x98, 0xb4, 0x93, 0x80, 0x65, 0x17, 0x14, 0x4c, 0x8b, 0x67, 0x60, 0xba,
0x34, 0x4c, 0x3f, 0x86, 0x0d, 0x6e, 0x81, 0x83, 0x83, 0xd7, 0x0e, 0x7b, 0xe5, 0x07, 0xd3, 0x7e, 0xa4, 0x61, 0xfa, 0x31, 0xac, 0x73, 0x0b, 0x1c, 0xec, 0x1f, 0x39, 0xec, 0xc0, 0x0f, 0x26, 0xbd,
0x37, 0x04, 0x2f, 0xa3, 0x47, 0x1f, 0xc2, 0xba, 0xd4, 0x3d, 0x71, 0x47, 0x87, 0x9e, 0x33, 0x95, 0x4e, 0x08, 0x5e, 0x46, 0x8f, 0x3e, 0x84, 0x35, 0xa9, 0x7b, 0xe6, 0x0e, 0x0f, 0x3d, 0x67, 0x22,
0x20, 0x56, 0xed, 0x94, 0x16, 0xdd, 0x86, 0x35, 0xa9, 0x79, 0xe4, 0x8c, 0xf0, 0x0b, 0x7b, 0x5f, 0x41, 0xac, 0xd8, 0x29, 0x2d, 0xba, 0x0b, 0xab, 0x52, 0xf3, 0xc4, 0x19, 0xe2, 0x57, 0xf6, 0x9e,
0x40, 0x59, 0xb5, 0x75, 0x65, 0x9a, 0xb1, 0x4a, 0x96, 0x31, 0x13, 0xca, 0x03, 0x3a, 0x79, 0x14, 0x80, 0xb2, 0x62, 0xeb, 0x4a, 0x7e, 0x78, 0x74, 0x03, 0x7f, 0x4a, 0x9e, 0xf1, 0x40, 0x12, 0xa5,
0xf8, 0x53, 0xb3, 0x2a, 0xdf, 0x31, 0xa1, 0x98, 0xe6, 0x12, 0xb2, 0x5c, 0x2a, 0x5d, 0x57, 0xcb, 0x44, 0x91, 0xe6, 0xb3, 0x92, 0xe5, 0xd3, 0x84, 0x72, 0x9f, 0x8e, 0x9f, 0x04, 0xfe, 0xc4, 0x04,
0x76, 0x1d, 0x73, 0xd8, 0x8c, 0x9a, 0x97, 0x84, 0x5b, 0x28, 0x69, 0xdd, 0xb5, 0xd6, 0x30, 0x9a, 0xf9, 0x06, 0x0a, 0xc5, 0x34, 0xd3, 0xd5, 0x2c, 0xd3, 0x4a, 0x4f, 0x5e, 0xc9, 0xf6, 0x24, 0x73,
0x45, 0xa5, 0xbb, 0x6e, 0x01, 0x74, 0x02, 0xec, 0x30, 0x2c, 0x56, 0xd7, 0xc5, 0xaa, 0xa2, 0x41, 0xd8, 0x94, 0x9a, 0xab, 0xc2, 0x2d, 0x94, 0xb4, 0xde, 0x5b, 0xab, 0x1b, 0x8d, 0xa2, 0xd2, 0x7b,
0xeb, 0x50, 0x78, 0x78, 0x62, 0x5e, 0x16, 0x89, 0x0a, 0x0f, 0x4f, 0xac, 0xbf, 0x0d, 0xb8, 0xac, 0x77, 0x00, 0xda, 0x01, 0x76, 0x18, 0x16, 0xab, 0x57, 0xc5, 0xaa, 0xa2, 0x41, 0x6b, 0x50, 0x78,
0x8d, 0x01, 0x25, 0xa8, 0x05, 0x95, 0x48, 0x0e, 0xa7, 0x1a, 0xa9, 0xf3, 0x24, 0x97, 0xec, 0xd8, 0x7c, 0x6a, 0xae, 0x8b, 0x44, 0x85, 0xc7, 0xa7, 0xd6, 0x5f, 0x06, 0x5c, 0xd5, 0x86, 0x84, 0x12,
0x86, 0x0f, 0xf2, 0xc1, 0x79, 0x07, 0x59, 0x6f, 0xc7, 0x28, 0xe4, 0x93, 0xd9, 0x54, 0x74, 0x05, 0xd4, 0x84, 0x95, 0x48, 0x0e, 0x67, 0x1e, 0xa9, 0xd3, 0x26, 0x97, 0xec, 0xd8, 0x86, 0x8f, 0xf9,
0x87, 0x2a, 0x51, 0xf1, 0x51, 0x4f, 0xa6, 0x59, 0xb4, 0xc7, 0xe9, 0xa3, 0x9e, 0x3c, 0x5b, 0xf7, 0xfe, 0x45, 0xc7, 0x5c, 0x6f, 0xd6, 0x28, 0xe4, 0xb3, 0xe9, 0x44, 0xf4, 0x0c, 0x87, 0x2a, 0x51,
0x60, 0x8d, 0x23, 0xe7, 0x52, 0xe6, 0x8e, 0xc4, 0xa0, 0x23, 0x58, 0x79, 0xc5, 0xb9, 0x92, 0x3d, 0xf1, 0x83, 0x20, 0x99, 0x75, 0xd1, 0x3c, 0x67, 0x1f, 0x04, 0xc9, 0xb3, 0xf5, 0x00, 0x56, 0x39,
0x2c, 0x9e, 0x39, 0x30, 0xcc, 0x0f, 0xbb, 0xb5, 0xc0, 0x7c, 0x8b, 0xc1, 0x46, 0x0f, 0xb3, 0xbd, 0x72, 0x2e, 0x65, 0xee, 0x50, 0x1c, 0x03, 0x08, 0x96, 0x0e, 0x38, 0x57, 0xb2, 0xc3, 0xc5, 0x33,
0x11, 0x73, 0x8f, 0xc3, 0x63, 0xff, 0x08, 0xdd, 0x4f, 0x05, 0x0a, 0x4f, 0x78, 0x53, 0xd9, 0x82, 0x07, 0x86, 0xf9, 0x61, 0x2f, 0x17, 0x98, 0x6f, 0x31, 0x58, 0xef, 0x62, 0xb6, 0x3b, 0x64, 0xee,
0xb6, 0x6e, 0xa7, 0xf2, 0xa6, 0x06, 0xae, 0x90, 0x1d, 0xb8, 0x97, 0x50, 0x91, 0xc9, 0x28, 0xe1, 0x49, 0xf8, 0x52, 0x38, 0x46, 0x0f, 0x53, 0x81, 0xc2, 0xf3, 0xdf, 0x54, 0xb6, 0xa0, 0xad, 0xdb,
0x34, 0xf3, 0x46, 0x7d, 0xc2, 0xdb, 0x57, 0xee, 0x34, 0x96, 0x79, 0x6b, 0x88, 0x53, 0x75, 0x1c, 0xa9, 0xbc, 0xa9, 0x71, 0x2c, 0x64, 0xc7, 0xf1, 0x35, 0xac, 0xc8, 0x64, 0x94, 0x70, 0x9a, 0x79,
0x1d, 0x48, 0x52, 0xe2, 0xf4, 0x0f, 0x30, 0xa5, 0xce, 0x04, 0x27, 0x10, 0x2a, 0x1a, 0x6b, 0x06, 0x1b, 0x8b, 0x9e, 0x94, 0x3b, 0x8d, 0x65, 0xde, 0x1a, 0xe2, 0xcc, 0x1d, 0x45, 0xc7, 0x95, 0x94,
0x9b, 0xa9, 0xaa, 0x28, 0x41, 0x1f, 0x41, 0x89, 0x3f, 0x47, 0x64, 0x5f, 0x51, 0xca, 0x89, 0x6c, 0x38, 0xfd, 0x7d, 0x4c, 0xa9, 0x33, 0xc6, 0x09, 0x84, 0x8a, 0xc6, 0x9a, 0xc2, 0x46, 0xaa, 0x2a,
0x6c, 0x69, 0x91, 0x62, 0xa0, 0xb0, 0x2c, 0x03, 0x6a, 0xda, 0x5e, 0xe0, 0xcf, 0xc8, 0xc5, 0xa0, 0x4a, 0xd0, 0x47, 0x50, 0xe2, 0xcf, 0x11, 0xd9, 0xd7, 0x94, 0x72, 0x22, 0x1b, 0x5b, 0x5a, 0xa4,
0xf9, 0xab, 0x01, 0xd5, 0x30, 0x1d, 0x25, 0xfc, 0x0e, 0x20, 0x04, 0x05, 0xd0, 0x44, 0xc1, 0xc7, 0x18, 0x28, 0x2c, 0xca, 0x80, 0x9a, 0x56, 0xcc, 0xd5, 0xe5, 0xa0, 0xf9, 0xab, 0x11, 0xce, 0xb5,
0x50, 0x08, 0x31, 0xa4, 0x91, 0xb8, 0x08, 0xd3, 0xf3, 0x76, 0xe5, 0x5b, 0x40, 0x69, 0x4c, 0x28, 0x28, 0x53, 0x1b, 0x72, 0x23, 0x3d, 0xe4, 0x26, 0x94, 0x85, 0x10, 0x43, 0x1a, 0x89, 0xf3, 0x30,
0x41, 0x77, 0x61, 0x55, 0x08, 0x11, 0x19, 0x5b, 0x4a, 0xa0, 0xd8, 0xca, 0x0e, 0x6d, 0xce, 0x4b, 0xbd, 0x68, 0x57, 0xbe, 0x05, 0x94, 0xc6, 0x84, 0x12, 0x74, 0x1f, 0x96, 0x85, 0x10, 0x91, 0xb1,
0xc7, 0x3d, 0xa8, 0x75, 0x1d, 0xc6, 0x37, 0x2f, 0x5e, 0xc4, 0x08, 0x56, 0xb8, 0x18, 0x8d, 0x03, 0xa9, 0x04, 0x8a, 0xad, 0xec, 0xd0, 0xe6, 0xa2, 0x74, 0x3c, 0x80, 0x6a, 0xc7, 0x61, 0x7c, 0xf3,
0x7f, 0x46, 0x1b, 0x50, 0xe4, 0xd5, 0xca, 0xab, 0x12, 0x7f, 0xb4, 0x7e, 0x84, 0x6b, 0x3d, 0xcc, 0xe2, 0x35, 0x8d, 0x60, 0x89, 0x8b, 0xd1, 0x38, 0xf0, 0x67, 0xb4, 0x0e, 0x45, 0x5e, 0xad, 0xbc,
0xc2, 0xba, 0x75, 0x26, 0xfe, 0x7b, 0x26, 0xff, 0x28, 0x80, 0x99, 0x9f, 0x5d, 0x60, 0xb6, 0x79, 0x48, 0xf1, 0x47, 0xeb, 0x47, 0xb8, 0xd1, 0xc5, 0x2c, 0xac, 0x5b, 0x67, 0xe2, 0xbf, 0x67, 0xf2,
0x10, 0xb8, 0xc7, 0x0e, 0xc3, 0x0a, 0x4f, 0xf2, 0xae, 0x9f, 0x5d, 0x40, 0x4d, 0xb8, 0x2c, 0xd0, 0x8f, 0x02, 0x98, 0xf9, 0xd9, 0x05, 0x66, 0x1b, 0xfb, 0x81, 0x7b, 0xe2, 0x30, 0xac, 0xf0, 0x24,
0x53, 0x6c, 0x65, 0x95, 0x69, 0x35, 0xda, 0x87, 0xed, 0x8c, 0x7b, 0x7c, 0x43, 0xac, 0xed, 0x5e, 0xbf, 0x04, 0xb2, 0x0b, 0xa8, 0x01, 0x57, 0x05, 0x7a, 0x8a, 0xad, 0xac, 0x32, 0xad, 0x46, 0x7b,
0x55, 0xca, 0x53, 0xe0, 0xb4, 0xf3, 0x9d, 0xd0, 0x97, 0x70, 0x25, 0x95, 0x40, 0xc4, 0x5a, 0x99, 0xb0, 0x95, 0x71, 0x8f, 0xef, 0x8f, 0xd5, 0x9d, 0xeb, 0x4a, 0x79, 0x0a, 0x9c, 0x76, 0xbe, 0x13,
0x1b, 0x2b, 0xcf, 0x25, 0xc5, 0x7a, 0x69, 0xf9, 0x86, 0xdb, 0xee, 0x61, 0x26, 0x02, 0x5e, 0x34, 0xfa, 0x12, 0xae, 0xa5, 0x12, 0x88, 0x58, 0x4b, 0x33, 0x63, 0xe5, 0xb9, 0xa4, 0x58, 0x2f, 0x2d,
0x7d, 0xbf, 0x17, 0xe0, 0x6a, 0x5e, 0x6e, 0x4a, 0xf8, 0x6b, 0xbd, 0xef, 0x8d, 0x02, 0xec, 0x50, 0xde, 0x70, 0x5b, 0x5d, 0xcc, 0x44, 0xc0, 0xcb, 0xa6, 0xef, 0xf7, 0x02, 0x5c, 0xcf, 0xcb, 0x4d,
0x39, 0x05, 0x09, 0x77, 0x19, 0x3d, 0x7f, 0x5d, 0x3f, 0xf7, 0x99, 0xf3, 0x3a, 0x36, 0x94, 0xc4, 0x09, 0x7f, 0xe9, 0xf7, 0xbc, 0x61, 0x80, 0x1d, 0x2a, 0xa7, 0x20, 0xe1, 0x2e, 0xa3, 0xe7, 0x2f,
0xe9, 0x4a, 0xf4, 0x18, 0xb6, 0xd2, 0x9e, 0x4b, 0xb0, 0x96, 0xeb, 0x83, 0xba, 0xb0, 0xa9, 0x05, 0xf3, 0x97, 0x3e, 0x73, 0x8e, 0x62, 0x43, 0x49, 0x9c, 0xae, 0x44, 0x4f, 0x61, 0x33, 0xed, 0xb9,
0x5f, 0x82, 0xb2, 0xac, 0xc3, 0x79, 0x09, 0x3b, 0x81, 0xad, 0xf0, 0x1e, 0x7e, 0xd1, 0x7c, 0xfd, 0x00, 0x6b, 0xb9, 0x3e, 0xa8, 0x03, 0x1b, 0x5a, 0xf0, 0x05, 0x28, 0xcb, 0x3a, 0x5c, 0x94, 0xb0,
0x52, 0x14, 0xbd, 0x92, 0x4e, 0x4d, 0x09, 0x9f, 0x9e, 0x08, 0x28, 0xbe, 0x9a, 0xb0, 0x95, 0x56, 0x53, 0xd8, 0x0c, 0x6f, 0xe9, 0x97, 0xcd, 0xd7, 0x2f, 0x45, 0xd1, 0x2b, 0xe9, 0xd4, 0x94, 0xf0,
0x73, 0xb2, 0x92, 0xf7, 0x8c, 0x42, 0x96, 0xa6, 0x44, 0x16, 0x5c, 0x12, 0x78, 0x45, 0x46, 0xf2, 0xe9, 0x89, 0x80, 0xe2, 0xab, 0x09, 0x5b, 0x69, 0x35, 0x27, 0x2b, 0x79, 0xcf, 0x28, 0x64, 0x69,
0x78, 0xd5, 0x74, 0x7c, 0x72, 0x52, 0xc1, 0x97, 0x99, 0x9c, 0x1c, 0x17, 0x4e, 0xa7, 0x96, 0x5e, 0x4a, 0x64, 0xc1, 0x15, 0x81, 0x57, 0x64, 0x24, 0x8f, 0x57, 0x4d, 0xc7, 0x27, 0x27, 0x15, 0x7c,
0xc4, 0x29, 0xcd, 0xa7, 0x33, 0xe3, 0x80, 0x1e, 0xc0, 0x86, 0xba, 0x3f, 0x11, 0x64, 0x75, 0x6e, 0x91, 0xc9, 0xc9, 0x71, 0xe1, 0x74, 0x6a, 0xe9, 0x45, 0x9c, 0xd2, 0x6c, 0x3a, 0x33, 0x0e, 0xe8,
0x90, 0x8c, 0x7d, 0xaa, 0x25, 0xca, 0x4b, 0xb6, 0xc4, 0xee, 0x9f, 0x65, 0xa8, 0x08, 0xa3, 0xce, 0x11, 0xac, 0xab, 0xfb, 0x13, 0x41, 0x96, 0x67, 0x06, 0xc9, 0xd8, 0xa7, 0x5a, 0xa2, 0xbc, 0x60,
0xe0, 0x19, 0xda, 0x03, 0x48, 0x7e, 0x21, 0x20, 0x95, 0x7e, 0xed, 0xf7, 0x45, 0xfd, 0xfa, 0x29, 0x4b, 0xec, 0xfc, 0x59, 0x86, 0x15, 0x61, 0xd4, 0xee, 0xbf, 0x40, 0xbb, 0x00, 0xc9, 0x0f, 0x06,
0x2b, 0x94, 0xa0, 0x9f, 0xe0, 0xd6, 0xfc, 0xef, 0x77, 0x74, 0x57, 0x73, 0x5e, 0xf0, 0x47, 0xa1, 0xa4, 0xd2, 0xaf, 0xfd, 0xdc, 0xa8, 0xdd, 0x3c, 0x63, 0x85, 0x12, 0xf4, 0x13, 0xdc, 0x99, 0xfd,
0xfe, 0xc9, 0x19, 0xac, 0x29, 0x41, 0xef, 0x0c, 0xd8, 0x59, 0xf8, 0x65, 0x8d, 0xda, 0x4a, 0xd0, 0x75, 0x8f, 0xee, 0x6b, 0xce, 0x73, 0xfe, 0x37, 0xd4, 0x3e, 0x39, 0x87, 0x35, 0x25, 0xe8, 0x9d,
0x65, 0xfe, 0x07, 0xd4, 0x3f, 0x3d, 0x9b, 0x83, 0xc4, 0x61, 0xfe, 0x27, 0xaf, 0x86, 0xc3, 0xc2, 0x01, 0xdb, 0x73, 0xbf, 0xbb, 0x51, 0x4b, 0x09, 0xba, 0xc8, 0xdf, 0x82, 0xda, 0xa7, 0xe7, 0x73,
0x6f, 0x75, 0x0d, 0x87, 0x25, 0xbe, 0xa5, 0xbb, 0x50, 0x53, 0x2e, 0xe1, 0xe8, 0xba, 0xee, 0xad, 0x90, 0x38, 0xcc, 0xfe, 0x20, 0xd6, 0x70, 0x98, 0xfb, 0x25, 0xaf, 0xe1, 0xb0, 0xc0, 0x97, 0x76,
0x7c, 0xa3, 0xd6, 0xeb, 0xa7, 0x2d, 0x51, 0x82, 0x1e, 0xc3, 0x9a, 0x76, 0xb9, 0x43, 0x37, 0x74, 0x07, 0xaa, 0xca, 0x25, 0x1c, 0xdd, 0xd4, 0xbd, 0x95, 0x2f, 0xd8, 0x5a, 0xed, 0xac, 0x25, 0x4a,
0x63, 0xed, 0x32, 0x5b, 0xbf, 0x79, 0xfa, 0x22, 0x25, 0x68, 0x20, 0xbe, 0x8e, 0x95, 0xdb, 0x09, 0xd0, 0x53, 0x58, 0xd5, 0x2e, 0x77, 0xe8, 0x96, 0x6e, 0xac, 0x5d, 0x66, 0x6b, 0xb7, 0xcf, 0x5e,
0xca, 0xb5, 0x8f, 0x2e, 0x73, 0xf5, 0xff, 0xcd, 0x59, 0xa5, 0x04, 0x0d, 0xc5, 0x51, 0x96, 0x79, 0xa4, 0x04, 0xf5, 0xc5, 0xb7, 0xb3, 0x72, 0x3b, 0x41, 0xb9, 0xf6, 0xd1, 0x65, 0xae, 0xf6, 0xbf,
0x7d, 0x23, 0x4b, 0x77, 0xcb, 0xbb, 0x5d, 0xd4, 0x3f, 0x58, 0x68, 0x43, 0x09, 0xfa, 0x5a, 0xdc, 0x19, 0xab, 0x94, 0xa0, 0x81, 0x38, 0xca, 0x32, 0xaf, 0x6f, 0x64, 0xe9, 0x6e, 0x79, 0xb7, 0x8b,
0xa6, 0x52, 0x2f, 0x18, 0xd4, 0xd0, 0x5d, 0xb3, 0xef, 0xbe, 0xfa, 0xce, 0x02, 0x0b, 0x4a, 0xd0, 0xda, 0x07, 0x73, 0x6d, 0x28, 0x41, 0x5f, 0x8b, 0xdb, 0x54, 0xea, 0x05, 0x83, 0xea, 0xba, 0x6b,
0x57, 0xe2, 0xf2, 0xaa, 0x9f, 0x85, 0xe8, 0xff, 0x59, 0x82, 0xf5, 0xc0, 0x8d, 0xf9, 0x06, 0x94, 0xf6, 0xdd, 0x57, 0xdb, 0x9e, 0x63, 0x41, 0x09, 0xfa, 0x4a, 0x5c, 0x5e, 0xf5, 0xb3, 0x10, 0xfd,
0x3c, 0xb8, 0xf6, 0xcd, 0x76, 0x2b, 0xf9, 0xd3, 0xf9, 0x79, 0xfc, 0xf4, 0xfd, 0xaa, 0xf8, 0x8d, 0x3f, 0x4b, 0xb0, 0x1e, 0xb8, 0x3e, 0xdb, 0x80, 0x92, 0x47, 0x37, 0xbe, 0xd9, 0x6a, 0x26, 0xff,
0x79, 0xef, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x6a, 0x73, 0x53, 0x11, 0x15, 0x00, 0x00, 0x41, 0x3f, 0x8f, 0x9f, 0xbe, 0x5f, 0x16, 0x3f, 0x39, 0x1f, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff,
0xcd, 0xf8, 0xf8, 0x38, 0x2f, 0x15, 0x00, 0x00,
} }

@ -71,14 +71,15 @@ message ChatLog {
int32 SenderPlatformID = 5; int32 SenderPlatformID = 5;
string SenderNickname = 6; string SenderNickname = 6;
string SenderFaceURL = 7; string SenderFaceURL = 7;
int32 SessionType = 8; string GroupName = 8;
int32 MsgFrom = 9; int32 SessionType = 9;
int32 ContentType = 10; int32 MsgFrom = 10;
string Content = 11; int32 ContentType = 11;
int32 Status = 12; string Content = 12;
int64 SendTime = 13; int32 Status = 13;
int64 CreateTime = 14; int64 SendTime = 14;
string Ex = 15; int64 CreateTime = 15;
string Ex = 16;
} }
message GetChatLogsResp { message GetChatLogsResp {

Loading…
Cancel
Save