瀏覽代碼

营销活动

keyman1995 6 年之前
父節點
當前提交
38d7facc0e

+ 2
- 2
controllers/user/user.go 查看文件

@@ -79,8 +79,8 @@ func (c *UserController) GetUserList() {
79 79
 func (c *UserController) GetUserTypes() {
80 80
 	// cases := c.Context.Get("cases").([]model.SysUserCase)
81 81
 	// caseIDs := c.GetCaseIDs(cases)
82
-	orgid := c.GetString(":org")
83
-	usertypes, err := c.dao.GetUserTypes(orgid)
82
+	org := c.Context.Get("org").(model.SysOrg)
83
+	usertypes, err := c.dao.GetUserTypes(org.OrgId)
84 84
 	if err != nil {
85 85
 		c.ResponseError(err)
86 86
 	}

+ 95
- 0
controllers/verify/verify.go 查看文件

@@ -0,0 +1,95 @@
1
+package verify
2
+
3
+import (
4
+	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/service/verify"
7
+)
8
+
9
+// CaseController 信息
10
+type VerifyController struct {
11
+	dao *verify.VerifyServ
12
+	controllers.BaseController
13
+}
14
+
15
+// Constructor 初始化 Controller
16
+// @Title Constructor
17
+// @Description 初始化 Controller, 系统自动调用
18
+func (c *VerifyController) Constructor() {
19
+	c.dao = verify.NewVerifyServ(c.Context)
20
+}
21
+
22
+// GetCustomerCourseDetailListById 根据id获取我的课程详情
23
+func (c *VerifyController) GetCustomerCourseDetailListById() {
24
+	customerCourseId := c.GetString(":customerCourseId")
25
+	caseid := c.GetString("caseid")
26
+	if caseid == "" {
27
+		caseinfo := c.Context.Get("currentCase").(model.SysUserCase)
28
+		caseid = caseinfo.CaseId
29
+	}
30
+	page, _ := c.GetInt("page")
31
+	pageSize, _ := c.GetInt("pagesize")
32
+	list, err := c.dao.GetCustomerCourseDetailById(customerCourseId, caseid, page, pageSize)
33
+	if err != nil {
34
+		c.ResponseError(err)
35
+	}
36
+	c.ResponseJSON(list)
37
+
38
+}
39
+
40
+// GetCustomerCourseDetailListBytel 根据手机号获取我的课程详情id
41
+func (c *VerifyController) GetCustomerCourseDetailListBytel() {
42
+	caseid := c.GetString("caseid")
43
+	if caseid == "" {
44
+		caseinfo := c.Context.Get("currentCase").(model.SysUserCase)
45
+		caseid = caseinfo.CaseId
46
+	}
47
+	tel := c.GetString(":tel")
48
+	page, _ := c.GetInt("page")
49
+	pageSize, _ := c.GetInt("pagesize")
50
+	list, err := c.dao.GetCustomerCourseDetailByTel(tel, caseid, page, pageSize)
51
+	if err != nil {
52
+		c.ResponseError(err)
53
+	}
54
+	c.ResponseJSON(list)
55
+
56
+}
57
+
58
+// VerifyCourse核销我的课程详情
59
+func (c *VerifyController) VerifyCourse() {
60
+	sysUser := c.Context.Get("user").(model.SysUser)
61
+	userId := sysUser.UserId
62
+	customerDetailId := c.GetString(":customerDetailId")
63
+	customerCourseDetail, err := c.dao.GetCustomerCourseDetailByDetailId(customerDetailId)
64
+	if err != nil {
65
+		c.ResponseError(err)
66
+	}
67
+
68
+	customerCourse, err := c.dao.GetCustomerCourseByDetailId(customerCourseDetail.CustomerDetailId)
69
+	if err != nil {
70
+		c.ResponseError(err)
71
+	}
72
+	if customerCourse.CourseObtaimType == "card" {
73
+		customerCard, err := c.dao.GetCustomerCardByDetailId(customerCourseDetail.CustomerDetailId)
74
+		if err != nil {
75
+			c.ResponseError(err)
76
+		}
77
+		if customerCard.VerifyStatus == "usable" {
78
+			customerCard.VerifyStatus = "used"
79
+			err := c.dao.UpdateCustomerCard(customerCard)
80
+			if err != nil {
81
+				c.ResponseError(err)
82
+			}
83
+		}
84
+	}
85
+	err = c.dao.UpdateCustomerCourse(customerCourse)
86
+	if err != nil {
87
+		c.ResponseError(err)
88
+	}
89
+	err = c.dao.UpdateCustomerCourseDetail(customerCourseDetail, userId)
90
+	if err != nil {
91
+		c.ResponseError(err)
92
+	}
93
+	c.ResponseJSON("核销成功")
94
+
95
+}

+ 24
- 8
models/course/course.go 查看文件

@@ -224,36 +224,52 @@ func (m *CourseDAO) GetCourseDetail(courseid string) ([]model.TaCourseDetail, er
224 224
 	return details, err
225 225
 }
226 226
 
227
+// DetailInfo 排课记录
228
+type DetailInfo struct {
229
+	model.TaCourseDetail `xorm:"extends"`
230
+	CourseStatus         int
231
+	CourseName           string
232
+	CaseName             string
233
+	CaseAddress          string
234
+}
235
+
227 236
 // GetDetails 获取所有的排课记录
228
-func (m *CourseDAO) GetDetails(caseid, date string) ([]model.TaCourseDetail, error) {
229
-	var details []model.TaCourseDetail
230
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("DATE_FORMAT(begin_date,'%Y-%m') = ?", date).Find(&details)
237
+func (m *CourseDAO) GetDetails(caseid, date string) ([]DetailInfo, error) {
238
+	var details []DetailInfo
239
+
240
+	sql := `select a.*,b.course_name,b.status as course_status,c.case_name,c.case_address from ta_course_detail a 
241
+	inner join ta_course b on a.course_id=b.course_id 
242
+	inner join sys_case c on a.case_id=c.case_id where a.status>` + strconv.Itoa(models.STATUS_DEL) + `
243
+	and b.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.case_id='` + caseid + `' and DATE_FORMAT(a.begin_date,'%Y-%m') = '` + date + `'`
244
+	err := m.db.Sql(sql).Find(&details)
245
+
246
+	// err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("DATE_FORMAT(begin_date,'%Y-%m') = ?", date).Find(&details)
231 247
 	return details, err
232 248
 }
233 249
 
234 250
 // GetCourseSchedule 获取需要排课的记录
235 251
 func (m *CourseDAO) GetCourseSchedule(name, caseids, date string, page, pageSize int) ([]model.TaCourse, error) {
236 252
 	var courses []model.TaCourse
237
-	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And(date + " BETWEEN begin_date and end_date")
253
+	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
238 254
 	if name != "" {
239 255
 		dao.And("course_name like '%" + name + "%'")
240 256
 	}
241 257
 	if caseids != "" {
242
-		dao.And("caseids in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
258
+		dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
243 259
 	}
244
-	err := dao.OrderBy("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
260
+	err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
245 261
 	return courses, err
246 262
 }
247 263
 
248 264
 // GetCourseScheduleCount 获取排课记录数
249 265
 func (m *CourseDAO) GetCourseScheduleCount(name, caseids, date string) (int, error) {
250 266
 	var courses []model.TaCourse
251
-	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And(date + " BETWEEN begin_date and end_date")
267
+	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
252 268
 	if name != "" {
253 269
 		dao.And("course_name like '%" + name + "%'")
254 270
 	}
255 271
 	if caseids != "" {
256
-		dao.And("caseids in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
272
+		dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
257 273
 	}
258 274
 	err := dao.Find(&courses)
259 275
 	return len(courses), err

+ 2
- 0
models/course/tag.go 查看文件

@@ -5,6 +5,7 @@ import (
5 5
 	"spaceofcheng/services/models/model"
6 6
 	"spaceofcheng/services/utils"
7 7
 	"strconv"
8
+	"time"
8 9
 )
9 10
 
10 11
 // GetTagsList 获取标签列表
@@ -31,6 +32,7 @@ func (m *CourseDAO) GetTagsCount(orgid string) (int, error) {
31 32
 func (m *CourseDAO) AddCourseTag(tag model.TdCourseTag) (*model.TdCourseTag, error) {
32 33
 	tag.TagId = utils.GetGUID()
33 34
 	tag.Status = models.STATUS_NORMAL
35
+	tag.CreateDate = time.Now()
34 36
 	_, err := m.db.Insert(tag)
35 37
 	return &tag, err
36 38
 }

+ 0
- 3
models/model/ta_customer_card.go 查看文件

@@ -11,9 +11,6 @@ type TaCustomerCard struct {
11 11
 	CustomerId       string    `xorm:"VARCHAR(64)"`
12 12
 	StartDate        time.Time `xorm:"DATETIME"`
13 13
 	EndDate          time.Time `xorm:"DATETIME"`
14
-	CourseNum        int       `xorm:"INT(11)"`
15
-	JoinNum          int       `xorm:"INT(11)"`
16
-	CardState        string    `xorm:"VARCHAR(64)"`
17 14
 	Status           int       `xorm:"SMALLINT(6)"`
18 15
 	ReceiveDate      time.Time `xorm:"DATETIME"`
19 16
 	VerifyDate       time.Time `xorm:"DATETIME"`

+ 1
- 0
models/model/ta_customer_course.go 查看文件

@@ -11,6 +11,7 @@ type TaCustomerCourse struct {
11 11
 	OrgId            string    `xorm:"VARCHAR(64)"`
12 12
 	CaseId           string    `xorm:"VARCHAR(64)"`
13 13
 	CourseName       string    `xorm:"VARCHAR(50)"`
14
+	LocationId       string    `xorm:"VARCHAR(64)"`
14 15
 	Price            string    `xorm:"DECIMAL(8,2)"`
15 16
 	CourseNum        int       `xorm:"INT(11)"`
16 17
 	JoinNum          int       `xorm:"INT(11)"`

+ 134
- 233
models/verify/verify.go 查看文件

@@ -1,11 +1,9 @@
1 1
 package verify
2 2
 
3 3
 import (
4
-	"spaceofcheng/services/models"
5 4
 	"spaceofcheng/services/models/model"
6 5
 	"spaceofcheng/services/utils"
7 6
 	"strconv"
8
-	"time"
9 7
 
10 8
 	"github.com/go-xorm/xorm"
11 9
 )
@@ -24,267 +22,170 @@ func NewVerifyDAO(ctx *utils.Context) *VerifyDAO {
24 22
 	}
25 23
 }
26 24
 
27
-type verifyCourse struct {
28
-	targetId     string
29
-	caseId       string
30
-	caseName     string
31
-	locationName string
32
-	courseName   string
33
-	detailName   string
34
-	beginDate    time.Time
35
-	endDate      time.Time
36
-	courseType   string
25
+type MyCourse struct {
26
+	model.TaCustomerCourseDetail `xorm:"extends"`
27
+	CaseName                     string
28
+	CourseName                   string
29
+	DetailName                   string
30
+	LocationName                 string
37 31
 }
38 32
 
39
-func (m *VerifyDAO) GetExperienceCardVerifyList(customerCardId string, page, pageSize int) ([]verifyCourse, error) {
40
-	var course []verifyCourse
41
-	sql := `SELECT
42
-	a.target_id,
43
-	g.case_name,
44
-	c.card_id,
45
-	f.location_name,
46
-	e.course_name,
47
-	d.detail_name,
48
-	d.begin_date,
49
-	d.end_date,
50
-	'card' as courseType 
51
-FROM
52
-	ta_coupon_card_target a
53
-	INNER JOIN ta_coupon_card b ON a.card_id = b.card_id
54
-	INNER JOIN ta_customer_card c ON c.card_id = b.card_id
55
-	INNER JOIN ta_course_detail d ON d.detail_id = a.detail_id
56
-	INNER JOIN ta_course e ON d.course_id = e.course_id
57
-	INNER JOIN td_cms_image_location f ON e.location_id = f.location_id
58
-	INNER JOIN sys_case g ON g.case_id = c.case_id 
59
-WHERE
60
-	DATE_FORMAT( d.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
61
-	AND c.customer_card_id = ` + customerCardId
62
-	sql = sql + " limit  " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
63
-	err := m.db.Sql(sql).Find(&course)
64
-	return course, err
33
+func (m *VerifyDAO) GetCustomerCourseDetailById(id string) (*model.TaCustomerCourseDetail, error) {
34
+	var customerCourseDerail []model.TaCustomerCourseDetail
35
+	err := m.db.Where("customer_detail_id =?", id).Find(&customerCourseDerail)
36
+	if err != nil {
37
+		return nil, err
38
+	}
39
+	if len(customerCourseDerail) > 0 {
40
+		return &customerCourseDerail[0], nil
41
+	}
42
+	return nil, nil
65 43
 }
66 44
 
67
-func (m *VerifyDAO) GetExperienceCardVerifyListCount(customerCardId string) (int, error) {
68
-	var course []verifyCourse
45
+// GetCustomerCourseList 根据我的课程id获取我的课程详情
46
+func (m *VerifyDAO) GetCustomerCourseList(customerCourseId, caseid string, page int, pageSize int) ([]MyCourse, error) {
47
+	var courseList []MyCourse
69 48
 	sql := `SELECT
70
-	a.target_id,
71
-	g.case_name,
72
-	c.card_id,
73
-	f.location_name,
74
-	e.course_name,
75
-	d.detail_name,
76
-	d.begin_date,
77
-	d.end_date,
78
-	'card' as courseType 
79
-FROM
80
-	ta_coupon_card_target a
81
-	INNER JOIN ta_coupon_card b ON a.card_id = b.card_id
82
-	INNER JOIN ta_customer_card c ON c.card_id = b.card_id
83
-	INNER JOIN ta_course_detail d ON d.detail_id = a.detail_id
84
-	INNER JOIN ta_course e ON d.course_id = e.course_id
85
-	INNER JOIN td_cms_image_location f ON e.location_id = f.location_id
86
-	INNER JOIN sys_case g ON g.case_id = c.case_id 
87
-WHERE
88
-	DATE_FORMAT( d.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
89
-	AND c.customer_card_id = ` + customerCardId
90
-	err := m.db.Sql(sql).Find(&course)
91
-	return len(course), err
49
+	a.*,
50
+	d.case_name,
51
+	b.course_name,	
52
+	c.detail_name,
53
+	f.location_name
54
+	FROM
55
+	ta_customer_course_detail a
56
+	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
57
+	INNER JOIN ta_course_detail c ON c.detail_id = a.detail_id
58
+	INNER JOIN sys_case d ON d.case_id = a.case_id
59
+	LEFT JOIN td_cms_image_location f on b.location_id=f.location_id
60
+	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
61
+	AND a.customer_course_id = '` + customerCourseId + `'
62
+	and b.case_id = '` + caseid + `'`
63
+	sql = sql + " limit " + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
64
+	err := m.db.Sql(sql).Find(&courseList)
65
+	return courseList, err
92 66
 }
93 67
 
94
-func (m *VerifyDAO) GetOrderCourseList(courseOrderId string, page, pageSize int) ([]verifyCourse, error) {
95
-	var course []verifyCourse
68
+// GetCustomerCourseListCount 根据我的课程id获取我的课程详情数量
69
+func (m *VerifyDAO) GetCustomerCourseListCount(customerCourseId, caseid string) (int, error) {
70
+	var courseList []MyCourse
96 71
 	sql := `SELECT
97
-	a.orders_detail_id AS target_id,
98
-	b.case_id,
99
-	f.case_name,
100
-	e.location_name,
101
-	c.course_name,
102
-	d.detail_name,
103
-	a.begin_date,
104
-	a.end_date,
105
-	'order' as courseType
106
-FROM
107
-	ta_course_orders_detail a
108
-	INNER JOIN ta_course_orders b ON a.orders_id = b.orders_id
109
-	INNER JOIN ta_course c ON b.course_id = c.course_id
110
-	INNER JOIN ta_course_detail d ON a.course_detail_id = d.detail_id
111
-	INNER JOIN td_cms_image_location e ON e.location_id = c.location_id
112
-	INNER JOIN sys_case f ON b.case_id = f.case_id 
113
-WHERE
114
-	DATE_FORMAT( a.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
115
-	AND b.orders_id = ` + courseOrderId
116
-	sql = sql + " limit  " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
117
-	err := m.db.Sql(sql).Find(&course)
118
-	return course, err
119
-
72
+	a.*,
73
+	d.case_name,
74
+	b.course_name,	
75
+	c.detail_name
76
+	FROM
77
+	ta_customer_course_detail a
78
+	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
79
+	INNER JOIN ta_course_detail c ON c.detail_id = a.detail_id
80
+	INNER JOIN sys_case d ON d.case_id = a.case_id
81
+	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
82
+	AND a.customer_course_id = '` + customerCourseId + `'
83
+	and b.case_id = '` + caseid + `'`
84
+	err := m.db.Sql(sql).Find(&courseList)
85
+	return len(courseList), err
120 86
 }
121 87
 
122
-func (m *VerifyDAO) GetOrderCourseListCount(courseOrderId string) (int, error) {
123
-	var course []verifyCourse
124
-	sql := `SELECT
125
-	a.orders_detail_id AS target_id,
126
-	b.case_id,
127
-	f.case_name,
128
-	e.location_name,
129
-	c.course_name,
130
-	d.detail_name,
131
-	a.begin_date,
132
-	a.end_date,
133
-	'order' as courseType
134
-FROM
135
-	ta_course_orders_detail a
136
-	INNER JOIN ta_course_orders b ON a.orders_id = b.orders_id
137
-	INNER JOIN ta_course c ON b.course_id = c.course_id
138
-	INNER JOIN ta_course_detail d ON a.course_detail_id = d.detail_id
139
-	INNER JOIN td_cms_image_location e ON e.location_id = c.location_id
140
-	INNER JOIN sys_case f ON b.case_id = f.case_id 
141
-WHERE
142
-	DATE_FORMAT( a.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
143
-	AND b.orders_id = ` + courseOrderId
144
-	err := m.db.Sql(sql).Find(&course)
145
-	return len(course), err
88
+// UpdateCustomerCourseDetail 更新我的课程详情
89
+func (m *VerifyDAO) UpdateCustomerCourseDetail(customerCourse *model.TaCustomerCourseDetail) error {
90
+	var cols = []string{
91
+		"verify_status",
92
+		"verify_date",
93
+		"verify_user",
94
+	}
95
+	_, err := m.db.Cols(cols...).Where("customer_detail_id=?", customerCourse.CustomerDetailId).Update(customerCourse)
96
+	return err
146 97
 }
147 98
 
148
-func (m *VerifyDAO) GetCourseListByTel(tel string, page, pageSize int) ([]verifyCourse, error) {
149
-	var course []verifyCourse
99
+// GetCustomerCourseListByTel 根据客户电话获取我的课程详情
100
+func (m *VerifyDAO) GetCustomerCourseListByTel(tel, caseid string, page, pageSize int) ([]MyCourse, error) {
101
+	var courseList []MyCourse
150 102
 	sql := `SELECT
151
-	a.target_id,
152
-	g.case_name,
153
-	c.card_id,
154
-	f.location_name,
155
-	e.course_name,
156
-	d.detail_name,
157
-	d.begin_date,
158
-	d.end_date,
159
-	'card' as courseType 
160
-FROM
161
-	ta_coupon_card_target a
162
-	INNER JOIN ta_coupon_card b ON a.card_id = b.card_id
163
-	INNER JOIN ta_customer_card c ON c.card_id = b.card_id
164
-	INNER JOIN ta_course_detail d ON d.detail_id = a.detail_id
165
-	INNER JOIN ta_course e ON d.course_id = e.course_id
166
-	INNER JOIN td_cms_image_location f ON e.location_id = f.location_id
167
-	INNER JOIN sys_case g ON g.case_id = c.case_id 
168
-	INNER JOIN ta_customer h ON c.customer_id = h.customer_id
169
-WHERE
170
-	DATE_FORMAT( d.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
171
-	AND h.phone = ` + tel + `
172
-	union all
173
-	SELECT
174
-	a.orders_detail_id AS target_id,
175
-	b.case_id,
176
-	f.case_name,
177
-	e.location_name,
178
-	c.course_name,
179
-	d.detail_name,
180
-	a.begin_date,
181
-	a.end_date,
182
-	'order' as courseType
183
-FROM
184
-	ta_course_orders_detail a
185
-	INNER JOIN ta_course_orders b ON a.orders_id = b.orders_id
186
-	INNER JOIN ta_course c ON b.course_id = c.course_id
187
-	INNER JOIN ta_course_detail d ON a.course_detail_id = d.detail_id
188
-	INNER JOIN td_cms_image_location e ON e.location_id = c.location_id
189
-	INNER JOIN sys_case f ON b.case_id = f.case_id 
190
-	INNER JOIN ta_customer g ON b.customer_id = g.customer_id
191
-WHERE
192
-	DATE_FORMAT( a.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
193
-	AND g.phone = ` + tel
194
-	sql = sql + " limit  " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
195
-	err := m.db.Sql(sql).Find(&course)
196
-	return course, err
103
+	a.*,
104
+	d.case_name,
105
+	b.course_name,
106
+	c.detail_name
107
+	FROM
108
+	ta_customer_course_detail a
109
+	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
110
+	INNER JOIN ta_course_detail c ON c.detail_id = a.detail_id
111
+	INNER JOIN sys_case d ON d.case_id = a.case_id
112
+	LEFT JOIN td_cms_image_location f on b.location_id=f.location_id
113
+	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
114
+	AND e.phone = '` + tel + `'
115
+	and b.case_id='` + caseid + `'`
116
+	sql = sql + " limit " + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
117
+	err := m.db.Sql(sql).Find(&courseList)
118
+	return courseList, err
197 119
 }
198 120
 
199
-func (m *VerifyDAO) GetCourseListByTelCount(tel string) (int, error) {
200
-	var course []verifyCourse
121
+// GetCustomerCourseListByTelCount 根据客户电话获取我的课程详情数量
122
+func (m *VerifyDAO) GetCustomerCourseListByTelCount(tel, caseid string) (int, error) {
123
+	var courseList []MyCourse
201 124
 	sql := `SELECT
202
-	a.target_id,
203
-	g.case_name,
204
-	c.card_id,
205
-	f.location_name,
206
-	e.course_name,
207
-	d.detail_name,
208
-	d.begin_date,
209
-	d.end_date,
210
-	'card' as courseType 
211
-FROM
212
-	ta_coupon_card_target a
213
-	INNER JOIN ta_coupon_card b ON a.card_id = b.card_id
214
-	INNER JOIN ta_customer_card c ON c.card_id = b.card_id
215
-	INNER JOIN ta_course_detail d ON d.detail_id = a.detail_id
216
-	INNER JOIN ta_course e ON d.course_id = e.course_id
217
-	INNER JOIN td_cms_image_location f ON e.location_id = f.location_id
218
-	INNER JOIN sys_case g ON g.case_id = c.case_id 
219
-	INNER JOIN ta_customer h ON c.customer_id = h.customer_id
220
-WHERE
221
-	DATE_FORMAT( d.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
222
-	AND h.phone = ` + tel + `
223
-	union all
224
-	SELECT
225
-	a.orders_detail_id AS target_id,
226
-	b.case_id,
227
-	f.case_name,
228
-	e.location_name,
229
-	c.course_name,
230
-	d.detail_name,
231
-	a.begin_date,
232
-	a.end_date,
233
-	'order' as courseType
125
+	a.*,
126
+	d.case_name,
127
+	b.course_name,
128
+	c.detail_name
234 129
 FROM
235
-	ta_course_orders_detail a
236
-	INNER JOIN ta_course_orders b ON a.orders_id = b.orders_id
237
-	INNER JOIN ta_course c ON b.course_id = c.course_id
238
-	INNER JOIN ta_course_detail d ON a.course_detail_id = d.detail_id
239
-	INNER JOIN td_cms_image_location e ON e.location_id = c.location_id
240
-	INNER JOIN sys_case f ON b.case_id = f.case_id 
241
-	INNER JOIN ta_customer g ON b.customer_id = g.customer_id
242
-WHERE
243
-	DATE_FORMAT( a.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
244
-	AND g.phone = ` + tel
245
-	err := m.db.Sql(sql).Find(&course)
246
-	return len(course), err
247
-}
248
-
249
-func (m *VerifyDAO) AddExperienceCardVerification(verify model.TaExperienceCardVerification) (*model.TaExperienceCardVerification, error) {
250
-	verify.ExperienceCardVerifyTime = time.Now()
251
-	verify.Status = models.STATUS_NORMAL
252
-	verify.ExperienceCardVerifyId = utils.GetGUID()
253
-	_, err := m.db.Insert(verify)
254
-	return &verify, err
130
+	ta_customer_course_detail a
131
+	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
132
+	INNER JOIN ta_course_detail c ON c.detail_id = a.detail_id
133
+	INNER JOIN sys_case d ON d.case_id = a.case_id
134
+	INNER JOIN ta_customer e ON b.customer_id = e.customer_id
135
+	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
136
+	AND e.phone = '` + tel + `'
137
+	and b.case_id='` + caseid + `'`
138
+	err := m.db.Sql(sql).Find(&courseList)
139
+	return len(courseList), err
255 140
 }
256 141
 
257
-func (m *VerifyDAO) updateExperienceCardTarget(verify model.TaCouponCardTarget) error {
142
+// UpdateCustomerCard 更新客户体验卡
143
+func (m *VerifyDAO) UpdateCustomerCard(customerCard *model.TaCustomerCard) error {
258 144
 	var cols = []string{
259
-		"card_state",
260
-	}
261
-	_, err := m.db.Cols(cols...).Where("target_id=?", verify.TargetId).Update(verify)
262
-	return err
263
-}
264
-
265
-func (m *VerifyDAO) updateCustomerExperienceCard(verify model.TaCustomerCard) error {
266
-	var cols = []string{
267
-		"card_state",
268
-		"join_num",
269 145
 		"verify_date",
146
+		"verify_status",
270 147
 	}
271
-	_, err := m.db.Cols(cols...).Where("customer_card_id=?", verify.CustomerCardId).Update(verify)
148
+	_, err := m.db.Cols(cols...).Where("customer_card_id=?", customerCard.CustomerCardId).Update(customerCard)
272 149
 	return err
273 150
 }
274 151
 
275
-func (m *VerifyDAO) updateCustomerOrderCourse(verify model.TaCourseOrders) error {
152
+// UpdateCustomerCourse 更新我的课程
153
+func (m *VerifyDAO) UpdateCustomerCourse(customerCourse *model.TaCustomerCourse) error {
276 154
 	var cols = []string{
277 155
 		"join_num",
156
+		"is_done",
278 157
 	}
279
-	_, err := m.db.Cols(cols...).Where("orders_id = ?", verify.OrdersId).Update(verify)
158
+	_, err := m.db.Cols(cols...).Where("customer_course_id=?", customerCourse.CustomerCourseId).Update(customerCourse)
280 159
 	return err
281 160
 }
282 161
 
283
-func (m *VerifyDAO) AddOrdersVerification(verify model.TaCourseVerifcation) (*model.TaCourseVerifcation, error) {
284
-	verify.CreateDate = time.Now()
285
-	verify.VerifcationId = utils.GetGUID()
286
-	verify.Status = models.STATUS_NORMAL
287
-	_, err := m.db.Insert(verify)
288
-	return &verify, err
162
+// GetCustomerCardByDetailId 根据我的课程详情ID查询用户体验卡
163
+func (m *VerifyDAO) GetCustomerCardByDetailId(detailId string) (*model.TaCustomerCard, error) {
164
+	var customerCard []model.TaCustomerCard
165
+	sql := `SELECT
166
+	a.* 
167
+FROM
168
+	ta_customer_card a
169
+	INNER JOIN ta_customer_course b ON a.customer_card_id = b.source_id 
170
+	
171
+	INNER JOIN ta_customer_course_detail c ON c.customer_course_id = b.customer_course_id
172
+WHERE  b.course_obtaim_type = 'card'
173
+and  c.customer_detail_id = '` + detailId + `'`
174
+	err := m.db.Sql(sql).Find(&customerCard)
175
+	return &customerCard[0], err
289 176
 
290 177
 }
178
+
179
+// GetCustomerCourseByDetailId 根据我的课程详情ID查询我的课程
180
+func (m *VerifyDAO) GetCustomerCourseByDetailId(detailId string) (*model.TaCustomerCourse, error) {
181
+	var customerCard []model.TaCustomerCourse
182
+	sql := `SELECT
183
+	a.* 
184
+FROM
185
+	ta_customer_course a
186
+	INNER JOIN ta_customer_course_detail b ON a.customer_course_id = b.customer_course_id 
187
+WHERE
188
+	b.customer_detail_id = '` + detailId + `'`
189
+	err := m.db.Sql(sql).Find(&customerCard)
190
+	return &customerCard[0], err
191
+}

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

@@ -10,6 +10,7 @@ import (
10 10
 	"spaceofcheng/services/controllers/message"
11 11
 	"spaceofcheng/services/controllers/system"
12 12
 	"spaceofcheng/services/controllers/user"
13
+	"spaceofcheng/services/controllers/verify"
13 14
 	"spaceofcheng/services/controllers/vipcard"
14 15
 	"spaceofcheng/services/controllers/marketing"
15 16
 
@@ -152,6 +153,11 @@ func getCommonRoutes() beego.LinkNamespace {
152 153
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "post:AddVipCard"),
153 154
 		beego.NSRouter("/vipcard/:vipCardChildCode", &vipcard.VipcardController{}, "put:UserCharge"),
154 155
 
156
+		// courseVerify 核销课程
157
+		beego.NSRouter("/verify/course/code/:customerCourseId", &verify.VerifyController{}, "get:GetCustomerCourseDetailListById"),
158
+		beego.NSRouter("/verify/course/tel/:tel", &verify.VerifyController{}, "get:GetCustomerCourseDetailListBytel"),
159
+		beego.NSRouter("/verify/course/:customerDetailId", &verify.VerifyController{}, "put:VerifyCourse"),
160
+
155 161
 		// role 角色
156 162
 		beego.NSRouter("/role", &system.RoleController{}, "get:GetRoleList"),
157 163
 		beego.NSRouter("/role/:roleid", &system.RoleController{}, "get:GetRoleByID"),
@@ -172,7 +178,7 @@ func getCommonRoutes() beego.LinkNamespace {
172 178
 		beego.NSRouter("/course", &course.CourseController{}, "put:SaveCourse"),
173 179
 		beego.NSRouter("/course/:courseid", &course.CourseController{}, "delete:DeleteCourse"),
174 180
 		beego.NSRouter("/course/:courseid/public", &course.CourseController{}, "put:CoursePublic"),
175
-		beego.NSRouter("/course/:courseid/unpublic", &course.CourseController{}, "get:CourseUnPublic"),
181
+		beego.NSRouter("/course/:courseid/unpublic", &course.CourseController{}, "put:CourseUnPublic"),
176 182
 		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "get:GetCourseImgs"),
177 183
 		beego.NSRouter("/courseimg", &course.CourseController{}, "post:SaveCourseImg"),
178 184
 		beego.NSRouter("/courseimg", &course.CourseController{}, "put:SaveCourseImg"),

+ 443
- 446
service/course/course.go 查看文件

@@ -1,446 +1,443 @@
1
-package course
2
-
3
-import (
4
-	"spaceofcheng/services/models"
5
-	"spaceofcheng/services/models/cases"
6
-	"spaceofcheng/services/models/course"
7
-	"spaceofcheng/services/models/customer"
8
-	"spaceofcheng/services/models/model"
9
-	"spaceofcheng/services/models/system"
10
-	"spaceofcheng/services/service"
11
-	"spaceofcheng/services/utils"
12
-	"strings"
13
-
14
-	"github.com/astaxie/beego"
15
-)
16
-
17
-// CourseServ 系统处理
18
-type CourseServ struct {
19
-	ctx     *utils.Context
20
-	dao     *course.CourseDAO
21
-	casedao *cases.CaseDAO
22
-	custDAO *customer.CustomerDAO
23
-	userDAO *system.UserDAO
24
-}
25
-
26
-// NewCourseServ 初始化
27
-func NewCourseServ(ctx *utils.Context) *CourseServ {
28
-	return &CourseServ{
29
-		ctx:     ctx,
30
-		dao:     course.NewCourseDAO(ctx),
31
-		casedao: cases.NewCaseDAO(ctx),
32
-		custDAO: customer.NewCustomerDAO(ctx),
33
-		userDAO: system.NewUserDAO(ctx),
34
-	}
35
-}
36
-
37
-// GetCourseList 获取课程列表
38
-func (s *CourseServ) GetCourseList(caseids, name, typeid string, page, pageSize int) (map[string]interface{}, error) {
39
-	if pageSize == 0 {
40
-		pageSize = service.PAGENUM
41
-	}
42
-	if page == 0 {
43
-		page = 1
44
-	}
45
-	list, err := s.dao.GetCourseList(caseids, name, typeid, page, pageSize)
46
-	if err != nil {
47
-		beego.Error(err)
48
-		return nil, err
49
-	}
50
-	total, err := s.dao.GetCourseCount(caseids, name, typeid)
51
-	if err != nil {
52
-		beego.Error(err)
53
-		return nil, err
54
-	}
55
-
56
-	return map[string]interface{}{
57
-		"list":     list,
58
-		"pagesize": pageSize,
59
-		"pagenum":  total,
60
-		"page":     page,
61
-	}, err
62
-}
63
-
64
-// GetCourseByID 获取课程明细
65
-func (s *CourseServ) GetCourseByID(courseid string) (*course.CourseDetail, error) {
66
-	if courseid == "" {
67
-		return nil, utils.LogError("不存在课程信息!")
68
-	}
69
-	info, err := s.dao.GetCourseInfo(courseid)
70
-	if err != nil {
71
-		return nil, err
72
-	}
73
-	if info == nil {
74
-		return nil, utils.LogError("不存在课程信息!")
75
-	}
76
-	if info.Status == models.STATUS_DEL {
77
-		return nil, utils.LogError("课程已被删除!")
78
-	}
79
-
80
-	tags, err := s.dao.GetCourseTag(courseid)
81
-	if err != nil {
82
-		return nil, err
83
-	}
84
-	info.CourseTags = tags
85
-	details, err := s.dao.GetCourseDetail(courseid)
86
-	if err != nil {
87
-		return nil, err
88
-	}
89
-	info.CourseDetail = details
90
-	imgs, err := s.dao.GetCourseImgs(courseid)
91
-	if err != nil {
92
-		return nil, err
93
-	}
94
-	info.CourseImgs = imgs
95
-	caseinfo, err := s.casedao.GetCaseByID(info.CaseId)
96
-	if err != nil {
97
-		return nil, err
98
-	}
99
-	info.CaseInfo = caseinfo
100
-	return info, nil
101
-}
102
-
103
-// SaveCourse 保存课程信息
104
-func (s *CourseServ) SaveCourse(course model.TaCourse, tagids string) (*model.TaCourse, error) {
105
-	var newInfo *model.TaCourse
106
-	var err error
107
-	if course.CourseName == "" {
108
-		return nil, utils.LogError("课程名称不允许为空!")
109
-	}
110
-	if course.CourseImg == "" {
111
-		return nil, utils.LogError("课程主图不允许为空!")
112
-	}
113
-	if course.LocationId == "" {
114
-		return nil, utils.LogError("课程类型不允许为空!")
115
-	}
116
-	if course.CaseId == "" {
117
-		return nil, utils.LogError("课程案场不允许为空!")
118
-	}
119
-	if course.Price == "" || course.Price == "0" {
120
-		return nil, utils.LogError("课程价格不允许为0!")
121
-	}
122
-	if course.MinNum == 0 {
123
-		return nil, utils.LogError("最小开课人数不允许为0!")
124
-	}
125
-	if course.MaxNum == 0 {
126
-		return nil, utils.LogError("上课人数不允许为0!")
127
-	}
128
-	if course.MaxNum < course.MinNum {
129
-		return nil, utils.LogError("上课人数不允许小于最小开课人数!")
130
-	}
131
-	if course.CourseNum == 0 {
132
-		return nil, utils.LogError("课时数不允许为0!")
133
-	}
134
-	if course.BeginDate.IsZero() || course.EndDate.IsZero() {
135
-		return nil, utils.LogError("课程时间不允许为空!")
136
-	}
137
-	if course.EndDate.After(course.BeginDate) {
138
-		return nil, utils.LogError("截止时间必须大于开始时间!")
139
-	}
140
-	if tagids == "" {
141
-		return nil, utils.LogError("请选择课程标签!")
142
-	}
143
-	if course.CourseId == "" {
144
-		newInfo, err = s.dao.AddCourse(course)
145
-		if err != nil {
146
-			return nil, err
147
-		}
148
-	} else {
149
-		err = s.dao.UpdateCourse(course)
150
-		if err != nil {
151
-			return nil, err
152
-		}
153
-		newInfo = &course
154
-		err = s.dao.DelCourseTag(course.CourseId)
155
-		if err != nil {
156
-			return nil, err
157
-		}
158
-	}
159
-
160
-	tags := strings.Split(tagids, ",")
161
-	var courseTags []model.TaCourseTag
162
-	for _, tag := range tags {
163
-		arr := strings.Split(tag, ":")
164
-		var tagid = ""
165
-		if len(arr) > 1 {
166
-			tagid = arr[1]
167
-		} else {
168
-			var taginfo = model.TdCourseTag{
169
-				TagName: arr[0],
170
-				OrgId:   course.OrgId,
171
-			}
172
-			newtag, err := s.dao.AddCourseTag(taginfo)
173
-			if err != nil {
174
-				return nil, err
175
-			}
176
-			tagid = newtag.TagId
177
-		}
178
-		var coursetag = model.TaCourseTag{
179
-			CourseId: course.CourseId,
180
-			TagId:    tagid,
181
-		}
182
-		courseTags = append(courseTags, coursetag)
183
-	}
184
-
185
-	if len(courseTags) > 0 {
186
-		err = s.dao.SaveCourseTag(courseTags)
187
-		return nil, err
188
-	}
189
-	return newInfo, nil
190
-}
191
-
192
-// DelCourse 刪除课程信息
193
-func (s *CourseServ) DelCourse(courseid string) error {
194
-	if courseid == "" {
195
-		return utils.LogError("没有对应的课程!")
196
-	}
197
-	courseinfo, err := s.dao.GetCourseByID(courseid)
198
-	if err != nil {
199
-		return err
200
-	}
201
-	if courseinfo.Status != course.STATUS_UNPUBLISH {
202
-		return utils.LogError("课程状态异常!不允许删除!")
203
-	}
204
-	err = s.dao.DelCourse(courseid)
205
-	if err != nil {
206
-		return err
207
-	}
208
-	err = s.dao.DeleteScheduleByCourse(courseid)
209
-	return err
210
-}
211
-
212
-// CoursePublic 课程发布
213
-func (s *CourseServ) CoursePublic(courseid string) error {
214
-	if courseid == "" {
215
-		return utils.LogError("没有对应的课程!")
216
-	}
217
-	info, err := s.dao.GetCourseByID(courseid)
218
-	if err != nil {
219
-		return err
220
-	}
221
-	if info.Status != course.STATUS_UNPUBLISH {
222
-		return utils.LogError("当前课程状态异常!请刷新后重试!")
223
-	}
224
-	err = s.dao.CoursePublic(courseid)
225
-	return err
226
-}
227
-
228
-// CourseUnPublic 课程取消发布
229
-func (s *CourseServ) CourseUnPublic(courseid string) error {
230
-	if courseid == "" {
231
-		return utils.LogError("没有对应的课程!")
232
-	}
233
-	info, err := s.dao.GetCourseByID(courseid)
234
-	if err != nil {
235
-		return err
236
-	}
237
-	if info.Status != models.STATUS_NORMAL {
238
-		return utils.LogError("当前课程状态异常!请刷新后重试!")
239
-	}
240
-	err = s.dao.CourseUnPublic(courseid)
241
-	return err
242
-}
243
-
244
-// GetCourseImgs 获取课程图片
245
-func (s *CourseServ) GetCourseImgs(courseid string) ([]model.TaCourseImg, error) {
246
-	if courseid == "" {
247
-		return nil, utils.LogError("没有对应的课程!")
248
-	}
249
-	imgs, err := s.dao.GetCourseImgs(courseid)
250
-	return imgs, err
251
-}
252
-
253
-// SaveCourseImg 保存课程图片
254
-func (s *CourseServ) SaveCourseImg(img model.TaCourseImg) (*model.TaCourseImg, error) {
255
-	var newinfo *model.TaCourseImg
256
-	var err error
257
-	if img.ImgUrl == "" {
258
-		return nil, utils.LogError("请先上传图片!")
259
-	}
260
-	if img.ImgId == "" {
261
-		newinfo, err = s.dao.AddCourseImg(img)
262
-	} else {
263
-		newinfo = &img
264
-		err = s.dao.UpdateCourseImg(img)
265
-	}
266
-	return newinfo, err
267
-}
268
-
269
-// DelCourseImg 刪除课程图片
270
-func (s *CourseServ) DelCourseImg(imgid string) error {
271
-	if imgid == "" {
272
-		return utils.LogError("没有需要删除的内容!")
273
-	}
274
-	err := s.dao.DelCourseImg(imgid)
275
-	return err
276
-}
277
-
278
-// GetCourseSchedule 获取课程排期
279
-func (s *CourseServ) GetCourseSchedule(name, caseids, date string, page, pageSize int) (map[string]interface{}, error) {
280
-	if pageSize == 0 {
281
-		pageSize = service.PAGENUM
282
-	}
283
-	if page == 0 {
284
-		page = 1
285
-	}
286
-	if date == "" {
287
-		return nil, utils.LogError("请先选择需要排课的日期!")
288
-	}
289
-	list, err := s.dao.GetCourseSchedule(name, caseids, date, page, pageSize)
290
-	if err != nil {
291
-		beego.Error(err)
292
-		return nil, err
293
-	}
294
-	total, err := s.dao.GetCourseScheduleCount(name, caseids, date)
295
-	if err != nil {
296
-		beego.Error(err)
297
-		return nil, err
298
-	}
299
-
300
-	return map[string]interface{}{
301
-		"list":     list,
302
-		"pagesize": pageSize,
303
-		"pagenum":  total,
304
-		"page":     page,
305
-	}, err
306
-}
307
-
308
-// GetDetails 获取所有排课
309
-func (s *CourseServ) GetDetails(caseid, date string) ([]model.TaCourseDetail, error) {
310
-	if caseid == "" {
311
-		return nil, utils.LogError("请先选择案场!")
312
-	}
313
-	if date == "" {
314
-		return nil, utils.LogError("请选择需要查看的月份!")
315
-	}
316
-	details, err := s.dao.GetDetails(caseid, date)
317
-	return details, err
318
-}
319
-
320
-// GetDetailByID 获取单个排课信息
321
-func (s *CourseServ) GetDetailByID(detailid string) (*model.TaCourseDetail, error) {
322
-	if detailid == "" {
323
-		return nil, utils.LogError("没有对应的排课信息!")
324
-	}
325
-	detail, err := s.dao.GetDetailByID(detailid)
326
-	return detail, err
327
-}
328
-
329
-// SaveDetail 保存排课信息
330
-func (s *CourseServ) SaveDetail(detail model.TaCourseDetail) (*model.TaCourseDetail, error) {
331
-	var newinfo *model.TaCourseDetail
332
-	if detail.CourseId == "" {
333
-		return nil, utils.LogError("没有对应的课程信息!")
334
-	}
335
-	if detail.DetailName == "" {
336
-		return nil, utils.LogError("课程名称不能为空!")
337
-	}
338
-	if detail.BeginDate.IsZero() || detail.EndDate.IsZero() {
339
-		return nil, utils.LogError("课程时间不能为空!")
340
-	}
341
-	if detail.BeginDate.After(detail.EndDate) {
342
-		return nil, utils.LogError("课程截止时间必须大于开始时间!")
343
-	}
344
-	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
345
-	if err != nil {
346
-		return nil, err
347
-	}
348
-	if courseinfo.Status != course.STATUS_UNPUBLISH {
349
-		return nil, utils.LogError("课程状态异常!不允许排课!请刷新后重试!")
350
-	}
351
-	if detail.DetailId == "" {
352
-		detail.OrgId = courseinfo.OrgId
353
-		detail.CaseId = courseinfo.CaseId
354
-		newinfo, err = s.dao.AddCourseDetail(detail)
355
-		if err != nil {
356
-			return nil, err
357
-		}
358
-		num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
359
-		if err != nil {
360
-			return nil, err
361
-		}
362
-		err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
363
-		if err != nil {
364
-			return nil, err
365
-		}
366
-	} else {
367
-		err := s.dao.UpdateCourseDetail(detail)
368
-		if err != nil {
369
-			return nil, err
370
-		}
371
-		newinfo = &detail
372
-	}
373
-	return newinfo, nil
374
-}
375
-
376
-// DelCourseDetail 删除课程明细
377
-func (s *CourseServ) DelCourseDetail(detailid string) error {
378
-	if detailid == "" {
379
-		return utils.LogError("没有对应的排课信息!")
380
-	}
381
-	detail, err := s.dao.GetDetailByID(detailid)
382
-	if err != nil {
383
-		return err
384
-	}
385
-	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
386
-	if err != nil {
387
-		return err
388
-	}
389
-	if courseinfo.Status != course.STATUS_UNPUBLISH {
390
-		return utils.LogError("课程状态异常!不允许删除!")
391
-	}
392
-	err = s.dao.DelCourseDetail(detailid)
393
-	if err != nil {
394
-		return err
395
-	}
396
-	num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
397
-	if err != nil {
398
-		return err
399
-	}
400
-	err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
401
-	if err != nil {
402
-		return err
403
-	}
404
-	return nil
405
-}
406
-
407
-// GetCourseBySelect 获取精选课程
408
-func (s *CourseServ) GetSelectCourseList(orgid string) ([]course.CourseDetail, error) {
409
-	if orgid == "" {
410
-		return nil, utils.LogError("参数错误!")
411
-	}
412
-	list, err := s.dao.GetSelectCourseList(orgid)
413
-	if err != nil {
414
-		return nil, err
415
-	}
416
-	for i, v := range list {
417
-		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
418
-		if err != nil {
419
-			return nil, err
420
-		}
421
-		list[i].CaseInfo = caseinfo
422
-	}
423
-	return list, err
424
-}
425
-
426
-// GetCourseByLocation 根据位置获取课程
427
-func (s *CourseServ) GetCourseByLocation(orgid, locationid string) ([]course.CourseDetail, error) {
428
-	if orgid == "" || locationid == "" {
429
-		return nil, utils.LogError("参数错误!")
430
-	}
431
-	list, err := s.dao.GetCourseByLocation(orgid, locationid)
432
-	if err != nil {
433
-		return nil, err
434
-	}
435
-	for i, v := range list {
436
-		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
437
-		if err != nil {
438
-			return nil, err
439
-		}
440
-		list[i].CaseInfo = caseinfo
441
-	}
442
-	return list, err
443
-}
444
-
445
-
446
-
1
+package course
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/cases"
6
+	"spaceofcheng/services/models/course"
7
+	"spaceofcheng/services/models/customer"
8
+	"spaceofcheng/services/models/model"
9
+	"spaceofcheng/services/models/system"
10
+	"spaceofcheng/services/service"
11
+	"spaceofcheng/services/utils"
12
+	"strings"
13
+
14
+	"github.com/astaxie/beego"
15
+)
16
+
17
+// CourseServ 系统处理
18
+type CourseServ struct {
19
+	ctx     *utils.Context
20
+	dao     *course.CourseDAO
21
+	casedao *cases.CaseDAO
22
+	custDAO *customer.CustomerDAO
23
+	userDAO *system.UserDAO
24
+}
25
+
26
+// NewCourseServ 初始化
27
+func NewCourseServ(ctx *utils.Context) *CourseServ {
28
+	return &CourseServ{
29
+		ctx:     ctx,
30
+		dao:     course.NewCourseDAO(ctx),
31
+		casedao: cases.NewCaseDAO(ctx),
32
+		custDAO: customer.NewCustomerDAO(ctx),
33
+		userDAO: system.NewUserDAO(ctx),
34
+	}
35
+}
36
+
37
+// GetCourseList 获取课程列表
38
+func (s *CourseServ) GetCourseList(caseids, name, typeid string, page, pageSize int) (map[string]interface{}, error) {
39
+	if pageSize == 0 {
40
+		pageSize = service.PAGENUM
41
+	}
42
+	if page == 0 {
43
+		page = 1
44
+	}
45
+	list, err := s.dao.GetCourseList(caseids, name, typeid, page, pageSize)
46
+	if err != nil {
47
+		beego.Error(err)
48
+		return nil, err
49
+	}
50
+	total, err := s.dao.GetCourseCount(caseids, name, typeid)
51
+	if err != nil {
52
+		beego.Error(err)
53
+		return nil, err
54
+	}
55
+
56
+	return map[string]interface{}{
57
+		"list":     list,
58
+		"pagesize": pageSize,
59
+		"pagenum":  total,
60
+		"page":     page,
61
+	}, err
62
+}
63
+
64
+// GetCourseByID 获取课程明细
65
+func (s *CourseServ) GetCourseByID(courseid string) (*course.CourseDetail, error) {
66
+	if courseid == "" {
67
+		return nil, utils.LogError("不存在课程信息!")
68
+	}
69
+	info, err := s.dao.GetCourseInfo(courseid)
70
+	if err != nil {
71
+		return nil, err
72
+	}
73
+	if info == nil {
74
+		return nil, utils.LogError("不存在课程信息!")
75
+	}
76
+	if info.Status == models.STATUS_DEL {
77
+		return nil, utils.LogError("课程已被删除!")
78
+	}
79
+
80
+	tags, err := s.dao.GetCourseTag(courseid)
81
+	if err != nil {
82
+		return nil, err
83
+	}
84
+	info.CourseTags = tags
85
+	details, err := s.dao.GetCourseDetail(courseid)
86
+	if err != nil {
87
+		return nil, err
88
+	}
89
+	info.CourseDetail = details
90
+	imgs, err := s.dao.GetCourseImgs(courseid)
91
+	if err != nil {
92
+		return nil, err
93
+	}
94
+	info.CourseImgs = imgs
95
+	caseinfo, err := s.casedao.GetCaseByID(info.CaseId)
96
+	if err != nil {
97
+		return nil, err
98
+	}
99
+	info.CaseInfo = caseinfo
100
+	return info, nil
101
+}
102
+
103
+// SaveCourse 保存课程信息
104
+func (s *CourseServ) SaveCourse(course model.TaCourse, tagids string) (*model.TaCourse, error) {
105
+	var newInfo *model.TaCourse
106
+	var err error
107
+	if course.CourseName == "" {
108
+		return nil, utils.LogError("课程名称不允许为空!")
109
+	}
110
+	if course.CourseImg == "" {
111
+		return nil, utils.LogError("课程主图不允许为空!")
112
+	}
113
+	if course.LocationId == "" {
114
+		return nil, utils.LogError("课程类型不允许为空!")
115
+	}
116
+	if course.CaseId == "" {
117
+		return nil, utils.LogError("课程案场不允许为空!")
118
+	}
119
+	if course.Price == "" || course.Price == "0" {
120
+		return nil, utils.LogError("课程价格不允许为0!")
121
+	}
122
+	if course.MinNum == 0 {
123
+		return nil, utils.LogError("最小开课人数不允许为0!")
124
+	}
125
+	if course.MaxNum == 0 {
126
+		return nil, utils.LogError("上课人数不允许为0!")
127
+	}
128
+	if course.MaxNum < course.MinNum {
129
+		return nil, utils.LogError("上课人数不允许小于最小开课人数!")
130
+	}
131
+	if course.CourseNum == 0 {
132
+		return nil, utils.LogError("课时数不允许为0!")
133
+	}
134
+	if course.BeginDate.IsZero() || course.EndDate.IsZero() {
135
+		return nil, utils.LogError("课程时间不允许为空!")
136
+	}
137
+	if !course.EndDate.After(course.BeginDate) {
138
+		return nil, utils.LogError("截止时间必须大于开始时间!")
139
+	}
140
+	if tagids == "" {
141
+		return nil, utils.LogError("请选择课程标签!")
142
+	}
143
+	if course.CourseId == "" {
144
+		newInfo, err = s.dao.AddCourse(course)
145
+		if err != nil {
146
+			return nil, err
147
+		}
148
+	} else {
149
+		err = s.dao.UpdateCourse(course)
150
+		if err != nil {
151
+			return nil, err
152
+		}
153
+		newInfo = &course
154
+		err = s.dao.DelCourseTag(course.CourseId)
155
+		if err != nil {
156
+			return nil, err
157
+		}
158
+	}
159
+
160
+	tags := strings.Split(tagids, ",")
161
+	var courseTags []model.TaCourseTag
162
+	for _, tag := range tags {
163
+		arr := strings.Split(tag, ":")
164
+		var tagid = ""
165
+		if len(arr) > 1 {
166
+			tagid = arr[1]
167
+		} else {
168
+			var taginfo = model.TdCourseTag{
169
+				TagName: arr[0],
170
+				OrgId:   course.OrgId,
171
+			}
172
+			newtag, err := s.dao.AddCourseTag(taginfo)
173
+			if err != nil {
174
+				return nil, err
175
+			}
176
+			tagid = newtag.TagId
177
+		}
178
+		var coursetag = model.TaCourseTag{
179
+			CourseId: newInfo.CourseId,
180
+			TagId:    tagid,
181
+		}
182
+		courseTags = append(courseTags, coursetag)
183
+	}
184
+
185
+	if len(courseTags) > 0 {
186
+		err = s.dao.SaveCourseTag(courseTags)
187
+		return nil, err
188
+	}
189
+	return newInfo, nil
190
+}
191
+
192
+// DelCourse 刪除课程信息
193
+func (s *CourseServ) DelCourse(courseid string) error {
194
+	if courseid == "" {
195
+		return utils.LogError("没有对应的课程!")
196
+	}
197
+	courseinfo, err := s.dao.GetCourseByID(courseid)
198
+	if err != nil {
199
+		return err
200
+	}
201
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
202
+		return utils.LogError("课程状态异常!不允许删除!")
203
+	}
204
+	err = s.dao.DelCourse(courseid)
205
+	if err != nil {
206
+		return err
207
+	}
208
+	err = s.dao.DeleteScheduleByCourse(courseid)
209
+	return err
210
+}
211
+
212
+// CoursePublic 课程发布
213
+func (s *CourseServ) CoursePublic(courseid string) error {
214
+	if courseid == "" {
215
+		return utils.LogError("没有对应的课程!")
216
+	}
217
+	info, err := s.dao.GetCourseByID(courseid)
218
+	if err != nil {
219
+		return err
220
+	}
221
+	if info.Status != course.STATUS_UNPUBLISH {
222
+		return utils.LogError("当前课程状态异常!请刷新后重试!")
223
+	}
224
+	err = s.dao.CoursePublic(courseid)
225
+	return err
226
+}
227
+
228
+// CourseUnPublic 课程取消发布
229
+func (s *CourseServ) CourseUnPublic(courseid string) error {
230
+	if courseid == "" {
231
+		return utils.LogError("没有对应的课程!")
232
+	}
233
+	info, err := s.dao.GetCourseByID(courseid)
234
+	if err != nil {
235
+		return err
236
+	}
237
+	if info.Status != models.STATUS_NORMAL {
238
+		return utils.LogError("当前课程状态异常!请刷新后重试!")
239
+	}
240
+	err = s.dao.CourseUnPublic(courseid)
241
+	return err
242
+}
243
+
244
+// GetCourseImgs 获取课程图片
245
+func (s *CourseServ) GetCourseImgs(courseid string) ([]model.TaCourseImg, error) {
246
+	if courseid == "" {
247
+		return nil, utils.LogError("没有对应的课程!")
248
+	}
249
+	imgs, err := s.dao.GetCourseImgs(courseid)
250
+	return imgs, err
251
+}
252
+
253
+// SaveCourseImg 保存课程图片
254
+func (s *CourseServ) SaveCourseImg(img model.TaCourseImg) (*model.TaCourseImg, error) {
255
+	var newinfo *model.TaCourseImg
256
+	var err error
257
+	if img.ImgUrl == "" {
258
+		return nil, utils.LogError("请先上传图片!")
259
+	}
260
+	if img.ImgId == "" {
261
+		newinfo, err = s.dao.AddCourseImg(img)
262
+	} else {
263
+		newinfo = &img
264
+		err = s.dao.UpdateCourseImg(img)
265
+	}
266
+	return newinfo, err
267
+}
268
+
269
+// DelCourseImg 刪除课程图片
270
+func (s *CourseServ) DelCourseImg(imgid string) error {
271
+	if imgid == "" {
272
+		return utils.LogError("没有需要删除的内容!")
273
+	}
274
+	err := s.dao.DelCourseImg(imgid)
275
+	return err
276
+}
277
+
278
+// GetCourseSchedule 获取课程排期
279
+func (s *CourseServ) GetCourseSchedule(name, caseids, date string, page, pageSize int) (map[string]interface{}, error) {
280
+	if pageSize == 0 {
281
+		pageSize = service.PAGENUM
282
+	}
283
+	if page == 0 {
284
+		page = 1
285
+	}
286
+	if date == "" {
287
+		return nil, utils.LogError("请先选择需要排课的日期!")
288
+	}
289
+	list, err := s.dao.GetCourseSchedule(name, caseids, date, page, pageSize)
290
+	if err != nil {
291
+		beego.Error(err)
292
+		return nil, err
293
+	}
294
+	total, err := s.dao.GetCourseScheduleCount(name, caseids, date)
295
+	if err != nil {
296
+		beego.Error(err)
297
+		return nil, err
298
+	}
299
+
300
+	return map[string]interface{}{
301
+		"list":     list,
302
+		"pagesize": pageSize,
303
+		"pagenum":  total,
304
+		"page":     page,
305
+	}, err
306
+}
307
+
308
+// GetDetails 获取所有排课
309
+func (s *CourseServ) GetDetails(caseid, date string) ([]course.DetailInfo, error) {
310
+	if caseid == "" {
311
+		return nil, utils.LogError("请先选择案场!")
312
+	}
313
+	if date == "" {
314
+		return nil, utils.LogError("请选择需要查看的月份!")
315
+	}
316
+	details, err := s.dao.GetDetails(caseid, date)
317
+	return details, err
318
+}
319
+
320
+// GetDetailByID 获取单个排课信息
321
+func (s *CourseServ) GetDetailByID(detailid string) (*model.TaCourseDetail, error) {
322
+	if detailid == "" {
323
+		return nil, utils.LogError("没有对应的排课信息!")
324
+	}
325
+	detail, err := s.dao.GetDetailByID(detailid)
326
+	return detail, err
327
+}
328
+
329
+// SaveDetail 保存排课信息
330
+func (s *CourseServ) SaveDetail(detail model.TaCourseDetail) (*model.TaCourseDetail, error) {
331
+	var newinfo *model.TaCourseDetail
332
+	if detail.CourseId == "" {
333
+		return nil, utils.LogError("没有对应的课程信息!")
334
+	}
335
+	if detail.DetailName == "" {
336
+		return nil, utils.LogError("课程名称不能为空!")
337
+	}
338
+	if detail.BeginDate.IsZero() || detail.EndDate.IsZero() {
339
+		return nil, utils.LogError("课程时间不能为空!")
340
+	}
341
+	if detail.BeginDate.After(detail.EndDate) {
342
+		return nil, utils.LogError("课程截止时间必须大于开始时间!")
343
+	}
344
+	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
345
+	if err != nil {
346
+		return nil, err
347
+	}
348
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
349
+		return nil, utils.LogError("课程状态异常!不允许排课!请刷新后重试!")
350
+	}
351
+	if detail.DetailId == "" {
352
+		detail.OrgId = courseinfo.OrgId
353
+		detail.CaseId = courseinfo.CaseId
354
+		newinfo, err = s.dao.AddCourseDetail(detail)
355
+		if err != nil {
356
+			return nil, err
357
+		}
358
+		num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
359
+		if err != nil {
360
+			return nil, err
361
+		}
362
+		err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
363
+		if err != nil {
364
+			return nil, err
365
+		}
366
+	} else {
367
+		err := s.dao.UpdateCourseDetail(detail)
368
+		if err != nil {
369
+			return nil, err
370
+		}
371
+		newinfo = &detail
372
+	}
373
+	return newinfo, nil
374
+}
375
+
376
+// DelCourseDetail 删除课程明细
377
+func (s *CourseServ) DelCourseDetail(detailid string) error {
378
+	if detailid == "" {
379
+		return utils.LogError("没有对应的排课信息!")
380
+	}
381
+	detail, err := s.dao.GetDetailByID(detailid)
382
+	if err != nil {
383
+		return err
384
+	}
385
+	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
386
+	if err != nil {
387
+		return err
388
+	}
389
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
390
+		return utils.LogError("课程状态异常!不允许删除!")
391
+	}
392
+	err = s.dao.DelCourseDetail(detailid)
393
+	if err != nil {
394
+		return err
395
+	}
396
+	num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
397
+	if err != nil {
398
+		return err
399
+	}
400
+	err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
401
+	if err != nil {
402
+		return err
403
+	}
404
+	return nil
405
+}
406
+
407
+// GetCourseBySelect 获取精选课程
408
+func (s *CourseServ) GetSelectCourseList(orgid string) ([]course.CourseDetail, error) {
409
+	if orgid == "" {
410
+		return nil, utils.LogError("参数错误!")
411
+	}
412
+	list, err := s.dao.GetSelectCourseList(orgid)
413
+	if err != nil {
414
+		return nil, err
415
+	}
416
+	for i, v := range list {
417
+		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
418
+		if err != nil {
419
+			return nil, err
420
+		}
421
+		list[i].CaseInfo = caseinfo
422
+	}
423
+	return list, err
424
+}
425
+
426
+// GetCourseByLocation 根据位置获取课程
427
+func (s *CourseServ) GetCourseByLocation(orgid, locationid string) ([]course.CourseDetail, error) {
428
+	if orgid == "" || locationid == "" {
429
+		return nil, utils.LogError("参数错误!")
430
+	}
431
+	list, err := s.dao.GetCourseByLocation(orgid, locationid)
432
+	if err != nil {
433
+		return nil, err
434
+	}
435
+	for i, v := range list {
436
+		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
437
+		if err != nil {
438
+			return nil, err
439
+		}
440
+		list[i].CaseInfo = caseinfo
441
+	}
442
+	return list, err
443
+}

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

@@ -245,6 +245,7 @@ func (s *CourseServ) SaveOrder(order *model.TaCourseOrders, coupons []model.TaCo
245 245
 		OrgId:            order.OrgId,
246 246
 		CaseId:           order.CaseId,
247 247
 		CourseName:       course.CourseName,
248
+		LocationId:       course.LocationId,
248 249
 		Price:            course.Price,
249 250
 		CourseNum:        course.CourseNum,
250 251
 		JoinNum:          0,

+ 160
- 0
service/verify/verify.go 查看文件

@@ -0,0 +1,160 @@
1
+package verify
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/customer"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/models/verify"
8
+	"spaceofcheng/services/service"
9
+	"spaceofcheng/services/utils"
10
+	"time"
11
+
12
+	"github.com/astaxie/beego"
13
+)
14
+
15
+// CaseServ 系统处理
16
+type VerifyServ struct {
17
+	ctx  *utils.Context
18
+	dao  *verify.VerifyDAO
19
+	cdao *customer.CustomerDAO
20
+}
21
+
22
+// NewVerifyServ 初始化
23
+func NewVerifyServ(ctx *utils.Context) *VerifyServ {
24
+	return &VerifyServ{
25
+		ctx: ctx,
26
+		dao: verify.NewVerifyDAO(ctx),
27
+	}
28
+}
29
+
30
+// GetCustomerCourseDetailById 根据ID获取当日可核销课程
31
+func (s *VerifyServ) GetCustomerCourseDetailById(id, caseid string, page, pageSize int) (map[string]interface{}, error) {
32
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseid); err != nil {
33
+		return nil, err
34
+	}
35
+	if pageSize == 0 {
36
+		pageSize = service.PAGENUM
37
+	}
38
+	if page == 0 {
39
+		page = 1
40
+	}
41
+	customerDetail, err := s.dao.GetCustomerCourseList(id, caseid, page, pageSize)
42
+	if err != nil {
43
+		beego.Error(err)
44
+		return nil, err
45
+	}
46
+	customerId := customerDetail[0].CustomerId
47
+	total, err := s.dao.GetCustomerCourseListCount(id, caseid)
48
+	if err != nil {
49
+		beego.Error(err)
50
+		return nil, err
51
+	}
52
+	customer, err := s.cdao.GetCustomerByID(customerId)
53
+	if err != nil {
54
+		beego.Error(err)
55
+		return nil, err
56
+	}
57
+	return map[string]interface{}{
58
+		"list":         customerDetail,
59
+		"pagesize":     pageSize,
60
+		"pagenum":      total,
61
+		"page":         page,
62
+		"customerInfo": customer,
63
+	}, err
64
+}
65
+
66
+// GetCustomerCourseDetailByTel根据电话号码获取当日可核销课程
67
+func (s *VerifyServ) GetCustomerCourseDetailByTel(tel, caseid string, page, pageSize int) (map[string]interface{}, error) {
68
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseid); err != nil {
69
+		return nil, err
70
+	}
71
+	if pageSize == 0 {
72
+		pageSize = service.PAGENUM
73
+	}
74
+	if page == 0 {
75
+		page = 1
76
+	}
77
+	customerDetail, err := s.dao.GetCustomerCourseListByTel(tel, caseid, page, pageSize)
78
+	if err != nil {
79
+		beego.Error(err)
80
+		return nil, err
81
+	}
82
+	customerId := customerDetail[0].CustomerId
83
+	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseid)
84
+	if err != nil {
85
+		beego.Error(err)
86
+		return nil, err
87
+	}
88
+	customer, err := s.cdao.GetCustomerByID(customerId)
89
+	if err != nil {
90
+		beego.Error(err)
91
+		return nil, err
92
+	}
93
+	return map[string]interface{}{
94
+		"list":         customerDetail,
95
+		"pagesize":     pageSize,
96
+		"pagenum":      total,
97
+		"page":         page,
98
+		"customerInfo": customer,
99
+	}, err
100
+
101
+}
102
+func (s *VerifyServ) GetCustomerCourseDetailByDetailId(id string) (*model.TaCustomerCourseDetail, error) {
103
+	customerDetail, err := s.dao.GetCustomerCourseDetailById(id)
104
+	return customerDetail, err
105
+}
106
+
107
+// UpdateCustomerCourseDetail更新我的课程详情
108
+func (s *VerifyServ) UpdateCustomerCourseDetail(customerDetail *model.TaCustomerCourseDetail, userid string) error {
109
+	var err error
110
+	customerDetail.VerifyDate = time.Now()
111
+	customerDetail.VerifyUser = userid
112
+	if time.Now().After(customerDetail.EndDate) {
113
+		customerDetail.VerifyStatus = "late"
114
+	} else {
115
+		customerDetail.VerifyStatus = "used"
116
+	}
117
+	err = s.dao.UpdateCustomerCourseDetail(customerDetail)
118
+	return err
119
+}
120
+
121
+// UpdateCustomerCard 更新我的体验卡
122
+func (s *VerifyServ) UpdateCustomerCard(customerCard *model.TaCustomerCard) error {
123
+	var err error
124
+	customerCard.VerifyDate = time.Now()
125
+	err = s.dao.UpdateCustomerCard(customerCard)
126
+	return err
127
+
128
+}
129
+
130
+// UpdateCustomerCourse 更新我的课程
131
+func (s *VerifyServ) UpdateCustomerCourse(customerCourse *model.TaCustomerCourse) error {
132
+	var err error
133
+	customerCourse.JoinNum = customerCourse.JoinNum + 1
134
+	if customerCourse.JoinNum >= customerCourse.CourseNum {
135
+		customerCourse.IsDone = models.BOOL_TRUE
136
+	}
137
+	err = s.dao.UpdateCustomerCourse(customerCourse)
138
+	return err
139
+
140
+}
141
+
142
+// GetCustomerCardByDetailId 根据我的课程详情id获取体验卡
143
+func (s *VerifyServ) GetCustomerCardByDetailId(detailId string) (*model.TaCustomerCard, error) {
144
+	customerCard, err := s.dao.GetCustomerCardByDetailId(detailId)
145
+	if err != nil {
146
+		beego.Error(err)
147
+		return nil, err
148
+	}
149
+	return customerCard, err
150
+}
151
+
152
+// GetCustomerCourseByDetailId 根据我的课程详情id获取我的课程
153
+func (s *VerifyServ) GetCustomerCourseByDetailId(detailId string) (*model.TaCustomerCourse, error) {
154
+	customerCourse, err := s.dao.GetCustomerCourseByDetailId(detailId)
155
+	if err != nil {
156
+		beego.Error(err)
157
+		return nil, err
158
+	}
159
+	return customerCourse, err
160
+}