123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- package dao
- import (
- "encoding/json"
- "github.com/jinzhu/gorm"
- . "jjl-tools/tinodeService/lib"
- "strconv"
- "strings"
- "time"
- )
- type MessageDao struct {
- }
- type Messages struct {
- Createdat time.Time `json:"createdat"`
- Updatedat string `json:"updatedat"`
- Topic string `json:"topic"`
- From int64 `json:"from"`
- Realname string `json:"realname"`
- Avatar string `json:"avatar"`
- Content string `json:"content"`
- Role int `json:"role"`
- Head string `json:"head"`
- ChatId string `json:"chat_id"`
- }
- type ChatUser struct {
- Realname string `json:"realname"`
- Avatar string `json:"avatar"`
- Uid int `json:"uid"`
- }
- type Members struct {
- Id int
- Uid int
- ChatUid int
- Nickname string
- Avatar string
- CreateTime string
- }
- type InspectionDao struct {
- }
- func (insdao *InspectionDao) getUserFromDB(role int, uid int64) (ChatUser, error) {
- var member ChatUser
- var sql string
- if role == 1 {
- sql = "SELECT realname FROM `go_user` WHERE chat_uid = ?"
- } else {
- sql = "SELECT nickname AS realname, avatar FROM `members` WHERE chat_uid=? "
- }
- query := GetTiNodeDbInstance().Debug().Raw(sql, uid).Select("realname")
- err := query.Find(&member).Error
- if err == gorm.ErrRecordNotFound {
- err = nil
- }
- return member, nil
- }
- func (insdao *InspectionDao) GetUserFromRedis(role int, uid int64) (ChatUser, error) {
- var customer ChatUser
- var member Members
- ccd := InspectionDao{}
- //获取客服名字
- if role == 1 {
- key := "customer:info:" + strconv.FormatInt(uid, 10)
- redisCli := GetRedisInstance().Connect(1)
- info, err := redisCli.Get(key).Result()
- if err != nil {
- customer, errs := ccd.getUserFromDB(1, uid)
- if customer.Realname == "" || errs != nil {
- customer.Realname = "无此客服"
- }
- return customer, nil
- }
- err = json.Unmarshal([]byte(info), &customer)
- if err != nil {
- customer.Realname = "无此客服"
- }
- return customer, nil
- } else {
- leadsDao := LeadsDao{}
- //获取用户信息
- var mcacheKey = "member:info:*:" + strconv.FormatInt(uid, 10)
- uidStr := strconv.FormatInt(uid, 10)
- redis := GetRedisInstance().Connect(2)
- cacheKey := redis.Keys(mcacheKey).Val()
- if len(cacheKey) == 0 {
- //读库
- customer, errs := ccd.getUserFromDB(2, uid)
- if customer.Realname == "" || errs != nil {
- customer.Realname = UidSEncodeNoErr(uidStr)
- }
- //再从leads表获取用户名
- leadsInfo, _ := leadsDao.GetLeadsInfo(map[string]interface{}{"uid": uid})
- if leadsInfo.Name != "" {
- customer.Realname = leadsInfo.Name
- }
- return customer, nil
- }
- info, _ := redis.Get(cacheKey[0]).Result()
- json.Unmarshal([]byte(info), &member)
- customer.Realname = member.Nickname
- customer.Avatar = member.Avatar
- if member.Nickname == "" {
- customer.Realname = UidSEncodeNoErr(uidStr)
- }
- //再从leads表获取用户名
- leadsInfo, _ := leadsDao.GetLeadsInfo(map[string]interface{}{"uid": uid})
- if leadsInfo.Name != "" {
- customer.Realname = leadsInfo.Name
- }
- return customer, nil
- }
- return customer, nil
- }
- func (mesDao MessageDao) GetMessagesList(topic, sid, messageTime string, limit int) (mesList []Messages, err error) {
- res := GetTiNodeDbInstance().Debug().Table("messages").Joins("left join dellog on dellog.topic = messages.topic AND messages.seqid = dellog.low").Where("messages.deletedat is null AND messages.delid = 0 AND dellog.deletedfor IS NULL")
- if topic != "" {
- res = res.Where("messages.topic = ?", topic)
- }
- if sid != "" {
- res = res.Where("messages.chat_id = ?", sid)
- }
- if messageTime != "" {
- res = res.Where("messages.createdat < ?", messageTime)
- }
- res = res.Order("messages.id DESC").Limit(limit).Find(&mesList)
- if err != nil {
- return nil, err
- }
- ccd := InspectionDao{}
- var customer ChatUser
- for k, v := range mesList {
- customer.Realname = ""
- customer, _ := ccd.GetUserFromRedis(v.Role, v.From)
- mesList[k].Realname = customer.Realname
- mesList[k].Avatar = customer.Avatar
- //聊天内容去掉开头和结尾的""
- mesList[k].Content = strings.Trim(v.Content, "\"")
- }
- return
- }
- type ChatRecordDao struct {
- }
- type SemJsChatRecord struct {
- CHAT_ID int `gorm:"column:CHAT_ID"`
- SID string `gorm:"column:SID"`
- CREATE_TIME string `gorm:"column:CREATE_TIME"` //创建时间
- VISITOR_ID string `gorm:"column:VISITOR_ID"` //访客ID
- USER_ID string `gorm:"column:USER_ID"` //客服ID
- VISITOR_STATIC_ID string `gorm:"column:VISITOR_STATIC_ID"` //访客唯一标识
- INVITE_MODE int64 `gorm:"column:INVITE_MODE"`
- REFER_PAGE string `gorm:"column:REFER_PAGE" json:"refer_page"` //来源地址
- COMPANY_ID int `gorm:"column:COMPANY_ID"`
- CHAT_URL string `gorm:"column:CHAT_URL"` //对话发起页
- FIRST_URL string `gorm:"column:FIRST_URL"` //着陆页
- BIZ int `gorm:"column:BIZ"`
- CHANNLE_ID int `gorm:"column:CHANNLE_ID"`
- CATEGORY_ID int `gorm:"column:CATEGORY_ID"`
- END int `gorm:"column:END"`
- GrUserId string `json:"gr_user_id"` //growingIO生成的UserID标识符
- Topic string `json:"topic"` //会话名
- CustomerMsgNum int `json:"customer_msg_num"` //客服发送消息数
- UserMsgNum int `json:"user_msg_num"` //用户发送消息数
- UserFirstMsgTime string `json:"user_first_msg_time"` //用户第一条消息时间
- CustomerFirstReplyTime string `json:"customer_first_reply_time"` //客服第一次回复时间
- CallEndTime string `json:"call_end_time"`
- CallEndType string `json:"call_end_type"`
- Ip string `json:"ip"`
- Seqid int `json:"seqid"` //消息总条数
- Delid int `json:"delid"` //删除条数
- Tags string `json:"tags"` //标签
- LeadsId int `json:"leads_id"` //名片id
- LeadsName string `json:"leads_name"` //名片名称
- Telephone string `json:"telephone"` //电话
- Mobile string `json:"mobile"` //手机
- Industry string `json:"industry"` //客户行业
- Remark string `json:"remark"` //备注
- CreateUserId string `json:"create_user_id"` //创建人ID
- OwnerUserId string `json:"owner_user_id"` //负责人ID
- Uid string `json:"uid"` //用户uid
- MobileEncrypted string `json:"mobile_encrypted""` //手机号加密
- MobileMask string `json:"mobile_mask"` //手机号掩码
- Country int `json:"country"` //国家
- City int `json:"city"` //城市
- WeChat string `json:"we_chat"` //微信
- Qq string `json:"qq"` //qq
- CUid string `json:"cUid"`
- GroupId int `json:"group_id"` //技能组id
- GroupName string `json:"group_name"` //技能组名称
- Realname string `json:"realname"` //客服名称
- ChannelName string `json:"channel_name"`
- CategoryName string `json:"category_name"`
- VisitorName string `json:"visitor_name"`
- }
- func (chatdao *ChatRecordDao) GetChatRecordByChatId(chatId string) (info SemJsChatRecord, err error) {
- err = GetTiNodeDbInstance().Debug().Table("sem_js_chat_record").Where("SID = ?", chatId).First(&info).Error
- if err != nil {
- return
- }
- return
- }
- /**
- * 获取sem_js_chat_record 详情
- * @apiParam {string} topic
- * @apiParam {string} sid
- */
- func (chatdao *ChatRecordDao) GetGroupByChatRecordLists(topic, sid string) (list []SemJsChatRecord, err error) {
- sql := GetTiNodeDbInstance().Debug().Table("sem_js_chat_record")
- if topic != "" {
- sql = sql.Where("topic = ?", topic)
- }
- if sid != "" {
- sql = sql.Where("SID = ?", sid)
- }
- err = sql.Find(&list).Error
- return
- }
|