|
@@ -5,6 +5,8 @@ import (
|
5
|
5
|
"spaceofcheng/services/models/model"
|
6
|
6
|
"spaceofcheng/services/utils"
|
7
|
7
|
"strconv"
|
|
8
|
+ "strings"
|
|
9
|
+ "time"
|
8
|
10
|
|
9
|
11
|
"github.com/go-xorm/xorm"
|
10
|
12
|
)
|
|
@@ -23,11 +25,304 @@ func NewCourseDAO(ctx *utils.Context) *CourseDAO {
|
23
|
25
|
}
|
24
|
26
|
}
|
25
|
27
|
|
|
28
|
+const (
|
|
29
|
+ STATUS_UNPUBLISH = 0
|
|
30
|
+)
|
|
31
|
+
|
|
32
|
+// CourseInfo 课程
|
|
33
|
+type CourseInfo struct {
|
|
34
|
+ model.TaCourse `xorm:"extends"`
|
|
35
|
+ CourseType string
|
|
36
|
+}
|
|
37
|
+
|
26
|
38
|
// GetCourseList 获取课程列表
|
27
|
|
-func (m *CourseDAO) GetCourseList(caseids, name, typeid string, page, pageSize int) ([]model.TaCourse, error) {
|
|
39
|
+func (m *CourseDAO) GetCourseList(caseids, name, typeid string, page, pageSize int) ([]CourseInfo, error) {
|
|
40
|
+ var courses []CourseInfo
|
|
41
|
+ sql := `select a.*,b.location_name from ta_course a left join td_cms_image_location b on a.location_id = b.location_id where a.case_id in ('` +
|
|
42
|
+ strings.Replace(caseids, ",", "','", -1) + `') and a.status>` + strconv.Itoa(models.STATUS_DEL)
|
|
43
|
+
|
|
44
|
+ if name != "" {
|
|
45
|
+ sql += ` and a.course_name like '%` + name + `%'`
|
|
46
|
+ }
|
|
47
|
+
|
|
48
|
+ if typeid != "" {
|
|
49
|
+ sql += ` and a.location_id='` + typeid + `'`
|
|
50
|
+ }
|
|
51
|
+
|
|
52
|
+ sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(page*pageSize)
|
|
53
|
+ err := m.db.Sql(sql).Find(&courses)
|
|
54
|
+ return courses, err
|
|
55
|
+}
|
|
56
|
+
|
|
57
|
+// GetCourseCount 获取课程总数
|
|
58
|
+func (m *CourseDAO) GetCourseCount(caseids, name, typeid string) (int, error) {
|
|
59
|
+ var course []model.TaCourse
|
|
60
|
+ dao := m.db.Where("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").And("status>" + strconv.Itoa(models.STATUS_DEL))
|
|
61
|
+
|
|
62
|
+ if name != "" {
|
|
63
|
+ dao.And("course_name like '%" + name + "%'")
|
|
64
|
+ }
|
|
65
|
+
|
|
66
|
+ if typeid != "" {
|
|
67
|
+ dao.And("location_id=?", typeid)
|
|
68
|
+ }
|
|
69
|
+ err := dao.Find(&course)
|
|
70
|
+ if err != nil {
|
|
71
|
+ return 0, err
|
|
72
|
+ }
|
|
73
|
+ if len(course) > 0 {
|
|
74
|
+ return len(course), nil
|
|
75
|
+ }
|
|
76
|
+ return 0, nil
|
|
77
|
+}
|
|
78
|
+
|
|
79
|
+// GetCourseByID 根据ID获取课程
|
|
80
|
+func (m *CourseDAO) GetCourseByID(courseid string) (*model.TaCourse, error) {
|
|
81
|
+ var course []model.TaCourse
|
|
82
|
+ err := m.db.Where("course_id=?", courseid).Find(&course)
|
|
83
|
+ if err != nil {
|
|
84
|
+ return nil, err
|
|
85
|
+ }
|
|
86
|
+ if len(course) > 0 {
|
|
87
|
+ return &course[0], nil
|
|
88
|
+ }
|
|
89
|
+ return nil, nil
|
|
90
|
+}
|
|
91
|
+
|
|
92
|
+// AddCourse 新增课程信息
|
|
93
|
+func (m *CourseDAO) AddCourse(course model.TaCourse) (*model.TaCourse, error) {
|
|
94
|
+ course.CourseId = utils.GetGUID()
|
|
95
|
+ course.CreateDate = time.Now()
|
|
96
|
+ course.Status = STATUS_UNPUBLISH
|
|
97
|
+ user := m.ctx.Get("user").(model.SysUser)
|
|
98
|
+ course.CreateUser = user.UserId
|
|
99
|
+ _, err := m.db.Insert(course)
|
|
100
|
+ return &course, err
|
|
101
|
+}
|
|
102
|
+
|
|
103
|
+// UpdateCourse 修改课程信息
|
|
104
|
+func (m *CourseDAO) UpdateCourse(course model.TaCourse) error {
|
|
105
|
+ var cols = []string{
|
|
106
|
+ "course_name",
|
|
107
|
+ "price",
|
|
108
|
+ "case_id",
|
|
109
|
+ "location_id",
|
|
110
|
+ "course_num",
|
|
111
|
+ "max_num",
|
|
112
|
+ "min_num",
|
|
113
|
+ "begin_date",
|
|
114
|
+ "end_date",
|
|
115
|
+ "course_img",
|
|
116
|
+ "course_desc",
|
|
117
|
+ "remark",
|
|
118
|
+ "is_select",
|
|
119
|
+ }
|
|
120
|
+ _, err := m.db.Cols(cols...).Where("course_id=?", course.CourseId).Update(course)
|
|
121
|
+ return err
|
|
122
|
+}
|
|
123
|
+
|
|
124
|
+// DelCourse 删除课程信息
|
|
125
|
+func (m *CourseDAO) DelCourse(courseid string) error {
|
|
126
|
+ var info = model.TaCourse{
|
|
127
|
+ CourseId: courseid,
|
|
128
|
+ Status: models.STATUS_DEL,
|
|
129
|
+ }
|
|
130
|
+ var cols = []string{
|
|
131
|
+ "status",
|
|
132
|
+ }
|
|
133
|
+ _, err := m.db.Cols(cols...).Where("course_id=?", courseid).Update(info)
|
|
134
|
+ return err
|
|
135
|
+}
|
|
136
|
+
|
|
137
|
+// CoursePublic 课程发布
|
|
138
|
+func (m *CourseDAO) CoursePublic(courseid string) error {
|
|
139
|
+ var info = model.TaCourse{
|
|
140
|
+ CourseId: courseid,
|
|
141
|
+ Status: models.STATUS_NORMAL,
|
|
142
|
+ }
|
|
143
|
+ var cols = []string{
|
|
144
|
+ "status",
|
|
145
|
+ }
|
|
146
|
+ _, err := m.db.Cols(cols...).Where("course_id=?", courseid).Update(info)
|
|
147
|
+ return err
|
|
148
|
+}
|
|
149
|
+
|
|
150
|
+// CourseUnPublic 取消课程发布
|
|
151
|
+func (m *CourseDAO) CourseUnPublic(courseid string) error {
|
|
152
|
+ var info = model.TaCourse{
|
|
153
|
+ CourseId: courseid,
|
|
154
|
+ Status: STATUS_UNPUBLISH,
|
|
155
|
+ }
|
|
156
|
+ var cols = []string{
|
|
157
|
+ "status",
|
|
158
|
+ }
|
|
159
|
+ _, err := m.db.Cols(cols...).Where("course_id=?", courseid).Update(info)
|
|
160
|
+ return err
|
|
161
|
+}
|
|
162
|
+
|
|
163
|
+// GetCourseImgs 获取课程图片
|
|
164
|
+func (m *CourseDAO) GetCourseImgs(courseid string) ([]model.TaCourseImg, error) {
|
|
165
|
+ var imgs []model.TaCourseImg
|
|
166
|
+ err := m.db.Where("course_id=?", courseid).Find(&imgs)
|
|
167
|
+ return imgs, err
|
|
168
|
+}
|
|
169
|
+
|
|
170
|
+// AddCourseImg 新增课程图片
|
|
171
|
+func (m *CourseDAO) AddCourseImg(courseimg model.TaCourseImg) (*model.TaCourseImg, error) {
|
|
172
|
+ courseimg.ImgId = utils.GetGUID()
|
|
173
|
+ _, err := m.db.Insert(courseimg)
|
|
174
|
+ return &courseimg, err
|
|
175
|
+}
|
|
176
|
+
|
|
177
|
+// UpdateCourseImg 修改课程图片
|
|
178
|
+func (m *CourseDAO) UpdateCourseImg(courseimg model.TaCourseImg) error {
|
|
179
|
+ var cols = []string{
|
|
180
|
+ "sort",
|
|
181
|
+ }
|
|
182
|
+ _, err := m.db.Cols(cols...).Where("img_id=?", courseimg.ImgId).Update(courseimg)
|
|
183
|
+ return err
|
|
184
|
+}
|
|
185
|
+
|
|
186
|
+// DelCourseImg 删除课程图片
|
|
187
|
+func (m *CourseDAO) DelCourseImg(imgid string) error {
|
|
188
|
+ sql := `delete from ta_course_img where img_id='` + imgid + `'`
|
|
189
|
+ _, err := m.db.Exec(sql)
|
|
190
|
+ return err
|
|
191
|
+}
|
|
192
|
+
|
|
193
|
+// CourseDetail 课程详情
|
|
194
|
+type CourseDetail struct {
|
|
195
|
+ model.TaCourse `xorm:"extends"`
|
|
196
|
+ CourseTags []model.TaCourseTag
|
|
197
|
+ CourseImgs []model.TaCourseImg
|
|
198
|
+ CourseDetail []model.TaCourseDetail
|
|
199
|
+}
|
|
200
|
+
|
|
201
|
+// GetCourseInfo 获取课程详情
|
|
202
|
+func (m *CourseDAO) GetCourseInfo(courseid string) (*CourseDetail, error) {
|
|
203
|
+ var courses []CourseDetail
|
|
204
|
+ sql := `select * from ta_course where course_id='` + courseid + `'`
|
|
205
|
+ err := m.db.Sql(sql).Find(&courses)
|
|
206
|
+ if err != nil {
|
|
207
|
+ return nil, err
|
|
208
|
+ }
|
|
209
|
+ if len(courses) > 0 {
|
|
210
|
+ return &courses[0], nil
|
|
211
|
+ }
|
|
212
|
+ return nil, nil
|
|
213
|
+}
|
|
214
|
+
|
|
215
|
+// GetCourseDetail 获取课程明细
|
|
216
|
+func (m *CourseDAO) GetCourseDetail(courseid string) ([]model.TaCourseDetail, error) {
|
|
217
|
+ var details []model.TaCourseDetail
|
|
218
|
+ err := m.db.Where("course_id=?", courseid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&details)
|
|
219
|
+ return details, err
|
|
220
|
+}
|
|
221
|
+
|
|
222
|
+// GetDetails 获取所有的排课记录
|
|
223
|
+func (m *CourseDAO) GetDetails(caseid, date string) ([]model.TaCourseDetail, error) {
|
|
224
|
+ var details []model.TaCourseDetail
|
|
225
|
+ err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("DATE_FORMAT(begin_date,'%Y-%m') = ?", date).Find(&details)
|
|
226
|
+ return details, err
|
|
227
|
+}
|
|
228
|
+
|
|
229
|
+// GetCourseSchedule 获取需要排课的记录
|
|
230
|
+func (m *CourseDAO) GetCourseSchedule(name, caseids, date string, page, pageSize int) ([]model.TaCourse, error) {
|
|
231
|
+ var courses []model.TaCourse
|
|
232
|
+ dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And(date + " BETWEEN begin_date and end_date")
|
|
233
|
+ if name != "" {
|
|
234
|
+ dao.And("course_name like '%" + name + "%'")
|
|
235
|
+ }
|
|
236
|
+ if caseids != "" {
|
|
237
|
+ dao.And("caseids in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
|
|
238
|
+ }
|
|
239
|
+ err := dao.OrderBy("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
|
|
240
|
+ return courses, err
|
|
241
|
+}
|
|
242
|
+
|
|
243
|
+// GetCourseScheduleCount 获取排课记录数
|
|
244
|
+func (m *CourseDAO) GetCourseScheduleCount(name, caseids, date string) (int, error) {
|
28
|
245
|
var courses []model.TaCourse
|
|
246
|
+ dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And(date + " BETWEEN begin_date and end_date")
|
|
247
|
+ if name != "" {
|
|
248
|
+ dao.And("course_name like '%" + name + "%'")
|
|
249
|
+ }
|
|
250
|
+ if caseids != "" {
|
|
251
|
+ dao.And("caseids in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
|
|
252
|
+ }
|
|
253
|
+ err := dao.Find(&courses)
|
|
254
|
+ return len(courses), err
|
|
255
|
+}
|
29
|
256
|
|
30
|
|
- m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("")
|
|
257
|
+// GetDetailByID 获取排课明细
|
|
258
|
+func (m *CourseDAO) GetDetailByID(detailid string) (*model.TaCourseDetail, error) {
|
|
259
|
+ var details []model.TaCourseDetail
|
|
260
|
+ err := m.db.Where("detail_id=?", detailid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&details)
|
|
261
|
+ if err != nil {
|
|
262
|
+ return nil, err
|
|
263
|
+ }
|
|
264
|
+ if len(details) > 0 {
|
|
265
|
+ return &details[0], nil
|
|
266
|
+ }
|
|
267
|
+ return nil, nil
|
|
268
|
+}
|
|
269
|
+
|
|
270
|
+// AddCourseDetail 新增明细
|
|
271
|
+func (m *CourseDAO) AddCourseDetail(detail model.TaCourseDetail) (*model.TaCourseDetail, error) {
|
|
272
|
+ detail.CreateDate = time.Now()
|
|
273
|
+ detail.Status = models.STATUS_NORMAL
|
|
274
|
+ detail.DetailId = utils.GetGUID()
|
|
275
|
+ _, err := m.db.Insert(detail)
|
|
276
|
+ return &detail, err
|
|
277
|
+}
|
|
278
|
+
|
|
279
|
+// UpdateCourseDetail 修改明细
|
|
280
|
+func (m *CourseDAO) UpdateCourseDetail(detail model.TaCourseDetail) error {
|
|
281
|
+ var cols = []string{
|
|
282
|
+ "detail_name",
|
|
283
|
+ "begin_date",
|
|
284
|
+ "end_date",
|
|
285
|
+ }
|
|
286
|
+ _, err := m.db.Cols(cols...).Where("detail_id=?", detail.DetailId).Update(detail)
|
|
287
|
+ return err
|
|
288
|
+}
|
|
289
|
+
|
|
290
|
+// DelCourseDetail 刪除明细
|
|
291
|
+func (m *CourseDAO) DelCourseDetail(detailid string) error {
|
|
292
|
+ var info = model.TaCourseDetail{
|
|
293
|
+ DetailId: detailid,
|
|
294
|
+ Status: models.STATUS_DEL,
|
|
295
|
+ }
|
|
296
|
+ var cols = []string{
|
|
297
|
+ "status",
|
|
298
|
+ }
|
|
299
|
+ _, err := m.db.Cols(cols...).Where("detail_id=?", detailid).Update(info)
|
|
300
|
+ return err
|
|
301
|
+}
|
|
302
|
+
|
|
303
|
+// DelCourseTag 删除课程对应标签
|
|
304
|
+func (m *CourseDAO) DelCourseTag(courseid string) error {
|
|
305
|
+ sql := `delete from ta_course_tag where course_id='` + courseid + `'`
|
|
306
|
+ _, err := m.db.Exec(sql)
|
|
307
|
+ return err
|
|
308
|
+}
|
|
309
|
+
|
|
310
|
+// SaveCourseTag 保存课程对应标签
|
|
311
|
+func (m *CourseDAO) SaveCourseTag(coursetags []model.TaCourseTag) error {
|
|
312
|
+ _, err := m.db.Insert(coursetags)
|
|
313
|
+ return err
|
|
314
|
+}
|
|
315
|
+
|
|
316
|
+// GetCourseTag 获取课程对应标签
|
|
317
|
+func (m *CourseDAO) GetCourseTag(courseid string) ([]model.TaCourseTag, error) {
|
|
318
|
+ var coursetags []model.TaCourseTag
|
|
319
|
+ err := m.db.Where("course_id=?", courseid).Find(&coursetags)
|
|
320
|
+ return coursetags, err
|
|
321
|
+}
|
31
|
322
|
|
32
|
|
- return courses, nil
|
|
323
|
+// CourseTagSave 保存课程对应标签
|
|
324
|
+func (m *CourseDAO) CourseTagSave(courseid, tagids string) error {
|
|
325
|
+ sql := `insert into ta_course_tag(course_id,tag_id) select '` + courseid + `',tag_id from td_course_tag where tag_id in ('` + strings.Replace(tagids, ",", "','", -1) + `') and status>` + strconv.Itoa(models.STATUS_DEL)
|
|
326
|
+ _, err := m.db.Exec(sql)
|
|
327
|
+ return err
|
33
|
328
|
}
|