You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

304 lines
7.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package ImRelateDao
import (
"dsSzxy/Utils/CommonUtil"
"dsSzxy/Utils/ConfigUtil"
"dsSzxy/Utils/DbUtil"
"dsSzxy/Utils/EsUtil"
"dsSzxy/Utils/RedisUtil"
ssdb "dsSzxy/Utils/SsdbUtil"
"errors"
"fmt"
"github.com/xormplus/xorm"
"io/ioutil"
"net/http"
"strings"
)
//聊天记录结构
type ChatRecordStruct struct {
SenderUserId string `json:"sender_user_id"`
SenderUserName string `json:"sender_user_name"`
SenderUserAvatar string `json:"sender_user_avatar"`
ReceiverUserId string `json:"receiver_user_id"`
ReceiverUserName string `json:"receiver_user_name"`
ReceiverUserAvatar string `json:"receiver_user_avatar"`
SendTime string `json:"send_time"`
Content string `json:"content"`
Base64 string `json:"base64"`
FileType string `json:"file_type"`
Url string `json:"url"`
Size string `json:"size"`
MessageType string `json:"message_type"`
ChatType string `json:"chat_type"`
}
/**
功能:获取头像
作者:吴缤
日期2021-08-12
*/
func GetPersonAvatar(personId string, identityId string, w string, h string) string {
avatarUrl := "/dsideal_yy/html/thumb/Material/%s/%s@" + w + "w_" + h + "h_100Q_1x.png"
//默认头像
avatarId := "EA0BC5FB-52D9-E232-D3E3-E6C2960B5739.png"
avatar := fmt.Sprintf(avatarUrl, avatarId[0:2], avatarId)
ssdbClient, ssdbClientErr := ssdb.Connect(ConfigUtil.SSDBIp, ConfigUtil.SSDBPort)
if ssdbClientErr != nil {
return avatar
}
res, resErr := ssdbClient.Get("space_ajson_personbaseinfo_" + personId + "_" + identityId)
if resErr != nil {
return avatar
}
jsonObj, jsonObjErr := CommonUtil.JsonStringToMap(fmt.Sprintf("%v", res))
if jsonObjErr != nil {
return avatar
}
avatarId = fmt.Sprintf("%v", jsonObj["space_avatar_fileid"])
avatar = fmt.Sprintf(avatarUrl, avatarId[0:2], avatarId)
return avatar
}
/**
功能:获取群组名称和头像
作者:吴缤
日期2021-08-17
*/
func GetGroupNameAvatar(groupId string, w string, h string) (string, string) {
avatarUrl := "/dsideal_yy/html/thumb/Material/%s/%s@" + w + "w_" + h + "h_100Q_1x.png"
//默认头像
avatarId := "9750A6F8-2CBF-4CF0-A254-F2528C45D3A8.png"
avatar := fmt.Sprintf(avatarUrl, avatarId[0:2], avatarId)
db := DbUtil.Engine
record := make(xorm.Record)
sql := "select group_name,avater_url from t_base_group_new where id = ?"
_, err := db.SQL(sql, groupId).Get(&record)
if err != nil {
return "未知", avatar
}
avatarId = fmt.Sprintf("%v", record["avater_url"].String())
avatar = fmt.Sprintf(avatarUrl, avatarId[0:2], avatarId)
groupName := record["group_name"].String()
return groupName, avatar
}
/**
功能:获取人员姓名
作者:吴缤
日期2021-08-17
*/
func GetPersonName(personId string, identityId string) string {
personName := "未知"
personNameRedis, errRedis := GetPersonNameRedis(personId, identityId)
if errRedis != nil {
personNameMysql, errMysql := GetPersonNameMsyql(personId, identityId)
if errMysql != nil {
return personName
}
personName = personNameMysql
} else {
personName = personNameRedis
}
return personName
}
/**
功能在Redis中获取人员姓名
作者:吴缤
日期2021-08-17
*/
func GetPersonNameRedis(personId string, identityId string) (string, error) {
key := fmt.Sprintf("person_%s_%s", personId, identityId)
result := RedisUtil.HMGETALL(key)
if len(result) == 0 {
return "", errors.New("redis中未找到")
}
return result["person_name"], nil
}
/**
功能在Mysql中获取人员姓名
作者:吴缤
日期2021-08-17
*/
func GetPersonNameMsyql(personId string, identityId string) (string, error) {
db := DbUtil.Engine
record := make(xorm.Record)
sql := "select person_name from t_sys_loginperson where person_id = ? and identity_id=?"
_, err := db.SQL(sql, personId, identityId).Get(&record)
if err != nil {
return "", err
}
personName := record["person_name"].String()
return personName, nil
}
/**
功能:发送融云消息
作者:吴缤
日期2021-08-16
*/
func SendRongYunMsg(sendType string, fromId string, toId string, objectName string, content string) error {
sendTypeStr := ""
toTypeStr := ""
if sendType == "p" {
sendTypeStr = "private"
toTypeStr = "toUserId"
} else {
sendTypeStr = "group"
toTypeStr = "toGroupId"
}
url := fmt.Sprintf("https://api-cn.ronghub.com/message/%s/publish.json", sendTypeStr)
method := "POST"
parameter := fmt.Sprintf("fromUserId=%s&%s=%s&objectName=%s&content=%s", fromId, toTypeStr, toId, objectName, content)
payload := strings.NewReader(parameter)
client := &http.Client{
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
return err
}
configMap, configErr := CommonUtil.GetRongYunConfig()
if configErr != nil {
return configErr
}
ak := configMap["app_key"]
r := CommonUtil.GetSixRandom()
ts := CommonUtil.GetTimeStamp()
sk := configMap["app_secret"]
st := CommonUtil.SHA1(sk + r + ts)
req.Header.Add("RC-App-Key", ak)
req.Header.Add("RC-Nonce", r)
req.Header.Add("RC-Timestamp", ts)
req.Header.Add("RC-Signature", st)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, err := client.Do(req)
if err != nil {
return err
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
return err
}
jsonObj, err := CommonUtil.JsonStringToMap(string(body))
if err != nil {
return err
}
if jsonObj["code"] != float64(200) {
return errors.New("发送消息失败!")
}
return nil
}
/**
功能保存聊天记录到ES
作者:吴缤
日期2021-08-17
*/
func SaveChatRecord(indexName string, bodyString string) error {
esClient := EsUtil.EsClient
CTX := EsUtil.CTX
_, err := esClient.Index().
Index(indexName).
Id(CommonUtil.GetUUID()).
BodyString(bodyString).
Do(CTX)
if err != nil {
return err
}
return nil
}
/**
功能根据融云的userId拆分为人员ID和身份ID
作者:吴缤
日期2021-08-17
*/
func GetPersonIdIdentityId(userId string) (string, string) {
s := strings.Split(userId, "_")
return s[0], s[1]
}
/**
功能根据融云的groupId拆分出组ID
作者:吴缤
日期2021-08-17
*/
func GetGroupId(groupId string) string {
s := strings.Split(groupId, "_")
return s[0]
}
/**
功能根据融云的userId获取人员姓名
作者:吴缤
日期2021-08-17
*/
func GetPersonNameByUserId(userId string) string {
pId, iId := GetPersonIdIdentityId(userId)
personName := GetPersonName(pId, iId)
return personName
}
/**
功能根据融云的userId获取人员头像
作者:吴缤
日期2021-08-17
*/
func GetPersonAvatarByUserId(userId string) string {
pId, iId := GetPersonIdIdentityId(userId)
avatar := GetPersonAvatar(pId, iId, "36", "36")
return avatar
}
/**
功能根据融云的groupId获取群组名称和头像
作者:吴缤
日期2021-08-17
*/
func GetGroupNameAvatarByGroupId(groupId string) (string, string) {
gId := GetGroupId(groupId)
groupName, groupAvatar := GetGroupNameAvatar(gId, "36", "36")
return groupName, groupAvatar
}
/**
功能:根据发送人、接收人和发送类型获取人名和头像
作者:吴缤
日期2021-08-23
*/
func GetPersonNameAvatar(fromId string, toId string, sendType string) (fromName, fromAvatar, toName, toAvatar string) {
fromName = GetPersonNameByUserId(fromId)
fromAvatar = GetPersonAvatarByUserId(fromId)
if sendType == "p" {
toName = GetPersonNameByUserId(toId)
toAvatar = GetPersonAvatarByUserId(toId)
} else
{
toName, toAvatar = GetGroupNameAvatarByGroupId(toId)
}
return
}