-
Notifications
You must be signed in to change notification settings - Fork 264
/
mss.go
executable file
·215 lines (195 loc) · 5.45 KB
/
mss.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
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
/**
* Copyright 2015 @ 56x.net.
* name : MssManager
* author : jarryliu
* date : 2015-07-26 23:08
* description :
* history :
*/
package mss
import (
"encoding/json"
"time"
mss "github.com/ixre/go2o/core/domain/interface/message"
"github.com/ixre/go2o/core/domain/interface/message/notify"
"github.com/ixre/go2o/core/domain/tmp"
)
var _ mss.IUserMessageManager = new(userMessageManagerImpl)
var _ mss.IMessageManager = new(messageManagerImpl)
type messageManagerImpl struct {
rep mss.IMssRepo
}
func NewMessageManager(rep mss.IMssRepo) mss.IMessageManager {
return &messageManagerImpl{
rep: rep,
}
}
// 创建消息模版对象
func (mm *messageManagerImpl) CreateMessage(msg *mss.Message,
content interface{}) mss.IMessage {
m := newMessage(msg, mm.rep).(*messageImpl)
if content != nil {
switch m.Type() {
case notify.TypeEmailMessage:
return newMailMessage(m, content.(*notify.MailMessage), m.rep)
case notify.TypeSiteMessage:
return newSiteMessage(m, content.(*notify.SiteMessage), m.rep)
case notify.TypePhoneMessage:
return newPhoneMessage(m, content.(*notify.PhoneMessage), m.rep)
}
} else {
if m.Type() == notify.TypeEmailMessage ||
m.Type() == notify.TypeSiteMessage ||
m.Type() == notify.TypePhoneMessage {
return m
}
}
panic(mss.ErrNotSupportMessageType)
}
// 创建消息模版对象
func (m *messageManagerImpl) GetMessage(id int32) mss.IMessage {
if msg := m.rep.GetMessage(id); msg != nil {
con := m.rep.GetMessageContent(msg.Id)
switch msg.Type {
case notify.TypePhoneMessage:
v := notify.PhoneMessage(con.Data)
return m.CreateMessage(msg, &v)
case notify.TypeEmailMessage:
v := notify.MailMessage{}
json.Unmarshal([]byte(con.Data), &v)
return m.CreateMessage(msg, &v)
case notify.TypeSiteMessage:
v := notify.SiteMessage{}
json.Unmarshal([]byte(con.Data), &v)
return m.CreateMessage(msg, &v)
}
}
return nil
}
// 创建用于会员通知的消息对象
func (m *messageManagerImpl) CreateMemberNotifyMessage(memberId int64, msgType int,
content interface{}) mss.IMessage {
msg := &mss.Message{
Type: msgType,
UseFor: mss.UseForNotify,
SenderRole: mss.RoleSystem,
SenderId: 0,
To: []mss.User{
{
Id: int32(memberId),
Role: mss.RoleMember,
},
},
CreateTime: time.Now().Unix(),
}
return m.CreateMessage(msg, content)
}
// 获取聊天会话编号
func (m *messageManagerImpl) GetChatSessionId(senderRole int,
senderId int32, toRole int, toId int32) int32 {
var msgId int32 = 0
tmp.Db().ExecScalar(`SELECT msg_list.id FROM msg_list INNER JOIN msg_to
ON msg_to.msg_id = msg_list.id WHERE use_for= $1 AND msg_type= $2 AND sender_role= $3
AND sender_id= $4 AND to_role= $5 AND to_id= $6`, &msgId, mss.UseForChat,
notify.TypeSiteMessage, senderRole, senderId, toRole, toId)
return msgId
}
// 创建聊天会话
func (m *messageManagerImpl) CreateChatSession(senderRole int, senderId int32,
toRole int, toId int32) (mss.Message, error) {
msgId := m.GetChatSessionId(senderRole, senderId, toRole, toId)
if msgId > 0 {
return m.GetMessage(msgId).GetValue(), nil
}
msg := mss.Message{
Type: notify.TypeSiteMessage,
// 消息用途
UseFor: mss.UseForChat,
// 发送人角色
SenderRole: senderRole,
// 发送人编号
SenderId: senderId,
// 发送的目标
To: []mss.User{
{
Id: toId,
Role: toRole,
},
},
// 发送的用户角色
ToRole: -1,
// 全系统接收,1为是,0为否
AllUser: -1,
// 是否只能阅读
Readonly: 0,
// 创建时间
CreateTime: time.Now().Unix(),
}
im := m.CreateMessage(&msg, notify.SiteMessage{
Subject: "chat",
Message: "chat",
})
id, err := im.Save()
msg.Id = id
return msg, err
}
type userMessageManagerImpl struct {
_appUserId int64
_userRole int //todo: role
_mssRepo mss.IMssRepo
_mailTemplates []*mss.MailTemplate
_config *mss.Config
}
func NewMssManager(appUserId int64, rep mss.IMssRepo) mss.IUserMessageManager {
return &userMessageManagerImpl{
_appUserId: appUserId,
_mssRepo: rep,
}
}
// 获取聚合根编号
func (u *userMessageManagerImpl) GetAggregateRootId() int {
return int(u._appUserId)
}
// 获取配置
func (u *userMessageManagerImpl) GetConfig() mss.Config {
if u._config == nil {
u._config = u._mssRepo.GetConfig(u._appUserId)
}
return *u._config
}
// 保存消息设置
func (u *userMessageManagerImpl) SaveConfig(conf *mss.Config) error {
err := u._mssRepo.SaveConfig(u._appUserId, conf)
if err == nil {
u._config = nil
}
return err
}
// 获取邮箱模板
func (u *userMessageManagerImpl) GetMailTemplate(id int32) *mss.MailTemplate {
return u._mssRepo.GetMailTemplate(u._appUserId, id)
}
// 保存邮箱模版
func (u *userMessageManagerImpl) SaveMailTemplate(v *mss.MailTemplate) (int32, error) {
v.MerchantId = u._appUserId
v.UpdateTime = time.Now().Unix()
if v.CreateTime == 0 {
v.CreateTime = v.UpdateTime
}
return u._mssRepo.SaveMailTemplate(v)
}
// 删除邮件模板
func (u *userMessageManagerImpl) DeleteMailTemplate(id int32) error {
//mchId := this._partner.GetAggregateRootId()
//if this._partnerRepo.CheckKvContainValue(mchId, "kvset", strconv.Itoa(id), "mail") > 0 {
// return mss.ErrTemplateUsed
//}
return u._mssRepo.DeleteMailTemplate(u._appUserId, int64(id))
}
// 获取所有的邮箱模版
func (u *userMessageManagerImpl) GetMailTemplates() []*mss.MailTemplate {
if u._mailTemplates == nil {
u._mailTemplates = u._mssRepo.GetMailTemplates(u._appUserId)
}
return u._mailTemplates
}