胡轶钦 6 years ago
parent
commit
5d4d95569e
73 changed files with 1490 additions and 283 deletions
  1. 2
    1
      conf/db.conf
  2. 40
    52
      controllers/auth.go
  3. BIN
      controllers/cases/services
  4. 6
    2
      controllers/cases/tag.go
  5. 6
    2
      controllers/channel/channel.go
  6. 7
    7
      controllers/context.go
  7. 28
    0
      controllers/course/course.go
  8. 9
    27
      controllers/customer/customer.go
  9. 27
    0
      controllers/goods/dicts.go
  10. 96
    2
      controllers/goods/goods.go
  11. 126
    0
      controllers/goods/order.go
  12. 7
    5
      controllers/goods/spec.go
  13. 7
    5
      controllers/goods/type.go
  14. 6
    2
      controllers/message/cmscase.go
  15. 1
    1
      controllers/message/image.go
  16. 6
    2
      controllers/message/location.go
  17. 10
    6
      controllers/user/user.go
  18. 0
    17
      log/common.2018-08-17.log
  19. 7
    0
      log/common.2018-08-24.log
  20. 0
    0
      log/common.2018-08-25.log
  21. 74
    7
      log/common.log
  22. 1
    0
      models/cases/area.go
  23. 13
    3
      models/cases/key.go
  24. 2
    0
      models/cases/table.go
  25. 6
    5
      models/cases/tag.go
  26. 2
    2
      models/channel/channel.go
  27. 48
    0
      models/course/course.go
  28. 43
    0
      models/course/order.go
  29. 1
    12
      models/customer/customer.go
  30. 195
    16
      models/goods/goods.go
  31. 57
    0
      models/goods/orders.go
  32. 1
    0
      models/goods/type.go
  33. 15
    1
      models/goods/types.go
  34. 6
    5
      models/message/cmscase.go
  35. 1
    1
      models/message/image.go
  36. 7
    0
      models/message/location.go
  37. 8
    6
      models/model/sys_case_user.go
  38. 1
    1
      models/model/sys_tag_case.go
  39. 1
    1
      models/model/sys_user_case.go
  40. 1
    1
      models/model/sys_wechat_conf.go
  41. 21
    15
      models/model/ta_account_change.go
  42. 3
    2
      models/model/ta_cms_case_image.go
  43. 28
    0
      models/model/ta_coupon_card2.go
  44. 1
    0
      models/model/ta_coupon_card_target.go
  45. 7
    0
      models/model/ta_coupon_card_target2.go
  46. 0
    2
      models/model/ta_course_orders.go
  47. 14
    0
      models/model/ta_course_orders_detail.go
  48. 1
    0
      models/model/ta_customer_card.go
  49. 4
    0
      models/model/ta_customer_course.go
  50. 19
    0
      models/model/ta_customer_course_detail.go
  51. 25
    0
      models/model/ta_experience_card.go
  52. 1
    1
      models/model/ta_forbid_user.go
  53. 22
    20
      models/model/ta_goods_orders.go
  54. 14
    0
      models/model/ta_stop_user.go
  55. 6
    4
      models/model/ta_user_mapping.go
  56. 48
    4
      models/system/user.go
  57. 11
    1
      routers/common.go
  58. 11
    0
      routers/guest.go
  59. 4
    0
      routers/wechat.go
  60. 10
    2
      service/cases/key.go
  61. 3
    3
      service/cases/tag.go
  62. 101
    11
      service/course/course.go
  63. 5
    0
      service/course/order.go
  64. 4
    3
      service/customer/customer.go
  65. 87
    0
      service/goods/goods.go
  66. 82
    1
      service/goods/orders.go
  67. 29
    7
      service/message/cmscase.go
  68. 9
    1
      service/message/location.go
  69. 1
    1
      service/sys.go
  70. 3
    0
      service/system/role.go
  71. 2
    2
      service/user.go
  72. 23
    0
      utils/permission.go
  73. 17
    11
      utils/wechat.go

+ 2
- 1
conf/db.conf View File

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

+ 40
- 52
controllers/auth.go View File

@@ -72,37 +72,48 @@ func (c *BaseController) authWechat(serv *service.SysServ) {
72 72
 		custID = custIDRaw.(string)
73 73
 	}
74 74
 
75
+	// 机构ID - 后面再思考机构问题
76
+	var orgID = "1"
77
+	// 微信配置
78
+	wxConf, err := serv.GetWeChatConfig(orgID)
79
+	if err != nil {
80
+		utils.LogError("查询微信配置失败: " + err.Error())
81
+		c.ResponseError(
82
+			errors.New("没有找到微信相关配置"),
83
+			http.StatusBadRequest,
84
+		)
85
+	}
86
+	utils.WxClientSingleton(orgID, wxConf)
87
+
75 88
 	// 用户微信信息
76 89
 	var wxDetail map[string]interface{}
77
-	detailRaw := c.GetSession("wechat_user")
78 90
 
91
+	detailRaw := c.GetSession("wechat_user")
79 92
 	if detailRaw != nil {
80 93
 		wxDetail = detailRaw.(map[string]interface{})
81
-	}
82
-
83
-	// DEV MODE
84
-	if c.RunMode == "dev" {
85
-		wxDetail = map[string]interface{}{
86
-			"openid":     " OPENID",
87
-			"nickname":   "NICKNAME",
88
-			"sex":        "1",
89
-			"province":   "PROVINCE",
90
-			"city":       "CITY",
91
-			"country":    "COUNTRY",
92
-			"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
93
-			"unionid":    "o6_bmasdasdsad6_2sgVt7hMZOPfL",
94
+	} else {
95
+		// DEV MODE
96
+		if c.RunMode == "dev" {
97
+			wxDetail = map[string]interface{}{
98
+				"openid":     "OPENID",
99
+				"nickname":   "NICKNAME",
100
+				"sex":        "1",
101
+				"province":   "PROVINCE",
102
+				"city":       "CITY",
103
+				"country":    "COUNTRY",
104
+				"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
105
+				"unionid":    "o6_bmasdasdsad6_2sgVt7hMZOPfL",
106
+			}
107
+		} else {
108
+			wxDetail = c.getWechatDetail(orgID, serv)
94 109
 		}
95
-	}
96
-
97
-	if custID == "" && wxDetail == nil {
98
-		wxDetail = c.getWechatDetail(serv)
99 110
 
100 111
 		c.SetSession("wechat_user", wxDetail)
101 112
 	}
102 113
 
103 114
 	c.Context.Set("wxInfo", wxDetail)
104 115
 
105
-	// 普通客户映射检查
116
+	// 户映射检查
106 117
 	userMap, err := serv.CheckWechatUserMapping(wxDetail)
107 118
 	if err != nil {
108 119
 		c.ResponseError(
@@ -110,10 +121,7 @@ func (c *BaseController) authWechat(serv *service.SysServ) {
110 121
 			http.StatusInternalServerError,
111 122
 		)
112 123
 	}
113
-
114
-	if userMap != nil {
115
-		c.Context.Set("userMap", *userMap)
116
-	}
124
+	c.Context.Set("userMap", *userMap)
117 125
 
118 126
 	if !c.needAuth() {
119 127
 		return
@@ -121,21 +129,13 @@ func (c *BaseController) authWechat(serv *service.SysServ) {
121 129
 
122 130
 	// 未登录或者绑定, 返回 401
123 131
 	if custID == "" && userMap.UserId == "" {
124
-		wxConf, ok := c.Configer[WeChatConf]
125
-		if ok {
126
-			c.ResponseData(
127
-				map[string]interface{}{
128
-					"appid": wxConf.String("appid"),
129
-				},
130
-				errors.New("用户未登录"),
131
-				http.StatusUnauthorized,
132
-			)
133
-		} else {
134
-			c.ResponseError(
135
-				errors.New("用户未登录"),
136
-				http.StatusUnauthorized,
137
-			)
138
-		}
132
+		c.ResponseData(
133
+			map[string]interface{}{
134
+				"appid": wxConf["appid"],
135
+			},
136
+			errors.New("用户未登录或绑定"),
137
+			http.StatusUnauthorized,
138
+		)
139 139
 	}
140 140
 
141 141
 	if custID == "" {
@@ -168,7 +168,7 @@ func (c *BaseController) needAuth() bool {
168 168
 }
169 169
 
170 170
 // getWechatDetail 获取微信个人信息详情
171
-func (c *BaseController) getWechatDetail(serv *service.SysServ) map[string]interface{} {
171
+func (c *BaseController) getWechatDetail(org string, serv *service.SysServ) map[string]interface{} {
172 172
 	// 微信 code
173 173
 	code := c.GetString("code")
174 174
 	if code == "" {
@@ -178,19 +178,7 @@ func (c *BaseController) getWechatDetail(serv *service.SysServ) map[string]inter
178 178
 		)
179 179
 	}
180 180
 
181
-	// TODO
182
-	// 机构先默认写死
183
-	conf, err := serv.GetWeChatConfig("1")
184
-	if err != nil {
185
-		utils.LogError("查询微信配置失败: " + err.Error())
186
-		c.ResponseError(
187
-			errors.New("没有找到微信相关配置"),
188
-			http.StatusBadRequest,
189
-		)
190
-	}
191
-
192
-	utils.InitWeChatClient(conf)
193
-	usr, err := utils.GetWxUserInfo(code)
181
+	usr, err := utils.WxClientFor(org).GetUserInfo(code)
194 182
 	if err != nil {
195 183
 		c.ResponseError(
196 184
 			utils.LogError("获取微信个人信息失败: "+err.Error()),

BIN
controllers/cases/services View File


+ 6
- 2
controllers/cases/tag.go View File

@@ -1,15 +1,19 @@
1 1
 package cases
2 2
 
3
-import "spaceofcheng/services/models/model"
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+)
4 6
 
5 7
 // GetTagList 获取标签列表
6 8
 func (c *CaseController) GetTagList() {
9
+	caseid := c.GetString("caseid")
7 10
 	cases := c.Context.Get("cases").([]model.SysUserCase)
8 11
 	caseIDs := c.GetCaseIDs(cases)
12
+
9 13
 	page, _ := c.GetInt("page")
10 14
 	pageSize, _ := c.GetInt("pagesize")
11 15
 
12
-	list, err := c.dao.GetTagList(caseIDs, page, pageSize)
16
+	list, err := c.dao.GetTagList(caseid, caseIDs, page, pageSize)
13 17
 	if err != nil {
14 18
 		c.ResponseError(err)
15 19
 	}

+ 6
- 2
controllers/channel/channel.go View File

@@ -21,8 +21,12 @@ func (c *ChannelController) Constructor() {
21 21
 
22 22
 // GetChannelList获取渠道列表
23 23
 func (c *ChannelController) GetChannelList() {
24
-	cases := c.Context.Get("cases").([]model.SysUserCase)
25
-	caseIDs := c.GetCaseIDs(cases)
24
+	caseIDs := c.GetString("caseid")
25
+	if caseIDs == "" {
26
+		cases := c.Context.Get("cases").([]model.SysUserCase)
27
+		caseIDs = c.GetCaseIDs(cases)
28
+	}
29
+
26 30
 	page, _ := c.GetInt("page")
27 31
 	pageSize, _ := c.GetInt("pagesize")
28 32
 	list, err := c.dao.GetChannelList(caseIDs, page, pageSize)

+ 7
- 7
controllers/context.go View File

@@ -9,13 +9,13 @@ import (
9 9
 * Context 说明
10 10
 * - 所有 stuct 类型均不是指针
11 11
 * - 包含内容如下
12
-* user					用户基本信息
13
-* customer			会员基本信息
14
-* userMap				用户/会员 映射第三方账户
15
-* wxInfo				微信信息
16
-* cases					用户所有案场信息
17
-* currentCase 	当前案场
18
-* org						用户当前组织
12
+* user					SysUser 									用户基本信息
13
+* customer			TaCustomer 								会员基本信息
14
+* userMap				TaUserMapping 						用户/会员 映射第三方账户
15
+* wxInfo				map[string]interface{} 		微信信息
16
+* cases					[]SysUserCase 						用户所有案场信息
17
+* currentCase		SysUserCase 							当前案场
18
+* org						SysOrg 										用户当前组织
19 19
 **/
20 20
 
21 21
 // initContext 初始化 Context

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

@@ -185,3 +185,31 @@ func (c *CourseController) DelCourseDetail() {
185 185
 	}
186 186
 	c.ResponseJSON("删除成功!")
187 187
 }
188
+
189
+// GetSelectCourseList 获取精选课程
190
+// func (c *CourseController) GetSelectCourseList() {
191
+// 	orgid := c.GetString("orgid")
192
+// 	courses, err := c.dao.GetSelectCourseList(orgid)
193
+// 	if err != nil {
194
+// 		c.ResponseError(err)
195
+// 	}
196
+// 	c.ResponseJSON(courses)
197
+// }
198
+
199
+// GetCourseByLocation 根据位置获取课程信息
200
+func (c *CourseController) GetCourseByLocation() {
201
+	locationid := c.GetString("locationid")
202
+	orgid := c.GetString("orgid")
203
+	if locationid == "selected" {
204
+		courses, err := c.dao.GetSelectCourseList(orgid)
205
+		if err != nil {
206
+			c.ResponseError(err)
207
+		}
208
+		c.ResponseJSON(courses)
209
+	}
210
+	courses, err := c.dao.GetCourseByLocation(orgid, locationid)
211
+	if err != nil {
212
+		c.ResponseError(err)
213
+	}
214
+	c.ResponseJSON(courses)
215
+}

+ 9
- 27
controllers/customer/customer.go View File

@@ -4,7 +4,6 @@ import (
4 4
 	"errors"
5 5
 	"net/http"
6 6
 	"spaceofcheng/services/controllers"
7
-	"spaceofcheng/services/models"
8 7
 	"spaceofcheng/services/models/model"
9 8
 	"spaceofcheng/services/service/customer"
10 9
 	"spaceofcheng/services/utils"
@@ -55,33 +54,16 @@ func (c *CustomerController) GetCustWXByID() {
55 54
 
56 55
 	userMap := userMapRaw.(model.TaUserMapping)
57 56
 
58
-	if userMap.UserType == models.USERMAP_USER {
59
-		// 如果是用户
60
-		userID := userMap.UserId
61
-		user, err := c.serv.GetCustUserByID(userID)
62
-		if err != nil {
63
-			utils.LogError(err)
64
-			c.ResponseError(errors.New("获取用户信息失败, 请重试"))
65
-		}
66
-
67
-		c.ResponseJSON(map[string]interface{}{
68
-			"user":     user,
69
-			"userType": userMap.UserType,
70
-		})
71
-	} else {
72
-		// 如果是客户
73
-		custID := userMap.UserId
74
-		cust, err := c.serv.GetCustWithWXByID(custID)
75
-		if err != nil {
76
-			utils.LogError(err)
77
-			c.ResponseError(errors.New("获取用户信息失败, 请重试"))
78
-		}
79
-
80
-		c.ResponseJSON(map[string]interface{}{
81
-			"customer": cust,
82
-			"userType": userMap.UserType,
83
-		})
57
+	custID := userMap.UserId
58
+	cust, err := c.serv.GetCustWithWXByID(custID)
59
+	if err != nil {
60
+		utils.LogError(err)
61
+		c.ResponseError(errors.New("获取用户信息失败, 请重试"))
84 62
 	}
63
+
64
+	c.ResponseJSON(map[string]interface{}{
65
+		"customer": cust,
66
+	})
85 67
 }
86 68
 
87 69
 // SignIn 微信登录

+ 27
- 0
controllers/goods/dicts.go View File

@@ -0,0 +1,27 @@
1
+package goods
2
+
3
+import (
4
+	"spaceofcheng/services/models/goods"
5
+)
6
+
7
+// GetMakeStatus 获取制作状态字典
8
+func (c GoodsController) GetMakeStatus() {
9
+	data := []map[string]string{
10
+		map[string]string{
11
+			"TypeId":   goods.MAKESTATUS_NOTSTARTED,
12
+			"TypeName": "未开始",
13
+		},
14
+		map[string]string{
15
+			"TypeId":   goods.MAKESTATUS_FINISHED,
16
+			"TypeName": "已完成",
17
+		},
18
+		map[string]string{
19
+			"TypeId":   goods.MAKESTATUS_CANCEL,
20
+			"TypeName": "已取消",
21
+		},
22
+	}
23
+
24
+	c.ResponseJSON(map[string]interface{}{
25
+		"list": data,
26
+	})
27
+}

+ 96
- 2
controllers/goods/goods.go View File

@@ -1,13 +1,19 @@
1 1
 package goods
2 2
 
3 3
 import (
4
+	"encoding/json"
5
+	"errors"
4 6
 	"spaceofcheng/services/controllers"
7
+	goodsModel "spaceofcheng/services/models/goods"
8
+	"spaceofcheng/services/models/model"
5 9
 	"spaceofcheng/services/service/goods"
10
+	"spaceofcheng/services/utils"
11
+	"strings"
6 12
 )
7 13
 
8 14
 // GoodsController 商品
9 15
 type GoodsController struct {
10
-	dao *goods.GoodsServ
16
+	serv *goods.GoodsServ
11 17
 	controllers.BaseController
12 18
 }
13 19
 
@@ -15,5 +21,93 @@ type GoodsController struct {
15 21
 // @Title Constructor
16 22
 // @Description 初始化 Controller, 系统自动调用
17 23
 func (c *GoodsController) Constructor() {
18
-	c.dao = goods.NewGoodsServ(c.Context)
24
+	c.serv = goods.NewGoodsServ(c.Context)
25
+}
26
+
27
+// GetListByCase 获取案场商品列表
28
+// 管理端
29
+func (c *GoodsController) GetListByCase() {
30
+	page, _ := c.GetInt("page")
31
+	pagesize, _ := c.GetInt("pagesize")
32
+	caseID := c.GetString("caseid")
33
+	goodsName := c.GetString("name")
34
+	goodsType := c.GetString("type")
35
+
36
+	goodsList, cnt, err := c.serv.GetGoodsListPageNavi(goodsName, goodsType, caseID, page, pagesize)
37
+	if err != nil {
38
+		c.ResponseError(err)
39
+	}
40
+
41
+	c.ResponseJSON(map[string]interface{}{
42
+		"list":     goodsList,
43
+		"pagesize": pagesize,
44
+		"pagenum":  cnt,
45
+		"page":     page,
46
+	})
47
+}
48
+
49
+// GetListForWechat 获取商品列表
50
+// 微信端
51
+func (c *GoodsController) GetListForWechat() {
52
+	caseID := c.GetString("caseid")
53
+	if caseID == "" {
54
+		c.ResponseError(errors.New("请指定案场"))
55
+	}
56
+
57
+	goodsList, err := c.serv.GetListByCase(caseID)
58
+	if err != nil {
59
+		c.ResponseError(err)
60
+	}
61
+
62
+	c.ResponseJSON(map[string]interface{}{
63
+		"list": goodsList,
64
+	})
65
+}
66
+
67
+// UpdateGoods 新增或者更新商品
68
+func (c *GoodsController) UpdateGoods() {
69
+	// 商品
70
+	gds := model.TaGoods{}
71
+	if err := c.ParseForm(&gds); err != nil {
72
+		utils.LogError("接收商品参数失败: " + err.Error())
73
+		c.ResponseError(errors.New("接收商品参数失败"))
74
+	}
75
+
76
+	// 图片
77
+	images := strings.Split(c.GetString("images"), ",")
78
+
79
+	// 规格
80
+	var specs []goodsModel.SpecWithPrice
81
+	specsJSON := c.GetString("specs")
82
+	if err := json.Unmarshal([]byte(specsJSON), &specs); err != nil {
83
+		utils.LogError("接收商品参数失败: " + err.Error())
84
+		c.ResponseError(errors.New("接收商品参数失败"))
85
+	}
86
+
87
+	goodsID := c.GetString(":id")
88
+	gds.GoodsId = goodsID
89
+
90
+	if err := c.serv.UpdateGoods(&gds, images, specs); err != nil {
91
+		c.ResponseError(err)
92
+	}
93
+
94
+	c.ResponseJSON(map[string]interface{}{
95
+		"goods":  gds,
96
+		"images": images,
97
+		"specs":  specs,
98
+	})
99
+}
100
+
101
+// DeleteGoods 删除商品
102
+func (c *GoodsController) DeleteGoods() {
103
+	goodsID := c.GetString(":id")
104
+	if goodsID == "" {
105
+		c.ResponseError(errors.New("没有需要删除的商品"))
106
+	}
107
+
108
+	if err := c.serv.DeleteGoods(goodsID); err != nil {
109
+		c.ResponseError(err)
110
+	}
111
+
112
+	c.ResponseJSON("ok")
19 113
 }

+ 126
- 0
controllers/goods/order.go View File

@@ -0,0 +1,126 @@
1
+package goods
2
+
3
+import (
4
+	"encoding/json"
5
+	"errors"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/utils"
8
+	"time"
9
+)
10
+
11
+// GetOrderList 获取商品订单
12
+// 管理端 - 统计查询
13
+func (c *GoodsController) GetOrderList() {
14
+	caseID := c.GetString("caseid")
15
+	if caseID == "" {
16
+		c.ResponseError(errors.New("请选择有效案场"))
17
+	}
18
+
19
+	userType := c.GetString("usertype")
20
+	status := c.GetString("status")
21
+	orderStart := c.GetString("startdate")
22
+	orderEnd := c.GetString("enddate")
23
+
24
+	page, _ := c.GetInt("page")
25
+	pagesize, _ := c.GetInt("pagesize")
26
+
27
+	var orderDate []time.Time
28
+
29
+	if orderStart != "" {
30
+		t, err := time.Parse("20060102150405", orderStart)
31
+		if err != nil {
32
+			utils.LogError("接收时间参数失败: " + err.Error())
33
+			c.ResponseError(errors.New("接收时间参数失败"))
34
+		}
35
+
36
+		orderDate = []time.Time{t}
37
+	}
38
+
39
+	if orderEnd != "" {
40
+		t, err := time.Parse("20060102150405", orderEnd)
41
+		if err != nil {
42
+			utils.LogError("接收时间参数失败: " + err.Error())
43
+			c.ResponseError(errors.New("接收时间参数失败"))
44
+		}
45
+
46
+		if orderDate == nil {
47
+			orderDate = make([]time.Time, 0)
48
+		}
49
+		orderDate = append(orderDate, t)
50
+	}
51
+
52
+	list, total, err := c.serv.GetOrderList(caseID, userType, status, orderDate, page, pagesize)
53
+	if err != nil {
54
+		c.ResponseError(err)
55
+	}
56
+
57
+	c.ResponseJSON(map[string]interface{}{
58
+		"list":     list,
59
+		"pagesize": pagesize,
60
+		"pagenum":  total,
61
+		"page":     page,
62
+	})
63
+}
64
+
65
+// GetOnlineOrder 获取在线订单
66
+// 管理端 - 有 websocket 操作
67
+func (c *GoodsController) GetOnlineOrder() {
68
+	caseID := c.GetString("caseid")
69
+	if caseID == "" {
70
+		c.ResponseError(errors.New("请选择有效案场"))
71
+	}
72
+
73
+	list, err := c.serv.GetOnLineOrders(caseID)
74
+	if err != nil {
75
+		c.ResponseError(err)
76
+	}
77
+
78
+	c.ResponseJSON(map[string]interface{}{
79
+		"list": list,
80
+	})
81
+}
82
+
83
+// PostOrder 下单
84
+// 微信端
85
+func (c *GoodsController) PostOrder() {
86
+	// 订单主信息
87
+	info := c.GetString("info")
88
+	if info == "" {
89
+		c.ResponseError(errors.New("无有效订单信息"))
90
+	}
91
+
92
+	// 订单详情
93
+	detail := c.GetString("detail")
94
+	if detail == "" {
95
+		c.ResponseError(errors.New("无有效订单详情信息"))
96
+	}
97
+
98
+	// 订单优惠券
99
+	coupon := c.GetString("coupon")
100
+
101
+	//
102
+	var orderInfo model.TaGoodsOrders
103
+	var orderDetail []model.TaGoodsOrdersDetail
104
+	var orderCoupon []model.TaGoodsOrdersCoupon
105
+
106
+	if err := json.Unmarshal([]byte(info), &orderInfo); err != nil {
107
+		utils.LogError("下单转换JSON失败: " + err.Error())
108
+		c.ResponseError(errors.New("下单数据格式不正确"))
109
+	}
110
+
111
+	if err := json.Unmarshal([]byte(detail), &orderDetail); err != nil {
112
+		utils.LogError("下单详情转换JSON失败: " + err.Error())
113
+		c.ResponseError(errors.New("详情数据格式不正确"))
114
+	}
115
+
116
+	if err := json.Unmarshal([]byte(coupon), &orderCoupon); err != nil {
117
+		utils.LogError("下单优惠转换JSON失败: " + err.Error())
118
+		c.ResponseError(errors.New("优惠数据格式不正确"))
119
+	}
120
+
121
+	if err := c.serv.Orders(&orderInfo, orderDetail, orderCoupon); err != nil {
122
+		c.ResponseError(err)
123
+	}
124
+
125
+	c.ResponseJSON("ok")
126
+}

+ 7
- 5
controllers/goods/spec.go View File

@@ -1,6 +1,8 @@
1 1
 package goods
2 2
 
3
-import "spaceofcheng/services/models/model"
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+)
4 6
 
5 7
 // GetGoodsSpec 获取商品规格列表
6 8
 func (c *GoodsController) GetGoodsSpec() {
@@ -11,7 +13,7 @@ func (c *GoodsController) GetGoodsSpec() {
11 13
 	}
12 14
 	page, _ := c.GetInt("page")
13 15
 	pageSize, _ := c.GetInt("pagesize")
14
-	goodsSpec, err := c.dao.GetGoodsSpec(caseids, page, pageSize)
16
+	goodsSpec, err := c.serv.GetGoodsSpec(caseids, page, pageSize)
15 17
 	if err != nil {
16 18
 		c.ResponseError(err)
17 19
 	}
@@ -21,7 +23,7 @@ func (c *GoodsController) GetGoodsSpec() {
21 23
 // GetGoodsSpecByID 根据ID获取商品分类
22 24
 func (c *GoodsController) GetGoodsSpecByID() {
23 25
 	specid := c.GetString(":specid")
24
-	goodsSpec, err := c.dao.GetGoodsSpecByID(specid)
26
+	goodsSpec, err := c.serv.GetGoodsSpecByID(specid)
25 27
 	if err != nil {
26 28
 		c.ResponseError(err)
27 29
 	}
@@ -34,7 +36,7 @@ func (c *GoodsController) SaveGoodsSpec() {
34 36
 	if err := c.ParseForm(&goodsSpec); err != nil {
35 37
 		c.ResponseError(err)
36 38
 	}
37
-	newSpec, err := c.dao.SaveGoodsSpec(goodsSpec)
39
+	newSpec, err := c.serv.SaveGoodsSpec(goodsSpec)
38 40
 	if err != nil {
39 41
 		c.ResponseError(err)
40 42
 	}
@@ -44,7 +46,7 @@ func (c *GoodsController) SaveGoodsSpec() {
44 46
 // DelGoodsSpec 删除商品分类
45 47
 func (c *GoodsController) DelGoodsSpec() {
46 48
 	specid := c.GetString(":specid")
47
-	err := c.dao.DelGoodsSpec(specid)
49
+	err := c.serv.DelGoodsSpec(specid)
48 50
 	if err != nil {
49 51
 		c.ResponseError(err)
50 52
 	}

+ 7
- 5
controllers/goods/type.go View File

@@ -1,6 +1,8 @@
1 1
 package goods
2 2
 
3
-import "spaceofcheng/services/models/model"
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+)
4 6
 
5 7
 // GetGoodsType 获取商品分类列表
6 8
 func (c *GoodsController) GetGoodsType() {
@@ -11,7 +13,7 @@ func (c *GoodsController) GetGoodsType() {
11 13
 	}
12 14
 	page, _ := c.GetInt("page")
13 15
 	pageSize, _ := c.GetInt("pagesize")
14
-	goodstype, err := c.dao.GetGoodsType(caseids, page, pageSize)
16
+	goodstype, err := c.serv.GetGoodsType(caseids, page, pageSize)
15 17
 	if err != nil {
16 18
 		c.ResponseError(err)
17 19
 	}
@@ -21,7 +23,7 @@ func (c *GoodsController) GetGoodsType() {
21 23
 // GetGoodsTypeByID 根据ID获取商品分类
22 24
 func (c *GoodsController) GetGoodsTypeByID() {
23 25
 	typeid := c.GetString(":typeid")
24
-	goodsType, err := c.dao.GetGoodsTypeByID(typeid)
26
+	goodsType, err := c.serv.GetGoodsTypeByID(typeid)
25 27
 	if err != nil {
26 28
 		c.ResponseError(err)
27 29
 	}
@@ -34,7 +36,7 @@ func (c *GoodsController) SaveGoodsType() {
34 36
 	if err := c.ParseForm(&goodsType); err != nil {
35 37
 		c.ResponseError(err)
36 38
 	}
37
-	newtype, err := c.dao.SaveGoodsType(goodsType)
39
+	newtype, err := c.serv.SaveGoodsType(goodsType)
38 40
 	if err != nil {
39 41
 		c.ResponseError(err)
40 42
 	}
@@ -44,7 +46,7 @@ func (c *GoodsController) SaveGoodsType() {
44 46
 // DelGoodsType 删除商品分类
45 47
 func (c *GoodsController) DelGoodsType() {
46 48
 	typeid := c.GetString(":typeid")
47
-	err := c.dao.DelGoodsType(typeid)
49
+	err := c.serv.DelGoodsType(typeid)
48 50
 	if err != nil {
49 51
 		c.ResponseError(err)
50 52
 	}

+ 6
- 2
controllers/message/cmscase.go View File

@@ -4,11 +4,15 @@ import "spaceofcheng/services/models/model"
4 4
 
5 5
 // GetCmsCase 获取项目列表
6 6
 func (c *MessageController) GetCmsCase() {
7
-	org := c.Context.Get("org").(model.SysOrg)
7
+	caseids := c.GetString("caseid")
8
+	if caseids == "" {
9
+		cases := c.Context.Get("cases").([]model.SysUserCase)
10
+		caseids = c.GetCaseIDs(cases)
11
+	}
8 12
 	page, _ := c.GetInt("page")
9 13
 	pageSize, _ := c.GetInt("pagesize")
10 14
 	name := c.GetString("name")
11
-	list, err := c.dao.GetCmsCasesList(name, org.OrgId, page, pageSize)
15
+	list, err := c.dao.GetCmsCasesList(name, caseids, page, pageSize)
12 16
 	if err != nil {
13 17
 		c.ResponseError(err)
14 18
 	}

+ 1
- 1
controllers/message/image.go View File

@@ -18,7 +18,7 @@ func (c *MessageController) GetImgList() {
18 18
 
19 19
 // GetImgByLocation 根据位置获取轮播图信息
20 20
 func (c *MessageController) GetImgByLocation() {
21
-	loctionid := c.GetString("loctionid")
21
+	loctionid := c.GetString("locationid")
22 22
 	orgid := c.GetString("orgid")
23 23
 	imgs, err := c.dao.GetImgByLocation(loctionid, orgid)
24 24
 	if err != nil {

+ 6
- 2
controllers/message/location.go View File

@@ -5,8 +5,12 @@ import "spaceofcheng/services/models/model"
5 5
 // GetLocations 获取位置列表
6 6
 func (c *MessageController) GetLocations() {
7 7
 	issys := c.GetString("issys")
8
-	org := c.Context.Get("org").(model.SysOrg)
9
-	location, err := c.dao.GetLocationList(issys, org.OrgId)
8
+	orgid := c.GetString("orgid")
9
+	if orgid == "" {
10
+		org := c.Context.Get("org").(model.SysOrg)
11
+		orgid = org.OrgId
12
+	}
13
+	location, err := c.dao.GetLocationList(issys, orgid)
10 14
 	if err != nil {
11 15
 		c.ResponseError(err)
12 16
 	}

+ 10
- 6
controllers/user/user.go View File

@@ -61,11 +61,14 @@ func (c *UserController) GetUserByID() {
61 61
 func (c *UserController) GetUserList() {
62 62
 	userName := c.GetString("username")
63 63
 	typeID := c.GetString("typeid")
64
-	cases := c.Context.Get("cases").([]model.SysUserCase)
65
-	caseIDs := c.GetCaseIDs(cases)
64
+	caseids := c.GetString("caseid")
65
+	if caseids == "" {
66
+		cases := c.Context.Get("cases").([]model.SysUserCase)
67
+		caseids = c.GetCaseIDs(cases)
68
+	}
66 69
 	page, _ := c.GetInt("page")
67 70
 	pageSize, _ := c.GetInt("pagesize")
68
-	userList, err := c.dao.GetUserList(userName, typeID, caseIDs, page, pageSize)
71
+	userList, err := c.dao.GetUserList(userName, typeID, caseids, page, pageSize)
69 72
 	if err != nil {
70 73
 		c.ResponseError(err)
71 74
 	}
@@ -74,9 +77,10 @@ func (c *UserController) GetUserList() {
74 77
 
75 78
 // GetUserTypes 获取用户类型
76 79
 func (c *UserController) GetUserTypes() {
77
-	cases := c.Context.Get("cases").([]model.SysUserCase)
78
-	caseIDs := c.GetCaseIDs(cases)
79
-	usertypes, err := c.dao.GetUserTypes(caseIDs)
80
+	// cases := c.Context.Get("cases").([]model.SysUserCase)
81
+	// caseIDs := c.GetCaseIDs(cases)
82
+	org := c.Context.Get("org").(model.SysOrg)
83
+	usertypes, err := c.dao.GetUserTypes(org.OrgId)
80 84
 	if err != nil {
81 85
 		c.ResponseError(err)
82 86
 	}

+ 0
- 17
log/common.2018-08-17.log View File

@@ -1,17 +0,0 @@
1
-2018/08/17 13:45:31 [E] 用户登录失败: 用户密码不正确
2
-2018/08/17 13:47:02 [E] 用户登录失败: 用户密码不正确
3
-2018/08/17 17:29:34 [E] 获取用户案场信息失败: Error 1054: Unknown column 's.user_id' in 'where clause'
4
-2018/08/17 17:29:34 [E] 获取用户案场信息失败: Error 1054: Unknown column 's.user_id' in 'where clause'
5
-2018/08/17 17:30:02 [E] 获取用户案场信息失败: Error 1054: Unknown column 's.user_id' in 'where clause'
6
-2018/08/17 17:30:02 [E] 获取用户案场信息失败: Error 1054: Unknown column 's.user_id' in 'where clause'
7
-2018/08/17 17:35:08 [E] 用户没有设置默认案场
8
-2018/08/17 17:35:08 [E] 用户没有设置默认案场
9
-2018/08/17 17:37:03 [E] 用户没有设置默认案场
10
-2018/08/17 17:37:03 [E] 获取用户组织信息失败: 没有查询到机构信息
11
-2018/08/17 17:37:03 [E] 获取用户组织信息失败: 没有查询到机构信息
12
-2018/08/17 17:41:34 [E] 用户没有设置默认案场
13
-2018/08/17 17:41:34 [E] 获取用户组织信息失败: 没有查询到机构信息
14
-2018/08/17 17:41:34 [E] 获取用户组织信息失败: 没有查询到机构信息
15
-2018/08/17 17:42:13 [E] 用户没有设置默认案场
16
-2018/08/17 17:47:00 [E] 用户没有设置默认案场
17
-2018/08/17 17:47:48 [E] 用户没有设置默认案场

+ 7
- 0
log/common.2018-08-24.log View File

@@ -0,0 +1,7 @@
1
+2018/08/24 09:40:16 [E] 验证码 - 17714208769 : 648633
2
+2018/08/24 10:53:37 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
3
+2018/08/24 10:54:58 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
4
+2018/08/24 10:55:03 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
5
+2018/08/24 10:55:42 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
6
+2018/08/24 10:55:46 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
7
+2018/08/24 11:30:58 [E] 更新用户映射信息失败:Params type error

log/common.2018-08-18.log → log/common.2018-08-25.log View File


+ 74
- 7
log/common.log View File

@@ -1,7 +1,74 @@
1
-2018/08/24 09:40:16 [E] 验证码 - 17714208769 : 648633
2
-2018/08/24 10:53:37 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
3
-2018/08/24 10:54:58 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
4
-2018/08/24 10:55:03 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
5
-2018/08/24 10:55:42 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
6
-2018/08/24 10:55:46 [E] 获取人员映射账户失败: Error 1205: Lock wait timeout exceeded; try restarting transaction
7
-2018/08/24 11:30:58 [E] 更新用户映射信息失败:Params type error
1
+2018/08/26 09:37:50 [E] 查询微信配置失败: Error 1054: Unknown column 'rmark' in 'field list'
2
+2018/08/26 09:38:37 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3
+2018/08/26 09:38:37 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_-Lg_RS71-apY79btcVmfgOoi47yZER01vtlROS4cXfqgIRfbPkzUPTwvZz6w0DlHMJIk7h-xISGUwZ0Tosff1sEpcfhNiBLw6zvr-l9zpi-tp2N6hJY7QM4uExMIZTSOixTUS9uHKOiK7trvUZWdAIAHMJ","expires_in":7200})
4
+2018/08/26 09:38:37 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_-Lg_RS71-apY79btcVmfgOoi47yZER01vtlROS4cXfqgIRfbPkzUPTwvZz6w0DlHMJIk7h-xISGUwZ0Tosff1sEpcfhNiBLw6zvr-l9zpi-tp2N6hJY7QM4uExMIZTSOixTUS9uHKOiK7trvUZWdAIAHMJ])
5
+2018/08/26 09:44:13 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
6
+2018/08/26 09:44:13 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_2REPD5yYQxrGgfgH94odWyxn0xLwS_-9HvVko999_vYdApibljI1UuhMYohVkLz84IMkGEyf9BpSFWbR9oH3qJffwFnjb-f3XVDXjuuGRPpFU5q3acQ1-8Q5PzEXWZdAJAGFI","expires_in":7200})
7
+2018/08/26 09:44:13 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_2REPD5yYQxrGgfgH94odWyxn0xLwS_-9HvVko999_vYdApibljI1UuhMYohVkLz84IMkGEyf9BpSFWbR9oH3qJffwFnjb-f3XVDXjuuGRPpFU5q3acQ1-8Q5PzEXWZdAJAGFI expires_in:7200])
8
+2018/08/26 09:45:32 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
9
+2018/08/26 09:45:32 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_xTyy-6CTPuz4gw7CzuHQhZ73GnK1IL_KpzT9EgUTUX4qSgdqH0ZEgNMxhavJY-kMsaHN15owtkQe0dlf9kfE7Cl0PvCmC9OPc5PiJhflZ2NAAiZp84sKHp81FDsTSBeAHAYXG","expires_in":7200})
10
+2018/08/26 09:45:32 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_xTyy-6CTPuz4gw7CzuHQhZ73GnK1IL_KpzT9EgUTUX4qSgdqH0ZEgNMxhavJY-kMsaHN15owtkQe0dlf9kfE7Cl0PvCmC9OPc5PiJhflZ2NAAiZp84sKHp81FDsTSBeAHAYXG expires_in:7200])
11
+2018/08/26 09:49:08 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
12
+2018/08/26 09:49:09 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_K6k5JNOBeMpIe_gitC04i233yiyA6yh1smV1feyiUQTk6010b98PU3X67e8KCvaCjTR0HmjrttsTJLrtzg54TwKnGLE-UgV7NDMMhp4u2r2V56ghJDZ5-7xlC9SxvTkIu0nmQAfAif3ktCULIQZeADAVDM","expires_in":7200})
13
+2018/08/26 09:49:09 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_K6k5JNOBeMpIe_gitC04i233yiyA6yh1smV1feyiUQTk6010b98PU3X67e8KCvaCjTR0HmjrttsTJLrtzg54TwKnGLE-UgV7NDMMhp4u2r2V56ghJDZ5-7xlC9SxvTkIu0nmQAfAif3ktCULIQZeADAVDM expires_in:7200])
14
+2018/08/26 09:50:11 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
15
+2018/08/26 09:50:11 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_Dm3oaLYTAMFOsaxzn6Sm-liedNbNRUDD0lZuCSUHfVFWry9R7oXyyLDXGOsDR6XO_cAReWZ0KBgituizW20oxfHHq8ezj0iiUveePrL03Cml6x7R0WkzMOiNGcXmyzo3Igh3r8QhGK2WfuwOMVQfAAAHQL","expires_in":7200})
16
+2018/08/26 09:50:11 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_Dm3oaLYTAMFOsaxzn6Sm-liedNbNRUDD0lZuCSUHfVFWry9R7oXyyLDXGOsDR6XO_cAReWZ0KBgituizW20oxfHHq8ezj0iiUveePrL03Cml6x7R0WkzMOiNGcXmyzo3Igh3r8QhGK2WfuwOMVQfAAAHQL expires_in:7200])
17
+2018/08/26 09:51:59 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
18
+2018/08/26 09:51:59 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_B0bGSFxdnZK5KT9wzuHQhZ73GnK1IL_KpzT9EvI_ZHhdHbiwSy9FiEfhct77uI_1Brx6kBu3SklukBzw2BnWBk-Q52pYYIb9NpZELzJVR8tzWWbPWD9Tc36StP7FmdpzG1y9UrT4A3idUIDfVRGgAEAZVK","expires_in":7200})
19
+2018/08/26 09:51:59 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_B0bGSFxdnZK5KT9wzuHQhZ73GnK1IL_KpzT9EvI_ZHhdHbiwSy9FiEfhct77uI_1Brx6kBu3SklukBzw2BnWBk-Q52pYYIb9NpZELzJVR8tzWWbPWD9Tc36StP7FmdpzG1y9UrT4A3idUIDfVRGgAEAZVK expires_in:7200])
20
+2018/08/26 09:52:26 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
21
+2018/08/26 09:52:26 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_JaO07aaK8Vbt8mVhb88JC_57VjUKFd0UxQUL0TVMKNF0DUrcHPt4tjZjaeF3K1UI0NPOyNqYytzPg5YfIeSfDowMBreC86pigfPIXZrwlqspCOddE5QtTmD8uGQZ7_VhX0aHegYT8Iy-dSupBNQcAFAPBE","expires_in":7200})
22
+2018/08/26 09:52:26 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_JaO07aaK8Vbt8mVhb88JC_57VjUKFd0UxQUL0TVMKNF0DUrcHPt4tjZjaeF3K1UI0NPOyNqYytzPg5YfIeSfDowMBreC86pigfPIXZrwlqspCOddE5QtTmD8uGQZ7_VhX0aHegYT8Iy-dSupBNQcAFAPBE expires_in:7200])
23
+2018/08/26 09:52:52 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
24
+2018/08/26 09:52:52 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_W_Xh9756zIW8jFK4bRxCsoQiUV0j-zAfNmXR38hdAk10_MDRh15cOJkDRkROLC6iU7zSqQxcPQQz-NsBHfFaK9Ol1HliVvIg8efKZGrfBwXva0asAn0OnU869MNfv5-EtNzJl_talvZ7N2twBOBfAEAVIV","expires_in":7200})
25
+2018/08/26 09:52:52 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_W_Xh9756zIW8jFK4bRxCsoQiUV0j-zAfNmXR38hdAk10_MDRh15cOJkDRkROLC6iU7zSqQxcPQQz-NsBHfFaK9Ol1HliVvIg8efKZGrfBwXva0asAn0OnU869MNfv5-EtNzJl_talvZ7N2twBOBfAEAVIV])
26
+2018/08/26 09:53:06 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
27
+2018/08/26 09:53:06 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_x8W4tYHqT6-xw2KZbRxCsoQiUV0j-zAfNmXR38hdAk10_MDRh15cOJkDRkTiPc6vNMq046pPpyHg_ksa0ELjakenatHGtKfyBPLppB1hTwdcpghc5Z8QmY5upPqR37Epw0HfFweotkLnljJiOEOfAEAXNX","expires_in":7200})
28
+2018/08/26 09:53:06 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_x8W4tYHqT6-xw2KZbRxCsoQiUV0j-zAfNmXR38hdAk10_MDRh15cOJkDRkTiPc6vNMq046pPpyHg_ksa0ELjakenatHGtKfyBPLppB1hTwdcpghc5Z8QmY5upPqR37Epw0HfFweotkLnljJiOEOfAEAXNX expires_in:7200])
29
+2018/08/26 09:54:43 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
30
+2018/08/26 09:54:44 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_PK1MfsKJTJBSyulyKvLRHiorDM-9wwzYsyPyvpnEpTQgtpnYsMM6AwA9DcpV5vq0REYd69l3WhYQ1_0AOZcTW7GKQaAxLmxj47IBXdxLScTYi4l-8ZtP6ZmS96kFROeAGAJVS","expires_in":7200})
31
+2018/08/26 09:54:44 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_PK1MfsKJTJBSyulyKvLRHiorDM-9wwzYsyPyvpnEpTQgtpnYsMM6AwA9DcpV5vq0REYd69l3WhYQ1_0AOZcTW7GKQaAxLmxj47IBXdxLScTYi4l-8ZtP6ZmS96kFROeAGAJVS expires_in:7200])
32
+2018/08/26 09:56:04 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
33
+2018/08/26 09:56:04 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_igGxdtw6AzmfTOu9cIlzH2dMOQRu-NPQ0Pm92NS4Hm9llCRTrFHsaxQb0etiAjOuQBL7_ep7csgPjvyNWEEZGOZ28akNtaDQD1ApoYYeAihI58iUra270dbdmO8MNEfAGAWXO","expires_in":7200})
34
+2018/08/26 09:56:04 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_igGxdtw6AzmfTOu9cIlzH2dMOQRu-NPQ0Pm92NS4Hm9llCRTrFHsaxQb0etiAjOuQBL7_ep7csgPjvyNWEEZGOZ28akNtaDQD1ApoYYeAihI58iUra270dbdmO8MNEfAGAWXO expires_in:7200])
35
+2018/08/26 10:01:23 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
36
+2018/08/26 10:01:23 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_ho3BftxaKmrGQie6QrTSheSWuAj8XAN8wpjERCj2FB00PWVCksSlu-X-3yVreKXyMZiE9TKDHdpFRJ4TwWiWKC6Bn7nwuF38emI9H3YKw41aq4OzdCHxSpeswgkiUTmGyyLdUBTGvBg3LrgbQUQaACACGC","expires_in":7200})
37
+2018/08/26 10:01:23 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_ho3BftxaKmrGQie6QrTSheSWuAj8XAN8wpjERCj2FB00PWVCksSlu-X-3yVreKXyMZiE9TKDHdpFRJ4TwWiWKC6Bn7nwuF38emI9H3YKw41aq4OzdCHxSpeswgkiUTmGyyLdUBTGvBg3LrgbQUQaACACGC])
38
+2018/08/26 10:03:00 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
39
+2018/08/26 10:03:00 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_mPkwKKOyg1_TrG55P9WmMf-uZJq9ElASxwnCi3kwUmH6i2JfpZRszI-vThMJ8p2BZ155si1rJiD9T1OMphQ2LlU4mVJK2VylENa49ZYKq1nman7AQKmmUhQQf1NF61dSpJzwWL1YcmtxdswWPEWcAFAGVN","expires_in":7200})
40
+2018/08/26 10:03:00 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_mPkwKKOyg1_TrG55P9WmMf-uZJq9ElASxwnCi3kwUmH6i2JfpZRszI-vThMJ8p2BZ155si1rJiD9T1OMphQ2LlU4mVJK2VylENa49ZYKq1nman7AQKmmUhQQf1NF61dSpJzwWL1YcmtxdswWPEWcAFAGVN expires_in:7200])
41
+2018/08/26 10:03:34 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
42
+2018/08/26 10:03:37 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
43
+2018/08/26 10:03:37 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_pDrce0TWVtCLO-krXhdBpI73YPmDSHDuiZldQlc0KhV3MDE9JEF9fhiCft8VbdEtodGzPVCL0_HE1pGlJ8SPI64yDhihRsrgkw7gh8tUnzSXlax1SqATFixZjSN6ufmekVUwX1lTNaQxz74BDSNaAHAYNI","expires_in":7200})
44
+2018/08/26 10:03:37 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_pDrce0TWVtCLO-krXhdBpI73YPmDSHDuiZldQlc0KhV3MDE9JEF9fhiCft8VbdEtodGzPVCL0_HE1pGlJ8SPI64yDhihRsrgkw7gh8tUnzSXlax1SqATFixZjSN6ufmekVUwX1lTNaQxz74BDSNaAHAYNI expires_in:7200])
45
+2018/08/26 10:06:33 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
46
+2018/08/26 10:06:33 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_DZoFCC4yhlTyAkYxNIDuR2xRUAWJHPruJFOqDuEV3D5d1DdqVNkCznwmzs340F7K4wM5CiXND7hySR6ljElUYYPdZq_LrWW-g-Q5SzsRT6RRelYmhu4yRe8J8cBBg_ElkEbervWfr1DBlstvZOHaAIADSL","expires_in":7200})
47
+2018/08/26 10:06:33 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_DZoFCC4yhlTyAkYxNIDuR2xRUAWJHPruJFOqDuEV3D5d1DdqVNkCznwmzs340F7K4wM5CiXND7hySR6ljElUYYPdZq_LrWW-g-Q5SzsRT6RRelYmhu4yRe8J8cBBg_ElkEbervWfr1DBlstvZOHaAIADSL expires_in:7200])
48
+2018/08/26 10:08:42 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
49
+2018/08/26 10:08:43 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_96NNB_wLDEFTiOTGTmi9TkQvj1AiAe3lQIQWnbQIohFWbJ5DduY27W7k_Acaf8CUKq-N1Bl9yorRUuG690EDGHwBuA5tpkg3fAvrnn50VNEmTbtaNN3H22dcMu5eqxZIAtptEs_n5SRPXBfXOKIcACABXV","expires_in":7200})
50
+2018/08/26 10:08:43 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_96NNB_wLDEFTiOTGTmi9TkQvj1AiAe3lQIQWnbQIohFWbJ5DduY27W7k_Acaf8CUKq-N1Bl9yorRUuG690EDGHwBuA5tpkg3fAvrnn50VNEmTbtaNN3H22dcMu5eqxZIAtptEs_n5SRPXBfXOKIcACABXV expires_in:7200])
51
+2018/08/26 10:28:46 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
52
+2018/08/26 10:28:47 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_tfSozSKyxf6tttaz0yd2aut_EFTLarqBafPHq9AIARgmCTZL471kN1LURN4Fkklongv4QIwKWMKPgiDc0Lz_2UrwBmbDWFsr_CsKoXMewVTLbjcPRMzVwps-bgL865o-ivCgAv_1lk9AZ92BFPFeAFAYIY","expires_in":7200})
53
+2018/08/26 10:28:47 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_tfSozSKyxf6tttaz0yd2aut_EFTLarqBafPHq9AIARgmCTZL471kN1LURN4Fkklongv4QIwKWMKPgiDc0Lz_2UrwBmbDWFsr_CsKoXMewVTLbjcPRMzVwps-bgL865o-ivCgAv_1lk9AZ92BFPFeAFAYIY expires_in:7200])
54
+2018/08/26 10:36:16 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
55
+2018/08/26 10:36:16 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_Bgp4G3PY317x9UpbQOS6uPUvYLON3hDKHhqdyhD0TB_S4qUw5Kps-GnjTBABV8fU0Fq5JZkiTeXHHCLXnolcWgx3lMMy736Q_UU2hWVRHoiVTR7WRe08Yg3p2_OxIS43-bhf5ZZ1Pq1vpla5PDDfABACQQ","expires_in":7200})
56
+2018/08/26 10:36:16 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_Bgp4G3PY317x9UpbQOS6uPUvYLON3hDKHhqdyhD0TB_S4qUw5Kps-GnjTBABV8fU0Fq5JZkiTeXHHCLXnolcWgx3lMMy736Q_UU2hWVRHoiVTR7WRe08Yg3p2_OxIS43-bhf5ZZ1Pq1vpla5PDDfABACQQ expires_in:7200])
57
+2018/08/26 10:37:08 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
58
+2018/08/26 10:37:08 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_7OsVSwADwqEcwqQKNIDuR2xRUAWJHPruJFOqDlmHgDjknD0fdU94o7ndqas3U5aNtlfiNoovlsA4RLjUmqIMGf0vTlCFBjQ_M8L-N-i1jlcQiugyXFDRWsui1CUIG_9gW7gCdS1LUybkGRE4ZCIcABAEHN","expires_in":7200})
59
+2018/08/26 10:37:08 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_7OsVSwADwqEcwqQKNIDuR2xRUAWJHPruJFOqDlmHgDjknD0fdU94o7ndqas3U5aNtlfiNoovlsA4RLjUmqIMGf0vTlCFBjQ_M8L-N-i1jlcQiugyXFDRWsui1CUIG_9gW7gCdS1LUybkGRE4ZCIcABAEHN expires_in:7200])
60
+2018/08/26 10:48:19 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
61
+2018/08/26 10:48:20 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_kgQXjSoiSNu6r7VNYRaB7Jkvc6MyxsgqlfRp0GD3t4U9VVRlLLteA1jq_4IZBAVt3zYLiacrmsTJLR2nD9qb99yUWfPaLFP8NBTDPvu4cFYbNFHmOBMUJwVW9lVEaPm_2kQY1tnqcmFRpa6uKOGeABAFJB","expires_in":7200})
62
+2018/08/26 10:48:20 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_kgQXjSoiSNu6r7VNYRaB7Jkvc6MyxsgqlfRp0GD3t4U9VVRlLLteA1jq_4IZBAVt3zYLiacrmsTJLR2nD9qb99yUWfPaLFP8NBTDPvu4cFYbNFHmOBMUJwVW9lVEaPm_2kQY1tnqcmFRpa6uKOGeABAFJB expires_in:7200])
63
+2018/08/26 10:57:38 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
64
+2018/08/26 10:57:38 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_IuDEV53CHWkI4PMqWBMNgMuHx4Y6f7UP5MD90PRncFeGPK9Ri00Zbf6d-IvnUZ3FEhCN7bkwGK9wJPJGXu-RY5J91Cpr_OII7IZhVYPjtdLWuBIPzkcq28gKfxTRlSQTCQXGc3_khJMAJrNIDUThAGAGXW","expires_in":7200})
65
+2018/08/26 10:57:38 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_IuDEV53CHWkI4PMqWBMNgMuHx4Y6f7UP5MD90PRncFeGPK9Ri00Zbf6d-IvnUZ3FEhCN7bkwGK9wJPJGXu-RY5J91Cpr_OII7IZhVYPjtdLWuBIPzkcq28gKfxTRlSQTCQXGc3_khJMAJrNIDUThAGAGXW expires_in:7200])
66
+2018/08/26 10:58:56 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
67
+2018/08/26 10:58:56 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_j6hv2N3bFx7qKu-zMWqgXQqP5f3C1fi5MKw7aVmOU27p7NHWfiwleuTzzhyuccc9zfejZJV9s615X9pGZo2swrUQa_R4b3jFxn7OLuA3jDgBBUQwvIv578aeNjgLLVfAIAUUE","expires_in":7200})
68
+2018/08/26 10:58:56 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_j6hv2N3bFx7qKu-zMWqgXQqP5f3C1fi5MKw7aVmOU27p7NHWfiwleuTzzhyuccc9zfejZJV9s615X9pGZo2swrUQa_R4b3jFxn7OLuA3jDgBBUQwvIv578aeNjgLLVfAIAUUE expires_in:7200])
69
+2018/08/26 15:20:02 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
70
+2018/08/26 15:20:03 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_BWujCeV9M2yUp5tsJpx7FaGHTMbuGAJ0c3XHxCrkY7-Ro9tiu-cAJNx45PdkiNe5SfTZrW7ZhHXz36VnZ8HYzN6arFiFgloLHh9qJIb9_sIqFAgi2NPApcOm16BXEF4GY7KDOza67EWofM1jIQIgABAUCU","expires_in":7200})
71
+2018/08/26 15:20:03 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_BWujCeV9M2yUp5tsJpx7FaGHTMbuGAJ0c3XHxCrkY7-Ro9tiu-cAJNx45PdkiNe5SfTZrW7ZhHXz36VnZ8HYzN6arFiFgloLHh9qJIb9_sIqFAgi2NPApcOm16BXEF4GY7KDOza67EWofM1jIQIgABAUCU expires_in:7200])
72
+2018/08/26 16:17:50 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
73
+2018/08/26 16:17:50 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_hezlnSFBORaBwf5SdwfaSZEoGO35hkS4XL7D2SKqDSUwryGZpP6lFh9fVUDjFQzwv0oH3wZnP5ANT4rE1nQEeBgZTHIPo5Qzu5KpHhVFQNc_0bb6XGAFm-ugPf9iKI2tVA4SIfILsf6VunDeLZUeAAAVJE","expires_in":7200})
74
+2018/08/26 16:17:50 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_hezlnSFBORaBwf5SdwfaSZEoGO35hkS4XL7D2SKqDSUwryGZpP6lFh9fVUDjFQzwv0oH3wZnP5ANT4rE1nQEeBgZTHIPo5Qzu5KpHhVFQNc_0bb6XGAFm-ugPf9iKI2tVA4SIfILsf6VunDeLZUeAAAVJE expires_in:7200])

+ 1
- 0
models/cases/area.go View File

@@ -70,6 +70,7 @@ func (m *CaseDAO) UpdateCaseArea(area model.SysCaseArea) error {
70 70
 		"area_icon",
71 71
 		"area_icon_white",
72 72
 		"order",
73
+		"case_id",
73 74
 	}
74 75
 	_, err := m.db.Cols(cols...).Where("area_id=?", area.AreaId).Update(area)
75 76
 	return err

+ 13
- 3
models/cases/key.go View File

@@ -40,7 +40,7 @@ func (m *CaseDAO) GetKeysByCase(caseid, num string, page, pageSize int) ([]CaseK
40 40
 	}
41 41
 
42 42
 	offset := (page - 1) * pageSize
43
-	query += " order by lock_num asc LIMIT " + strconv.Itoa(pageSize) + " OFFSET " + strconv.Itoa(offset)
43
+	query += " order by lock_no asc LIMIT " + strconv.Itoa(pageSize) + " OFFSET " + strconv.Itoa(offset)
44 44
 
45 45
 	err := m.db.SQL(query, models.STATUS_NORMAL, caseid, models.STATUS_DEL).Find(&keys)
46 46
 	return keys, err
@@ -51,7 +51,7 @@ func (m *CaseDAO) GetKeysCountByCase(caseid, num string) (int, error) {
51 51
 	var keys []model.TaCaseKey
52 52
 	dao := m.db.Where("case_id=?", caseid).And("status>" + strconv.Itoa(models.STATUS_DEL))
53 53
 	if num != "" {
54
-		dao.And("num like '%" + num + "%'")
54
+		dao.And("lock_num like '%" + num + "%'")
55 55
 	}
56 56
 	err := dao.Find(&keys)
57 57
 	return len(keys), err
@@ -118,6 +118,16 @@ func (m *CaseDAO) GetKeyByNumRange(caseid, nums string) ([]model.TaCaseKey, erro
118 118
 	sql := `select * from ta_case_key where status>` + strconv.Itoa(models.STATUS_DEL) + `
119 119
 	and case_id='` + caseid + `' and lock_num in ('` + strings.Replace(nums, ",", "','", -1) + `')`
120 120
 
121
-	err := m.db.Sql(sql).Find(keys)
121
+	err := m.db.Sql(sql).Find(&keys)
122
+	return keys, err
123
+}
124
+
125
+// GetKeyByNum 获取钥匙
126
+func (m *CaseDAO) GetKeyByNum(caseid string, beginnum, endnum int) ([]model.TaCaseKey, error) {
127
+	var keys []model.TaCaseKey
128
+	sql := `select * from ta_case_key where  status>` + strconv.Itoa(models.STATUS_DEL) + `
129
+	and case_id='` + caseid + `' and lock_no BETWEEN ` + strconv.Itoa(beginnum) + ` and ` + strconv.Itoa(endnum)
130
+
131
+	err := m.db.Sql(sql).Find(&keys)
122 132
 	return keys, err
123 133
 }

+ 2
- 0
models/cases/table.go View File

@@ -75,6 +75,8 @@ func (m *CaseDAO) UpdateCaseTable(area model.SysCaseTable) error {
75 75
 		"table_no",
76 76
 		"order",
77 77
 		"remark",
78
+		"case_id",
79
+		"area_id",
78 80
 	}
79 81
 	_, err := m.db.Cols(cols...).Where("table_id=?", area.TableId).Update(area)
80 82
 	return err

+ 6
- 5
models/cases/tag.go View File

@@ -12,11 +12,12 @@ import (
12 12
 )
13 13
 
14 14
 // GetTagCount 获取标签总数
15
-func (m *CaseDAO) GetTagCount(caseids string) (int, error) {
15
+func (m *CaseDAO) GetTagCount(caseid, caseids string) (int, error) {
16 16
 	var tags []TagInfo
17 17
 	sql := `select tag.*,c.case_names from sys_tag tag inner join (
18 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 ('` +
19
+	where b.tag_id in (select tag_id from sys_tag_case where case_id in ('` + strings.Replace(caseid, ",", "','", -1) + `')) 
20
+	and b.tag_id not in (select tag_id from sys_tag_case where case_id not in ('` +
20 21
 		strings.Replace(caseids, ",", "','", -1) + `'))
21 22
 	group by b.tag_id ) c on tag.tag_id = c.tag_id where tag.status>` + strconv.Itoa(models.STATUS_DEL)
22 23
 	err := m.db.Sql(sql).Find(&tags)
@@ -31,15 +32,15 @@ type TagInfo struct {
31 32
 }
32 33
 
33 34
 // GetTagList 根据案场获取标签
34
-func (m *CaseDAO) GetTagList(caseids string, page int, pageSize int) ([]TagInfo, error) {
35
+func (m *CaseDAO) GetTagList(caseid, caseids string, page int, pageSize int) ([]TagInfo, error) {
35 36
 	var tags []TagInfo
36 37
 	offset := (page - 1) * pageSize
37 38
 	sql := `select tag.*,c.case_names from sys_tag tag inner join (
38 39
 	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) + `
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 ('` +
40
+	where b.tag_id in (select tag_id from sys_tag_case where case_id in ('` + strings.Replace(caseid, ",", "','", -1) + `')) 
41
+	and b.tag_id not in (select tag_id from sys_tag_case where case_id not in ('` +
40 42
 		strings.Replace(caseids, ",", "','", -1) + `'))
41 43
 	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)
42
-
43 44
 	err := m.db.Sql(sql).Find(&tags)
44 45
 	return tags, err
45 46
 }

+ 2
- 2
models/channel/channel.go View File

@@ -46,7 +46,7 @@ func (m *ChannelDAO) GetChannels(caseid string, page int, pageSize int) ([]Chann
46 46
 	from ta_channel a 
47 47
 	inner join sys_case b on a.case_id = b.case_id 
48 48
 	where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `') and b.status> ` + strconv.Itoa(models.STATUS_DEL) + ` and  a.status > ` + strconv.Itoa(models.STATUS_DEL)
49
-	sql = sql + " order by create_date desc limit " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(page*pageSize)
49
+	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(page*pageSize)
50 50
 	err := m.db.Sql(sql).Find(&channels)
51 51
 	return channels, err
52 52
 }
@@ -93,6 +93,6 @@ func (m *ChannelDAO) DeleteChannel(channelId string) error {
93 93
 	var cols = []string{
94 94
 		"status",
95 95
 	}
96
-	_, err := m.db.Cols(cols...).Where("channel_id", channel.ChannelId).Update(channel)
96
+	_, err := m.db.Cols(cols...).Where("channel_id=?", channel.ChannelId).Update(channel)
97 97
 	return err
98 98
 }

+ 48
- 0
models/course/course.go View File

@@ -27,6 +27,7 @@ func NewCourseDAO(ctx *utils.Context) *CourseDAO {
27 27
 
28 28
 const (
29 29
 	STATUS_UNPUBLISH = 0
30
+	IS_SELECT        = 1
30 31
 )
31 32
 
32 33
 // CourseInfo 课程
@@ -196,6 +197,7 @@ type CourseDetail struct {
196 197
 	CourseTags     []model.TaCourseTag
197 198
 	CourseImgs     []model.TaCourseImg
198 199
 	CourseDetail   []model.TaCourseDetail
200
+	CaseInfo       *model.SysCase
199 201
 }
200 202
 
201 203
 // GetCourseInfo 获取课程详情
@@ -326,3 +328,49 @@ func (m *CourseDAO) CourseTagSave(courseid, tagids string) error {
326 328
 	_, err := m.db.Exec(sql)
327 329
 	return err
328 330
 }
331
+
332
+// GetCourseDetailCount 获取已排课数量
333
+func (m *CourseDAO) GetCourseDetailCount(courseid string) (int, error) {
334
+	var details []model.TaCourseDetail
335
+	err := m.db.Where("course_id=?", courseid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&details)
336
+	if err != nil {
337
+		return 0, err
338
+	}
339
+	return len(details), nil
340
+}
341
+
342
+// UpdateCourseScheduleNum 更新课程已排课数量
343
+func (m *CourseDAO) UpdateCourseScheduleNum(courseid string, num int) error {
344
+	var info = model.TaCourse{
345
+		CourseId:    courseid,
346
+		ScheduleNum: num,
347
+	}
348
+	var cols = []string{
349
+		"schedule_num",
350
+	}
351
+	_, err := m.db.Cols(cols...).Where("course_id=?", courseid).Update(info)
352
+	return err
353
+}
354
+
355
+// DeleteScheduleByCourse 删除排课记录
356
+func (m *CourseDAO) DeleteScheduleByCourse(courseid string) error {
357
+	sql := `update ta_course_detail set status=` + strconv.Itoa(models.STATUS_DEL) + ` where course_id='` + courseid + `'`
358
+	_, err := m.db.Exec(sql)
359
+	return err
360
+}
361
+
362
+// GetSelectCourseList 获取精选课程
363
+func (m *CourseDAO) GetSelectCourseList(orgid string) ([]CourseDetail, error) {
364
+	var courses []CourseDetail
365
+	sql := `select * from ta_course where is_select=` + strconv.Itoa(IS_SELECT) + ` and status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and org_id='` + orgid + `'`
366
+	err := m.db.Sql(sql).Find(&courses)
367
+	return courses, err
368
+}
369
+
370
+// GetCourseByLocation 根据位置获取课程信息
371
+func (m *CourseDAO) GetCourseByLocation(orgid, locationid string) ([]CourseDetail, error) {
372
+	var courses []CourseDetail
373
+	sql := `select * from ta_course where status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and org_id='` + orgid + `' and location_id ='` + locationid + `'`
374
+	err := m.db.Sql(sql).Find(&courses)
375
+	return courses, err
376
+}

+ 43
- 0
models/course/order.go View File

@@ -0,0 +1,43 @@
1
+package course
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/utils"
7
+	"strconv"
8
+	"strings"
9
+	"time"
10
+)
11
+
12
+// SaveCourseOrder 保存订单
13
+func (m *CourseDAO) SaveCourseOrder(order model.TaCourseOrders) (*model.TaCourseOrders, error) {
14
+	order.OrdersId = utils.GetGUID()
15
+	// 当前订单号的随机方式 = 时间 + 个人ID
16
+	order.OrdersNo = "Customer-" + time.Now().Local().Format("20060102150405") + "-" + strings.Join(utils.GUIID2IntString(order.CustomerId), "")
17
+	order.CreateDate = time.Now()
18
+	_, err := m.db.Insert(&order)
19
+	return &order, err
20
+}
21
+
22
+// GetOrderByID 根据id获取订单明细
23
+func (m *CourseDAO) GetOrderByID(ordersid string) (*model.TaCourseOrders, error) {
24
+	var orders []model.TaCourseOrders
25
+	err := m.db.Where("orders_id=?", ordersid).Find(&orders)
26
+	if err != nil {
27
+		return nil, err
28
+	}
29
+	if len(orders) > 0 {
30
+		return &orders[0], nil
31
+	}
32
+	return nil, nil
33
+}
34
+
35
+// SaveCourseOrderDetail 保存订单明细
36
+func (m *CourseDAO) SaveCourseOrderDetail(courseid, ordersid string) error {
37
+	sql := `insert into (orders_detail_id,orders_id,course_id,course_detail_id,begin_date,end_date) select UUID(),'` + ordersid +
38
+		`',course_id,detail_id,begin_date,end_date from ta_course_detail where course_id='` + courseid + `' and status>` + strconv.Itoa(models.STATUS_DEL)
39
+	_, err := m.db.Insert(sql)
40
+	return err
41
+}
42
+
43
+//

+ 1
- 12
models/customer/customer.go View File

@@ -93,7 +93,7 @@ func (m *CustomerDAO) GetCustWithWXByID(custID string) (*CustWithWX, error) {
93 93
 
94 94
 	cust := CustWithWX{}
95 95
 	query := `
96
-		SELECT *
96
+		SELECT *, t.user_id as map_user
97 97
 		FROM
98 98
 			ta_customer t
99 99
 		LEFT JOIN ta_user_mapping s ON t.customer_id = s.user_id
@@ -215,14 +215,3 @@ func (m *CustomerDAO) GetCustomerByID(id string) (*model.TaCustomer, error) {
215 215
 
216 216
 	return cust, nil
217 217
 }
218
-
219
-// GetForbidUserByUserID 查询禁用人员
220
-func (m *CustomerDAO) GetForbidUserByUserID(userID string) ([]model.TaForbidUser, error) {
221
-	var fbUsers []model.TaForbidUser
222
-
223
-	if err := m.db.Where("user_id=?", userID).Find(&fbUsers); err != nil {
224
-		return nil, err
225
-	}
226
-
227
-	return fbUsers, nil
228
-}

+ 195
- 16
models/goods/goods.go View File

@@ -26,8 +26,56 @@ func NewGoodsDAO(ctx *utils.Context) *GoodsDAO {
26 26
 	}
27 27
 }
28 28
 
29
+// GetGoodsListPageNavi 获取商品列表
30
+// 管理端接口
31
+func (m *GoodsDAO) GetGoodsListPageNavi(name, typeID, caseID string, limit []int) ([]GoodsWithSpec, int64, error) {
32
+	sql := `
33
+		SELECT *
34
+		FROM
35
+			ta_goods t
36
+		WHERE
37
+			t.case_id = ?
38
+	`
39
+
40
+	if name != "" {
41
+		sql += `
42
+			AND LOWER(t.goods_name) LIKE '%` + name + `%'
43
+		`
44
+	}
45
+
46
+	if typeID != "" {
47
+		sql += `
48
+			AND t.type_id = '` + typeID + `'
49
+		`
50
+	}
51
+
52
+	sql += `		
53
+		AND t.status > ?
54
+		ORDER BY
55
+			t.type_id,
56
+			t.create_date
57
+	`
58
+
59
+	var goodsList []GoodsWithSpec
60
+	cnt, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&goodsList, sql, limit, caseID, models.STATUS_DEL)
61
+	if err != nil {
62
+		return nil, 0, err
63
+	}
64
+
65
+	for inx, goods := range goodsList {
66
+		specs, err := m.GetSpecWithPrice(goods.GoodsId)
67
+		if err != nil {
68
+			return nil, 0, err
69
+		}
70
+
71
+		goodsList[inx].Specs = specs
72
+	}
73
+
74
+	return goodsList, cnt, nil
75
+}
76
+
29 77
 // GetGoodsListOfCase 获取案场商品列表
30
-// 暂时没涉及分页
78
+// 微信端 暂时没涉及分页
31 79
 func (m *GoodsDAO) GetGoodsListOfCase(caseID string) ([]GoodsWithSpec, error) {
32 80
 	var goodsList []GoodsWithSpec
33 81
 
@@ -37,13 +85,8 @@ func (m *GoodsDAO) GetGoodsListOfCase(caseID string) ([]GoodsWithSpec, error) {
37 85
 	}
38 86
 
39 87
 	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 {
88
+		specs, err := m.GetSpecWithPrice(goods.GoodsId)
89
+		if err != nil {
47 90
 			return nil, err
48 91
 		}
49 92
 
@@ -53,10 +96,23 @@ func (m *GoodsDAO) GetGoodsListOfCase(caseID string) ([]GoodsWithSpec, error) {
53 96
 	return goodsList, nil
54 97
 }
55 98
 
99
+// GetSpecWithPrice 获取商品规格 含 金额
100
+func (m *GoodsDAO) GetSpecWithPrice(goodsID string) ([]SpecWithPrice, error) {
101
+	sql := `SELECT * FROM td_spec t
102
+		JOIN ta_goods_spec s ON t.spec_id = s.spec_id
103
+		WHERE t.status = ? AND s.goods_id = ?
104
+	`
105
+
106
+	var specs []SpecWithPrice
107
+	err := m.db.SQL(sql, models.STATUS_DEL, goodsID).Find(&specs)
108
+
109
+	return specs, err
110
+}
111
+
56 112
 // GetGoodsByID 依据ID 获取商品
57
-func (m *GoodsDAO) GetGoodsByID(id, caseID string) (*model.TaGoods, error) {
113
+func (m *GoodsDAO) GetGoodsByID(id string) (*model.TaGoods, error) {
58 114
 	goods := new(model.TaGoods)
59
-	if _, err := m.db.Where("goods_id=?", id).And("case_id=?", caseID).Get(goods); err != nil {
115
+	if _, err := m.db.Where("goods_id=?", id).Get(goods); err != nil {
60 116
 		return nil, err
61 117
 	}
62 118
 
@@ -85,17 +141,35 @@ func (m *GoodsDAO) GetGoodsWithPriceByID(id, spec, caseID string) (*GoodsWithPri
85 141
 	return goods, nil
86 142
 }
87 143
 
88
-// UpdateGoods 更新商品
89
-func (m *GoodsDAO) UpdateGoods(goods *model.TaGoods, cols []string) error {
90
-	if _, err := m.db.Where("goods_id=?", goods.GoodsId).Cols(cols...).Update(goods); err != nil {
91
-		return err
144
+// GetGoodsWithSpecByID  依据ID 获取商品(含规格)
145
+func (m *GoodsDAO) GetGoodsWithSpecByID(id string) (*GoodsWithSpec, error) {
146
+	goods := new(model.TaGoods)
147
+	if _, err := m.db.Where("goods_id=?", id).Get(goods); err != nil {
148
+		return nil, err
92 149
 	}
93 150
 
94
-	return nil
151
+	var specs []SpecWithPrice
152
+	query := `
153
+		SELECT
154
+			t.*, s.goods_price
155
+		FROM
156
+			td_spec t
157
+		JOIN ta_goods_spec s ON t.spec_id = s.spec_id
158
+		WHERE
159
+			s.goods_id = ?
160
+	`
161
+	if err := m.db.SQL(query, id).Find(&specs); err != nil {
162
+		return nil, err
163
+	}
164
+
165
+	return &GoodsWithSpec{
166
+		TaGoods: *goods,
167
+		Specs:   specs,
168
+	}, nil
95 169
 }
96 170
 
97 171
 // SaveGoods 保存商品
98
-func (m *GoodsDAO) SaveGoods(goods *model.TaGoods) error {
172
+func (m *GoodsDAO) SaveGoods(goods *model.TaGoods, images []string, specs []SpecWithPrice) error {
99 173
 	userRaw := m.ctx.Get("user")
100 174
 	if userRaw == nil {
101 175
 		return errors.New("登录异常, 请登出重试")
@@ -108,9 +182,114 @@ func (m *GoodsDAO) SaveGoods(goods *model.TaGoods) error {
108 182
 	goods.CreateUser = user.UserId
109 183
 	goods.OrgId = user.OrgId
110 184
 
185
+	// 商品图片
186
+	if images != nil && len(images) > 0 {
187
+		goodsImages := make([]model.TaGoodsImg, 0)
188
+
189
+		for _, img := range images {
190
+			goodsImages = append(goodsImages, model.TaGoodsImg{
191
+				ImgId:   guid.NewGUIDString(),
192
+				GoodsId: goods.GoodsId,
193
+				ImgUrl:  img,
194
+				Status:  models.STATUS_NORMAL,
195
+			})
196
+		}
197
+
198
+		if _, err := m.db.Insert(&goodsImages); err != nil {
199
+			return err
200
+		}
201
+	}
202
+
203
+	// 规格
204
+	if specs != nil && len(specs) > 0 {
205
+		goodsSpecs := make([]model.TaGoodsSpec, 0)
206
+
207
+		for _, spec := range specs {
208
+			goodsSpecs = append(goodsSpecs, model.TaGoodsSpec{
209
+				SpecId:     spec.SpecId,
210
+				GoodsId:    goods.GoodsId,
211
+				GoodsPrice: spec.GoodsPrice,
212
+			})
213
+		}
214
+
215
+		if _, err := m.db.Insert(&goodsSpecs); err != nil {
216
+			return err
217
+		}
218
+	}
219
+
111 220
 	if _, err := m.db.Insert(goods); err != nil {
112 221
 		return err
113 222
 	}
114 223
 
115 224
 	return nil
116 225
 }
226
+
227
+// UpdateGoods 更新商品
228
+func (m *GoodsDAO) UpdateGoods(goods *model.TaGoods, images []string, specs []SpecWithPrice) error {
229
+	cols := []string{
230
+		"goods_name",
231
+		"type_id",
232
+		"status",
233
+	}
234
+
235
+	// 商品图片
236
+	if images != nil && len(images) > 0 {
237
+		// 先清除旧数据
238
+		if _, err := m.db.Delete(&model.TaGoodsImg{GoodsId: goods.GoodsId}); err != nil {
239
+			return err
240
+		}
241
+
242
+		goodsImages := make([]model.TaGoodsImg, 0)
243
+		for _, img := range images {
244
+			goodsImages = append(goodsImages, model.TaGoodsImg{
245
+				ImgId:   guid.NewGUIDString(),
246
+				GoodsId: goods.GoodsId,
247
+				ImgUrl:  img,
248
+				Status:  models.STATUS_NORMAL,
249
+			})
250
+		}
251
+
252
+		if _, err := m.db.Insert(&goodsImages); err != nil {
253
+			return err
254
+		}
255
+	}
256
+
257
+	// 规格
258
+	if specs != nil && len(specs) > 0 {
259
+		// 先清除旧数据
260
+		if _, err := m.db.Delete(&model.TaGoodsSpec{GoodsId: goods.GoodsId}); err != nil {
261
+			return err
262
+		}
263
+
264
+		goodsSpecs := make([]model.TaGoodsSpec, 0)
265
+		for _, spec := range specs {
266
+			goodsSpecs = append(goodsSpecs, model.TaGoodsSpec{
267
+				SpecId:     spec.SpecId,
268
+				GoodsId:    goods.GoodsId,
269
+				GoodsPrice: spec.GoodsPrice,
270
+			})
271
+		}
272
+
273
+		if _, err := m.db.Insert(&goodsSpecs); err != nil {
274
+			return err
275
+		}
276
+	}
277
+
278
+	if _, err := m.db.Where("goods_id=?", goods.GoodsId).Cols(cols...).Update(goods); err != nil {
279
+		return err
280
+	}
281
+
282
+	return nil
283
+}
284
+
285
+// DeleteGoods 删除商品
286
+func (m *GoodsDAO) DeleteGoods(id string) error {
287
+	goods := new(model.TaGoods)
288
+	goods.Status = models.STATUS_DEL
289
+
290
+	if _, err := m.db.Where("goods_id=?", id).Cols("status").Update(goods); err != nil {
291
+		return err
292
+	}
293
+
294
+	return nil
295
+}

+ 57
- 0
models/goods/orders.go View File

@@ -12,6 +12,11 @@ import (
12 12
 	"github.com/yl10/kit/guid"
13 13
 )
14 14
 
15
+// GetOrdersByCases 获取案场订单列表
16
+func (m *GoodsDAO) GetOrdersByCases() error {
17
+	return nil
18
+}
19
+
15 20
 // SaveOrders 下单
16 21
 func (m *GoodsDAO) SaveOrders(order *model.TaGoodsOrders) error {
17 22
 	if order.UserId == "" {
@@ -110,3 +115,55 @@ func (m *GoodsDAO) getCaseByID(caseID string) (*model.SysCase, error) {
110 115
 
111 116
 	return cs, nil
112 117
 }
118
+
119
+// GetOrdersByCaseID 获取订单列表
120
+func (m *GoodsDAO) GetOrdersByCaseID(caseID, userType string, makeStatus []string, orderDate []time.Time, limit []int) ([]OrdersWithGoods, int64, error) {
121
+	var orderList []OrdersWithGoods
122
+
123
+	query := "select * from ta_goods_orders where case_id = ? and status = ?"
124
+
125
+	// 制作状态
126
+	if makeStatus != nil && len(makeStatus) > 0 {
127
+		query += ` and make_status in ('` + strings.Join(makeStatus, "','") + `')`
128
+	}
129
+
130
+	// 用户类型
131
+	if userType != "" {
132
+		query += ` and user_type = '` + userType + `'`
133
+	}
134
+
135
+	// 订单起始时间
136
+	if orderDate != nil && len(orderDate) > 0 {
137
+		query += ` and DATE_FORMAT(create_date, '%Y-%m-%d %H:%i') >= '` + orderDate[0].Format("2006-01-02 15:04") + `'`
138
+
139
+		if len(orderDate) > 1 {
140
+			query += ` and DATE_FORMAT(create_date, '%Y-%m-%d %H:%i') <= '` + orderDate[1].Format("2006-01-02 15:04") + `'`
141
+		}
142
+	}
143
+
144
+	query += " order by create_date asc"
145
+
146
+	var cnt int64
147
+	if limit != nil && len(limit) > 1 {
148
+		var err error
149
+		cnt, err = utils.NewPageNaviEngine(m.ctx).GetPageList(&orderList, query, limit, caseID, models.STATUS_NORMAL)
150
+		if err != nil {
151
+			return nil, 0, err
152
+		}
153
+	} else {
154
+		if err := m.db.SQL(query, caseID, models.STATUS_NORMAL).Find(&orderList); err != nil {
155
+			return nil, 0, err
156
+		}
157
+	}
158
+
159
+	for i, o := range orderList {
160
+		var details []model.TaGoodsOrdersDetail
161
+		if err := m.db.Where("orders_id=?", o.OrdersId).Find(&details); err != nil {
162
+			return nil, 0, err
163
+		}
164
+
165
+		orderList[i].Goods = details
166
+	}
167
+
168
+	return orderList, cnt, nil
169
+}

+ 1
- 0
models/goods/type.go View File

@@ -51,6 +51,7 @@ func (m *GoodsDAO) AddGoodsType(goodsType *model.TdGoodsType) (*model.TdGoodsTyp
51 51
 func (m *GoodsDAO) UpdateGoodsType(goodsType *model.TdGoodsType) error {
52 52
 	var cols = []string{
53 53
 		"type_name",
54
+		"case_id",
54 55
 	}
55 56
 	_, err := m.db.Cols(cols...).Where("type_id=?", goodsType.TypeId).Update(goodsType)
56 57
 	return err

+ 15
- 1
models/goods/types.go View File

@@ -4,10 +4,18 @@ import (
4 4
 	"spaceofcheng/services/models/model"
5 5
 )
6 6
 
7
+// 商品订单 - 制作状态
8
+const (
9
+	MAKESTATUS_NOTSTARTED = "not started"
10
+	MAKESTATUS_DOING      = "doing"
11
+	MAKESTATUS_FINISHED   = "finished"
12
+	MAKESTATUS_CANCEL     = "cancel"
13
+)
14
+
7 15
 // SpecWithPrice 规格价格
8 16
 type SpecWithPrice struct {
9 17
 	model.TdSpec
10
-	GoodsPrice float32 `xorm:"FLOAT(8,2)"`
18
+	GoodsPrice string `xorm:"DECIMAL(8,2)"`
11 19
 }
12 20
 
13 21
 // GoodsWithSpec 含规格商品
@@ -21,3 +29,9 @@ type GoodsWithPrice struct {
21 29
 	model.TaGoods     `xorm."extends"`
22 30
 	model.TaGoodsSpec `xorm."extends"`
23 31
 }
32
+
33
+// OrdersWithGoods 订单列表
34
+type OrdersWithGoods struct {
35
+	model.TaGoodsOrders
36
+	Goods []model.TaGoodsOrdersDetail
37
+}

+ 6
- 5
models/message/cmscase.go View File

@@ -27,7 +27,7 @@ const (
27 27
 func (m *MessageDAO) GetCmsCaseList(name, caseids string, page int, pageSize int) ([]CmsCaseInfo, error) {
28 28
 	var cases []CmsCaseInfo
29 29
 	sql := `select a.*,b.case_name from ta_cms_case a inner join sys_case b on a.case_id = b.case_id 
30
-	where a.org_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and a.name like '%` + name + `%' and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
30
+	where a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and a.name like '%` + name + `%' and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
31 31
 	and b.status > ` + strconv.Itoa(models.STATUS_DEL) + `
32 32
 	order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(page*pageSize)
33 33
 	err := m.db.Sql(sql).Find(&cases)
@@ -35,10 +35,11 @@ func (m *MessageDAO) GetCmsCaseList(name, caseids string, page int, pageSize int
35 35
 }
36 36
 
37 37
 // GetCmsCaseByOrg 获取列表
38
-func (m *MessageDAO) GetCmsCaseByOrg(orgid string) ([]model.TaCmsCase, error) {
39
-	var cases []model.TaCmsCase
40
-	err := m.db.Where("org_id=?", orgid).Find(&cases)
41
-	beego.Error(cases)
38
+func (m *MessageDAO) GetCmsCaseByOrg(orgid string) ([]CmsCase, error) {
39
+	var cases []CmsCase
40
+	sql := `select * from ta_cms_case where org_id='` + orgid + `' and status=` + strconv.Itoa(models.STATUS_NORMAL)
41
+	err := m.db.Sql(sql).Find(&cases)
42
+	// err := m.db.Where("org_id=?", orgid).Find(&cases)
42 43
 	return cases, err
43 44
 }
44 45
 

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

@@ -26,7 +26,7 @@ func (m *MessageDAO) GetImgListCount(orgid string) (int, error) {
26 26
 }
27 27
 
28 28
 // GetImgByLocation 根据位置获取轮播图信息
29
-func (m *MessageDAO) GetImgByLocation(orgid, locationid string) ([]model.TaCmsImages, error) {
29
+func (m *MessageDAO) GetImgByLocation(locationid, orgid string) ([]model.TaCmsImages, error) {
30 30
 	var imgs []model.TaCmsImages
31 31
 	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("org_id=?", orgid).And("location_id=?", locationid).Asc("sort").Find(&imgs)
32 32
 	return imgs, err

+ 7
- 0
models/message/location.go View File

@@ -103,3 +103,10 @@ func (m *MessageDAO) UpdateLocationSort(loc []string) error {
103 103
 	_, err = m.db.Cols(cols...).Where("location_id=?", location.LocationId).Update(location)
104 104
 	return err
105 105
 }
106
+
107
+// UpdateLocationSortByID 根据id修改之后的顺序
108
+func (m *MessageDAO) UpdateLocationSortByID(orderno int) error {
109
+	sql := `update td_cms_image_location set order_no = order_no - 1 where order_no > ` + strconv.Itoa(orderno)
110
+	_, err := m.db.Exec(sql)
111
+	return err
112
+}

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

@@ -5,12 +5,14 @@ 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('案场管理员 咖啡师 消息收发员') 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('案场管理员
14
+            咖啡师
15
+            消息收发员') VARCHAR(20)"`
14 16
 	Status     int       `xorm:"SMALLINT(6)"`
15 17
 	CreateDate time.Time `xorm:"DATETIME"`
16 18
 }

+ 1
- 1
models/model/sys_tag_case.go View File

@@ -2,5 +2,5 @@ package model
2 2
 
3 3
 type SysTagCase struct {
4 4
 	TagId  string `xorm:"not null pk VARCHAR(64)"`
5
-	CaseId string `xorm:"VARCHAR(64)"`
5
+	CaseId string `xorm:"not null pk VARCHAR(64)"`
6 6
 }

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

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

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

@@ -9,6 +9,6 @@ type SysWechatConf struct {
9 9
 	Token  string `xorm:"VARCHAR(50)"`
10 10
 	Aeskey string `xorm:"VARCHAR(100)"`
11 11
 	Wxid   string `xorm:"VARCHAR(50)"`
12
-	Rmark  string `xorm:"TEXT"`
12
+	Remark string `xorm:"TEXT"`
13 13
 	Status int    `xorm:"SMALLINT(6)"`
14 14
 }

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

@@ -5,19 +5,25 @@ 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
-	CustomerId   string    `xorm:"VARCHAR(64)"`
11
-	CustomerName 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       string    `xorm:"DECIMAL(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)"`
8
+	DetailId     string `xorm:"not null pk VARCHAR(64)"`
9
+	AccountId    string `xorm:"VARCHAR(64)"`
10
+	CustomerId   string `xorm:"VARCHAR(64)"`
11
+	CustomerName 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     string `xorm:"DECIMAL(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)"`
23 29
 }

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

@@ -5,6 +5,7 @@ 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:封面 detail:详情') VARCHAR(32)"`
9
-	Sort           int    `xorm:"INT(11)"`
8
+	ImageType      string `xorm:"comment('cover:封面
9
+            detail:详情') VARCHAR(32)"`
10
+	Sort int `xorm:"INT(11)"`
10 11
 }

+ 28
- 0
models/model/ta_coupon_card2.go View File

@@ -0,0 +1,28 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaCouponCard2 struct {
8
+	CardId           string    `xorm:"not null pk VARCHAR(64)"`
9
+	CardTypeId       string    `xorm:"VARCHAR(64)"`
10
+	SendType         int       `xorm:"comment('0案场 1渠道') SMALLINT(6)"`
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
+	ShareDescription string    `xorm:"VARCHAR(255)"`
17
+	RuleDescription  string    `xorm:"VARCHAR(400)"`
18
+	UseDescription   string    `xorm:"TEXT"`
19
+	TotalCount       int       `xorm:"INT(11)"`
20
+	SentCount        int       `xorm:"INT(11)"`
21
+	UsedCount        int       `xorm:"INT(11)"`
22
+	Status           int       `xorm:"comment('0未发布 1发布 2过期') SMALLINT(6)"`
23
+	CaseId           string    `xorm:"VARCHAR(64)"`
24
+	OrgId            string    `xorm:"VARCHAR(64)"`
25
+	CreateDate       time.Time `xorm:"DATETIME"`
26
+	CreateUser       string    `xorm:"VARCHAR(64)"`
27
+	IsOver           int       `xorm:"TINYINT(1)"`
28
+}

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

@@ -5,4 +5,5 @@ type TaCouponCardTarget struct {
5 5
 	CardId     string `xorm:"VARCHAR(64)"`
6 6
 	DetailId   string `xorm:"VARCHAR(64)"`
7 7
 	TargetName string `xorm:"VARCHAR(255)"`
8
+	CardState  string `xorm:"VARCHAR(64)"`
8 9
 }

+ 7
- 0
models/model/ta_coupon_card_target2.go View File

@@ -0,0 +1,7 @@
1
+package model
2
+
3
+type TaCouponCardTarget2 struct {
4
+	TargetId   string `xorm:"not null pk VARCHAR(64)"`
5
+	CardId     string `xorm:"VARCHAR(64)"`
6
+	TargetName string `xorm:"VARCHAR(255)"`
7
+}

+ 0
- 2
models/model/ta_course_orders.go View File

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

+ 14
- 0
models/model/ta_course_orders_detail.go View File

@@ -0,0 +1,14 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaCourseOrdersDetail struct {
8
+	OrdersDetailId string    `xorm:"not null pk VARCHAR(64)"`
9
+	OrdersId       string    `xorm:"not null VARCHAR(64)"`
10
+	CourseId       string    `xorm:"VARCHAR(64)"`
11
+	CourseDetailId string    `xorm:"VARCHAR(64)"`
12
+	BeginDate      time.Time `xorm:"DATETIME"`
13
+	EndDate        time.Time `xorm:"DATETIME"`
14
+}

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

@@ -19,4 +19,5 @@ type TaCustomerCard struct {
19 19
 	VerifyDate       time.Time `xorm:"DATETIME"`
20 20
 	CaseId           string    `xorm:"VARCHAR(64)"`
21 21
 	OrgId            string    `xorm:"VARCHAR(64)"`
22
+	VerifyStatus     string    `xorm:"VARCHAR(32)"`
22 23
 }

+ 4
- 0
models/model/ta_customer_course.go View File

@@ -20,4 +20,8 @@ type TaCustomerCourse struct {
20 20
 	Address          string    `xorm:"VARCHAR(200)"`
21 21
 	CourseDate       string    `xorm:"VARCHAR(200)"`
22 22
 	Remark           string    `xorm:"TEXT"`
23
+	CourseObtaimType string    `xorm:"VARCHAR(32)"`
24
+	SourceId         string    `xorm:"VARCHAR(64)"`
25
+	Status           int       `xorm:"SMALLINT(6)"`
26
+	IsDone           int       `xorm:"TINYINT(1)"`
23 27
 }

+ 19
- 0
models/model/ta_customer_course_detail.go View File

@@ -0,0 +1,19 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaCustomerCourseDetail struct {
8
+	CustomerDetailId string    `xorm:"not null pk VARCHAR(64)"`
9
+	CustomerCourseId string    `xorm:"VARCHAR(64)"`
10
+	CourseId         string    `xorm:"VARCHAR(64)"`
11
+	DetailId         string    `xorm:"VARCHAR(64)"`
12
+	StartDate        time.Time `xorm:"DATETIME"`
13
+	EndDate          time.Time `xorm:"DATETIME"`
14
+	VerifyStatus     string    `xorm:"VARCHAR(32)"`
15
+	VerifyDate       time.Time `xorm:"DATETIME"`
16
+	VerifyUser       string    `xorm:"VARCHAR(64)"`
17
+	CaseId           string    `xorm:"VARCHAR(64)"`
18
+	Status           int       `xorm:"SMALLINT(6)"`
19
+}

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

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

+ 1
- 1
models/model/ta_forbid_user.go View File

@@ -8,7 +8,7 @@ type TaForbidUser struct {
8 8
 	ForbidId   string    `xorm:"not null pk VARCHAR(64)"`
9 9
 	UserId     string    `xorm:"VARCHAR(64)"`
10 10
 	UserType   string    `xorm:"VARCHAR(64)"`
11
-	ForbidType string    `xorm:"VARCHAR(20)"`
11
+	ForbidType string    `xorm:"comment('order 订单  coupon 卡券') VARCHAR(20)"`
12 12
 	BeginDate  time.Time `xorm:"DATETIME"`
13 13
 	EndDate    time.Time `xorm:"DATETIME"`
14 14
 	Status     int       `xorm:"SMALLINT(6)"`

+ 22
- 20
models/model/ta_goods_orders.go View File

@@ -5,24 +5,26 @@ import (
5 5
 )
6 6
 
7 7
 type TaGoodsOrders struct {
8
-	OrdersId     string    `xorm:"not null pk VARCHAR(64)"`
9
-	OrdersNo     string    `xorm:"VARCHAR(32)"`
10
-	OrgId        string    `xorm:"VARCHAR(64)"`
11
-	CaseId       string    `xorm:"VARCHAR(64)"`
12
-	AreaId       string    `xorm:"VARCHAR(64)"`
13
-	AreaName     string    `xorm:"VARCHAR(50)"`
14
-	TableId      string    `xorm:"VARCHAR(64)"`
15
-	TableNo      string    `xorm:"VARCHAR(50)"`
16
-	Amount       string    `xorm:"DECIMAL(8,2)"`
17
-	CreateDate   time.Time `xorm:"DATETIME"`
18
-	Status       int       `xorm:"SMALLINT(6)"`
19
-	PayType      string    `xorm:"comment('vip VIP卡城币抵用 coupon 优惠券抵用') VARCHAR(20)"`
20
-	UserType     string    `xorm:"VARCHAR(20)"`
21
-	UserId       string    `xorm:"VARCHAR(64)"`
22
-	UserName     string    `xorm:"VARCHAR(50)"`
23
-	OrdersNum    int       `xorm:"INT(11)"`
24
-	Remark       string    `xorm:"TEXT"`
25
-	IsPay        int       `xorm:"TINYINT(1)"`
26
-	ActualAmount string    `xorm:"DECIMAL(8,2)"`
27
-	CouponAmount string    `xorm:"DECIMAL(8,2)"`
8
+	OrdersId   string    `xorm:"not null pk VARCHAR(64)"`
9
+	OrdersNo   string    `xorm:"VARCHAR(32)"`
10
+	OrgId      string    `xorm:"VARCHAR(64)"`
11
+	CaseId     string    `xorm:"VARCHAR(64)"`
12
+	AreaId     string    `xorm:"VARCHAR(64)"`
13
+	AreaName   string    `xorm:"VARCHAR(50)"`
14
+	TableId    string    `xorm:"VARCHAR(64)"`
15
+	TableNo    string    `xorm:"VARCHAR(50)"`
16
+	Amount     string    `xorm:"DECIMAL(8,2)"`
17
+	CreateDate time.Time `xorm:"DATETIME"`
18
+	Status     int       `xorm:"SMALLINT(6)"`
19
+	PayType    string    `xorm:"comment('vip VIP卡城币抵用
20
+            coupon 优惠券抵用') VARCHAR(20)"`
21
+	UserType     string `xorm:"VARCHAR(20)"`
22
+	UserId       string `xorm:"VARCHAR(64)"`
23
+	UserName     string `xorm:"VARCHAR(50)"`
24
+	OrdersNum    int    `xorm:"INT(11)"`
25
+	Remark       string `xorm:"TEXT"`
26
+	IsPay        int    `xorm:"TINYINT(1)"`
27
+	ActualAmount string `xorm:"DECIMAL(8,2)"`
28
+	CouponAmount string `xorm:"DECIMAL(8,2)"`
29
+	MakeStatus   string `xorm:"VARCHAR(20)"`
28 30
 }

+ 14
- 0
models/model/ta_stop_user.go View File

@@ -0,0 +1,14 @@
1
+package model
2
+
3
+import (
4
+	"time"
5
+)
6
+
7
+type TaStopUser struct {
8
+	StopId    string    `xorm:"not null pk VARCHAR(64)"`
9
+	UserId    string    `xorm:"VARCHAR(64)"`
10
+	UserType  string    `xorm:"VARCHAR(64)"`
11
+	StopType  int       `xorm:"SMALLINT(6)"`
12
+	BeginDate time.Time `xorm:"DATETIME"`
13
+	EndDate   time.Time `xorm:"DATETIME"`
14
+}

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

@@ -1,10 +1,12 @@
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 为会员 user 为后台用户') VARCHAR(50)"`
7
-	AccountType string `xorm:"comment('wechat 微信公众号 mini 小程序') VARCHAR(50)"`
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)"`
8 10
 	Openid      string `xorm:"VARCHAR(200)"`
9 11
 	Uuid        string `xorm:"VARCHAR(200)"`
10 12
 	AccountInfo string `xorm:"TEXT"`

+ 48
- 4
models/system/user.go View File

@@ -41,7 +41,7 @@ func (m *UserDAO) GetUserList(username, typeid, caseids string, page int, pageSi
41 41
 		INNER join td_user_type b on a.type_id = b.type_id
42 42
 		group by a.user_id) c on user.user_id = c.user_id where 
43 43
 		(status> ` + strconv.Itoa(models.STATUS_DEL) + ` and user_name like '%` + username + `%' and user.user_id in 
44
-		(select user_id from sys_user_tag a inner join sys_tag_case b on a.tag_id=b.tag_id where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
44
+		(select user_id from sys_user_case where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
45 45
 
46 46
 	if typeid != "" {
47 47
 		sql = sql + " and user.user_id in (select user_id from sys_user_type where type_id = '" + typeid + "')"
@@ -60,11 +60,12 @@ func (m *UserDAO) GetUserCount(username, typeid, caseids string) (int, error) {
60 60
 		INNER join td_user_type b on a.type_id = b.type_id
61 61
 		group by a.user_id) c on user.user_id = c.user_id where 
62 62
 		(status> ` + strconv.Itoa(models.STATUS_DEL) + ` and user_name like '%` + username + `%' and user.user_id in 
63
-		(select user_id from sys_user_tag a inner join sys_tag_case b on a.tag_id=b.tag_id where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
63
+		(select user_id from sys_user_case where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
64 64
 
65 65
 	if typeid != "" {
66 66
 		sql = sql + " and user.user_id in (select user_id from sys_user_type where type_id = '" + typeid + "')"
67 67
 	}
68
+
68 69
 	err := m.db.Sql(sql).Find(&users)
69 70
 	if err != nil {
70 71
 		return 0, err
@@ -105,9 +106,9 @@ func (m *UserDAO) GetUserByID(userid string) (*UserInfo, error) {
105 106
 }
106 107
 
107 108
 // GetUserTypes 获取所有的用户类型
108
-func (m *UserDAO) GetUserTypes(caseids string) ([]model.TdUserType, error) {
109
+func (m *UserDAO) GetUserTypes(orgid string) ([]model.TdUserType, error) {
109 110
 	var usertype []model.TdUserType
110
-	err := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").Find(&usertype)
111
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("org_id=?", orgid).Find(&usertype)
111 112
 	return usertype, err
112 113
 }
113 114
 
@@ -168,6 +169,7 @@ func (m *UserDAO) UpdateUser(user model.SysUser) error {
168 169
 		"phone",
169 170
 		"headimgurl",
170 171
 		"user_type_name",
172
+		"case_id",
171 173
 	}
172 174
 	_, err := m.db.Cols(col...).Where("user_id=?", user.UserId).Update(user)
173 175
 	return err
@@ -378,3 +380,45 @@ func (m *UserDAO) UpdateUserMapping(userMap *model.TaUserMapping, cols []string)
378 380
 	_, err := m.db.Where("mapping_id=?", userMap.MappingId).Cols(cols...).Update(userMap)
379 381
 	return err
380 382
 }
383
+
384
+type UserWithType struct {
385
+	model.SysUser
386
+	TypeId   string
387
+	TypeName string
388
+	CaseId   string
389
+}
390
+
391
+// GetUserWithTypeByID 获取用户类型
392
+func (m *UserDAO) GetUserWithTypeByID(userID string) ([]UserWithType, error) {
393
+	query := `
394
+		SELECT
395
+			t.*, m.type_id,
396
+			m.type_name,
397
+			m.case_id
398
+		FROM
399
+			sys_user t
400
+		JOIN sys_user_type s ON t.user_id = s.user_id
401
+		JOIN td_user_type m ON s.type_id = m.type_id
402
+		AND m.status = ?
403
+		WHERE
404
+			t.user_id = ?
405
+	`
406
+
407
+	var userTypes []UserWithType
408
+	if err := m.db.SQL(query, models.STATUS_NORMAL, userID).Find(&userTypes); err != nil {
409
+		return nil, err
410
+	}
411
+
412
+	return userTypes, nil
413
+}
414
+
415
+// GetForbidUserByUserID 查询禁用人员
416
+func (m *UserDAO) GetForbidUserByUserID(userID string) ([]model.TaForbidUser, error) {
417
+	var fbUsers []model.TaForbidUser
418
+
419
+	if err := m.db.Where("user_id=?", userID).Find(&fbUsers); err != nil {
420
+		return nil, err
421
+	}
422
+
423
+	return fbUsers, nil
424
+}

+ 11
- 1
routers/common.go View File

@@ -121,7 +121,7 @@ func getCommonRoutes() beego.LinkNamespace {
121 121
 		beego.NSRouter("/case/key", &cases.CaseController{}, "get:GetKeyList"),
122 122
 		beego.NSRouter("/case/key", &cases.CaseController{}, "post:AddKeys"),
123 123
 		beego.NSRouter("/case/unlock/:keyid", &cases.CaseController{}, "put:UnLockKey"),
124
-		beego.NSRouter("/case/key/:id", &cases.CaseController{}, "delete:DelKey"),
124
+		beego.NSRouter("/case/key/:keyid", &cases.CaseController{}, "delete:DelKey"),
125 125
 
126 126
 		// casearea 案场区域
127 127
 		beego.NSRouter("/case/area", &cases.CaseController{}, "get:GetCaseArea"),
@@ -181,6 +181,16 @@ func getCommonRoutes() beego.LinkNamespace {
181 181
 		beego.NSRouter("/detail", &course.CourseController{}, "put:SaveDetail"),
182 182
 		beego.NSRouter("/detail/:detailid", &course.CourseController{}, "delete:DelCourseDetail"),
183 183
 
184
+		// 商品
185
+		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListByCase"),
186
+		beego.NSRouter("/goods", &goods.GoodsController{}, "post:UpdateGoods"),
187
+		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "put:UpdateGoods"),
188
+		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "delete:UpdateGoods"),
189
+
190
+		// 商品订单
191
+		beego.NSRouter("/order/goods", &goods.GoodsController{}, "get:GetOrderList"),
192
+		beego.NSRouter("/order/online/goods", &goods.GoodsController{}, "get:GetOnlineOrder"),
193
+
184 194
 		// 文件
185 195
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
186 196
 

+ 11
- 0
routers/guest.go View File

@@ -3,7 +3,9 @@ package routers
3 3
 import (
4 4
 	"spaceofcheng/services/controllers"
5 5
 	"spaceofcheng/services/controllers/cases"
6
+	"spaceofcheng/services/controllers/course"
6 7
 	"spaceofcheng/services/controllers/customer"
8
+	"spaceofcheng/services/controllers/goods"
7 9
 	"spaceofcheng/services/controllers/message"
8 10
 	"spaceofcheng/services/controllers/user"
9 11
 
@@ -18,10 +20,19 @@ func getGuestRoutes() beego.LinkNamespace {
18 20
 		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoByLocation"),
19 21
 		beego.NSRouter("/cms/img", &message.MessageController{}, "get:GetImgByLocation"),
20 22
 		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
23
+		beego.NSRouter("/cms/case", &message.MessageController{}, "get:GetCmsCaseList"),
24
+		beego.NSRouter("/cms/location", &message.MessageController{}, "get:GetLocations"),
25
+		beego.NSRouter("/cms/course", &course.CourseController{}, "get:GetCourseByLocation"),
21 26
 
22 27
 		// 案场
23 28
 		beego.NSRouter("/case", &cases.CaseController{}, "get:GetOrgCases"),
24 29
 
30
+		// 商品制作状态
31
+		beego.NSRouter("/dict/order/makestatus", &goods.GoodsController{}, "get:GetMakeStatus"),
32
+
33
+		// 商品
34
+		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListForWechat"),
35
+
25 36
 		// 验证码 获取, 校验
26 37
 		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),
27 38
 		beego.NSRouter("/captcha", &controllers.BaseController{}, "post:ValidCaptcha"),

+ 4
- 0
routers/wechat.go View File

@@ -2,6 +2,7 @@ package routers
2 2
 
3 3
 import (
4 4
 	"spaceofcheng/services/controllers/customer"
5
+	"spaceofcheng/services/controllers/goods"
5 6
 
6 7
 	"github.com/astaxie/beego"
7 8
 )
@@ -12,5 +13,8 @@ func getWechatRoutes() beego.LinkNamespace {
12 13
 	return beego.NSNamespace(prefix,
13 14
 		// 会员
14 15
 		beego.NSRouter("/customer", &customer.CustomerController{}, "get:GetCustWXByID"),
16
+
17
+		// 下单
18
+		beego.NSRouter("/order", &goods.GoodsController{}, "post:PostOrder"),
15 19
 	)
16 20
 }

+ 10
- 2
service/cases/key.go View File

@@ -63,15 +63,23 @@ func (s *CaseServ) GetKeysByCase(caseid, num string, page, pageSize int) (map[st
63 63
 
64 64
 // AddKeys 保存钥匙
65 65
 func (s *CaseServ) AddKeys(orgid, caseid string, beginnum, endnum int) error {
66
-	if endnum <= beginnum {
67
-		return utils.LogError("锁柜编号起始不能大于截止时间!")
66
+	if endnum < beginnum {
67
+		return utils.LogError("锁柜编号起始编号不能大于截止编号!")
68 68
 	}
69 69
 
70
+	keys, err := s.dao.GetKeyByNum(caseid, beginnum, endnum)
71
+	if err != nil {
72
+		return err
73
+	}
74
+	if len(keys) > 0 {
75
+		return utils.LogError("锁柜编号存在重复!请检查后再试!")
76
+	}
70 77
 	for i := beginnum; i <= endnum; i++ {
71 78
 		key := model.TaCaseKey{
72 79
 			OrgId:      orgid,
73 80
 			CaseId:     caseid,
74 81
 			LockNum:    strconv.Itoa(i),
82
+			LockNo:     i,
75 83
 			KeyId:      utils.GetGUID(),
76 84
 			Status:     cases.STATUS_UNLOCK,
77 85
 			CreateDate: time.Now(),

+ 3
- 3
service/cases/tag.go View File

@@ -10,19 +10,19 @@ import (
10 10
 )
11 11
 
12 12
 // GetTagList 获取tag列表
13
-func (s *CaseServ) GetTagList(caseids string, page, pageSize int) (map[string]interface{}, error) {
13
+func (s *CaseServ) GetTagList(caseid, caseids string, page, pageSize int) (map[string]interface{}, error) {
14 14
 	if pageSize == 0 {
15 15
 		pageSize = service.PAGENUM
16 16
 	}
17 17
 	if page == 0 {
18 18
 		page = 1
19 19
 	}
20
-	tags, err := s.dao.GetTagList(caseids, page, pageSize)
20
+	tags, err := s.dao.GetTagList(caseid, caseids, page, pageSize)
21 21
 	if err != nil {
22 22
 		beego.Error(err)
23 23
 		return nil, err
24 24
 	}
25
-	total, err := s.dao.GetTagCount(caseids)
25
+	total, err := s.dao.GetTagCount(caseid, caseids)
26 26
 	if err != nil {
27 27
 		beego.Error(err)
28 28
 		return nil, err

+ 101
- 11
service/course/course.go View File

@@ -2,6 +2,7 @@ package course
2 2
 
3 3
 import (
4 4
 	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/cases"
5 6
 	"spaceofcheng/services/models/course"
6 7
 	"spaceofcheng/services/models/model"
7 8
 	"spaceofcheng/services/service"
@@ -13,15 +14,17 @@ import (
13 14
 
14 15
 // CourseServ 系统处理
15 16
 type CourseServ struct {
16
-	ctx *utils.Context
17
-	dao *course.CourseDAO
17
+	ctx     *utils.Context
18
+	dao     *course.CourseDAO
19
+	casedao *cases.CaseDAO
18 20
 }
19 21
 
20 22
 // NewCourseServ 初始化
21 23
 func NewCourseServ(ctx *utils.Context) *CourseServ {
22 24
 	return &CourseServ{
23
-		ctx: ctx,
24
-		dao: course.NewCourseDAO(ctx),
25
+		ctx:     ctx,
26
+		dao:     course.NewCourseDAO(ctx),
27
+		casedao: cases.NewCaseDAO(ctx),
25 28
 	}
26 29
 }
27 30
 
@@ -83,6 +86,11 @@ func (s *CourseServ) GetCourseByID(courseid string) (*course.CourseDetail, error
83 86
 		return nil, err
84 87
 	}
85 88
 	info.CourseImgs = imgs
89
+	caseinfo, err := s.casedao.GetCaseByID(info.CaseId)
90
+	if err != nil {
91
+		return nil, err
92
+	}
93
+	info.CaseInfo = caseinfo
86 94
 	return info, nil
87 95
 }
88 96
 
@@ -180,7 +188,18 @@ func (s *CourseServ) DelCourse(courseid string) error {
180 188
 	if courseid == "" {
181 189
 		return utils.LogError("没有对应的课程!")
182 190
 	}
183
-	err := s.dao.DelCourse(courseid)
191
+	courseinfo, err := s.dao.GetCourseByID(courseid)
192
+	if err != nil {
193
+		return err
194
+	}
195
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
196
+		return utils.LogError("课程状态异常!不允许删除!")
197
+	}
198
+	err = s.dao.DelCourse(courseid)
199
+	if err != nil {
200
+		return err
201
+	}
202
+	err = s.dao.DeleteScheduleByCourse(courseid)
184 203
 	return err
185 204
 }
186 205
 
@@ -316,14 +335,25 @@ func (s *CourseServ) SaveDetail(detail model.TaCourseDetail) (*model.TaCourseDet
316 335
 	if detail.BeginDate.After(detail.EndDate) {
317 336
 		return nil, utils.LogError("课程截止时间必须大于开始时间!")
318 337
 	}
338
+	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
339
+	if err != nil {
340
+		return nil, err
341
+	}
342
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
343
+		return nil, utils.LogError("课程状态异常!不允许排课!请刷新后重试!")
344
+	}
319 345
 	if detail.DetailId == "" {
320
-		course, err := s.dao.GetCourseByID(detail.CourseId)
346
+		detail.OrgId = courseinfo.OrgId
347
+		detail.CaseId = courseinfo.CaseId
348
+		newinfo, err = s.dao.AddCourseDetail(detail)
321 349
 		if err != nil {
322 350
 			return nil, err
323 351
 		}
324
-		detail.OrgId = course.OrgId
325
-		detail.CaseId = course.CaseId
326
-		newinfo, err = s.dao.AddCourseDetail(detail)
352
+		num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
353
+		if err != nil {
354
+			return nil, err
355
+		}
356
+		err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
327 357
 		if err != nil {
328 358
 			return nil, err
329 359
 		}
@@ -342,6 +372,66 @@ func (s *CourseServ) DelCourseDetail(detailid string) error {
342 372
 	if detailid == "" {
343 373
 		return utils.LogError("没有对应的排课信息!")
344 374
 	}
345
-	err := s.dao.DelCourseDetail(detailid)
346
-	return err
375
+	detail, err := s.dao.GetDetailByID(detailid)
376
+	if err != nil {
377
+		return err
378
+	}
379
+	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
380
+	if err != nil {
381
+		return err
382
+	}
383
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
384
+		return utils.LogError("课程状态异常!不允许删除!")
385
+	}
386
+	err = s.dao.DelCourseDetail(detailid)
387
+	if err != nil {
388
+		return err
389
+	}
390
+	num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
391
+	if err != nil {
392
+		return err
393
+	}
394
+	err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
395
+	if err != nil {
396
+		return err
397
+	}
398
+	return nil
399
+}
400
+
401
+// GetCourseBySelect 获取精选课程
402
+func (s *CourseServ) GetSelectCourseList(orgid string) ([]course.CourseDetail, error) {
403
+	if orgid == "" {
404
+		return nil, utils.LogError("参数错误!")
405
+	}
406
+	list, err := s.dao.GetSelectCourseList(orgid)
407
+	if err != nil {
408
+		return nil, err
409
+	}
410
+	for i, v := range list {
411
+		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
412
+		if err != nil {
413
+			return nil, err
414
+		}
415
+		list[i].CaseInfo = caseinfo
416
+	}
417
+	return list, err
418
+}
419
+
420
+// GetCourseByLocation 根据位置获取课程
421
+func (s *CourseServ) GetCourseByLocation(orgid, locationid string) ([]course.CourseDetail, error) {
422
+	if orgid == "" || locationid == "" {
423
+		return nil, utils.LogError("参数错误!")
424
+	}
425
+	list, err := s.dao.GetCourseByLocation(orgid, locationid)
426
+	if err != nil {
427
+		return nil, err
428
+	}
429
+	for i, v := range list {
430
+		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
431
+		if err != nil {
432
+			return nil, err
433
+		}
434
+		list[i].CaseInfo = caseinfo
435
+	}
436
+	return list, err
347 437
 }

+ 5
- 0
service/course/order.go View File

@@ -0,0 +1,5 @@
1
+package course
2
+
3
+func (s *CourseServ) Order() error {
4
+
5
+}

+ 4
- 3
service/customer/customer.go View File

@@ -156,13 +156,14 @@ func (s *CustomerServ) BindWechatCust(userMap *model.TaUserMapping, phone, caseI
156 156
 		return nil, errors.New("用户状态不正确")
157 157
 	}
158 158
 
159
-	// triggerRegiteEvent 触发注册事件
160
-	utils.EmitEvent(events.EvtRegiste, *cust)
161
-
159
+	// 如果客户ID 与映射表中一致, 说明已经绑定过了
162 160
 	if cust.CustomerId == userMap.UserId {
163 161
 		return cust, nil
164 162
 	}
165 163
 
164
+	// triggerRegiteEvent 触发注册事件
165
+	utils.EmitEvent(events.EvtRegiste, *cust)
166
+
166 167
 	// 更新用户映射信息
167 168
 	userMap.UserId = cust.CustomerId
168 169
 	if err := s.dao.UpdateUserMapping(userMap, []string{"user_id"}); err != nil {

+ 87
- 0
service/goods/goods.go View File

@@ -1,10 +1,15 @@
1 1
 package goods
2 2
 
3 3
 import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
4 6
 	"spaceofcheng/services/models/cases"
5 7
 	"spaceofcheng/services/models/customer"
6 8
 	"spaceofcheng/services/models/goods"
9
+	"spaceofcheng/services/models/model"
10
+	"spaceofcheng/services/models/system"
7 11
 	"spaceofcheng/services/utils"
12
+	"strings"
8 13
 )
9 14
 
10 15
 // GoodsServ 系统处理
@@ -13,6 +18,7 @@ type GoodsServ struct {
13 18
 	dao     *goods.GoodsDAO
14 19
 	caseDAO *cases.CaseDAO
15 20
 	custDAO *customer.CustomerDAO
21
+	userDAO *system.UserDAO
16 22
 }
17 23
 
18 24
 // NewGoodsServ 初始化
@@ -22,5 +28,86 @@ func NewGoodsServ(ctx *utils.Context) *GoodsServ {
22 28
 		dao:     goods.NewGoodsDAO(ctx),
23 29
 		caseDAO: cases.NewCaseDAO(ctx),
24 30
 		custDAO: customer.NewCustomerDAO(ctx),
31
+		userDAO: system.NewUserDAO(ctx),
25 32
 	}
26 33
 }
34
+
35
+// GetListByCase 获取商品列表
36
+// 微信端
37
+func (s *GoodsServ) GetListByCase(id string) ([]goods.GoodsWithSpec, error) {
38
+	res, err := s.dao.GetGoodsListOfCase(id)
39
+
40
+	if err != nil {
41
+		utils.LogError("获取商品列表失败: " + err.Error())
42
+		return nil, errors.New("获取列表失败, 请重试")
43
+	}
44
+
45
+	return res, nil
46
+}
47
+
48
+// GetGoodsListPageNavi 获取商品列表
49
+// 前端 - 非统计部分
50
+func (s *GoodsServ) GetGoodsListPageNavi(name, typeID, caseID string, page, pagesize int) ([]goods.GoodsWithSpec, int64, error) {
51
+	if page < 1 {
52
+		page = 1
53
+	}
54
+	if pagesize < 0 {
55
+		pagesize = 0
56
+	}
57
+
58
+	offset := (page - 1) * pagesize
59
+
60
+	res, cnt, err := s.dao.GetGoodsListPageNavi(strings.ToLower(name), typeID, caseID, []int{pagesize, offset})
61
+	if err != nil {
62
+		utils.LogError("获取商品列表失败: " + err.Error())
63
+		return nil, 0, errors.New("获取列表失败, 请重试")
64
+	}
65
+
66
+	return res, cnt, nil
67
+}
68
+
69
+// UpdateGoods 更新商品
70
+// 如果没有则新增
71
+func (s *GoodsServ) UpdateGoods(goods *model.TaGoods, images []string, specs []goods.SpecWithPrice) error {
72
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(goods.CaseId); err != nil {
73
+		return err
74
+	}
75
+
76
+	if goods.GoodsId == "" {
77
+		if err := s.dao.SaveGoods(goods, images, specs); err != nil {
78
+			utils.LogError("保存商品失败: " + err.Error())
79
+			return errors.New("保存商品失败, 请重试")
80
+		}
81
+	} else {
82
+		if err := s.dao.UpdateGoods(goods, images, specs); err != nil {
83
+			utils.LogError("更新商品失败: " + err.Error())
84
+			return errors.New("更新商品失败, 请重试")
85
+		}
86
+	}
87
+
88
+	return nil
89
+}
90
+
91
+// DeleteGoods 删除商品
92
+func (s *GoodsServ) DeleteGoods(id string) error {
93
+	goods, err := s.dao.GetGoodsByID(id)
94
+	if err != nil {
95
+		utils.LogError("查询商品失败: " + err.Error())
96
+		return errors.New("校验商品失败")
97
+	}
98
+
99
+	if goods.Status == models.STATUS_DEL {
100
+		return nil
101
+	}
102
+
103
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(goods.CaseId); err != nil {
104
+		return err
105
+	}
106
+
107
+	if err := s.dao.DeleteGoods(id); err != nil {
108
+		utils.LogError("删除商品失败: " + err.Error())
109
+		return errors.New("删除商品失败")
110
+	}
111
+
112
+	return nil
113
+}

+ 82
- 1
service/goods/orders.go View File

@@ -3,9 +3,11 @@ package goods
3 3
 import (
4 4
 	"errors"
5 5
 	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/goods"
6 7
 	"spaceofcheng/services/models/model"
7 8
 	"spaceofcheng/services/utils"
8 9
 	"strconv"
10
+	"time"
9 11
 )
10 12
 
11 13
 // Orders 下单
@@ -72,6 +74,10 @@ func (s *GoodsServ) Orders(
72 74
 		}
73 75
 	}
74 76
 
77
+	// TODO
78
+	// 通知后端有新订单 - websocket
79
+	// utils.SendMessage()
80
+
75 81
 	return nil
76 82
 }
77 83
 
@@ -148,7 +154,32 @@ func (s *GoodsServ) validOrdersInfo(info *model.TaGoodsOrders) error {
148 154
 
149 155
 	// 如果是管理人员
150 156
 	if cust.UserId != "" {
151
-		fibUsers, err := s.custDAO.GetForbidUserByUserID(cust.UserId)
157
+		// 查找用户类型
158
+		userWithTypes, err := s.userDAO.GetUserWithTypeByID(cust.UserId)
159
+		if err != nil {
160
+			utils.LogError("查询下单人类型出错: " + err.Error())
161
+			return errors.New("验证下单人出错")
162
+		}
163
+		if userWithTypes != nil && len(userWithTypes) > 0 {
164
+			for _, ut := range userWithTypes {
165
+				if ut.Status != models.STATUS_NORMAL {
166
+					return errors.New("下单人状态不正确, 不能下单")
167
+				}
168
+
169
+				if ut.CaseId == caseID {
170
+					info.UserType = ut.TypeId
171
+
172
+					// 下单人姓名 - 姓名不存在则用昵称
173
+					info.UserName = ut.RealName
174
+					if info.UserName == "" {
175
+						info.UserName = cust.CustomerName
176
+					}
177
+				}
178
+			}
179
+		}
180
+
181
+		// 查找禁用名单
182
+		fibUsers, err := s.userDAO.GetForbidUserByUserID(cust.UserId)
152 183
 		if err != nil {
153 184
 			utils.LogError("查询下单人是否被禁出错: " + err.Error())
154 185
 			return errors.New("验证下单人出错")
@@ -202,3 +233,53 @@ func (s *GoodsServ) validBillCharges(info *model.TaGoodsOrders, details []model.
202 233
 
203 234
 	return nil
204 235
 }
236
+
237
+// GetOrderList 获取订单列表
238
+// 管理端 - 查询统计
239
+func (s *GoodsServ) GetOrderList(caseID, userType, status string, orderDate []time.Time, page, pagesize int) ([]goods.OrdersWithGoods, int64, error) {
240
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
241
+		return nil, 0, err
242
+	}
243
+
244
+	var makeStatus []string
245
+	if status != "" {
246
+		makeStatus = []string{status}
247
+	}
248
+
249
+	if page < 1 {
250
+		page = 1
251
+	}
252
+	if pagesize < 0 {
253
+		pagesize = 0
254
+	}
255
+	limit := []int{
256
+		pagesize,
257
+		(page - 1) * pagesize,
258
+	}
259
+
260
+	orderList, cnt, err := s.dao.GetOrdersByCaseID(caseID, userType, makeStatus, orderDate, limit)
261
+	if err != nil {
262
+		utils.LogError("获取商品订单列表失败: " + err.Error())
263
+		return nil, 0, errors.New("获取商品订单列表失败")
264
+	}
265
+
266
+	return orderList, cnt, nil
267
+}
268
+
269
+// GetOnLineOrders 获取订单列表
270
+// 管理端 - 在线订单
271
+func (s *GoodsServ) GetOnLineOrders(caseID string) ([]goods.OrdersWithGoods, error) {
272
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
273
+		return nil, err
274
+	}
275
+
276
+	makeStatus := []string{goods.MAKESTATUS_NOTSTARTED, goods.MAKESTATUS_DOING}
277
+
278
+	orderList, _, err := s.dao.GetOrdersByCaseID(caseID, "", makeStatus, nil, nil)
279
+	if err != nil {
280
+		utils.LogError("获取在线订单列表失败: " + err.Error())
281
+		return nil, errors.New("获取在线订单列表失败")
282
+	}
283
+
284
+	return orderList, nil
285
+}

+ 29
- 7
service/message/cmscase.go View File

@@ -12,19 +12,19 @@ import (
12 12
 )
13 13
 
14 14
 // GetCmsCasesList 获取项目列表
15
-func (s *MessageServ) GetCmsCasesList(name, orgid string, page int, pageSize int) (map[string]interface{}, error) {
15
+func (s *MessageServ) GetCmsCasesList(name, caseids string, page int, pageSize int) (map[string]interface{}, error) {
16 16
 	if pageSize == 0 {
17 17
 		pageSize = service.PAGENUM
18 18
 	}
19 19
 	if page == 0 {
20 20
 		page = 1
21 21
 	}
22
-	infos, err := s.dao.GetCmsCaseList(name, orgid, page, pageSize)
22
+	infos, err := s.dao.GetCmsCaseList(name, caseids, page, pageSize)
23 23
 	if err != nil {
24 24
 		beego.Error(err)
25 25
 		return nil, err
26 26
 	}
27
-	total, err := s.dao.GetCmsCaseListCount(name, orgid)
27
+	total, err := s.dao.GetCmsCaseListCount(name, caseids)
28 28
 	if err != nil {
29 29
 		beego.Error(err)
30 30
 		return nil, err
@@ -39,8 +39,18 @@ func (s *MessageServ) GetCmsCasesList(name, orgid string, page int, pageSize int
39 39
 }
40 40
 
41 41
 // GetCmsCaseByOrg 获取项目列表
42
-func (s *MessageServ) GetCmsCaseByOrg(orgid string) ([]model.TaCmsCase, error) {
42
+func (s *MessageServ) GetCmsCaseByOrg(orgid string) ([]message.CmsCase, error) {
43 43
 	list, err := s.dao.GetCmsCaseByOrg(orgid)
44
+	if err != nil {
45
+		return nil, err
46
+	}
47
+	for i, c := range list {
48
+		imgs, err := s.dao.GetCmsCaseImgs(c.CmsCaseId)
49
+		if err != nil {
50
+			return nil, err
51
+		}
52
+		list[i].CmsCaseImgs = imgs
53
+	}
44 54
 	return list, err
45 55
 }
46 56
 
@@ -81,10 +91,22 @@ func (s *MessageServ) SaveCmsCase(cmscase model.TaCmsCase, courseids, imgs, deta
81 91
 	if cmscase.Name == "" {
82 92
 		return nil, utils.LogError("项目名称不能为空!")
83 93
 	}
84
-
85
-	if cmscase.Title == "" {
86
-		return nil, utils.LogError("项目标题不能为空!")
94
+	if cmscase.CaseId == "" {
95
+		return nil, utils.LogError("案场不能为空")
96
+	}
97
+	if imgs == "" {
98
+		return nil, utils.LogError("图片不能为空")
87 99
 	}
100
+	if detailimgs == "" {
101
+		return nil, utils.LogError("详情图片不能为空")
102
+	}
103
+	if cmscase.DetailContent == "" {
104
+		return nil, utils.LogError("专题介绍不能为空")
105
+	}
106
+
107
+	// if cmscase.Title == "" {
108
+	// 	return nil, utils.LogError("项目标题不能为空!")
109
+	// }
88 110
 
89 111
 	if cmscase.CmsCaseId == "" {
90 112
 		newInfo, err = s.dao.AddCmsCase(cmscase)

+ 9
- 1
service/message/location.go View File

@@ -38,7 +38,15 @@ func (s *MessageServ) SaveLocation(location model.TdCmsImageLocation) (*model.Td
38 38
 
39 39
 // DelLocation 删除
40 40
 func (s *MessageServ) DelLocation(locationID string) error {
41
-	err := s.dao.DelLocation(locationID)
41
+	loc, err := s.dao.GetLocationById(locationID)
42
+	if err != nil {
43
+		return err
44
+	}
45
+	err = s.dao.UpdateLocationSortByID(loc.OrderNo)
46
+	if err != nil {
47
+		return err
48
+	}
49
+	err = s.dao.DelLocation(locationID)
42 50
 	return err
43 51
 }
44 52
 

+ 1
- 1
service/sys.go View File

@@ -113,6 +113,7 @@ func (s *SysServ) CheckWechatUserMapping(user map[string]interface{}) (*model.Ta
113 113
 			if userMapping.Openid == um.Openid &&
114 114
 				userMapping.AccountType == um.AccountType &&
115 115
 				userMapping.UserType == um.UserType {
116
+				userMapping.UserId = um.UserId
116 117
 
117 118
 				// 存在的用户, 使用 ID 作为检查条件去更新
118 119
 				userMapping.MappingId = um.MappingId
@@ -123,7 +124,6 @@ func (s *SysServ) CheckWechatUserMapping(user map[string]interface{}) (*model.Ta
123 124
 	// 更新数据库内容, 没有的话则插入
124 125
 	err = s.dao.UpdateUserMapping(&userMapping)
125 126
 	if err != nil {
126
-		beego.Error(err)
127 127
 		return nil, err
128 128
 	}
129 129
 

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

@@ -80,6 +80,9 @@ func (s *RoleServ) GetRoleMeneByID(roleid string) ([]model.SysMenu, error) {
80 80
 
81 81
 // SaveRole 保存角色
82 82
 func (s *RoleServ) SaveRole(role model.SysRole) (*model.SysRole, error) {
83
+	if role.RoleName == "" {
84
+		return nil, utils.LogError("角色名称不允许为空!")
85
+	}
83 86
 	var newInfo *model.SysRole
84 87
 	var err error
85 88
 	if role.RoleId == "" {

+ 2
- 2
service/user.go View File

@@ -265,8 +265,8 @@ func (s *UserServ) DelUser(userid string) error {
265 265
 }
266 266
 
267 267
 // GetUserTypes 获取用户类型
268
-func (s *UserServ) GetUserTypes(caseids string) ([]model.TdUserType, error) {
269
-	types, err := s.dao.GetUserTypes(caseids)
268
+func (s *UserServ) GetUserTypes(orgid string) ([]model.TdUserType, error) {
269
+	types, err := s.dao.GetUserTypes(orgid)
270 270
 	return types, err
271 271
 }
272 272
 

+ 23
- 0
utils/permission.go View File

@@ -25,6 +25,29 @@ func NewAuthEngine(ctx *Context) *DataAuthEngine {
25 25
 	return &DataAuthEngine{ctx: ctx}
26 26
 }
27 27
 
28
+// CheckCase 校验案场数据权限
29
+func (t *DataAuthEngine) CheckCase(caseID string) error {
30
+	cases := t.ctx.Get("cases")
31
+	if cases == nil {
32
+		return errors.New("请授权用户案场权限")
33
+	}
34
+
35
+	found := false
36
+	userCases := cases.([]model.SysUserCase)
37
+
38
+	for _, cs := range userCases {
39
+		if caseID == cs.CaseId {
40
+			found = true
41
+		}
42
+	}
43
+
44
+	if !found {
45
+		return errors.New("用户无该案场数据权限")
46
+	}
47
+
48
+	return nil
49
+}
50
+
28 51
 // AuthFilter 按权限过滤
29 52
 func (t *DataAuthEngine) AuthFilter(targ interface{}, sql string, params ...interface{}) error {
30 53
 	if t.ctx == nil {

+ 17
- 11
utils/wechat.go View File

@@ -4,20 +4,26 @@ import (
4 4
 	"github.com/zjxpcyc/wechat/wx"
5 5
 )
6 6
 
7
-var wxCli *wx.Client
7
+var wxClients map[string]*wx.Client
8 8
 
9
-// InitWeChatClient 初始化
10
-func InitWeChatClient(cert map[string]string) {
11
-	wxCli = wx.NewClient(cert)
12
-	wx.SetLogInst(defaultLogger)
9
+// WxClientSingleton 初始化
10
+func WxClientSingleton(org string, cert map[string]string) {
11
+	if wxClients == nil {
12
+		wxClients = map[string]*wx.Client{
13
+			org: wx.NewClient(cert),
14
+		}
15
+	} else {
16
+		if _, ok := wxClients[org]; !ok {
17
+			wxClients[org] = wx.NewClient(cert)
18
+		}
19
+	}
13 20
 }
14 21
 
15
-// GetWxUserInfo 微信获取用户信息
16
-func GetWxUserInfo(code string) (map[string]interface{}, error) {
17
-	return wxCli.GetUserInfo(code)
22
+// WxClientFor 微信客户端
23
+func WxClientFor(org string) *wx.Client {
24
+	return wxClients[org]
18 25
 }
19 26
 
20
-// WechatSignature 启用 Wechat 接口
21
-func WechatSignature(timestamp, nonce string) string {
22
-	return wxCli.Signature(timestamp, nonce)
27
+func init() {
28
+	wx.SetLogInst(defaultLogger)
23 29
 }