胡轶钦 6 년 전
부모
커밋
cb67512ce2
75개의 변경된 파일1216개의 추가작업 그리고 313개의 파일을 삭제
  1. 2
    2
      conf/sms.conf
  2. 2
    2
      controllers/cases/case.go
  3. 4
    0
      controllers/cases/key.go
  4. 19
    0
      controllers/course/course.go
  5. 33
    0
      controllers/course/tag.go
  6. 3
    1
      controllers/message/image.go
  7. 22
    0
      log/common.2018-08-19.log
  8. 20
    0
      log/common.log
  9. 6
    3
      models/cases/area.go
  10. 8
    6
      models/cases/cases.go
  11. 1
    1
      models/cases/caseuser.go
  12. 1
    1
      models/cases/equipment.go
  13. 37
    7
      models/cases/key.go
  14. 3
    2
      models/cases/table.go
  15. 17
    7
      models/cases/tag.go
  16. 8
    2
      models/constant.go
  17. 33
    0
      models/course/course.go
  18. 51
    0
      models/course/tag.go
  19. 13
    3
      models/customer/customer.go
  20. 1
    0
      models/customer/types.go
  21. 73
    0
      models/goods/goods.go
  22. 48
    0
      models/goods/orders.go
  23. 1
    1
      models/goods/spec.go
  24. 3
    3
      models/goods/type.go
  25. 17
    0
      models/goods/types.go
  26. 11
    5
      models/message/cmscase.go
  27. 8
    5
      models/message/image.go
  28. 1
    1
      models/message/location.go
  29. 5
    2
      models/message/message.go
  30. 4
    5
      models/message/news.go
  31. 1
    0
      models/model/sys_case_area.go
  32. 6
    8
      models/model/sys_case_user.go
  33. 2
    1
      models/model/sys_user_case.go
  34. 1
    2
      models/model/sys_wechat_conf.go
  35. 15
    21
      models/model/ta_account_change.go
  36. 3
    1
      models/model/ta_channel.go
  37. 2
    3
      models/model/ta_cms_case_image.go
  38. 13
    12
      models/model/ta_cms_images.go
  39. 1
    1
      models/model/ta_course_orders.go
  40. 1
    0
      models/model/ta_customer.go
  41. 0
    25
      models/model/ta_experience_card.go
  42. 4
    4
      models/model/ta_goods_orders.go
  43. 4
    6
      models/model/ta_user_mapping.go
  44. 15
    0
      models/sys.go
  45. 7
    7
      models/system/role.go
  46. 12
    5
      models/system/user.go
  47. 55
    37
      routers/common.go
  48. 1
    1
      routers/guest.go
  49. 5
    5
      routers/wechat.go
  50. 14
    0
      service/cases/area.go
  51. 33
    4
      service/cases/cases.go
  52. 13
    1
      service/cases/caseuser.go
  53. 11
    0
      service/cases/equipment.go
  54. 21
    6
      service/cases/key.go
  55. 11
    0
      service/cases/table.go
  56. 19
    0
      service/cases/tag.go
  57. 20
    0
      service/course/course.go
  58. 41
    0
      service/course/tag.go
  59. 13
    0
      service/customer/customer.go
  60. 15
    0
      service/goods/spec.go
  61. 16
    0
      service/goods/type.go
  62. 25
    0
      service/message/cmscase.go
  63. 28
    0
      service/message/image.go
  64. 7
    0
      service/message/message.go
  65. 32
    0
      service/message/news.go
  66. 5
    0
      service/sys.go
  67. 12
    0
      service/system/role.go
  68. 25
    0
      service/user.go
  69. 8
    2
      utils/captcha.go
  70. 20
    30
      utils/pagenavi.go
  71. 0
    71
      utils/pagenavi_test.go
  72. 140
    0
      utils/permission.go
  73. 1
    1
      utils/sms.go
  74. 35
    0
      utils/utils.go
  75. 48
    0
      utils/utils_test.go

+ 2
- 2
conf/sms.conf 파일 보기

1
 # 短信接口
1
 # 短信接口
2
-url = http://localhost:8080/sms
2
+url = http://micservice.ycjcjy.com/sms
3
 method = POST
3
 method = POST
4
 contentType = "application/json;charset=UTF-8"
4
 contentType = "application/json;charset=UTF-8"
5
 
5
 
6
 [captcha]
6
 [captcha]
7
-code = 0107
7
+code = 0113

+ 2
- 2
controllers/cases/case.go 파일 보기

36
 
36
 
37
 // GetCaseByID 根据ID获取案场信息
37
 // GetCaseByID 根据ID获取案场信息
38
 func (c *CaseController) GetCaseByID() {
38
 func (c *CaseController) GetCaseByID() {
39
-	caseid := c.GetString(":caseid")
39
+	caseid := c.GetString(":id")
40
 	info, err := c.dao.GetCaseByID(caseid)
40
 	info, err := c.dao.GetCaseByID(caseid)
41
 	if err != nil {
41
 	if err != nil {
42
 		c.ResponseError(err)
42
 		c.ResponseError(err)
59
 
59
 
60
 //DelCase 删除案场信息
60
 //DelCase 删除案场信息
61
 func (c *CaseController) DelCase() {
61
 func (c *CaseController) DelCase() {
62
-	caseid := c.GetString(":caseid")
62
+	caseid := c.GetString(":id")
63
 	err := c.dao.DelCase(caseid)
63
 	err := c.dao.DelCase(caseid)
64
 	if err != nil {
64
 	if err != nil {
65
 		c.ResponseError(err)
65
 		c.ResponseError(err)

+ 4
- 0
controllers/cases/key.go 파일 보기

7
 	pageSize, _ := c.GetInt("pagesize")
7
 	pageSize, _ := c.GetInt("pagesize")
8
 	num := c.GetString("num")
8
 	num := c.GetString("num")
9
 
9
 
10
+	if page < 1 {
11
+		page = 1
12
+	}
13
+
10
 	list, err := c.dao.GetKeysByCase(caseid, num, page, pageSize)
14
 	list, err := c.dao.GetKeysByCase(caseid, num, page, pageSize)
11
 	if err != nil {
15
 	if err != nil {
12
 		c.ResponseError(err)
16
 		c.ResponseError(err)

+ 19
- 0
controllers/course/course.go 파일 보기

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

+ 33
- 0
controllers/course/tag.go 파일 보기

1
+package course
2
+
3
+import "spaceofcheng/services/models/model"
4
+
5
+// GetCourseTagsByPage 获取课程标签
6
+func (c *CourseController) GetCourseTagsByPage() {
7
+	orgid := c.GetString("orgid")
8
+	if orgid == "" {
9
+		org := c.Context.Get("org").(*model.SysOrg)
10
+		orgid = org.OrgId
11
+	}
12
+	page, _ := c.GetInt("page")
13
+	pageSize, _ := c.GetInt("pagesize")
14
+	tags, err := c.dao.GetTagsList(orgid, page, pageSize)
15
+	if err != nil {
16
+		c.ResponseError(err)
17
+	}
18
+	c.ResponseJSON(tags)
19
+}
20
+
21
+// GetCourseTags 获取课程标签
22
+func (c *CourseController) GetCourseTags() {
23
+	orgid := c.GetString("orgid")
24
+	if orgid == "" {
25
+		org := c.Context.Get("org").(*model.SysOrg)
26
+		orgid = org.OrgId
27
+	}
28
+	tags, err := c.dao.GetCourseTags(orgid)
29
+	if err != nil {
30
+		c.ResponseError(err)
31
+	}
32
+	c.ResponseJSON(tags)
33
+}

+ 3
- 1
controllers/message/image.go 파일 보기

1
 package message
1
 package message
2
 
2
 
3
-import "spaceofcheng/services/models/model"
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+)
4
 
6
 
5
 // GetImgList 获取轮播图列表
7
 // GetImgList 获取轮播图列表
6
 func (c *MessageController) GetImgList() {
8
 func (c *MessageController) GetImgList() {

+ 22
- 0
log/common.2018-08-19.log 파일 보기

1
+2018/08/19 11:00:44 [E] 用户登录失败: 账户不存在
2
+2018/08/19 11:02:08 [E] 用户登录失败: 账户不存在
3
+2018/08/19 11:02:30 [E] 用户登录失败: 账户不存在
4
+2018/08/19 11:04:13 [E] 用户登录失败: 账户不存在
5
+2018/08/19 11:04:23 [E] 用户登录失败: 账户不存在
6
+2018/08/19 11:04:53 [E] 用户登录失败: 账户不存在
7
+2018/08/19 12:40:59 [E] 用户登录失败: 账户不存在
8
+2018/08/19 12:41:32 [E] 用户登录失败: 账户不存在
9
+2018/08/19 12:53:00 [E] 用户登录失败: 账户不存在
10
+2018/08/19 12:53:39 [E] 用户登录失败: 账户不存在
11
+2018/08/19 12:53:59 [E] 用户登录失败: 账户不存在
12
+2018/08/19 12:56:51 [E] 用户登录失败: 账户不存在
13
+2018/08/19 12:57:10 [E] 用户登录失败: 账户不存在
14
+2018/08/19 12:58:27 [E] 用户登录失败: 账户不存在
15
+2018/08/19 13:00:08 [E] 用户登录失败: 账户不存在
16
+2018/08/19 13:33:36 [E] 用户登录失败: 账户不存在
17
+2018/08/19 13:51:39 [E] 用户登录失败: 账户不存在
18
+2018/08/19 13:51:48 [E] 用户登录失败: 账户不存在
19
+2018/08/19 13:52:14 [E] 用户登录失败: 用户密码不正确
20
+2018/08/19 13:52:14 [E] 用户登录失败: 账户不存在
21
+2018/08/19 13:52:20 [E] 用户登录失败: 账户不存在
22
+2018/08/19 13:52:27 [E] 用户登录失败: 账户不存在

+ 20
- 0
log/common.log 파일 보기

1
+2018/08/20 15:27:18 [E] 获取客户列表失败: sql: converting Exec argument $1 type: unsupported type []interface {}, a slice of interface
2
+2018/08/20 15:36:51 [E] 获取客户列表失败: sql: converting Exec argument $1 type: unsupported type []interface {}, a slice of interface
3
+2018/08/20 15:37:19 [E] 获取客户列表失败: sql: converting Exec argument $1 type: unsupported type []interface {}, a slice of interface
4
+2018/08/20 15:44:30 [E] 获取客户列表失败: Error 1248: Every derived table must have its own alias
5
+2018/08/20 15:46:35 [E] 获取客户列表失败: Error 1248: Every derived table must have its own alias
6
+2018/08/20 15:49:09 [E] 获取客户列表失败: Error 1060: Duplicate column name 'user_id'
7
+2018/08/20 15:57:45 [E] 获取客户列表失败: sql: statement expects 2 inputs; got 1
8
+2018/08/20 19:25:08 [E] 短信发送失败: 400 
9
+2018/08/20 19:27:58 [E] 短信发送失败: 400 
10
+2018/08/20 19:28:52 [E] 短信发送失败: 400 
11
+2018/08/21 13:38:17 [E] 用户没有设置默认案场
12
+2018/08/21 13:38:17 [E] 您没有该案场的权限!
13
+2018/08/21 13:39:04 [E] 用户没有设置默认案场
14
+2018/08/21 13:39:04 [E] 您没有该案场的权限!
15
+2018/08/21 13:39:09 [E] 用户没有设置默认案场
16
+2018/08/21 13:39:09 [E] 您没有该案场的权限!
17
+2018/08/21 13:39:24 [E] 用户没有设置默认案场
18
+2018/08/21 13:39:24 [E] 您没有该案场的权限!
19
+2018/08/21 13:41:04 [E] 用户没有设置默认案场
20
+2018/08/21 13:41:04 [E] 您没有该案场的权限!

+ 6
- 3
models/cases/area.go 파일 보기

21
 func (m *CaseDAO) GetCaseArea(caseids string, page int, pageSize int) ([]model.SysCaseArea, error) {
21
 func (m *CaseDAO) GetCaseArea(caseids string, page int, pageSize int) ([]model.SysCaseArea, error) {
22
 	var areas []model.SysCaseArea
22
 	var areas []model.SysCaseArea
23
 	dao := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
23
 	dao := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
24
-	err := dao.Limit(pageSize, page*pageSize).Find(&areas)
24
+	err := dao.Limit(pageSize, (page-1)*pageSize).Find(&areas)
25
 	return areas, err
25
 	return areas, err
26
 }
26
 }
27
 
27
 
34
 // GetCaseAreaByCase 根据案场获取案场区域
34
 // GetCaseAreaByCase 根据案场获取案场区域
35
 func (m *CaseDAO) GetCaseAreaByCase(caseid string) ([]AreaInfo, error) {
35
 func (m *CaseDAO) GetCaseAreaByCase(caseid string) ([]AreaInfo, error) {
36
 	var areas []AreaInfo
36
 	var areas []AreaInfo
37
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id =?", caseid).Table("sys_case_area").Find(&areas)
37
+	sql := `select * from sys_case_area where status>` + strconv.Itoa(models.STATUS_DEL) + ` and case_id ='` + caseid + `'`
38
+	err := m.db.Sql(sql).Find(&sql)
39
+	// err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id =?", caseid).Table("sys_case_area").Find(&areas)
38
 	return areas, err
40
 	return areas, err
39
 }
41
 }
40
 
42
 
56
 	area.AreaId = utils.GetGUID()
58
 	area.AreaId = utils.GetGUID()
57
 	area.Status = models.STATUS_NORMAL
59
 	area.Status = models.STATUS_NORMAL
58
 	area.CreateDate = time.Now()
60
 	area.CreateDate = time.Now()
59
-	user := m.ctx.Get("user").(*model.SysUser)
61
+	user := m.ctx.Get("user").(model.SysUser)
60
 	area.CreateUser = user.UserId
62
 	area.CreateUser = user.UserId
61
 	_, err := m.db.Insert(area)
63
 	_, err := m.db.Insert(area)
62
 	return area, err
64
 	return area, err
68
 		"area_name",
70
 		"area_name",
69
 		"area_icon",
71
 		"area_icon",
70
 		"area_icon_white",
72
 		"area_icon_white",
73
+		"order",
71
 	}
74
 	}
72
 	_, err := m.db.Cols(cols...).Where("area_id=?", area.AreaId).Update(area)
75
 	_, err := m.db.Cols(cols...).Where("area_id=?", area.AreaId).Update(area)
73
 	return err
76
 	return err

+ 8
- 6
models/cases/cases.go 파일 보기

27
 
27
 
28
 // CaseInfo 案场
28
 // CaseInfo 案场
29
 type CaseInfo struct {
29
 type CaseInfo struct {
30
-	model.TaCmsCase `xorm:"extends"`
31
-	CreateUserName  string
30
+	model.SysCase  `xorm:"extends"`
31
+	CreateUserName string
32
 }
32
 }
33
 
33
 
34
 // GetCaseList 获取案场列表
34
 // GetCaseList 获取案场列表
35
 func (m *CaseDAO) GetCaseList(caseids, casename string, page, pageSize int) ([]CaseInfo, error) {
35
 func (m *CaseDAO) GetCaseList(caseids, casename string, page, pageSize int) ([]CaseInfo, error) {
36
 	var cases []CaseInfo
36
 	var cases []CaseInfo
37
-	sql := `select a.*,b.user_name as create_user_name from sys_case a inner join sys_user b on a.create_user = b.user_id
37
+	sql := `select a.*,b.user_name as create_user_name from sys_case a left join sys_user b on a.create_user = b.user_id
38
 	 where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
38
 	 where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
39
 	if casename != "" {
39
 	if casename != "" {
40
 		sql = sql + ` and  a.case_name like '%` + casename + `%'`
40
 		sql = sql + ` and  a.case_name like '%` + casename + `%'`
41
 	}
41
 	}
42
 
42
 
43
-	sql = sql + " order by create_date desc limit " + strconv.Itoa(page*pageSize) + ", " + strconv.Itoa((page+1)*pageSize)
43
+	sql = sql + " order by create_date desc limit " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa((page+1)*pageSize)
44
+
44
 	err := m.db.Sql(sql).Find(&cases)
45
 	err := m.db.Sql(sql).Find(&cases)
45
 	return cases, err
46
 	return cases, err
46
 }
47
 }
71
 
72
 
72
 // AddCase 新增案场信息
73
 // AddCase 新增案场信息
73
 func (m *CaseDAO) AddCase(caseinfo model.SysCase) (*model.SysCase, error) {
74
 func (m *CaseDAO) AddCase(caseinfo model.SysCase) (*model.SysCase, error) {
75
+	caseinfo.CaseId = utils.GetGUID()
74
 	caseinfo.CreateDate = time.Now()
76
 	caseinfo.CreateDate = time.Now()
75
 	caseinfo.Status = models.STATUS_NORMAL
77
 	caseinfo.Status = models.STATUS_NORMAL
76
-	user := m.ctx.Get("user").(*model.SysUser)
78
+	user := m.ctx.Get("user").(model.SysUser)
77
 	caseinfo.CreateUser = user.UserId
79
 	caseinfo.CreateUser = user.UserId
78
-	_, err := m.db.Insert(&caseinfo)
80
+	_, err := m.db.Insert(caseinfo)
79
 	return &caseinfo, err
81
 	return &caseinfo, err
80
 }
82
 }
81
 
83
 

+ 1
- 1
models/cases/caseuser.go 파일 보기

40
 	caseuser.CreateDate = time.Now()
40
 	caseuser.CreateDate = time.Now()
41
 	caseuser.Status = models.STATUS_NORMAL
41
 	caseuser.Status = models.STATUS_NORMAL
42
 	caseuser.CaseUserId = utils.GetGUID()
42
 	caseuser.CaseUserId = utils.GetGUID()
43
-	_, err := m.db.Insert(&caseuser)
43
+	_, err := m.db.Insert(caseuser)
44
 	return &caseuser, err
44
 	return &caseuser, err
45
 }
45
 }
46
 
46
 

+ 1
- 1
models/cases/equipment.go 파일 보기

11
 // GetEquipmentList 获取体检设备
11
 // GetEquipmentList 获取体检设备
12
 func (m *CaseDAO) GetEquipmentList(caseids string, page, pageSize int) ([]model.SysCaseEquipment, error) {
12
 func (m *CaseDAO) GetEquipmentList(caseids string, page, pageSize int) ([]model.SysCaseEquipment, error) {
13
 	var equipments []model.SysCaseEquipment
13
 	var equipments []model.SysCaseEquipment
14
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, page*pageSize).Find(&equipments)
14
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, (page-1)*pageSize).Find(&equipments)
15
 	return equipments, err
15
 	return equipments, err
16
 }
16
 }
17
 
17
 

+ 37
- 7
models/cases/key.go 파일 보기

5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/utils"
6
 	"spaceofcheng/services/utils"
7
 	"strconv"
7
 	"strconv"
8
+	"strings"
8
 	"time"
9
 	"time"
9
 )
10
 )
10
 
11
 
22
 // GetKeysByCase 根据案场获取钥匙信息
23
 // GetKeysByCase 根据案场获取钥匙信息
23
 func (m *CaseDAO) GetKeysByCase(caseid, num string, page, pageSize int) ([]CaseKeyInfo, error) {
24
 func (m *CaseDAO) GetKeysByCase(caseid, num string, page, pageSize int) ([]CaseKeyInfo, error) {
24
 	var keys []CaseKeyInfo
25
 	var keys []CaseKeyInfo
25
-	dao := m.db.Where("case_id=?", caseid).Table("ta_case_key").And("status>" + strconv.Itoa(models.STATUS_DEL))
26
+	query := `
27
+		SELECT
28
+			t.*, s.customer_id,
29
+			s.customer_name
30
+		FROM
31
+			ta_case_key t
32
+		LEFT JOIN ta_case_key_use s ON t.key_id = s.key_id AND s.status != ?
33
+		WHERE
34
+			t.case_id = ?
35
+		AND t.status > ?
36
+	`
37
+
26
 	if num != "" {
38
 	if num != "" {
27
-		dao.And("lock_num like '%" + num + "%'")
39
+		query += " AND t.lock_num like '%" + num + "%'"
28
 	}
40
 	}
29
-	err := dao.Limit(pageSize, page*pageSize).Find(&keys)
41
+
42
+	offset := (page - 1) * pageSize
43
+	query += " order by lock_num asc LIMIT " + strconv.Itoa(pageSize) + " OFFSET " + strconv.Itoa(offset)
44
+
45
+	err := m.db.SQL(query, models.STATUS_NORMAL, caseid, models.STATUS_DEL).Find(&keys)
30
 	return keys, err
46
 	return keys, err
31
 }
47
 }
32
 
48
 
33
 // GetKeysCountByCase 根据案场获取钥匙数量
49
 // GetKeysCountByCase 根据案场获取钥匙数量
34
-func (m *CaseDAO) GetKeysCountByCase(caseid string) (int, error) {
50
+func (m *CaseDAO) GetKeysCountByCase(caseid, num string) (int, error) {
35
 	var keys []model.TaCaseKey
51
 	var keys []model.TaCaseKey
36
-	err := m.db.Where("case_id=?", caseid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&keys)
52
+	dao := m.db.Where("case_id=?", caseid).And("status>" + strconv.Itoa(models.STATUS_DEL))
53
+	if num != "" {
54
+		dao.And("num like '%" + num + "%'")
55
+	}
56
+	err := dao.Find(&keys)
37
 	return len(keys), err
57
 	return len(keys), err
38
 }
58
 }
39
 
59
 
66
 // AddKey 新增单个钥匙信息
86
 // AddKey 新增单个钥匙信息
67
 func (m *CaseDAO) AddKey(key model.TaCaseKey) (*model.TaCaseKey, error) {
87
 func (m *CaseDAO) AddKey(key model.TaCaseKey) (*model.TaCaseKey, error) {
68
 	key.KeyId = utils.GetGUID()
88
 	key.KeyId = utils.GetGUID()
69
-	key.Status = models.STATUS_NORMAL
89
+	key.Status = STATUS_UNLOCK
70
 	key.CreateDate = time.Now()
90
 	key.CreateDate = time.Now()
71
-	_, err := m.db.Insert(&key)
91
+	_, err := m.db.Insert(key)
72
 	return &key, err
92
 	return &key, err
73
 }
93
 }
74
 
94
 
91
 	_, err := m.db.Exec(sql)
111
 	_, err := m.db.Exec(sql)
92
 	return err
112
 	return err
93
 }
113
 }
114
+
115
+// GetKeyByNumRange 根据区间获取钥匙
116
+func (m *CaseDAO) GetKeyByNumRange(caseid, nums string) ([]model.TaCaseKey, error) {
117
+	var keys []model.TaCaseKey
118
+	sql := `select * from ta_case_key where status>` + strconv.Itoa(models.STATUS_DEL) + `
119
+	and case_id='` + caseid + `' and lock_num in ('` + strings.Replace(nums, ",", "','", -1) + `')`
120
+
121
+	err := m.db.Sql(sql).Find(keys)
122
+	return keys, err
123
+}

+ 3
- 2
models/cases/table.go 파일 보기

30
 	sql := `select a.*,b.area_name,c.case_name from sys_case_table a 
30
 	sql := `select a.*,b.area_name,c.case_name from sys_case_table a 
31
 	inner join sys_case_area b on a.area_id=b.area_id
31
 	inner join sys_case_area b on a.area_id=b.area_id
32
 	inner join sys_case c on a.case_id=c.case_id
32
 	inner join sys_case c on a.case_id=c.case_id
33
-	where status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.case_id in ('` +
33
+	where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and b.status>` + strconv.Itoa(models.STATUS_DEL) +
34
+		` and c.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.case_id in ('` +
34
 		strings.Replace(caseids, ",", "','", -1) + `')`
35
 		strings.Replace(caseids, ",", "','", -1) + `')`
35
 
36
 
36
 	err := m.db.Sql(sql).Find(&tables)
37
 	err := m.db.Sql(sql).Find(&tables)
62
 	area.TableId = utils.GetGUID()
63
 	area.TableId = utils.GetGUID()
63
 	area.Status = models.STATUS_NORMAL
64
 	area.Status = models.STATUS_NORMAL
64
 	area.CreateDate = time.Now()
65
 	area.CreateDate = time.Now()
65
-	user := m.ctx.Get("user").(*model.SysUser)
66
+	user := m.ctx.Get("user").(model.SysUser)
66
 	area.CreateUser = user.UserId
67
 	area.CreateUser = user.UserId
67
 	_, err := m.db.Insert(area)
68
 	_, err := m.db.Insert(area)
68
 	return area, err
69
 	return area, err

+ 17
- 7
models/cases/tag.go 파일 보기

7
 	"strconv"
7
 	"strconv"
8
 	"strings"
8
 	"strings"
9
 	"time"
9
 	"time"
10
+
11
+	"github.com/astaxie/beego"
10
 )
12
 )
11
 
13
 
12
 // GetTagCount 获取标签总数
14
 // GetTagCount 获取标签总数
13
 func (m *CaseDAO) GetTagCount(caseids string) (int, error) {
15
 func (m *CaseDAO) GetTagCount(caseids string) (int, error) {
14
-	var tags []model.SysTag
15
-	err := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").Find(&tags)
16
+	var tags []TagInfo
17
+	sql := `select tag.*,c.case_names from sys_tag tag inner join (
18
+	select b.tag_id,GROUP_CONCAT(a.case_name) case_names from sys_case a inner join sys_tag_case b on a.case_id=b.case_id and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
19
+	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and b.tag_id not in (select tag_id from sys_tag_case where case_id not in ('` +
20
+		strings.Replace(caseids, ",", "','", -1) + `'))
21
+	group by b.tag_id ) c on tag.tag_id = c.tag_id where tag.status>` + strconv.Itoa(models.STATUS_DEL)
22
+	err := m.db.Sql(sql).Find(&tags)
23
+
16
 	return len(tags), err
24
 	return len(tags), err
17
 }
25
 }
18
 
26
 
19
 // TagInfo 标签
27
 // TagInfo 标签
20
 type TagInfo struct {
28
 type TagInfo struct {
21
-	model.TaCmsCase `xorm:"extends"`
22
-	CaseNames       string
29
+	model.SysTag `xorm:"extends"`
30
+	CaseNames    string
23
 }
31
 }
24
 
32
 
25
 // GetTagList 根据案场获取标签
33
 // GetTagList 根据案场获取标签
26
 func (m *CaseDAO) GetTagList(caseids string, page int, pageSize int) ([]TagInfo, error) {
34
 func (m *CaseDAO) GetTagList(caseids string, page int, pageSize int) ([]TagInfo, error) {
27
 	var tags []TagInfo
35
 	var tags []TagInfo
36
+	offset := (page - 1) * pageSize
28
 	sql := `select tag.*,c.case_names from sys_tag tag inner join (
37
 	sql := `select tag.*,c.case_names from sys_tag tag inner join (
29
 	select b.tag_id,GROUP_CONCAT(a.case_name) case_names from sys_case a inner join sys_tag_case b on a.case_id=b.case_id and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
38
 	select b.tag_id,GROUP_CONCAT(a.case_name) case_names from sys_case a inner join sys_tag_case b on a.case_id=b.case_id and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
30
 	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and b.tag_id not in (select tag_id from sys_tag_case where case_id not in ('` +
39
 	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and b.tag_id not in (select tag_id from sys_tag_case where case_id not in ('` +
31
 		strings.Replace(caseids, ",", "','", -1) + `'))
40
 		strings.Replace(caseids, ",", "','", -1) + `'))
32
-	group by b.tag_id ) c on tag.tag_id = c.tag_id`
41
+	group by b.tag_id ) c on tag.tag_id = c.tag_id where tag.status>` + strconv.Itoa(models.STATUS_DEL) + ` LIMIT ` + strconv.Itoa(pageSize) + ` OFFSET ` + strconv.Itoa(offset)
33
 
42
 
34
-	err := m.db.Sql(sql).Find(tags)
43
+	err := m.db.Sql(sql).Find(&tags)
35
 	return tags, err
44
 	return tags, err
36
 }
45
 }
37
 
46
 
66
 	tag.TagId = utils.GetGUID()
75
 	tag.TagId = utils.GetGUID()
67
 	tag.Status = models.STATUS_NORMAL
76
 	tag.Status = models.STATUS_NORMAL
68
 	tag.CreateDate = time.Now()
77
 	tag.CreateDate = time.Now()
69
-	_, err := m.db.Insert(&tag)
78
+	_, err := m.db.Insert(tag)
70
 	return &tag, err
79
 	return &tag, err
71
 }
80
 }
72
 
81
 
81
 
90
 
82
 // DeleteTag 刪除标签
91
 // DeleteTag 刪除标签
83
 func (m *CaseDAO) DeleteTag(tagid string) error {
92
 func (m *CaseDAO) DeleteTag(tagid string) error {
93
+	beego.Error(tagid)
84
 	var tag = model.SysTag{
94
 	var tag = model.SysTag{
85
 		TagId:  tagid,
95
 		TagId:  tagid,
86
 		Status: models.STATUS_DEL,
96
 		Status: models.STATUS_DEL,

+ 8
- 2
models/constant.go 파일 보기

2
 
2
 
3
 // 状态列表
3
 // 状态列表
4
 const (
4
 const (
5
-	STATUS_NORMAL = 1
6
-	STATUS_DEL    = -1
5
+	// 删除
6
+	STATUS_DEL = iota - 1
7
+
8
+	// 新录入
9
+	STATUS_READY
10
+
11
+	// 正常
12
+	STATUS_NORMAL
7
 )
13
 )
8
 
14
 
9
 // 映射数据库的布尔型
15
 // 映射数据库的布尔型

+ 33
- 0
models/course/course.go 파일 보기

1
+package course
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/utils"
7
+	"strconv"
8
+
9
+	"github.com/go-xorm/xorm"
10
+)
11
+
12
+// CourseDAO 当前数据库操作对象
13
+type CourseDAO struct {
14
+	ctx *utils.Context
15
+	db  *xorm.Session
16
+}
17
+
18
+// NewCourseDAO New Inst
19
+func NewCourseDAO(ctx *utils.Context) *CourseDAO {
20
+	return &CourseDAO{
21
+		ctx: ctx,
22
+		db:  ctx.DB,
23
+	}
24
+}
25
+
26
+// GetCourseList 获取课程列表
27
+func (m *CourseDAO) GetCourseList(caseids, name, typeid string, page, pageSize int) ([]model.TaCourse, error) {
28
+	var courses []model.TaCourse
29
+
30
+	m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("")
31
+
32
+	return courses, nil
33
+}

+ 51
- 0
models/course/tag.go 파일 보기

1
+package course
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/utils"
7
+	"strconv"
8
+	"strings"
9
+)
10
+
11
+// GetTagsList 获取标签列表
12
+func (m *CourseDAO) GetTagsList(orgid string, page, pageSize int) ([]model.TdCourseTag, error) {
13
+	var tags []model.TdCourseTag
14
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("org_id=?", orgid).Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&tags)
15
+	return tags, err
16
+}
17
+
18
+// GetTagsCount 获取标签count
19
+func (m *CourseDAO) GetTagsCount(orgid string) (int, error) {
20
+	var tags []model.TdCourseTag
21
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("org_id=?", orgid).Find(&tags)
22
+	if err != nil {
23
+		return 0, nil
24
+	}
25
+	if len(tags) > 0 {
26
+		return len(tags), nil
27
+	}
28
+	return 0, nil
29
+}
30
+
31
+// AddCourseTag 新增课程标签
32
+func (m *CourseDAO) AddCourseTag(tag *model.TdCourseTag) (*model.TdCourseTag, error) {
33
+	tag.TagId = utils.GetGUID()
34
+	tag.Status = models.STATUS_NORMAL
35
+	_, 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
51
+}

+ 13
- 3
models/customer/customer.go 파일 보기

28
 
28
 
29
 // CustWithWXList 客户列表
29
 // CustWithWXList 客户列表
30
 func (m *CustomerDAO) CustWithWXList(phone string, page ...int) ([]CustWithWX, int64, error) {
30
 func (m *CustomerDAO) CustWithWXList(phone string, page ...int) ([]CustWithWX, int64, error) {
31
+	org := m.ctx.Get("org").(model.SysOrg)
32
+
31
 	if phone == "" {
33
 	if phone == "" {
32
 		phone = "%"
34
 		phone = "%"
33
 	} else {
35
 	} else {
49
 	}
51
 	}
50
 
52
 
51
 	query := `
53
 	query := `
52
-		SELECT *
54
+		SELECT
55
+			t.*, s.account_info,
56
+			s.account_type,
57
+			s.mapping_id,
58
+			s.openid,
59
+			s.user_id as map_user,
60
+			s.user_type,
61
+			s.uuid
53
 		FROM
62
 		FROM
54
 			ta_customer t
63
 			ta_customer t
55
 		LEFT JOIN ta_user_mapping s ON t.customer_id = s.user_id
64
 		LEFT JOIN ta_user_mapping s ON t.customer_id = s.user_id
58
 		WHERE
67
 		WHERE
59
 			t.phone like ?
68
 			t.phone like ?
60
 		AND t.status > ?
69
 		AND t.status > ?
70
+		AND t.org_id = '` + org.OrgId + `'
61
 		ORDER BY
71
 		ORDER BY
62
 			t.create_date DESC
72
 			t.create_date DESC
63
 	`
73
 	`
64
 
74
 
65
 	var cust []CustWithWX
75
 	var cust []CustWithWX
66
 
76
 
67
-	cnt, err := utils.GetPageList(m.db, &cust, []int{pageNum, offset}, query, phone, models.STATUS_DEL)
77
+	cnt, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&cust, query, []int{pageNum, offset}, phone, models.STATUS_DEL)
68
 	if err != nil {
78
 	if err != nil {
69
 		return nil, 0, err
79
 		return nil, 0, err
70
 	}
80
 	}
188
 	cust.CreateDate = time.Now().Local()
198
 	cust.CreateDate = time.Now().Local()
189
 	cust.Status = models.STATUS_NORMAL
199
 	cust.Status = models.STATUS_NORMAL
190
 
200
 
191
-	_, err := m.db.Insert(&cust)
201
+	_, err := m.db.Insert(cust)
192
 	return err
202
 	return err
193
 }
203
 }

+ 1
- 0
models/customer/types.go 파일 보기

9
 	model.TaCustomer    `xorm:"extends"`
9
 	model.TaCustomer    `xorm:"extends"`
10
 	model.TaUserMapping `xorm:"extends"`
10
 	model.TaUserMapping `xorm:"extends"`
11
 	Points              int
11
 	Points              int
12
+	MapUser             string
12
 }
13
 }

+ 73
- 0
models/goods/goods.go 파일 보기

1
 package goods
1
 package goods
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
4
 	"spaceofcheng/services/utils"
7
 	"spaceofcheng/services/utils"
8
+	"time"
9
+
10
+	"github.com/yl10/kit/guid"
5
 
11
 
6
 	"github.com/go-xorm/xorm"
12
 	"github.com/go-xorm/xorm"
7
 )
13
 )
19
 		db:  ctx.DB,
25
 		db:  ctx.DB,
20
 	}
26
 	}
21
 }
27
 }
28
+
29
+// GetGoodsListOfCase 获取案场商品列表
30
+// 暂时没涉及分页
31
+func (m *GoodsDAO) GetGoodsListOfCase(caseID string) ([]GoodsWithSpec, error) {
32
+	var goodsList []GoodsWithSpec
33
+
34
+	sql := "select * from ta_goods where case_id = ? and status = ? order by t.type_id, t.create_date"
35
+	if err := m.db.SQL(sql, caseID, models.STATUS_NORMAL).Find(&goodsList); err != nil {
36
+		return nil, err
37
+	}
38
+
39
+	for inx, goods := range goodsList {
40
+		sql = `SELECT * FROM td_spec t
41
+			JOIN ta_goods_spec s ON t.spec_id = s.spec_id
42
+			WHERE t.status = ? AND s.goods_id = ?
43
+		`
44
+
45
+		var specs []SpecWithPrice
46
+		if err := m.db.SQL(sql, models.STATUS_DEL, goods.GoodsId).Find(&specs); err != nil {
47
+			return nil, err
48
+		}
49
+
50
+		goodsList[inx].Specs = specs
51
+	}
52
+
53
+	return goodsList, nil
54
+}
55
+
56
+// GetGoodsByID 依据ID 获取商品
57
+func (m *GoodsDAO) GetGoodsByID(id, caseID string) (*model.TaGoods, error) {
58
+	goods := new(model.TaGoods)
59
+	if _, err := m.db.Where("goods_id=?", id).And("case_id=?", caseID).Get(goods); err != nil {
60
+		return nil, err
61
+	}
62
+
63
+	return goods, nil
64
+}
65
+
66
+// UpdateGoods 更新商品
67
+func (m *GoodsDAO) UpdateGoods(goods *model.TaGoods, cols []string) error {
68
+	if _, err := m.db.Where("goods_id=?", goods.GoodsId).Cols(cols...).Update(goods); err != nil {
69
+		return err
70
+	}
71
+
72
+	return nil
73
+}
74
+
75
+// SaveGoods 保存商品
76
+func (m *GoodsDAO) SaveGoods(goods *model.TaGoods) error {
77
+	userRaw := m.ctx.Get("user")
78
+	if userRaw == nil {
79
+		return errors.New("登录异常, 请登出重试")
80
+	}
81
+	user := userRaw.(model.SysUser)
82
+
83
+	goods.GoodsId = guid.NewGUIDString()
84
+	goods.Status = models.STATUS_NORMAL
85
+	goods.CreateDate = time.Now().Local()
86
+	goods.CreateUser = user.UserId
87
+	goods.OrgId = user.OrgId
88
+
89
+	if _, err := m.db.Insert(goods); err != nil {
90
+		return err
91
+	}
92
+
93
+	return nil
94
+}

+ 48
- 0
models/goods/orders.go 파일 보기

1
+package goods
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/utils"
8
+	"strings"
9
+	"time"
10
+
11
+	"github.com/yl10/kit/guid"
12
+)
13
+
14
+// SaveOrders 下单
15
+func (m *GoodsDAO) SaveOrders(order *model.TaGoodsOrders) error {
16
+	if order.UserId == "" {
17
+		return errors.New("没有下单人信息")
18
+	}
19
+
20
+	caseID := order.CaseId
21
+	if caseID == "" {
22
+		return errors.New("没有指定案场")
23
+	}
24
+
25
+	caseInfo, err := m.getCaseByID(caseID)
26
+	if err != nil {
27
+		return err
28
+	}
29
+
30
+	order.OrdersId = guid.NewGUIDString()
31
+	order.OrgId = caseInfo.OrgId
32
+	order.CreateDate = time.Now().Local()
33
+	order.Status = models.STATUS_NORMAL
34
+
35
+	// 当前订单号的随机方式 = 时间 + 个人ID
36
+	order.OrdersNo = time.Now().Local().Format("20060102150405") + "-" + strings.Join(utils.GUIID2IntString(order.UserId), "")
37
+
38
+	return nil
39
+}
40
+
41
+func (m *GoodsDAO) getCaseByID(caseID string) (*model.SysCase, error) {
42
+	cs := new(model.SysCase)
43
+	if _, err := m.db.Where("case_id=?", caseID).Get(cs); err != nil {
44
+		return nil, err
45
+	}
46
+
47
+	return cs, nil
48
+}

+ 1
- 1
models/goods/spec.go 파일 보기

18
 // GetGoodsSpec 根据案场获取商品规格
18
 // GetGoodsSpec 根据案场获取商品规格
19
 func (m *GoodsDAO) GetGoodsSpec(caseids string, page int, pageSize int) ([]model.TdSpec, error) {
19
 func (m *GoodsDAO) GetGoodsSpec(caseids string, page int, pageSize int) ([]model.TdSpec, error) {
20
 	var goodsSpec []model.TdSpec
20
 	var goodsSpec []model.TdSpec
21
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, page*pageSize).Find(&goodsSpec)
21
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, (page-1)*pageSize).Find(&goodsSpec)
22
 	return goodsSpec, err
22
 	return goodsSpec, err
23
 }
23
 }
24
 
24
 

+ 3
- 3
models/goods/type.go 파일 보기

19
 // GetGoodsType 根据案场获取商品类型
19
 // GetGoodsType 根据案场获取商品类型
20
 func (m *GoodsDAO) GetGoodsType(caseids string, page int, pageSize int) ([]model.TdGoodsType, error) {
20
 func (m *GoodsDAO) GetGoodsType(caseids string, page int, pageSize int) ([]model.TdGoodsType, error) {
21
 	var goodstype []model.TdGoodsType
21
 	var goodstype []model.TdGoodsType
22
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, page*pageSize).Desc("create_date").Find(&goodstype)
22
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&goodstype)
23
 	return goodstype, err
23
 	return goodstype, err
24
 }
24
 }
25
 
25
 
41
 	goodsType.TypeId = utils.GetGUID()
41
 	goodsType.TypeId = utils.GetGUID()
42
 	goodsType.CreateDate = time.Now()
42
 	goodsType.CreateDate = time.Now()
43
 	goodsType.Status = models.STATUS_NORMAL
43
 	goodsType.Status = models.STATUS_NORMAL
44
-	user := m.ctx.Get("user").(*model.SysUser)
44
+	user := m.ctx.Get("user").(model.SysUser)
45
 	goodsType.CreateUser = user.UserId
45
 	goodsType.CreateUser = user.UserId
46
-	_, err := m.db.Insert(&goodsType)
46
+	_, err := m.db.Insert(goodsType)
47
 	return goodsType, err
47
 	return goodsType, err
48
 }
48
 }
49
 
49
 

+ 17
- 0
models/goods/types.go 파일 보기

1
+package goods
2
+
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+)
6
+
7
+// SpecWithPrice 规格价格
8
+type SpecWithPrice struct {
9
+	model.TdSpec
10
+	GoodsPrice float32 `xorm:"FLOAT(8,2)"`
11
+}
12
+
13
+// GoodsWithSpec 含规格商品
14
+type GoodsWithSpec struct {
15
+	model.TaGoods
16
+	Specs []SpecWithPrice
17
+}

+ 11
- 5
models/message/cmscase.go 파일 보기

8
 	"strings"
8
 	"strings"
9
 	"time"
9
 	"time"
10
 
10
 
11
+	"github.com/astaxie/beego"
12
+
11
 	"github.com/go-xorm/builder"
13
 	"github.com/go-xorm/builder"
12
 )
14
 )
13
 
15
 
21
 func (m *MessageDAO) GetCmsCaseList(name, caseids string, page int, pageSize int) ([]CmsCaseInfo, error) {
23
 func (m *MessageDAO) GetCmsCaseList(name, caseids string, page int, pageSize int) ([]CmsCaseInfo, error) {
22
 	var cases []CmsCaseInfo
24
 	var cases []CmsCaseInfo
23
 	sql := `select a.*,b.case_name from ta_cms_case a inner join sys_case b on a.case_id = b.case_id 
25
 	sql := `select a.*,b.case_name from ta_cms_case a inner join sys_case b on a.case_id = b.case_id 
24
-	where a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and a.name like '%` + name + `%' and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
26
+	where a.org_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and a.name like '%` + name + `%' and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
25
 	and b.status > ` + strconv.Itoa(models.STATUS_DEL) + `
27
 	and b.status > ` + strconv.Itoa(models.STATUS_DEL) + `
26
-	order by create_date desc limit ` + strconv.Itoa(page*pageSize) + `, ` + strconv.Itoa((page+1)*pageSize)
27
-
28
+	order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa((page+1)*pageSize)
28
 	err := m.db.Sql(sql).Find(&cases)
29
 	err := m.db.Sql(sql).Find(&cases)
29
 	return cases, err
30
 	return cases, err
30
 }
31
 }
33
 func (m *MessageDAO) GetCmsCaseByOrg(orgid string) ([]model.TaCmsCase, error) {
34
 func (m *MessageDAO) GetCmsCaseByOrg(orgid string) ([]model.TaCmsCase, error) {
34
 	var cases []model.TaCmsCase
35
 	var cases []model.TaCmsCase
35
 	err := m.db.Where("org_id=?", orgid).Find(&cases)
36
 	err := m.db.Where("org_id=?", orgid).Find(&cases)
37
+	beego.Error(cases)
36
 	return cases, err
38
 	return cases, err
37
 }
39
 }
38
 
40
 
60
 // GetCmsCaseByID 获取项目专题详情
62
 // GetCmsCaseByID 获取项目专题详情
61
 func (m *MessageDAO) GetCmsCaseByID(cmscaseid string) (*CmsCase, error) {
63
 func (m *MessageDAO) GetCmsCaseByID(cmscaseid string) (*CmsCase, error) {
62
 	var cases []CmsCase
64
 	var cases []CmsCase
63
-	err := m.db.Table("ta_cms_case").Where("cms_case_id=?", cmscaseid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&cases)
65
+	sql := `select * from ta_cms_case where cms_case_id='` + cmscaseid + `' and status>` + strconv.Itoa(models.STATUS_DEL)
66
+	err := m.db.Sql(sql).Find(&cases)
67
+	// err := m.db.Table("ta_cms_case").Where("cms_case_id=?", cmscaseid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&cases)
64
 	if err != nil {
68
 	if err != nil {
69
+		beego.Error(err)
65
 		return nil, err
70
 		return nil, err
66
 	}
71
 	}
67
 	if len(cases) > 0 {
72
 	if len(cases) > 0 {
150
 
155
 
151
 // SaveCmsCaseImg 保存项目专题对应的图片
156
 // SaveCmsCaseImg 保存项目专题对应的图片
152
 func (m *MessageDAO) SaveCmsCaseImg(img model.TaCmsCaseImage) error {
157
 func (m *MessageDAO) SaveCmsCaseImg(img model.TaCmsCaseImage) error {
158
+	img.CmsCaseImageId = utils.GetGUID()
153
 	img.Status = models.STATUS_NORMAL
159
 	img.Status = models.STATUS_NORMAL
154
-	_, err := m.db.Insert(&img)
160
+	_, err := m.db.Insert(img)
155
 	return err
161
 	return err
156
 }
162
 }

+ 8
- 5
models/message/image.go 파일 보기

11
 // GetImgList 获取轮播图列表
11
 // GetImgList 获取轮播图列表
12
 func (m *MessageDAO) GetImgList(orgid string, page int, pageSize int) ([]model.TaCmsImages, error) {
12
 func (m *MessageDAO) GetImgList(orgid string, page int, pageSize int) ([]model.TaCmsImages, error) {
13
 	var imgs []model.TaCmsImages
13
 	var imgs []model.TaCmsImages
14
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("org_id=?", orgid).Limit(pageSize, page*pageSize).Desc("create_date").Find(&imgs)
14
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("org_id=?", orgid).Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&imgs)
15
 	return imgs, err
15
 	return imgs, err
16
 }
16
 }
17
 
17
 
49
 // AddCmsImg 保存轮播图
49
 // AddCmsImg 保存轮播图
50
 func (m *MessageDAO) AddCmsImg(info model.TaCmsImages) (*model.TaCmsImages, error) {
50
 func (m *MessageDAO) AddCmsImg(info model.TaCmsImages) (*model.TaCmsImages, error) {
51
 	info.ImageId = utils.GetGUID()
51
 	info.ImageId = utils.GetGUID()
52
-	info.Status = models.STATUS_NORMAL
52
+	// info.Status = models.STATUS_NORMAL
53
 	info.CreateDate = time.Now()
53
 	info.CreateDate = time.Now()
54
 	user := m.ctx.Get("user").(model.SysUser)
54
 	user := m.ctx.Get("user").(model.SysUser)
55
 	info.CreateUser = user.UserId
55
 	info.CreateUser = user.UserId
56
-	_, err := m.db.Insert(&info)
56
+	_, err := m.db.Insert(info)
57
 	return &info, err
57
 	return &info, err
58
 }
58
 }
59
 
59
 
62
 	var cols = []string{
62
 	var cols = []string{
63
 		"image_url",
63
 		"image_url",
64
 		"forward_type",
64
 		"forward_type",
65
-		"foward_url",
66
-		"foward_resource_id",
65
+		"forward_url",
66
+		"forward_resource_id",
67
 		"sort",
67
 		"sort",
68
+		"title",
69
+		"location_id",
70
+		"status",
68
 	}
71
 	}
69
 	_, err := m.db.Cols(cols...).Where("image_id=?", img.ImageId).Update(img)
72
 	_, err := m.db.Cols(cols...).Where("image_id=?", img.ImageId).Update(img)
70
 	return err
73
 	return err

+ 1
- 1
models/message/location.go 파일 보기

37
 	location.LocationId = utils.GetGUID()
37
 	location.LocationId = utils.GetGUID()
38
 	location.Status = models.STATUS_NORMAL
38
 	location.Status = models.STATUS_NORMAL
39
 	location.IsSys = ISSYS
39
 	location.IsSys = ISSYS
40
-	_, err := m.db.Insert(&location)
40
+	_, err := m.db.Insert(location)
41
 	return &location, err
41
 	return &location, err
42
 }
42
 }
43
 
43
 

+ 5
- 2
models/message/message.go 파일 보기

33
 		dao.And("info_name like '%" + title + "%'")
33
 		dao.And("info_name like '%" + title + "%'")
34
 	}
34
 	}
35
 
35
 
36
-	err := dao.Limit(pageSize, page*pageSize).Desc("create_date").Find(&cmsinfos)
36
+	err := dao.Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&cmsinfos)
37
 	return cmsinfos, err
37
 	return cmsinfos, err
38
 }
38
 }
39
 
39
 
78
 	cmsinfo.CreateDate = time.Now()
78
 	cmsinfo.CreateDate = time.Now()
79
 	user := m.ctx.Get("user").(model.SysUser)
79
 	user := m.ctx.Get("user").(model.SysUser)
80
 	cmsinfo.CreateUser = user.UserId
80
 	cmsinfo.CreateUser = user.UserId
81
-	_, err := m.db.Insert(&cmsinfo)
81
+	_, err := m.db.Insert(cmsinfo)
82
 	return &cmsinfo, err
82
 	return &cmsinfo, err
83
 }
83
 }
84
 
84
 
86
 func (m *MessageDAO) UpdateCmsInfo(cmsinfo model.TaCmsInfo) error {
86
 func (m *MessageDAO) UpdateCmsInfo(cmsinfo model.TaCmsInfo) error {
87
 	var cols = []string{
87
 	var cols = []string{
88
 		"info_name",
88
 		"info_name",
89
+		"info_url",
90
+		"location_id",
91
+		"case_id",
89
 	}
92
 	}
90
 	_, err := m.db.Cols(cols...).Where("info_id=?", cmsinfo.InfoId).Update(cmsinfo)
93
 	_, err := m.db.Cols(cols...).Where("info_id=?", cmsinfo.InfoId).Update(cmsinfo)
91
 	return err
94
 	return err

+ 4
- 5
models/message/news.go 파일 보기

24
 	sql := `select * from ta_cms_news new left join (
24
 	sql := `select * from ta_cms_news new left join (
25
 		select b.news_id,GROUP_CONCAT(a.location_name) location_names,GROUP_CONCAT(a.location_id) location_ids 
25
 		select b.news_id,GROUP_CONCAT(a.location_name) location_names,GROUP_CONCAT(a.location_id) location_ids 
26
 		from td_cms_image_location a inner join ta_cms_location b on a.location_id=b.location_id and a.status>` + strconv.Itoa(models.STATUS_DEL) +
26
 		from td_cms_image_location a inner join ta_cms_location b on a.location_id=b.location_id and a.status>` + strconv.Itoa(models.STATUS_DEL) +
27
-		` and b.org_id='` + orgid + `' group by b.news_id
27
+		` and a.org_id='` + orgid + `' group by b.news_id
28
 		) c on new.news_id = c.news_id and new.status>` + strconv.Itoa(models.STATUS_DEL) + ` and new.org_id='` + orgid + `'`
28
 		) c on new.news_id = c.news_id and new.status>` + strconv.Itoa(models.STATUS_DEL) + ` and new.org_id='` + orgid + `'`
29
 
29
 
30
 	if locationid != "" {
30
 	if locationid != "" {
31
 		sql += ` and new.news_id in (select news_id from ta_cms_location where location_id='` + locationid + `')`
31
 		sql += ` and new.news_id in (select news_id from ta_cms_location where location_id='` + locationid + `')`
32
 	}
32
 	}
33
 
33
 
34
-	sql = sql + " order by new.create_date desc limit " + strconv.Itoa(page*pageSize) + ", " + strconv.Itoa((page+1)*pageSize)
35
-
34
+	sql = sql + " order by new.create_date desc limit " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa((page+1)*pageSize)
36
 	err := m.db.Sql(sql).Find(&news)
35
 	err := m.db.Sql(sql).Find(&news)
37
 	return news, err
36
 	return news, err
38
 }
37
 }
88
 func (m *MessageDAO) AddNews(news model.TaCmsNews) (*model.TaCmsNews, error) {
87
 func (m *MessageDAO) AddNews(news model.TaCmsNews) (*model.TaCmsNews, error) {
89
 	news.NewsId = utils.GetGUID()
88
 	news.NewsId = utils.GetGUID()
90
 	news.CreateDate = time.Now()
89
 	news.CreateDate = time.Now()
91
-	user := m.ctx.Get("user").(*model.SysUser)
90
+	user := m.ctx.Get("user").(model.SysUser)
92
 	news.CreateUser = user.UserId
91
 	news.CreateUser = user.UserId
93
-	_, err := m.db.Insert(&news)
92
+	_, err := m.db.Insert(news)
94
 	return &news, err
93
 	return &news, err
95
 }
94
 }
96
 
95
 

+ 1
- 0
models/model/sys_case_area.go 파일 보기

14
 	Status        int       `xorm:"SMALLINT(6)"`
14
 	Status        int       `xorm:"SMALLINT(6)"`
15
 	CreateDate    time.Time `xorm:"DATETIME"`
15
 	CreateDate    time.Time `xorm:"DATETIME"`
16
 	CreateUser    string    `xorm:"VARCHAR(64)"`
16
 	CreateUser    string    `xorm:"VARCHAR(64)"`
17
+	Order         int       `xorm:"INT(11)"`
17
 }
18
 }

+ 6
- 8
models/model/sys_case_user.go 파일 보기

5
 )
5
 )
6
 
6
 
7
 type SysCaseUser struct {
7
 type SysCaseUser struct {
8
-	CaseUserId string `xorm:"not null pk VARCHAR(64)"`
9
-	OrgId      string `xorm:"VARCHAR(64)"`
10
-	CaseId     string `xorm:"VARCHAR(64)"`
11
-	UserName   string `xorm:"VARCHAR(50)"`
12
-	Tel        string `xorm:"VARCHAR(50)"`
13
-	UserType   string `xorm:"comment('案场管理员
14
-            咖啡师
15
-            消息收发员') VARCHAR(20)"`
8
+	CaseUserId string    `xorm:"not null pk VARCHAR(64)"`
9
+	OrgId      string    `xorm:"VARCHAR(64)"`
10
+	CaseId     string    `xorm:"VARCHAR(64)"`
11
+	UserName   string    `xorm:"VARCHAR(50)"`
12
+	Tel        string    `xorm:"VARCHAR(50)"`
13
+	UserType   string    `xorm:"comment('案场管理员 咖啡师 消息收发员') VARCHAR(20)"`
16
 	Status     int       `xorm:"SMALLINT(6)"`
14
 	Status     int       `xorm:"SMALLINT(6)"`
17
 	CreateDate time.Time `xorm:"DATETIME"`
15
 	CreateDate time.Time `xorm:"DATETIME"`
18
 }
16
 }

+ 2
- 1
models/model/sys_user_case.go 파일 보기

6
 
6
 
7
 type SysUserCase struct {
7
 type SysUserCase struct {
8
 	UserId     string    `xorm:"not null pk VARCHAR(64)"`
8
 	UserId     string    `xorm:"not null pk VARCHAR(64)"`
9
-	CaseId     string    `xorm:"VARCHAR(64)"`
9
+	CaseId     string    `xorm:"not null pk VARCHAR(64)"`
10
 	CaseName   string    `xorm:"VARCHAR(100)"`
10
 	CaseName   string    `xorm:"VARCHAR(100)"`
11
+	IsCreated  int       `xorm:"TINYINT(1)"`
11
 	IsBelong   int       `xorm:"TINYINT(1)"`
12
 	IsBelong   int       `xorm:"TINYINT(1)"`
12
 	Status     int       `xorm:"SMALLINT(6)"`
13
 	Status     int       `xorm:"SMALLINT(6)"`
13
 	CreateDate time.Time `xorm:"DATETIME"`
14
 	CreateDate time.Time `xorm:"DATETIME"`

+ 1
- 2
models/model/sys_wechat_conf.go 파일 보기

3
 type SysWechatConf struct {
3
 type SysWechatConf struct {
4
 	ConfId string `xorm:"VARCHAR(64)"`
4
 	ConfId string `xorm:"VARCHAR(64)"`
5
 	OrgId  string `xorm:"VARCHAR(64)"`
5
 	OrgId  string `xorm:"VARCHAR(64)"`
6
-	Type   int    `xorm:"comment('wechat 微信公众号
7
-            mini 小程序') SMALLINT(6)"`
6
+	Type   int    `xorm:"comment('wechat 微信公众号 mini 小程序') SMALLINT(6)"`
8
 	Appid  string `xorm:"VARCHAR(50)"`
7
 	Appid  string `xorm:"VARCHAR(50)"`
9
 	Secret string `xorm:"VARCHAR(50)"`
8
 	Secret string `xorm:"VARCHAR(50)"`
10
 	Token  string `xorm:"VARCHAR(50)"`
9
 	Token  string `xorm:"VARCHAR(50)"`

+ 15
- 21
models/model/ta_account_change.go 파일 보기

5
 )
5
 )
6
 
6
 
7
 type TaAccountChange struct {
7
 type TaAccountChange struct {
8
-	DetailId   string `xorm:"not null pk VARCHAR(64)"`
9
-	AccountId  string `xorm:"VARCHAR(64)"`
10
-	UserId     string `xorm:"VARCHAR(64)"`
11
-	UserName   string `xorm:"VARCHAR(50)"`
12
-	OrgId      string `xorm:"VARCHAR(64)"`
13
-	CaseId     string `xorm:"VARCHAR(64)"`
14
-	ChangeType string `xorm:"comment('integral 积分
15
-            amount 城币') VARCHAR(20)"`
16
-	ChangeSource string `xorm:"comment('vip vip卡充值
17
-            orders 订单消费
18
-            register 注册
19
-            perfect 完善资料
20
-            recommend 推荐') VARCHAR(20)"`
21
-	SourceId   string  `xorm:"VARCHAR(64)"`
22
-	SourceName string  `xorm:"VARCHAR(255)"`
23
-	Amount     float32 `xorm:"FLOAT(8,2)"`
24
-	FloatType  string  `xorm:"comment('+
25
-            -') VARCHAR(5)"`
26
-	CreateDate time.Time `xorm:"DATETIME"`
27
-	CreateUser string    `xorm:"VARCHAR(64)"`
28
-	Status     int       `xorm:"SMALLINT(6)"`
8
+	DetailId     string    `xorm:"not null pk VARCHAR(64)"`
9
+	AccountId    string    `xorm:"VARCHAR(64)"`
10
+	UserId       string    `xorm:"VARCHAR(64)"`
11
+	UserName     string    `xorm:"VARCHAR(50)"`
12
+	OrgId        string    `xorm:"VARCHAR(64)"`
13
+	CaseId       string    `xorm:"VARCHAR(64)"`
14
+	ChangeType   string    `xorm:"comment('integral 积分 amount 城币') VARCHAR(20)"`
15
+	ChangeSource string    `xorm:"comment('vip vip卡充值 orders 订单消费 register 注册 perfect 完善资料 recommend 推荐') VARCHAR(20)"`
16
+	SourceId     string    `xorm:"VARCHAR(64)"`
17
+	SourceName   string    `xorm:"VARCHAR(255)"`
18
+	Amount       float32   `xorm:"FLOAT(8,2)"`
19
+	FloatType    string    `xorm:"comment('+ -') VARCHAR(5)"`
20
+	CreateDate   time.Time `xorm:"DATETIME"`
21
+	CreateUser   string    `xorm:"VARCHAR(64)"`
22
+	Status       int       `xorm:"SMALLINT(6)"`
29
 }
23
 }

+ 3
- 1
models/model/ta_channel.go 파일 보기

1
 package model
1
 package model
2
 
2
 
3
-import "time"
3
+import (
4
+	"time"
5
+)
4
 
6
 
5
 type TaChannel struct {
7
 type TaChannel struct {
6
 	ChannelId   string    `xorm:"not null pk VARCHAR(64)"`
8
 	ChannelId   string    `xorm:"not null pk VARCHAR(64)"`

+ 2
- 3
models/model/ta_cms_case_image.go 파일 보기

5
 	CmsCaseId      string `xorm:"VARCHAR(64)"`
5
 	CmsCaseId      string `xorm:"VARCHAR(64)"`
6
 	CaseImageUrl   string `xorm:"TEXT"`
6
 	CaseImageUrl   string `xorm:"TEXT"`
7
 	Status         int    `xorm:"SMALLINT(6)"`
7
 	Status         int    `xorm:"SMALLINT(6)"`
8
-	ImageType      string `xorm:"comment('cover:封面
9
-            detail:详情') VARCHAR(32)"`
10
-	Sort int `xorm:"INT(11)"`
8
+	ImageType      string `xorm:"comment('cover:封面 detail:详情') VARCHAR(32)"`
9
+	Sort           int    `xorm:"INT(11)"`
11
 }
10
 }

+ 13
- 12
models/model/ta_cms_images.go 파일 보기

5
 )
5
 )
6
 
6
 
7
 type TaCmsImages struct {
7
 type TaCmsImages struct {
8
-	ImageId          string    `xorm:"not null pk VARCHAR(64)"`
9
-	LocationId       string    `xorm:"VARCHAR(64)"`
10
-	ImageUrl         string    `xorm:"VARCHAR(128)"`
11
-	ForwardType      string    `xorm:"comment('url:转跳链接,course:转跳课程') CHAR(32)"`
12
-	FowardUrl        string    `xorm:"VARCHAR(255)"`
13
-	FowardResourceId string    `xorm:"VARCHAR(64)"`
14
-	Status           int       `xorm:"comment('是否发布 0是1否') SMALLINT(6)"`
15
-	Sort             int       `xorm:"INT(11)"`
16
-	CaseId           string    `xorm:"VARCHAR(64)"`
17
-	OrgId            string    `xorm:"VARCHAR(64)"`
18
-	CreateUser       string    `xorm:"VARCHAR(64)"`
19
-	CreateDate       time.Time `xorm:"DATETIME"`
8
+	ImageId           string    `xorm:"not null pk VARCHAR(64)"`
9
+	LocationId        string    `xorm:"VARCHAR(64)"`
10
+	ImageUrl          string    `xorm:"VARCHAR(128)"`
11
+	ForwardType       string    `xorm:"comment('url:转跳链接,course:转跳课程') CHAR(32)"`
12
+	ForwardUrl        string    `xorm:"VARCHAR(255)"`
13
+	ForwardResourceId string    `xorm:"VARCHAR(64)"`
14
+	Status            int       `xorm:"comment('是否发布 0是1否') SMALLINT(6)"`
15
+	Sort              int       `xorm:"INT(11)"`
16
+	CaseId            string    `xorm:"VARCHAR(64)"`
17
+	OrgId             string    `xorm:"VARCHAR(64)"`
18
+	CreateUser        string    `xorm:"VARCHAR(64)"`
19
+	CreateDate        time.Time `xorm:"DATETIME"`
20
+	Title             string    `xorm:"VARCHAR(50)"`
20
 }
21
 }

+ 1
- 1
models/model/ta_course_orders.go 파일 보기

19
 	JoinNum      int       `xorm:"INT(11)"`
19
 	JoinNum      int       `xorm:"INT(11)"`
20
 	CreateDate   time.Time `xorm:"DATETIME"`
20
 	CreateDate   time.Time `xorm:"DATETIME"`
21
 	Status       int       `xorm:"SMALLINT(6)"`
21
 	Status       int       `xorm:"SMALLINT(6)"`
22
-	PayType      int       `xorm:"SMALLINT(6)"`
22
+	PayType      string    `xorm:"VARCHAR(20)"`
23
 	Address      string    `xorm:"VARCHAR(200)"`
23
 	Address      string    `xorm:"VARCHAR(200)"`
24
 	CourseDate   string    `xorm:"VARCHAR(200)"`
24
 	CourseDate   string    `xorm:"VARCHAR(200)"`
25
 	Remark       string    `xorm:"TEXT"`
25
 	Remark       string    `xorm:"TEXT"`

+ 1
- 0
models/model/ta_customer.go 파일 보기

17
 	RecommendName string    `xorm:"VARCHAR(50)"`
17
 	RecommendName string    `xorm:"VARCHAR(50)"`
18
 	CreateDate    time.Time `xorm:"DATETIME"`
18
 	CreateDate    time.Time `xorm:"DATETIME"`
19
 	Status        int       `xorm:"SMALLINT(6)"`
19
 	Status        int       `xorm:"SMALLINT(6)"`
20
+	UserId        string    `xorm:"VARCHAR(64)"`
20
 }
21
 }

+ 0
- 25
models/model/ta_experience_card.go 파일 보기

1
-package model
2
-
3
-import (
4
-	"time"
5
-)
6
-
7
-type TaExperienceCard struct {
8
-	CardId     string    `xorm:"not null pk VARCHAR(64)"`
9
-	CardTypeId string    `xorm:"VARCHAR(64)"`
10
-	SendType   string    `xorm:"comment('0案场 1渠道') VARCHAR(32)"`
11
-	VideoUrl   string    `xorm:"TEXT"`
12
-	CoverUrl   string    `xorm:"TEXT"`
13
-	Price      float32   `xorm:"FLOAT(64)"`
14
-	StartDate  time.Time `xorm:"DATETIME"`
15
-	EndDate    time.Time `xorm:"DATETIME"`
16
-	TotalCount int       `xorm:"INT(11)"`
17
-	SentCount  int       `xorm:"INT(11)"`
18
-	UsedCount  int       `xorm:"INT(11)"`
19
-	Status     string    `xorm:"comment('private未发布 public发布 over过期') VARCHAR(32)"`
20
-	CaseId     string    `xorm:"VARCHAR(64)"`
21
-	OrgId      string    `xorm:"VARCHAR(64)"`
22
-	CreateDate time.Time `xorm:"DATETIME"`
23
-	CreateUser string    `xorm:"VARCHAR(64)"`
24
-	IsOver     int       `xorm:"TINYINT(1)"`
25
-}

+ 4
- 4
models/model/ta_goods_orders.go 파일 보기

12
 	AreaId     string    `xorm:"VARCHAR(64)"`
12
 	AreaId     string    `xorm:"VARCHAR(64)"`
13
 	AreaName   string    `xorm:"VARCHAR(50)"`
13
 	AreaName   string    `xorm:"VARCHAR(50)"`
14
 	TableId    string    `xorm:"VARCHAR(64)"`
14
 	TableId    string    `xorm:"VARCHAR(64)"`
15
-	TableName  string    `xorm:"VARCHAR(50)"`
15
+	TableNo    string    `xorm:"VARCHAR(50)"`
16
 	Amount     string    `xorm:"DECIMAL(8,2)"`
16
 	Amount     string    `xorm:"DECIMAL(8,2)"`
17
 	CreateDate time.Time `xorm:"DATETIME"`
17
 	CreateDate time.Time `xorm:"DATETIME"`
18
 	Status     int       `xorm:"SMALLINT(6)"`
18
 	Status     int       `xorm:"SMALLINT(6)"`
19
-	PayType    int       `xorm:"comment('vip VIP卡城币抵用
20
-            coupon 优惠券抵用') SMALLINT(6)"`
21
-	UserType     int    `xorm:"SMALLINT(6)"`
19
+	PayType    string    `xorm:"comment('vip VIP卡城币抵用
20
+            coupon 优惠券抵用') VARCHAR(20)"`
21
+	UserType     string `xorm:"VARCHAR(20)"`
22
 	UserId       string `xorm:"VARCHAR(64)"`
22
 	UserId       string `xorm:"VARCHAR(64)"`
23
 	UserName     string `xorm:"VARCHAR(50)"`
23
 	UserName     string `xorm:"VARCHAR(50)"`
24
 	OrdersNum    int    `xorm:"INT(11)"`
24
 	OrdersNum    int    `xorm:"INT(11)"`

+ 4
- 6
models/model/ta_user_mapping.go 파일 보기

1
 package model
1
 package model
2
 
2
 
3
 type TaUserMapping struct {
3
 type TaUserMapping struct {
4
-	MappingId string `xorm:"not null pk VARCHAR(64)"`
5
-	UserId    string `xorm:"VARCHAR(64)"`
6
-	UserType  string `xorm:"comment('customer 为会员
7
-            user 为后台用户') VARCHAR(50)"`
8
-	AccountType string `xorm:"comment('wechat 微信公众号
9
-            mini 小程序') VARCHAR(50)"`
4
+	MappingId   string `xorm:"not null pk VARCHAR(64)"`
5
+	UserId      string `xorm:"VARCHAR(64)"`
6
+	UserType    string `xorm:"comment('customer 为会员 user 为后台用户') VARCHAR(50)"`
7
+	AccountType string `xorm:"comment('wechat 微信公众号 mini 小程序') VARCHAR(50)"`
10
 	Openid      string `xorm:"VARCHAR(200)"`
8
 	Openid      string `xorm:"VARCHAR(200)"`
11
 	Uuid        string `xorm:"VARCHAR(200)"`
9
 	Uuid        string `xorm:"VARCHAR(200)"`
12
 	AccountInfo string `xorm:"TEXT"`
10
 	AccountInfo string `xorm:"TEXT"`

+ 15
- 0
models/sys.go 파일 보기

139
 		Update(&user)
139
 		Update(&user)
140
 	return err
140
 	return err
141
 }
141
 }
142
+
143
+// GetCaseByContext 获取案场
144
+func GetCaseByContext(ctx *utils.Context) (string, error) {
145
+	csRaw := ctx.Get("currentCase")
146
+	if csRaw == nil {
147
+		return "", errors.New("当前人员无案场权限")
148
+	}
149
+
150
+	cs := csRaw.(model.SysUserCase)
151
+	if cs.CaseId == "" || cs.Status == STATUS_DEL {
152
+		return "", errors.New("当前人员无案场权限")
153
+	}
154
+
155
+	return cs.CaseId, nil
156
+}

+ 7
- 7
models/system/role.go 파일 보기

35
 // GetRoleList 根据案场获取角色
35
 // GetRoleList 根据案场获取角色
36
 func (m *RoleDAO) GetRoleList(caseids string, page int, pageSize int) ([]model.SysRole, error) {
36
 func (m *RoleDAO) GetRoleList(caseids string, page int, pageSize int) ([]model.SysRole, error) {
37
 	var roles []model.SysRole
37
 	var roles []model.SysRole
38
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, page*pageSize).Desc("create_date").Find(&roles)
38
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&roles)
39
 	return roles, err
39
 	return roles, err
40
 }
40
 }
41
 
41
 
67
 }
67
 }
68
 
68
 
69
 // AddRole 新增角色
69
 // AddRole 新增角色
70
-func (m *RoleDAO) AddRole(Role model.SysRole) (*model.SysRole, error) {
71
-	Role.RoleId = utils.GetGUID()
72
-	Role.Status = models.STATUS_NORMAL
73
-	Role.CreateDate = time.Now()
74
-	_, err := m.db.Insert(&Role)
75
-	return &Role, err
70
+func (m *RoleDAO) AddRole(role model.SysRole) (*model.SysRole, error) {
71
+	role.RoleId = utils.GetGUID()
72
+	role.Status = models.STATUS_NORMAL
73
+	role.CreateDate = time.Now()
74
+	_, err := m.db.Insert(role)
75
+	return &role, err
76
 }
76
 }
77
 
77
 
78
 // UpdateRole 修改角色
78
 // UpdateRole 修改角色

+ 12
- 5
models/system/user.go 파일 보기

47
 		sql = sql + " and user_id in (select user_id from sys_user_type where type_id = '" + typeid + "')"
47
 		sql = sql + " and user_id in (select user_id from sys_user_type where type_id = '" + typeid + "')"
48
 	}
48
 	}
49
 
49
 
50
-	sql = sql + " order by create_date desc limit " + strconv.Itoa(page*pageSize) + ", " + strconv.Itoa((page+1)*pageSize)
50
+	sql = sql + " order by create_date desc limit " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa((page+1)*pageSize)
51
 
51
 
52
 	err := m.db.Sql(sql).Find(&users)
52
 	err := m.db.Sql(sql).Find(&users)
53
 	return users, err
53
 	return users, err
59
 	// if typeid != "" {
59
 	// if typeid != "" {
60
 	// 	userDAO.In("user_id", builder.Select("user_id").From("sys_user_type").Where(builder.Eq{"type_id": typeid}))
60
 	// 	userDAO.In("user_id", builder.Select("user_id").From("sys_user_type").Where(builder.Eq{"type_id": typeid}))
61
 	// }
61
 	// }
62
-	// err := userDAO.Limit(pageSize, page*pageSize).Desc("create_date").Find(&users)
62
+	// err := userDAO.Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&users)
63
 	// return users, err
63
 	// return users, err
64
 }
64
 }
65
 
65
 
255
 	return err
255
 	return err
256
 }
256
 }
257
 
257
 
258
+// DelUserCase 删除用户的案场信息
259
+func (m *UserDAO) DelUserCase(userid string) error {
260
+	sql := "delete from sys_user_case where is_belong=0 and is_created=0 and user_id='" + userid + "'"
261
+	_, err := m.db.Exec(sql)
262
+	return err
263
+}
264
+
258
 // SaveUserCase 保存用户对应案场信息
265
 // SaveUserCase 保存用户对应案场信息
259
 func (m *UserDAO) SaveUserCase(usercase model.SysUserCase) error {
266
 func (m *UserDAO) SaveUserCase(usercase model.SysUserCase) error {
260
 	usercase.CreateDate = time.Now()
267
 	usercase.CreateDate = time.Now()
261
 	usercase.Status = models.STATUS_NORMAL
268
 	usercase.Status = models.STATUS_NORMAL
262
-	_, err := m.db.Insert(&usercase)
269
+	_, err := m.db.Insert(usercase)
263
 	return err
270
 	return err
264
 }
271
 }
265
 
272
 
297
 // SaveUserMapping 保存用户映射信息
304
 // SaveUserMapping 保存用户映射信息
298
 func (m *UserDAO) SaveUserMapping(usermapping *model.TaUserMapping) error {
305
 func (m *UserDAO) SaveUserMapping(usermapping *model.TaUserMapping) error {
299
 	usermapping.MappingId = utils.GetGUID()
306
 	usermapping.MappingId = utils.GetGUID()
300
-	_, err := m.db.Insert(&usermapping)
307
+	_, err := m.db.Insert(usermapping)
301
 	return err
308
 	return err
302
 }
309
 }
303
 
310
 
326
 // GetUserCustomer 获取我的推荐客户
333
 // GetUserCustomer 获取我的推荐客户
327
 func (m *UserDAO) GetUserCustomer(userid string, page int, pageSize int) ([]model.TaCustomer, error) {
334
 func (m *UserDAO) GetUserCustomer(userid string, page int, pageSize int) ([]model.TaCustomer, error) {
328
 	var customers []model.TaCustomer
335
 	var customers []model.TaCustomer
329
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("recommend_id=?", userid).Limit(pageSize, page*pageSize).Desc("create_date").Find(&customers)
336
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("recommend_id=?", userid).Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&customers)
330
 	return customers, err
337
 	return customers, err
331
 }
338
 }
332
 
339
 

+ 55
- 37
routers/common.go 파일 보기

4
 	"spaceofcheng/services/controllers"
4
 	"spaceofcheng/services/controllers"
5
 	"spaceofcheng/services/controllers/cases"
5
 	"spaceofcheng/services/controllers/cases"
6
 	"spaceofcheng/services/controllers/channel"
6
 	"spaceofcheng/services/controllers/channel"
7
+	"spaceofcheng/services/controllers/course"
7
 	"spaceofcheng/services/controllers/customer"
8
 	"spaceofcheng/services/controllers/customer"
8
 	"spaceofcheng/services/controllers/goods"
9
 	"spaceofcheng/services/controllers/goods"
9
 	"spaceofcheng/services/controllers/message"
10
 	"spaceofcheng/services/controllers/message"
73
 		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "put:SaveCmsCase"),
74
 		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "put:SaveCmsCase"),
74
 		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "delete:DelCmsCase"),
75
 		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "delete:DelCmsCase"),
75
 
76
 
76
-		beego.NSRouter("/caseuser", &cases.CaseController{}, "get:GetCaseUserByCase"),
77
-		beego.NSRouter("/caseuserbytype", &cases.CaseController{}, "get:GetCaseUserByType"),
78
-		beego.NSRouter("/caseuser/:userid", &cases.CaseController{}, "get:GetCaseUserByID"),
79
-		beego.NSRouter("/caseuser", &cases.CaseController{}, "post:SaveCaseUser"),
80
-		beego.NSRouter("/caseuser", &cases.CaseController{}, "put:SaveCaseUser"),
81
-		beego.NSRouter("/caseuser/:userid", &cases.CaseController{}, "delete:DelCaseUser"),
77
+		// tag 标签
78
+		beego.NSRouter("/case/tag", &cases.CaseController{}, "get:GetTagList"),
79
+		beego.NSRouter("/case/tag/:tagid", &cases.CaseController{}, "get:GetTagByID"),
80
+		beego.NSRouter("/case/tag", &cases.CaseController{}, "post:SaveCaseTag"),
81
+		beego.NSRouter("/case/tag", &cases.CaseController{}, "put:SaveCaseTag"),
82
+		beego.NSRouter("/case/tag/:tagid", &cases.CaseController{}, "delete:DelCaseTag"),
83
+
84
+		// caseuser 案场人员
85
+		beego.NSRouter("/case/user", &cases.CaseController{}, "get:GetCaseUserByCase"),
86
+		beego.NSRouter("/case/userbytype", &cases.CaseController{}, "get:GetCaseUserByType"),
87
+		beego.NSRouter("/case/user/:userid", &cases.CaseController{}, "get:GetCaseUserByID"),
88
+		beego.NSRouter("/case/user", &cases.CaseController{}, "post:SaveCaseUser"),
89
+		beego.NSRouter("/case/user", &cases.CaseController{}, "put:SaveCaseUser"),
90
+		beego.NSRouter("/case/user/:userid", &cases.CaseController{}, "delete:DelCaseUser"),
91
+
92
+		// equipment 体检设备
93
+		beego.NSRouter("/case/equipment", &cases.CaseController{}, "get:GetEquipmentList"),
94
+		beego.NSRouter("/case/equipment/:id", &cases.CaseController{}, "get:GetEquipmentByID"),
95
+		beego.NSRouter("/case/equipment", &cases.CaseController{}, "post:SaveCaseEquipment"),
96
+		beego.NSRouter("/case/equipment", &cases.CaseController{}, "put:SaveCaseEquipment"),
97
+		beego.NSRouter("/case/equipment/:id", &cases.CaseController{}, "delete:DelCaseEquipment"),
98
+
99
+		// case 案场
100
+		beego.NSRouter("/case/info", &cases.CaseController{}, "get:GetCaseList"),
101
+		beego.NSRouter("/case/info/:id", &cases.CaseController{}, "get:GetCaseByID"),
102
+		beego.NSRouter("/case/info", &cases.CaseController{}, "post:SaveCase"),
103
+		beego.NSRouter("/case/info", &cases.CaseController{}, "put:SaveCase"),
104
+		beego.NSRouter("/case/info/:id", &cases.CaseController{}, "delete:DelCase"),
105
+
106
+		// casekey 案场钥匙
107
+		beego.NSRouter("/case/key", &cases.CaseController{}, "get:GetKeyList"),
108
+		beego.NSRouter("/case/key", &cases.CaseController{}, "post:AddKeys"),
109
+		beego.NSRouter("/case/unlock/:keyid", &cases.CaseController{}, "put:UnLockKey"),
110
+		beego.NSRouter("/case/key/:id", &cases.CaseController{}, "delete:DelKey"),
111
+
112
+		// casearea 案场区域
113
+		beego.NSRouter("/case/area", &cases.CaseController{}, "get:GetCaseArea"),
114
+		beego.NSRouter("/case/area/:areaid", &cases.CaseController{}, "get:GetCaseAreaByID"),
115
+		beego.NSRouter("/case/area", &cases.CaseController{}, "post:SaveCaseArea"),
116
+		beego.NSRouter("/case/area", &cases.CaseController{}, "put:SaveCaseArea"),
117
+		beego.NSRouter("/case/area/:areaid", &cases.CaseController{}, "delete:DelCaseArea"),
118
+
119
+		// casetable 案场桌位
120
+		beego.NSRouter("/case/table", &cases.CaseController{}, "get:GetCaseTable"),
121
+		beego.NSRouter("/case/table/:tableid", &cases.CaseController{}, "get:GetCaseTableByID"),
122
+		beego.NSRouter("/case/table", &cases.CaseController{}, "post:SaveCaseTable"),
123
+		beego.NSRouter("/case/table", &cases.CaseController{}, "put:SaveCaseTable"),
124
+		beego.NSRouter("/case/table/:tableid", &cases.CaseController{}, "delete:DelCaseTable"),
82
 
125
 
83
-		beego.NSRouter("/equipment", &cases.CaseController{}, "get:GetEquipmentList"),
84
-		beego.NSRouter("/equipment/:id", &cases.CaseController{}, "get:GetEquipmentByID"),
85
-		beego.NSRouter("/equipment", &cases.CaseController{}, "post:SaveCaseEquipment"),
86
-		beego.NSRouter("/equipment", &cases.CaseController{}, "put:SaveCaseEquipment"),
87
-		beego.NSRouter("/equipment/:id", &cases.CaseController{}, "delete:DelCaseEquipment"),
88
-
89
-		// 渠道
90
 		beego.NSRouter("/channel", &channel.ChannelController{}, "get:GetChannelList"),
126
 		beego.NSRouter("/channel", &channel.ChannelController{}, "get:GetChannelList"),
91
 		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "get:GetChannelById"),
127
 		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "get:GetChannelById"),
92
 		beego.NSRouter("/channel", &channel.ChannelController{}, "post:SaveChannel"),
128
 		beego.NSRouter("/channel", &channel.ChannelController{}, "post:SaveChannel"),
93
 		beego.NSRouter("/channel", &channel.ChannelController{}, "put:SaveChannel"),
129
 		beego.NSRouter("/channel", &channel.ChannelController{}, "put:SaveChannel"),
94
 		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "delete:DeleteChannel"),
130
 		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "delete:DeleteChannel"),
95
 
131
 
96
-		beego.NSRouter("/case", &cases.CaseController{}, "get:GetCaseList"),
97
-		beego.NSRouter("/case/:id", &cases.CaseController{}, "get:GetCaseByID"),
98
-		beego.NSRouter("/case", &cases.CaseController{}, "post:SaveCase"),
99
-		beego.NSRouter("/case", &cases.CaseController{}, "put:SaveCase"),
100
-		beego.NSRouter("/case/:id", &cases.CaseController{}, "delete:DelCase"),
101
-
102
-		beego.NSRouter("/key", &cases.CaseController{}, "get:GetKeyList"),
103
-		beego.NSRouter("/key", &cases.CaseController{}, "post:AddKeys"),
104
-		beego.NSRouter("/unlock/:keyid", &cases.CaseController{}, "put:UnLockKey"),
105
-		beego.NSRouter("/key/:id", &cases.CaseController{}, "delete:DelKey"),
106
-
107
-		beego.NSRouter("/area", &cases.CaseController{}, "get:GetCaseArea"),
108
-		beego.NSRouter("/area/:areaid", &cases.CaseController{}, "get:GetCaseAreaByID"),
109
-		beego.NSRouter("/area", &cases.CaseController{}, "post:SaveCaseArea"),
110
-		beego.NSRouter("/area", &cases.CaseController{}, "put:SaveCaseArea"),
111
-		beego.NSRouter("/area/:areaid", &cases.CaseController{}, "delete:DelCaseArea"),
112
-
113
-		beego.NSRouter("/table", &cases.CaseController{}, "get:GetCaseTable"),
114
-		beego.NSRouter("/table/:tableid", &cases.CaseController{}, "get:GetCaseTableByID"),
115
-		beego.NSRouter("/table", &cases.CaseController{}, "post:SaveCaseTable"),
116
-		beego.NSRouter("/table", &cases.CaseController{}, "put:SaveCaseTable"),
117
-		beego.NSRouter("/table/:tableid", &cases.CaseController{}, "delete:DelCaseTable"),
118
-
132
+		// role 角色
119
 		beego.NSRouter("/role", &system.RoleController{}, "get:GetRoleList"),
133
 		beego.NSRouter("/role", &system.RoleController{}, "get:GetRoleList"),
120
 		beego.NSRouter("/role/:roleid", &system.RoleController{}, "get:GetRoleByID"),
134
 		beego.NSRouter("/role/:roleid", &system.RoleController{}, "get:GetRoleByID"),
121
 		beego.NSRouter("/role", &system.RoleController{}, "post:SaveCaseRole"),
135
 		beego.NSRouter("/role", &system.RoleController{}, "post:SaveCaseRole"),
122
 		beego.NSRouter("/role", &system.RoleController{}, "put:SaveCaseRole"),
136
 		beego.NSRouter("/role", &system.RoleController{}, "put:SaveCaseRole"),
123
 		beego.NSRouter("/role/:roleid", &system.RoleController{}, "delete:DelCaseRole"),
137
 		beego.NSRouter("/role/:roleid", &system.RoleController{}, "delete:DelCaseRole"),
124
 
138
 
139
+		// course 课程
140
+		beego.NSRouter("/course/taglist", &course.CourseController{}, "get:GetCourseTagsByPage"),
141
+		beego.NSRouter("/course/tag", &course.CourseController{}, "get:GetCourseTags"),
142
+
125
 		// 文件
143
 		// 文件
126
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
144
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
127
 
145
 
129
 		beego.NSRouter("/customer", &customer.CustomerController{}, "get:CustWXList"),
147
 		beego.NSRouter("/customer", &customer.CustomerController{}, "get:CustWXList"),
130
 
148
 
131
 		// 系统相关
149
 		// 系统相关
132
-		beego.NSRouter("/system/env", &user.UserController{}, "get:GetEnvVars"),
150
+		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
133
 	)
151
 	)
134
 }
152
 }

+ 1
- 1
routers/guest.go 파일 보기

20
 		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
20
 		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
21
 
21
 
22
 		// 案场
22
 		// 案场
23
-		beego.NSRouter("/case/area", &cases.CaseController{}, "get:GetAreaByCase"),
23
+		beego.NSRouter("/casearea", &cases.CaseController{}, "get:GetAreaByCase"),
24
 
24
 
25
 		// 验证码 获取, 校验
25
 		// 验证码 获取, 校验
26
 		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),
26
 		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),

+ 5
- 5
routers/wechat.go 파일 보기

36
 		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
36
 		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
37
 
37
 
38
 		// cms 位置
38
 		// cms 位置
39
-		beego.NSRouter("/cms/location", &message.MessageController{}, "get:GetLocations"),
40
-		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "get:GetLocationById"),
41
-		beego.NSRouter("/cms/location", &message.MessageController{}, "post:SaveLocation"),
42
-		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "put:SaveLocation"),
43
-		beego.NSRouter("/cms/location/:locationid", &message.MessageController{}, "delete:DelLocation"),
39
+		beego.NSRouter("/cms/area", &message.MessageController{}, "get:GetLocations"),
40
+		beego.NSRouter("/cms/area/:locationid", &message.MessageController{}, "get:GetLocationById"),
41
+		beego.NSRouter("/cms/area", &message.MessageController{}, "post:SaveLocation"),
42
+		beego.NSRouter("/cms/area/:locationid", &message.MessageController{}, "put:SaveLocation"),
43
+		beego.NSRouter("/cms/area/:locationid", &message.MessageController{}, "delete:DelLocation"),
44
 
44
 
45
 		// cms
45
 		// cms
46
 		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoList"),
46
 		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoList"),

+ 14
- 0
service/cases/area.go 파일 보기

4
 	"spaceofcheng/services/models/cases"
4
 	"spaceofcheng/services/models/cases"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/service"
7
+	"spaceofcheng/services/utils"
8
+
9
+	"github.com/astaxie/beego"
7
 )
10
 )
8
 
11
 
9
 // GetCaseArea 获取案场区域
12
 // GetCaseArea 获取案场区域
11
 	if pageSize == 0 {
14
 	if pageSize == 0 {
12
 		pageSize = service.PAGENUM
15
 		pageSize = service.PAGENUM
13
 	}
16
 	}
17
+	if page == 0 {
18
+		page = 1
19
+	}
14
 	areas, err := s.dao.GetCaseArea(caseids, page, pageSize)
20
 	areas, err := s.dao.GetCaseArea(caseids, page, pageSize)
15
 	if err != nil {
21
 	if err != nil {
22
+		beego.Error(err)
16
 		return nil, err
23
 		return nil, err
17
 	}
24
 	}
18
 	total, err := s.dao.GetCaseAreaCount(caseids)
25
 	total, err := s.dao.GetCaseAreaCount(caseids)
19
 	if err != nil {
26
 	if err != nil {
27
+		beego.Error(err)
20
 		return nil, err
28
 		return nil, err
21
 	}
29
 	}
22
 
30
 
37
 // SaveCaseArea 保存区域
45
 // SaveCaseArea 保存区域
38
 func (s *CaseServ) SaveCaseArea(area model.SysCaseArea) (*model.SysCaseArea, error) {
46
 func (s *CaseServ) SaveCaseArea(area model.SysCaseArea) (*model.SysCaseArea, error) {
39
 	var err error
47
 	var err error
48
+	if area.AreaName == "" {
49
+		return nil, utils.LogError("区域名称不能为空!")
50
+	}
51
+
40
 	if area.AreaId == "" {
52
 	if area.AreaId == "" {
41
 		_, err = s.dao.AddCaseArea(&area)
53
 		_, err = s.dao.AddCaseArea(&area)
42
 	} else {
54
 	} else {
55
 func (s *CaseServ) GetAreaByCase(caseid string) ([]cases.AreaInfo, error) {
67
 func (s *CaseServ) GetAreaByCase(caseid string) ([]cases.AreaInfo, error) {
56
 	areas, err := s.dao.GetCaseAreaByCase(caseid)
68
 	areas, err := s.dao.GetCaseAreaByCase(caseid)
57
 	if err != nil {
69
 	if err != nil {
70
+		beego.Error(err)
58
 		return nil, err
71
 		return nil, err
59
 	}
72
 	}
60
 	for index, area := range areas {
73
 	for index, area := range areas {
61
 		tables, err := s.dao.GetCaseTableByAreaID(area.AreaId)
74
 		tables, err := s.dao.GetCaseTableByAreaID(area.AreaId)
62
 		if err != nil {
75
 		if err != nil {
76
+			beego.Error(err)
63
 			return nil, err
77
 			return nil, err
64
 		}
78
 		}
65
 		areas[index].Tables = tables
79
 		areas[index].Tables = tables

+ 33
- 4
service/cases/cases.go 파일 보기

3
 import (
3
 import (
4
 	"spaceofcheng/services/models/cases"
4
 	"spaceofcheng/services/models/cases"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/models/system"
6
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/utils"
8
 	"spaceofcheng/services/utils"
9
+
10
+	"github.com/astaxie/beego"
8
 )
11
 )
9
 
12
 
10
 // CaseServ 系统处理
13
 // CaseServ 系统处理
11
 type CaseServ struct {
14
 type CaseServ struct {
12
-	ctx *utils.Context
13
-	dao *cases.CaseDAO
15
+	ctx     *utils.Context
16
+	dao     *cases.CaseDAO
17
+	userdao *system.UserDAO
14
 }
18
 }
15
 
19
 
16
 // NewCaseServ 初始化
20
 // NewCaseServ 初始化
17
 func NewCaseServ(ctx *utils.Context) *CaseServ {
21
 func NewCaseServ(ctx *utils.Context) *CaseServ {
18
 	return &CaseServ{
22
 	return &CaseServ{
19
-		ctx: ctx,
20
-		dao: cases.NewCaseDAO(ctx),
23
+		ctx:     ctx,
24
+		dao:     cases.NewCaseDAO(ctx),
25
+		userdao: system.NewUserDAO(ctx),
21
 	}
26
 	}
22
 }
27
 }
23
 
28
 
26
 	if pageSize == 0 {
31
 	if pageSize == 0 {
27
 		pageSize = service.PAGENUM
32
 		pageSize = service.PAGENUM
28
 	}
33
 	}
34
+	if page == 0 {
35
+		page = 1
36
+	}
29
 	cases, err := s.dao.GetCaseList(caseids, casename, page, pageSize)
37
 	cases, err := s.dao.GetCaseList(caseids, casename, page, pageSize)
30
 	if err != nil {
38
 	if err != nil {
39
+		beego.Error(err)
31
 		return nil, err
40
 		return nil, err
32
 	}
41
 	}
33
 	total, err := s.dao.GetCaseCount(caseids, casename)
42
 	total, err := s.dao.GetCaseCount(caseids, casename)
34
 	if err != nil {
43
 	if err != nil {
44
+		beego.Error(err)
35
 		return nil, err
45
 		return nil, err
36
 	}
46
 	}
37
 
47
 
53
 func (s *CaseServ) SaveCase(caseinfo model.SysCase) (*model.SysCase, error) {
63
 func (s *CaseServ) SaveCase(caseinfo model.SysCase) (*model.SysCase, error) {
54
 	var newInfo *model.SysCase
64
 	var newInfo *model.SysCase
55
 	var err error
65
 	var err error
66
+	if caseinfo.CaseName == "" {
67
+		return nil, utils.LogError("案场名称不能为空!")
68
+	}
69
+	if caseinfo.Coordinate == "" {
70
+		return nil, utils.LogError("案场经纬度不能为空!")
71
+	}
72
+
56
 	if caseinfo.CaseId == "" {
73
 	if caseinfo.CaseId == "" {
57
 		newInfo, err = s.dao.AddCase(caseinfo)
74
 		newInfo, err = s.dao.AddCase(caseinfo)
75
+		if err != nil {
76
+			return nil, err
77
+		}
78
+		// 新增之后保存用户对应案场
79
+		var userCase = model.SysUserCase{
80
+			CaseId:    newInfo.CaseId,
81
+			UserId:    newInfo.CreateUser,
82
+			CaseName:  newInfo.CaseName,
83
+			IsBelong:  0,
84
+			IsCreated: 1,
85
+		}
86
+		err = s.userdao.SaveUserCase(userCase)
58
 	} else {
87
 	} else {
59
 		err = s.dao.UpdateCase(caseinfo)
88
 		err = s.dao.UpdateCase(caseinfo)
60
 		newInfo = &caseinfo
89
 		newInfo = &caseinfo

+ 13
- 1
service/cases/caseuser.go 파일 보기

1
 package cases
1
 package cases
2
 
2
 
3
-import "spaceofcheng/services/models/model"
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+	"spaceofcheng/services/utils"
6
+)
4
 
7
 
5
 // GetCaseUserByCase 根据案场id获取案场相关人员信息
8
 // GetCaseUserByCase 根据案场id获取案场相关人员信息
6
 func (s *CaseServ) GetCaseUserByCase(caseid string) ([]model.SysCaseUser, error) {
9
 func (s *CaseServ) GetCaseUserByCase(caseid string) ([]model.SysCaseUser, error) {
24
 func (s *CaseServ) SaveCaseUser(caseuser model.SysCaseUser) (*model.SysCaseUser, error) {
27
 func (s *CaseServ) SaveCaseUser(caseuser model.SysCaseUser) (*model.SysCaseUser, error) {
25
 	var newInfo *model.SysCaseUser
28
 	var newInfo *model.SysCaseUser
26
 	var err error
29
 	var err error
30
+	if caseuser.UserName == "" {
31
+		return nil, utils.LogError("人员名称不能为空!")
32
+	}
33
+	if caseuser.UserType == "" {
34
+		return nil, utils.LogError("人员类型不能为空!")
35
+	}
36
+	if caseuser.Tel == "" {
37
+		return nil, utils.LogError("人员电话不能为空!")
38
+	}
27
 	if caseuser.CaseUserId == "" {
39
 	if caseuser.CaseUserId == "" {
28
 		newInfo, err = s.dao.AddCaseUser(caseuser)
40
 		newInfo, err = s.dao.AddCaseUser(caseuser)
29
 	} else {
41
 	} else {

+ 11
- 0
service/cases/equipment.go 파일 보기

3
 import (
3
 import (
4
 	"spaceofcheng/services/models/model"
4
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/service"
5
 	"spaceofcheng/services/service"
6
+	"spaceofcheng/services/utils"
7
+
8
+	"github.com/astaxie/beego"
6
 )
9
 )
7
 
10
 
8
 // GetCaseEquipment 获取体检设备
11
 // GetCaseEquipment 获取体检设备
10
 	if pageSize == 0 {
13
 	if pageSize == 0 {
11
 		pageSize = service.PAGENUM
14
 		pageSize = service.PAGENUM
12
 	}
15
 	}
16
+	if page == 0 {
17
+		page = 1
18
+	}
13
 	specs, err := s.dao.GetEquipmentList(caseids, page, pageSize)
19
 	specs, err := s.dao.GetEquipmentList(caseids, page, pageSize)
14
 	if err != nil {
20
 	if err != nil {
21
+		beego.Error(err)
15
 		return nil, err
22
 		return nil, err
16
 	}
23
 	}
17
 	total, err := s.dao.GetEquipmentCount(caseids)
24
 	total, err := s.dao.GetEquipmentCount(caseids)
18
 	if err != nil {
25
 	if err != nil {
26
+		beego.Error(err)
19
 		return nil, err
27
 		return nil, err
20
 	}
28
 	}
21
 
29
 
36
 // SaveCaseEquipment 保存体检设备
44
 // SaveCaseEquipment 保存体检设备
37
 func (s *CaseServ) SaveCaseEquipment(equipment model.SysCaseEquipment) (*model.SysCaseEquipment, error) {
45
 func (s *CaseServ) SaveCaseEquipment(equipment model.SysCaseEquipment) (*model.SysCaseEquipment, error) {
38
 	var err error
46
 	var err error
47
+	if equipment.Name == "" {
48
+		return nil, utils.LogError("体检设备名称不能为空!")
49
+	}
39
 	if equipment.EquipmentId == "" {
50
 	if equipment.EquipmentId == "" {
40
 		_, err = s.dao.AddCaseEquipment(&equipment)
51
 		_, err = s.dao.AddCaseEquipment(&equipment)
41
 	} else {
52
 	} else {

+ 21
- 6
service/cases/key.go 파일 보기

1
 package cases
1
 package cases
2
 
2
 
3
 import (
3
 import (
4
+	"spaceofcheng/services/models/cases"
4
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/utils"
7
 	"spaceofcheng/services/utils"
7
 	"strconv"
8
 	"strconv"
9
+	"time"
10
+
11
+	"github.com/astaxie/beego"
8
 )
12
 )
9
 
13
 
10
 // GetKeysByCase 根据案场获取钥匙信息
14
 // GetKeysByCase 根据案场获取钥匙信息
16
 			isdict = true
20
 			isdict = true
17
 		}
21
 		}
18
 	}
22
 	}
23
+
19
 	if !isdict {
24
 	if !isdict {
20
 		return nil, utils.LogError("您没有该案场的权限!")
25
 		return nil, utils.LogError("您没有该案场的权限!")
21
 	}
26
 	}
23
 	if pageSize == 0 {
28
 	if pageSize == 0 {
24
 		pageSize = service.PAGENUM
29
 		pageSize = service.PAGENUM
25
 	}
30
 	}
31
+
26
 	keys, err := s.dao.GetKeysByCase(caseid, num, page, pageSize)
32
 	keys, err := s.dao.GetKeysByCase(caseid, num, page, pageSize)
27
 	if err != nil {
33
 	if err != nil {
34
+		beego.Error(err)
28
 		return nil, err
35
 		return nil, err
29
 	}
36
 	}
30
-	total, err := s.dao.GetCaseCount(caseid, num)
37
+
38
+	total, err := s.dao.GetKeysCountByCase(caseid, num)
31
 	if err != nil {
39
 	if err != nil {
40
+		beego.Error(err)
32
 		return nil, err
41
 		return nil, err
33
 	}
42
 	}
34
 
43
 
35
 	for index, key := range keys {
44
 	for index, key := range keys {
36
 		use, err := s.dao.GetCurrentKey(key.KeyId)
45
 		use, err := s.dao.GetCurrentKey(key.KeyId)
37
 		if err != nil {
46
 		if err != nil {
47
+			beego.Error(err)
38
 			return nil, err
48
 			return nil, err
39
 		}
49
 		}
40
-		keys[index].CustomerId = use.CustomerId
41
-		keys[index].CustomerName = use.CustomerName
50
+		if use != nil {
51
+			keys[index].CustomerId = use.CustomerId
52
+			keys[index].CustomerName = use.CustomerName
53
+		}
42
 	}
54
 	}
43
 
55
 
44
 	return map[string]interface{}{
56
 	return map[string]interface{}{
57
 
69
 
58
 	for i := beginnum; i <= endnum; i++ {
70
 	for i := beginnum; i <= endnum; i++ {
59
 		key := model.TaCaseKey{
71
 		key := model.TaCaseKey{
60
-			OrgId:   orgid,
61
-			CaseId:  caseid,
62
-			LockNum: strconv.Itoa(i),
72
+			OrgId:      orgid,
73
+			CaseId:     caseid,
74
+			LockNum:    strconv.Itoa(i),
75
+			KeyId:      utils.GetGUID(),
76
+			Status:     cases.STATUS_UNLOCK,
77
+			CreateDate: time.Now(),
63
 		}
78
 		}
64
 		_, err := s.dao.AddKey(key)
79
 		_, err := s.dao.AddKey(key)
65
 		if err != nil {
80
 		if err != nil {

+ 11
- 0
service/cases/table.go 파일 보기

3
 import (
3
 import (
4
 	"spaceofcheng/services/models/model"
4
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/service"
5
 	"spaceofcheng/services/service"
6
+	"spaceofcheng/services/utils"
7
+
8
+	"github.com/astaxie/beego"
6
 )
9
 )
7
 
10
 
8
 // GetCaseTable 获取案场桌位
11
 // GetCaseTable 获取案场桌位
10
 	if pageSize == 0 {
13
 	if pageSize == 0 {
11
 		pageSize = service.PAGENUM
14
 		pageSize = service.PAGENUM
12
 	}
15
 	}
16
+	if page == 0 {
17
+		page = 1
18
+	}
13
 	areas, err := s.dao.GetCaseTable(caseids, page, pageSize)
19
 	areas, err := s.dao.GetCaseTable(caseids, page, pageSize)
14
 	if err != nil {
20
 	if err != nil {
21
+		beego.Error(err)
15
 		return nil, err
22
 		return nil, err
16
 	}
23
 	}
17
 	total, err := s.dao.GetCaseTableCount(caseids)
24
 	total, err := s.dao.GetCaseTableCount(caseids)
18
 	if err != nil {
25
 	if err != nil {
26
+		beego.Error(err)
19
 		return nil, err
27
 		return nil, err
20
 	}
28
 	}
21
 
29
 
36
 // SaveCaseTable 保存桌位
44
 // SaveCaseTable 保存桌位
37
 func (s *CaseServ) SaveCaseTable(table model.SysCaseTable) (*model.SysCaseTable, error) {
45
 func (s *CaseServ) SaveCaseTable(table model.SysCaseTable) (*model.SysCaseTable, error) {
38
 	var err error
46
 	var err error
47
+	if table.TableNo == "" {
48
+		return nil, utils.LogError("桌位名称不能为空")
49
+	}
39
 	if table.TableId == "" {
50
 	if table.TableId == "" {
40
 		_, err = s.dao.AddCaseTable(&table)
51
 		_, err = s.dao.AddCaseTable(&table)
41
 	} else {
52
 	} else {

+ 19
- 0
service/cases/tag.go 파일 보기

4
 	"spaceofcheng/services/models/cases"
4
 	"spaceofcheng/services/models/cases"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/service"
7
+	"spaceofcheng/services/utils"
8
+
9
+	"github.com/astaxie/beego"
7
 )
10
 )
8
 
11
 
9
 // GetTagList 获取tag列表
12
 // GetTagList 获取tag列表
11
 	if pageSize == 0 {
14
 	if pageSize == 0 {
12
 		pageSize = service.PAGENUM
15
 		pageSize = service.PAGENUM
13
 	}
16
 	}
17
+	if page == 0 {
18
+		page = 1
19
+	}
14
 	tags, err := s.dao.GetTagList(caseids, page, pageSize)
20
 	tags, err := s.dao.GetTagList(caseids, page, pageSize)
15
 	if err != nil {
21
 	if err != nil {
22
+		beego.Error(err)
16
 		return nil, err
23
 		return nil, err
17
 	}
24
 	}
18
 	total, err := s.dao.GetTagCount(caseids)
25
 	total, err := s.dao.GetTagCount(caseids)
19
 	if err != nil {
26
 	if err != nil {
27
+		beego.Error(err)
20
 		return nil, err
28
 		return nil, err
21
 	}
29
 	}
22
 
30
 
32
 func (s *CaseServ) GetTagByID(tagid string) (*cases.Tag, error) {
40
 func (s *CaseServ) GetTagByID(tagid string) (*cases.Tag, error) {
33
 	tag, err := s.dao.GetTagByID(tagid)
41
 	tag, err := s.dao.GetTagByID(tagid)
34
 	if err != nil {
42
 	if err != nil {
43
+		beego.Error(err)
35
 		return nil, err
44
 		return nil, err
36
 	}
45
 	}
37
 	if tag != nil {
46
 	if tag != nil {
38
 		tagcases, err := s.dao.GetTagCaseByTagID(tagid)
47
 		tagcases, err := s.dao.GetTagCaseByTagID(tagid)
39
 		if err != nil {
48
 		if err != nil {
49
+			beego.Error(err)
40
 			return nil, err
50
 			return nil, err
41
 		}
51
 		}
42
 		tag.TagCases = tagcases
52
 		tag.TagCases = tagcases
48
 func (s *CaseServ) SaveTag(tag model.SysTag, caseids string) (*model.SysTag, error) {
58
 func (s *CaseServ) SaveTag(tag model.SysTag, caseids string) (*model.SysTag, error) {
49
 	var newInfo *model.SysTag
59
 	var newInfo *model.SysTag
50
 	var err error
60
 	var err error
61
+	if tag.TagName == "" {
62
+		return nil, utils.LogError("标签名称不能为空!")
63
+	}
64
+	if caseids == "" {
65
+		return nil, utils.LogError("案场不能为空!")
66
+	}
51
 	if tag.TagId == "" {
67
 	if tag.TagId == "" {
52
 		newInfo, err = s.dao.AddTag(tag)
68
 		newInfo, err = s.dao.AddTag(tag)
53
 	} else {
69
 	} else {
55
 		newInfo = &tag
71
 		newInfo = &tag
56
 	}
72
 	}
57
 	if err != nil {
73
 	if err != nil {
74
+		beego.Error(err)
58
 		return nil, err
75
 		return nil, err
59
 	}
76
 	}
60
 	err = s.dao.DelTagCase(newInfo.TagId)
77
 	err = s.dao.DelTagCase(newInfo.TagId)
61
 	if err != nil {
78
 	if err != nil {
79
+		beego.Error(err)
62
 		return nil, err
80
 		return nil, err
63
 	}
81
 	}
64
 	err = s.dao.SaveTagCase(newInfo.TagId, caseids)
82
 	err = s.dao.SaveTagCase(newInfo.TagId, caseids)
65
 	if err != nil {
83
 	if err != nil {
84
+		beego.Error(err)
66
 		return nil, err
85
 		return nil, err
67
 	}
86
 	}
68
 	return newInfo, err
87
 	return newInfo, err

+ 20
- 0
service/course/course.go 파일 보기

1
+package course
2
+
3
+import (
4
+	"spaceofcheng/services/models/course"
5
+	"spaceofcheng/services/utils"
6
+)
7
+
8
+// CourseServ 系统处理
9
+type CourseServ struct {
10
+	ctx *utils.Context
11
+	dao *course.CourseDAO
12
+}
13
+
14
+// NewCourseServ 初始化
15
+func NewCourseServ(ctx *utils.Context) *CourseServ {
16
+	return &CourseServ{
17
+		ctx: ctx,
18
+		dao: course.NewCourseDAO(ctx),
19
+	}
20
+}

+ 41
- 0
service/course/tag.go 파일 보기

1
+package course
2
+
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+	"spaceofcheng/services/service"
6
+
7
+	"github.com/astaxie/beego"
8
+)
9
+
10
+// GetTagsList 获取标签列表
11
+func (s *CourseServ) GetTagsList(orgid string, page, pageSize int) (map[string]interface{}, error) {
12
+	if pageSize == 0 {
13
+		pageSize = service.PAGENUM
14
+	}
15
+	if page == 0 {
16
+		page = 1
17
+	}
18
+	tags, err := s.dao.GetTagsList(orgid, page, pageSize)
19
+	if err != nil {
20
+		beego.Error(err)
21
+		return nil, err
22
+	}
23
+	total, err := s.dao.GetTagsCount(orgid)
24
+	if err != nil {
25
+		beego.Error(err)
26
+		return nil, err
27
+	}
28
+
29
+	return map[string]interface{}{
30
+		"list":     tags,
31
+		"pagesize": pageSize,
32
+		"pagenum":  total,
33
+		"page":     page,
34
+	}, err
35
+}
36
+
37
+// GetCourseTags 获取课程标签
38
+func (s *CourseServ) GetCourseTags(orgid string) ([]model.TdCourseTag, error) {
39
+	tags, err := s.dao.GetTagsList(orgid, 0, 10000)
40
+	return tags, err
41
+}

+ 13
- 0
service/customer/customer.go 파일 보기

9
 	"spaceofcheng/services/service/events"
9
 	"spaceofcheng/services/service/events"
10
 	"spaceofcheng/services/utils"
10
 	"spaceofcheng/services/utils"
11
 	"strconv"
11
 	"strconv"
12
+
13
+	"github.com/astaxie/beego"
12
 )
14
 )
13
 
15
 
14
 // CustomerServ 系统处理
16
 // CustomerServ 系统处理
36
 func (s *CustomerServ) GetCustWithWXByID(custID string) (*customer.CustWithWX, error) {
38
 func (s *CustomerServ) GetCustWithWXByID(custID string) (*customer.CustWithWX, error) {
37
 	cust, err := s.dao.GetCustWithWXByID(custID)
39
 	cust, err := s.dao.GetCustWithWXByID(custID)
38
 	if err != nil {
40
 	if err != nil {
41
+		beego.Error(err)
39
 		return nil, err
42
 		return nil, err
40
 	}
43
 	}
41
 
44
 
50
 func (s *CustomerServ) GetCustUserByID(userID string) (*UserProfile, error) {
53
 func (s *CustomerServ) GetCustUserByID(userID string) (*UserProfile, error) {
51
 	user, err := s.dao.GetUserByID(userID)
54
 	user, err := s.dao.GetUserByID(userID)
52
 	if err != nil {
55
 	if err != nil {
56
+		beego.Error(err)
53
 		return nil, err
57
 		return nil, err
54
 	}
58
 	}
55
 
59
 
75
 func (s *CustomerServ) BindWechatUser(userMap *model.TaUserMapping, phone string) (*model.TaCustomer, error) {
79
 func (s *CustomerServ) BindWechatUser(userMap *model.TaUserMapping, phone string) (*model.TaCustomer, error) {
76
 	user, err := s.dao.GetUserByPhone(phone)
80
 	user, err := s.dao.GetUserByPhone(phone)
77
 	if err != nil {
81
 	if err != nil {
82
+		beego.Error(err)
78
 		return nil, err
83
 		return nil, err
79
 	}
84
 	}
80
 
85
 
84
 
89
 
85
 	cust, err := s.dao.GetCustomerByPhone(phone)
90
 	cust, err := s.dao.GetCustomerByPhone(phone)
86
 	if err != nil {
91
 	if err != nil {
92
+		beego.Error(err)
87
 		return nil, err
93
 		return nil, err
88
 	}
94
 	}
89
 
95
 
96
 		wxInfo := wxInfoRaw.(map[string]interface{})
102
 		wxInfo := wxInfoRaw.(map[string]interface{})
97
 		newCust, err := s.SaveNewCustomer(wxInfo, "", "", user.UserId)
103
 		newCust, err := s.SaveNewCustomer(wxInfo, "", "", user.UserId)
98
 		if err != nil {
104
 		if err != nil {
105
+			beego.Error(err)
99
 			return nil, err
106
 			return nil, err
100
 		}
107
 		}
101
 		cust = newCust
108
 		cust = newCust
126
 func (s *CustomerServ) BindWechatCust(userMap *model.TaUserMapping, phone, caseID, userID string) (*model.TaCustomer, error) {
133
 func (s *CustomerServ) BindWechatCust(userMap *model.TaUserMapping, phone, caseID, userID string) (*model.TaCustomer, error) {
127
 	cust, err := s.dao.GetCustomerByPhone(phone)
134
 	cust, err := s.dao.GetCustomerByPhone(phone)
128
 	if err != nil {
135
 	if err != nil {
136
+		beego.Error(err)
129
 		return nil, err
137
 		return nil, err
130
 	}
138
 	}
131
 
139
 
139
 		wxInfo := wxInfoRaw.(map[string]interface{})
147
 		wxInfo := wxInfoRaw.(map[string]interface{})
140
 		newCust, err := s.SaveNewCustomer(wxInfo, caseID, userID, "")
148
 		newCust, err := s.SaveNewCustomer(wxInfo, caseID, userID, "")
141
 		if err != nil {
149
 		if err != nil {
150
+			beego.Error(err)
142
 			return nil, err
151
 			return nil, err
143
 		}
152
 		}
144
 
153
 
193
 	if caseID != "" {
202
 	if caseID != "" {
194
 		cs, err := s.casedao.GetCaseByID(caseID)
203
 		cs, err := s.casedao.GetCaseByID(caseID)
195
 		if err != nil {
204
 		if err != nil {
205
+			beego.Error(err)
196
 			return nil, err
206
 			return nil, err
197
 		}
207
 		}
198
 
208
 
208
 	if arID != "" {
218
 	if arID != "" {
209
 		ar, err := s.dao.GetUserByID(arID)
219
 		ar, err := s.dao.GetUserByID(arID)
210
 		if err != nil {
220
 		if err != nil {
221
+			beego.Error(err)
211
 			return nil, err
222
 			return nil, err
212
 		}
223
 		}
213
 
224
 
224
 	if userID != "" {
235
 	if userID != "" {
225
 		user, err := s.dao.GetUserByID(userID)
236
 		user, err := s.dao.GetUserByID(userID)
226
 		if err != nil {
237
 		if err != nil {
238
+			beego.Error(err)
227
 			return nil, err
239
 			return nil, err
228
 		}
240
 		}
229
 
241
 
234
 
246
 
235
 	if err := s.dao.SaveCustomer(&cust); err != nil {
247
 	if err := s.dao.SaveCustomer(&cust); err != nil {
236
 		utils.LogError("更新客户信息失败: " + err.Error())
248
 		utils.LogError("更新客户信息失败: " + err.Error())
249
+		beego.Error(err)
237
 		return nil, errors.New("更新客户信息失败")
250
 		return nil, errors.New("更新客户信息失败")
238
 	}
251
 	}
239
 
252
 

+ 15
- 0
service/goods/spec.go 파일 보기

1
 package goods
1
 package goods
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
4
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/service"
7
+
8
+	"github.com/astaxie/beego"
6
 )
9
 )
7
 
10
 
8
 // GetGoodsSpec 获取商品规格
11
 // GetGoodsSpec 获取商品规格
10
 	if pageSize == 0 {
13
 	if pageSize == 0 {
11
 		pageSize = service.PAGENUM
14
 		pageSize = service.PAGENUM
12
 	}
15
 	}
16
+	if page == 0 {
17
+		page = 1
18
+	}
13
 	specs, err := s.dao.GetGoodsSpec(caseids, page, pageSize)
19
 	specs, err := s.dao.GetGoodsSpec(caseids, page, pageSize)
14
 	if err != nil {
20
 	if err != nil {
21
+		beego.Error(err)
15
 		return nil, err
22
 		return nil, err
16
 	}
23
 	}
17
 	total, err := s.dao.GetGoodsSpecCount(caseids)
24
 	total, err := s.dao.GetGoodsSpecCount(caseids)
18
 	if err != nil {
25
 	if err != nil {
26
+		beego.Error(err)
19
 		return nil, err
27
 		return nil, err
20
 	}
28
 	}
21
 
29
 
35
 
43
 
36
 // SaveGoodsSpec 保存商品类型
44
 // SaveGoodsSpec 保存商品类型
37
 func (s *GoodsServ) SaveGoodsSpec(goodsSpec model.TdSpec) (*model.TdSpec, error) {
45
 func (s *GoodsServ) SaveGoodsSpec(goodsSpec model.TdSpec) (*model.TdSpec, error) {
46
+	if goodsSpec.SpecName == "" {
47
+		return nil, errors.New("规格名称不能为空!")
48
+	}
49
+
50
+	if goodsSpec.CaseId == "" {
51
+		return nil, errors.New("案场不能为空!")
52
+	}
38
 	var err error
53
 	var err error
39
 	if goodsSpec.SpecId == "" {
54
 	if goodsSpec.SpecId == "" {
40
 		_, err = s.dao.AddGoodsSpec(&goodsSpec)
55
 		_, err = s.dao.AddGoodsSpec(&goodsSpec)

+ 16
- 0
service/goods/type.go 파일 보기

1
 package goods
1
 package goods
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
4
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/service"
7
+
8
+	"github.com/astaxie/beego"
6
 )
9
 )
7
 
10
 
8
 // GetGoodsType 获取商品类型
11
 // GetGoodsType 获取商品类型
10
 	if pageSize == 0 {
13
 	if pageSize == 0 {
11
 		pageSize = service.PAGENUM
14
 		pageSize = service.PAGENUM
12
 	}
15
 	}
16
+	if page == 0 {
17
+		page = 1
18
+	}
13
 	types, err := s.dao.GetGoodsType(caseids, page, pageSize)
19
 	types, err := s.dao.GetGoodsType(caseids, page, pageSize)
14
 	if err != nil {
20
 	if err != nil {
21
+		beego.Error(err)
15
 		return nil, err
22
 		return nil, err
16
 	}
23
 	}
17
 	total, err := s.dao.GetGoodsTypeCount(caseids)
24
 	total, err := s.dao.GetGoodsTypeCount(caseids)
18
 	if err != nil {
25
 	if err != nil {
26
+		beego.Error(err)
19
 		return nil, err
27
 		return nil, err
20
 	}
28
 	}
21
 
29
 
35
 
43
 
36
 // SaveGoodsType 保存商品类型
44
 // SaveGoodsType 保存商品类型
37
 func (s *GoodsServ) SaveGoodsType(goodsType model.TdGoodsType) (*model.TdGoodsType, error) {
45
 func (s *GoodsServ) SaveGoodsType(goodsType model.TdGoodsType) (*model.TdGoodsType, error) {
46
+	if goodsType.TypeName == "" {
47
+		return nil, errors.New("类型名称不能为空!")
48
+	}
49
+
50
+	if goodsType.CaseId == "" {
51
+		return nil, errors.New("案场不能为空!")
52
+	}
53
+
38
 	var err error
54
 	var err error
39
 	if goodsType.TypeId == "" {
55
 	if goodsType.TypeId == "" {
40
 		_, err = s.dao.AddGoodsType(&goodsType)
56
 		_, err = s.dao.AddGoodsType(&goodsType)

+ 25
- 0
service/message/cmscase.go 파일 보기

5
 	"spaceofcheng/services/models/message"
5
 	"spaceofcheng/services/models/message"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/service"
8
+	"spaceofcheng/services/utils"
8
 	"strings"
9
 	"strings"
10
+
11
+	"github.com/astaxie/beego"
9
 )
12
 )
10
 
13
 
11
 // GetCmsCasesList 获取项目列表
14
 // GetCmsCasesList 获取项目列表
13
 	if pageSize == 0 {
16
 	if pageSize == 0 {
14
 		pageSize = service.PAGENUM
17
 		pageSize = service.PAGENUM
15
 	}
18
 	}
19
+	if page == 0 {
20
+		page = 1
21
+	}
16
 	infos, err := s.dao.GetCmsCaseList(name, orgid, page, pageSize)
22
 	infos, err := s.dao.GetCmsCaseList(name, orgid, page, pageSize)
17
 	if err != nil {
23
 	if err != nil {
24
+		beego.Error(err)
18
 		return nil, err
25
 		return nil, err
19
 	}
26
 	}
20
 	total, err := s.dao.GetCmsCaseListCount(name, orgid)
27
 	total, err := s.dao.GetCmsCaseListCount(name, orgid)
21
 	if err != nil {
28
 	if err != nil {
29
+		beego.Error(err)
22
 		return nil, err
30
 		return nil, err
23
 	}
31
 	}
24
 
32
 
42
 	var err error
50
 	var err error
43
 	info, err = s.dao.GetCmsCaseByID(cmscaseid)
51
 	info, err = s.dao.GetCmsCaseByID(cmscaseid)
44
 	if err != nil {
52
 	if err != nil {
53
+		beego.Error(err)
45
 		return nil, err
54
 		return nil, err
46
 	}
55
 	}
47
 	var course []model.TaCourse
56
 	var course []model.TaCourse
51
 		course, err = s.dao.GetCoursesByCmsCase(info.CmsCaseId)
60
 		course, err = s.dao.GetCoursesByCmsCase(info.CmsCaseId)
52
 	}
61
 	}
53
 	if err != nil {
62
 	if err != nil {
63
+		beego.Error(err)
54
 		return nil, err
64
 		return nil, err
55
 	}
65
 	}
56
 	info.Courses = course
66
 	info.Courses = course
57
 
67
 
58
 	imgs, err := s.dao.GetCmsCaseImgs(info.CmsCaseId)
68
 	imgs, err := s.dao.GetCmsCaseImgs(info.CmsCaseId)
59
 	if err != nil {
69
 	if err != nil {
70
+		beego.Error(err)
60
 		return nil, err
71
 		return nil, err
61
 	}
72
 	}
62
 	info.CmsCaseImgs = imgs
73
 	info.CmsCaseImgs = imgs
67
 func (s *MessageServ) SaveCmsCase(cmscase model.TaCmsCase, courseids, imgs, detailimgs string) (*model.TaCmsCase, error) {
78
 func (s *MessageServ) SaveCmsCase(cmscase model.TaCmsCase, courseids, imgs, detailimgs string) (*model.TaCmsCase, error) {
68
 	var newInfo *model.TaCmsCase
79
 	var newInfo *model.TaCmsCase
69
 	var err error
80
 	var err error
81
+	if cmscase.Name == "" {
82
+		return nil, utils.LogError("项目名称不能为空!")
83
+	}
84
+
85
+	if cmscase.Title == "" {
86
+		return nil, utils.LogError("项目标题不能为空!")
87
+	}
88
+
70
 	if cmscase.CmsCaseId == "" {
89
 	if cmscase.CmsCaseId == "" {
71
 		newInfo, err = s.dao.AddCmsCase(cmscase)
90
 		newInfo, err = s.dao.AddCmsCase(cmscase)
72
 	} else {
91
 	} else {
74
 		newInfo = &cmscase
93
 		newInfo = &cmscase
75
 	}
94
 	}
76
 	if err != nil {
95
 	if err != nil {
96
+		beego.Error(err)
77
 		return nil, err
97
 		return nil, err
78
 	}
98
 	}
79
 	err = s.dao.DelCmsCaseCourse(newInfo.CmsCaseId)
99
 	err = s.dao.DelCmsCaseCourse(newInfo.CmsCaseId)
80
 	if err != nil {
100
 	if err != nil {
101
+		beego.Error(err)
81
 		return nil, err
102
 		return nil, err
82
 	}
103
 	}
83
 	if newInfo.IsAllCourse == 0 {
104
 	if newInfo.IsAllCourse == 0 {
84
 		err = s.dao.SaveCmsCaseCourse(newInfo.CmsCaseId, courseids)
105
 		err = s.dao.SaveCmsCaseCourse(newInfo.CmsCaseId, courseids)
85
 		if err != nil {
106
 		if err != nil {
107
+			beego.Error(err)
86
 			return nil, err
108
 			return nil, err
87
 		}
109
 		}
88
 	}
110
 	}
89
 	err = s.dao.DelCmsCaseImg(newInfo.CmsCaseId)
111
 	err = s.dao.DelCmsCaseImg(newInfo.CmsCaseId)
90
 	if err != nil {
112
 	if err != nil {
113
+		beego.Error(err)
91
 		return nil, err
114
 		return nil, err
92
 	}
115
 	}
93
 
116
 
101
 		}
124
 		}
102
 		err = s.dao.SaveCmsCaseImg(CmsImg)
125
 		err = s.dao.SaveCmsCaseImg(CmsImg)
103
 		if err != nil {
126
 		if err != nil {
127
+			beego.Error(err)
104
 			return nil, err
128
 			return nil, err
105
 		}
129
 		}
106
 	}
130
 	}
114
 		}
138
 		}
115
 		err = s.dao.SaveCmsCaseImg(CmsImg)
139
 		err = s.dao.SaveCmsCaseImg(CmsImg)
116
 		if err != nil {
140
 		if err != nil {
141
+			beego.Error(err)
117
 			return nil, err
142
 			return nil, err
118
 		}
143
 		}
119
 	}
144
 	}

+ 28
- 0
service/message/image.go 파일 보기

1
 package message
1
 package message
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
4
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/service"
7
+
8
+	"github.com/astaxie/beego"
9
+)
10
+
11
+const (
12
+	ForwardTypeUrl    = "url"
13
+	ForwardTypeCourse = "course"
6
 )
14
 )
7
 
15
 
8
 // GetImgList 获取图片列表
16
 // GetImgList 获取图片列表
10
 	if pageSize == 0 {
18
 	if pageSize == 0 {
11
 		pageSize = service.PAGENUM
19
 		pageSize = service.PAGENUM
12
 	}
20
 	}
21
+	if page == 0 {
22
+		page = 1
23
+	}
13
 	infos, err := s.dao.GetImgList(orgid, page, pageSize)
24
 	infos, err := s.dao.GetImgList(orgid, page, pageSize)
14
 	if err != nil {
25
 	if err != nil {
26
+		beego.Error(err)
15
 		return nil, err
27
 		return nil, err
16
 	}
28
 	}
17
 	total, err := s.dao.GetImgListCount(orgid)
29
 	total, err := s.dao.GetImgListCount(orgid)
18
 	if err != nil {
30
 	if err != nil {
31
+		beego.Error(err)
19
 		return nil, err
32
 		return nil, err
20
 	}
33
 	}
21
 
34
 
41
 
54
 
42
 // SaveImg 保存轮播图信息
55
 // SaveImg 保存轮播图信息
43
 func (s *MessageServ) SaveImg(imginfo model.TaCmsImages) (*model.TaCmsImages, error) {
56
 func (s *MessageServ) SaveImg(imginfo model.TaCmsImages) (*model.TaCmsImages, error) {
57
+	if imginfo.ImageUrl == "" {
58
+		return nil, errors.New("图片不允许为空!")
59
+	}
60
+
61
+	if imginfo.ForwardType == "" {
62
+		return nil, errors.New("跳转类型不允许为空!")
63
+	}
64
+	if imginfo.ForwardType == ForwardTypeUrl && imginfo.ForwardUrl == "" {
65
+		return nil, errors.New("跳转地址不允许为空!")
66
+	}
67
+
68
+	if imginfo.ForwardType == ForwardTypeCourse && imginfo.CaseId == "" {
69
+		return nil, errors.New("跳转资源不允许为空!")
70
+	}
71
+
44
 	if imginfo.ImageId == "" {
72
 	if imginfo.ImageId == "" {
45
 		newinfo, err := s.dao.AddCmsImg(imginfo)
73
 		newinfo, err := s.dao.AddCmsImg(imginfo)
46
 		return newinfo, err
74
 		return newinfo, err

+ 7
- 0
service/message/message.go 파일 보기

5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/utils"
7
 	"spaceofcheng/services/utils"
8
+
9
+	"github.com/astaxie/beego"
8
 )
10
 )
9
 
11
 
10
 // MessageServ 系统处理
12
 // MessageServ 系统处理
26
 	if pageSize == 0 {
28
 	if pageSize == 0 {
27
 		pageSize = service.PAGENUM
29
 		pageSize = service.PAGENUM
28
 	}
30
 	}
31
+	if page == 0 {
32
+		page = 1
33
+	}
29
 	infos, err := s.dao.GetCmsInfoList(title, orgid, page, pageSize)
34
 	infos, err := s.dao.GetCmsInfoList(title, orgid, page, pageSize)
30
 	if err != nil {
35
 	if err != nil {
36
+		beego.Error(err)
31
 		return nil, err
37
 		return nil, err
32
 	}
38
 	}
33
 	total, err := s.dao.GetCmsInfoListCount(title, orgid)
39
 	total, err := s.dao.GetCmsInfoListCount(title, orgid)
34
 	if err != nil {
40
 	if err != nil {
41
+		beego.Error(err)
35
 		return nil, err
42
 		return nil, err
36
 	}
43
 	}
37
 
44
 

+ 32
- 0
service/message/news.go 파일 보기

1
 package message
1
 package message
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
4
 	"spaceofcheng/services/models/message"
5
 	"spaceofcheng/services/models/message"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/service"
8
+
9
+	"github.com/astaxie/beego"
7
 )
10
 )
8
 
11
 
9
 // GetNewsList 获取咨询列表
12
 // GetNewsList 获取咨询列表
11
 	if pageSize == 0 {
14
 	if pageSize == 0 {
12
 		pageSize = service.PAGENUM
15
 		pageSize = service.PAGENUM
13
 	}
16
 	}
17
+	if page == 0 {
18
+		page = 1
19
+	}
14
 	infos, err := s.dao.GetNewsList(locationid, orgid, page, pageSize)
20
 	infos, err := s.dao.GetNewsList(locationid, orgid, page, pageSize)
15
 	if err != nil {
21
 	if err != nil {
22
+		beego.Error(err)
16
 		return nil, err
23
 		return nil, err
17
 	}
24
 	}
18
 	total, err := s.dao.GetNewsListCount(locationid, orgid)
25
 	total, err := s.dao.GetNewsListCount(locationid, orgid)
19
 	if err != nil {
26
 	if err != nil {
27
+		beego.Error(err)
20
 		return nil, err
28
 		return nil, err
21
 	}
29
 	}
22
 
30
 
38
 func (s *MessageServ) GetNewsByID(newsid string) (*message.CmsNews, error) {
46
 func (s *MessageServ) GetNewsByID(newsid string) (*message.CmsNews, error) {
39
 	info, err := s.dao.GetNewsByID(newsid)
47
 	info, err := s.dao.GetNewsByID(newsid)
40
 	if err != nil {
48
 	if err != nil {
49
+		beego.Error(err)
41
 		return nil, err
50
 		return nil, err
42
 	}
51
 	}
43
 	newslocation, err := s.dao.GetNewsLocationByID(newsid)
52
 	newslocation, err := s.dao.GetNewsLocationByID(newsid)
44
 	if err != nil {
53
 	if err != nil {
54
+		beego.Error(err)
45
 		return nil, err
55
 		return nil, err
46
 	}
56
 	}
47
 	info.NewsLocations = newslocation
57
 	info.NewsLocations = newslocation
52
 func (s *MessageServ) SaveNews(news model.TaCmsNews, locationids string) (*model.TaCmsNews, error) {
62
 func (s *MessageServ) SaveNews(news model.TaCmsNews, locationids string) (*model.TaCmsNews, error) {
53
 	var newInfo *model.TaCmsNews
63
 	var newInfo *model.TaCmsNews
54
 	var err error
64
 	var err error
65
+	if news.Title == "" {
66
+		return nil, errors.New("咨询标题不允许为空!")
67
+	}
68
+
69
+	if news.ImageUrl == "" {
70
+		return nil, errors.New("图片不允许为空!")
71
+	}
72
+
73
+	if news.ForwardType == "" {
74
+		return nil, errors.New("跳转类型不允许为空!")
75
+	}
76
+	if news.ForwardType == ForwardTypeUrl && news.ForwardUrl == "" {
77
+		return nil, errors.New("跳转地址不允许为空!")
78
+	}
79
+
80
+	if news.ForwardType == ForwardTypeCourse && news.CaseId == "" {
81
+		return nil, errors.New("跳转资源不允许为空!")
82
+	}
83
+
55
 	if news.NewsId == "" {
84
 	if news.NewsId == "" {
56
 		newInfo, err = s.dao.AddNews(news)
85
 		newInfo, err = s.dao.AddNews(news)
57
 	} else {
86
 	} else {
59
 		newInfo = &news
88
 		newInfo = &news
60
 	}
89
 	}
61
 	if err != nil {
90
 	if err != nil {
91
+		beego.Error(err)
62
 		return nil, err
92
 		return nil, err
63
 	}
93
 	}
64
 	err = s.dao.DelNewsLocation(newInfo.NewsId)
94
 	err = s.dao.DelNewsLocation(newInfo.NewsId)
65
 	if err != nil {
95
 	if err != nil {
96
+		beego.Error(err)
66
 		return nil, err
97
 		return nil, err
67
 	}
98
 	}
68
 	err = s.dao.SaveNewsLocation(newInfo.NewsId, locationids)
99
 	err = s.dao.SaveNewsLocation(newInfo.NewsId, locationids)
69
 	if err != nil {
100
 	if err != nil {
101
+		beego.Error(err)
70
 		return nil, err
102
 		return nil, err
71
 	}
103
 	}
72
 	return newInfo, err
104
 	return newInfo, err

+ 5
- 0
service/sys.go 파일 보기

5
 	"spaceofcheng/services/models"
5
 	"spaceofcheng/services/models"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/utils"
7
 	"spaceofcheng/services/utils"
8
+
9
+	"github.com/astaxie/beego"
8
 )
10
 )
9
 
11
 
10
 const (
12
 const (
84
 
86
 
85
 	accountRaw, err := json.Marshal(user)
87
 	accountRaw, err := json.Marshal(user)
86
 	if err != nil {
88
 	if err != nil {
89
+		beego.Error(err)
87
 		return nil, err
90
 		return nil, err
88
 	}
91
 	}
89
 	account := string(accountRaw)
92
 	account := string(accountRaw)
99
 	// 查询数据库是否存在已有映射
102
 	// 查询数据库是否存在已有映射
100
 	userMapList, err := s.dao.GetUserMappingByOpenID(openID)
103
 	userMapList, err := s.dao.GetUserMappingByOpenID(openID)
101
 	if err != nil {
104
 	if err != nil {
105
+		beego.Error(err)
102
 		return nil, err
106
 		return nil, err
103
 	}
107
 	}
104
 
108
 
118
 	// 更新数据库内容, 没有的话则插入
122
 	// 更新数据库内容, 没有的话则插入
119
 	err = s.dao.UpdateUserMapping(&userMapping)
123
 	err = s.dao.UpdateUserMapping(&userMapping)
120
 	if err != nil {
124
 	if err != nil {
125
+		beego.Error(err)
121
 		return nil, err
126
 		return nil, err
122
 	}
127
 	}
123
 
128
 

+ 12
- 0
service/system/role.go 파일 보기

5
 	"spaceofcheng/services/models/system"
5
 	"spaceofcheng/services/models/system"
6
 	"spaceofcheng/services/service"
6
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/utils"
7
 	"spaceofcheng/services/utils"
8
+
9
+	"github.com/astaxie/beego"
8
 )
10
 )
9
 
11
 
10
 // RoleServ 系统处理
12
 // RoleServ 系统处理
26
 	if pageSize == 0 {
28
 	if pageSize == 0 {
27
 		pageSize = service.PAGENUM
29
 		pageSize = service.PAGENUM
28
 	}
30
 	}
31
+	if page == 0 {
32
+		page = 1
33
+	}
29
 	roles, err := s.dao.GetRoleList(caseids, page, pageSize)
34
 	roles, err := s.dao.GetRoleList(caseids, page, pageSize)
30
 	if err != nil {
35
 	if err != nil {
36
+		beego.Error(err)
31
 		return nil, err
37
 		return nil, err
32
 	}
38
 	}
33
 	total, err := s.dao.GetRoleCount(caseids)
39
 	total, err := s.dao.GetRoleCount(caseids)
34
 	if err != nil {
40
 	if err != nil {
41
+		beego.Error(err)
35
 		return nil, err
42
 		return nil, err
36
 	}
43
 	}
37
 
44
 
47
 func (s *RoleServ) GetRoleByID(roleid string) (*system.Role, error) {
54
 func (s *RoleServ) GetRoleByID(roleid string) (*system.Role, error) {
48
 	role, err := s.dao.GetRoleByID(roleid)
55
 	role, err := s.dao.GetRoleByID(roleid)
49
 	if err != nil {
56
 	if err != nil {
57
+		beego.Error(err)
50
 		return nil, err
58
 		return nil, err
51
 	}
59
 	}
52
 	if role != nil {
60
 	if role != nil {
53
 		menus, err := s.dao.GetRoleMenuByRoleID(roleid)
61
 		menus, err := s.dao.GetRoleMenuByRoleID(roleid)
54
 		if err != nil {
62
 		if err != nil {
63
+			beego.Error(err)
55
 			return nil, err
64
 			return nil, err
56
 		}
65
 		}
57
 		role.RoleMenu = menus
66
 		role.RoleMenu = menus
70
 		newInfo = &role
79
 		newInfo = &role
71
 	}
80
 	}
72
 	if err != nil {
81
 	if err != nil {
82
+		beego.Error(err)
73
 		return nil, err
83
 		return nil, err
74
 	}
84
 	}
75
 	err = s.dao.DelRoleMenu(newInfo.RoleId)
85
 	err = s.dao.DelRoleMenu(newInfo.RoleId)
76
 	if err != nil {
86
 	if err != nil {
87
+		beego.Error(err)
77
 		return nil, err
88
 		return nil, err
78
 	}
89
 	}
79
 	err = s.dao.SaveRoleMenu(newInfo.RoleId, menuids)
90
 	err = s.dao.SaveRoleMenu(newInfo.RoleId, menuids)
80
 	if err != nil {
91
 	if err != nil {
92
+		beego.Error(err)
81
 		return nil, err
93
 		return nil, err
82
 	}
94
 	}
83
 	return newInfo, err
95
 	return newInfo, err

+ 25
- 0
service/user.go 파일 보기

8
 	"spaceofcheng/services/models/system"
8
 	"spaceofcheng/services/models/system"
9
 	"spaceofcheng/services/utils"
9
 	"spaceofcheng/services/utils"
10
 
10
 
11
+	"github.com/astaxie/beego"
11
 	"github.com/yl10/kit/encrypt"
12
 	"github.com/yl10/kit/encrypt"
12
 )
13
 )
13
 
14
 
32
 	if pageSize == 0 {
33
 	if pageSize == 0 {
33
 		pageSize = PAGENUM
34
 		pageSize = PAGENUM
34
 	}
35
 	}
36
+	if page == 0 {
37
+		page = 1
38
+	}
35
 	userList, err := s.dao.GetUserList(username, typeid, caseids, page, pageSize)
39
 	userList, err := s.dao.GetUserList(username, typeid, caseids, page, pageSize)
36
 	if err != nil {
40
 	if err != nil {
41
+		beego.Error(err)
37
 		return nil, err
42
 		return nil, err
38
 	}
43
 	}
39
 	total, err := s.dao.GetUserCount(username, typeid, caseids)
44
 	total, err := s.dao.GetUserCount(username, typeid, caseids)
40
 	if err != nil {
45
 	if err != nil {
46
+		beego.Error(err)
41
 		return nil, err
47
 		return nil, err
42
 	}
48
 	}
43
 
49
 
59
 	// 当前用户角色
65
 	// 当前用户角色
60
 	roles, err := s.dao.GetUserRole(user.UserId)
66
 	roles, err := s.dao.GetUserRole(user.UserId)
61
 	if err != nil {
67
 	if err != nil {
68
+		beego.Error(err)
62
 		return nil, err
69
 		return nil, err
63
 	}
70
 	}
64
 	// 当前用户菜单
71
 	// 当前用户菜单
65
 	menus, err := s.dao.GetUserMenu(user.UserId)
72
 	menus, err := s.dao.GetUserMenu(user.UserId)
66
 	if err != nil {
73
 	if err != nil {
74
+		beego.Error(err)
67
 		return nil, err
75
 		return nil, err
68
 	}
76
 	}
69
 
77
 
81
 func (s *UserServ) GetUserByID(userid string) (*system.UserInfo, error) {
89
 func (s *UserServ) GetUserByID(userid string) (*system.UserInfo, error) {
82
 	userinfo, err := s.dao.GetUserByID(userid)
90
 	userinfo, err := s.dao.GetUserByID(userid)
83
 	if err != nil {
91
 	if err != nil {
92
+		beego.Error(err)
84
 		return nil, err
93
 		return nil, err
85
 	}
94
 	}
86
 	userinfo.Pwd = ""
95
 	userinfo.Pwd = ""
87
 	usertype, err := s.dao.GetUserType(userid)
96
 	usertype, err := s.dao.GetUserType(userid)
88
 	if err != nil {
97
 	if err != nil {
98
+		beego.Error(err)
89
 		return nil, err
99
 		return nil, err
90
 	}
100
 	}
91
 	userinfo.UserType = usertype
101
 	userinfo.UserType = usertype
92
 
102
 
93
 	usertag, err := s.dao.GetUserTag(userid)
103
 	usertag, err := s.dao.GetUserTag(userid)
94
 	if err != nil {
104
 	if err != nil {
105
+		beego.Error(err)
95
 		return nil, err
106
 		return nil, err
96
 	}
107
 	}
97
 	userinfo.UserTag = usertag
108
 	userinfo.UserTag = usertag
98
 
109
 
99
 	usercase, err := s.dao.GetUserCase(userid)
110
 	usercase, err := s.dao.GetUserCase(userid)
100
 	if err != nil {
111
 	if err != nil {
112
+		beego.Error(err)
101
 		return nil, err
113
 		return nil, err
102
 	}
114
 	}
103
 	userinfo.UserCase = usercase
115
 	userinfo.UserCase = usercase
138
 	if user.UserId != "" {
150
 	if user.UserId != "" {
139
 		err = s.dao.UpdateUser(userInfo)
151
 		err = s.dao.UpdateUser(userInfo)
140
 		if err != nil {
152
 		if err != nil {
153
+			beego.Error(err)
141
 			return nil, err
154
 			return nil, err
142
 		}
155
 		}
143
 		// 删除用户对应的标签、用户类型及所属案场
156
 		// 删除用户对应的标签、用户类型及所属案场
144
 		err = s.dao.DelUserTag(user.UserId)
157
 		err = s.dao.DelUserTag(user.UserId)
145
 		if err != nil {
158
 		if err != nil {
159
+			beego.Error(err)
146
 			return nil, err
160
 			return nil, err
147
 		}
161
 		}
148
 		err = s.dao.DelUserType(user.UserId)
162
 		err = s.dao.DelUserType(user.UserId)
149
 		if err != nil {
163
 		if err != nil {
164
+			beego.Error(err)
150
 			return nil, err
165
 			return nil, err
151
 		}
166
 		}
152
 		err = s.dao.DelUserBelongCase(user.UserId)
167
 		err = s.dao.DelUserBelongCase(user.UserId)
153
 		if err != nil {
168
 		if err != nil {
169
+			beego.Error(err)
154
 			return nil, err
170
 			return nil, err
155
 		}
171
 		}
156
 		newUSer = &userInfo
172
 		newUSer = &userInfo
157
 	} else {
173
 	} else {
158
 		newUSer, err = s.dao.AddUser(userInfo)
174
 		newUSer, err = s.dao.AddUser(userInfo)
159
 		if err != nil {
175
 		if err != nil {
176
+			beego.Error(err)
160
 			return nil, err
177
 			return nil, err
161
 		}
178
 		}
162
 	}
179
 	}
164
 	// 保存用户的标签、用户类型及所属案场
181
 	// 保存用户的标签、用户类型及所属案场
165
 	err = s.dao.SaveUserTag(newUSer.UserId, user.TagIds)
182
 	err = s.dao.SaveUserTag(newUSer.UserId, user.TagIds)
166
 	if err != nil {
183
 	if err != nil {
184
+		beego.Error(err)
167
 		return nil, err
185
 		return nil, err
168
 	}
186
 	}
169
 	err = s.dao.SaveUserType(newUSer.UserId, user.TypeId)
187
 	err = s.dao.SaveUserType(newUSer.UserId, user.TypeId)
170
 	if err != nil {
188
 	if err != nil {
189
+		beego.Error(err)
171
 		return nil, err
190
 		return nil, err
172
 	}
191
 	}
173
 	caseInfo, err := s.casedao.GetCaseByID(user.BelongCaseId)
192
 	caseInfo, err := s.casedao.GetCaseByID(user.BelongCaseId)
174
 	if err != nil {
193
 	if err != nil {
194
+		beego.Error(err)
175
 		return nil, err
195
 		return nil, err
176
 	}
196
 	}
177
 	if caseInfo == nil {
197
 	if caseInfo == nil {
184
 	userCase.UserId = newUSer.UserId
204
 	userCase.UserId = newUSer.UserId
185
 	err = s.dao.SaveUserCase(userCase)
205
 	err = s.dao.SaveUserCase(userCase)
186
 	if err != nil {
206
 	if err != nil {
207
+		beego.Error(err)
187
 		return nil, err
208
 		return nil, err
188
 	}
209
 	}
189
 	newUSer.Pwd = ""
210
 	newUSer.Pwd = ""
266
 	if pageSize == 0 {
287
 	if pageSize == 0 {
267
 		pageSize = PAGENUM
288
 		pageSize = PAGENUM
268
 	}
289
 	}
290
+	if page == 0 {
291
+		page = 1
292
+	}
269
 	customers, err := s.dao.GetUserCustomer(userid, page, pageSize)
293
 	customers, err := s.dao.GetUserCustomer(userid, page, pageSize)
270
 	return customers, err
294
 	return customers, err
271
 }
295
 }
274
 func (s *UserServ) CheckUserSignIn(userName, userPassword string) (*model.SysUser, error) {
298
 func (s *UserServ) CheckUserSignIn(userName, userPassword string) (*model.SysUser, error) {
275
 	user, err := s.dao.GetUserByName(userName)
299
 	user, err := s.dao.GetUserByName(userName)
276
 	if err != nil {
300
 	if err != nil {
301
+		beego.Error(err)
277
 		return nil, err
302
 		return nil, err
278
 	}
303
 	}
279
 
304
 

+ 8
- 2
utils/captcha.go 파일 보기

80
 func (c *CaptchaEngine) ValidCaptcha(phone, cap string) error {
80
 func (c *CaptchaEngine) ValidCaptcha(phone, cap string) error {
81
 	theCap, ok := c.capList[phone]
81
 	theCap, ok := c.capList[phone]
82
 	if !ok {
82
 	if !ok {
83
-		return errors.New("未发送过该号码的验证码")
83
+		return errors.New("手机号无效或验证码已过期")
84
 	}
84
 	}
85
 
85
 
86
-	if time.Now().Local().Before(theCap.Expire) {
86
+	if time.Now().Local().After(theCap.Expire) {
87
+		// 注销
88
+		delete(c.capList, phone)
89
+
87
 		return errors.New("验证码已过期")
90
 		return errors.New("验证码已过期")
88
 	}
91
 	}
89
 
92
 
91
 		return errors.New("验证码不正确")
94
 		return errors.New("验证码不正确")
92
 	}
95
 	}
93
 
96
 
97
+	// 如果成功, 则注销
98
+	delete(c.capList, phone)
99
+
94
 	return nil
100
 	return nil
95
 }
101
 }
96
 
102
 

+ 20
- 30
utils/pagenavi.go 파일 보기

1
 package utils
1
 package utils
2
 
2
 
3
 import (
3
 import (
4
-	"errors"
5
-	"regexp"
6
 	"strconv"
4
 	"strconv"
7
-
8
-	"github.com/go-xorm/xorm"
9
 )
5
 )
10
 
6
 
7
+type PageNaviEngine struct {
8
+	ctx *Context
9
+}
10
+
11
+func NewPageNaviEngine(ctx *Context) *PageNaviEngine {
12
+	return &PageNaviEngine{ctx: ctx}
13
+}
14
+
11
 // GetPageList 获取列表
15
 // GetPageList 获取列表
12
-func GetPageList(db *xorm.Session, target interface{}, limit []int, sqlorArgs ...interface{}) (int64, error) {
13
-	if sqlorArgs == nil || len(sqlorArgs) == 0 {
14
-		return 0, errors.New("SQL 语句不存在")
16
+func (t *PageNaviEngine) GetPageList(target interface{}, sql string, limit []int, sqlArgs ...interface{}) (int64, error) {
17
+	countSQL := "select count(*) as cnt from (" + sql + ") as virtualTable"
18
+	countSQLorArgs := []interface{}{countSQL}
19
+	for _, arg := range sqlArgs {
20
+		countSQLorArgs = append(countSQLorArgs, arg)
15
 	}
21
 	}
16
 
22
 
17
-	countSQLorArgs := GetCountSQL(sqlorArgs...)
18
-	cntRes, err := db.Query(countSQLorArgs...)
23
+	cntRes, err := t.ctx.DB.Query(countSQLorArgs...)
19
 	if err != nil {
24
 	if err != nil {
20
 		return 0, err
25
 		return 0, err
21
 	}
26
 	}
23
 	cntStr := string(cntRes[0]["cnt"])
28
 	cntStr := string(cntRes[0]["cnt"])
24
 	cnt, _ := strconv.ParseInt(cntStr, 10, 64)
29
 	cnt, _ := strconv.ParseInt(cntStr, 10, 64)
25
 
30
 
26
-	sql, args := PackLimitToSQL(limit, sqlorArgs...)
31
+	newSQL := t.PackLimitToSQL(sql, limit)
27
 
32
 
28
-	err = db.SQL(sql, args...).Find(target)
33
+	err = t.ctx.DB.SQL(newSQL, sqlArgs...).Find(target)
29
 	if err != nil {
34
 	if err != nil {
30
 		return 0, err
35
 		return 0, err
31
 	}
36
 	}
33
 	return cnt, nil
38
 	return cnt, nil
34
 }
39
 }
35
 
40
 
36
-// GetCountSQL 获取计算 Count 的相关 SQL 脚本
37
-func GetCountSQL(sqlorArgs ...interface{}) []interface{} {
38
-	sql := sqlorArgs[0].(string)
39
-
40
-	re := regexp.MustCompile("(?ims)(select .* from)")
41
-	cntSQL := re.ReplaceAllString(sql, "select count(*) as cnt from")
42
-
43
-	newSQLorArgs := []interface{}{cntSQL}
44
-	newSQLorArgs = append(newSQLorArgs, sqlorArgs[1:])
45
-	return newSQLorArgs
46
-}
47
-
48
 // PackLimitToSQL 添加 limit 语句到 sql 最后
41
 // PackLimitToSQL 添加 limit 语句到 sql 最后
49
-func PackLimitToSQL(limit []int, sqlorArgs ...interface{}) (string, []interface{}) {
50
-	sql := sqlorArgs[0].(string)
51
-	args := sqlorArgs[1:]
52
-
42
+func (t *PageNaviEngine) PackLimitToSQL(sql string, limit []int) string {
53
 	switch len(limit) {
43
 	switch len(limit) {
54
 	case 1:
44
 	case 1:
55
-		return sql + " LIMIT " + strconv.Itoa(limit[0]), args
45
+		return sql + " LIMIT " + strconv.Itoa(limit[0])
56
 	case 2:
46
 	case 2:
57
-		return sql + " LIMIT " + strconv.Itoa(limit[0]) + " OFFSET " + strconv.Itoa(limit[1]), args
47
+		return sql + " LIMIT " + strconv.Itoa(limit[0]) + " OFFSET " + strconv.Itoa(limit[1])
58
 	default:
48
 	default:
59
-		return sql, args
49
+		return sql
60
 	}
50
 	}
61
 }
51
 }

+ 0
- 71
utils/pagenavi_test.go 파일 보기

1
-package utils_test
2
-
3
-import (
4
-	"spaceofcheng/services/utils"
5
-	"testing"
6
-)
7
-
8
-func TestGetCountSQL(t *testing.T) {
9
-	testCases := []map[string]string{
10
-		map[string]string{
11
-			"sql":      "Select field1, field2 From table",
12
-			"expected": "select count(*) as cnt from table",
13
-		},
14
-		map[string]string{
15
-			"sql": `Select 
16
-								field1, field2 From table where status = ?`,
17
-			"expected": "select count(*) as cnt from table where status = ?",
18
-		},
19
-	}
20
-
21
-	for inx, cs := range testCases {
22
-		sql := cs["sql"]
23
-		expected := cs["expected"]
24
-
25
-		var res []interface{}
26
-		if inx < 1 {
27
-			res = utils.GetCountSQL(sql)
28
-		} else {
29
-			res = utils.GetCountSQL(sql, inx)
30
-		}
31
-
32
-		if res == nil || len(res) == 0 {
33
-			t.Fatalf("Test GetCountSQL fail --1")
34
-		}
35
-
36
-		newSQL := res[0].(string)
37
-		if newSQL != expected {
38
-			t.Fatalf("Test GetCountSQL fail: %s", newSQL)
39
-		}
40
-	}
41
-}
42
-
43
-func TestPackLimitToSQL(t *testing.T) {
44
-	testCases := []map[string]string{
45
-		map[string]string{
46
-			"sql":      "Select * From table",
47
-			"expected": "Select * From table LIMIT 1 OFFSET 0",
48
-		},
49
-		map[string]string{
50
-			"sql":      "Select * From table",
51
-			"expected": "Select * From table LIMIT 1",
52
-		},
53
-	}
54
-
55
-	for inx, cs := range testCases {
56
-		sql := cs["sql"]
57
-		expected := cs["expected"]
58
-
59
-		var sqlRes string
60
-		if inx < 1 {
61
-			sqlRes, _ = utils.PackLimitToSQL([]int{inx + 1, inx}, sql)
62
-		} else {
63
-			sqlRes, _ = utils.PackLimitToSQL([]int{inx}, sql, inx)
64
-		}
65
-
66
-		if sqlRes != expected {
67
-			t.Fatalf("\n%v: Test PackLimitToSQL fail: %s", inx+1, sqlRes)
68
-		}
69
-	}
70
-
71
-}

+ 140
- 0
utils/permission.go 파일 보기

1
+package utils
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/models/model"
6
+	"strings"
7
+)
8
+
9
+// 系统内置数据种类
10
+const (
11
+	DATATYPE_USER   = "user"
12
+	DATATYPE_CASE   = "case"
13
+	DATATYPE_COURSE = "course"
14
+	DATATYPE_COUPON = "coupon"
15
+	DATATYPE_CARD   = "card"
16
+)
17
+
18
+// DataAuthEngine 鉴权数据
19
+type DataAuthEngine struct {
20
+	ctx *Context
21
+}
22
+
23
+// NewAuthEngine 生成新实例
24
+func NewAuthEngine(ctx *Context) *DataAuthEngine {
25
+	return &DataAuthEngine{ctx: ctx}
26
+}
27
+
28
+// AuthFilter 按权限过滤
29
+func (t *DataAuthEngine) AuthFilter(targ interface{}, sql string, params ...interface{}) error {
30
+	if t.ctx == nil {
31
+		return errors.New("未指定上下文环境")
32
+	}
33
+
34
+	// 用户所属案场
35
+	casesRaw := t.ctx.Get("cases")
36
+	if casesRaw == nil {
37
+		return errors.New("用户无权限操作该数据")
38
+	}
39
+	cases := casesRaw.([]model.SysUserCase)
40
+	csIDs := make([]string, 0)
41
+	for _, cs := range cases {
42
+		csIDs = append(csIDs, cs.CaseId)
43
+	}
44
+
45
+	newSQL := "select * from (" + sql + ") where case_id in ('" + strings.Join(csIDs, "','") + "')"
46
+	if err := t.ctx.DB.SQL(newSQL, params...).Find(targ); err != nil {
47
+		LogError("按权限查询数据失败: " + err.Error())
48
+		return errors.New("数据查询失败")
49
+	}
50
+
51
+	return nil
52
+}
53
+
54
+// HasUserPermission 是否有人员权限
55
+func (t *DataAuthEngine) HasUserPermission(userID, borrower string, caseID ...string) error {
56
+	// 1、先判断组织是否相同
57
+	userOrg, err := t.getOrgOfData(userID, DATATYPE_USER)
58
+	if err != nil {
59
+		LogError("查询用户(" + userID + ") 所属组织失败: " + err.Error())
60
+		return errors.New("查询用户相关信息失败")
61
+	}
62
+
63
+	borwOrg, err := t.getOrgOfData(borrower, DATATYPE_USER)
64
+	if err != nil {
65
+		LogError("查询用户(" + borrower + ") 所属组织失败: " + err.Error())
66
+		return errors.New("查询用户相关信息失败")
67
+	}
68
+
69
+	if userOrg != borwOrg {
70
+		return errors.New("人员不存在或无权浏览")
71
+	}
72
+
73
+	// 2、再判断是否案场相同
74
+	sameCases, err := t.getSameCase(userID, borrower)
75
+	if err != nil {
76
+		return errors.New("用户没有相同案场授权")
77
+	}
78
+
79
+	// 3、是否指定了案场
80
+	if len(caseID) > 0 {
81
+		if StrSliceIndexOf(sameCases, caseID[0]) < 0 {
82
+			return errors.New("用户没有当前案场权限")
83
+		}
84
+	}
85
+
86
+	return nil
87
+}
88
+
89
+func (t *DataAuthEngine) getOrgOfData(dataID, dataType string) (string, error) {
90
+	org := make(map[string]interface{})
91
+
92
+	switch dataType {
93
+	// 用户
94
+	case DATATYPE_USER:
95
+		if _, err := t.ctx.DB.SQL("select org_id from sys_user where user_id = ?", dataID).Get(&org); err != nil {
96
+			return "", err
97
+		}
98
+
99
+		orgID := org["org_id"].(string)
100
+		return orgID, nil
101
+
102
+		// 案场
103
+	case DATATYPE_CASE:
104
+		if _, err := t.ctx.DB.SQL("select org_id from sys_case where case_id = ?", dataID).Get(&org); err != nil {
105
+			return "", err
106
+		}
107
+
108
+		orgID := org["org_id"].(string)
109
+		return orgID, nil
110
+	default:
111
+		return "", nil
112
+	}
113
+}
114
+
115
+func (t *DataAuthEngine) getSameCase(user1, user2 string) ([]string, error) {
116
+	sql := `
117
+		SELECT t.case_id
118
+		FROM
119
+			sys_user_case t
120
+		JOIN sys_user_case s ON t.user_id = ?
121
+		AND s.user_id = ?
122
+		AND t.case_id = s.case_id	
123
+	`
124
+	res, err := t.ctx.DB.Query(sql, user1, user2)
125
+	if err != nil {
126
+		LogError("查询用户相同案场失败: " + err.Error())
127
+		return nil, err
128
+	}
129
+
130
+	if res == nil || len(res) == 0 {
131
+		return nil, errors.New("用户没有相同案场授权")
132
+	}
133
+
134
+	csIDs := make([]string, 0)
135
+	for _, cs := range res {
136
+		csIDs = append(csIDs, string(cs["case_id"]))
137
+	}
138
+
139
+	return csIDs, nil
140
+}

+ 1
- 1
utils/sms.go 파일 보기

47
 		}
47
 		}
48
 
48
 
49
 		// 接口内容
49
 		// 接口内容
50
-		paramsTpl := `{"code": "%s", "tel": "%s", "params": "[%s]"}`
50
+		paramsTpl := `{"code": "%s", "tel": "%s", "params": [%s]}`
51
 		// 发送消息
51
 		// 发送消息
52
 		message := strings.Join(messages, `","`)
52
 		message := strings.Join(messages, `","`)
53
 		if message != "" {
53
 		if message != "" {

+ 35
- 0
utils/utils.go 파일 보기

2
 
2
 
3
 import (
3
 import (
4
 	"net/http"
4
 	"net/http"
5
+	"strconv"
5
 	"strings"
6
 	"strings"
6
 )
7
 )
7
 
8
 
33
 
34
 
34
 	return ClientAdmin
35
 	return ClientAdmin
35
 }
36
 }
37
+
38
+// StrSliceIndexOf slice indexof
39
+func StrSliceIndexOf(s []string, t string) int64 {
40
+	if s == nil || len(s) == 0 {
41
+		return -1
42
+	}
43
+
44
+	for k, v := range s {
45
+		if v == t {
46
+			return int64(k)
47
+		}
48
+	}
49
+
50
+	return -1
51
+}
52
+
53
+// GUIID2IntString guid 转 int 字符串
54
+func GUIID2IntString(id string) []string {
55
+	if id == "" {
56
+		return nil
57
+	}
58
+
59
+	res := make([]string, 0)
60
+	for _, part := range strings.Split(id, "-") {
61
+		sum := 0
62
+		for _, r := range []rune(part) {
63
+			sum += int(r)
64
+		}
65
+
66
+		res = append(res, strconv.Itoa(sum))
67
+	}
68
+
69
+	return res
70
+}

+ 48
- 0
utils/utils_test.go 파일 보기

1
+package utils_test
2
+
3
+import (
4
+	"spaceofcheng/services/utils"
5
+	"strings"
6
+	"testing"
7
+)
8
+
9
+func TestStrSliceIndexOf(t *testing.T) {
10
+	cases := []map[string]interface{}{
11
+		map[string]interface{}{
12
+			"case":     []string{"a", "b", "c"},
13
+			"expected": int64(1),
14
+		},
15
+		map[string]interface{}{
16
+			"case":     []string{"aa", "bb", "cc"},
17
+			"expected": int64(-1),
18
+		},
19
+	}
20
+
21
+	for _, cs := range cases {
22
+		td := cs["case"].([]string)
23
+		ex := cs["expected"].(int64)
24
+
25
+		res := utils.StrSliceIndexOf(td, "b")
26
+
27
+		if ex != res {
28
+			t.Fatalf("TestStrSliceIndexOf case fail : %v", res)
29
+		}
30
+	}
31
+}
32
+
33
+func TestGUIID2IntString(t *testing.T) {
34
+	cases := []map[string]string{
35
+		map[string]string{
36
+			"case":     "3b2da085-8881-4029-9a3d-6d33caf870d0",
37
+			"expected": "553-217-207-305-861",
38
+		},
39
+	}
40
+
41
+	for _, cs := range cases {
42
+		res := utils.GUIID2IntString(cs["case"])
43
+		if strings.Join(res, "-") != cs["expected"] {
44
+			t.Fatalf("TestGUIID2IntString fail")
45
+		}
46
+	}
47
+
48
+}