Browse Source

活动编辑接口

庄逸洲 4 years ago
parent
commit
4a81353301

+ 6 - 0
controllers/base_controller.go View File

@@ -2,6 +2,7 @@ package controllers
2 2
 
3 3
 import (
4 4
 	service "SCRM/service/admin_service"
5
+	"SCRM/utils"
5 6
 
6 7
 	"github.com/astaxie/beego"
7 8
 )
@@ -21,20 +22,25 @@ func (this *BaseController) GetAdminUserInfo() *service.AdminUserInfo {
21 22
 
22 23
 func (this *BaseController) ErrorLog(format string, a ...interface{}) {
23 24
 	//beego.Error(fmt.Sprintf(format, a...))
25
+	utils.ErrorLog(format, a...)
24 26
 }
25 27
 
26 28
 func (this *BaseController) WarnLog(format string, a ...interface{}) {
27 29
 	//beego.Warn(fmt.Sprintf(format, a...))
30
+	utils.WarningLog(format, a...)
28 31
 }
29 32
 
30 33
 func (this *BaseController) InfoLog(format string, a ...interface{}) {
31 34
 	//beego.Info(fmt.Sprintf(format, a...))
35
+	utils.InfoLog(format, a...)
32 36
 }
33 37
 
34 38
 func (this *BaseController) DebugLog(format string, a ...interface{}) {
35 39
 	//beego.Debug(fmt.Sprintf(format, a...))
40
+	utils.InfoLog(format, a...)
36 41
 }
37 42
 
38 43
 func (this *BaseController) TraceLog(format string, a ...interface{}) {
39 44
 	//beego.Trace(fmt.Sprintf(format, a...))
45
+	utils.TraceLog(format, a...)
40 46
 }

+ 150 - 5
controllers/marketing_tool/activity_controller.go View File

@@ -5,6 +5,8 @@ import (
5 5
 	"SCRM/enums"
6 6
 	"SCRM/models"
7 7
 	"SCRM/service/marketing_tool_service"
8
+	"SCRM/utils"
9
+	"encoding/json"
8 10
 	"time"
9 11
 
10 12
 	"github.com/astaxie/beego"
@@ -13,6 +15,7 @@ import (
13 15
 func ActivityCtlRegistRouters() {
14 16
 	beego.Router("/api/activities", &ActivityAPIController{}, "get:Activities")
15 17
 	beego.Router("/api/activity", &ActivityAPIController{}, "get:GetActivity")
18
+	beego.Router("/api/activity/submit", &ActivityAPIController{}, "post:ActivitySubmit")
16 19
 }
17 20
 
18 21
 type ActivityAPIController struct {
@@ -143,11 +146,9 @@ func (this *ActivityAPIController) GetActivity() {
143 146
 		return
144 147
 	}
145 148
 
146
-	paragraphID := int64(0)
147 149
 	paragraphTitle := ""
148 150
 	paragraphContent := ""
149 151
 	if paragraph != nil {
150
-		paragraphID = paragraph.Id
151 152
 		paragraphTitle = paragraph.Title
152 153
 		paragraphContent = paragraph.Text
153 154
 	}
@@ -155,7 +156,6 @@ func (this *ActivityAPIController) GetActivity() {
155 156
 	this.ServeSuccessJSON(map[string]interface{}{
156 157
 		"activity": activity,
157 158
 		"paragraph": map[string]interface{}{
158
-			"id":      paragraphID,
159 159
 			"title":   paragraphTitle,
160 160
 			"content": paragraphContent,
161 161
 		},
@@ -164,9 +164,9 @@ func (this *ActivityAPIController) GetActivity() {
164 164
 
165 165
 // /api/activity/submit [post]
166 166
 // @param publish:bool 是否发布
167
-// @data activity:json
167
+// @data 如下格式
168 168
 /*
169
-activity: {
169
+{
170 170
 	id?:int
171 171
 	title:string
172 172
 	subtitle:string
@@ -184,3 +184,148 @@ activity: {
184 184
 	}
185 185
 }
186 186
 */
187
+func (this *ActivityAPIController) ActivitySubmit() {
188
+	publish, _ := this.GetBool("publish")
189
+
190
+	var activityForm ActivityForm
191
+	parseErr := json.Unmarshal(this.Ctx.Input.RequestBody, &activityForm)
192
+	if parseErr != nil {
193
+		this.ErrorLog("解析 activity form 失败:%v", parseErr)
194
+		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamFormatWrong)
195
+		return
196
+	}
197
+
198
+	adminUserInfo := this.GetAdminUserInfo()
199
+	var activity *models.Activity
200
+	if activityForm.ID > 0 {
201
+		var getActivityErr error
202
+		activity, getActivityErr = marketing_tool_service.GetActivityWithID(adminUserInfo.CurrentOrgId, activityForm.ID)
203
+		if getActivityErr != nil {
204
+			this.ErrorLog("获取活动失败:%v", getActivityErr)
205
+			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
206
+			return
207
+		} else if activity == nil || activity.Status == 9 {
208
+			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeActivityNotExist)
209
+			return
210
+		}
211
+	}
212
+	if len(activityForm.Title) == 0 || len(activityForm.Subtitle) == 0 || len(activityForm.PosterPhoto) == 0 || len(activityForm.Address) == 0 || len(activityForm.SignUpDeadline) == 0 || len(activityForm.StartTime) == 0 {
213
+		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
214
+		return
215
+	}
216
+	timeFmt := "2006-01-02 15:04"
217
+	signUpDeadlineTime, parseSUDErr := utils.ParseTimeStringToTime(timeFmt, activityForm.SignUpDeadline)
218
+	if parseSUDErr != nil {
219
+		this.ErrorLog("解析报名截止时间失败:%v", parseSUDErr)
220
+		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamFormatWrong)
221
+		return
222
+	}
223
+	activityTime, parseActivityTimeErr := utils.ParseTimeStringToTime(timeFmt, activityForm.StartTime)
224
+	if parseActivityTimeErr != nil {
225
+		this.ErrorLog("解析活动开始时间失败:%v", parseActivityTimeErr)
226
+		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamFormatWrong)
227
+		return
228
+	}
229
+
230
+	if len(activityForm.PhoneNumber) > 0 {
231
+		if utils.PhoneRegexp().MatchString(activityForm.PhoneNumber) == false {
232
+			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamFormatWrong)
233
+			return
234
+		}
235
+	}
236
+	if activityForm.LimitNum < 0 {
237
+		activityForm.LimitNum = 0
238
+	}
239
+
240
+	if activity == nil {
241
+		activity = &models.Activity{
242
+			UserOrgId:        adminUserInfo.CurrentOrgId,
243
+			UserAppId:        adminUserInfo.CurrentAppId,
244
+			Title:            activityForm.Title,
245
+			Subtitle:         activityForm.Subtitle,
246
+			Address:          activityForm.Address,
247
+			SignUpDeadline:   signUpDeadlineTime.Unix(),
248
+			SignUpNotice:     activityForm.SignUpNotice,
249
+			StartTime:        activityTime.Unix(),
250
+			PosterPhoto:      activityForm.PosterPhoto,
251
+			PosterPhotoThumb: activityForm.PosterPhoto,
252
+			LimitNum:         activityForm.LimitNum,
253
+			PhoneNumber:      activityForm.PhoneNumber,
254
+			CreateTime:       time.Now().Unix(),
255
+		}
256
+	} else {
257
+		activity.Title = activityForm.Title
258
+		activity.Subtitle = activityForm.Subtitle
259
+		activity.Address = activityForm.Address
260
+		activity.SignUpDeadline = signUpDeadlineTime.Unix()
261
+		activity.SignUpNotice = activityForm.SignUpNotice
262
+		activity.StartTime = activityTime.Unix()
263
+		activity.PosterPhoto = activityForm.PosterPhoto
264
+		activity.PosterPhotoThumb = activityForm.PosterPhoto
265
+		activity.LimitNum = activityForm.LimitNum
266
+		activity.PhoneNumber = activityForm.PhoneNumber
267
+	}
268
+	activity.ModifyTime = time.Now().Unix()
269
+	if publish {
270
+		activity.Status = 1
271
+	} else {
272
+		activity.Status = 4
273
+	}
274
+
275
+	var paragraph *models.ActivityParagraph
276
+	if activity.Id > 0 {
277
+		var getPErr error
278
+		paragraph, getPErr = marketing_tool_service.GetActivityParagraphByActivityID(activity.Id)
279
+		if getPErr != nil {
280
+			this.ErrorLog("获取活动段落失败:%v", getPErr)
281
+			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
282
+			return
283
+		}
284
+	}
285
+	if len(activityForm.Paragraph.Title) > 0 {
286
+		if paragraph == nil {
287
+			paragraph = &models.ActivityParagraph{
288
+				Title:      activityForm.Paragraph.Title,
289
+				Text:       activityForm.Paragraph.Content,
290
+				Status:     1,
291
+				CreateTime: time.Now().Unix(),
292
+				ModifyTime: time.Now().Unix(),
293
+			}
294
+		} else {
295
+			paragraph.Title = activityForm.Paragraph.Title
296
+			paragraph.Text = activityForm.Paragraph.Content
297
+			paragraph.ModifyTime = time.Now().Unix()
298
+		}
299
+	} else {
300
+		if paragraph != nil {
301
+			paragraph.Status = 0
302
+			paragraph.ModifyTime = time.Now().Unix()
303
+		}
304
+	}
305
+
306
+	saveErr := marketing_tool_service.SaveActivityAndParagraph(activity, paragraph)
307
+	if saveErr != nil {
308
+		this.ErrorLog("保存活动失败:%v", saveErr)
309
+		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
310
+		return
311
+	}
312
+
313
+	wxShareModel, getWxShareErr := marketing_tool_service.GetActivityWxShareByActivityID(activity.Id)
314
+	if getWxShareErr != nil {
315
+		this.ErrorLog("获取活动微信分享信息失败:%v", getWxShareErr)
316
+	} else if wxShareModel != nil {
317
+		wxShareModel.ModifyTime = time.Now().Unix()
318
+		wxShareModel.Status = 1
319
+		wxShareModel.Title = activity.Title
320
+		wxShareModel.Subtitle = activity.Subtitle
321
+		wxShareModel.Image = activity.PosterPhoto
322
+		saveWxShareErr := marketing_tool_service.SaveActivityWxShare(wxShareModel)
323
+		if saveWxShareErr != nil {
324
+			this.ErrorLog("更新活动微信分享信息失败:%v", saveWxShareErr)
325
+		}
326
+	}
327
+
328
+	this.ServeSuccessJSON(map[string]interface{}{
329
+		"activity_id": activity.Id,
330
+	})
331
+}

+ 19 - 0
controllers/marketing_tool/activity_vms.go View File

@@ -0,0 +1,19 @@
1
+package marketing_tool
2
+
3
+type ActivityForm struct {
4
+	ID             int64  `json:"id"`
5
+	Title          string `json:"title"`
6
+	Subtitle       string `json:"subtitle"`
7
+	PosterPhoto    string `json:"poster_photo"`
8
+	Address        string `json:"address"`
9
+	LimitNum       int    `json:"limit_num"`
10
+	SignUpDeadline string `json:"sign_up_deadline"`
11
+	StartTime      string `json:"start_time"`
12
+	PhoneNumber    string `json:"phone_number"`
13
+	SignUpNotice   string `json:"sign_up_notice"`
14
+
15
+	Paragraph struct {
16
+		Title   string `json:"title"`
17
+		Content string `json:"content"`
18
+	} `json:"paragraph"`
19
+}

+ 3 - 3
models/activity_models.go View File

@@ -24,8 +24,8 @@ type Activity struct {
24 24
 	IsRecommend      int8   `gorm:"column:is_recommend;" json:"is_recommend"`            // 0:未推荐;1:已推荐
25 25
 	CreateTime       int64  `gorm:"column:ctime" json:"-"`                               // 创建时间
26 26
 	ModifyTime       int64  `gorm:"column:mtime" json:"-"`                               // 修改时间
27
-	UserOrgId        int    `gorm:"column:user_org_id" json:"-"`                         // 所属发布机构 ID
28
-	UserAppId        int    `gorm:"column:user_app_id" json:"-"`                         // 所属发布应用 ID
27
+	UserOrgId        int64  `gorm:"column:user_org_id" json:"-"`                         // 所属发布机构 ID
28
+	UserAppId        int64  `gorm:"column:user_app_id" json:"-"`                         // 所属发布应用 ID
29 29
 	CommentNum       int    `gorm:"column:comment_num;" json:"comment_num"`              // 评论数
30 30
 	StarNum          int    `gorm:"column:star_num" json:"star_num"`                     // 点赞书
31 31
 	ReadNum          int    `gorm:"column:read_num;" json:"read_num"`                    // 阅读数
@@ -37,7 +37,7 @@ func (Activity) TableName() string {
37 37
 
38 38
 type ActivityParagraph struct {
39 39
 	Id         int64  `gorm:"PRIMARY_KEY;AUTO_INCREMENT" json:"id"`  // 记录 ID
40
-	ActivityId int    `gorm:"column:activity_id" json:"activity_id"` // 活动 ID
40
+	ActivityId int64  `gorm:"column:activity_id" json:"activity_id"` // 活动 ID
41 41
 	Title      string `json:"title"`
42 42
 	Text       string `json:"text"`
43 43
 	// Image      string `json:"image"` // 该字段实际上已经没用了

+ 44 - 0
service/marketing_tool_service/activity_service.go View File

@@ -120,3 +120,47 @@ func GetActivityParagraphByActivityID(activityID int64) (*models.ActivityParagra
120 120
 	}
121 121
 	return &paragraph, nil
122 122
 }
123
+
124
+func GetActivityWxShareByActivityID(activityID int64) (*models.ActivityWxShare, error) {
125
+	var model models.ActivityWxShare
126
+	err :=
127
+		service.PatientReadDB().Model(&models.ActivityWxShare{}).
128
+			Where("activity_id = ?", activityID).
129
+			First(&model).
130
+			Error
131
+	if err != nil {
132
+		if err == gorm.ErrRecordNotFound {
133
+			return nil, nil
134
+		} else {
135
+			return nil, err
136
+		}
137
+	}
138
+	return &model, nil
139
+}
140
+
141
+func SaveActivityAndParagraph(activity *models.Activity, paragraph *models.ActivityParagraph) error {
142
+	tx := service.PatientWriteDB().Begin()
143
+	saveActivityErr := tx.Save(activity).Error
144
+	if saveActivityErr != nil {
145
+		tx.Rollback()
146
+		return saveActivityErr
147
+	}
148
+	if paragraph != nil {
149
+		if paragraph.Id == 0 {
150
+			paragraph.ActivityId = activity.Id
151
+		}
152
+
153
+		saveParagraphErr := tx.Save(paragraph).Error
154
+		if saveParagraphErr != nil {
155
+			tx.Rollback()
156
+			return saveParagraphErr
157
+		}
158
+	}
159
+
160
+	tx.Commit()
161
+	return nil
162
+}
163
+
164
+func SaveActivityWxShare(model *models.ActivityWxShare) error {
165
+	return service.PatientWriteDB().Save(model).Error
166
+}