wangfei il y a 6 ans
Parent
révision
481f765d12
7 fichiers modifiés avec 836 ajouts et 42 suppressions
  1. 1
    1
      conf/db.conf
  2. 168
    0
      controllers/course/course.go
  3. 298
    3
      models/course/course.go
  4. 2
    17
      models/course/tag.go
  5. 20
    19
      models/model/ta_course.go
  6. 20
    2
      routers/common.go
  7. 327
    0
      service/course/course.go

+ 1
- 1
conf/db.conf Voir le fichier

@@ -5,7 +5,7 @@ db_type      = mysql
5 5
 con_protocol = tcp
6 6
 
7 7
 ; 数据库地址,可以使用IP
8
-db_addr      = localhost
8
+db_addr      = 192.168.0.122
9 9
 
10 10
 ; 端口
11 11
 db_port      = 3306

+ 168
- 0
controllers/course/course.go Voir le fichier

@@ -2,6 +2,7 @@ package course
2 2
 
3 3
 import (
4 4
 	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/models/model"
5 6
 	"spaceofcheng/services/service/course"
6 7
 )
7 8
 
@@ -17,3 +18,170 @@ type CourseController struct {
17 18
 func (c *CourseController) Constructor() {
18 19
 	c.dao = course.NewCourseServ(c.Context)
19 20
 }
21
+
22
+// GetCourseList 获取课程列表
23
+func (c *CourseController) GetCourseList() {
24
+	caseids := c.GetString("caseid")
25
+	if caseids == "" {
26
+		cases := c.Context.Get("cases").([]model.SysUserCase)
27
+		caseids = c.GetCaseIDs(cases)
28
+	}
29
+	page, _ := c.GetInt("page")
30
+	pageSize, _ := c.GetInt("pagesize")
31
+	name := c.GetString("name")
32
+	typeid := c.GetString("typeid")
33
+	courses, err := c.dao.GetCourseList(caseids, name, typeid, page, pageSize)
34
+	if err != nil {
35
+		c.ResponseError(err)
36
+	}
37
+	c.ResponseJSON(courses)
38
+}
39
+
40
+// GetCourseByID 获取课程明细
41
+func (c *CourseController) GetCourseByID() {
42
+	courseid := c.GetString(":courseid")
43
+	info, err := c.dao.GetCourseByID(courseid)
44
+	if err != nil {
45
+		c.ResponseError(err)
46
+	}
47
+	c.ResponseJSON(info)
48
+}
49
+
50
+// SaveCourse 保存课程
51
+func (c *CourseController) SaveCourse() {
52
+	course := model.TaCourse{}
53
+	if err := c.ParseForm(&course); err != nil {
54
+		c.ResponseError(err)
55
+	}
56
+	tagids := c.GetString("tagids")
57
+	newinfo, err := c.dao.SaveCourse(course, tagids)
58
+	if err != nil {
59
+		c.ResponseError(err)
60
+	}
61
+	c.ResponseJSON(newinfo)
62
+}
63
+
64
+// DeleteCourse 删除课程
65
+func (c *CourseController) DeleteCourse() {
66
+	courseid := c.GetString(":courseid")
67
+	err := c.dao.DelCourse(courseid)
68
+	if err != nil {
69
+		c.ResponseError(err)
70
+	}
71
+	c.ResponseJSON("删除成功!")
72
+}
73
+
74
+// CoursePublic 课程发布
75
+func (c *CourseController) CoursePublic() {
76
+	courseid := c.GetString(":courseid")
77
+	err := c.dao.CoursePublic(courseid)
78
+	if err != nil {
79
+		c.ResponseError(err)
80
+	}
81
+	c.ResponseJSON("操作成功!")
82
+}
83
+
84
+// CourseUnPublic 课程取消发布
85
+func (c *CourseController) CourseUnPublic() {
86
+	courseid := c.GetString(":courseid")
87
+	err := c.dao.CourseUnPublic(courseid)
88
+	if err != nil {
89
+		c.ResponseError(err)
90
+	}
91
+	c.ResponseJSON("操作成功!")
92
+}
93
+
94
+// GetCourseImgs 获取课程图片
95
+func (c *CourseController) GetCourseImgs() {
96
+	courseid := c.GetString(":courseid")
97
+	imgs, err := c.dao.GetCourseImgs(courseid)
98
+	if err != nil {
99
+		c.ResponseError(err)
100
+	}
101
+	c.ResponseJSON(imgs)
102
+}
103
+
104
+// SaveCourseImg 保存课程图片
105
+func (c *CourseController) SaveCourseImg() {
106
+	img := model.TaCourseImg{}
107
+	if err := c.ParseForm(&img); err != nil {
108
+		c.ResponseError(err)
109
+	}
110
+	newimg, err := c.dao.SaveCourseImg(img)
111
+	if err != nil {
112
+		c.ResponseError(err)
113
+	}
114
+	c.ResponseJSON(newimg)
115
+}
116
+
117
+// DelCourseImg 删除课程图片
118
+func (c *CourseController) DelCourseImg() {
119
+	courseid := c.GetString(":courseid")
120
+	err := c.dao.DelCourseImg(courseid)
121
+	if err != nil {
122
+		c.ResponseError(err)
123
+	}
124
+	c.ResponseJSON("操作成功!")
125
+}
126
+
127
+// GetCourseSchedule 获取课程排期
128
+func (c *CourseController) GetCourseSchedule() {
129
+	name := c.GetString("name")
130
+	caseids := c.GetString("caseid")
131
+	if caseids == "" {
132
+		cases := c.Context.Get("cases").([]model.SysUserCase)
133
+		caseids = c.GetCaseIDs(cases)
134
+	}
135
+	date := c.GetString("date")
136
+	page, _ := c.GetInt("page")
137
+	pageSize, _ := c.GetInt("pagesize")
138
+	list, err := c.dao.GetCourseSchedule(name, caseids, date, page, pageSize)
139
+	if err != nil {
140
+		c.ResponseError(err)
141
+	}
142
+	c.ResponseJSON(list)
143
+}
144
+
145
+// GetDetails 获取所有排课
146
+func (c *CourseController) GetDetails() {
147
+	caseid := c.GetString("caseid")
148
+	date := c.GetString("date")
149
+	list, err := c.dao.GetDetails(caseid, date)
150
+	if err != nil {
151
+		c.ResponseError(err)
152
+	}
153
+	c.ResponseJSON(list)
154
+}
155
+
156
+// GetDetailByID 获取单个排课信息
157
+func (c *CourseController) GetDetailByID() {
158
+	detailid := c.GetString(":detailid")
159
+	detail, err := c.dao.GetDetailByID(detailid)
160
+	if err != nil {
161
+		c.ResponseError(err)
162
+	}
163
+	c.ResponseJSON(detail)
164
+}
165
+
166
+// SaveDetail 保存排课信息
167
+func (c *CourseController) SaveDetail() {
168
+	detail := model.TaCourseDetail{}
169
+	if err := c.ParseForm(&detail); err != nil {
170
+		c.ResponseError(err)
171
+	}
172
+	newdetail, err := c.dao.SaveDetail(detail)
173
+	if err != nil {
174
+		c.ResponseError(err)
175
+	}
176
+	c.ResponseJSON(newdetail)
177
+}
178
+
179
+// DelCourseDetail 删除课程明细
180
+func (c *CourseController) DelCourseDetail() {
181
+	detailid := c.GetString(":detailid")
182
+	err := c.dao.DelCourseDetail(detailid)
183
+	if err != nil {
184
+		c.ResponseError(err)
185
+	}
186
+	c.ResponseJSON("删除成功!")
187
+}

+ 298
- 3
models/course/course.go Voir le fichier

@@ -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
 }

+ 2
- 17
models/course/tag.go Voir le fichier

@@ -5,7 +5,6 @@ import (
5 5
 	"spaceofcheng/services/models/model"
6 6
 	"spaceofcheng/services/utils"
7 7
 	"strconv"
8
-	"strings"
9 8
 )
10 9
 
11 10
 // GetTagsList 获取标签列表
@@ -29,23 +28,9 @@ func (m *CourseDAO) GetTagsCount(orgid string) (int, error) {
29 28
 }
30 29
 
31 30
 // AddCourseTag 新增课程标签
32
-func (m *CourseDAO) AddCourseTag(tag *model.TdCourseTag) (*model.TdCourseTag, error) {
31
+func (m *CourseDAO) AddCourseTag(tag model.TdCourseTag) (*model.TdCourseTag, error) {
33 32
 	tag.TagId = utils.GetGUID()
34 33
 	tag.Status = models.STATUS_NORMAL
35 34
 	_, err := m.db.Insert(tag)
36
-	return tag, err
37
-}
38
-
39
-// DelCourseTag 删除课程对应标签
40
-func (m *CourseDAO) DelCourseTag(courseid string) error {
41
-	sql := `delete ta_course_tag where course_id='` + courseid + `'`
42
-	_, err := m.db.Exec(sql)
43
-	return err
44
-}
45
-
46
-// CourseTagSave 保存课程对应标签
47
-func (m *CourseDAO) CourseTagSave(courseid, tagids string) error {
48
-	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)
49
-	_, err := m.db.Exec(sql)
50
-	return err
35
+	return &tag, err
51 36
 }

+ 20
- 19
models/model/ta_course.go Voir le fichier

@@ -5,23 +5,24 @@ import (
5 5
 )
6 6
 
7 7
 type TaCourse struct {
8
-	CourseId     string    `xorm:"not null pk VARCHAR(64)"`
9
-	CourseName   string    `xorm:"VARCHAR(50)"`
10
-	Price        float32   `xorm:"FLOAT(8,2)"`
11
-	OrgId        string    `xorm:"VARCHAR(64)"`
12
-	CaseId       string    `xorm:"VARCHAR(64)"`
13
-	LocationName string    `xorm:"VARCHAR(50)"`
14
-	CourseNum    int       `xorm:"INT(11)"`
15
-	ScheduleNum  int       `xorm:"INT(11)"`
16
-	MaxNum       int       `xorm:"INT(11)"`
17
-	MinNum       int       `xorm:"INT(11)"`
18
-	BeginDate    time.Time `xorm:"DATETIME"`
19
-	EndDate      time.Time `xorm:"DATETIME"`
20
-	CourseImg    string    `xorm:"TEXT"`
21
-	CourseDesc   string    `xorm:"VARCHAR(500)"`
22
-	Remark       string    `xorm:"TEXT"`
23
-	IsSelect     int       `xorm:"TINYINT(1)"`
24
-	Status       int       `xorm:"SMALLINT(6)"`
25
-	CreateDate   time.Time `xorm:"DATETIME"`
26
-	CreateUser   string    `xorm:"VARCHAR(64)"`
8
+	CourseId    string    `xorm:"not null pk VARCHAR(64)"`
9
+	CourseName  string    `xorm:"VARCHAR(50)"`
10
+	Price       float32   `xorm:"FLOAT(8,2)"`
11
+	OrgId       string    `xorm:"VARCHAR(64)"`
12
+	CaseId      string    `xorm:"VARCHAR(64)"`
13
+	LocationId  string    `xorm:"VARCHAR(64)"`
14
+	CourseNum   int       `xorm:"INT(11)"`
15
+	ScheduleNum int       `xorm:"INT(11)"`
16
+	MaxNum      int       `xorm:"INT(11)"`
17
+	MinNum      int       `xorm:"INT(11)"`
18
+	BeginDate   time.Time `xorm:"DATETIME"`
19
+	EndDate     time.Time `xorm:"DATETIME"`
20
+	CourseImg   string    `xorm:"TEXT"`
21
+	CourseDesc  string    `xorm:"VARCHAR(500)"`
22
+	Remark      string    `xorm:"TEXT"`
23
+	IsSelect    int       `xorm:"TINYINT(1)"`
24
+	Status      int       `xorm:"SMALLINT(6)"`
25
+	CreateDate  time.Time `xorm:"DATETIME"`
26
+	CreateUser  string    `xorm:"VARCHAR(64)"`
27
+	SignupNum   int       `xorm:"INT(11)"`
27 28
 }

+ 20
- 2
routers/common.go Voir le fichier

@@ -154,8 +154,26 @@ func getCommonRoutes() beego.LinkNamespace {
154 154
 		beego.NSRouter("/rolemenu/:roleid", &system.RoleController{}, "put:SaveRoleMenus"),
155 155
 
156 156
 		// course 课程
157
-		beego.NSRouter("/course/taglist", &course.CourseController{}, "get:GetCourseTagsByPage"),
158
-		beego.NSRouter("/course/tag", &course.CourseController{}, "get:GetCourseTags"),
157
+		beego.NSRouter("/coursetag", &course.CourseController{}, "get:GetCourseTagsByPage"),
158
+		// beego.NSRouter("/coursetag", &course.CourseController{}, "get:GetCourseTags"),
159
+
160
+		beego.NSRouter("/course", &course.CourseController{}, "get:GetCourseList"),
161
+		beego.NSRouter("/course/:courseid", &course.CourseController{}, "get:GetCourseByID"),
162
+		beego.NSRouter("/course", &course.CourseController{}, "post:SaveCourse"),
163
+		beego.NSRouter("/course", &course.CourseController{}, "put:SaveCourse"),
164
+		beego.NSRouter("/course/:courseid", &course.CourseController{}, "delete:DeleteCourse"),
165
+		beego.NSRouter("/course/:courseid/public", &course.CourseController{}, "put:CoursePublic"),
166
+		beego.NSRouter("/course/:courseid/unpublic", &course.CourseController{}, "get:CourseUnPublic"),
167
+		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "get:GetCourseImgs"),
168
+		beego.NSRouter("/courseimg", &course.CourseController{}, "post:SaveCourseImg"),
169
+		beego.NSRouter("/courseimg", &course.CourseController{}, "put:SaveCourseImg"),
170
+		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "delete:DelCourseImg"),
171
+		beego.NSRouter("/schedule", &course.CourseController{}, "get:GetCourseSchedule"),
172
+		beego.NSRouter("/detail", &course.CourseController{}, "get:GetDetails"),
173
+		beego.NSRouter("/detail/:detailid", &course.CourseController{}, "get:GetDetailByID"),
174
+		beego.NSRouter("/detail", &course.CourseController{}, "post:SaveDetail"),
175
+		beego.NSRouter("/detail", &course.CourseController{}, "put:SaveDetail"),
176
+		beego.NSRouter("/detail/:detailid", &course.CourseController{}, "delete:DelCourseDetail"),
159 177
 
160 178
 		// 文件
161 179
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),

+ 327
- 0
service/course/course.go Voir le fichier

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