user_msg.go
5.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
package models
import (
"fmt"
"gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego"
"opp/internal/utils"
"time"
"github.com/astaxie/beego/orm"
)
type UserMsg struct {
Id int64 `orm:"column(id);pk" description:"消息表id"`
CompanyId int64 `orm:"column(company_id)" description:"公司编号"`
ReceiveUserId int64 `orm:"column(receive_user_id)" description:"接收用户id"`
MsgType int `orm:"column(msg_type)" description:"消息类型 1.公司公告 2.表彰通知 4.互动消息 8.机会审核"`
Message string `orm:"column(message)" description:"消息内容"`
SourceId int64 `orm:"column(source_id)" description:"来源id (机会编号 /评论编号)"`
SourceType int `orm:"column(source_type)"`
IsPublic int8 `orm:"column(is_public)" description:"1:公开 0:不公开"`
IsRead int8 `orm:"column(is_read)" description:"1:已读 0:未读"`
CreateAt time.Time `orm:"column(create_at);type(timestamp);auto_now" description:"创建时间"`
}
const (
MsgTypeBulletin = 1 //公告
MsgTypeCommend = 2 //表彰
MsgTypeInteraction = 4 //互动消息
MsgTypeAudit = 8 //机会审核
)
const (
SourceTypeChance = 1
SourceTypeComment = 2
SourceTypeBulletin = 3
)
const (
//用户未读消息列表
SqlUserMsgsUnRead = "select * from user_msg where company_id=? and receive_user_id=? and msg_type=? and is_read=0 order by create_at desc" //所有未读消息
//用户未读消息 - 单个
SqlUserMsgUnRead = "select * from user_msg where source_id=? and company_id=? and receive_user_id=? and msg_type=? and is_read=0 order by create_at desc" //特定未读消息
//用户消息 - 按 1.源id 2.接收者id 3.消息类型
SqlUserMsg = "select * from user_msg where source_id=? and receive_user_id=? and msg_type=? " //特定未读消息
)
func (t *UserMsg) TableName() string {
return "user_msg"
}
func init() {
orm.RegisterModel(new(UserMsg))
}
// AddUserMsg insert a new UserMsg into database and returns
// last inserted Id on success.
func AddUserMsg(m *UserMsg) (id int64, err error) {
o := orm.NewOrm()
id, err = o.Insert(m)
return
}
// GetUserMsgById retrieves UserMsg by Id. Returns error if
// Id doesn't exist
func GetUserMsgById(id int64) (v *UserMsg, err error) {
o := orm.NewOrm()
v = &UserMsg{Id: id}
if err = o.Read(v); err == nil {
return v, nil
}
return nil, err
}
// UpdateUserMsg updates UserMsg by Id and returns error if
// the record to be updated doesn't exist
func UpdateUserMsgById(m *UserMsg) (err error) {
o := orm.NewOrm()
v := UserMsg{Id: m.Id}
// ascertain id exists in the database
if err = o.Read(&v); err == nil {
var num int64
if num, err = o.Update(m); err == nil {
fmt.Println("Number of records updated in database:", num)
}
}
return
}
// DeleteUserMsg deletes UserMsg by Id and returns error if
// the record to be deleted doesn't exist
func DeleteUserMsg(id int64) (err error) {
o := orm.NewOrm()
v := UserMsg{Id: id}
// ascertain id exists in the database
if err = o.Read(&v); err == nil {
var num int64
if num, err = o.Delete(&UserMsg{Id: id}); err == nil {
fmt.Println("Number of records deleted in database:", num)
}
}
return
}
//消息总数
func GetUserMsgTotals(userId int64, companyId int64, msgType int, v interface{}) (err error) {
o := orm.NewOrm()
sql := `select COUNT(*) as total,msg_type from user_msg
where (msg_type & ?)>0 and receive_user_id = ? and is_public=1 and is_read=0 and company_id=?
GROUP BY msg_type`
if _, err = o.Raw(sql, msgType, userId, companyId).QueryRows(v); err == nil {
return
}
return
}
//标记消息已读
func UpdateUserMsgSetRead(userId int64, companyId int64, msgType int, msgId int64) (err error) {
o := orm.NewOrm()
sql := `update user_msg set is_read = 1
where receive_user_id = ? and company_id=? and is_public=1 `
if msgType > 0 {
sql += fmt.Sprintf(" and (msg_type & %v)>0", msgType)
}
if msgId > 0 {
sql += fmt.Sprintf(" and id=%v", msgId)
}
if _, err = o.Raw(sql, userId, companyId).Exec(); err != nil {
return
}
return
}
//获取用户消息列表
func GetUserMsgs(userId, companyId int64, msgType int, sourceType int, lastId int64, pageSize int) (v []*UserMsg, total int, err error) {
sql := mybeego.NewSqlExutor().Table("user_msg").Order("create_at desc")
if lastId > 0 {
sql.Where(fmt.Sprintf("id>%d", lastId))
}
if msgType > 0 {
sql.Where(fmt.Sprintf("msg_type=%d", msgType))
}
sql.Where(fmt.Sprintf("receive_user_id=%d", userId))
sql.Where(fmt.Sprintf("company_id=%d", companyId))
if sourceType > 0 {
sql.Where(fmt.Sprintf("source_type=%d", sourceType))
}
if pageSize > 0 {
sql.Limit(0, pageSize)
}
if total, err = sql.Querys(&v); err == nil {
return
}
return
}
//获取公告消息列表
func GetUserMsgsBulletin(userId, companyId int64, msgType int, lastId int64, pageSize int, v interface{}) (total int, err error) {
sql := `select b.id,b.title,unix_timestamp(b.update_at) update_at,a.is_read `
sqlCount := `select count(0) `
where := `from user_msg a,bulletin b where a.receive_user_id =? and a.company_id=? and a.source_id = b.id and a.msg_type=? and a.company_id=? and b.status=2 `
sqlCount += where
if err = utils.ExecuteQueryOne(&total, sqlCount, userId, companyId, msgType, companyId); err != nil {
return
}
if lastId > 0 {
where += fmt.Sprintf(` and b.id>%v`, lastId)
}
if v == nil {
return
}
where += ` order by b.update_at desc`
sql += where + " limit ?"
if err = utils.ExecuteQueryAll(v, sql, userId, companyId, msgType, companyId, pageSize); err != nil {
return
}
return
}