wangfei 6 年之前
父節點
當前提交
7b6c3a9a1d

+ 1
- 1
controllers/coupon/coupon.go 查看文件

@@ -78,7 +78,7 @@ func (c *CouponController) GetCouponByID() {
78 78
 		c.ResponseError(errors.New("未指定券"))
79 79
 	}
80 80
 
81
-	cp, err := c.serv.GetCouponByID(id)
81
+	cp, err := c.serv.GetCouponInfoByID(id)
82 82
 	if err != nil {
83 83
 		c.ResponseError(err)
84 84
 	}

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

@@ -0,0 +1,45 @@
1
+package statistics
2
+
3
+import "spaceofcheng/services/models/model"
4
+
5
+// GetCourseOrdersStatistics 获取课程订单统计数据
6
+func (c *StatisticsController) GetCourseOrdersStatistics() {
7
+	page, _ := c.GetInt("page")
8
+	pagesize, _ := c.GetInt("pagesize")
9
+	caseids := c.GetString("caseid")
10
+	name := c.GetString("name")
11
+	typeid := c.GetString("typeid")
12
+	begindate := c.GetString("begindate")
13
+	enddate := c.GetString("enddate")
14
+
15
+	if caseids == "" {
16
+		cases := c.Context.Get("cases").([]model.SysUserCase)
17
+		caseids = c.GetCaseIDs(cases)
18
+	}
19
+	ordersList, err := c.serv.GetCourseOrdersStatistics(typeid, caseids, name, begindate, enddate, page, pagesize)
20
+	if err != nil {
21
+		c.ResponseError(err)
22
+	}
23
+
24
+	c.ResponseJSON(ordersList)
25
+}
26
+
27
+// GetCourseStatistics 获取课程统计数据
28
+func (c *StatisticsController) GetCourseStatistics() {
29
+	page, _ := c.GetInt("page")
30
+	pagesize, _ := c.GetInt("pagesize")
31
+	caseids := c.GetString("caseid")
32
+	name := c.GetString("name")
33
+	typeid := c.GetString("typeid")
34
+
35
+	if caseids == "" {
36
+		cases := c.Context.Get("cases").([]model.SysUserCase)
37
+		caseids = c.GetCaseIDs(cases)
38
+	}
39
+	ordersList, err := c.serv.GetCourseStatistics(typeid, caseids, name, page, pagesize)
40
+	if err != nil {
41
+		c.ResponseError(err)
42
+	}
43
+
44
+	c.ResponseJSON(ordersList)
45
+}

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

@@ -0,0 +1,45 @@
1
+package statistics
2
+
3
+import "spaceofcheng/services/models/model"
4
+
5
+// GetGoodsStatistics 获取商品统计数据
6
+func (c *StatisticsController) GetGoodsStatistics() {
7
+	page, _ := c.GetInt("page")
8
+	pagesize, _ := c.GetInt("pagesize")
9
+	caseids := c.GetString("caseid")
10
+	name := c.GetString("name")
11
+	typeid := c.GetString("typeid")
12
+
13
+	if caseids == "" {
14
+		cases := c.Context.Get("cases").([]model.SysUserCase)
15
+		caseids = c.GetCaseIDs(cases)
16
+	}
17
+	goodsList, err := c.serv.GetGoodsStatistics(caseids, typeid, name, page, pagesize)
18
+	if err != nil {
19
+		c.ResponseError(err)
20
+	}
21
+
22
+	c.ResponseJSON(goodsList)
23
+}
24
+
25
+// GetGoodsOrdersStatistics 获取商品订单统计数据
26
+func (c *StatisticsController) GetGoodsOrdersStatistics() {
27
+	page, _ := c.GetInt("page")
28
+	pagesize, _ := c.GetInt("pagesize")
29
+	caseids := c.GetString("caseid")
30
+	status := c.GetString("status")
31
+	usertype := c.GetString("usertype")
32
+	begindate := c.GetString("begindate")
33
+	enddate := c.GetString("enddate")
34
+
35
+	if caseids == "" {
36
+		cases := c.Context.Get("cases").([]model.SysUserCase)
37
+		caseids = c.GetCaseIDs(cases)
38
+	}
39
+	goodsList, err := c.serv.GetGoodsOrdersStatistics(status, usertype, caseids, begindate, enddate, page, pagesize)
40
+	if err != nil {
41
+		c.ResponseError(err)
42
+	}
43
+
44
+	c.ResponseJSON(goodsList)
45
+}

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

@@ -0,0 +1,19 @@
1
+package statistics
2
+
3
+import (
4
+	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/service/statistics"
6
+)
7
+
8
+// StatisticsController 商品
9
+type StatisticsController struct {
10
+	serv *statistics.StatisticsServ
11
+	controllers.BaseController
12
+}
13
+
14
+// Constructor 初始化 Controller
15
+// @Title Constructor
16
+// @Description 初始化 Controller, 系统自动调用
17
+func (c *StatisticsController) Constructor() {
18
+	c.serv = statistics.NewStatisticsServ(c.Context)
19
+}

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

@@ -441,3 +441,140 @@
441 441
 2018/09/15 15:48:32 [E] 用户没有设置默认案场
442 442
 2018/09/15 15:48:36 [E] 用户没有设置默认案场
443 443
 2018/09/15 15:48:36 [E] 用户没有设置默认案场
444
+2018/09/15 17:32:50 [E] 用户没有设置默认案场
445
+2018/09/15 17:32:50 [E] 用户没有设置默认案场
446
+2018/09/15 17:35:31 [E] 用户没有设置默认案场
447
+2018/09/15 17:35:31 [E] 用户没有设置默认案场
448
+2018/09/15 19:53:50 [E] 用户没有设置默认案场
449
+2018/09/15 19:58:02 [E] 用户没有设置默认案场
450
+2018/09/15 19:58:21 [E] 用户没有设置默认案场
451
+2018/09/15 19:59:28 [E] 用户没有设置默认案场
452
+2018/09/15 19:59:28 [E] 用户没有设置默认案场
453
+2018/09/15 20:00:27 [E] 用户没有设置默认案场
454
+2018/09/15 20:00:27 [E] 用户没有设置默认案场
455
+2018/09/15 20:05:23 [E] 用户没有设置默认案场
456
+2018/09/15 20:05:23 [E] 用户没有设置默认案场
457
+2018/09/15 20:05:34 [E] 用户没有设置默认案场
458
+2018/09/15 20:05:34 [E] 用户没有设置默认案场
459
+2018/09/15 20:06:38 [E] 用户没有设置默认案场
460
+2018/09/15 20:08:27 [E] 用户没有设置默认案场
461
+2018/09/15 20:09:25 [E] 用户没有设置默认案场
462
+2018/09/15 20:10:33 [E] 用户没有设置默认案场
463
+2018/09/15 20:10:36 [E] 用户没有设置默认案场
464
+2018/09/15 20:10:36 [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 'lile '%111%' GROUP BY
465
+					e.case_name,
466
+					b.goods_name,
467
+					c.type_name,
468
+			' at line 24
469
+2018/09/15 20:10:59 [E] 用户没有设置默认案场
470
+2018/09/15 20:10:59 [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 'lile '%111%' GROUP BY
471
+					e.case_name,
472
+					b.goods_name,
473
+					c.type_name,
474
+			' at line 24
475
+2018/09/15 20:14:41 [E] 用户没有设置默认案场
476
+2018/09/15 20:14:41 [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 'lile '%111%' GROUP BY
477
+					e.case_name,
478
+					b.goods_name,
479
+					c.type_name,
480
+			' at line 24
481
+2018/09/15 20:15:09 [E] 用户没有设置默认案场
482
+2018/09/15 20:15:09 [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 'lile '%111%' GROUP BY
483
+					e.case_name,
484
+					b.goods_name,
485
+					c.type_name,
486
+			' at line 24
487
+2018/09/15 20:16:08 [E] 用户没有设置默认案场
488
+2018/09/15 20:16:33 [E] 用户没有设置默认案场
489
+2018/09/15 20:16:33 [E] 用户没有设置默认案场
490
+2018/09/15 20:18:10 [E] 用户没有设置默认案场
491
+2018/09/15 20:18:11 [E] 用户没有设置默认案场
492
+2018/09/15 20:18:16 [E] 用户没有设置默认案场
493
+2018/09/15 20:18:16 [E] 用户没有设置默认案场
494
+2018/09/15 20:18:17 [E] 用户没有设置默认案场
495
+2018/09/15 20:19:05 [E] 用户没有设置默认案场
496
+2018/09/15 20:19:05 [E] 用户没有设置默认案场
497
+2018/09/15 20:19:12 [E] 用户没有设置默认案场
498
+2018/09/15 20:19:19 [E] 用户没有设置默认案场
499
+2018/09/15 20:19:19 [E] 创建VIP卡失败: Error 1054: Unknown column 'sales_id' in 'field list'
500
+2018/09/15 20:20:02 [E] 用户没有设置默认案场
501
+2018/09/15 20:21:40 [E] 用户没有设置默认案场
502
+2018/09/15 20:21:40 [E] 用户没有设置默认案场
503
+2018/09/15 20:21:40 [E] 用户没有设置默认案场
504
+2018/09/15 20:21:55 [E] 用户没有设置默认案场
505
+2018/09/15 20:21:55 [E] 用户没有设置默认案场
506
+2018/09/15 20:22:03 [E] 用户没有设置默认案场
507
+2018/09/15 20:22:23 [E] 用户没有设置默认案场
508
+2018/09/15 20:22:25 [E] 用户没有设置默认案场
509
+2018/09/15 20:22:30 [E] 用户没有设置默认案场
510
+2018/09/15 20:22:36 [E] 课程下单失败: Error 1366: Incorrect decimal value: '' for column 'coupon_amount' at row 1
511
+2018/09/15 20:22:36 [E] 课程下单失败: 下单失败, 请重试
512
+2018/09/15 20:23:41 [E] 用户没有设置默认案场
513
+2018/09/15 20:23:41 [E] 用户没有设置默认案场
514
+2018/09/15 20:23:42 [E] 用户没有设置默认案场
515
+2018/09/15 20:28:39 [E] 用户没有设置默认案场
516
+2018/09/15 20:28:39 [E] 用户没有设置默认案场
517
+2018/09/15 20:30:57 [E] 用户没有设置默认案场
518
+2018/09/15 20:30:57 [E] 用户没有设置默认案场
519
+2018/09/15 20:31:21 [E] 用户没有设置默认案场
520
+2018/09/15 20:31:21 [E] 用户没有设置默认案场
521
+2018/09/15 20:35:30 [E] 用户没有设置默认案场
522
+2018/09/15 20:36:12 [E] 用户没有设置默认案场
523
+2018/09/15 20:36:12 [E] 用户没有设置默认案场
524
+2018/09/15 20:45:17 [E] 用户没有设置默认案场
525
+2018/09/15 20:46:02 [E] 用户没有设置默认案场
526
+2018/09/15 20:46:28 [E] 用户没有设置默认案场
527
+2018/09/15 20:46:41 [E] 用户没有设置默认案场
528
+2018/09/15 20:46:41 [E] 用户没有设置默认案场
529
+2018/09/15 20:47:09 [E] 用户没有设置默认案场
530
+2018/09/15 20:47:09 [E] 用户没有设置默认案场
531
+2018/09/15 20:47:26 [E] 用户没有设置默认案场
532
+2018/09/15 20:47:29 [E] 用户没有设置默认案场
533
+2018/09/15 20:47:29 [E] 用户没有设置默认案场
534
+2018/09/15 20:47:50 [E] 用户没有设置默认案场
535
+2018/09/15 20:48:53 [E] 用户没有设置默认案场
536
+2018/09/15 20:54:06 [E] 用户没有设置默认案场
537
+2018/09/15 20:54:11 [E] 用户没有设置默认案场
538
+2018/09/15 20:54:16 [E] 用户没有设置默认案场
539
+2018/09/15 20:55:29 [E] 用户没有设置默认案场
540
+2018/09/15 20:56:43 [E] 用户没有设置默认案场
541
+2018/09/15 20:56:46 [E] 用户没有设置默认案场
542
+2018/09/15 20:57:08 [E] 用户没有设置默认案场
543
+2018/09/15 20:57:08 [E] 用户没有设置默认案场
544
+2018/09/15 20:57:14 [E] 用户没有设置默认案场
545
+2018/09/15 20:57:17 [E] 用户没有设置默认案场
546
+2018/09/15 20:57:24 [E] 用户没有设置默认案场
547
+2018/09/15 20:58:03 [E] 用户没有设置默认案场
548
+2018/09/15 20:58:42 [E] 用户没有设置默认案场
549
+2018/09/15 21:01:05 [E] 用户没有设置默认案场
550
+2018/09/15 21:03:14 [E] 用户没有设置默认案场
551
+2018/09/15 21:04:55 [E] 用户没有设置默认案场
552
+2018/09/15 21:05:20 [E] 用户没有设置默认案场
553
+2018/09/15 21:07:38 [E] 用户没有设置默认案场
554
+2018/09/15 21:08:00 [E] 用户没有设置默认案场
555
+2018/09/15 21:09:20 [E] 用户没有设置默认案场
556
+2018/09/15 21:09:35 [E] 用户没有设置默认案场
557
+2018/09/15 21:09:35 [E] 用户没有设置默认案场
558
+2018/09/15 21:09:58 [E] 用户没有设置默认案场
559
+2018/09/15 21:10:18 [E] 用户没有设置默认案场
560
+2018/09/15 21:10:18 [E] 用户没有设置默认案场
561
+2018/09/15 21:10:50 [E] 用户没有设置默认案场
562
+2018/09/15 21:11:12 [E] 用户没有设置默认案场
563
+2018/09/15 21:11:20 [E] 用户没有设置默认案场
564
+2018/09/15 21:12:04 [E] 用户没有设置默认案场
565
+2018/09/15 21:12:55 [E] 用户没有设置默认案场
566
+2018/09/15 21:13:03 [E] 用户没有设置默认案场
567
+2018/09/15 21:18:03 [E] 用户没有设置默认案场
568
+2018/09/15 21:18:03 [E] 用户没有设置默认案场
569
+2018/09/15 21:18:09 [E] 用户没有设置默认案场
570
+2018/09/15 21:18:09 [E] 用户没有设置默认案场
571
+2018/09/15 21:18:09 [E] 用户没有设置默认案场
572
+2018/09/15 21:18:49 [E] 用户没有设置默认案场
573
+2018/09/15 21:18:49 [E] 用户没有设置默认案场
574
+2018/09/15 21:18:50 [E] 用户没有设置默认案场
575
+2018/09/15 21:19:33 [E] 用户没有设置默认案场
576
+2018/09/15 21:19:33 [E] 用户没有设置默认案场
577
+2018/09/15 21:19:48 [E] 用户没有设置默认案场
578
+2018/09/15 21:19:48 [E] 用户没有设置默认案场
579
+2018/09/15 21:19:51 [E] 用户没有设置默认案场
580
+2018/09/15 21:40:12 [E] 用户没有设置默认案场

+ 1
- 1
models/message/cmscase.go 查看文件

@@ -98,7 +98,7 @@ func (m *MessageDAO) GetCmsCaseImgs(cmscaseid string) ([]model.TaCmsCaseImage, e
98 98
 // GetCourseByCaseID 根据案场ID获取所有的课程信息
99 99
 func (m *MessageDAO) GetCourseByCaseID(caseid string) ([]course.CourseDetail, error) {
100 100
 	var course []course.CourseDetail
101
-	sql := `select * from ta_course where status>` + strconv.Itoa(models.STATUS_DEL) + ` and case_id=?`
101
+	sql := `select * from ta_course where status = ` + strconv.Itoa(models.STATUS_NORMAL) + ` and case_id=?`
102 102
 	err := m.db.Sql(sql, caseid).Find(&course)
103 103
 	return course, err
104 104
 }

+ 220
- 0
models/statistics/course.go 查看文件

@@ -0,0 +1,220 @@
1
+package statistics
2
+
3
+import (
4
+	"strconv"
5
+	"strings"
6
+	"time"
7
+)
8
+
9
+// CourseOrdersStatistics 课程订单
10
+type CourseOrdersStatistics struct {
11
+	OrdersId     string
12
+	OrdersNo     string
13
+	CourseName   string
14
+	CaseName     string
15
+	LocationName string
16
+	BeginDate    time.Time
17
+	EndDate      time.Time
18
+	Name         string
19
+	CustomerName string
20
+	Phone        string
21
+	CreateDate   time.Time
22
+}
23
+
24
+// GetCourseOrdersStatistics 获取课程订单统计信息
25
+func (m *StatisticsDAO) GetCourseOrdersStatistics(typeid, caseids, name, begindate, enddate string, page, pageSize int) ([]CourseOrdersStatistics, error) {
26
+	var courseOrders []CourseOrdersStatistics
27
+	sql := `SELECT
28
+					a.orders_id,
29
+					a.orders_no,
30
+					c.course_name,
31
+					b.case_name,
32
+					d.location_name,
33
+					c.begin_date,
34
+					c.end_date,
35
+					e. NAME,
36
+					e.customer_name,
37
+					e.phone,
38
+					a.create_date
39
+				FROM
40
+					ta_course_orders a
41
+				INNER JOIN sys_case b ON a.case_id = b.case_id
42
+				INNER JOIN ta_course c ON a.course_id = c.course_id
43
+				INNER JOIN td_cms_image_location d ON c.location_id = d.location_id
44
+				INNER JOIN ta_customer e ON a.customer_id = e.customer_id 
45
+				Where c.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
46
+	if typeid != "" {
47
+		sql = sql + ` and c.location_id = '` + typeid + `'`
48
+	}
49
+	if name != "" {
50
+		sql = sql + ` and c.course_name like '%` + name + `%'`
51
+	}
52
+	if begindate != "" {
53
+		sql = sql + ` and DATE_FORMAT(a.create_date, '%Y-%m-%d') >= '` + begindate + `'`
54
+	}
55
+	if enddate != "" {
56
+		sql = sql + ` and DATE_FORMAT(a.create_date, '%Y-%m-%d') <= '` + enddate + `'`
57
+	}
58
+	sql = sql + ` limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
59
+
60
+	err := m.db.Sql(sql).Find(&courseOrders)
61
+	return courseOrders, err
62
+}
63
+
64
+// GetCourseOrdersStatisticsCount 获取课程订单统计数量
65
+func (m *StatisticsDAO) GetCourseOrdersStatisticsCount(typeid, caseids, name, begindate, enddate string) (int, error) {
66
+	var courseOrders []CourseOrdersStatistics
67
+	sql := `SELECT
68
+					a.orders_id,
69
+					a.orders_no,
70
+					c.course_name,
71
+					b.case_name,
72
+					d.location_name,
73
+					c.begin_date,
74
+					c.end_date,
75
+					e. NAME,
76
+					e.customer_name,
77
+					e.phone,
78
+					a.create_date
79
+				FROM
80
+					ta_course_orders a
81
+				INNER JOIN sys_case b ON a.case_id = b.case_id
82
+				INNER JOIN ta_course c ON a.course_id = c.course_id
83
+				INNER JOIN td_cms_image_location d ON c.location_id = d.location_id
84
+				INNER JOIN ta_customer e ON a.customer_id = e.customer_id 
85
+				Where c.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
86
+	if typeid != "" {
87
+		sql = sql + ` and c.location_id = '` + typeid + `'`
88
+	}
89
+	if name != "" {
90
+		sql = sql + ` and c.course_name like '%` + name + `%'`
91
+	}
92
+	if begindate != "" {
93
+		sql = sql + ` and DATE_FORMAT(a.create_date, '%Y-%m-%d') >= '` + begindate + `'`
94
+	}
95
+	if enddate != "" {
96
+		sql = sql + ` and DATE_FORMAT(a.create_date, '%Y-%m-%d') <= '` + enddate + `'`
97
+	}
98
+
99
+	err := m.db.Sql(sql).Find(&courseOrders)
100
+	return len(courseOrders), err
101
+}
102
+
103
+// CourseStatistics 课程统计数据
104
+type CourseStatistics struct {
105
+	CourseId     string
106
+	CaseName     string
107
+	CourseName   string
108
+	LocationName string
109
+	BeginDate    time.Time
110
+	EndDate      time.Time
111
+	Price        string
112
+	Total        int
113
+	JoinTotal    int
114
+}
115
+
116
+// GetCourseStatistics 获取课程统计信息
117
+func (m *StatisticsDAO) GetCourseStatistics(typeid, caseids, name string, page, pageSize int) ([]CourseStatistics, error) {
118
+	var courses []CourseStatistics
119
+	sql := `SELECT
120
+					a.course_id,
121
+					d.case_name,
122
+					a.course_name,
123
+					e.location_name,
124
+					a.begin_date,
125
+					a.end_date,
126
+					a.price,
127
+					b.total,
128
+					c.join_total
129
+				FROM
130
+					ta_course a
131
+				INNER JOIN sys_case d ON a.case_id = d.case_id
132
+				INNER JOIN td_cms_image_location e ON a.location_id = e.location_id
133
+				LEFT JOIN (
134
+					SELECT
135
+						course_id,
136
+						count(1) AS total
137
+					FROM
138
+						ta_customer_course
139
+					GROUP BY
140
+						course_id
141
+				) b ON a.course_id = b.course_id
142
+				LEFT JOIN (
143
+					SELECT
144
+						course_id,
145
+						count(1) AS join_total
146
+					FROM
147
+						ta_customer_course
148
+					WHERE
149
+						join_num > 0
150
+					GROUP BY
151
+						course_id
152
+				) c ON a.course_id = c.course_id SELECT
153
+					*
154
+				FROM
155
+					ta_customer_course
156
+				Where d.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
157
+	if typeid != "" {
158
+		sql = sql + ` and e.location_id = '` + typeid + `'`
159
+	}
160
+	if name != "" {
161
+		sql = sql + ` and a.course_name like '%` + name + `%'`
162
+	}
163
+
164
+	sql = sql + ` limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
165
+
166
+	err := m.db.Sql(sql).Find(&courses)
167
+	return courses, err
168
+}
169
+
170
+// GetCourseStatisticsCount 获取课程统计信息数量
171
+func (m *StatisticsDAO) GetCourseStatisticsCount(typeid, caseids, name string) (int, error) {
172
+	var courses []CourseStatistics
173
+	sql := `SELECT
174
+					a.course_id,
175
+					d.case_name,
176
+					a.course_name,
177
+					e.location_name,
178
+					a.begin_date,
179
+					a.end_date,
180
+					a.price,
181
+					b.total,
182
+					c.join_total
183
+				FROM
184
+					ta_course a
185
+				INNER JOIN sys_case d ON a.case_id = d.case_id
186
+				INNER JOIN td_cms_image_location e ON a.location_id = e.location_id
187
+				LEFT JOIN (
188
+					SELECT
189
+						course_id,
190
+						count(1) AS total
191
+					FROM
192
+						ta_customer_course
193
+					GROUP BY
194
+						course_id
195
+				) b ON a.course_id = b.course_id
196
+				LEFT JOIN (
197
+					SELECT
198
+						course_id,
199
+						count(1) AS join_total
200
+					FROM
201
+						ta_customer_course
202
+					WHERE
203
+						join_num > 0
204
+					GROUP BY
205
+						course_id
206
+				) c ON a.course_id = c.course_id SELECT
207
+					*
208
+				FROM
209
+					ta_customer_course
210
+				Where d.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
211
+	if typeid != "" {
212
+		sql = sql + ` and e.location_id = '` + typeid + `'`
213
+	}
214
+	if name != "" {
215
+		sql = sql + ` and a.course_name like '%` + name + `%'`
216
+	}
217
+
218
+	err := m.db.Sql(sql).Find(&courses)
219
+	return len(courses), err
220
+}

+ 216
- 0
models/statistics/goods.go 查看文件

@@ -0,0 +1,216 @@
1
+package statistics
2
+
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+	"strconv"
6
+	"strings"
7
+	"time"
8
+)
9
+
10
+// GoodsStatistics 商品统计信息
11
+type GoodsStatistics struct {
12
+	CaseName    string
13
+	GoodsName   string
14
+	TypeName    string
15
+	Price       string
16
+	Total       int
17
+	FinishTotal int
18
+	Amount      string
19
+}
20
+
21
+// GetGoodsStatistics 获取商品统计信息
22
+func (m *StatisticsDAO) GetGoodsStatistics(caseids, typeid, name string, page, pageSize int) ([]GoodsStatistics, error) {
23
+	var goods []GoodsStatistics
24
+	sql := `SELECT
25
+					e.case_name,
26
+					b.goods_name,
27
+					c.type_name,
28
+					b.price,
29
+					sum(a.number) AS total,
30
+					sum(
31
+						(
32
+							CASE
33
+							WHEN d.make_status = 'finished' THEN
34
+								1
35
+							ELSE
36
+								0
37
+							END
38
+						)
39
+					) AS finishtotal,
40
+					b.price * sum(a.number) AS amount
41
+				FROM
42
+					ta_goods_orders_detail a
43
+				INNER JOIN ta_goods b ON a.goods_id = b.goods_id
44
+				INNER JOIN td_goods_type c ON b.type_id = c.type_id
45
+				INNER JOIN ta_goods_orders d ON a.orders_id = d.orders_id
46
+				inner join sys_case e on b.case_id=e.case_id 
47
+				where e.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
48
+
49
+	if typeid != "" {
50
+		sql = sql + ` and c.type_id='` + typeid + `'`
51
+	}
52
+
53
+	if name != "" {
54
+		sql = sql + ` and b.goods_name like '%` + name + `%'`
55
+	}
56
+	sql = sql + ` GROUP BY
57
+					e.case_name,
58
+					b.goods_name,
59
+					c.type_name,
60
+					b.price limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
61
+	err := m.db.Sql(sql).Find(&goods)
62
+	return goods, err
63
+}
64
+
65
+// GetGoodsStatisticsCount 获取总数
66
+func (m *StatisticsDAO) GetGoodsStatisticsCount(caseids, typeid, name string) (int, error) {
67
+	var goods []GoodsStatistics
68
+	sql := `SELECT
69
+					e.case_name,
70
+					b.goods_name,
71
+					c.type_name,
72
+					b.price,
73
+					sum(a.number) AS total,
74
+					sum(
75
+						(
76
+							CASE
77
+							WHEN d.make_status = 'finished' THEN
78
+								1
79
+							ELSE
80
+								0
81
+							END
82
+						)
83
+					) AS finishtotal,
84
+					b.price * sum(a.number) AS amount
85
+				FROM
86
+					ta_goods_orders_detail a
87
+				INNER JOIN ta_goods b ON a.goods_id = b.goods_id
88
+				INNER JOIN td_goods_type c ON b.type_id = c.type_id
89
+				INNER JOIN ta_goods_orders d ON a.orders_id = d.orders_id
90
+				inner join sys_case e on b.case_id=e.case_id 
91
+				where e.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
92
+
93
+	if typeid != "" {
94
+		sql = sql + ` and c.type_id='` + typeid + `'`
95
+	}
96
+
97
+	if name != "" {
98
+		sql = sql + ` and b.goods_name like '%` + name + `%'`
99
+	}
100
+	sql = sql + ` GROUP BY
101
+					e.case_name,
102
+					b.goods_name,
103
+					c.type_name,
104
+					b.price`
105
+	err := m.db.Sql(sql).Find(&goods)
106
+	return len(goods), err
107
+}
108
+
109
+// GoodsOrdersStatistics 商品订单统计信息
110
+type GoodsOrdersStatistics struct {
111
+	OrdersId     string
112
+	OrdersNo     string
113
+	CaseName     string
114
+	UserType     string
115
+	CreateDate   time.Time
116
+	Status       int
117
+	MakeStatus   string
118
+	AreaName     string
119
+	TableNo      string
120
+	CustomerName string
121
+	Phone        string
122
+	Name         string
123
+	Details      []model.TaGoodsOrdersDetail
124
+}
125
+
126
+// GetGoodsOrderStatistics 获取商品订单
127
+func (m *StatisticsDAO) GetGoodsOrderStatistics(status, usertype, caseids, begindate, enddate string, page, pageSize int) ([]GoodsOrdersStatistics, error) {
128
+	var orders []GoodsOrdersStatistics
129
+	sql := `SELECT
130
+						a.orders_id,
131
+						a.orders_no,
132
+						d.case_name,
133
+						a.user_type,
134
+						a.create_date,
135
+						a.status,
136
+						a.make_status,
137
+						a.area_name,
138
+						a.table_no,
139
+						c.customer_name,
140
+						c. NAME,
141
+						c.phone
142
+					FROM
143
+						ta_goods_orders a
144
+					INNER JOIN ta_customer b ON a.user_id = b.customer_id
145
+					INNER JOIN ta_customer c ON b.customer_id = c.customer_id
146
+					INNER JOIN sys_case d ON a.case_id = d.case_id
147
+					where d.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
148
+
149
+	if usertype != "" {
150
+		sql = sql + ` and a.user_type='` + usertype + `'`
151
+	}
152
+	if begindate != "" {
153
+		sql = sql + ` and DATE_FORMAT(a.create_date, '%Y-%m-%d') >= '` + begindate + `'`
154
+	}
155
+	if enddate != "" {
156
+		sql = sql + ` and DATE_FORMAT(a.create_date, '%Y-%m-%d') <= '` + enddate + `'`
157
+	}
158
+	if status != "" {
159
+		sql = sql + ` and a.make_status='` + status + `'`
160
+	}
161
+	sql = sql + ` limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
162
+
163
+	err := m.db.Sql(sql).Find(&orders)
164
+	if err != nil {
165
+		return nil, err
166
+	}
167
+	for inx, item := range orders {
168
+		var details []model.TaGoodsOrdersDetail
169
+		err := m.db.Where("orders_id=?", item.OrdersId).Find(&details)
170
+		if err != nil {
171
+			return nil, err
172
+		}
173
+		orders[inx].Details = details
174
+	}
175
+	return orders, err
176
+}
177
+
178
+// GetGoodsOrderStatisticsCount 获取商品订单Count
179
+func (m *StatisticsDAO) GetGoodsOrderStatisticsCount(status, usertype, caseids, begindate, enddate string) (int, error) {
180
+	var orders []GoodsOrdersStatistics
181
+	sql := `SELECT
182
+						a.orders_id,
183
+						a.orders_no,
184
+						d.case_name,
185
+						a.user_type,
186
+						a.create_date,
187
+						a.status,
188
+						a.make_status,
189
+						a.area_name,
190
+						a.table_no,
191
+						c.customer_name,
192
+						c. NAME,
193
+						c.phone
194
+					FROM
195
+						ta_goods_orders a
196
+					INNER JOIN ta_customer b ON a.user_id = b.customer_id
197
+					INNER JOIN ta_customer c ON b.customer_id = c.customer_id
198
+					INNER JOIN sys_case d ON a.case_id = d.case_id
199
+					where d.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
200
+
201
+	if usertype != "" {
202
+		sql = sql + ` and a.user_type='` + usertype + `'`
203
+	}
204
+	if begindate != "" {
205
+		sql = sql + ` and DATE_FORMAT(a.create_date, '%Y-%m-%d') >= '` + begindate + `'`
206
+	}
207
+	if enddate != "" {
208
+		sql = sql + ` and DATE_FORMAT(a.create_date, '%Y-%m-%d') <= '` + enddate + `'`
209
+	}
210
+	if status != "" {
211
+		sql = sql + ` and a.make_status='` + status + `'`
212
+	}
213
+
214
+	err := m.db.Sql(sql).Find(&orders)
215
+	return len(orders), err
216
+}

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

@@ -14,6 +14,7 @@ import (
14 14
 	"spaceofcheng/services/controllers/luckdrawlist"
15 15
 	"spaceofcheng/services/controllers/marketing"
16 16
 	"spaceofcheng/services/controllers/message"
17
+	"spaceofcheng/services/controllers/statistics"
17 18
 	"spaceofcheng/services/controllers/system"
18 19
 	"spaceofcheng/services/controllers/user"
19 20
 	"spaceofcheng/services/controllers/verify"
@@ -274,5 +275,11 @@ func getCommonRoutes() beego.LinkNamespace {
274 275
 
275 276
 		// websocket
276 277
 		beego.NSRouter("/websocket/:grps/:id", &controllers.BaseController{}, "get:Ws"),
278
+
279
+		// 统计类
280
+		beego.NSRouter("/statistics/goods", &statistics.StatisticsController{}, "get:GetGoodsStatistics"),
281
+		beego.NSRouter("/statistics/goodsorders", &statistics.StatisticsController{}, "get:GetGoodsOrdersStatistics"),
282
+		beego.NSRouter("/statistics/courseorders", &statistics.StatisticsController{}, "get:GetCourseOrdersStatistics"),
283
+		beego.NSRouter("/statistics/courses", &statistics.StatisticsController{}, "get:GetCourseStatistics"),
277 284
 	)
278 285
 }

+ 11
- 0
service/coupon/coupon.go 查看文件

@@ -338,6 +338,17 @@ func (s *CouponServ) GetCouponByID(cpID string) (*model.TaCoupon, error) {
338 338
 	return cp, nil
339 339
 }
340 340
 
341
+// GetCouponInfoByID 获取详情
342
+func (s *CouponServ) GetCouponInfoByID(cpID string) (*coupon.CouponInfo, error) {
343
+	cp, err := s.dao.GetCouponInfoByID(cpID)
344
+	if err != nil {
345
+		utils.LogError("获取优惠券失败: " + err.Error())
346
+		return nil, errors.New("校验优惠券失败")
347
+	}
348
+
349
+	return cp, nil
350
+}
351
+
341 352
 // GetCouponByIDWithCheck 获取优惠券
342 353
 func (s *CouponServ) GetCouponByIDWithCheck(cpID string) (*coupon.CouponInfo, error) {
343 354
 	cp, err := s.dao.GetCouponInfoByID(cpID)

+ 1
- 0
service/course/order.go 查看文件

@@ -131,6 +131,7 @@ func (s *CourseServ) Orders(
131 131
 		}
132 132
 	} else {
133 133
 		couseOrder.PayType = models.CONSUME_COINCHG
134
+		couseOrder.CouponAmount = "0.0"
134 135
 	}
135 136
 
136 137
 	couponAmount, _ := strconv.ParseFloat(couseOrder.CouponAmount, 64)

+ 71
- 0
service/statistics/course.go 查看文件

@@ -0,0 +1,71 @@
1
+package statistics
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/service"
6
+	"spaceofcheng/services/utils"
7
+)
8
+
9
+// GetCourseOrdersStatistics 获取课程订单统计信息
10
+func (s *StatisticsServ) GetCourseOrdersStatistics(typeid, caseids, name, begindate, enddate string, page, pageSize int) (map[string]interface{}, error) {
11
+	if pageSize == 0 {
12
+		pageSize = service.PAGENUM
13
+	}
14
+	if page == 0 {
15
+		page = 1
16
+	}
17
+
18
+	if caseids == "" {
19
+		return nil, errors.New("请先选择案场信息")
20
+	}
21
+
22
+	list, err := s.dao.GetCourseOrdersStatistics(typeid, caseids, name, begindate, enddate, page, pageSize)
23
+	if err != nil {
24
+		utils.LogError("获取课程订单统计数据失败: " + err.Error())
25
+		return nil, errors.New("获取课程订单统计数据失败")
26
+	}
27
+	total, err := s.dao.GetCourseOrdersStatisticsCount(typeid, caseids, name, begindate, enddate)
28
+	if err != nil {
29
+		utils.LogError("获取课程订单统计数据失败: " + err.Error())
30
+		return nil, errors.New("获取课程订单统计数据失败")
31
+	}
32
+
33
+	return map[string]interface{}{
34
+		"list":     list,
35
+		"pagesize": pageSize,
36
+		"pagenum":  total,
37
+		"page":     page,
38
+	}, nil
39
+}
40
+
41
+// GetCourseStatistics 获取课程统计信息
42
+func (s *StatisticsServ) GetCourseStatistics(typeid, caseids, name 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.GetCourseStatistics(typeid, caseids, name, page, pageSize)
55
+	if err != nil {
56
+		utils.LogError("获取课程统计数据失败: " + err.Error())
57
+		return nil, errors.New("获取课程统计数据失败")
58
+	}
59
+	total, err := s.dao.GetCourseStatisticsCount(typeid, caseids, name)
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
+}

+ 71
- 0
service/statistics/goods.go 查看文件

@@ -0,0 +1,71 @@
1
+package statistics
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/service"
6
+	"spaceofcheng/services/utils"
7
+)
8
+
9
+// GetGoodsStatistics 获取商品统计信息
10
+func (s *StatisticsServ) GetGoodsStatistics(caseids, typeid, name string, page, pageSize int) (map[string]interface{}, error) {
11
+	if pageSize == 0 {
12
+		pageSize = service.PAGENUM
13
+	}
14
+	if page == 0 {
15
+		page = 1
16
+	}
17
+
18
+	if caseids == "" {
19
+		return nil, errors.New("请先选择案场信息")
20
+	}
21
+
22
+	list, err := s.dao.GetGoodsStatistics(caseids, typeid, name, page, pageSize)
23
+	if err != nil {
24
+		utils.LogError("获取商品统计数据失败: " + err.Error())
25
+		return nil, errors.New("获取商品统计数据失败")
26
+	}
27
+	total, err := s.dao.GetGoodsStatisticsCount(caseids, typeid, name)
28
+	if err != nil {
29
+		utils.LogError("获取商品统计数据失败: " + err.Error())
30
+		return nil, errors.New("获取商品统计数据失败")
31
+	}
32
+
33
+	return map[string]interface{}{
34
+		"list":     list,
35
+		"pagesize": pageSize,
36
+		"pagenum":  total,
37
+		"page":     page,
38
+	}, nil
39
+}
40
+
41
+// GetGoodsOrdersStatistics 获取商品订单统计信息
42
+func (s *StatisticsServ) GetGoodsOrdersStatistics(status, usertype, caseids, begindate, enddate 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.GetGoodsOrderStatistics(status, usertype, caseids, begindate, enddate, page, pageSize)
55
+	if err != nil {
56
+		utils.LogError("获取商品订单统计数据失败: " + err.Error())
57
+		return nil, errors.New("获取商品订单统计数据失败")
58
+	}
59
+	total, err := s.dao.GetGoodsOrderStatisticsCount(status, usertype, caseids, begindate, enddate)
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
+}