wangfei 6 年前
父节点
当前提交
d177ac04b0
共有 6 个文件被更改,包括 556 次插入41 次删除
  1. 45
    0
      controllers/statistics/cardcoupon.go
  2. 53
    0
      log/common.log
  3. 4
    3
      models/constant.go
  4. 388
    38
      models/statistics/cardcoupon.go
  5. 2
    0
      routers/common.go
  6. 64
    0
      service/statistics/cardcoupon.go

+ 45
- 0
controllers/statistics/cardcoupon.go 查看文件

21
 
21
 
22
 	c.ResponseJSON(list)
22
 	c.ResponseJSON(list)
23
 }
23
 }
24
+
25
+// CardCouponUsedStatistics 获取卡券使用统计数据
26
+func (c *StatisticsController) CardCouponUsedStatistics() {
27
+	page, _ := c.GetInt("page")
28
+	pagesize, _ := c.GetInt("pagesize")
29
+	caseids := c.GetString("caseid")
30
+	name := c.GetString("name")
31
+	receivetype := c.GetString("receivetype")
32
+	tel := c.GetString("tel")
33
+	begindate := c.GetString("begindate")
34
+	enddate := c.GetString("enddate")
35
+	status := c.GetString("status")
36
+
37
+	if caseids == "" {
38
+		cases := c.Context.Get("cases").([]model.SysUserCase)
39
+		caseids = c.GetCaseIDs(cases)
40
+	}
41
+	list, err := c.serv.CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status, page, pagesize)
42
+	if err != nil {
43
+		c.ResponseError(err)
44
+	}
45
+
46
+	c.ResponseJSON(list)
47
+}
48
+
49
+// CardCouponVerifyStatistics 获取卡券核销统计数据
50
+func (c *StatisticsController) CardCouponVerifyStatistics() {
51
+	page, _ := c.GetInt("page")
52
+	pagesize, _ := c.GetInt("pagesize")
53
+	caseids := c.GetString("caseid")
54
+	name := c.GetString("name")
55
+	tel := c.GetString("tel")
56
+	status := c.GetString("status")
57
+
58
+	if caseids == "" {
59
+		cases := c.Context.Get("cases").([]model.SysUserCase)
60
+		caseids = c.GetCaseIDs(cases)
61
+	}
62
+	list, err := c.serv.CardCouponVerifyStatistics(caseids, tel, name, status, page, pagesize)
63
+	if err != nil {
64
+		c.ResponseError(err)
65
+	}
66
+
67
+	c.ResponseJSON(list)
68
+}

+ 53
- 0
log/common.log 查看文件

20
 2018/09/16 16:29:01 [E] 获取优惠券失败: 无优惠券信息
20
 2018/09/16 16:29:01 [E] 获取优惠券失败: 无优惠券信息
21
 2018/09/16 16:29:08 [E] 获取体验卡失败: 无卡信息
21
 2018/09/16 16:29:08 [E] 获取体验卡失败: 无卡信息
22
 2018/09/16 16:30:00 [E] 获取体验卡失败: 无卡信息
22
 2018/09/16 16:30:00 [E] 获取体验卡失败: 无卡信息
23
+2018/09/16 17:16:29 [E] 用户没有设置默认案场
24
+2018/09/16 17:17:29 [E] 用户没有设置默认案场
25
+2018/09/16 17:19:08 [E] 用户没有设置默认案场
26
+2018/09/16 17:19:08 [E] 用户没有设置默认案场
27
+2018/09/16 17:19:27 [E] 用户没有设置默认案场
28
+2018/09/16 17:19:46 [E] 用户没有设置默认案场
29
+2018/09/16 17:22:18 [E] 用户没有设置默认案场
30
+2018/09/16 17:22:37 [E] 用户没有设置默认案场
31
+2018/09/16 17:22:44 [E] 用户没有设置默认案场
32
+2018/09/16 17:25:46 [E] 用户没有设置默认案场
33
+2018/09/16 17:26:51 [E] 用户没有设置默认案场
34
+2018/09/16 17:26:51 [E] 用户没有设置默认案场
35
+2018/09/16 17:28:05 [E] 用户没有设置默认案场
36
+2018/09/16 17:28:10 [E] 用户没有设置默认案场
37
+2018/09/16 17:28:10 [E] 用户没有设置默认案场
38
+2018/09/16 17:30:24 [E] 用户没有设置默认案场
39
+2018/09/16 17:31:05 [E] 用户没有设置默认案场
40
+2018/09/16 17:31:05 [E] 用户没有设置默认案场
41
+2018/09/16 17:31:14 [E] 用户没有设置默认案场
42
+2018/09/16 17:31:47 [E] 用户没有设置默认案场
43
+2018/09/16 17:31:47 [E] 用户没有设置默认案场
44
+2018/09/16 17:32:20 [E] 用户没有设置默认案场
45
+2018/09/16 17:32:24 [E] 用户没有设置默认案场
46
+2018/09/16 17:32:24 [E] 用户没有设置默认案场
47
+2018/09/16 17:32:38 [E] 用户没有设置默认案场
48
+2018/09/16 17:32:38 [E] 获取卡券统计数据失败: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and tab.phone like '%111%' order by receive_date desc limit 0, 10' at line 61
49
+2018/09/16 17:34:59 [E] 用户没有设置默认案场
50
+2018/09/16 17:35:20 [E] 用户没有设置默认案场
51
+2018/09/16 17:35:20 [E] 获取卡券统计数据失败: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and tab.receivetype = 'case' order by receive_date desc limit 0, 10' at line 61
52
+2018/09/16 17:36:21 [E] 用户没有设置默认案场
53
+2018/09/16 17:36:21 [E] 用户没有设置默认案场
54
+2018/09/16 17:36:28 [E] 用户没有设置默认案场
55
+2018/09/16 17:36:48 [E] 用户没有设置默认案场
56
+2018/09/16 17:36:55 [E] 用户没有设置默认案场
57
+2018/09/16 17:36:59 [E] 用户没有设置默认案场
58
+2018/09/16 17:37:02 [E] 用户没有设置默认案场
59
+2018/09/16 17:37:05 [E] 用户没有设置默认案场
60
+2018/09/16 17:37:26 [E] 用户没有设置默认案场
61
+2018/09/16 17:37:26 [E] 获取卡券统计数据失败: Error 1054: Unknown column 'tab.receivetype' in 'where clause'
62
+2018/09/16 17:38:24 [E] 用户没有设置默认案场
63
+2018/09/16 17:38:24 [E] 用户没有设置默认案场
64
+2018/09/16 17:38:26 [E] 用户没有设置默认案场
65
+2018/09/16 17:38:35 [E] 用户没有设置默认案场
66
+2018/09/16 17:38:37 [E] 用户没有设置默认案场
67
+2018/09/16 17:38:41 [E] 用户没有设置默认案场
68
+2018/09/16 17:38:43 [E] 用户没有设置默认案场
69
+2018/09/16 17:38:45 [E] 用户没有设置默认案场
70
+2018/09/16 17:38:59 [E] 用户没有设置默认案场
71
+2018/09/16 17:39:02 [E] 用户没有设置默认案场
72
+2018/09/16 17:39:07 [E] 用户没有设置默认案场
73
+2018/09/16 17:39:13 [E] 用户没有设置默认案场
74
+2018/09/16 18:43:58 [E] 用户没有设置默认案场
75
+2018/09/16 18:43:58 [E] 用户没有设置默认案场

+ 4
- 3
models/constant.go 查看文件

105
 
105
 
106
 // 核销类型
106
 // 核销类型
107
 const (
107
 const (
108
-	VERIFY_USEABLE = "useable"
109
-	VERIFY_USED    = "used"
110
-	VERIFY_LATE    = "late"
108
+	VERIFY_USEABLE = "useable" // 未使用
109
+	VERIFY_USED    = "used"    // 已使用
110
+	VERIFY_LATE    = "late"    // 逾期核销
111
+	VERIFY_EXPIRE  = "expire"  // 已失效
111
 )
112
 )
112
 
113
 
113
 // 卡券赠送类型
114
 // 卡券赠送类型

+ 388
- 38
models/statistics/cardcoupon.go 查看文件

59
 	INNER JOIN sys_case b ON a.case_id = b.case_id
59
 	INNER JOIN sys_case b ON a.case_id = b.case_id
60
 	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
60
 	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
61
 
61
 
62
-	gymcardsql := `SELECT
63
-		b.case_name,
64
-		b.case_id,
65
-		a.gym_card_name,
66
-		'健身卡' AS type_name,
67
-		a.send_type,
68
-		a.price,
69
-		a.sent_count,
70
-		a.used_count,
71
-		a.create_date
72
-	FROM
73
-		ta_gym_card a
74
-	INNER JOIN sys_case b ON a.case_id = b.case_id
75
-	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
62
+	// gymcardsql := `SELECT
63
+	// 	b.case_name,
64
+	// 	b.case_id,
65
+	// 	a.gym_card_name,
66
+	// 	'健身卡' AS type_name,
67
+	// 	a.send_type,
68
+	// 	a.price,
69
+	// 	a.sent_count,
70
+	// 	a.used_count,
71
+	// 	a.create_date
72
+	// FROM
73
+	// 	ta_gym_card a
74
+	// INNER JOIN sys_case b ON a.case_id = b.case_id
75
+	// where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
76
 
76
 
77
 	sql := ""
77
 	sql := ""
78
 	if ctype != "" {
78
 	if ctype != "" {
86
 		case "coursecoupon":
86
 		case "coursecoupon":
87
 			sql = "select * from (" + couponsql + " and a.coupon_type='course') tab"
87
 			sql = "select * from (" + couponsql + " and a.coupon_type='course') tab"
88
 			break
88
 			break
89
-		case "gym":
90
-			sql = "select * from (" + gymcardsql + ") tab"
91
-			break
89
+		// case "gym":
90
+		// 	sql = "select * from (" + gymcardsql + ") tab"
91
+		// 	break
92
 		default:
92
 		default:
93
 			return nil, errors.New("类型不正确")
93
 			return nil, errors.New("类型不正确")
94
 		}
94
 		}
95
 	} else {
95
 	} else {
96
-		sql = "select * from (" + cardsql + " union " + couponsql + " union " + gymcardsql + ") tab"
96
+		sql = "select * from (" + cardsql + " union " + couponsql + ") tab"
97
 	}
97
 	}
98
 
98
 
99
 	if name != "" {
99
 	if name != "" {
100
-		sql = sql + ` and c_name like '%` + name + `%'`
100
+		sql = sql + ` where c_name like '%` + name + `%'`
101
 	}
101
 	}
102
 	sql = sql + ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
102
 	sql = sql + ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
103
 	err := m.db.Sql(sql).Find(&cardCoupons)
103
 	err := m.db.Sql(sql).Find(&cardCoupons)
144
 	INNER JOIN sys_case b ON a.case_id = b.case_id
144
 	INNER JOIN sys_case b ON a.case_id = b.case_id
145
 	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
145
 	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
146
 
146
 
147
-	gymcardsql := `SELECT
148
-		b.case_name,
149
-		b.case_id,
150
-		a.gym_card_name,
151
-		'健身卡' AS type_name,
152
-		a.send_type,
153
-		a.price,
154
-		a.sent_count,
155
-		a.used_count,
156
-		a.create_date
157
-	FROM
158
-		ta_gym_card a
159
-	INNER JOIN sys_case b ON a.case_id = b.case_id
160
-	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
147
+	// gymcardsql := `SELECT
148
+	// 	b.case_name,
149
+	// 	b.case_id,
150
+	// 	a.gym_card_name,
151
+	// 	'健身卡' AS type_name,
152
+	// 	a.send_type,
153
+	// 	a.price,
154
+	// 	a.sent_count,
155
+	// 	a.used_count,
156
+	// 	a.create_date
157
+	// FROM
158
+	// 	ta_gym_card a
159
+	// INNER JOIN sys_case b ON a.case_id = b.case_id
160
+	// where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
161
 
161
 
162
 	sql := ""
162
 	sql := ""
163
 	if ctype != "" {
163
 	if ctype != "" {
171
 		case "coursecoupon":
171
 		case "coursecoupon":
172
 			sql = "select * from (" + couponsql + " and a.coupon_type='course') tab"
172
 			sql = "select * from (" + couponsql + " and a.coupon_type='course') tab"
173
 			break
173
 			break
174
-		case "gym":
175
-			sql = "select * from (" + gymcardsql + ") tab"
176
-			break
174
+		// case "gym":
175
+		// 	sql = "select * from (" + gymcardsql + ") tab"
176
+		// 	break
177
 		default:
177
 		default:
178
 			return 0, errors.New("类型不正确")
178
 			return 0, errors.New("类型不正确")
179
 		}
179
 		}
180
 	} else {
180
 	} else {
181
-		sql = "select * from (" + cardsql + " union " + couponsql + " union " + gymcardsql + ") tab"
181
+		sql = "select * from (" + cardsql + " union " + couponsql + ") tab"
182
+	}
183
+
184
+	if name != "" {
185
+		sql = sql + ` where c_name like '%` + name + `%'`
186
+	}
187
+	err := m.db.Sql(sql).Find(&cardCoupons)
188
+	return len(cardCoupons), err
189
+}
190
+
191
+// CardCouponUsedStatistics 卡券使用情况
192
+type CardCouponUsedStatistics struct {
193
+	CaseId         string
194
+	CaseName       string
195
+	CardCouponName string
196
+	TargetName     string
197
+	ReceivingType  string
198
+	Name           string
199
+	CustomerName   string
200
+	Phone          string
201
+	SalesId        string
202
+	SalesName      string
203
+	StartDate      time.Time
204
+	EndDate        time.Time
205
+	ReceiveDate    time.Time
206
+	UsedDate       time.Time
207
+	VerifyStatus   string
208
+}
209
+
210
+// CardCouponUsedStatistics 获取卡券使用情况统计
211
+func (m *StatisticsDAO) CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status string, page, pageSize int) ([]CardCouponUsedStatistics, error) {
212
+	var cardCoupons []CardCouponUsedStatistics
213
+	cardsql := `SELECT
214
+							d.case_name,
215
+							d.case_id,
216
+							a.customer_card_name as card_coupon_name,
217
+							b.target_name,
218
+							a.receiving_type,
219
+							c.name,
220
+							c.customer_name,
221
+							c.phone,
222
+							a.sales_id,
223
+							a.sales_name,
224
+							a.start_date,
225
+							a.end_date,
226
+							a.receive_date,
227
+							a.receive_date as used_date,
228
+							a.verify_status
229
+						FROM
230
+							ta_customer_card a
231
+						INNER JOIN ta_coupon_card_target b ON b.card_id = a.card_id
232
+						INNER JOIN ta_customer c ON a.customer_id = c.customer_id
233
+						INNER JOIN sys_case d ON a.case_id = d.case_id
234
+						WHERE d.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
235
+
236
+	couponsql := `SELECT
237
+									b.case_name,
238
+									b.case_id,
239
+									a.customer_coupon_name as card_coupon_name,
240
+									(
241
+										CASE
242
+										WHEN cp.coupon_type = 'course' THEN
243
+											d.course_name
244
+										ELSE
245
+											c.coupon_name
246
+										END
247
+									) as target_name,
248
+									a.receiving_type,
249
+									cst.name,
250
+									cst.customer_name,
251
+									cst.phone,
252
+									a.sales_id,
253
+									a.sales_name,
254
+									a.start_date,
255
+									a.end_date,
256
+									a.receive_date,
257
+									(
258
+										CASE
259
+										WHEN cp.coupon_type = 'course' THEN
260
+											d.create_date
261
+										ELSE
262
+											c.create_date
263
+										END
264
+									) as used_date,
265
+									(
266
+										CASE
267
+										WHEN NOW() > a.end_date THEN
268
+											'expire'
269
+										WHEN use_date IS NULL THEN
270
+											'useable'
271
+										ELSE
272
+											'used'
273
+										END
274
+									) AS verify_status
275
+								FROM
276
+									ta_customer_coupon a
277
+								INNER JOIN sys_case b ON a.case_id = b.case_id
278
+								INNER JOIN ta_customer cst ON a.customer_id = cst.customer_id
279
+								INNER JOIN ta_coupon cp ON a.coupon_id = cp.coupon_id
280
+								LEFT JOIN ta_goods_orders_coupon c ON a.coupon_id = c.coupon_id
281
+								LEFT JOIN ta_course_orders_coupon d ON a.coupon_id = d.coupon_id
282
+								WHERE b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
283
+
284
+	sql := "select * from (" + cardsql + " union " + couponsql + ") tab where (1=1)"
285
+
286
+	if name != "" {
287
+		sql = sql + ` and tab.card_coupon_name like '%` + name + `%'`
288
+	}
289
+	if tel != "" {
290
+		sql = sql + ` and tab.phone like '%` + tel + `%'`
291
+	}
292
+	if receivetype != "" {
293
+		sql = sql + ` and tab.receiving_type = '` + receivetype + `'`
182
 	}
294
 	}
295
+	if status != "" {
296
+		sql = sql + ` and tab.verify_status = '` + receivetype + `'`
297
+	}
298
+	if begindate != "" {
299
+		sql = sql + ` and DATE_FORMAT(tab.receive_date, '%Y-%m-%d') >= '` + begindate + `'`
300
+	}
301
+	if enddate != "" {
302
+		sql = sql + ` and DATE_FORMAT(tab.receive_date, '%Y-%m-%d') <= '` + enddate + `'`
303
+	}
304
+	sql = sql + ` order by receive_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
305
+
306
+	err := m.db.Sql(sql).Find(&cardCoupons)
307
+	return cardCoupons, err
308
+}
309
+
310
+// CardCouponUsedCountStatistics 获取卡券使用情况统计
311
+func (m *StatisticsDAO) CardCouponUsedCountStatistics(caseids, tel, name, receivetype, begindate, enddate, status string) (int, error) {
312
+	var cardCoupons []CardCouponUsedStatistics
313
+	cardsql := `SELECT
314
+							d.case_name,
315
+							d.case_id,
316
+							a.customer_card_name as card_coupon_name,
317
+							b.target_name,
318
+							a.receiving_type,
319
+							c.name,
320
+							c.customer_name,
321
+							c.phone,
322
+							a.sales_id,
323
+							a.sales_name,
324
+							a.start_date,
325
+							a.end_date,
326
+							a.receive_date,
327
+							a.receive_date as used_date,
328
+							a.verify_status
329
+						FROM
330
+							ta_customer_card a
331
+						INNER JOIN ta_coupon_card_target b ON b.card_id = a.card_id
332
+						INNER JOIN ta_customer c ON a.customer_id = c.customer_id
333
+						INNER JOIN sys_case d ON a.case_id = d.case_id
334
+						WHERE d.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
335
+
336
+	couponsql := `SELECT
337
+									b.case_name,
338
+									b.case_id,
339
+									a.customer_coupon_name as card_coupon_name,
340
+									(
341
+										CASE
342
+										WHEN cp.coupon_type = 'course' THEN
343
+											d.course_name
344
+										ELSE
345
+											c.coupon_name
346
+										END
347
+									) as target_name,
348
+									a.receiving_type,
349
+									cst.name,
350
+									cst.customer_name,
351
+									cst.phone,
352
+									a.sales_id,
353
+									a.sales_name,
354
+									a.start_date,
355
+									a.end_date,
356
+									a.receive_date,
357
+									(
358
+										CASE
359
+										WHEN cp.coupon_type = 'course' THEN
360
+											d.create_date
361
+										ELSE
362
+											c.create_date
363
+										END
364
+									) as used_date,
365
+									(
366
+										CASE
367
+										WHEN NOW() > a.end_date THEN
368
+											'expire'
369
+										WHEN use_date IS NULL THEN
370
+											'useable'
371
+										ELSE
372
+											'used'
373
+										END
374
+									) AS verify_status
375
+								FROM
376
+									ta_customer_coupon a
377
+								INNER JOIN sys_case b ON a.case_id = b.case_id
378
+								INNER JOIN ta_customer cst ON a.customer_id = cst.customer_id
379
+								INNER JOIN ta_coupon cp ON a.coupon_id = cp.coupon_id
380
+								LEFT JOIN ta_goods_orders_coupon c ON a.coupon_id = c.coupon_id
381
+								LEFT JOIN ta_course_orders_coupon d ON a.coupon_id = d.coupon_id
382
+								WHERE b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
383
+
384
+	sql := "select * from (" + cardsql + " union " + couponsql + ") tab where (1=1)"
385
+
386
+	if name != "" {
387
+		sql = sql + ` and tab.card_coupon_name like '%` + name + `%'`
388
+	}
389
+	if tel != "" {
390
+		sql = sql + ` and tab.phone like '%` + tel + `%'`
391
+	}
392
+	if receivetype != "" {
393
+		sql = sql + ` and tab.receiving_type = '` + receivetype + `'`
394
+	}
395
+	if status != "" {
396
+		sql = sql + ` and tab.verify_status = '` + receivetype + `'`
397
+	}
398
+	if begindate != "" {
399
+		sql = sql + ` and DATE_FORMAT(tab.receive_date, '%Y-%m-%d') >= '` + begindate + `'`
400
+	}
401
+	if enddate != "" {
402
+		sql = sql + ` and DATE_FORMAT(tab.receive_date, '%Y-%m-%d') <= '` + enddate + `'`
403
+	}
404
+	err := m.db.Sql(sql).Find(&cardCoupons)
405
+	return len(cardCoupons), err
406
+}
407
+
408
+// CardCouponVerifyStatistics 卡券使用情况
409
+type CardCouponVerifyStatistics struct {
410
+	CaseId       string
411
+	CaseName     string
412
+	CourseName   string
413
+	BeginDate    time.Time
414
+	EndDate      time.Time
415
+	Name         string
416
+	CustomerName string
417
+	Phone        string
418
+	CreateDate   time.Time
419
+	VerifyDate   time.Time
420
+	Status       string
421
+}
422
+
423
+// CardCouponVerifyStatistics 获取卡券核销情况统计
424
+func (m *StatisticsDAO) CardCouponVerifyStatistics(caseids, tel, name, status string, page, pageSize int) ([]CardCouponVerifyStatistics, error) {
425
+	var cardCoupons []CardCouponVerifyStatistics
426
+	sql := `SELECT
427
+							c.case_id,
428
+							c.case_name,
429
+							e.course_name,
430
+							e.begin_date,
431
+							e.end_date,
432
+							d.name,
433
+							d.customer_name,
434
+							d.phone,
435
+							d.recommend_name,
436
+							a.create_date,
437
+							b.verify_date,
438
+							(
439
+								CASE
440
+								WHEN b.verify_date IS NULL THEN
441
+									'useable'
442
+								ELSE
443
+									f.verify_status
444
+								END
445
+							) AS verify_status
446
+						FROM
447
+							ta_customer_course a
448
+						INNER JOIN (
449
+							SELECT
450
+								customer_course_id,
451
+								min(verify_date) AS verify_date
452
+							FROM
453
+								ta_customer_course_detail
454
+							GROUP BY
455
+								customer_course_id
456
+						) b ON a.customer_course_id = b.customer_course_id
457
+						INNER JOIN sys_case c ON a.case_id = c.case_id
458
+						INNER JOIN ta_customer d ON a.customer_id = d.customer_id
459
+						INNER JOIN ta_course e ON a.course_id = e.course_id
460
+						LEFT JOIN ta_customer_course_detail f ON b.customer_course_id = f.customer_course_id
461
+						AND b.verify_date = f.verify_date
462
+						WHERE c.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
463
+
464
+	if name != "" {
465
+		sql = sql + ` and e.course_name like '%` + name + `%'`
466
+	}
467
+	if tel != "" {
468
+		sql = sql + ` and d.phone like '%` + tel + `%'`
469
+	}
470
+	if status != "" {
471
+		if status == "useable" {
472
+			sql = sql + ` and b.verify_date is null`
473
+		} else {
474
+			sql = sql + ` and f.verify_status ='` + status + `'`
475
+		}
476
+	}
477
+	sql = sql + ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
478
+
479
+	err := m.db.Sql(sql).Find(&cardCoupons)
480
+	return cardCoupons, err
481
+}
482
+
483
+// CardCouponVerifyStatisticsCount 获取卡券核销情况数量统计
484
+func (m *StatisticsDAO) CardCouponVerifyStatisticsCount(caseids, tel, name, status string) (int, error) {
485
+	var cardCoupons []CardCouponVerifyStatistics
486
+	sql := `SELECT
487
+							c.case_id,
488
+							c.case_name,
489
+							e.course_name,
490
+							e.begin_date,
491
+							e.end_date,
492
+							d.name,
493
+							d.customer_name,
494
+							d.phone,
495
+							d.recommend_name,
496
+							a.create_date,
497
+							b.verify_date,
498
+							(
499
+								CASE
500
+								WHEN b.verify_date IS NULL THEN
501
+									'useable'
502
+								ELSE
503
+									f.verify_status
504
+								END
505
+							) AS verify_status
506
+						FROM
507
+							ta_customer_course a
508
+						INNER JOIN (
509
+							SELECT
510
+								customer_course_id,
511
+								min(verify_date) AS verify_date
512
+							FROM
513
+								ta_customer_course_detail
514
+							GROUP BY
515
+								customer_course_id
516
+						) b ON a.customer_course_id = b.customer_course_id
517
+						INNER JOIN sys_case c ON a.case_id = c.case_id
518
+						INNER JOIN ta_customer d ON a.customer_id = d.customer_id
519
+						INNER JOIN ta_course e ON a.course_id = e.course_id
520
+						LEFT JOIN ta_customer_course_detail f ON b.customer_course_id = f.customer_course_id
521
+						AND b.verify_date = f.verify_date
522
+						WHERE c.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
183
 
523
 
184
 	if name != "" {
524
 	if name != "" {
185
-		sql = sql + ` and c_name like '%` + name + `%'`
525
+		sql = sql + ` and e.course_name like '%` + name + `%'`
526
+	}
527
+	if tel != "" {
528
+		sql = sql + ` and d.phone like '%` + tel + `%'`
529
+	}
530
+	if status != "" {
531
+		if status == "useable" {
532
+			sql = sql + ` and b.verify_date is null`
533
+		} else {
534
+			sql = sql + ` and f.verify_status ='` + status + `'`
535
+		}
186
 	}
536
 	}
187
 	err := m.db.Sql(sql).Find(&cardCoupons)
537
 	err := m.db.Sql(sql).Find(&cardCoupons)
188
 	return len(cardCoupons), err
538
 	return len(cardCoupons), err

+ 2
- 0
routers/common.go 查看文件

284
 		beego.NSRouter("/statistics/courseorders", &statistics.StatisticsController{}, "get:GetCourseOrdersStatistics"),
284
 		beego.NSRouter("/statistics/courseorders", &statistics.StatisticsController{}, "get:GetCourseOrdersStatistics"),
285
 		beego.NSRouter("/statistics/courses", &statistics.StatisticsController{}, "get:GetCourseStatistics"),
285
 		beego.NSRouter("/statistics/courses", &statistics.StatisticsController{}, "get:GetCourseStatistics"),
286
 		beego.NSRouter("/statistics/cardcoupon", &statistics.StatisticsController{}, "get:CardCouponStatistics"),
286
 		beego.NSRouter("/statistics/cardcoupon", &statistics.StatisticsController{}, "get:CardCouponStatistics"),
287
+		beego.NSRouter("/statistics/cardcouponused", &statistics.StatisticsController{}, "get:CardCouponUsedStatistics"),
288
+		beego.NSRouter("/statistics/cardcouponverify", &statistics.StatisticsController{}, "get:CardCouponVerifyStatistics"),
287
 	)
289
 	)
288
 }
290
 }

+ 64
- 0
service/statistics/cardcoupon.go 查看文件

37
 		"page":     page,
37
 		"page":     page,
38
 	}, nil
38
 	}, nil
39
 }
39
 }
40
+
41
+// CardCouponUsedStatistics 获取卡券使用统计信息
42
+func (s *StatisticsServ) CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status string, page, pageSize int) (map[string]interface{}, error) {
43
+	if pageSize == 0 {
44
+		pageSize = service.PAGENUM
45
+	}
46
+	if page == 0 {
47
+		page = 1
48
+	}
49
+
50
+	if caseids == "" {
51
+		return nil, errors.New("请先选择案场信息")
52
+	}
53
+
54
+	list, err := s.dao.CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status, page, pageSize)
55
+	if err != nil {
56
+		utils.LogError("获取卡券统计数据失败: " + err.Error())
57
+		return nil, errors.New("获取卡券统计数据失败")
58
+	}
59
+	total, err := s.dao.CardCouponUsedCountStatistics(caseids, tel, name, receivetype, begindate, enddate, status)
60
+	if err != nil {
61
+		utils.LogError("获取卡券统计数据失败: " + err.Error())
62
+		return nil, errors.New("获取卡券统计数据失败")
63
+	}
64
+
65
+	return map[string]interface{}{
66
+		"list":     list,
67
+		"pagesize": pageSize,
68
+		"pagenum":  total,
69
+		"page":     page,
70
+	}, nil
71
+}
72
+
73
+// CardCouponVerifyStatistics 获取卡券使用统计信息
74
+func (s *StatisticsServ) CardCouponVerifyStatistics(caseids, tel, name, status string, page, pageSize int) (map[string]interface{}, error) {
75
+	if pageSize == 0 {
76
+		pageSize = service.PAGENUM
77
+	}
78
+	if page == 0 {
79
+		page = 1
80
+	}
81
+
82
+	if caseids == "" {
83
+		return nil, errors.New("请先选择案场信息")
84
+	}
85
+
86
+	list, err := s.dao.CardCouponVerifyStatistics(caseids, tel, name, status, page, pageSize)
87
+	if err != nil {
88
+		utils.LogError("获取卡券统计数据失败: " + err.Error())
89
+		return nil, errors.New("获取卡券统计数据失败")
90
+	}
91
+	total, err := s.dao.CardCouponVerifyStatisticsCount(caseids, tel, name, status)
92
+	if err != nil {
93
+		utils.LogError("获取卡券统计数据失败: " + err.Error())
94
+		return nil, errors.New("获取卡券统计数据失败")
95
+	}
96
+
97
+	return map[string]interface{}{
98
+		"list":     list,
99
+		"pagesize": pageSize,
100
+		"pagenum":  total,
101
+		"page":     page,
102
+	}, nil
103
+}