292 lines
7.7 KiB
Go
292 lines
7.7 KiB
Go
package models
|
||
|
||
import (
|
||
"kefu/tools"
|
||
"time"
|
||
)
|
||
|
||
type Visitor struct {
|
||
Model
|
||
Name string `json:"name"`
|
||
RealName string `json:"real_name"`
|
||
Avator string `json:"avator"`
|
||
SourceIp string `json:"source_ip"`
|
||
ToId string `json:"to_id"`
|
||
VisitorId string `json:"visitor_id"`
|
||
Status uint `json:"status"`
|
||
State string `json:"state"`
|
||
Refer string `json:"refer"`
|
||
City string `json:"city"`
|
||
ClientIp string `json:"client_ip"`
|
||
Extra string `json:"extra"`
|
||
EntId string `json:"ent_id"`
|
||
VisitNum uint `json:"visit_num"`
|
||
}
|
||
type VisitorExt struct {
|
||
ID uint `gorm:"primary_key" json:"id"`
|
||
VisitorId string `json:"visitor_id"`
|
||
EntId string `json:"ent_id"`
|
||
Url string `json:"url"`
|
||
Refer string `json:"refer"`
|
||
ClientIp string `json:"client_ip"`
|
||
Title string `json:"title"`
|
||
City string `json:"city"`
|
||
Ua string `json:"ua"`
|
||
CreatedAt time.Time `json:"created_at"`
|
||
ReferUrl string `json:"refer_url"`
|
||
Language string `json:"language"`
|
||
}
|
||
|
||
func CreateVisitor(name, avator, sourceIp, toId, visitorId, refer, city, clientIp, entId, extra string) *Visitor {
|
||
v := &Visitor{
|
||
Name: name,
|
||
Avator: avator,
|
||
SourceIp: sourceIp,
|
||
ToId: toId,
|
||
VisitorId: visitorId,
|
||
Status: 1,
|
||
Refer: refer,
|
||
City: city,
|
||
ClientIp: clientIp,
|
||
Extra: extra,
|
||
EntId: entId,
|
||
VisitNum: 1,
|
||
}
|
||
v.UpdatedAt = time.Now()
|
||
DB.Create(v)
|
||
return v
|
||
}
|
||
|
||
// 添加
|
||
func (this *Visitor) AddVisitor() {
|
||
DB.Create(this)
|
||
}
|
||
|
||
func AddVisitorExt(visitorId, refer, ua, url, referUrl, title, clientIp, city, entId, language string) {
|
||
v := &VisitorExt{
|
||
VisitorId: visitorId,
|
||
Refer: refer,
|
||
Ua: ua,
|
||
Url: url,
|
||
ReferUrl: referUrl,
|
||
CreatedAt: time.Now(),
|
||
Title: title,
|
||
ClientIp: clientIp,
|
||
City: city,
|
||
EntId: entId,
|
||
Language: language,
|
||
}
|
||
DB.Model(&VisitorExt{}).Create(v)
|
||
}
|
||
func CountVisitorExtByVistorId(visitorId string) uint {
|
||
var v uint
|
||
DB.Model(&VisitorExt{}).Where("visitor_id = ?", visitorId).Count(&v)
|
||
return v
|
||
}
|
||
func FindVisitorExtByVistorId(visitorId string, page uint, pagesize uint) []VisitorExt {
|
||
if page <= 0 {
|
||
page = 1
|
||
}
|
||
offset := (page - 1) * pagesize
|
||
if offset <= 0 {
|
||
offset = 0
|
||
}
|
||
var v []VisitorExt
|
||
DB.Model(&VisitorExt{}).Where("visitor_id = ?", visitorId).Order("id desc").Offset(offset).Limit(pagesize).Find(&v)
|
||
return v
|
||
}
|
||
func CountVisitorExtByWhere(query interface{}, args ...interface{}) uint {
|
||
var v uint
|
||
DB.Model(&VisitorExt{}).Where(query, args...).Count(&v)
|
||
return v
|
||
}
|
||
func FindVisitorExtByWhere(page uint, pagesize uint, query interface{}, args ...interface{}) []VisitorExt {
|
||
if page <= 0 {
|
||
page = 1
|
||
}
|
||
offset := (page - 1) * pagesize
|
||
if offset <= 0 {
|
||
offset = 0
|
||
}
|
||
var v []VisitorExt
|
||
DB.Model(&VisitorExt{}).Where(query, args...).Order("id desc").Offset(offset).Limit(pagesize).Find(&v)
|
||
return v
|
||
}
|
||
func FindVisitorByVistorId(visitorId string) Visitor {
|
||
var v Visitor
|
||
DB.Where("visitor_id = ?", visitorId).First(&v)
|
||
return v
|
||
}
|
||
func FindVisitorsByWhere(page uint, pagesize uint, query interface{}, args ...interface{}) []Visitor {
|
||
offset := (page - 1) * pagesize
|
||
if offset < 0 {
|
||
offset = 0
|
||
}
|
||
var visitors []Visitor
|
||
DB.Where(query, args...).Offset(offset).Limit(pagesize).Order("status desc, updated_at desc").Find(&visitors)
|
||
return visitors
|
||
}
|
||
func FindVisitorsByKefuId(page uint, pagesize uint, kefuId string) []Visitor {
|
||
offset := (page - 1) * pagesize
|
||
if offset < 0 {
|
||
offset = 0
|
||
}
|
||
var visitors []Visitor
|
||
DB.Where("to_id=?", kefuId).Offset(offset).Limit(pagesize).Order("status desc, updated_at desc").Find(&visitors)
|
||
return visitors
|
||
}
|
||
func FindVisitorsByEntId(page uint, pagesize uint, entId string, orderBy string, search string, args ...interface{}) []Visitor {
|
||
offset := (page - 1) * pagesize
|
||
if offset < 0 {
|
||
offset = 0
|
||
}
|
||
var visitors []Visitor
|
||
query := "ent_id=? "
|
||
if search != "" {
|
||
query += search
|
||
}
|
||
entArgs := []interface{}{entId}
|
||
entArgs = append(entArgs, args...)
|
||
DB.Where(query, entArgs...).Offset(offset).Limit(pagesize).Order(orderBy).Find(&visitors)
|
||
return visitors
|
||
}
|
||
func FindVisitorsOnline() []Visitor {
|
||
var visitors []Visitor
|
||
DB.Where("status = ?", 1).Find(&visitors)
|
||
return visitors
|
||
}
|
||
func UpdateVisitorVisitorId(visitorId, newId string) int64 {
|
||
visitor := Visitor{
|
||
VisitorId: newId,
|
||
}
|
||
db := DB.Model(&visitor).Where("visitor_id = ?", visitorId).Update(visitor)
|
||
return db.RowsAffected
|
||
}
|
||
func UpdateVisitorStatus(visitorId string, status uint) int64 {
|
||
visitor := Visitor{
|
||
Status: status,
|
||
}
|
||
db := DB.Model(&visitor).Where("visitor_id = ?", visitorId).Update(visitor)
|
||
return db.RowsAffected
|
||
}
|
||
func UpdateVisitorKefuName(visitorId string, kefuName string) int64 {
|
||
visitor := Visitor{
|
||
ToId: kefuName,
|
||
}
|
||
db := DB.Model(&visitor).Where("visitor_id = ?", visitorId).Update(visitor)
|
||
return db.RowsAffected
|
||
}
|
||
func UpdateVisitorRealName(name, EntId, visitorId string) {
|
||
visitor := Visitor{
|
||
RealName: name,
|
||
Name: name,
|
||
}
|
||
DB.Model(&visitor).Where("visitor_id = ? and ent_id = ?", visitorId, EntId).Update(visitor)
|
||
}
|
||
func UpdateVisitor(entId, name, avator, visitorId string,
|
||
toId string, status uint, clientIp string, sourceIp string,
|
||
refer, extra, city string,
|
||
visitNum uint) {
|
||
visitor := &Visitor{
|
||
ToId: toId,
|
||
Status: status,
|
||
ClientIp: clientIp,
|
||
SourceIp: sourceIp,
|
||
Refer: refer,
|
||
Extra: extra,
|
||
Name: name,
|
||
Avator: avator,
|
||
EntId: entId,
|
||
VisitNum: visitNum,
|
||
City: city,
|
||
}
|
||
visitor.UpdatedAt = time.Now()
|
||
DB.Model(visitor).Where("visitor_id = ?", visitorId).Update(visitor)
|
||
}
|
||
func (this *Visitor) SaveVisitor(query interface{}, args ...interface{}) {
|
||
DB.Model(&Visitor{}).Where(query, args...).Update(this)
|
||
}
|
||
func UpdateVisitorKefu(visitorId string, kefuId string) {
|
||
visitor := Visitor{}
|
||
DB.Model(&visitor).Where("visitor_id = ?", visitorId).Update("to_id", kefuId)
|
||
}
|
||
|
||
// 根据条件查visitors
|
||
func FindVisitorsByCondition(query interface{}, args ...interface{}) []Visitor {
|
||
var visitors []Visitor
|
||
DB.Where(query, args...).Find(&visitors)
|
||
return visitors
|
||
}
|
||
|
||
// 根据条件查visitor
|
||
func FindVisitorByCondition(query interface{}, args ...interface{}) Visitor {
|
||
var visitor Visitor
|
||
DB.Where(query, args...).First(&visitor)
|
||
return visitor
|
||
}
|
||
|
||
// 查询条数
|
||
func CountVisitors(query interface{}, args ...interface{}) uint {
|
||
var count uint
|
||
DB.Model(&Visitor{}).Where(query, args...).Count(&count)
|
||
return count
|
||
}
|
||
|
||
// 查询每天条数
|
||
type EveryDayNum struct {
|
||
Day string `json:"day"`
|
||
Num int64 `json:"num"`
|
||
}
|
||
|
||
func CountVisitorsEveryDay(toId string) []EveryDayNum {
|
||
var results []EveryDayNum
|
||
DB.Raw("select DATE_FORMAT(created_at,'%y-%m-%d') as day ,"+
|
||
"count(*) as num from visitor where to_id=? group by day order by day desc limit 50",
|
||
toId).Scan(&results)
|
||
return results
|
||
}
|
||
|
||
// 查询条数
|
||
func CountVisitorsByKefuId(kefuId string) uint {
|
||
var count uint
|
||
DB.Model(&Visitor{}).Where("to_id=?", kefuId).Count(&count)
|
||
return count
|
||
}
|
||
|
||
// 判断是否给访客机器人回复
|
||
// 判断当前访客state字段,第一位是否为2
|
||
func CheckVisitorRobotReply(state string) bool {
|
||
s := tools.SubStr(state, 0, 1)
|
||
if s != "2" {
|
||
return true
|
||
}
|
||
return false
|
||
}
|
||
|
||
// 修改访客状态位
|
||
func UpdateVisitorState(visitorId, state string) int64 {
|
||
visitor := Visitor{
|
||
State: state,
|
||
}
|
||
db := DB.Model(&visitor).Where("visitor_id = ?", visitorId).Update(visitor)
|
||
return db.RowsAffected
|
||
}
|
||
|
||
// 查询条数
|
||
func CountVisitorsByEntid(entId string, search string, args ...interface{}) uint {
|
||
var count uint
|
||
query := "ent_id=? "
|
||
if search != "" {
|
||
query += search
|
||
}
|
||
entArgs := []interface{}{entId}
|
||
entArgs = append(entArgs, args...)
|
||
DB.Model(&Visitor{}).Where(query, entArgs...).Count(&count)
|
||
return count
|
||
}
|
||
|
||
// 删除访客
|
||
func DelVisitor(query interface{}, args ...interface{}) {
|
||
DB.Where(query, args...).Delete(&Visitor{})
|
||
}
|