bsi_activity.go
5.6 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
176
177
178
179
180
181
182
183
184
package domain
import (
"context"
"fmt"
"github.com/zeromicro/go-zero/core/collection"
"gitlab.fjmaimaimai.com/allied-creation/sumifcc/pkg/transaction"
"math/rand"
"time"
)
type BsiActivity struct {
Id int64 `json:"id,optional"` // 唯一标识
CompanyId int64 `json:"companyId,optional"` // 公司ID
Issue string `json:"issue"` // 活动主题
Remark string `json:"remark,optional"` // 活动备注
ActivateType int `json:"activateType"` // 激活类型 1:手动 2:指定日期
BeginAt int64 `json:"beginAt,optional"` // 活动开始时间(激活类型:2有效)
EndAt int64 `json:"endAt,optional"` // 活动结束时间(激活类型:2有效)
Status int `json:"status,optional"` // 活动状态 0:未开始 1:已开始 2:结束
ActivityConfig ActivityConfig `json:"activityConfig,optional"` // 活动配置
CreatedAt int64
UpdatedAt int64
DeletedAt int64
Version int
}
const (
ActivityWaiting = 0
ActivityOpening = 1
ActivityClosed = 2
)
const (
OpenByManual = 1 // 手动开启
OpenBySpecificTime = 2 // 特定时间
)
type BsiActivityRepository interface {
Insert(ctx context.Context, conn transaction.Conn, dm *BsiActivity) (*BsiActivity, error)
Update(ctx context.Context, conn transaction.Conn, dm *BsiActivity) (*BsiActivity, error)
UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *BsiActivity) (*BsiActivity, error)
Delete(ctx context.Context, conn transaction.Conn, dm *BsiActivity) (*BsiActivity, error)
FindOne(ctx context.Context, conn transaction.Conn, id int64) (*BsiActivity, error)
Find(ctx context.Context, conn transaction.Conn, companyId int64, queryOptions map[string]interface{}) (int64, []*BsiActivity, error)
}
func (m *BsiActivity) Identify() interface{} {
if m.Id == 0 {
return nil
}
return m.Id
}
func (m *BsiActivity) ResolveActivityStatus() int {
if m.Status == ActivityClosed {
return m.Status
}
if m.IsOpen() {
return ActivityOpening
}
if m.IsClosed() {
return ActivityClosed
}
return m.Status
}
func (m *BsiActivity) IsOpen() bool {
if m.ActivateType == OpenByManual {
if m.Status == ActivityOpening {
return true
}
}
if m.ActivateType == OpenBySpecificTime {
if m.BeginAt <= time.Now().Unix() && m.EndAt > time.Now().Unix() {
return true
}
}
return false
}
func (m *BsiActivity) IsClosed() bool {
if m.NeedClose() {
return true
}
if m.Status == ActivityClosed {
return false
}
return false
}
func (m *BsiActivity) NeedClose() bool {
if m.Status == ActivityClosed {
return false
}
if m.ActivateType == OpenBySpecificTime {
if m.EndAt < time.Now().Unix() {
return true
}
}
return false
}
func (m *BsiActivity) RandomGreeting() string {
if m.ActivityConfig.ScreenConfig == nil {
return ""
}
if len(m.ActivityConfig.ScreenConfig.Greetings) == 0 {
return ""
}
idx := rand.Intn(len(m.ActivityConfig.ScreenConfig.Greetings))
return m.ActivityConfig.ScreenConfig.Greetings[idx]
}
type ActivityConfig struct {
H5Config *H5Config `json:"h5Config"` // H5页面配置
Products []Product `json:"products,optional"` // 产品列表
QuestionnaireConfig *QuestionnaireConfig `json:"questionnaireConfig"` // 问卷配置
ScreenConfig *ScreenConfig `json:"screenConfig"` // 大屏配置
DefaultUsers []UserInfo `json:"defaultUsers"` // 预设用户(名字不允许重复)
}
func (item ActivityConfig) Valid() error {
usersDup := collection.NewSet()
for _, u := range item.DefaultUsers {
if !usersDup.Contains(u.Name) {
usersDup.Add(u.Name)
continue
}
return fmt.Errorf("预设用户名重复`%v`", u.Name)
}
productDup := collection.NewSet()
for _, u := range item.Products {
if !productDup.Contains(u.Name) {
productDup.Add(u.Name)
continue
}
return fmt.Errorf("商品名重复`%v`", u.Name)
}
return nil
}
type H5Config struct {
WebPageTitle string `json:"webPageTitle"` // 网页标题配置
Announcement string `json:"announcement,optional"` // 公告内容
}
type Product struct {
// Id string `json:"id,optional"` // 标识
Name string `json:"name,optional"` // 产品名称
Cover string `json:"cover,optional"` // 产品封面图片
Desc string `json:"desc,optional"` // 产品简介
}
type QuestionnaireConfig struct {
WebPageTitle string `json:"webPageTitle"` // 网页标题配置
Announcement string `json:"announcement,optional"` // 公告内容
Questions []QuestionItem `json:"questions,optional"` // 问题列表
}
type QuestionItem struct {
Label string `json:"label"` // 字段名称
Product string `json:"product,optional"` // 商品(非必填)
Type int `json:"type"` // 0:文本 1:单选
CheckList []CheckItem `json:"checkList"`
}
type CheckItem struct {
Value string `json:"value"` // 值 例如:500
ValueType int `json:"valueType,optional"` // 0.人民币
}
type ScreenConfig struct {
Background string `json:"background"` // 背景图片
IsShowInteractiveNum bool `json:"isShowInteractiveNum"` // 是否展示互动数 true:展示 false:不展示
Greetings []string `json:"greetings"` // 祝福语
}
type UserInfo struct {
Name string `json:"name"` // 名称
Avatar string `json:"avatar,optional"` // 头像
Title string `json:"title,optional"` // 称谓
}