胡轶钦 6 years ago
parent
commit
cb67512ce2
75 changed files with 1216 additions and 313 deletions
  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 View File

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

+ 2
- 2
controllers/cases/case.go View File

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

+ 4
- 0
controllers/cases/key.go View File

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

+ 19
- 0
controllers/course/course.go View File

@@ -0,0 +1,19 @@
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 View File

@@ -0,0 +1,33 @@
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 View File

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

+ 22
- 0
log/common.2018-08-19.log View File

@@ -0,0 +1,22 @@
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 View File

@@ -0,0 +1,20 @@
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 View File

@@ -21,7 +21,7 @@ func (m *CaseDAO) GetCaseAreaCount(caseids string) (int, error) {
21 21
 func (m *CaseDAO) GetCaseArea(caseids string, page int, pageSize int) ([]model.SysCaseArea, error) {
22 22
 	var areas []model.SysCaseArea
23 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 25
 	return areas, err
26 26
 }
27 27
 
@@ -34,7 +34,9 @@ type AreaInfo struct {
34 34
 // GetCaseAreaByCase 根据案场获取案场区域
35 35
 func (m *CaseDAO) GetCaseAreaByCase(caseid string) ([]AreaInfo, error) {
36 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 40
 	return areas, err
39 41
 }
40 42
 
@@ -56,7 +58,7 @@ func (m *CaseDAO) AddCaseArea(area *model.SysCaseArea) (*model.SysCaseArea, erro
56 58
 	area.AreaId = utils.GetGUID()
57 59
 	area.Status = models.STATUS_NORMAL
58 60
 	area.CreateDate = time.Now()
59
-	user := m.ctx.Get("user").(*model.SysUser)
61
+	user := m.ctx.Get("user").(model.SysUser)
60 62
 	area.CreateUser = user.UserId
61 63
 	_, err := m.db.Insert(area)
62 64
 	return area, err
@@ -68,6 +70,7 @@ func (m *CaseDAO) UpdateCaseArea(area model.SysCaseArea) error {
68 70
 		"area_name",
69 71
 		"area_icon",
70 72
 		"area_icon_white",
73
+		"order",
71 74
 	}
72 75
 	_, err := m.db.Cols(cols...).Where("area_id=?", area.AreaId).Update(area)
73 76
 	return err

+ 8
- 6
models/cases/cases.go View File

@@ -27,20 +27,21 @@ func NewCaseDAO(ctx *utils.Context) *CaseDAO {
27 27
 
28 28
 // CaseInfo 案场
29 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 34
 // GetCaseList 获取案场列表
35 35
 func (m *CaseDAO) GetCaseList(caseids, casename string, page, pageSize int) ([]CaseInfo, error) {
36 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 38
 	 where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
39 39
 	if casename != "" {
40 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 45
 	err := m.db.Sql(sql).Find(&cases)
45 46
 	return cases, err
46 47
 }
@@ -71,11 +72,12 @@ func (m *CaseDAO) GetCaseByID(caseid string) (*model.SysCase, error) {
71 72
 
72 73
 // AddCase 新增案场信息
73 74
 func (m *CaseDAO) AddCase(caseinfo model.SysCase) (*model.SysCase, error) {
75
+	caseinfo.CaseId = utils.GetGUID()
74 76
 	caseinfo.CreateDate = time.Now()
75 77
 	caseinfo.Status = models.STATUS_NORMAL
76
-	user := m.ctx.Get("user").(*model.SysUser)
78
+	user := m.ctx.Get("user").(model.SysUser)
77 79
 	caseinfo.CreateUser = user.UserId
78
-	_, err := m.db.Insert(&caseinfo)
80
+	_, err := m.db.Insert(caseinfo)
79 81
 	return &caseinfo, err
80 82
 }
81 83
 

+ 1
- 1
models/cases/caseuser.go View File

@@ -40,7 +40,7 @@ func (m *CaseDAO) AddCaseUser(caseuser model.SysCaseUser) (*model.SysCaseUser, e
40 40
 	caseuser.CreateDate = time.Now()
41 41
 	caseuser.Status = models.STATUS_NORMAL
42 42
 	caseuser.CaseUserId = utils.GetGUID()
43
-	_, err := m.db.Insert(&caseuser)
43
+	_, err := m.db.Insert(caseuser)
44 44
 	return &caseuser, err
45 45
 }
46 46
 

+ 1
- 1
models/cases/equipment.go View File

@@ -11,7 +11,7 @@ import (
11 11
 // GetEquipmentList 获取体检设备
12 12
 func (m *CaseDAO) GetEquipmentList(caseids string, page, pageSize int) ([]model.SysCaseEquipment, error) {
13 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 15
 	return equipments, err
16 16
 }
17 17
 

+ 37
- 7
models/cases/key.go View File

@@ -5,6 +5,7 @@ import (
5 5
 	"spaceofcheng/services/models/model"
6 6
 	"spaceofcheng/services/utils"
7 7
 	"strconv"
8
+	"strings"
8 9
 	"time"
9 10
 )
10 11
 
@@ -22,18 +23,37 @@ type CaseKeyInfo struct {
22 23
 // GetKeysByCase 根据案场获取钥匙信息
23 24
 func (m *CaseDAO) GetKeysByCase(caseid, num string, page, pageSize int) ([]CaseKeyInfo, error) {
24 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 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 46
 	return keys, err
31 47
 }
32 48
 
33 49
 // GetKeysCountByCase 根据案场获取钥匙数量
34
-func (m *CaseDAO) GetKeysCountByCase(caseid string) (int, error) {
50
+func (m *CaseDAO) GetKeysCountByCase(caseid, num string) (int, error) {
35 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 57
 	return len(keys), err
38 58
 }
39 59
 
@@ -66,9 +86,9 @@ func (m *CaseDAO) GetKeyByID(keyid string) (*model.TaCaseKey, error) {
66 86
 // AddKey 新增单个钥匙信息
67 87
 func (m *CaseDAO) AddKey(key model.TaCaseKey) (*model.TaCaseKey, error) {
68 88
 	key.KeyId = utils.GetGUID()
69
-	key.Status = models.STATUS_NORMAL
89
+	key.Status = STATUS_UNLOCK
70 90
 	key.CreateDate = time.Now()
71
-	_, err := m.db.Insert(&key)
91
+	_, err := m.db.Insert(key)
72 92
 	return &key, err
73 93
 }
74 94
 
@@ -91,3 +111,13 @@ func (m *CaseDAO) UnLockKey(keyid string) error {
91 111
 	_, err := m.db.Exec(sql)
92 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 View File

@@ -30,7 +30,8 @@ func (m *CaseDAO) GetCaseTable(caseids string, page int, pageSize int) ([]CaseTa
30 30
 	sql := `select a.*,b.area_name,c.case_name from sys_case_table a 
31 31
 	inner join sys_case_area b on a.area_id=b.area_id
32 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 35
 		strings.Replace(caseids, ",", "','", -1) + `')`
35 36
 
36 37
 	err := m.db.Sql(sql).Find(&tables)
@@ -62,7 +63,7 @@ func (m *CaseDAO) AddCaseTable(area *model.SysCaseTable) (*model.SysCaseTable, e
62 63
 	area.TableId = utils.GetGUID()
63 64
 	area.Status = models.STATUS_NORMAL
64 65
 	area.CreateDate = time.Now()
65
-	user := m.ctx.Get("user").(*model.SysUser)
66
+	user := m.ctx.Get("user").(model.SysUser)
66 67
 	area.CreateUser = user.UserId
67 68
 	_, err := m.db.Insert(area)
68 69
 	return area, err

+ 17
- 7
models/cases/tag.go View File

@@ -7,31 +7,40 @@ import (
7 7
 	"strconv"
8 8
 	"strings"
9 9
 	"time"
10
+
11
+	"github.com/astaxie/beego"
10 12
 )
11 13
 
12 14
 // GetTagCount 获取标签总数
13 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 24
 	return len(tags), err
17 25
 }
18 26
 
19 27
 // TagInfo 标签
20 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 33
 // GetTagList 根据案场获取标签
26 34
 func (m *CaseDAO) GetTagList(caseids string, page int, pageSize int) ([]TagInfo, error) {
27 35
 	var tags []TagInfo
36
+	offset := (page - 1) * pageSize
28 37
 	sql := `select tag.*,c.case_names from sys_tag tag inner join (
29 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 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 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 44
 	return tags, err
36 45
 }
37 46
 
@@ -66,7 +75,7 @@ func (m *CaseDAO) AddTag(tag model.SysTag) (*model.SysTag, error) {
66 75
 	tag.TagId = utils.GetGUID()
67 76
 	tag.Status = models.STATUS_NORMAL
68 77
 	tag.CreateDate = time.Now()
69
-	_, err := m.db.Insert(&tag)
78
+	_, err := m.db.Insert(tag)
70 79
 	return &tag, err
71 80
 }
72 81
 
@@ -81,6 +90,7 @@ func (m *CaseDAO) UpdateTag(tag model.SysTag) error {
81 90
 
82 91
 // DeleteTag 刪除标签
83 92
 func (m *CaseDAO) DeleteTag(tagid string) error {
93
+	beego.Error(tagid)
84 94
 	var tag = model.SysTag{
85 95
 		TagId:  tagid,
86 96
 		Status: models.STATUS_DEL,

+ 8
- 2
models/constant.go View File

@@ -2,8 +2,14 @@ package models
2 2
 
3 3
 // 状态列表
4 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 View File

@@ -0,0 +1,33 @@
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 View File

@@ -0,0 +1,51 @@
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 View File

@@ -28,6 +28,8 @@ func NewCustomerDAO(ctx *utils.Context) *CustomerDAO {
28 28
 
29 29
 // CustWithWXList 客户列表
30 30
 func (m *CustomerDAO) CustWithWXList(phone string, page ...int) ([]CustWithWX, int64, error) {
31
+	org := m.ctx.Get("org").(model.SysOrg)
32
+
31 33
 	if phone == "" {
32 34
 		phone = "%"
33 35
 	} else {
@@ -49,7 +51,14 @@ func (m *CustomerDAO) CustWithWXList(phone string, page ...int) ([]CustWithWX, i
49 51
 	}
50 52
 
51 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 62
 		FROM
54 63
 			ta_customer t
55 64
 		LEFT JOIN ta_user_mapping s ON t.customer_id = s.user_id
@@ -58,13 +67,14 @@ func (m *CustomerDAO) CustWithWXList(phone string, page ...int) ([]CustWithWX, i
58 67
 		WHERE
59 68
 			t.phone like ?
60 69
 		AND t.status > ?
70
+		AND t.org_id = '` + org.OrgId + `'
61 71
 		ORDER BY
62 72
 			t.create_date DESC
63 73
 	`
64 74
 
65 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 78
 	if err != nil {
69 79
 		return nil, 0, err
70 80
 	}
@@ -188,6 +198,6 @@ func (m *CustomerDAO) SaveCustomer(cust *model.TaCustomer) error {
188 198
 	cust.CreateDate = time.Now().Local()
189 199
 	cust.Status = models.STATUS_NORMAL
190 200
 
191
-	_, err := m.db.Insert(&cust)
201
+	_, err := m.db.Insert(cust)
192 202
 	return err
193 203
 }

+ 1
- 0
models/customer/types.go View File

@@ -9,4 +9,5 @@ type CustWithWX struct {
9 9
 	model.TaCustomer    `xorm:"extends"`
10 10
 	model.TaUserMapping `xorm:"extends"`
11 11
 	Points              int
12
+	MapUser             string
12 13
 }

+ 73
- 0
models/goods/goods.go View File

@@ -1,7 +1,13 @@
1 1
 package goods
2 2
 
3 3
 import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
4 7
 	"spaceofcheng/services/utils"
8
+	"time"
9
+
10
+	"github.com/yl10/kit/guid"
5 11
 
6 12
 	"github.com/go-xorm/xorm"
7 13
 )
@@ -19,3 +25,70 @@ func NewGoodsDAO(ctx *utils.Context) *GoodsDAO {
19 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 View File

@@ -0,0 +1,48 @@
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 View File

@@ -18,7 +18,7 @@ func (m *GoodsDAO) GetGoodsSpecCount(caseids string) (int, error) {
18 18
 // GetGoodsSpec 根据案场获取商品规格
19 19
 func (m *GoodsDAO) GetGoodsSpec(caseids string, page int, pageSize int) ([]model.TdSpec, error) {
20 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 22
 	return goodsSpec, err
23 23
 }
24 24
 

+ 3
- 3
models/goods/type.go View File

@@ -19,7 +19,7 @@ func (m *GoodsDAO) GetGoodsTypeCount(caseids string) (int, error) {
19 19
 // GetGoodsType 根据案场获取商品类型
20 20
 func (m *GoodsDAO) GetGoodsType(caseids string, page int, pageSize int) ([]model.TdGoodsType, error) {
21 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 23
 	return goodstype, err
24 24
 }
25 25
 
@@ -41,9 +41,9 @@ func (m *GoodsDAO) AddGoodsType(goodsType *model.TdGoodsType) (*model.TdGoodsTyp
41 41
 	goodsType.TypeId = utils.GetGUID()
42 42
 	goodsType.CreateDate = time.Now()
43 43
 	goodsType.Status = models.STATUS_NORMAL
44
-	user := m.ctx.Get("user").(*model.SysUser)
44
+	user := m.ctx.Get("user").(model.SysUser)
45 45
 	goodsType.CreateUser = user.UserId
46
-	_, err := m.db.Insert(&goodsType)
46
+	_, err := m.db.Insert(goodsType)
47 47
 	return goodsType, err
48 48
 }
49 49
 

+ 17
- 0
models/goods/types.go View File

@@ -0,0 +1,17 @@
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 View File

@@ -8,6 +8,8 @@ import (
8 8
 	"strings"
9 9
 	"time"
10 10
 
11
+	"github.com/astaxie/beego"
12
+
11 13
 	"github.com/go-xorm/builder"
12 14
 )
13 15
 
@@ -21,10 +23,9 @@ type CmsCaseInfo struct {
21 23
 func (m *MessageDAO) GetCmsCaseList(name, caseids string, page int, pageSize int) ([]CmsCaseInfo, error) {
22 24
 	var cases []CmsCaseInfo
23 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 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 29
 	err := m.db.Sql(sql).Find(&cases)
29 30
 	return cases, err
30 31
 }
@@ -33,6 +34,7 @@ func (m *MessageDAO) GetCmsCaseList(name, caseids string, page int, pageSize int
33 34
 func (m *MessageDAO) GetCmsCaseByOrg(orgid string) ([]model.TaCmsCase, error) {
34 35
 	var cases []model.TaCmsCase
35 36
 	err := m.db.Where("org_id=?", orgid).Find(&cases)
37
+	beego.Error(cases)
36 38
 	return cases, err
37 39
 }
38 40
 
@@ -60,8 +62,11 @@ type CmsCase struct {
60 62
 // GetCmsCaseByID 获取项目专题详情
61 63
 func (m *MessageDAO) GetCmsCaseByID(cmscaseid string) (*CmsCase, error) {
62 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 68
 	if err != nil {
69
+		beego.Error(err)
65 70
 		return nil, err
66 71
 	}
67 72
 	if len(cases) > 0 {
@@ -150,7 +155,8 @@ func (m *MessageDAO) DelCmsCaseImg(cmscaseid string) error {
150 155
 
151 156
 // SaveCmsCaseImg 保存项目专题对应的图片
152 157
 func (m *MessageDAO) SaveCmsCaseImg(img model.TaCmsCaseImage) error {
158
+	img.CmsCaseImageId = utils.GetGUID()
153 159
 	img.Status = models.STATUS_NORMAL
154
-	_, err := m.db.Insert(&img)
160
+	_, err := m.db.Insert(img)
155 161
 	return err
156 162
 }

+ 8
- 5
models/message/image.go View File

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

+ 1
- 1
models/message/location.go View File

@@ -37,7 +37,7 @@ func (m *MessageDAO) AddLocation(location model.TdCmsImageLocation) (*model.TdCm
37 37
 	location.LocationId = utils.GetGUID()
38 38
 	location.Status = models.STATUS_NORMAL
39 39
 	location.IsSys = ISSYS
40
-	_, err := m.db.Insert(&location)
40
+	_, err := m.db.Insert(location)
41 41
 	return &location, err
42 42
 }
43 43
 

+ 5
- 2
models/message/message.go View File

@@ -33,7 +33,7 @@ func (m *MessageDAO) GetCmsInfoList(title, orgid string, page int, pageSize int)
33 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 37
 	return cmsinfos, err
38 38
 }
39 39
 
@@ -78,7 +78,7 @@ func (m *MessageDAO) AddCmsInfo(cmsinfo model.TaCmsInfo) (*model.TaCmsInfo, erro
78 78
 	cmsinfo.CreateDate = time.Now()
79 79
 	user := m.ctx.Get("user").(model.SysUser)
80 80
 	cmsinfo.CreateUser = user.UserId
81
-	_, err := m.db.Insert(&cmsinfo)
81
+	_, err := m.db.Insert(cmsinfo)
82 82
 	return &cmsinfo, err
83 83
 }
84 84
 
@@ -86,6 +86,9 @@ func (m *MessageDAO) AddCmsInfo(cmsinfo model.TaCmsInfo) (*model.TaCmsInfo, erro
86 86
 func (m *MessageDAO) UpdateCmsInfo(cmsinfo model.TaCmsInfo) error {
87 87
 	var cols = []string{
88 88
 		"info_name",
89
+		"info_url",
90
+		"location_id",
91
+		"case_id",
89 92
 	}
90 93
 	_, err := m.db.Cols(cols...).Where("info_id=?", cmsinfo.InfoId).Update(cmsinfo)
91 94
 	return err

+ 4
- 5
models/message/news.go View File

@@ -24,15 +24,14 @@ func (m *MessageDAO) GetNewsList(locationid, orgid string, page int, pageSize in
24 24
 	sql := `select * from ta_cms_news new left join (
25 25
 		select b.news_id,GROUP_CONCAT(a.location_name) location_names,GROUP_CONCAT(a.location_id) location_ids 
26 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 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 30
 	if locationid != "" {
31 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 35
 	err := m.db.Sql(sql).Find(&news)
37 36
 	return news, err
38 37
 }
@@ -88,9 +87,9 @@ func (m *MessageDAO) GetNewsLocationByID(newsid string) ([]model.TaCmsLocation,
88 87
 func (m *MessageDAO) AddNews(news model.TaCmsNews) (*model.TaCmsNews, error) {
89 88
 	news.NewsId = utils.GetGUID()
90 89
 	news.CreateDate = time.Now()
91
-	user := m.ctx.Get("user").(*model.SysUser)
90
+	user := m.ctx.Get("user").(model.SysUser)
92 91
 	news.CreateUser = user.UserId
93
-	_, err := m.db.Insert(&news)
92
+	_, err := m.db.Insert(news)
94 93
 	return &news, err
95 94
 }
96 95
 

+ 1
- 0
models/model/sys_case_area.go View File

@@ -14,4 +14,5 @@ type SysCaseArea struct {
14 14
 	Status        int       `xorm:"SMALLINT(6)"`
15 15
 	CreateDate    time.Time `xorm:"DATETIME"`
16 16
 	CreateUser    string    `xorm:"VARCHAR(64)"`
17
+	Order         int       `xorm:"INT(11)"`
17 18
 }

+ 6
- 8
models/model/sys_case_user.go View File

@@ -5,14 +5,12 @@ import (
5 5
 )
6 6
 
7 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 14
 	Status     int       `xorm:"SMALLINT(6)"`
17 15
 	CreateDate time.Time `xorm:"DATETIME"`
18 16
 }

+ 2
- 1
models/model/sys_user_case.go View File

@@ -6,8 +6,9 @@ import (
6 6
 
7 7
 type SysUserCase struct {
8 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 10
 	CaseName   string    `xorm:"VARCHAR(100)"`
11
+	IsCreated  int       `xorm:"TINYINT(1)"`
11 12
 	IsBelong   int       `xorm:"TINYINT(1)"`
12 13
 	Status     int       `xorm:"SMALLINT(6)"`
13 14
 	CreateDate time.Time `xorm:"DATETIME"`

+ 1
- 2
models/model/sys_wechat_conf.go View File

@@ -3,8 +3,7 @@ package model
3 3
 type SysWechatConf struct {
4 4
 	ConfId string `xorm:"VARCHAR(64)"`
5 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 7
 	Appid  string `xorm:"VARCHAR(50)"`
9 8
 	Secret string `xorm:"VARCHAR(50)"`
10 9
 	Token  string `xorm:"VARCHAR(50)"`

+ 15
- 21
models/model/ta_account_change.go View File

@@ -5,25 +5,19 @@ import (
5 5
 )
6 6
 
7 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 View File

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

+ 2
- 3
models/model/ta_cms_case_image.go View File

@@ -5,7 +5,6 @@ type TaCmsCaseImage struct {
5 5
 	CmsCaseId      string `xorm:"VARCHAR(64)"`
6 6
 	CaseImageUrl   string `xorm:"TEXT"`
7 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 View File

@@ -5,16 +5,17 @@ import (
5 5
 )
6 6
 
7 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 View File

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

+ 1
- 0
models/model/ta_customer.go View File

@@ -17,4 +17,5 @@ type TaCustomer struct {
17 17
 	RecommendName string    `xorm:"VARCHAR(50)"`
18 18
 	CreateDate    time.Time `xorm:"DATETIME"`
19 19
 	Status        int       `xorm:"SMALLINT(6)"`
20
+	UserId        string    `xorm:"VARCHAR(64)"`
20 21
 }

+ 0
- 25
models/model/ta_experience_card.go View File

@@ -1,25 +0,0 @@
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 View File

@@ -12,13 +12,13 @@ type TaGoodsOrders struct {
12 12
 	AreaId     string    `xorm:"VARCHAR(64)"`
13 13
 	AreaName   string    `xorm:"VARCHAR(50)"`
14 14
 	TableId    string    `xorm:"VARCHAR(64)"`
15
-	TableName  string    `xorm:"VARCHAR(50)"`
15
+	TableNo    string    `xorm:"VARCHAR(50)"`
16 16
 	Amount     string    `xorm:"DECIMAL(8,2)"`
17 17
 	CreateDate time.Time `xorm:"DATETIME"`
18 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 22
 	UserId       string `xorm:"VARCHAR(64)"`
23 23
 	UserName     string `xorm:"VARCHAR(50)"`
24 24
 	OrdersNum    int    `xorm:"INT(11)"`

+ 4
- 6
models/model/ta_user_mapping.go View File

@@ -1,12 +1,10 @@
1 1
 package model
2 2
 
3 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 8
 	Openid      string `xorm:"VARCHAR(200)"`
11 9
 	Uuid        string `xorm:"VARCHAR(200)"`
12 10
 	AccountInfo string `xorm:"TEXT"`

+ 15
- 0
models/sys.go View File

@@ -139,3 +139,18 @@ func (m *SysDAO) UpdateUserMapping(user *model.TaUserMapping) error {
139 139
 		Update(&user)
140 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 View File

@@ -35,7 +35,7 @@ func (m *RoleDAO) GetRoleCount(caseids string) (int, error) {
35 35
 // GetRoleList 根据案场获取角色
36 36
 func (m *RoleDAO) GetRoleList(caseids string, page int, pageSize int) ([]model.SysRole, error) {
37 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 39
 	return roles, err
40 40
 }
41 41
 
@@ -67,12 +67,12 @@ func (m *RoleDAO) GetRoleMenuByRoleID(roleid string) ([]model.SysMenu, error) {
67 67
 }
68 68
 
69 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 78
 // UpdateRole 修改角色

+ 12
- 5
models/system/user.go View File

@@ -47,7 +47,7 @@ func (m *UserDAO) GetUserList(username, typeid, caseids string, page int, pageSi
47 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 52
 	err := m.db.Sql(sql).Find(&users)
53 53
 	return users, err
@@ -59,7 +59,7 @@ func (m *UserDAO) GetUserList(username, typeid, caseids string, page int, pageSi
59 59
 	// if typeid != "" {
60 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 63
 	// return users, err
64 64
 }
65 65
 
@@ -255,11 +255,18 @@ func (m *UserDAO) DelUserBelongCase(userid string) error {
255 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 265
 // SaveUserCase 保存用户对应案场信息
259 266
 func (m *UserDAO) SaveUserCase(usercase model.SysUserCase) error {
260 267
 	usercase.CreateDate = time.Now()
261 268
 	usercase.Status = models.STATUS_NORMAL
262
-	_, err := m.db.Insert(&usercase)
269
+	_, err := m.db.Insert(usercase)
263 270
 	return err
264 271
 }
265 272
 
@@ -297,7 +304,7 @@ func (m *UserDAO) UpdatePassword(userID, newPass string) error {
297 304
 // SaveUserMapping 保存用户映射信息
298 305
 func (m *UserDAO) SaveUserMapping(usermapping *model.TaUserMapping) error {
299 306
 	usermapping.MappingId = utils.GetGUID()
300
-	_, err := m.db.Insert(&usermapping)
307
+	_, err := m.db.Insert(usermapping)
301 308
 	return err
302 309
 }
303 310
 
@@ -326,7 +333,7 @@ func (m *UserDAO) UpdateCustomerHeadImg(customerid, username, imgurl string) err
326 333
 // GetUserCustomer 获取我的推荐客户
327 334
 func (m *UserDAO) GetUserCustomer(userid string, page int, pageSize int) ([]model.TaCustomer, error) {
328 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 337
 	return customers, err
331 338
 }
332 339
 

+ 55
- 37
routers/common.go View File

@@ -4,6 +4,7 @@ import (
4 4
 	"spaceofcheng/services/controllers"
5 5
 	"spaceofcheng/services/controllers/cases"
6 6
 	"spaceofcheng/services/controllers/channel"
7
+	"spaceofcheng/services/controllers/course"
7 8
 	"spaceofcheng/services/controllers/customer"
8 9
 	"spaceofcheng/services/controllers/goods"
9 10
 	"spaceofcheng/services/controllers/message"
@@ -73,55 +74,72 @@ func getCommonRoutes() beego.LinkNamespace {
73 74
 		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "put:SaveCmsCase"),
74 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 126
 		beego.NSRouter("/channel", &channel.ChannelController{}, "get:GetChannelList"),
91 127
 		beego.NSRouter("/channel/:channelId", &channel.ChannelController{}, "get:GetChannelById"),
92 128
 		beego.NSRouter("/channel", &channel.ChannelController{}, "post:SaveChannel"),
93 129
 		beego.NSRouter("/channel", &channel.ChannelController{}, "put:SaveChannel"),
94 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 133
 		beego.NSRouter("/role", &system.RoleController{}, "get:GetRoleList"),
120 134
 		beego.NSRouter("/role/:roleid", &system.RoleController{}, "get:GetRoleByID"),
121 135
 		beego.NSRouter("/role", &system.RoleController{}, "post:SaveCaseRole"),
122 136
 		beego.NSRouter("/role", &system.RoleController{}, "put:SaveCaseRole"),
123 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 144
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
127 145
 
@@ -129,6 +147,6 @@ func getCommonRoutes() beego.LinkNamespace {
129 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 View File

@@ -20,7 +20,7 @@ func getGuestRoutes() beego.LinkNamespace {
20 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 26
 		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),

+ 5
- 5
routers/wechat.go View File

@@ -36,11 +36,11 @@ func getWechatRoutes() beego.LinkNamespace {
36 36
 		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
37 37
 
38 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 45
 		// cms
46 46
 		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoList"),

+ 14
- 0
service/cases/area.go View File

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

+ 33
- 4
service/cases/cases.go View File

@@ -3,21 +3,26 @@ package cases
3 3
 import (
4 4
 	"spaceofcheng/services/models/cases"
5 5
 	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/models/system"
6 7
 	"spaceofcheng/services/service"
7 8
 	"spaceofcheng/services/utils"
9
+
10
+	"github.com/astaxie/beego"
8 11
 )
9 12
 
10 13
 // CaseServ 系统处理
11 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 20
 // NewCaseServ 初始化
17 21
 func NewCaseServ(ctx *utils.Context) *CaseServ {
18 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,12 +31,17 @@ func (s *CaseServ) GetCases(caseids, casename string, page, pageSize int) (map[s
26 31
 	if pageSize == 0 {
27 32
 		pageSize = service.PAGENUM
28 33
 	}
34
+	if page == 0 {
35
+		page = 1
36
+	}
29 37
 	cases, err := s.dao.GetCaseList(caseids, casename, page, pageSize)
30 38
 	if err != nil {
39
+		beego.Error(err)
31 40
 		return nil, err
32 41
 	}
33 42
 	total, err := s.dao.GetCaseCount(caseids, casename)
34 43
 	if err != nil {
44
+		beego.Error(err)
35 45
 		return nil, err
36 46
 	}
37 47
 
@@ -53,8 +63,27 @@ func (s *CaseServ) GetCaseByID(caseid string) (*model.SysCase, error) {
53 63
 func (s *CaseServ) SaveCase(caseinfo model.SysCase) (*model.SysCase, error) {
54 64
 	var newInfo *model.SysCase
55 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 73
 	if caseinfo.CaseId == "" {
57 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 87
 	} else {
59 88
 		err = s.dao.UpdateCase(caseinfo)
60 89
 		newInfo = &caseinfo

+ 13
- 1
service/cases/caseuser.go View File

@@ -1,6 +1,9 @@
1 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 8
 // GetCaseUserByCase 根据案场id获取案场相关人员信息
6 9
 func (s *CaseServ) GetCaseUserByCase(caseid string) ([]model.SysCaseUser, error) {
@@ -24,6 +27,15 @@ func (s *CaseServ) GetCaseUserByID(userid string) (*model.SysCaseUser, error) {
24 27
 func (s *CaseServ) SaveCaseUser(caseuser model.SysCaseUser) (*model.SysCaseUser, error) {
25 28
 	var newInfo *model.SysCaseUser
26 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 39
 	if caseuser.CaseUserId == "" {
28 40
 		newInfo, err = s.dao.AddCaseUser(caseuser)
29 41
 	} else {

+ 11
- 0
service/cases/equipment.go View File

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

+ 21
- 6
service/cases/key.go View File

@@ -1,10 +1,14 @@
1 1
 package cases
2 2
 
3 3
 import (
4
+	"spaceofcheng/services/models/cases"
4 5
 	"spaceofcheng/services/models/model"
5 6
 	"spaceofcheng/services/service"
6 7
 	"spaceofcheng/services/utils"
7 8
 	"strconv"
9
+	"time"
10
+
11
+	"github.com/astaxie/beego"
8 12
 )
9 13
 
10 14
 // GetKeysByCase 根据案场获取钥匙信息
@@ -16,6 +20,7 @@ func (s *CaseServ) GetKeysByCase(caseid, num string, page, pageSize int) (map[st
16 20
 			isdict = true
17 21
 		}
18 22
 	}
23
+
19 24
 	if !isdict {
20 25
 		return nil, utils.LogError("您没有该案场的权限!")
21 26
 	}
@@ -23,22 +28,29 @@ func (s *CaseServ) GetKeysByCase(caseid, num string, page, pageSize int) (map[st
23 28
 	if pageSize == 0 {
24 29
 		pageSize = service.PAGENUM
25 30
 	}
31
+
26 32
 	keys, err := s.dao.GetKeysByCase(caseid, num, page, pageSize)
27 33
 	if err != nil {
34
+		beego.Error(err)
28 35
 		return nil, err
29 36
 	}
30
-	total, err := s.dao.GetCaseCount(caseid, num)
37
+
38
+	total, err := s.dao.GetKeysCountByCase(caseid, num)
31 39
 	if err != nil {
40
+		beego.Error(err)
32 41
 		return nil, err
33 42
 	}
34 43
 
35 44
 	for index, key := range keys {
36 45
 		use, err := s.dao.GetCurrentKey(key.KeyId)
37 46
 		if err != nil {
47
+			beego.Error(err)
38 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 56
 	return map[string]interface{}{
@@ -57,9 +69,12 @@ func (s *CaseServ) AddKeys(orgid, caseid string, beginnum, endnum int) error {
57 69
 
58 70
 	for i := beginnum; i <= endnum; i++ {
59 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 79
 		_, err := s.dao.AddKey(key)
65 80
 		if err != nil {

+ 11
- 0
service/cases/table.go View File

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

+ 19
- 0
service/cases/tag.go View File

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

+ 20
- 0
service/course/course.go View File

@@ -0,0 +1,20 @@
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 View File

@@ -0,0 +1,41 @@
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 View File

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

+ 15
- 0
service/goods/spec.go View File

@@ -1,8 +1,11 @@
1 1
 package goods
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/models/model"
5 6
 	"spaceofcheng/services/service"
7
+
8
+	"github.com/astaxie/beego"
6 9
 )
7 10
 
8 11
 // GetGoodsSpec 获取商品规格
@@ -10,12 +13,17 @@ func (s *GoodsServ) GetGoodsSpec(caseids string, page int, pageSize int) (map[st
10 13
 	if pageSize == 0 {
11 14
 		pageSize = service.PAGENUM
12 15
 	}
16
+	if page == 0 {
17
+		page = 1
18
+	}
13 19
 	specs, err := s.dao.GetGoodsSpec(caseids, page, pageSize)
14 20
 	if err != nil {
21
+		beego.Error(err)
15 22
 		return nil, err
16 23
 	}
17 24
 	total, err := s.dao.GetGoodsSpecCount(caseids)
18 25
 	if err != nil {
26
+		beego.Error(err)
19 27
 		return nil, err
20 28
 	}
21 29
 
@@ -35,6 +43,13 @@ func (s *GoodsServ) GetGoodsSpecByID(specid string) (*model.TdSpec, error) {
35 43
 
36 44
 // SaveGoodsSpec 保存商品类型
37 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 53
 	var err error
39 54
 	if goodsSpec.SpecId == "" {
40 55
 		_, err = s.dao.AddGoodsSpec(&goodsSpec)

+ 16
- 0
service/goods/type.go View File

@@ -1,8 +1,11 @@
1 1
 package goods
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/models/model"
5 6
 	"spaceofcheng/services/service"
7
+
8
+	"github.com/astaxie/beego"
6 9
 )
7 10
 
8 11
 // GetGoodsType 获取商品类型
@@ -10,12 +13,17 @@ func (s *GoodsServ) GetGoodsType(caseids string, page int, pageSize int) (map[st
10 13
 	if pageSize == 0 {
11 14
 		pageSize = service.PAGENUM
12 15
 	}
16
+	if page == 0 {
17
+		page = 1
18
+	}
13 19
 	types, err := s.dao.GetGoodsType(caseids, page, pageSize)
14 20
 	if err != nil {
21
+		beego.Error(err)
15 22
 		return nil, err
16 23
 	}
17 24
 	total, err := s.dao.GetGoodsTypeCount(caseids)
18 25
 	if err != nil {
26
+		beego.Error(err)
19 27
 		return nil, err
20 28
 	}
21 29
 
@@ -35,6 +43,14 @@ func (s *GoodsServ) GetGoodsTypeByID(typeid string) (*model.TdGoodsType, error)
35 43
 
36 44
 // SaveGoodsType 保存商品类型
37 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 54
 	var err error
39 55
 	if goodsType.TypeId == "" {
40 56
 		_, err = s.dao.AddGoodsType(&goodsType)

+ 25
- 0
service/message/cmscase.go View File

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

+ 28
- 0
service/message/image.go View File

@@ -1,8 +1,16 @@
1 1
 package message
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/models/model"
5 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 16
 // GetImgList 获取图片列表
@@ -10,12 +18,17 @@ func (s *MessageServ) GetImgList(orgid string, page int, pageSize int) (map[stri
10 18
 	if pageSize == 0 {
11 19
 		pageSize = service.PAGENUM
12 20
 	}
21
+	if page == 0 {
22
+		page = 1
23
+	}
13 24
 	infos, err := s.dao.GetImgList(orgid, page, pageSize)
14 25
 	if err != nil {
26
+		beego.Error(err)
15 27
 		return nil, err
16 28
 	}
17 29
 	total, err := s.dao.GetImgListCount(orgid)
18 30
 	if err != nil {
31
+		beego.Error(err)
19 32
 		return nil, err
20 33
 	}
21 34
 
@@ -41,6 +54,21 @@ func (s *MessageServ) GetImgByID(imgid string) (*model.TaCmsImages, error) {
41 54
 
42 55
 // SaveImg 保存轮播图信息
43 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 72
 	if imginfo.ImageId == "" {
45 73
 		newinfo, err := s.dao.AddCmsImg(imginfo)
46 74
 		return newinfo, err

+ 7
- 0
service/message/message.go View File

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

+ 32
- 0
service/message/news.go View File

@@ -1,9 +1,12 @@
1 1
 package message
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/models/message"
5 6
 	"spaceofcheng/services/models/model"
6 7
 	"spaceofcheng/services/service"
8
+
9
+	"github.com/astaxie/beego"
7 10
 )
8 11
 
9 12
 // GetNewsList 获取咨询列表
@@ -11,12 +14,17 @@ func (s *MessageServ) GetNewsList(locationid, orgid string, page int, pageSize i
11 14
 	if pageSize == 0 {
12 15
 		pageSize = service.PAGENUM
13 16
 	}
17
+	if page == 0 {
18
+		page = 1
19
+	}
14 20
 	infos, err := s.dao.GetNewsList(locationid, orgid, page, pageSize)
15 21
 	if err != nil {
22
+		beego.Error(err)
16 23
 		return nil, err
17 24
 	}
18 25
 	total, err := s.dao.GetNewsListCount(locationid, orgid)
19 26
 	if err != nil {
27
+		beego.Error(err)
20 28
 		return nil, err
21 29
 	}
22 30
 
@@ -38,10 +46,12 @@ func (s *MessageServ) GetNewsByLocation(locationid, orgid string) ([]model.TaCms
38 46
 func (s *MessageServ) GetNewsByID(newsid string) (*message.CmsNews, error) {
39 47
 	info, err := s.dao.GetNewsByID(newsid)
40 48
 	if err != nil {
49
+		beego.Error(err)
41 50
 		return nil, err
42 51
 	}
43 52
 	newslocation, err := s.dao.GetNewsLocationByID(newsid)
44 53
 	if err != nil {
54
+		beego.Error(err)
45 55
 		return nil, err
46 56
 	}
47 57
 	info.NewsLocations = newslocation
@@ -52,6 +62,25 @@ func (s *MessageServ) GetNewsByID(newsid string) (*message.CmsNews, error) {
52 62
 func (s *MessageServ) SaveNews(news model.TaCmsNews, locationids string) (*model.TaCmsNews, error) {
53 63
 	var newInfo *model.TaCmsNews
54 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 84
 	if news.NewsId == "" {
56 85
 		newInfo, err = s.dao.AddNews(news)
57 86
 	} else {
@@ -59,14 +88,17 @@ func (s *MessageServ) SaveNews(news model.TaCmsNews, locationids string) (*model
59 88
 		newInfo = &news
60 89
 	}
61 90
 	if err != nil {
91
+		beego.Error(err)
62 92
 		return nil, err
63 93
 	}
64 94
 	err = s.dao.DelNewsLocation(newInfo.NewsId)
65 95
 	if err != nil {
96
+		beego.Error(err)
66 97
 		return nil, err
67 98
 	}
68 99
 	err = s.dao.SaveNewsLocation(newInfo.NewsId, locationids)
69 100
 	if err != nil {
101
+		beego.Error(err)
70 102
 		return nil, err
71 103
 	}
72 104
 	return newInfo, err

+ 5
- 0
service/sys.go View File

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

+ 12
- 0
service/system/role.go View File

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

+ 25
- 0
service/user.go View File

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

+ 8
- 2
utils/captcha.go View File

@@ -80,10 +80,13 @@ func (c *CaptchaEngine) SendCaptcha(phone string) {
80 80
 func (c *CaptchaEngine) ValidCaptcha(phone, cap string) error {
81 81
 	theCap, ok := c.capList[phone]
82 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 90
 		return errors.New("验证码已过期")
88 91
 	}
89 92
 
@@ -91,6 +94,9 @@ func (c *CaptchaEngine) ValidCaptcha(phone, cap string) error {
91 94
 		return errors.New("验证码不正确")
92 95
 	}
93 96
 
97
+	// 如果成功, 则注销
98
+	delete(c.capList, phone)
99
+
94 100
 	return nil
95 101
 }
96 102
 

+ 20
- 30
utils/pagenavi.go View File

@@ -1,21 +1,26 @@
1 1
 package utils
2 2
 
3 3
 import (
4
-	"errors"
5
-	"regexp"
6 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 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 24
 	if err != nil {
20 25
 		return 0, err
21 26
 	}
@@ -23,9 +28,9 @@ func GetPageList(db *xorm.Session, target interface{}, limit []int, sqlorArgs ..
23 28
 	cntStr := string(cntRes[0]["cnt"])
24 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 34
 	if err != nil {
30 35
 		return 0, err
31 36
 	}
@@ -33,29 +38,14 @@ func GetPageList(db *xorm.Session, target interface{}, limit []int, sqlorArgs ..
33 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 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 43
 	switch len(limit) {
54 44
 	case 1:
55
-		return sql + " LIMIT " + strconv.Itoa(limit[0]), args
45
+		return sql + " LIMIT " + strconv.Itoa(limit[0])
56 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 48
 	default:
59
-		return sql, args
49
+		return sql
60 50
 	}
61 51
 }

+ 0
- 71
utils/pagenavi_test.go View File

@@ -1,71 +0,0 @@
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 View File

@@ -0,0 +1,140 @@
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 View File

@@ -47,7 +47,7 @@ func SendSMS(smsType, tel string, messages ...string) {
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 52
 		message := strings.Join(messages, `","`)
53 53
 		if message != "" {

+ 35
- 0
utils/utils.go View File

@@ -2,6 +2,7 @@ package utils
2 2
 
3 3
 import (
4 4
 	"net/http"
5
+	"strconv"
5 6
 	"strings"
6 7
 )
7 8
 
@@ -33,3 +34,37 @@ func GetClientType(r *http.Request) string {
33 34
 
34 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 View File

@@ -0,0 +1,48 @@
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
+}