-
Notifications
You must be signed in to change notification settings - Fork 0
/
message_update.go
136 lines (125 loc) · 5.13 KB
/
message_update.go
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
package UserMessage
import (
"errors"
"fmt"
AnalysisAny2 "github.com/fotomxq/weeekj_core/v5/analysis/any2"
BaseConfig "github.com/fotomxq/weeekj_core/v5/base/config"
CoreSQL "github.com/fotomxq/weeekj_core/v5/core/sql"
CoreSQLConfig "github.com/fotomxq/weeekj_core/v5/core/sql/config"
Router2SystemConfig "github.com/fotomxq/weeekj_core/v5/router2/system_config"
"github.com/lib/pq"
"time"
)
// ArgsUpdateByID 更新消息内容参数
// 只有发送人在草稿状态下可以编辑消息
type ArgsUpdateByID struct {
//ID
ID int64 `db:"id" json:"id" check:"id"`
//发送人ID
// 用于验证
SendUserID int64 `db:"send_user_id" json:"sendUserID" check:"id" empty:"true"`
//接收人
ReceiveUserID int64 `db:"receive_user_id" json:"receiveUserID" check:"id"`
//预计发送时间
WaitSendAt time.Time `db:"wait_send_at" json:"waitSendAt" check:"isoTime" empty:"true"`
//标题
Title string `db:"title" json:"title" check:"des" min:"1" max:"300"`
//内容
Content string `db:"content" json:"content" check:"des" min:"1" max:"1500"`
//附件文件列
Files pq.Int64Array `db:"files" json:"files" check:"ids" empty:"true"`
//扩展参数
Params CoreSQLConfig.FieldsConfigsType `db:"params" json:"params"`
}
// UpdateByID 更新消息内容
// 必须是草稿状态
func UpdateByID(args *ArgsUpdateByID) (err error) {
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE user_message SET update_at = NOW(), wait_send_at = :wait_send_at, title = :title, content = :content, files = :files, params = :params WHERE id = :id AND (:send_user_id < 1 OR send_user_id = :send_user_id) AND (:receive_user_id < 1 OR receive_user_id = :receive_user_id) AND status = 0", args)
if err != nil {
return
}
deleteMessageCache(args.ID)
return
}
// ArgsUpdatePost 推送提交参数
type ArgsUpdatePost struct {
//ID
ID int64 `db:"id" json:"id" check:"id"`
//发送人ID
// 用于验证
SendUserID int64 `db:"send_user_id" json:"sendUserID" check:"id" empty:"true"`
}
// UpdatePost 推送提交
func UpdatePost(args *ArgsUpdatePost) (err error) {
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE user_message SET status = 1 WHERE id = :id AND (:send_user_id < 1 OR send_user_id = :send_user_id) AND status = 0", args)
if err != nil {
return
}
deleteMessageCache(args.ID)
//当系统不需要人工审核时,进行自动审核处理
userMessageAudit, _ := BaseConfig.GetDataBool("UserMessageAudit")
if err != nil {
userMessageAudit = true
}
if userMessageAudit {
pushNatsAutoAudit(args.ID)
}
return
}
// ArgsUpdateAudit 审核消息参数
type ArgsUpdateAudit struct {
//ID
ID int64 `db:"id" json:"id" check:"id"`
}
// UpdateAudit 审核消息
func UpdateAudit(args *ArgsUpdateAudit) (err error) {
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE user_message SET status = 2 WHERE id = :id AND status = 1", args)
if err != nil {
return
}
deleteMessageCache(args.ID)
return
}
// ArgsUpdateReceiveRead 已经阅读参数
type ArgsUpdateReceiveRead struct {
//ID
ID int64 `db:"id" json:"id" check:"id"`
//接收人
ReceiveUserID int64 `db:"receive_user_id" json:"receiveUserID" check:"id" empty:"true"`
}
// UpdateReceiveRead 已经阅读
func UpdateReceiveRead(args *ArgsUpdateReceiveRead) (err error) {
_, err = CoreSQL.UpdateOneSoft(Router2SystemConfig.MainDB.DB, "UPDATE user_message SET receive_read_at = NOW() WHERE id = :id AND (:receive_user_id < 1 OR receive_user_id = :receive_user_id) AND status = 2 AND receive_read_at < to_timestamp(1000000)", args)
if err != nil {
return
}
deleteMessageCache(args.ID)
if args.ReceiveUserID > 0 {
var countUnRead int64
_ = Router2SystemConfig.MainDB.Get(&countUnRead, "SELECT COUNT(id) FROM user_message WHERE receive_user_id = $1 AND receive_delete_at < to_timestamp(1000000) AND receive_read_at < to_timestamp(1000000)", args.ReceiveUserID)
AnalysisAny2.AppendData("re", "user_message_receive_unread_count", time.Time{}, 0, args.ReceiveUserID, args.ReceiveUserID, 0, 0, countUnRead)
var countRead int64
_ = Router2SystemConfig.MainDB.Get(&countRead, "SELECT COUNT(id) FROM user_message WHERE receive_user_id = $1 AND receive_read_at > to_timestamp(1000000)", args.ReceiveUserID)
AnalysisAny2.AppendData("re", "user_message_receive_read_count", time.Time{}, 0, args.ReceiveUserID, args.ReceiveUserID, 0, 0, countRead)
}
return
}
// ArgsUpdateReceiveReads 批量设置已读参数
type ArgsUpdateReceiveReads struct {
//IDs
IDs pq.Int64Array `db:"ids" json:"ids" check:"ids"`
//接收人
ReceiveUserID int64 `db:"receive_user_id" json:"receiveUserID" check:"id" empty:"true"`
}
// UpdateReceiveReads 批量设置已读
func UpdateReceiveReads(args *ArgsUpdateReceiveReads) (err error) {
_, err = CoreSQL.UpdateOne(Router2SystemConfig.MainDB.DB, "UPDATE user_message SET receive_read_at = NOW() WHERE id = ANY(:ids) AND (:receive_user_id < 1 OR receive_user_id = :receive_user_id) AND status = 2 AND receive_read_at < to_timestamp(1000000)", args)
if err != nil {
err = errors.New(fmt.Sprint("update failed, ", err, ", ids: ", args.IDs, ", receive_user_id: ", args.ReceiveUserID))
return
}
for _, v := range args.IDs {
deleteMessageCache(v)
}
return
}