Explorar el Código

Merge branch 'dev' of http://git.ycjcjy.com/SpaceOfCheng/services into dev

keyman1995 hace 6 años
padre
commit
c6809488be
Se han modificado 65 ficheros con 3773 adiciones y 296 borrados
  1. 2
    1
      .gitignore
  2. 2
    0
      conf/app.conf
  3. 15
    13
      controllers/auth.go
  4. 36
    0
      controllers/cases/case.go
  5. 4
    0
      controllers/cases/tag.go
  6. 26
    2
      controllers/course/course.go
  7. 14
    0
      controllers/customer/customer.go
  8. 9
    2
      controllers/goods/goods.go
  9. 145
    1
      controllers/goods/order.go
  10. 4
    4
      controllers/system/role.go
  11. 14
    0
      controllers/user/user.go
  12. 6
    12
      controllers/verify/verify.go
  13. 35
    8
      controllers/vipcard/vipcard.go
  14. 2033
    0
      log/common.log
  15. 7
    3
      models/cases/cases.go
  16. 7
    7
      models/cases/conf.go
  17. 62
    1
      models/cases/record.go
  18. 10
    0
      models/constant.go
  19. 151
    0
      models/coupon/coupon.go
  20. 33
    0
      models/coupon/image.go
  21. 33
    0
      models/coupon/rule.go
  22. 37
    0
      models/coupon/share.go
  23. 27
    0
      models/coupon/target.go
  24. 21
    0
      models/coupon/types.go
  25. 96
    10
      models/course/course.go
  26. 7
    2
      models/course/order.go
  27. 3
    0
      models/customer/account.go
  28. 1
    1
      models/customer/customer.go
  29. 6
    0
      models/goods/goods.go
  30. 73
    11
      models/goods/orders.go
  31. 3
    0
      models/goods/types.go
  32. 238
    8
      models/gymcard/gymcard.go
  33. 0
    1
      models/model/ta_card_image.go
  34. 0
    1
      models/model/ta_card_share.go
  35. 0
    28
      models/model/ta_coupon_card2.go
  36. 0
    7
      models/model/ta_coupon_card_target2.go
  37. 0
    1
      models/model/ta_customer_gym.go
  38. 15
    20
      models/model/ta_gym_card.go
  39. 4
    1
      models/model/ta_vip_card_child.go
  40. 1
    1
      models/model/td_coupon_type.go
  41. 4
    10
      models/system/role.go
  42. 2
    2
      models/system/user.go
  43. 9
    13
      models/verify/verify.go
  44. 38
    12
      models/vipcard/vipcard.go
  45. 22
    0
      npm-debug.log
  46. 12
    0
      routers/common.go
  47. 4
    1
      routers/guest.go
  48. 10
    0
      routers/wechat.go
  49. 13
    2
      service/cases/cases.go
  50. 8
    6
      service/cases/key.go
  51. 11
    0
      service/cases/record.go
  52. 54
    6
      service/course/course.go
  53. 23
    17
      service/course/order.go
  54. 16
    3
      service/customer/customer.go
  55. 2
    2
      service/goods/goods.go
  56. 209
    56
      service/goods/orders.go
  57. 110
    0
      service/gymcard/gymcard.go
  58. 2
    0
      service/message/cmscase.go
  59. 2
    0
      service/message/message.go
  60. 3
    3
      service/system/role.go
  61. 6
    0
      service/user.go
  62. 9
    12
      service/verify/verify.go
  63. 4
    3
      service/vipcard/vipcard.go
  64. 15
    2
      utils/message.go
  65. 5
    0
      utils/wechat.go

+ 2
- 1
.gitignore Ver fichero

@@ -1,3 +1,4 @@
1 1
 *.exe
2 2
 *.exe~
3
-*.test
3
+*.test
4
+*.log

+ 2
- 0
conf/app.conf Ver fichero

@@ -5,6 +5,7 @@ autorender = false
5 5
 copyrequestbody = true
6 6
 EnableDocs = true
7 7
 sessionon = true
8
+excelpath = ./
8 9
 
9 10
 
10 11
 [cros]
@@ -20,3 +21,4 @@ prefix = "/api"
20 21
 guest = "/guest/:org"
21 22
 common = "/common/:org"
22 23
 wechat = "/wechat/:org"
24
+

+ 15
- 13
controllers/auth.go Ver fichero

@@ -3,6 +3,7 @@ package controllers
3 3
 import (
4 4
 	"errors"
5 5
 	"net/http"
6
+	"spaceofcheng/services/models/model"
6 7
 	"spaceofcheng/services/service"
7 8
 	"spaceofcheng/services/utils"
8 9
 	"strings"
@@ -24,6 +25,7 @@ func (c *BaseController) authenticate() {
24 25
 
25 26
 	// 客户端类型
26 27
 	clientType := utils.GetClientType(c.Ctx.Request)
28
+
27 29
 	switch clientType {
28 30
 	case utils.ClientAdmin:
29 31
 		c.authPCAdmin(serv)
@@ -78,10 +80,11 @@ func (c *BaseController) authWechat(serv *service.SysServ) {
78 80
 		custID = custIDRaw.(string)
79 81
 	}
80 82
 
81
-	// 机构ID - 后面再思考机构问题
82
-	var orgID = "1"
83
+	// 机构
84
+	org := c.Context.Get("org").(model.SysOrg)
85
+
83 86
 	// 微信配置
84
-	wxConf, err := serv.GetWeChatConfig(orgID)
87
+	wxConf, err := serv.GetWeChatConfig(org.OrgId)
85 88
 	if err != nil {
86 89
 		utils.LogError("查询微信配置失败: " + err.Error())
87 90
 		c.ResponseError(
@@ -89,7 +92,7 @@ func (c *BaseController) authWechat(serv *service.SysServ) {
89 92
 			http.StatusBadRequest,
90 93
 		)
91 94
 	}
92
-	utils.WxClientSingleton(orgID, wxConf)
95
+	utils.WxClientSingleton(org.OrgId, wxConf)
93 96
 
94 97
 	// 用户微信信息
95 98
 	var wxDetail map[string]interface{}
@@ -111,7 +114,7 @@ func (c *BaseController) authWechat(serv *service.SysServ) {
111 114
 				"unionid":    "o6_bmasdasdsad6_2sgVt7hMZOPfL",
112 115
 			}
113 116
 		} else {
114
-			wxDetail = c.getWechatDetail(orgID, serv)
117
+			wxDetail = c.getWechatDetail(org.OrgId, serv)
115 118
 		}
116 119
 
117 120
 		c.SetSession("wechat_user", wxDetail)
@@ -132,15 +135,11 @@ func (c *BaseController) authWechat(serv *service.SysServ) {
132 135
 	if !c.needAuth() {
133 136
 		return
134 137
 	}
135
-
136 138
 	// 未登录或者绑定, 返回 401
137 139
 	if custID == "" && userMap.UserId == "" {
138
-		c.ResponseData(
139
-			map[string]interface{}{
140
-				"appid": wxConf["appid"],
141
-			},
140
+		c.ResponseError(
142 141
 			errors.New("用户未登录或绑定"),
143
-			http.StatusUnauthorized,
142
+			http.StatusNotAcceptable,
144 143
 		)
145 144
 	}
146 145
 
@@ -178,8 +177,11 @@ func (c *BaseController) getWechatDetail(org string, serv *service.SysServ) map[
178 177
 	// 微信 code
179 178
 	code := c.GetString("code")
180 179
 	if code == "" {
181
-		c.ResponseError(
182
-			errors.New("没有接收到微信 code"),
180
+		c.ResponseData(
181
+			map[string]interface{}{
182
+				"appid": utils.GetWxAppID(org),
183
+			},
184
+			errors.New("获取微信信息失败"),
183 185
 			http.StatusUnauthorized,
184 186
 		)
185 187
 	}

+ 36
- 0
controllers/cases/case.go Ver fichero

@@ -1,9 +1,12 @@
1 1
 package cases
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/controllers"
6
+	"spaceofcheng/services/models"
5 7
 	"spaceofcheng/services/models/model"
6 8
 	"spaceofcheng/services/service/cases"
9
+	"spaceofcheng/services/utils"
7 10
 )
8 11
 
9 12
 // CaseController 信息
@@ -78,3 +81,36 @@ func (c *CaseController) GetOrgCases() {
78 81
 
79 82
 	c.ResponseJSON(res)
80 83
 }
84
+
85
+// GetCaseConf 获取案场对应的配置
86
+func (c *CaseController) GetCaseConf() {
87
+	caseid := c.GetString(":caseid")
88
+	conf, err := c.dao.GetCaseConf(caseid, cases.CONFTYPE_GOODS)
89
+	if err != nil {
90
+		utils.LogError("获取案场配置信息失败: " + err.Error())
91
+		c.ResponseError(errors.New("获取案场信息失败!"))
92
+	}
93
+	c.ResponseJSON(conf)
94
+}
95
+
96
+// OpenCaseCoffee 开启
97
+func (c *CaseController) OpenCaseCoffee() {
98
+	caseid := c.GetString(":caseid")
99
+	err := c.dao.UpdateCaseConf(caseid, cases.CONFTYPE_GOODS, models.STATUS_NORMAL)
100
+	if err != nil {
101
+		utils.LogError("开启失败: " + err.Error())
102
+		c.ResponseError(errors.New("操作失败!"))
103
+	}
104
+	c.ResponseJSON("操作成功!")
105
+}
106
+
107
+// CloseCaseCoffee 关闭
108
+func (c *CaseController) CloseCaseCoffee() {
109
+	caseid := c.GetString(":caseid")
110
+	err := c.dao.UpdateCaseConf(caseid, cases.CONFTYPE_GOODS, models.STATUS_READY)
111
+	if err != nil {
112
+		utils.LogError("关闭失败: " + err.Error())
113
+		c.ResponseError(errors.New("操作失败!"))
114
+	}
115
+	c.ResponseJSON("操作成功!")
116
+}

+ 4
- 0
controllers/cases/tag.go Ver fichero

@@ -10,6 +10,10 @@ func (c *CaseController) GetTagList() {
10 10
 	cases := c.Context.Get("cases").([]model.SysUserCase)
11 11
 	caseIDs := c.GetCaseIDs(cases)
12 12
 
13
+	if caseid == "" {
14
+		caseid = caseIDs
15
+	}
16
+
13 17
 	page, _ := c.GetInt("page")
14 18
 	pageSize, _ := c.GetInt("pagesize")
15 19
 

+ 26
- 2
controllers/course/course.go Ver fichero

@@ -128,6 +128,7 @@ func (c *CourseController) DelCourseImg() {
128 128
 func (c *CourseController) GetCourseSchedule() {
129 129
 	name := c.GetString("name")
130 130
 	caseids := c.GetString("caseid")
131
+	courseid := c.GetString("courseid")
131 132
 	if caseids == "" {
132 133
 		cases := c.Context.Get("cases").([]model.SysUserCase)
133 134
 		caseids = c.GetCaseIDs(cases)
@@ -135,7 +136,7 @@ func (c *CourseController) GetCourseSchedule() {
135 136
 	date := c.GetString("date")
136 137
 	page, _ := c.GetInt("page")
137 138
 	pageSize, _ := c.GetInt("pagesize")
138
-	list, err := c.serv.GetCourseSchedule(name, caseids, date, page, pageSize)
139
+	list, err := c.serv.GetCourseSchedule(name, caseids, courseid, date, page, pageSize)
139 140
 	if err != nil {
140 141
 		c.ResponseError(err)
141 142
 	}
@@ -146,7 +147,8 @@ func (c *CourseController) GetCourseSchedule() {
146 147
 func (c *CourseController) GetDetails() {
147 148
 	caseid := c.GetString("caseid")
148 149
 	date := c.GetString("date")
149
-	list, err := c.serv.GetDetails(caseid, date)
150
+	courseid := c.GetString("courseid")
151
+	list, err := c.serv.GetDetails(caseid, date, courseid)
150 152
 	if err != nil {
151 153
 		c.ResponseError(err)
152 154
 	}
@@ -213,3 +215,25 @@ func (c *CourseController) GetCourseByLocation() {
213 215
 	}
214 216
 	c.ResponseJSON(courses)
215 217
 }
218
+
219
+// GetCustomerCourse 获取用户课程信息
220
+func (c *CourseController) GetCustomerCourse() {
221
+	page, _ := c.GetInt("page")
222
+	pageSize, _ := c.GetInt("pagesize")
223
+
224
+	courses, err := c.serv.GetCustomerCourse(page, pageSize)
225
+	if err != nil {
226
+		c.ResponseError(err)
227
+	}
228
+	c.ResponseJSON(courses)
229
+}
230
+
231
+// GetCustomerCourseByID 获取用户课程信息明细
232
+func (c *CourseController) GetCustomerCourseByID() {
233
+	id := c.GetString(":id")
234
+	info, err := c.serv.GetCustomerCourseByID(id)
235
+	if err != nil {
236
+		c.ResponseError(err)
237
+	}
238
+	c.ResponseJSON(info)
239
+}

+ 14
- 0
controllers/customer/customer.go Ver fichero

@@ -115,3 +115,17 @@ func (c *CustomerController) SignUp() {
115 115
 
116 116
 	c.ResponseJSON("ok")
117 117
 }
118
+
119
+// CustByTel 根据电话查询用户信息
120
+func (c *CustomerController) CustByTel() {
121
+	tel := c.GetString(":tel")
122
+	customer, err := c.serv.GetCustUserByTel(tel)
123
+	if err != nil {
124
+		utils.LogError("获取客户信息失败: " + err.Error())
125
+		c.ResponseError(
126
+			errors.New("获取客户信息失败"),
127
+			http.StatusInternalServerError,
128
+		)
129
+	}
130
+	c.ResponseJSON(customer)
131
+}

+ 9
- 2
controllers/goods/goods.go Ver fichero

@@ -4,6 +4,7 @@ import (
4 4
 	"encoding/json"
5 5
 	"errors"
6 6
 	"spaceofcheng/services/controllers"
7
+	"spaceofcheng/services/models/cases"
7 8
 	goodsModel "spaceofcheng/services/models/goods"
8 9
 	"spaceofcheng/services/models/model"
9 10
 	"spaceofcheng/services/service/goods"
@@ -15,6 +16,7 @@ import (
15 16
 type GoodsController struct {
16 17
 	serv *goods.GoodsServ
17 18
 	controllers.BaseController
19
+	caseserv *cases.CaseDAO
18 20
 }
19 21
 
20 22
 // Constructor 初始化 Controller
@@ -22,6 +24,7 @@ type GoodsController struct {
22 24
 // @Description 初始化 Controller, 系统自动调用
23 25
 func (c *GoodsController) Constructor() {
24 26
 	c.serv = goods.NewGoodsServ(c.Context)
27
+	c.caseserv = cases.NewCaseDAO(c.Context)
25 28
 }
26 29
 
27 30
 // GetListByCase 获取案场商品列表
@@ -29,11 +32,15 @@ func (c *GoodsController) Constructor() {
29 32
 func (c *GoodsController) GetListByCase() {
30 33
 	page, _ := c.GetInt("page")
31 34
 	pagesize, _ := c.GetInt("pagesize")
32
-	caseID := c.GetString("caseid")
35
+	caseids := c.GetString("caseid")
33 36
 	goodsName := c.GetString("name")
34 37
 	goodsType := c.GetString("type")
35 38
 
36
-	goodsList, cnt, err := c.serv.GetGoodsListPageNavi(goodsName, goodsType, caseID, page, pagesize)
39
+	if caseids == "" {
40
+		cases := c.Context.Get("cases").([]model.SysUserCase)
41
+		caseids = c.GetCaseIDs(cases)
42
+	}
43
+	goodsList, cnt, err := c.serv.GetGoodsListPageNavi(goodsName, goodsType, caseids, page, pagesize)
37 44
 	if err != nil {
38 45
 		c.ResponseError(err)
39 46
 	}

+ 145
- 1
controllers/goods/order.go Ver fichero

@@ -1,11 +1,16 @@
1 1
 package goods
2 2
 
3 3
 import (
4
+	"cdkj-check/models"
4 5
 	"encoding/json"
5 6
 	"errors"
6 7
 	"spaceofcheng/services/models/model"
7 8
 	"spaceofcheng/services/utils"
9
+	"strconv"
8 10
 	"time"
11
+
12
+	"github.com/astaxie/beego"
13
+	"github.com/tealeg/xlsx"
9 14
 )
10 15
 
11 16
 // GetOrderList 获取商品订单
@@ -125,12 +130,151 @@ func (c *GoodsController) PostOrder() {
125 130
 	c.ResponseJSON("ok")
126 131
 }
127 132
 
128
-// GetOrdersByRecord 根据月记录获取订单信息
133
+// GetOrdersByRecord 根据月记录导出订单信息
129 134
 func (c *GoodsController) GetOrdersByRecord() {
130 135
 	recordid := c.GetString(":recordid")
136
+
137
+	record, err := c.caseserv.GetRecordByID(recordid)
138
+	if err != nil {
139
+		c.ResponseError(err)
140
+	}
141
+	if record == nil {
142
+		c.ResponseError(errors.New("不存在对应的月记录!"))
143
+	}
144
+
131 145
 	orders, err := c.serv.GetOrdersByRecord(recordid)
132 146
 	if err != nil {
133 147
 		c.ResponseError(err)
134 148
 	}
149
+
150
+	file := xlsx.NewFile()
151
+	sheet, _ := file.AddSheet("Sheet1")
152
+	row := sheet.AddRow()
153
+	row.SetHeightCM(0.8) //设置每行的高度
154
+	cell := row.AddCell()
155
+	cell.Value = "归属案场"
156
+	cell = row.AddCell()
157
+	cell.Value = "商品分类"
158
+	cell = row.AddCell()
159
+	cell.Value = "商品名称"
160
+	cell = row.AddCell()
161
+	cell.Value = "商品规格"
162
+	cell = row.AddCell()
163
+	cell.Value = "下单人"
164
+	cell = row.AddCell()
165
+	cell.Value = "销售数量"
166
+	cell = row.AddCell()
167
+	cell.Value = "商品单价"
168
+	cell = row.AddCell()
169
+	cell.Value = "商品总价"
170
+	cell = row.AddCell()
171
+	cell.Value = "订单状态"
172
+	cell = row.AddCell()
173
+	cell.Value = "下单时间"
174
+	cell = row.AddCell()
175
+	cell.Value = "订单号"
176
+	var amount float64
177
+	amount = 0
178
+	for _, order := range orders {
179
+		for _, good := range order.Goods {
180
+			row := sheet.AddRow()
181
+			row.SetHeightCM(0.8) //设置每行的高度
182
+			cell := row.AddCell()
183
+			cell.Value = order.CaseName
184
+			cell = row.AddCell()
185
+			cell.Value = good.TypeName
186
+			cell = row.AddCell()
187
+			cell.Value = good.GoodsName
188
+			cell = row.AddCell()
189
+			cell.Value = good.SpecName
190
+			cell = row.AddCell()
191
+			cell.Value = order.UserName
192
+			cell = row.AddCell()
193
+			cell.Value = strconv.Itoa(good.Number)
194
+			cell = row.AddCell()
195
+			cell.Value = good.Price
196
+			cell = row.AddCell()
197
+			price, err := strconv.ParseFloat(good.Price, 64)
198
+			if err != nil {
199
+				c.ResponseError(errors.New("金额类型不正确!"))
200
+			}
201
+			num, err := strconv.ParseFloat(strconv.Itoa(good.Number), 64)
202
+			if err != nil {
203
+				c.ResponseError(errors.New("金额类型不正确!"))
204
+			}
205
+			amount = amount + price*num
206
+			cell.Value = strconv.FormatFloat(price*num, 'f', -1, 64)
207
+			cell = row.AddCell()
208
+			var status = "未完成"
209
+			if order.Status == models.STATUS_NOMAL {
210
+				status = "已完成"
211
+			}
212
+			cell.Value = status
213
+			cell = row.AddCell()
214
+			cell.Value = order.CreateDate.Format("2006-01-02 15:04:05")
215
+			cell = row.AddCell()
216
+			cell.Value = order.OrdersNo
217
+		}
218
+	}
219
+	row = sheet.AddRow()
220
+	row.SetHeightCM(0.8)
221
+	cell = row.AddCell()
222
+	cell.Value = "总规定次数"
223
+	cell = row.AddCell()
224
+	cell.Value = strconv.Itoa(record.Num)
225
+	cell = row.AddCell()
226
+	cell.Value = "实际使用总数"
227
+	cell = row.AddCell()
228
+	cell.Value = strconv.Itoa(record.ActrualNum)
229
+	cell = row.AddCell()
230
+	cell.Value = "总价"
231
+	cell = row.AddCell()
232
+	cell.Value = strconv.FormatFloat(amount, 'f', -1, 64)
233
+
234
+	excelpath := beego.AppConfig.String("excelpath") + utils.GetGUID() + ".xlsx"
235
+	err = file.Save(excelpath)
236
+
135 237
 	c.ResponseJSON(orders)
136 238
 }
239
+
240
+// GetCustomerOrders 获取用户订单
241
+func (c *GoodsController) GetCustomerOrders() {
242
+	page, _ := c.GetInt("page")
243
+	pageSize, _ := c.GetInt("pagesize")
244
+
245
+	orders, err := c.serv.GetCustomerOrders(page, pageSize)
246
+	if err != nil {
247
+		c.ResponseError(err)
248
+	}
249
+	c.ResponseJSON(orders)
250
+}
251
+
252
+// GetCaseOrdersNum 获取案场订单数量
253
+func (c *GoodsController) GetCaseOrdersNum() {
254
+	caseid := c.GetString(":caseid")
255
+	num, err := c.serv.GetCaseOrdersNum(caseid)
256
+	if err != nil {
257
+		c.ResponseError(err)
258
+	}
259
+	c.ResponseJSON(num)
260
+}
261
+
262
+// FinishMake 完成制作
263
+func (c *GoodsController) FinishMake() {
264
+	orderid := c.GetString(":id")
265
+	err := c.serv.FinishMake(orderid)
266
+	if err != nil {
267
+		c.ResponseError(err)
268
+	}
269
+	c.ResponseJSON("操作成功!")
270
+}
271
+
272
+// CancelMake 取消制作
273
+func (c *GoodsController) CancelMake() {
274
+	orderid := c.GetString(":id")
275
+	err := c.serv.CancelMake(orderid)
276
+	if err != nil {
277
+		c.ResponseError(err)
278
+	}
279
+	c.ResponseJSON("操作成功!")
280
+}

+ 4
- 4
controllers/system/role.go Ver fichero

@@ -21,14 +21,14 @@ func (c *RoleController) Constructor() {
21 21
 
22 22
 // GetRoleList 获取角色列表
23 23
 func (c *RoleController) GetRoleList() {
24
-	cases := c.Context.Get("cases").([]model.SysUserCase)
25
-	caseIDs := c.GetCaseIDs(cases)
24
+	// cases := c.Context.Get("cases").([]model.SysUserCase)
25
+	// caseIDs := c.GetCaseIDs(cases)
26 26
 	page, _ := c.GetInt("page")
27 27
 	pageSize, _ := c.GetInt("pagesize")
28 28
 	name := c.GetString("name")
29
-	caseid := c.GetString("caseid")
29
+	// caseid := c.GetString("caseid")
30 30
 
31
-	list, err := c.dao.GetRoleList(caseIDs, name, caseid, page, pageSize)
31
+	list, err := c.dao.GetRoleList(name, page, pageSize)
32 32
 	if err != nil {
33 33
 		c.ResponseError(err)
34 34
 	}

+ 14
- 0
controllers/user/user.go Ver fichero

@@ -230,3 +230,17 @@ func (c *UserController) GetUserRole() {
230 230
 	}
231 231
 	c.ResponseJSON(roles)
232 232
 }
233
+
234
+// GetUserByTel 根据电话获取用户信息
235
+func (c *UserController) GetUserByTel() {
236
+	tel := c.GetString(":tel")
237
+	user, err := c.dao.GetUserByTel(tel)
238
+	if err != nil {
239
+		utils.LogError("获取用户信息失败: " + err.Error())
240
+		c.ResponseError(
241
+			errors.New("获取用户信息失败"),
242
+			http.StatusInternalServerError,
243
+		)
244
+	}
245
+	c.ResponseJSON(user)
246
+}

+ 6
- 12
controllers/verify/verify.go Ver fichero

@@ -22,14 +22,11 @@ func (c *VerifyController) Constructor() {
22 22
 // GetCustomerCourseDetailListById 根据id获取我的课程详情
23 23
 func (c *VerifyController) GetCustomerCourseDetailListById() {
24 24
 	customerCourseId := c.GetString(":customerCourseId")
25
-	caseid := c.GetString("caseid")
26
-	if caseid == "" {
27
-		caseinfo := c.Context.Get("currentCase").(model.SysUserCase)
28
-		caseid = caseinfo.CaseId
29
-	}
25
+	cases := c.Context.Get("cases").([]model.SysUserCase)
26
+	caseids := c.GetCaseIDs(cases)
30 27
 	page, _ := c.GetInt("page")
31 28
 	pageSize, _ := c.GetInt("pagesize")
32
-	list, err := c.dao.GetCustomerCourseDetailById(customerCourseId, caseid, page, pageSize)
29
+	list, err := c.dao.GetCustomerCourseDetailById(customerCourseId, caseids, page, pageSize)
33 30
 	if err != nil {
34 31
 		c.ResponseError(err)
35 32
 	}
@@ -39,15 +36,12 @@ func (c *VerifyController) GetCustomerCourseDetailListById() {
39 36
 
40 37
 // GetCustomerCourseDetailListBytel 根据手机号获取我的课程详情id
41 38
 func (c *VerifyController) GetCustomerCourseDetailListBytel() {
42
-	caseid := c.GetString("caseid")
43
-	if caseid == "" {
44
-		caseinfo := c.Context.Get("currentCase").(model.SysUserCase)
45
-		caseid = caseinfo.CaseId
46
-	}
39
+	cases := c.Context.Get("cases").([]model.SysUserCase)
40
+	caseids := c.GetCaseIDs(cases)
47 41
 	tel := c.GetString(":tel")
48 42
 	page, _ := c.GetInt("page")
49 43
 	pageSize, _ := c.GetInt("pagesize")
50
-	list, err := c.dao.GetCustomerCourseDetailByTel(tel, caseid, page, pageSize)
44
+	list, err := c.dao.GetCustomerCourseDetailByTel(tel, caseids, page, pageSize)
51 45
 	if err != nil {
52 46
 		c.ResponseError(err)
53 47
 	}

+ 35
- 8
controllers/vipcard/vipcard.go Ver fichero

@@ -2,6 +2,7 @@ package vipcard
2 2
 
3 3
 import (
4 4
 	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/models"
5 6
 	"spaceofcheng/services/models/model"
6 7
 	"spaceofcheng/services/service/vipcard"
7 8
 	"time"
@@ -22,11 +23,20 @@ func (c *VipcardController) Constructor() {
22 23
 
23 24
 // GetVipList 获取VIP卡列表
24 25
 func (c *VipcardController) GetVipList() {
25
-	cases := c.Context.Get("cases").([]model.SysUserCase)
26
-	caseId := c.GetCaseIDs(cases)
26
+	caseids := c.GetString("caseid")
27
+	if caseids == "" {
28
+		cases := c.Context.Get("cases").([]model.SysUserCase)
29
+		caseids = c.GetCaseIDs(cases)
30
+	}
31
+
27 32
 	page, _ := c.GetInt("page")
28 33
 	pageSize, _ := c.GetInt("pagesize")
29
-	list, err := c.dao.GetVipChild(caseId, page, pageSize)
34
+
35
+	cardNo := c.GetString("cardNo")
36
+	sellerName := c.GetString("sellerName")
37
+	userName := c.GetString("userName")
38
+
39
+	list, err := c.dao.GetVipChild(caseids, cardNo, sellerName, userName, page, pageSize)
30 40
 	if err != nil {
31 41
 		c.ResponseError(err)
32 42
 	}
@@ -50,7 +60,7 @@ func (c *VipcardController) AddVipCard() {
50 60
 // userCharge 用户激活vip卡
51 61
 func (c *VipcardController) UserCharge() {
52 62
 	vipCode := c.GetString(":vipCardChildCode")
53
-	tel := c.GetString(":tel")
63
+	tel := c.GetString("tel")
54 64
 	var createUser = c.Context.Get("user").(model.SysUser)
55 65
 	vipChild, err := c.dao.GetVipChildByCode(vipCode)
56 66
 	if err != nil {
@@ -61,17 +71,34 @@ func (c *VipcardController) UserCharge() {
61 71
 	if err != nil {
62 72
 		c.ResponseError(err)
63 73
 	}
74
+
75
+	salesid := c.GetString("salesid")
76
+	salesname := c.GetString("salesname")
77
+
64 78
 	vipChild.CustomerId = customer.CustomerId
65 79
 	vipChild.CustomerTel = tel
66 80
 	vipChild.ActiveDate = time.Now()
67
-	err1 := c.dao.UpdateVipChild(vipChild)
68
-	if err1 != nil {
81
+	vipChild.Status = models.STATUS_NORMAL
82
+	vipChild.SalesId = salesid
83
+	vipChild.SalesName = salesname
84
+	err = c.dao.UpdateVipChild(vipChild)
85
+	if err != nil {
69 86
 		c.ResponseError(err)
70 87
 	}
71
-	err2 := c.dao.CustomerCharge(vipChild, createUser)
72
-	if err2 != nil {
88
+	err = c.dao.CustomerCharge(vipChild, createUser)
89
+	if err != nil {
73 90
 		c.ResponseError(err)
74 91
 	}
75 92
 	c.ResponseJSON("激活成功")
76 93
 
77 94
 }
95
+
96
+// GetVipByCode 根据code获取Vip卡信息
97
+func (c *VipcardController) GetVipByCode() {
98
+	code := c.GetString(":code")
99
+	vipChild, err := c.dao.GetVipChildByCode(code)
100
+	if err != nil {
101
+		c.ResponseError(err)
102
+	}
103
+	c.ResponseJSON(vipChild)
104
+}

+ 2033
- 0
log/common.log
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


+ 7
- 3
models/cases/cases.go Ver fichero

@@ -132,17 +132,21 @@ type UserCase struct {
132 132
 // GetCaseUserByType 获取案场人员
133 133
 func (m *CaseDAO) GetCaseUserByType(csIDs []string, typeID string) ([]UserCase, error) {
134 134
 	query := `
135
-		SELECT n.user_id, n.real_name as user_name, s.case_id, '' as case_name
135
+			SELECT
136
+			n.user_id,
137
+			n.real_name AS user_name,
138
+			c.case_id,
139
+			'' AS case_name
136 140
 		FROM
137 141
 			td_user_type s
138 142
 		JOIN sys_user_type m ON s.type_id = m.type_id
139 143
 		JOIN sys_user n ON m.user_id = n.user_id
144
+		JOIN sys_user_case c on n.user_id = c.user_id
140 145
 		AND n.status = ?
141 146
 		WHERE
142
-			s.case_id IN ('` + strings.Join(csIDs, "','") + `')
147
+			c.case_id IN ('` + strings.Join(csIDs, "','") + `')
143 148
 		AND s.type_id = ?
144 149
 	`
145
-
146 150
 	var users []UserCase
147 151
 	if err := m.db.SQL(query, models.STATUS_NORMAL, typeID).Find(&users); err != nil {
148 152
 		return nil, err

+ 7
- 7
models/cases/conf.go Ver fichero

@@ -8,21 +8,21 @@ import (
8 8
 
9 9
 // GetConfByCase 获取配置信息
10 10
 func (m *CaseDAO) GetConfByCase(caseid, conftype string) (*model.SysCaseConf, error) {
11
-	var conf = new(model.SysCaseConf)
12
-	conf.Status = models.STATUS_NORMAL
13
-	has, err := m.db.Where("case_id=?", caseid).And("conf_type=?", conftype).Get(&conf)
11
+	var conf []model.SysCaseConf
12
+	err := m.db.Where("case_id=?", caseid).And("conf_type=?", conftype).Find(&conf)
14 13
 	if err != nil {
15 14
 		return nil, err
16 15
 	}
17
-	if !has {
18
-		return nil, err
16
+	if len(conf) > 0 {
17
+		return &conf[0], err
19 18
 	}
20
-	return conf, err
19
+	return nil, err
21 20
 }
22 21
 
23 22
 // SaveCaseConf 保存案场配置信息
24 23
 func (m *CaseDAO) SaveCaseConf(conf model.SysCaseConf) (*model.SysCaseConf, error) {
25 24
 	conf.ConfId = utils.GetGUID()
25
+	conf.Status = models.STATUS_READY
26 26
 	_, err := m.db.Insert(conf)
27 27
 	return &conf, err
28 28
 }
@@ -32,6 +32,6 @@ func (m *CaseDAO) UpdateCaseConf(conf model.SysCaseConf) error {
32 32
 	cols := []string{
33 33
 		"status",
34 34
 	}
35
-	_, err := m.db.Cols(cols...).Where("conf_id=?", conf.ConfId).Update(conf)
35
+	_, err := m.db.Cols(cols...).Where("case_id=?", conf.CaseId).And("conf_type=?", conf.ConfType).Update(conf)
36 36
 	return err
37 37
 }

+ 62
- 1
models/cases/record.go Ver fichero

@@ -18,6 +18,11 @@ type CaseRecord struct {
18 18
 	LeftNum             int
19 19
 }
20 20
 
21
+const (
22
+	ISOVER   = 1
23
+	ISNOOVER = 0
24
+)
25
+
21 26
 // GetCaseRecord 获取案场月记录
22 27
 func (m *CaseDAO) GetCaseRecord(caseids string, page, pageSize int) ([]CaseRecord, error) {
23 28
 	var records []CaseRecord
@@ -65,7 +70,7 @@ func (m *CaseDAO) AddRecord(record model.SysCaseRecord) (*model.SysCaseRecord, e
65 70
 	record.CreateDate = time.Now()
66 71
 	record.RecordId = utils.GetGUID()
67 72
 	record.Status = models.STATUS_NORMAL
68
-	record.IsOver = 1
73
+	record.IsOver = ISOVER
69 74
 	_, err := m.db.Insert(record)
70 75
 	return &record, err
71 76
 }
@@ -84,3 +89,59 @@ func (m *CaseDAO) GetRecordByMonth(caseid, month string) (*model.SysCaseRecord,
84 89
 	}
85 90
 	return nil, nil
86 91
 }
92
+
93
+// GetRecordByID 根据id获取月记录
94
+func (m *CaseDAO) GetRecordByID(recordid string) (*CaseRecord, error) {
95
+	var records []CaseRecord
96
+	sql := `select * from sys_case_record where record_id='` + recordid + `'`
97
+
98
+	err := m.db.Sql(sql).Find(&records)
99
+	if err != nil {
100
+		return nil, err
101
+	}
102
+	if len(records) > 0 {
103
+		var record = records[0]
104
+		info, err := m.GetRecordWithNum(record)
105
+		return info, err
106
+	}
107
+
108
+	return nil, nil
109
+}
110
+
111
+// GetRecordWithNum 获取月记录对应信息
112
+func (m *CaseDAO) GetRecordWithNum(record CaseRecord) (*CaseRecord, error) {
113
+	orders := new(model.TaGoodsOrders)
114
+	total, err := m.db.Where("case_id=?", record.CaseId).And("status=?", models.STATUS_NORMAL).And("user_type=?", goods.USERTPE_SALES).And("date_format(create_date,'%Y-%m')=?", record.Month).Sums(orders, "orders_num")
115
+	if err != nil {
116
+		return nil, err
117
+	}
118
+	record.ActrualNum = int(total[0])
119
+	var overnum int
120
+	var leftnum int
121
+	if record.ActrualNum > record.Num {
122
+		overnum = record.ActrualNum - record.Num
123
+	} else {
124
+		leftnum = record.Num - record.ActrualNum
125
+	}
126
+	record.OverNum = overnum
127
+	record.LeftNum = leftnum
128
+	return &record, err
129
+}
130
+
131
+// GetRecordByCase 获取案场当月记录信息
132
+func (m *CaseDAO) GetRecordByCase(caseid string) (*CaseRecord, error) {
133
+	var records []CaseRecord
134
+	sql := `select * from sys_case_record where month = date_format(NOW(),'%Y-%m') and case_id='` + caseid + `'`
135
+
136
+	err := m.db.Sql(sql).Find(&records)
137
+	if err != nil {
138
+		return nil, err
139
+	}
140
+	if len(records) > 0 {
141
+		var record = records[0]
142
+		info, err := m.GetRecordWithNum(record)
143
+		return info, err
144
+	}
145
+
146
+	return nil, nil
147
+}

+ 10
- 0
models/constant.go Ver fichero

@@ -86,6 +86,8 @@ const (
86 86
 	USERTYPE_SALES = "sales"
87 87
 	// 主管
88 88
 	USERTYPE_MANAGER = "manager"
89
+	// 客户
90
+	USERTYPE_CUSTOMER = "customer"
89 91
 )
90 92
 
91 93
 // 课程获取方式
@@ -107,3 +109,11 @@ const (
107 109
 	VERIFY_USED    = "used"
108 110
 	VERIFY_LATE    = "late"
109 111
 )
112
+
113
+// 游泳健身卡种类
114
+const (
115
+	GYM_CARD_ONCE    = "once"
116
+	GYM_CARD_MONTH   = "month"
117
+	GYM_CARD_QUARTER = "quarter"
118
+	GYM_CARD_YEAR    = "year"
119
+)

+ 151
- 0
models/coupon/coupon.go Ver fichero

@@ -0,0 +1,151 @@
1
+package coupon
2
+
3
+import (
4
+	"errors"
5
+	"fmt"
6
+	"spaceofcheng/services/models"
7
+	"spaceofcheng/services/models/model"
8
+	"spaceofcheng/services/utils"
9
+	"strings"
10
+	"time"
11
+
12
+	"github.com/yl10/kit/guid"
13
+
14
+	"github.com/go-xorm/xorm"
15
+)
16
+
17
+// CouponDAO 当前数据库操作对象
18
+type CouponDAO struct {
19
+	ctx *utils.Context
20
+	db  *xorm.Session
21
+}
22
+
23
+// NewCouponDAO New Inst
24
+func NewCouponDAO(ctx *utils.Context) *CouponDAO {
25
+	return &CouponDAO{
26
+		ctx: ctx,
27
+		db:  ctx.DB,
28
+	}
29
+}
30
+
31
+// GetCouponInfoByID 获取优惠券详情
32
+func (m *CouponDAO) GetCouponInfoByID(id string) (*CouponInfo, error) {
33
+	cp := new(CouponInfo)
34
+
35
+	query := `
36
+		SELECT
37
+			t.*, s.coupon_type_name
38
+		FROM
39
+			ta_coupon t
40
+		LEFT JOIN td_coupon_type s ON t.coupon_type_id = s.coupon_type_id
41
+		WHERE
42
+			t.coupon_id = ?
43
+	`
44
+
45
+	if _, err := m.db.SQL(query, id).Get(cp); err != nil {
46
+		return nil, err
47
+	}
48
+
49
+	// 规则
50
+	var rules []model.TaCouponRule
51
+	if err := m.db.Where("coupon_id=?", id).And("status=?", models.STATUS_NORMAL).Find(&rules); err != nil {
52
+		return nil, err
53
+	}
54
+
55
+	// 图片
56
+	var imgs []model.TaCouponImage
57
+	if err := m.db.Where("coupon_id=?", id).Find(&imgs); err != nil {
58
+		return nil, err
59
+	}
60
+
61
+	// 关联目标
62
+	var targes []model.TaCouponTarget
63
+	if err := m.db.Where("coupon_id=?", id).Find(&targes); err != nil {
64
+		return nil, err
65
+	}
66
+
67
+	// 分享
68
+	share := new(model.TaCouponShare)
69
+	if _, err := m.db.Where("coupon_id=?", id).And("status=?", models.STATUS_NORMAL).Get(share); err != nil {
70
+		return nil, err
71
+	}
72
+
73
+	cp.Targets = targes
74
+	cp.Images = imgs
75
+	cp.Rules = rules
76
+	cp.Share = *share
77
+
78
+	return cp, nil
79
+}
80
+
81
+// GetCouponList 获取优惠券列表
82
+func (m *CouponDAO) GetCouponList(filters []string, limit []int) ([]model.TaCoupon, int64, error) {
83
+	var cps []model.TaCoupon
84
+
85
+	filterString := ""
86
+	if len(filters) > 0 {
87
+		filterString = strings.Join(filters, " and ")
88
+	}
89
+
90
+	sql := `select * from ta_coupon where %s status = 1 order by create_date desc`
91
+
92
+	total, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&cps, fmt.Sprintf(sql, filterString), limit)
93
+	if err != nil {
94
+		return nil, 0, err
95
+	}
96
+
97
+	return cps, total, nil
98
+}
99
+
100
+// SaveCoupon 保存优惠券
101
+func (m *CouponDAO) SaveCoupon(cp *model.TaCoupon) error {
102
+	if cp.CouponId == "" {
103
+		cp.CouponId = guid.NewGUIDString()
104
+	}
105
+
106
+	userRaw := m.ctx.Get("user")
107
+	if userRaw != nil {
108
+		user := userRaw.(model.SysUser)
109
+		cp.CreateUser = user.UserId
110
+	}
111
+
112
+	cp.Status = models.STATUS_NORMAL
113
+	cp.CreateDate = time.Now().Local()
114
+
115
+	if _, err := m.db.Insert(cp); err != nil {
116
+		return err
117
+	}
118
+
119
+	return nil
120
+}
121
+
122
+// UpdateCoupon 更新优惠券
123
+func (m *CouponDAO) UpdateCoupon(cp *model.TaCoupon, cols []string) error {
124
+	if cp.CouponId == "" {
125
+		return errors.New("无优惠券信息")
126
+	}
127
+
128
+	if _, err := m.db.Cols(cols...).Where("coupon_id=?", cp.CouponId).Update(cp); err != nil {
129
+		return err
130
+	}
131
+
132
+	return nil
133
+}
134
+
135
+// DeleteCoupon 删除优惠券
136
+func (m *CouponDAO) DeleteCoupon(id string) error {
137
+	if id == "" {
138
+		return errors.New("无优惠券信息")
139
+	}
140
+
141
+	cp := model.TaCoupon{
142
+		CouponId: id,
143
+		Status:   models.STATUS_DEL,
144
+	}
145
+
146
+	if err := m.UpdateCoupon(&cp, []string{"status"}); err != nil {
147
+		return err
148
+	}
149
+
150
+	return nil
151
+}

+ 33
- 0
models/coupon/image.go Ver fichero

@@ -0,0 +1,33 @@
1
+package coupon
2
+
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+
6
+	"github.com/yl10/kit/guid"
7
+)
8
+
9
+// UpdateImages 更新图片 -- 插入或者更新
10
+func (m *CouponDAO) UpdateImages(imgs []model.TaCouponImage, couponID string) error {
11
+	if imgs == nil || len(imgs) == 0 {
12
+		return nil
13
+	}
14
+
15
+	for i := range imgs {
16
+		imgs[i].CouponId = couponID
17
+
18
+		if imgs[i].CouponImageId == "" {
19
+			imgs[i].CouponImageId = guid.NewGUIDString()
20
+		}
21
+	}
22
+
23
+	var delImgs []model.TaCouponImage
24
+	if _, err := m.db.Where("coupon_id=?", couponID).Delete(&delImgs); err != nil {
25
+		return err
26
+	}
27
+
28
+	if _, err := m.db.Insert(imgs); err != nil {
29
+		return err
30
+	}
31
+
32
+	return nil
33
+}

+ 33
- 0
models/coupon/rule.go Ver fichero

@@ -0,0 +1,33 @@
1
+package coupon
2
+
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+
6
+	"github.com/yl10/kit/guid"
7
+)
8
+
9
+// UpdateRule 更新规则 -- 插入或者更新
10
+func (m *CouponDAO) UpdateRule(rules []model.TaCouponRule, couponID string) error {
11
+	if rules == nil || len(rules) == 0 {
12
+		return nil
13
+	}
14
+
15
+	for i := range rules {
16
+		rules[i].CouponId = couponID
17
+
18
+		if rules[i].CouponRuleId == "" {
19
+			rules[i].CouponRuleId = guid.NewGUIDString()
20
+		}
21
+	}
22
+
23
+	var delRules []model.TaCouponRule
24
+	if _, err := m.db.Where("coupon_id=?", couponID).Delete(&delRules); err != nil {
25
+		return err
26
+	}
27
+
28
+	if _, err := m.db.Insert(rules); err != nil {
29
+		return err
30
+	}
31
+
32
+	return nil
33
+}

+ 37
- 0
models/coupon/share.go Ver fichero

@@ -0,0 +1,37 @@
1
+package coupon
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+
8
+	"github.com/yl10/kit/guid"
9
+)
10
+
11
+// SaveCouponShare 保存优惠券
12
+func (m *CouponDAO) SaveCouponShare(cp *model.TaCouponShare) error {
13
+	if cp.CouponShareId == "" {
14
+		cp.CouponShareId = guid.NewGUIDString()
15
+	}
16
+
17
+	cp.Status = models.STATUS_NORMAL
18
+
19
+	if _, err := m.db.Insert(cp); err != nil {
20
+		return err
21
+	}
22
+
23
+	return nil
24
+}
25
+
26
+// UpdateCouponShare 更新优惠券
27
+func (m *CouponDAO) UpdateCouponShare(cp *model.TaCouponShare, cols []string) error {
28
+	if cp.CouponShareId == "" {
29
+		return errors.New("无优惠券分享信息")
30
+	}
31
+
32
+	if _, err := m.db.Cols(cols...).Where("coupon_share_id=?", cp.CouponShareId).Update(cp); err != nil {
33
+		return err
34
+	}
35
+
36
+	return nil
37
+}

+ 27
- 0
models/coupon/target.go Ver fichero

@@ -0,0 +1,27 @@
1
+package coupon
2
+
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+)
6
+
7
+// UpdateTarget 更新关联内容 -- 插入或者更新
8
+func (m *CouponDAO) UpdateTarget(targets []model.TaCouponTarget, couponID string) error {
9
+	if targets == nil || len(targets) == 0 {
10
+		return nil
11
+	}
12
+
13
+	for i := range targets {
14
+		targets[i].CouponId = couponID
15
+	}
16
+
17
+	var delTargets []model.TaCouponTarget
18
+	if _, err := m.db.Where("coupon_id=?", couponID).Delete(&delTargets); err != nil {
19
+		return err
20
+	}
21
+
22
+	if _, err := m.db.Insert(targets); err != nil {
23
+		return err
24
+	}
25
+
26
+	return nil
27
+}

+ 21
- 0
models/coupon/types.go Ver fichero

@@ -0,0 +1,21 @@
1
+package coupon
2
+
3
+import (
4
+	"spaceofcheng/services/models/model"
5
+)
6
+
7
+// 优惠券用途
8
+const (
9
+	COUPON_FOR_GOODS  = "goods"
10
+	COUPON_FOR_COURSE = "course"
11
+)
12
+
13
+// CouponInfo 优惠券信息
14
+type CouponInfo struct {
15
+	model.TaCoupon `xorm:"extends"`
16
+	CouponTypeName string
17
+	Share          model.TaCouponShare
18
+	Targets        []model.TaCouponTarget
19
+	Images         []model.TaCouponImage
20
+	Rules          []model.TaCouponRule
21
+}

+ 96
- 10
models/course/course.go Ver fichero

@@ -213,7 +213,7 @@ type CourseDetail struct {
213 213
 func (m *CourseDAO) GetCourseInfo(courseid string) (*CourseDetail, error) {
214 214
 	course := new(CourseDetail)
215 215
 	sql := `select * from ta_course where course_id='` + courseid + `'`
216
-	has, err := m.db.Sql(sql).Get(&course)
216
+	has, err := m.db.Sql(sql).Get(course)
217 217
 	if err != nil {
218 218
 		return nil, err
219 219
 	}
@@ -249,42 +249,56 @@ type DetailInfo struct {
249 249
 }
250 250
 
251 251
 // GetDetails 获取所有的排课记录
252
-func (m *CourseDAO) GetDetails(caseid, date string) ([]DetailInfo, error) {
252
+func (m *CourseDAO) GetDetails(caseid, date, courseid string) ([]DetailInfo, error) {
253 253
 	var details []DetailInfo
254 254
 
255 255
 	sql := `select a.*,b.course_name,b.status as course_status,c.case_name,c.case_address from ta_course_detail a 
256 256
 	inner join ta_course b on a.course_id=b.course_id 
257 257
 	inner join sys_case c on a.case_id=c.case_id where a.status>` + strconv.Itoa(models.STATUS_DEL) + `
258
-	and b.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.case_id='` + caseid + `' and DATE_FORMAT(a.begin_date,'%Y-%m') = '` + date + `'`
258
+	and b.status>` + strconv.Itoa(models.STATUS_DEL) + ` and DATE_FORMAT(a.begin_date,'%Y-%m') = '` + date + `'`
259
+
260
+	if courseid != "" {
261
+		sql = sql + ` and a.course_id = '` + courseid + `'`
262
+	} else {
263
+		sql = sql + ` and a.case_id='` + caseid + `'`
264
+	}
259 265
 	err := m.db.Sql(sql).Find(&details)
260 266
 
261
-	// err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("DATE_FORMAT(begin_date,'%Y-%m') = ?", date).Find(&details)
262 267
 	return details, err
263 268
 }
264 269
 
265 270
 // GetCourseSchedule 获取需要排课的记录
266
-func (m *CourseDAO) GetCourseSchedule(name, caseids, date string, page, pageSize int) ([]model.TaCourse, error) {
271
+func (m *CourseDAO) GetCourseSchedule(name, caseids, courseid, date string, page, pageSize int) ([]model.TaCourse, error) {
267 272
 	var courses []model.TaCourse
268 273
 	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
269 274
 	if name != "" {
270 275
 		dao.And("course_name like '%" + name + "%'")
271 276
 	}
272
-	if caseids != "" {
273
-		dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
277
+
278
+	if courseid != "" {
279
+		dao.And("course_id=?", courseid)
280
+	} else {
281
+		if caseids != "" {
282
+			dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
283
+		}
274 284
 	}
275 285
 	err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
276 286
 	return courses, err
277 287
 }
278 288
 
279 289
 // GetCourseScheduleCount 获取排课记录数
280
-func (m *CourseDAO) GetCourseScheduleCount(name, caseids, date string) (int, error) {
290
+func (m *CourseDAO) GetCourseScheduleCount(name, caseids, courseid, date string) (int, error) {
281 291
 	var courses []model.TaCourse
282 292
 	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
283 293
 	if name != "" {
284 294
 		dao.And("course_name like '%" + name + "%'")
285 295
 	}
286
-	if caseids != "" {
287
-		dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
296
+	if courseid != "" {
297
+		dao.And("course_id=?", courseid)
298
+	} else {
299
+		if caseids != "" {
300
+			dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
301
+		}
288 302
 	}
289 303
 	err := dao.Find(&courses)
290 304
 	return len(courses), err
@@ -448,3 +462,75 @@ func (m *CourseDAO) SaveCourseOfCustomer(course *model.TaCustomerCourse, details
448 462
 
449 463
 	return nil
450 464
 }
465
+
466
+// CustomerCourse 客户课程信息
467
+type CustomerCourse struct {
468
+	model.TaCustomerCourse `xorm:"extends"`
469
+	CourseImg              string
470
+	QrCodeString           string
471
+	OrdersNo               string
472
+	Details                []model.TaCustomerCourseDetail
473
+}
474
+
475
+// GetCustomerCourse 获取我的课程信息
476
+func (m *CourseDAO) GetCustomerCourse(custID string, page, pageSize int) ([]CustomerCourse, error) {
477
+	var courses []CustomerCourse
478
+	sql := `select a.*,a.customer_course_id as qr_code_string,b.orders_no,c.course_img from ta_customer_course a 
479
+	inner join ta_course c on a.course_id=c.course_id
480
+	left join ta_course_orders b on a.source_id=b.orders_id
481
+	 where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.customer_id='` + custID + `'`
482
+	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
483
+	err := m.db.Sql(sql).Find(&courses)
484
+	if err != nil {
485
+		return nil, err
486
+	}
487
+	for inx, course := range courses {
488
+		details, err := m.GetCustomerCourseDetail(course.CustomerCourseId)
489
+		if err != nil {
490
+			return nil, err
491
+		}
492
+		courses[inx].Details = details
493
+	}
494
+	return courses, nil
495
+}
496
+
497
+// GetCustomerCourseCount 获取我的课程总数
498
+func (m *CourseDAO) GetCustomerCourseCount(custID string) (int, error) {
499
+	var courses []model.TaCustomerCourse
500
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("customer_id=?", custID).Find(&courses)
501
+	if err != nil {
502
+		return 0, err
503
+	}
504
+	return len(courses), nil
505
+}
506
+
507
+// GetCustomerCourseDetail 获取我的课程明细
508
+func (m *CourseDAO) GetCustomerCourseDetail(customerCourseID string) ([]model.TaCustomerCourseDetail, error) {
509
+	var details []model.TaCustomerCourseDetail
510
+	err := m.db.Where("customer_course_id=?", customerCourseID).And(`status>` + strconv.Itoa(models.STATUS_DEL)).Find(&details)
511
+	return details, err
512
+}
513
+
514
+// GetCustomerCourseByID 获取我的课程信息明细
515
+func (m *CourseDAO) GetCustomerCourseByID(id string) (*CustomerCourse, error) {
516
+	var courses []CustomerCourse
517
+	sql := `select a.*,a.customer_course_id as qr_code_string,b.orders_no,c.course_img from ta_customer_course a 
518
+	inner join ta_course c on a.course_id=c.course_id
519
+	left join ta_course_orders b on a.source_id=b.orders_id
520
+	 where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.customer_course_id='` + id + `'`
521
+
522
+	err := m.db.Sql(sql).Find(&courses)
523
+	if err != nil {
524
+		return nil, err
525
+	}
526
+	if len(courses) > 0 {
527
+		details, err := m.GetCustomerCourseDetail(courses[0].CustomerCourseId)
528
+		if err != nil {
529
+			return nil, err
530
+		}
531
+		courses[0].Details = details
532
+		return &courses[0], nil
533
+	}
534
+
535
+	return nil, nil
536
+}

+ 7
- 2
models/course/order.go Ver fichero

@@ -11,9 +11,14 @@ import (
11 11
 
12 12
 // SaveCourseOrder 保存订单
13 13
 func (m *CourseDAO) SaveCourseOrder(order *model.TaCourseOrders) error {
14
-	order.OrdersId = guid.NewGUIDString()
14
+
15
+	if order.OrdersId == "" {
16
+		order.OrdersId = guid.NewGUIDString()
17
+	}
18
+
15 19
 	// 当前订单号的随机方式 = 时间 + 个人ID
16
-	order.OrdersNo = "C-" + time.Now().Local().Format("20060102150405") + "-" + strings.Join(utils.GUIID2IntString(order.CustomerId), "")
20
+	ordersno := "C-" + time.Now().Local().Format("20060102150405") + "-" + strings.Join(utils.GUIID2IntString(order.CustomerId), "")
21
+	order.OrdersNo = string([]byte(ordersno)[:32])
17 22
 	order.CreateDate = time.Now()
18 23
 	_, err := m.db.Insert(order)
19 24
 	return err

+ 3
- 0
models/customer/account.go Ver fichero

@@ -73,6 +73,9 @@ func (m *CustomerDAO) InsertAccountRecords(rec *model.TaAccountChange) error {
73 73
 
74 74
 		accAmount -= moenyCheng
75 75
 		accPoints -= points
76
+	} else {
77
+		accAmount += moenyCheng
78
+		accPoints += points
76 79
 	}
77 80
 
78 81
 	// 账户不能为负

+ 1
- 1
models/customer/customer.go Ver fichero

@@ -122,7 +122,7 @@ func (m *CustomerDAO) GetCustomerByPhone(phone string) (*model.TaCustomer, error
122 122
 		return nil, nil
123 123
 	}
124 124
 
125
-	if len(custs) > 0 {
125
+	if len(custs) > 1 {
126 126
 		return nil, errors.New("数据异常, 一个手机绑定了多个用户")
127 127
 	}
128 128
 

+ 6
- 0
models/goods/goods.go Ver fichero

@@ -93,6 +93,12 @@ func (m *GoodsDAO) GetGoodsListOfCase(caseID string) ([]GoodsWithSpec, error) {
93 93
 	}
94 94
 
95 95
 	for inx, goods := range goodsList {
96
+		imgs, err := m.GetGoodsImgByGoodsID(goods.GoodsId)
97
+		if err != nil {
98
+			return nil, err
99
+		}
100
+		goodsList[inx].Images = imgs
101
+
96 102
 		specs, err := m.GetSpecWithPrice(goods.GoodsId)
97 103
 		if err != nil {
98 104
 			return nil, err

+ 73
- 11
models/goods/orders.go Ver fichero

@@ -38,7 +38,7 @@ func (m *GoodsDAO) SaveOrders(order *model.TaGoodsOrders) error {
38 38
 		return err
39 39
 	}
40 40
 
41
-	order.OrdersId = guid.NewGUIDString()
41
+	// order.OrdersId = guid.NewGUIDString()
42 42
 	order.OrgId = caseInfo.OrgId
43 43
 	order.CreateDate = time.Now().Local()
44 44
 	order.Status = models.STATUS_NORMAL
@@ -46,8 +46,8 @@ func (m *GoodsDAO) SaveOrders(order *model.TaGoodsOrders) error {
46 46
 	order.CouponAmount = "0"
47 47
 
48 48
 	// 当前订单号的随机方式 = 时间 + 个人ID
49
-	order.OrdersNo = "G-" + time.Now().Local().Format("20060102150405") + "-" + strings.Join(utils.GUIID2IntString(order.UserId), "")
50
-
49
+	ordersno := "G-" + time.Now().Local().Format("20060102150405") + "-" + strings.Join(utils.GUIID2IntString(order.UserId), "")
50
+	order.OrdersNo = string([]byte(ordersno)[:32])
51 51
 	if _, err := m.db.Insert(order); err != nil {
52 52
 		utils.LogError("保存订单主记录失败: " + err.Error())
53 53
 
@@ -59,6 +59,7 @@ func (m *GoodsDAO) SaveOrders(order *model.TaGoodsOrders) error {
59 59
 // SaveOrdersDetail 保存订单明细
60 60
 func (m *GoodsDAO) SaveOrdersDetail(list []model.TaGoodsOrdersDetail, ordersID string) error {
61 61
 	for inx := range list {
62
+		list[inx].DetailId = guid.NewGUIDString()
62 63
 		list[inx].OrdersId = ordersID
63 64
 	}
64 65
 
@@ -125,28 +126,28 @@ func (m *GoodsDAO) getCaseByID(caseID string) (*model.SysCase, error) {
125 126
 func (m *GoodsDAO) GetOrdersByCaseID(caseID, userType string, makeStatus []string, orderDate []time.Time, limit []int) ([]OrdersWithGoods, int64, error) {
126 127
 	var orderList []OrdersWithGoods
127 128
 
128
-	query := "select * from ta_goods_orders where case_id = ? and status = ?"
129
+	query := "select a.*,b.area_icon,b.area_icon_white from ta_goods_orders a inner join sys_case_area b on a.area_id=b.area_id where a.case_id = ? and a.status = ?"
129 130
 
130 131
 	// 制作状态
131 132
 	if makeStatus != nil && len(makeStatus) > 0 {
132
-		query += ` and make_status in ('` + strings.Join(makeStatus, "','") + `')`
133
+		query += ` and a.make_status in ('` + strings.Join(makeStatus, "','") + `')`
133 134
 	}
134 135
 
135 136
 	// 用户类型
136 137
 	if userType != "" {
137
-		query += ` and user_type = '` + userType + `'`
138
+		query += ` and a.user_type = '` + userType + `'`
138 139
 	}
139 140
 
140 141
 	// 订单起始时间
141 142
 	if orderDate != nil && len(orderDate) > 0 {
142
-		query += ` and DATE_FORMAT(create_date, '%Y-%m-%d %H:%i') >= '` + orderDate[0].Format("2006-01-02 15:04") + `'`
143
+		query += ` and DATE_FORMAT(a.create_date, '%Y-%m-%d %H:%i') >= '` + orderDate[0].Format("2006-01-02 15:04") + `'`
143 144
 
144 145
 		if len(orderDate) > 1 {
145
-			query += ` and DATE_FORMAT(create_date, '%Y-%m-%d %H:%i') <= '` + orderDate[1].Format("2006-01-02 15:04") + `'`
146
+			query += ` and DATE_FORMAT(a.create_date, '%Y-%m-%d %H:%i') <= '` + orderDate[1].Format("2006-01-02 15:04") + `'`
146 147
 		}
147 148
 	}
148 149
 
149
-	query += " order by create_date asc"
150
+	query += " order by a.create_date asc"
150 151
 
151 152
 	var cnt int64
152 153
 	if limit != nil && len(limit) > 1 {
@@ -185,8 +186,10 @@ func (m *GoodsDAO) GetOrderDetailByOrder(orderid string) ([]DetailWithType, erro
185 186
 // GetOrdersByRecord 根据
186 187
 func (m *GoodsDAO) GetOrdersByRecord(recordid string) ([]OrdersWithGoods, error) {
187 188
 	var orderList []OrdersWithGoods
188
-	sql := `select a.* from ta_goods_orders a inner join sys_case_record b on a.case_id=b.case_id and date_format(a.create_date,'%Y-%m')=b.month where b.record_id='` + recordid +
189
-		`' and a.user_type='` + USERTPE_SALES + `' and b.status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and a.status=` + strconv.Itoa(models.STATUS_NORMAL)
189
+	sql := `select a.*, c.case_name from ta_goods_orders a inner join sys_case_record b on a.case_id=b.case_id and date_format(a.create_date,'%Y-%m')=b.month
190
+	inner join sys_case c on a.case_id=c.case_id
191
+	where b.record_id='` + recordid +
192
+		`' and a.user_type != '` + USERTYPE_CUSTOMER + `' and b.status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and a.status=` + strconv.Itoa(models.STATUS_NORMAL)
190 193
 	err := m.db.Sql(sql).Find(&orderList)
191 194
 	if err != nil {
192 195
 		return nil, err
@@ -200,3 +203,62 @@ func (m *GoodsDAO) GetOrdersByRecord(recordid string) ([]OrdersWithGoods, error)
200 203
 	}
201 204
 	return orderList, nil
202 205
 }
206
+
207
+// GetCustomerOrders 获取用户订单
208
+func (m *GoodsDAO) GetCustomerOrders(custID string, page, pageSize int) ([]OrdersWithGoods, error) {
209
+	var orderList []OrdersWithGoods
210
+	sql := `select a.*, c.case_name from ta_goods_orders a 
211
+	inner join sys_case c on a.case_id=c.case_id
212
+	where a.user_id='` + custID +
213
+		`' and c.status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and a.status=` + strconv.Itoa(models.STATUS_NORMAL)
214
+	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
215
+	err := m.db.Sql(sql).Find(&orderList)
216
+	if err != nil {
217
+		return nil, err
218
+	}
219
+	for i, o := range orderList {
220
+		details, err := m.GetOrderDetailByOrder(o.OrdersId)
221
+		if err != nil {
222
+			return nil, err
223
+		}
224
+		orderList[i].Goods = details
225
+	}
226
+	return orderList, nil
227
+}
228
+
229
+// GetCustomerOrdersCount 获取用户订单count
230
+func (m *GoodsDAO) GetCustomerOrdersCount(custID string) (int, error) {
231
+	var orderList []OrdersWithGoods
232
+	sql := `select a.*, c.case_name from ta_goods_orders a 
233
+	inner join sys_case c on a.case_id=c.case_id
234
+	where a.user_id='` + custID +
235
+		`' and c.status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and a.status=` + strconv.Itoa(models.STATUS_NORMAL)
236
+	err := m.db.Sql(sql).Find(&orderList)
237
+	if err != nil {
238
+		return 0, err
239
+	}
240
+	return len(orderList), nil
241
+}
242
+
243
+// GetOrdersCountByCase 根据案场获取订单信息
244
+func (m *GoodsDAO) GetOrdersCountByCase(caseid string) (int64, error) {
245
+	order := new(model.TaGoodsOrders)
246
+	total, err := m.db.Where("case_id = ?", caseid).And("status>"+strconv.Itoa(models.STATUS_DEL)).SumInt(order, "orders_num")
247
+	return total, err
248
+}
249
+
250
+// GetMonthOrdersCountByCase 获取案场本月的订单数量
251
+func (m *GoodsDAO) GetMonthOrdersCountByCase(caseid string) (int64, error) {
252
+	order := new(model.TaGoodsOrders)
253
+	total, err := m.db.Where("case_id = ?", caseid).And("status>"+strconv.Itoa(models.STATUS_DEL)).And("date_format(create_date,'%Y-%m')=date_format(NOW(),'%Y-%m')").SumInt(order, "orders_num")
254
+	return total, err
255
+}
256
+
257
+// UpdateOrdersMake 更新订单制作状态
258
+func (m *GoodsDAO) UpdateOrdersMake(orders model.TaGoodsOrders) error {
259
+	cols := []string{
260
+		"make_status",
261
+	}
262
+	_, err := m.db.Cols(cols...).Where("orders_id=?", orders.OrdersId).Update(orders)
263
+	return err
264
+}

+ 3
- 0
models/goods/types.go Ver fichero

@@ -41,5 +41,8 @@ type DetailWithType struct {
41 41
 // OrdersWithGoods 订单列表
42 42
 type OrdersWithGoods struct {
43 43
 	model.TaGoodsOrders `xorm:"extends"`
44
+	CaseName            string
45
+	AreaIcon            string
46
+	AreaIconWhite       string
44 47
 	Goods               []DetailWithType
45 48
 }

+ 238
- 8
models/gymcard/gymcard.go Ver fichero

@@ -24,9 +24,36 @@ func NewGymcardDAO(ctx *utils.Context) *GymcardDAO {
24 24
 		db:  ctx.DB,
25 25
 	}
26 26
 }
27
-func (m *GymcardDAO) GetGymcard(caseid string, page, pageSize int) ([]model.TaGymCard, error) {
28
-	var gymcard []model.TaGymCard
29
-	sql := `select a.* from ta_gym_card a
27
+
28
+type CustomerGym struct {
29
+	model.TaCustomerGym `xorm:"extends"`
30
+	CardImageUrl        string
31
+	CardShareInfo       string
32
+	CardUseInstruction  string
33
+	CardUseRule         string
34
+}
35
+
36
+type Gymcard struct {
37
+	model.TaGymCard    `xorm:"extends"`
38
+	CardImageUrl       string
39
+	CardShareInfo      string
40
+	CardUseInstruction string
41
+	CardUseRule        string
42
+}
43
+
44
+// GetGymcard 根据案场id获取游泳健身卡列表
45
+func (m *GymcardDAO) GetGymcard(caseid string, page, pageSize int) ([]Gymcard, error) {
46
+	var gymcard []Gymcard
47
+	sql := `SELECT
48
+	a.*,
49
+	b.card_image_url,
50
+	c.card_share_info,
51
+	c.card_use_instruction,
52
+	c.card_use_rule
53
+FROM
54
+	ta_gym_card a
55
+	INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
56
+	INNER JOIN ta_card_share c ON a.gym_card_id = c.gym_card_id
30 57
 	where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')
31 58
 	and  a.status > ` + strconv.Itoa(models.STATUS_DEL)
32 59
 	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
@@ -34,9 +61,41 @@ func (m *GymcardDAO) GetGymcard(caseid string, page, pageSize int) ([]model.TaGy
34 61
 	return gymcard, err
35 62
 }
36 63
 
37
-func (m *GymcardDAO) GetGymcardById(gymcardId string) (*model.TaGymCard, error) {
38
-	var gymcard []model.TaGymCard
39
-	err := m.db.Where("gym_card_id=?", gymcardId).And("status > ?", models.STATUS_DEL).Find(&gymcard)
64
+// GetGymcardCount 根据案场id获取游泳健身卡数量
65
+func (m *GymcardDAO) GetGymcardCount(caseid string) (int, error) {
66
+	var gymcard []Gymcard
67
+	sql := `SELECT
68
+	a.*,
69
+	b.card_image_url,
70
+	c.card_share_info,
71
+	c.card_use_instruction,
72
+	c.card_use_rule
73
+FROM
74
+	ta_gym_card a
75
+	INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
76
+	INNER JOIN ta_card_share c ON a.gym_card_id = c.gym_card_id
77
+	where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')
78
+	and  a.status > ` + strconv.Itoa(models.STATUS_DEL)
79
+	err := m.db.Sql(sql).Find(&gymcard)
80
+	return len(gymcard), err
81
+}
82
+
83
+// GetGymcardById 根据id获取游泳健身卡详情
84
+func (m *GymcardDAO) GetGymcardById(gymcardId string) (*Gymcard, error) {
85
+	var gymcard []Gymcard
86
+	sql := `SELECT
87
+	a.*,
88
+	b.card_image_url,
89
+	c.card_share_info,
90
+	c.card_use_instruction,
91
+	c.card_use_rule
92
+FROM
93
+	ta_gym_card a
94
+	INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
95
+	INNER JOIN ta_card_share c ON a.gym_card_id = c.gym_card_id
96
+	where a.gym_card_id = '` + gymcardId + `'
97
+	and  a.status > ` + strconv.Itoa(models.STATUS_DEL)
98
+	err := m.db.Sql(sql).Find(&gymcard)
40 99
 	if err != nil {
41 100
 		return nil, err
42 101
 	}
@@ -46,16 +105,43 @@ func (m *GymcardDAO) GetGymcardById(gymcardId string) (*model.TaGymCard, error)
46 105
 	return nil, nil
47 106
 }
48 107
 
49
-func (m *GymcardDAO) AddGymCard(gymcard model.TaGymCard) (*model.TaGymCard, error) {
108
+// AddGymcard 新增游泳健身卡
109
+func (m *GymcardDAO) AddGymcard(gymcard model.TaGymCard) (model.TaGymCard, error) {
50 110
 	gymcard.GymCardId = utils.GetGUID()
51 111
 	gymcard.SentCount = 0
52 112
 	gymcard.UsedCount = 0
53 113
 	gymcard.Status = models.STATUS_NORMAL
54 114
 	gymcard.CreateDate = time.Now()
55 115
 	_, err := m.db.Insert(gymcard)
56
-	return &gymcard, err
116
+	return gymcard, err
117
+}
118
+
119
+// AddGymcardImg 新增游泳健身卡图片
120
+func (m *GymcardDAO) AddGymcardImg(gymcardId, imgUrl string) error {
121
+	var cardImg model.TaCardImage
122
+	cardImg.CardImageId = utils.GetGUID()
123
+	cardImg.CardImageUrl = imgUrl
124
+	cardImg.GymCardId = gymcardId
125
+	cardImg.Sort = 1
126
+	cardImg.Status = models.STATUS_NORMAL
127
+	_, err := m.db.Insert(cardImg)
128
+	return err
129
+}
130
+
131
+// AddGymcardShare 新增游泳健身卡分享信息
132
+func (m *GymcardDAO) AddGymcardShare(gymcardId, cardShareInfo, cardUseRule, cardUseInstraction string) error {
133
+	var cardShare model.TaCardShare
134
+	cardShare.CardShareId = utils.GetGUID()
135
+	cardShare.GymCardId = gymcardId
136
+	cardShare.CardShareInfo = cardShareInfo
137
+	cardShare.CardUseInstruction = cardUseInstraction
138
+	cardShare.CardUseRule = cardUseRule
139
+	cardShare.Status = models.STATUS_NORMAL
140
+	_, err := m.db.Insert(cardShare)
141
+	return err
57 142
 }
58 143
 
144
+// DeleteGymcard 删除游泳健身卡
59 145
 func (m *GymcardDAO) DeleteGymcard(gymcardId string) error {
60 146
 	var gymcard = model.TaGymCard{
61 147
 		GymCardId: gymcardId,
@@ -68,6 +154,7 @@ func (m *GymcardDAO) DeleteGymcard(gymcardId string) error {
68 154
 	return err
69 155
 }
70 156
 
157
+// DeleteCardImg 删除健身卡图片
71 158
 func (m *GymcardDAO) DeleteCardImg(gymcardId string) error {
72 159
 	var cardImg = model.TaCardImage{
73 160
 		GymCardId: gymcardId,
@@ -80,3 +167,146 @@ func (m *GymcardDAO) DeleteCardImg(gymcardId string) error {
80 167
 	return err
81 168
 
82 169
 }
170
+
171
+// DeleteCardImg 删除健身卡分享信息
172
+func (m *GymcardDAO) DeleteCardShare(gymcardId string) error {
173
+	var cardShare = model.TaCardShare{
174
+		GymCardId: gymcardId,
175
+		Status:    models.STATUS_DEL,
176
+	}
177
+	var cols = []string{
178
+		"status",
179
+	}
180
+	_, err := m.db.Cols(cols...).Where("gym_card_id = ?", cardShare.GymCardId).Update(cardShare)
181
+	return err
182
+}
183
+
184
+// EditGymcardImg 修改健身卡图片
185
+func (m *GymcardDAO) EditGymcardImg(gymcardId, imgUrl string) error {
186
+	var cardImg = model.TaCardImage{
187
+		GymCardId:    gymcardId,
188
+		CardImageUrl: imgUrl,
189
+	}
190
+	var cols = []string{
191
+		"img_url",
192
+	}
193
+	_, err := m.db.Cols(cols...).Where("gym_card_id = ?", cardImg.GymCardId).Update(cardImg)
194
+	return err
195
+}
196
+
197
+// EditGymcardShare 修改健身卡分享信息
198
+func (m *GymcardDAO) EditGymcardShare(gymcardId, cardShareInfo, cardUseRule, cardUseInstraction string) error {
199
+	var cardShare = model.TaCardShare{
200
+		GymCardId:          gymcardId,
201
+		CardShareInfo:      cardShareInfo,
202
+		CardUseRule:        cardUseRule,
203
+		CardUseInstruction: cardUseInstraction,
204
+	}
205
+	var cols = []string{
206
+		"card_share_info",
207
+		"card_use_rule",
208
+		"card_use_instruction",
209
+	}
210
+	_, err := m.db.Cols(cols...).Where("gym_card_id = ?", cardShare.GymCardId).Update(cardShare)
211
+	return err
212
+}
213
+
214
+// SendGymcardToCustomer 新增用户健身卡
215
+func (m *GymcardDAO) SendGymcardToCustomer(gymcard *model.TaGymCard, customerId string) (*model.TaCustomerGym, error) {
216
+	var customerGym model.TaCustomerGym
217
+	customerGym.CustomerGymId = utils.GetGUID()
218
+	customerGym.CaseId = gymcard.CaseId
219
+	customerGym.CustomerGymName = gymcard.GymCardName
220
+	customerGym.CustomerId = customerId
221
+	customerGym.EndDate = gymcard.EndDate
222
+	customerGym.GymCardId = gymcard.GymCardId
223
+	customerGym.GymType = gymcard.GymTypeId
224
+	customerGym.OrgId = gymcard.OrgId
225
+	customerGym.ReceiveDate = time.Now()
226
+	customerGym.StartDate = gymcard.StartDate
227
+	customerGym.Status = models.STATUS_NORMAL
228
+	_, err := m.db.Insert(customerGym)
229
+	return &customerGym, err
230
+}
231
+
232
+// UpdateCustomerGym 修改用户卡
233
+func (m *GymcardDAO) UpdateCustomerGym(customerGym model.TaCustomerGym) error {
234
+	var cols = []string{
235
+		"start_date",
236
+		"end_date",
237
+		"status",
238
+	}
239
+	_, err := m.db.Cols(cols...).Where("customer_gym_id =?", customerGym.CustomerGymId).Update(customerGym)
240
+	return err
241
+}
242
+
243
+// AddGymcardUsage 新增用户健身卡使用记录
244
+func (m *GymcardDAO) AddGymcardUsage(customerGym model.TaCustomerGym) (*model.TaGymCardUsage, error) {
245
+	var gymcardUsage model.TaGymCardUsage
246
+	gymcardUsage.CustomerGymId = customerGym.CustomerGymId
247
+	gymcardUsage.GymCardUsageId = utils.GetGUID()
248
+	gymcardUsage.UseCaseId = customerGym.CaseId
249
+	gymcardUsage.UseDate = time.Now()
250
+	gymcardUsage.Status = models.STATUS_NORMAL
251
+	_, err := m.db.Insert(gymcardUsage)
252
+	return &gymcardUsage, err
253
+}
254
+
255
+// GetCustomerGymByCustomerId 通过用户id获取用户所有游泳健身卡
256
+func (m *GymcardDAO) GetCustomerGymByCustomerId(customerId string, page, pageSize int) ([]CustomerGym, error) {
257
+	var customerGym []CustomerGym
258
+	sql := `SELECT
259
+	a.*,
260
+	b.card_image_url,
261
+	c.card_share_info,
262
+	c.card_use_instruction,
263
+	c.card_use_rule
264
+FROM
265
+	ta_customer_gym a
266
+INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
267
+INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
268
+WHERE
269
+	a.customer_id = '` + customerId + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
270
+	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
271
+	err := m.db.Sql(sql).Find(&customerGym)
272
+	return customerGym, err
273
+}
274
+
275
+// GetCustomerGymCountByCustomerId 通过用户id获取用户所有游泳健身卡数量
276
+func (m *GymcardDAO) GetCustomerGymCountByCustomerId(customerId string) (int, error) {
277
+	var customerGym []CustomerGym
278
+	sql := `SELECT
279
+	a.*,
280
+	b.card_image_url,
281
+	c.card_share_info,
282
+	c.card_use_instruction,
283
+	c.card_use_rule
284
+FROM
285
+	ta_customer_gym a
286
+INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
287
+INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
288
+WHERE
289
+	a.customer_id = '` + customerId + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
290
+	err := m.db.Sql(sql).Find(&customerGym)
291
+	return len(customerGym), err
292
+
293
+}
294
+
295
+// GetCustomerGymById 根据id获取用户健身卡详情
296
+func (m *GymcardDAO) GetCustomerGymById(customerCardId string) (CustomerGym, error) {
297
+	var customerGym []CustomerGym
298
+	sql := `SELECT
299
+	a.*,
300
+	b.card_image_url,
301
+	c.card_share_info,
302
+	c.card_use_instruction,
303
+	c.card_use_rule
304
+FROM
305
+	ta_customer_gym a
306
+INNER JOIN ta_card_image b ON a.gym_card_id = b.gym_card_id
307
+INNER JOIN ta_card_share C oN a.gym_card_id = c.gym_card_id
308
+WHERE
309
+	a.customer_gym_id = '` + customerCardId + `' and a.status >` + strconv.Itoa(models.STATUS_DEL)
310
+	err := m.db.Sql(sql).Find(&customerGym)
311
+	return customerGym[0], err
312
+}

+ 0
- 1
models/model/ta_card_image.go Ver fichero

@@ -3,7 +3,6 @@ package model
3 3
 type TaCardImage struct {
4 4
 	CardImageId  string `xorm:"not null pk VARCHAR(64)"`
5 5
 	GymCardId    string `xorm:"VARCHAR(64)"`
6
-	CardId       string `xorm:"VARCHAR(64)"`
7 6
 	CardImageUrl string `xorm:"TEXT"`
8 7
 	Status       int    `xorm:"SMALLINT(6)"`
9 8
 	Sort         int    `xorm:"INT(11)"`

+ 0
- 1
models/model/ta_card_share.go Ver fichero

@@ -3,7 +3,6 @@ package model
3 3
 type TaCardShare struct {
4 4
 	CardShareId        string `xorm:"not null pk VARCHAR(64)"`
5 5
 	GymCardId          string `xorm:"VARCHAR(64)"`
6
-	CardId             string `xorm:"VARCHAR(64)"`
7 6
 	CardShareInfo      string `xorm:"TEXT"`
8 7
 	CardUseRule        string `xorm:"TEXT"`
9 8
 	CardUseInstruction string `xorm:"TEXT"`

+ 0
- 28
models/model/ta_coupon_card2.go Ver fichero

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

+ 0
- 7
models/model/ta_coupon_card_target2.go Ver fichero

@@ -1,7 +0,0 @@
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
- 1
models/model/ta_customer_gym.go Ver fichero

@@ -13,7 +13,6 @@ type TaCustomerGym struct {
13 13
 	EndDate         time.Time `xorm:"DATETIME"`
14 14
 	Status          int       `xorm:"SMALLINT(6)"`
15 15
 	ReceiveDate     time.Time `xorm:"DATETIME"`
16
-	VerifyDate      time.Time `xorm:"DATETIME"`
17 16
 	GymType         string    `xorm:"VARCHAR(64)"`
18 17
 	CaseId          string    `xorm:"VARCHAR(64)"`
19 18
 	OrgId           string    `xorm:"VARCHAR(64)"`

+ 15
- 20
models/model/ta_gym_card.go Ver fichero

@@ -5,24 +5,19 @@ import (
5 5
 )
6 6
 
7 7
 type TaGymCard struct {
8
-	GymCardId        string    `xorm:"not null pk VARCHAR(64)"`
9
-	GymTypeId        string    `xorm:"VARCHAR(64)"`
10
-	GymCardName      string    `xorm:"VARCHAR(128)"`
11
-	Price            float32   `xorm:"FLOAT(8,2)"`
12
-	VideoUrl         string    `xorm:"TEXT"`
13
-	CoverUrl         string    `xorm:"TEXT"`
14
-	SentType         int       `xorm:"comment('0案场 1渠道') SMALLINT(6)"`
15
-	StartDate        time.Time `xorm:"DATETIME"`
16
-	EndDate          time.Time `xorm:"DATETIME"`
17
-	ValidDays        int       `xorm:"INT(11)"`
18
-	ShareDescription string    `xorm:"VARCHAR(255)"`
19
-	RuleDescription  string    `xorm:"VARCHAR(255)"`
20
-	UseDescription   string    `xorm:"TEXT"`
21
-	TotalCount       int       `xorm:"INT(11)"`
22
-	SentCount        int       `xorm:"INT(11)"`
23
-	UsedCount        int       `xorm:"INT(11)"`
24
-	Status           int       `xorm:"comment('0未发布 1已发布 2已过期') SMALLINT(6)"`
25
-	CaseId           string    `xorm:"VARCHAR(64)"`
26
-	OrgId            string    `xorm:"VARCHAR(64)"`
27
-	CreateDate       time.Time `xorm:"DATETIME"`
8
+	GymCardId   string    `xorm:"not null pk VARCHAR(64)"`
9
+	GymTypeId   string    `xorm:"VARCHAR(64)"`
10
+	GymCardName string    `xorm:"VARCHAR(128)"`
11
+	Price       float32   `xorm:"FLOAT(8,2)"`
12
+	SentType    int       `xorm:"comment('0案场 1渠道') SMALLINT(6)"`
13
+	StartDate   time.Time `xorm:"DATETIME"`
14
+	EndDate     time.Time `xorm:"DATETIME"`
15
+	ValidDays   int       `xorm:"INT(11)"`
16
+	TotalCount  int       `xorm:"INT(11)"`
17
+	SentCount   int       `xorm:"INT(11)"`
18
+	UsedCount   int       `xorm:"INT(11)"`
19
+	Status      int       `xorm:"comment('0未发布 1已发布 2已过期') SMALLINT(6)"`
20
+	CaseId      string    `xorm:"VARCHAR(64)"`
21
+	OrgId       string    `xorm:"VARCHAR(64)"`
22
+	CreateDate  time.Time `xorm:"DATETIME"`
28 23
 }

+ 4
- 1
models/model/ta_vip_card_child.go Ver fichero

@@ -10,7 +10,10 @@ type TaVipCardChild struct {
10 10
 	VipCardChildCode string    `xorm:"VARCHAR(255)"`
11 11
 	Status           int       `xorm:"SMALLINT(6)"`
12 12
 	CustomerId       string    `xorm:"VARCHAR(64)"`
13
-	CustomerTel      string    `xorm:"DECIMAL(13)"`
13
+	CustomerTel      string    `xorm:"VARCHAR(50)"`
14 14
 	CreateDate       time.Time `xorm:"DATETIME"`
15 15
 	ActiveDate       time.Time `xorm:"DATETIME"`
16
+	Amount           string    `xorm:"DECIMAL(8,2)"`
17
+	SalesId          string    `xorm:"VARCHAR(64)"`
18
+	SalesName        string    `xorm:"VARCHAR(50)"`
16 19
 }

models/model/td_coupon_card_type.go → models/model/td_coupon_type.go Ver fichero

@@ -1,6 +1,6 @@
1 1
 package model
2 2
 
3
-type TdCouponCardType struct {
3
+type TdCouponType struct {
4 4
 	CouponTypeId   string `xorm:"not null pk VARCHAR(64)"`
5 5
 	CouponTypeName string `xorm:"VARCHAR(128)"`
6 6
 	OrgId          string `xorm:"VARCHAR(64)"`

+ 4
- 10
models/system/role.go Ver fichero

@@ -26,29 +26,23 @@ func NewRoleDAO(ctx *utils.Context) *RoleDAO {
26 26
 }
27 27
 
28 28
 // GetRoleCount 获取角色总数
29
-func (m *RoleDAO) GetRoleCount(caseids, name, caseid string) (int, error) {
29
+func (m *RoleDAO) GetRoleCount(name string) (int, error) {
30 30
 	var roles []model.SysRole
31
-	dao := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
31
+	dao := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL))
32 32
 	if name != "" {
33 33
 		dao.And("role_name like '%" + name + "%'")
34 34
 	}
35
-	if caseid != "" {
36
-		dao.And("case_id =?", caseid)
37
-	}
38 35
 	err := dao.Find(&roles)
39 36
 	return len(roles), err
40 37
 }
41 38
 
42 39
 // GetRoleList 根据案场获取角色
43
-func (m *RoleDAO) GetRoleList(caseids, name, caseid string, page int, pageSize int) ([]model.SysRole, error) {
40
+func (m *RoleDAO) GetRoleList(name string, page int, pageSize int) ([]model.SysRole, error) {
44 41
 	var roles []model.SysRole
45
-	dao := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
42
+	dao := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL))
46 43
 	if name != "" {
47 44
 		dao.And("role_name like '%" + name + "%'")
48 45
 	}
49
-	if caseid != "" {
50
-		dao.And("case_id =?", caseid)
51
-	}
52 46
 	err := dao.Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&roles)
53 47
 	return roles, err
54 48
 }

+ 2
- 2
models/system/user.go Ver fichero

@@ -39,7 +39,7 @@ func (m *UserDAO) GetUserList(username, typeid, caseids string, page int, pageSi
39 39
 	sql := `select user.*,c.user_type_names from sys_user user left join (
40 40
 		select a.user_id,GROUP_CONCAT(b.type_name) as user_type_names from sys_user_type a
41 41
 		INNER join td_user_type b on a.type_id = b.type_id
42
-		group by a.user_id) c on user.user_id = c.user_id where 
42
+		group by a.user_id) c on user.user_id = c.user_id where user.user_id != '0' and
43 43
 		(status> ` + strconv.Itoa(models.STATUS_DEL) + ` and user_name like '%` + username + `%' and user.user_id in 
44 44
 		(select user_id from sys_user_case where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
45 45
 
@@ -58,7 +58,7 @@ func (m *UserDAO) GetUserCount(username, typeid, caseids string) (int, error) {
58 58
 	sql := `select user.*,c.user_type_names from sys_user user left join (
59 59
 		select a.user_id,GROUP_CONCAT(b.type_name) as user_type_names from sys_user_type a
60 60
 		INNER join td_user_type b on a.type_id = b.type_id
61
-		group by a.user_id) c on user.user_id = c.user_id where 
61
+		group by a.user_id) c on user.user_id = c.user_id where user.user_id != '0' and
62 62
 		(status> ` + strconv.Itoa(models.STATUS_DEL) + ` and user_name like '%` + username + `%' and user.user_id in 
63 63
 		(select user_id from sys_user_case where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
64 64
 

+ 9
- 13
models/verify/verify.go Ver fichero

@@ -4,6 +4,7 @@ import (
4 4
 	"spaceofcheng/services/models/model"
5 5
 	"spaceofcheng/services/utils"
6 6
 	"strconv"
7
+	"strings"
7 8
 
8 9
 	"github.com/go-xorm/xorm"
9 10
 )
@@ -44,7 +45,7 @@ func (m *VerifyDAO) GetCustomerCourseDetailById(id string) (*model.TaCustomerCou
44 45
 }
45 46
 
46 47
 // GetCustomerCourseList 根据我的课程id获取我的课程详情
47
-func (m *VerifyDAO) GetCustomerCourseList(customerCourseId, caseid string, page int, pageSize int) ([]MyCourse, error) {
48
+func (m *VerifyDAO) GetCustomerCourseList(customerCourseId, caseids string, page int, pageSize int) ([]MyCourse, error) {
48 49
 	var courseList []MyCourse
49 50
 	sql := `SELECT
50 51
 	a.*,
@@ -61,14 +62,14 @@ func (m *VerifyDAO) GetCustomerCourseList(customerCourseId, caseid string, page
61 62
 	LEFT JOIN td_cms_image_location f on b.location_id=f.location_id
62 63
 	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
63 64
 	AND a.customer_course_id = '` + customerCourseId + `'
64
-	and b.case_id = '` + caseid + `'`
65
+	and b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
65 66
 	sql = sql + " limit " + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
66 67
 	err := m.db.Sql(sql).Find(&courseList)
67 68
 	return courseList, err
68 69
 }
69 70
 
70 71
 // GetCustomerCourseListCount 根据我的课程id获取我的课程详情数量
71
-func (m *VerifyDAO) GetCustomerCourseListCount(customerCourseId, caseid string) (int, error) {
72
+func (m *VerifyDAO) GetCustomerCourseListCount(customerCourseId, caseids string) (int, error) {
72 73
 	var courseList []MyCourse
73 74
 	sql := `SELECT
74 75
 	a.*,
@@ -82,7 +83,7 @@ func (m *VerifyDAO) GetCustomerCourseListCount(customerCourseId, caseid string)
82 83
 	INNER JOIN sys_case d ON d.case_id = a.case_id
83 84
 	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
84 85
 	AND a.customer_course_id = '` + customerCourseId + `'
85
-	and b.case_id = '` + caseid + `'`
86
+	and b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
86 87
 	err := m.db.Sql(sql).Find(&courseList)
87 88
 	return len(courseList), err
88 89
 }
@@ -99,20 +100,15 @@ func (m *VerifyDAO) UpdateCustomerCourseDetail(customerCourse *model.TaCustomerC
99 100
 }
100 101
 
101 102
 // GetCustomerCourseListByTel 根据客户电话获取我的课程详情
102
-func (m *VerifyDAO) GetCustomerCourseListByTel(tel, caseid string, page, pageSize int) ([]MyCourse, error) {
103
+func (m *VerifyDAO) GetCustomerCourseListByTel(tel, caseids string, page, pageSize int) ([]MyCourse, error) {
103 104
 	var courseList []MyCourse
104 105
 	sql := `SELECT
105 106
 	a.*,
106 107
 	d.case_name,
107 108
 	b.course_name,
108 109
 	c.detail_name,
109
-<<<<<<< HEAD
110
-	f.location_name,
111
-	b.customer_id
112
-=======
113 110
 	b.customer_id,
114 111
 	f.location_name
115
->>>>>>> 802c15c146846cf0ddc7fc7e0273f2683cea90f4
116 112
 	FROM
117 113
 	ta_customer_course_detail a
118 114
 	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
@@ -122,7 +118,7 @@ func (m *VerifyDAO) GetCustomerCourseListByTel(tel, caseid string, page, pageSiz
122 118
 	LEFT JOIN td_cms_image_location f on b.location_id=f.location_id
123 119
 	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
124 120
 	AND e.phone = '` + tel + `'
125
-	and b.case_id='` + caseid + `'`
121
+	and b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
126 122
 	sql = sql + " limit " + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
127 123
 
128 124
 	err := m.db.Sql(sql).Find(&courseList)
@@ -130,7 +126,7 @@ func (m *VerifyDAO) GetCustomerCourseListByTel(tel, caseid string, page, pageSiz
130 126
 }
131 127
 
132 128
 // GetCustomerCourseListByTelCount 根据客户电话获取我的课程详情数量
133
-func (m *VerifyDAO) GetCustomerCourseListByTelCount(tel, caseid string) (int, error) {
129
+func (m *VerifyDAO) GetCustomerCourseListByTelCount(tel, caseids string) (int, error) {
134 130
 	var courseList []MyCourse
135 131
 	sql := `SELECT
136 132
 	a.*,
@@ -145,7 +141,7 @@ FROM
145 141
 	INNER JOIN ta_customer e ON b.customer_id = e.customer_id
146 142
 	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
147 143
 	AND e.phone = '` + tel + `'
148
-	and b.case_id='` + caseid + `'`
144
+	and b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
149 145
 	err := m.db.Sql(sql).Find(&courseList)
150 146
 	return len(courseList), err
151 147
 }

+ 38
- 12
models/vipcard/vipcard.go Ver fichero

@@ -27,13 +27,13 @@ func NewVipcardDAO(ctx *utils.Context) *VipcardDAO {
27 27
 }
28 28
 
29 29
 type VipChild struct {
30
-	model.TaVipCardChild `xorm:"extendes"`
31
-	CaesName             string
30
+	model.TaVipCardChild `xorm:"extends"`
31
+	CaseName             string
32 32
 	CustomerName         string
33 33
 }
34 34
 
35 35
 // GetVipCardList获取VIP卡列表
36
-func (m *VipcardDAO) GetVipCardList(caseid string, page int, pageSize int) ([]VipChild, error) {
36
+func (m *VipcardDAO) GetVipCardList(caseids, cardNo, sellerName, userName string, page int, pageSize int) ([]VipChild, error) {
37 37
 	var vipcards []VipChild
38 38
 	sql := `SELECT
39 39
 	vcc.*,
@@ -43,16 +43,28 @@ FROM
43 43
 	ta_vip_card_child vcc
44 44
 	INNER JOIN ta_vip_card vc ON vcc.vip_card_id = vc.vip_card_id
45 45
 	INNER JOIN sys_case sc ON vc.case_id = sc.case_id 
46
-	INNER JOIN ta_customer tc on vcc.customer_id = tc.customer_id
46
+	LEFT JOIN ta_customer tc on vcc.customer_id = tc.customer_id
47 47
 WHERE
48
-	vcc.status > 0 ` + strconv.Itoa(models.STATUS_DEL) +
49
-		`AND sc.case_id IN('` + strings.Replace(caseid, ",", "','", -1) + `') `
50
-	sql = sql + " order by vc.create_date desc limit " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
48
+	vcc.status > ` + strconv.Itoa(models.STATUS_DEL) +
49
+		` AND sc.case_id IN ('` + strings.Replace(caseids, ",", "','", -1) + `') `
50
+
51
+	if cardNo != "" {
52
+		sql = sql + ` and vcc.vip_card_child_code like '%` + cardNo + `%'`
53
+	}
54
+
55
+	if sellerName != "" {
56
+		sql = sql + ` and tc.recommend_name like '%` + sellerName + `%'`
57
+	}
58
+
59
+	if userName != "" {
60
+		sql = sql + ` and tc.customer_name like '%` + userName + `%'`
61
+	}
62
+	sql = sql + " order by vc.create_date, vip_card_child_code desc limit " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
51 63
 	err := m.db.Sql(sql).Find(&vipcards)
52 64
 	return vipcards, err
53 65
 }
54 66
 
55
-func (m *VipcardDAO) GetCardCount(caseid string) (int, error) {
67
+func (m *VipcardDAO) GetCardCount(caseids, cardNo, sellerName, userName string) (int, error) {
56 68
 	var vipcards []VipChild
57 69
 	sql := `SELECT
58 70
 	vcc.*,
@@ -62,10 +74,21 @@ FROM
62 74
 	ta_vip_card_child vcc
63 75
 	INNER JOIN ta_vip_card vc ON vcc.vip_card_id = vc.vip_card_id
64 76
 	INNER JOIN sys_case sc ON vc.case_id = sc.case_id 
65
-	INNER JOIN ta_customer tc on vcc.customer_id = tc.customer_id
77
+	LEFT JOIN ta_customer tc on vcc.customer_id = tc.customer_id
66 78
 WHERE
67
-	vcc.status > 0 ` + strconv.Itoa(models.STATUS_DEL) +
68
-		`AND sc.case_id IN('` + strings.Replace(caseid, ",", "','", -1) + `') `
79
+	vcc.status > ` + strconv.Itoa(models.STATUS_DEL) +
80
+		` AND sc.case_id IN('` + strings.Replace(caseids, ",", "','", -1) + `') `
81
+	if cardNo != "" {
82
+		sql = sql + ` and vcc.vip_card_child_code like '%` + cardNo + `%'`
83
+	}
84
+
85
+	if sellerName != "" {
86
+		sql = sql + ` and tc.recommend_name like '%` + sellerName + `%'`
87
+	}
88
+
89
+	if userName != "" {
90
+		sql = sql + ` and tc.customer_name like '%` + userName + `%'`
91
+	}
69 92
 	err := m.db.Sql(sql).Find(&vipcards)
70 93
 	return len(vipcards), err
71 94
 
@@ -86,7 +109,7 @@ func (m *VipcardDAO) AddVipCard(vipCard model.TaVipCard) (*model.TaVipCard, erro
86 109
 func (m *VipcardDAO) AddVipChildCard(vipChild model.TaVipCardChild) (*model.TaVipCardChild, error) {
87 110
 	vipChild.CreateDate = time.Now()
88 111
 	vipChild.VipCardChildId = utils.GetGUID()
89
-	vipChild.Status = models.STATUS_NORMAL
112
+	vipChild.Status = models.STATUS_READY
90 113
 	_, err := m.db.Insert(vipChild)
91 114
 	return &vipChild, err
92 115
 }
@@ -124,6 +147,9 @@ func (m *VipcardDAO) UpdateVipChild(vipChild *model.TaVipCardChild) error {
124 147
 		"customer_id",
125 148
 		"customer_tel",
126 149
 		"active_date",
150
+		"status",
151
+		"sales_id",
152
+		"sales_name",
127 153
 	}
128 154
 	_, err := m.db.Cols(cols...).Where("vip_card_child_id = ?", vipChild.VipCardChildId).Update(vipChild)
129 155
 	return err

+ 22
- 0
npm-debug.log Ver fichero

@@ -0,0 +1,22 @@
1
+0 info it worked if it ends with ok
2
+1 verbose cli [ 'D:\\Application\\Node\\node.exe',
3
+1 verbose cli   'C:\\Users\\Administrator\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js',
4
+1 verbose cli   'run',
5
+1 verbose cli   'build' ]
6
+2 info using npm@4.0.5
7
+3 info using node@v8.2.1
8
+4 verbose stack Error: ENOENT: no such file or directory, open 'E:\GoProject\src\spaceofcheng\services\package.json'
9
+5 verbose cwd E:\GoProject\src\spaceofcheng\services
10
+6 error Windows_NT 10.0.17134
11
+7 error argv "D:\\Application\\Node\\node.exe" "C:\\Users\\Administrator\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js" "run" "build"
12
+8 error node v8.2.1
13
+9 error npm  v4.0.5
14
+10 error path E:\GoProject\src\spaceofcheng\services\package.json
15
+11 error code ENOENT
16
+12 error errno -4058
17
+13 error syscall open
18
+14 error enoent ENOENT: no such file or directory, open 'E:\GoProject\src\spaceofcheng\services\package.json'
19
+15 error enoent ENOENT: no such file or directory, open 'E:\GoProject\src\spaceofcheng\services\package.json'
20
+15 error enoent This is most likely not a problem with npm itself
21
+15 error enoent and is related to npm not being able to find a file.
22
+16 verbose exit [ -4058, true ]

+ 12
- 0
routers/common.go Ver fichero

@@ -44,6 +44,7 @@ func getCommonRoutes() beego.LinkNamespace {
44 44
 		beego.NSRouter("/user/:userid/password", &user.UserController{}, "put:UpdatePassword"),
45 45
 		beego.NSRouter("/user/password/reset", &user.UserController{}, "put:ResetPassword"),
46 46
 		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
47
+		beego.NSRouter("/user/tel/:tel", &user.UserController{}, "get:GetUserByTel"),
47 48
 
48 49
 		// 用户类型
49 50
 		beego.NSRouter("/usertype", &user.UserController{}, "get:GetUserTypes"),
@@ -120,6 +121,9 @@ func getCommonRoutes() beego.LinkNamespace {
120 121
 		beego.NSRouter("/case/info", &cases.CaseController{}, "post:SaveCase"),
121 122
 		beego.NSRouter("/case/info", &cases.CaseController{}, "put:SaveCase"),
122 123
 		beego.NSRouter("/case/info/:id", &cases.CaseController{}, "delete:DelCase"),
124
+		beego.NSRouter("/case/conf/:caseid", &cases.CaseController{}, "get:GetCaseConf"),
125
+		beego.NSRouter("/case/open/:caseid", &cases.CaseController{}, "put:OpenCaseCoffee"),
126
+		beego.NSRouter("/case/close/:caseid", &cases.CaseController{}, "put:CloseCaseCoffee"),
123 127
 
124 128
 		// casekey 案场钥匙
125 129
 		beego.NSRouter("/case/key", &cases.CaseController{}, "get:GetKeyList"),
@@ -154,6 +158,7 @@ func getCommonRoutes() beego.LinkNamespace {
154 158
 
155 159
 		// vipcard VIP卡
156 160
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "get:GetVipList"),
161
+		beego.NSRouter("/vipcard/:code", &vipcard.VipcardController{}, "get:GetVipByCode"),
157 162
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "post:AddVipCard"),
158 163
 		beego.NSRouter("/vipcard/:vipCardChildCode", &vipcard.VipcardController{}, "put:UserCharge"),
159 164
 
@@ -206,11 +211,15 @@ func getCommonRoutes() beego.LinkNamespace {
206 211
 		beego.NSRouter("/order/online/goods", &goods.GoodsController{}, "get:GetOnlineOrder"),
207 212
 		beego.NSRouter("/order/goods/record/:recordid", &goods.GoodsController{}, "get:GetOrdersByRecord"),
208 213
 
214
+		beego.NSRouter("/order/goods/finish/:id", &goods.GoodsController{}, "put:FinishMake"),
215
+		beego.NSRouter("/order/goods/cancel/:id", &goods.GoodsController{}, "put:CancelMake"),
216
+
209 217
 		// 文件
210 218
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
211 219
 
212 220
 		// 会员
213 221
 		beego.NSRouter("/customer", &customer.CustomerController{}, "get:CustWXList"),
222
+		beego.NSRouter("/customer/tel/:tel", &customer.CustomerController{}, "get:CustByTel"),
214 223
 
215 224
 		// 系统相关
216 225
 		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
@@ -226,5 +235,8 @@ func getCommonRoutes() beego.LinkNamespace {
226 235
 
227 236
 		// 签到
228 237
 		beego.NSRouter("/case/signin", &cases.SigninController{}, "get:GetSigninWhere"),
238
+
239
+		// websocket
240
+		beego.NSRouter("/websocket/:grps/:id", &controllers.BaseController{}, "get:Ws"),
229 241
 	)
230 242
 }

+ 4
- 1
routers/guest.go Ver fichero

@@ -48,5 +48,8 @@ func getGuestRoutes() beego.LinkNamespace {
48 48
 		beego.NSRouter("/wxsignup", &customer.CustomerController{}, "post:SignUp"),
49 49
 
50 50
 		// 登录
51
-		beego.NSRouter("/signin", &user.UserController{}, "post:SignIn"))
51
+		beego.NSRouter("/signin", &user.UserController{}, "post:SignIn"),
52
+
53
+		beego.NSRouter("/websocket/:grps/:id", &controllers.BaseController{}, "get:Ws"),
54
+	)
52 55
 }

+ 10
- 0
routers/wechat.go Ver fichero

@@ -18,5 +18,15 @@ func getWechatRoutes() beego.LinkNamespace {
18 18
 		// 下单
19 19
 		beego.NSRouter("/order/goods", &goods.GoodsController{}, "post:PostOrder"),
20 20
 		beego.NSRouter("/order/course", &course.CourseController{}, "post:PostOrder"),
21
+
22
+		// 课程
23
+		beego.NSRouter("/course/user", &course.CourseController{}, "get:GetCustomerCourse"),
24
+		beego.NSRouter("/course/user/:id", &course.CourseController{}, "get:GetCustomerCourseByID"),
25
+
26
+		// 商品订单
27
+		beego.NSRouter("/goods/user", &goods.GoodsController{}, "get:GetCustomerOrders"),
28
+
29
+		// 案场订单数量
30
+		beego.NSRouter("/goods/case/:caseid", &goods.GoodsController{}, "get:GetCaseOrdersNum"),
21 31
 	)
22 32
 }

+ 13
- 2
service/cases/cases.go Ver fichero

@@ -27,7 +27,7 @@ func NewCaseServ(ctx *utils.Context) *CaseServ {
27 27
 }
28 28
 
29 29
 const (
30
-	CONFTYPE_COFFEE = "coffee"
30
+	CONFTYPE_GOODS = "goods"
31 31
 )
32 32
 
33 33
 // GetCases 获取案场列表
@@ -100,7 +100,7 @@ func (s *CaseServ) SaveCase(caseinfo model.SysCase) (*model.SysCase, error) {
100 100
 		// 新增案场配置信息
101 101
 		var conf = model.SysCaseConf{
102 102
 			CaseId:   newInfo.CaseId,
103
-			ConfType: CONFTYPE_COFFEE,
103
+			ConfType: CONFTYPE_GOODS,
104 104
 		}
105 105
 		_, err = s.dao.SaveCaseConf(conf)
106 106
 	} else {
@@ -158,3 +158,14 @@ func (s *CaseServ) GetCaseConf(caseid, conftype string) (*model.SysCaseConf, err
158 158
 	}
159 159
 	return conf, nil
160 160
 }
161
+
162
+// UpdateCaseConf 修改案场配置信息
163
+func (s *CaseServ) UpdateCaseConf(caseid, conftype string, status int) error {
164
+	var conf = model.SysCaseConf{
165
+		CaseId:   caseid,
166
+		ConfType: conftype,
167
+		Status:   status,
168
+	}
169
+	err := s.dao.UpdateCaseConf(conf)
170
+	return err
171
+}

+ 8
- 6
service/cases/key.go Ver fichero

@@ -14,14 +14,16 @@ import (
14 14
 func (s *CaseServ) GetKeysByCase(caseid, num string, page, pageSize int) (map[string]interface{}, error) {
15 15
 	cases := s.ctx.Get("cases").([]model.SysUserCase)
16 16
 	isdict := false
17
-	for _, value := range cases {
18
-		if caseid == value.CaseId {
19
-			isdict = true
17
+	if caseid != "" {
18
+		for _, value := range cases {
19
+			if caseid == value.CaseId {
20
+				isdict = true
21
+			}
20 22
 		}
21
-	}
22 23
 
23
-	if !isdict {
24
-		return nil, utils.LogError("您没有该案场的权限!")
24
+		if !isdict {
25
+			return nil, utils.LogError("您没有该案场的权限!")
26
+		}
25 27
 	}
26 28
 
27 29
 	if pageSize == 0 {

+ 11
- 0
service/cases/record.go Ver fichero

@@ -2,6 +2,7 @@ package cases
2 2
 
3 3
 import (
4 4
 	"errors"
5
+	"spaceofcheng/services/models/cases"
5 6
 	"spaceofcheng/services/models/model"
6 7
 	"spaceofcheng/services/service"
7 8
 	"spaceofcheng/services/utils"
@@ -51,3 +52,13 @@ func (s *CaseServ) AddRecord(record model.SysCaseRecord) (*model.SysCaseRecord,
51 52
 	}
52 53
 	return newinfo, nil
53 54
 }
55
+
56
+// GetRecordByID 获取月记录信息
57
+func (s *CaseServ) GetRecordByID(recordid string) (*cases.CaseRecord, error) {
58
+	record, err := s.dao.GetRecordByID(recordid)
59
+	if err != nil {
60
+		utils.LogError("获取月记录失败: " + err.Error())
61
+		return nil, errors.New("获取月记录失败")
62
+	}
63
+	return record, nil
64
+}

+ 54
- 6
service/course/course.go Ver fichero

@@ -235,6 +235,15 @@ func (s *CourseServ) CoursePublic(courseid string) error {
235 235
 	if info.Status != course.STATUS_UNPUBLISH {
236 236
 		return utils.LogError("当前课程状态异常!请刷新后重试!")
237 237
 	}
238
+	// 获取课程已排课数量
239
+	num, err := s.dao.GetCourseDetailCount(courseid)
240
+	if err != nil {
241
+		utils.LogError("课程发布失败: " + err.Error())
242
+		return errors.New("课程发布失败")
243
+	}
244
+	if info.CourseNum > num {
245
+		return errors.New("请先进行排课,再发布课程!")
246
+	}
238 247
 	err = s.dao.CoursePublic(courseid)
239 248
 	if err != nil {
240 249
 		utils.LogError("课程发布失败: " + err.Error())
@@ -311,7 +320,7 @@ func (s *CourseServ) DelCourseImg(imgid string) error {
311 320
 }
312 321
 
313 322
 // GetCourseSchedule 获取课程排期
314
-func (s *CourseServ) GetCourseSchedule(name, caseids, date string, page, pageSize int) (map[string]interface{}, error) {
323
+func (s *CourseServ) GetCourseSchedule(name, caseids, courseid, date string, page, pageSize int) (map[string]interface{}, error) {
315 324
 	if pageSize == 0 {
316 325
 		pageSize = service.PAGENUM
317 326
 	}
@@ -321,12 +330,13 @@ func (s *CourseServ) GetCourseSchedule(name, caseids, date string, page, pageSiz
321 330
 	if date == "" {
322 331
 		return nil, utils.LogError("请先选择需要排课的日期!")
323 332
 	}
324
-	list, err := s.dao.GetCourseSchedule(name, caseids, date, page, pageSize)
333
+
334
+	list, err := s.dao.GetCourseSchedule(name, caseids, courseid, date, page, pageSize)
325 335
 	if err != nil {
326 336
 		utils.LogError("获取课程排期失败: " + err.Error())
327 337
 		return nil, errors.New("获取课程排期失败")
328 338
 	}
329
-	total, err := s.dao.GetCourseScheduleCount(name, caseids, date)
339
+	total, err := s.dao.GetCourseScheduleCount(name, caseids, courseid, date)
330 340
 	if err != nil {
331 341
 		utils.LogError("获取课程排期失败: " + err.Error())
332 342
 		return nil, errors.New("获取课程排期失败")
@@ -341,14 +351,14 @@ func (s *CourseServ) GetCourseSchedule(name, caseids, date string, page, pageSiz
341 351
 }
342 352
 
343 353
 // GetDetails 获取所有排课
344
-func (s *CourseServ) GetDetails(caseid, date string) ([]course.DetailInfo, error) {
345
-	if caseid == "" {
354
+func (s *CourseServ) GetDetails(caseid, date, courseid string) ([]course.DetailInfo, error) {
355
+	if courseid == "" && caseid == "" {
346 356
 		return nil, utils.LogError("请先选择案场!")
347 357
 	}
348 358
 	if date == "" {
349 359
 		return nil, utils.LogError("请选择需要查看的月份!")
350 360
 	}
351
-	details, err := s.dao.GetDetails(caseid, date)
361
+	details, err := s.dao.GetDetails(caseid, date, courseid)
352 362
 	if err != nil {
353 363
 		utils.LogError("获取排期信息失败: " + err.Error())
354 364
 		return nil, errors.New("获取排期信息失败")
@@ -498,3 +508,41 @@ func (s *CourseServ) GetCourseByLocation(orgid, locationid string) ([]course.Cou
498 508
 	}
499 509
 	return list, err
500 510
 }
511
+
512
+// GetCustomerCourse 获取用户的课程信息
513
+func (s *CourseServ) GetCustomerCourse(page, pageSize int) (map[string]interface{}, error) {
514
+	if pageSize == 0 {
515
+		pageSize = service.PAGENUM
516
+	}
517
+	if page == 0 {
518
+		page = 1
519
+	}
520
+	cust := s.ctx.Get("customer").(model.TaCustomer)
521
+	list, err := s.dao.GetCustomerCourse(cust.CustomerId, page, pageSize)
522
+	if err != nil {
523
+		utils.LogError("获取课程信息失败: " + err.Error())
524
+		return nil, errors.New("获取课程信息失败")
525
+	}
526
+	total, err := s.dao.GetCustomerCourseCount(cust.CustomerId)
527
+	if err != nil {
528
+		utils.LogError("获取课程信息失败: " + err.Error())
529
+		return nil, errors.New("获取课程信息失败")
530
+	}
531
+
532
+	return map[string]interface{}{
533
+		"list":     list,
534
+		"pagesize": pageSize,
535
+		"pagenum":  total,
536
+		"page":     page,
537
+	}, nil
538
+}
539
+
540
+// GetCustomerCourseByID 获取我的课程明细
541
+func (s *CourseServ) GetCustomerCourseByID(id string) (*course.CustomerCourse, error) {
542
+	info, err := s.dao.GetCustomerCourseByID(id)
543
+	if err != nil {
544
+		utils.LogError("获取课程信息失败: " + err.Error())
545
+		return nil, errors.New("获取课程信息失败")
546
+	}
547
+	return info, err
548
+}

+ 23
- 17
service/course/order.go Ver fichero

@@ -21,9 +21,7 @@ func (s *CourseServ) Orders(
21 21
 	cust := s.ctx.Get("customer").(model.TaCustomer)
22 22
 
23 23
 	// 校验人员
24
-	if cust.CustomerId != couseOrder.CustomerId {
25
-		return errors.New("下单人非当前人员")
26
-	}
24
+	couseOrder.CustomerId = cust.CustomerId
27 25
 	if cust.UserId != "" {
28 26
 		// 内部人员
29 27
 		// 如果是内部人员购买或者兑换课程, 卡券或者城币就从内部人员自己的账户走
@@ -45,7 +43,7 @@ func (s *CourseServ) Orders(
45 43
 	if err != nil {
46 44
 		return err
47 45
 	}
48
-	if course.CourseDetail == nil || len(course.CourseDetail) > 0 {
46
+	if course.CourseDetail == nil || len(course.CourseDetail) == 0 {
49 47
 		return errors.New("定单课程尚未排课, 不能下单")
50 48
 	}
51 49
 
@@ -54,12 +52,17 @@ func (s *CourseServ) Orders(
54 52
 		// TODO
55 53
 	}
56 54
 
57
-	// 课程价格, 即为订单价格
58
-	couseOrder.Price = course.Price
55
+	couseOrder.OrdersId = guid.NewGUIDString()
56
+	couseOrder.Price = course.Price // 课程价格, 即为订单价格
59 57
 	couseOrder.ActualAmount = course.Price
60 58
 	couseOrder.CourseName = course.CourseName
61 59
 	couseOrder.CourseNum = course.CourseNum
62 60
 	couseOrder.OrgId = org.OrgId
61
+	couseOrder.Status = models.STATUS_NORMAL
62
+
63
+	// 默认是已支付
64
+	couseOrder.IsPay = models.BOOL_TRUE
65
+
63 66
 	if cust.Name != "" {
64 67
 		couseOrder.CustomerName = cust.Name
65 68
 	} else {
@@ -71,16 +74,10 @@ func (s *CourseServ) Orders(
71 74
 		return err
72 75
 	}
73 76
 
74
-	// 入库
75
-	if err := s.dao.SaveCourseOrder(couseOrder); err != nil {
76
-		utils.LogError("课程下单失败: " + err.Error())
77
-		return errors.New("下单失败, 请重试")
78
-	}
79
-
80 77
 	// 实际支付
81 78
 	actualAmount, _ := strconv.ParseFloat(couseOrder.ActualAmount, 64)
82 79
 
83
-	// 用户账户
80
+	// 用户账户  -- 内部人员也可以购买
84 81
 	if actualAmount > 0 {
85 82
 		couseOrder.PayType = models.CONSUME_COINCHG
86 83
 		account, err := s.custDAO.GetAccountByCust(cust.CustomerId)
@@ -93,6 +90,18 @@ func (s *CourseServ) Orders(
93 90
 		if actualAmount > accMoney {
94 91
 			return errors.New("账户余额不足")
95 92
 		}
93
+
94
+		// 插入账户流水
95
+		if err := s.saveCustomerPayRec(account, couseOrder); err != nil {
96
+			utils.LogError("插入账户流水出错: " + err.Error())
97
+			return errors.New("写入账户流水出错")
98
+		}
99
+	}
100
+
101
+	// 入库
102
+	if err := s.SaveOrder(couseOrder, coupons, course); err != nil {
103
+		utils.LogError("课程下单失败: " + err.Error())
104
+		return errors.New("下单失败, 请重试")
96 105
 	}
97 106
 
98 107
 	return nil
@@ -226,7 +235,6 @@ func (s *CourseServ) SaveOrder(order *model.TaCourseOrders, coupons []model.TaCo
226 235
 
227 236
 	// 默认城币购买
228 237
 	courseObtaimType := models.COURSE_GETBY_COINCHG
229
-	srcID := ""
230 238
 	if coupons != nil && len(coupons) > 0 {
231 239
 		for _, c := range coupons {
232 240
 			if c.CouponType == models.COURSE_COUPON_CARD {
@@ -234,8 +242,6 @@ func (s *CourseServ) SaveOrder(order *model.TaCourseOrders, coupons []model.TaCo
234 242
 			} else if c.CouponType == models.COURSE_COUPON_COUPON {
235 243
 				courseObtaimType = models.COURSE_GETBY_COUPON
236 244
 			}
237
-
238
-			srcID = c.CouponId
239 245
 		}
240 246
 	}
241 247
 
@@ -252,7 +258,7 @@ func (s *CourseServ) SaveOrder(order *model.TaCourseOrders, coupons []model.TaCo
252 258
 		JoinNum:          0,
253 259
 		CreateDate:       time.Now().Local(),
254 260
 		CourseObtaimType: courseObtaimType,
255
-		SourceId:         srcID,
261
+		SourceId:         order.OrdersId,
256 262
 		IsDone:           models.BOOL_FALSE,
257 263
 	}
258 264
 

+ 16
- 3
service/customer/customer.go Ver fichero

@@ -98,7 +98,7 @@ func (s *CustomerServ) BindWechatUser(userMap *model.TaUserMapping, phone string
98 98
 		}
99 99
 
100 100
 		wxInfo := wxInfoRaw.(map[string]interface{})
101
-		newCust, err := s.SaveNewCustomer(wxInfo, "", "", user.UserId)
101
+		newCust, err := s.SaveNewCustomer(wxInfo, "", "", user.Phone, user.UserId)
102 102
 		if err != nil {
103 103
 			utils.LogError(err.Error())
104 104
 			return nil, err
@@ -143,7 +143,7 @@ func (s *CustomerServ) BindWechatCust(userMap *model.TaUserMapping, phone, caseI
143 143
 		}
144 144
 
145 145
 		wxInfo := wxInfoRaw.(map[string]interface{})
146
-		newCust, err := s.SaveNewCustomer(wxInfo, caseID, userID, "")
146
+		newCust, err := s.SaveNewCustomer(wxInfo, caseID, userID, phone, "")
147 147
 		if err != nil {
148 148
 			utils.LogError(err.Error())
149 149
 			return nil, err
@@ -175,7 +175,7 @@ func (s *CustomerServ) BindWechatCust(userMap *model.TaUserMapping, phone, caseI
175 175
 }
176 176
 
177 177
 // SaveNewCustomer 新增客户
178
-func (s *CustomerServ) SaveNewCustomer(wxInfo map[string]interface{}, caseID, arID, userID string) (*model.TaCustomer, error) {
178
+func (s *CustomerServ) SaveNewCustomer(wxInfo map[string]interface{}, caseID, arID, phone, userID string) (*model.TaCustomer, error) {
179 179
 	if caseID == "" && arID == "" && userID == "" {
180 180
 		return nil, errors.New("新增信息失败, 无法确认人员类型")
181 181
 	}
@@ -190,11 +190,15 @@ func (s *CustomerServ) SaveNewCustomer(wxInfo map[string]interface{}, caseID, ar
190 190
 		sexInt = 1 // 默认男性
191 191
 	}
192 192
 
193
+	org := s.ctx.Get("org").(model.SysOrg)
194
+
193 195
 	cust := model.TaCustomer{
194 196
 		CustomerName: nickyName,
195 197
 		Name:         nickyName,
196 198
 		Sex:          sexInt,
197 199
 		Headimgurl:   headimgurl,
200
+		Phone:        phone,
201
+		OrgId:        org.OrgId,
198 202
 	}
199 203
 
200 204
 	// 校验案场信息
@@ -264,3 +268,12 @@ func (s *CustomerServ) SaveNewCustomer(wxInfo map[string]interface{}, caseID, ar
264 268
 
265 269
 	return &cust, nil
266 270
 }
271
+
272
+// GetCustUserByTel 根据电话查询用户信息
273
+func (s *CustomerServ) GetCustUserByTel(tel string) (*model.TaCustomer, error) {
274
+	customer, err := s.dao.GetCustomerByPhone(tel)
275
+	if err != nil {
276
+		return nil, err
277
+	}
278
+	return customer, nil
279
+}

+ 2
- 2
service/goods/goods.go Ver fichero

@@ -47,7 +47,7 @@ func (s *GoodsServ) GetListByCase(id string) ([]goods.GoodsWithSpec, error) {
47 47
 
48 48
 // GetGoodsListPageNavi 获取商品列表
49 49
 // 前端 - 非统计部分
50
-func (s *GoodsServ) GetGoodsListPageNavi(name, typeID, caseID string, page, pagesize int) ([]goods.GoodsWithSpec, int64, error) {
50
+func (s *GoodsServ) GetGoodsListPageNavi(name, typeID, caseids string, page, pagesize int) ([]goods.GoodsWithSpec, int64, error) {
51 51
 	if page < 1 {
52 52
 		page = 1
53 53
 	}
@@ -57,7 +57,7 @@ func (s *GoodsServ) GetGoodsListPageNavi(name, typeID, caseID string, page, page
57 57
 
58 58
 	offset := (page - 1) * pagesize
59 59
 
60
-	res, cnt, err := s.dao.GetGoodsListPageNavi(strings.ToLower(name), typeID, caseID, []int{pagesize, offset})
60
+	res, cnt, err := s.dao.GetGoodsListPageNavi(strings.ToLower(name), typeID, caseids, []int{pagesize, offset})
61 61
 	if err != nil {
62 62
 		utils.LogError("获取商品列表失败: " + err.Error())
63 63
 		return nil, 0, errors.New("获取列表失败, 请重试")

+ 209
- 56
service/goods/orders.go Ver fichero

@@ -4,11 +4,16 @@ import (
4 4
 	"errors"
5 5
 	"math"
6 6
 	"spaceofcheng/services/models"
7
+	casemodel "spaceofcheng/services/models/cases"
7 8
 	"spaceofcheng/services/models/goods"
8 9
 	"spaceofcheng/services/models/model"
10
+	"spaceofcheng/services/service"
11
+	"spaceofcheng/services/service/cases"
9 12
 	"spaceofcheng/services/utils"
10 13
 	"strconv"
11 14
 	"time"
15
+
16
+	"github.com/yl10/kit/guid"
12 17
 )
13 18
 
14 19
 // Orders 下单
@@ -16,80 +21,107 @@ func (s *GoodsServ) Orders(
16 21
 	info *model.TaGoodsOrders,
17 22
 	details []model.TaGoodsOrdersDetail,
18 23
 	coupons []model.TaGoodsOrdersCoupon) error {
24
+	// org := s.ctx.Get("org").(model.SysOrg)
25
+	cust := s.ctx.Get("customer").(model.TaCustomer)
26
+
27
+	info.OrdersId = guid.NewGUIDString()
28
+	info.MakeStatus = goods.MAKESTATUS_NOTSTARTED
29
+	info.UserId = cust.CustomerId
19 30
 
20 31
 	// 校验下单内容
21 32
 	if err := s.validOrdersInfo(info); err != nil {
22 33
 		return err
23 34
 	}
24 35
 
25
-	// 校验各种金额
26
-	if err := s.validBillCharges(info, details); err != nil {
27
-		return err
28
-	}
29
-
30
-	// 保存主订单
31
-	if err := s.dao.SaveOrders(info); err != nil {
36
+	// 校验案场信息
37
+	if err := s.validOrdersCase(info); err != nil {
32 38
 		return err
33 39
 	}
34 40
 
35
-	// 保存订单明细
36
-	if err := s.dao.SaveOrdersDetail(details, info.OrdersId); err != nil {
41
+	// 校验各种金额
42
+	if err := s.validBillCharges(info, details); err != nil {
37 43
 		return err
38 44
 	}
39 45
 
40
-	// 内部人员, 可以直接购买
41 46
 	if info.PayType == models.CONSUME_INNER {
42
-
47
+		// 内部人员, 可以直接购买
43 48
 		// TODO
44
-		// 通知后端有新订单 - websocket
45
-		// utils.SendMessage()
49
+	} else {
50
+		// 普通客户
46 51
 
47
-		return nil
48
-	}
52
+		account, err := s.custDAO.GetAccountByCust(info.UserId)
53
+		if err != nil {
54
+			utils.LogError("查询用户账户信息出错: " + err.Error())
55
+			return errors.New("查询用户账户信息出错")
56
+		}
49 57
 
50
-	account, err := s.custDAO.GetAccountByCust(info.UserId)
51
-	if err != nil {
52
-		utils.LogError("查询用户账户信息出错: " + err.Error())
53
-		return errors.New("查询用户账户信息出错")
54
-	}
58
+		// 如果是使用优惠券
59
+		if coupons != nil && len(coupons) > 0 {
60
+			info.PayType = models.CONSUME_COUPON
61
+
62
+			// TODO
63
+			// 校验优惠券相关
64
+			// 优惠券默认抵消全部金额
65
+			info.ActualAmount = "0.0"
66
+		} else {
67
+			// 如果是使用城币
68
+			info.PayType = models.CONSUME_COINCHG
69
+			accMoney, _ := strconv.ParseFloat(account.Amount, 64)
70
+			payMoney, _ := strconv.ParseFloat(info.Amount, 64)
71
+
72
+			if accMoney < payMoney {
73
+				return errors.New("账户余额不足")
74
+			}
55 75
 
56
-	// 如果是使用优惠券
57
-	if coupons != nil && len(coupons) > 0 {
58
-		info.PayType = models.CONSUME_COUPON
59
-		// TODO
60
-		// 校验优惠券相关
61
-	} else {
62
-		// 如果是使用城币
63
-		info.PayType = models.CONSUME_COINCHG
64
-		accMoney, _ := strconv.ParseFloat(account.Amount, 64)
65
-		payMoney, _ := strconv.ParseFloat(info.ActualAmount, 64)
76
+			info.ActualAmount = strconv.FormatFloat(payMoney, 'f', -1, 64)
77
+		}
78
+
79
+		// 保存优惠券使用记录
80
+		if coupons != nil && len(coupons) > 0 {
81
+			if err := s.dao.SaveOrdersCoupon(coupons, info); err != nil {
82
+				utils.LogError("保存优惠信息出错: " + err.Error())
83
+				return errors.New("保存优惠信息出错")
84
+			}
66 85
 
67
-		if accMoney < payMoney {
68
-			return errors.New("账户余额不足")
86
+			// TODO
87
+			// 核销优惠券
69 88
 		}
70
-	}
71 89
 
72
-	// 保存优惠券使用记录
73
-	if coupons != nil && len(coupons) > 0 {
74
-		if err := s.dao.SaveOrdersCoupon(coupons, info); err != nil {
75
-			utils.LogError("保存优惠信息出错: " + err.Error())
76
-			return errors.New("保存优惠信息出错")
90
+		// 如果是城币, 则插入用户账户消费记录
91
+		if info.PayType == models.CONSUME_COINCHG {
92
+			if err := s.saveCustomerPayRec(account, info); err != nil {
93
+				return err
94
+			}
77 95
 		}
96
+	}
78 97
 
79
-		// TODO
80
-		// 核销优惠券
98
+	// 保存主订单
99
+	if err := s.dao.SaveOrders(info); err != nil {
100
+		return err
81 101
 	}
82 102
 
83
-	// 如果是城币, 则插入用户账户消费记录
84
-	if info.PayType == models.CONSUME_COINCHG {
85
-		if err := s.saveCustomerPayRec(account, info); err != nil {
86
-			return err
87
-		}
103
+	// 保存订单明细
104
+	if err := s.dao.SaveOrdersDetail(details, info.OrdersId); err != nil {
105
+		return err
88 106
 	}
89 107
 
90
-	// TODO
91 108
 	// 通知后端有新订单 - websocket
92
-	// utils.SendMessage()
109
+	orderList, err := s.GetOnLineOrders(info.CaseId, false)
110
+	if err != nil {
111
+		utils.LogError("获取新单列表出错: " + err.Error())
112
+		return nil
113
+	}
114
+
115
+	msg := utils.Message{
116
+		To: utils.ClientID{
117
+			Groups: []string{info.CaseId},
118
+		},
119
+		Data: map[string]interface{}{
120
+			"refreshOnlineGoodsOrders": orderList,
121
+		},
122
+	}
123
+
124
+	utils.SendMessage(msg, utils.WsMessage)
93 125
 
94 126
 	return nil
95 127
 }
@@ -165,6 +197,8 @@ func (s *GoodsServ) validOrdersInfo(info *model.TaGoodsOrders) error {
165 197
 		return errors.New("下单人状态不正确, 不能下单")
166 198
 	}
167 199
 
200
+	info.UserType = models.USERTYPE_CUSTOMER
201
+
168 202
 	// 如果是管理人员
169 203
 	if cust.UserId != "" {
170 204
 		// 内部人员
@@ -223,20 +257,38 @@ func (s *GoodsServ) validBillCharges(info *model.TaGoodsOrders, details []model.
223 257
 
224 258
 	goodsAmount := float64(0.0)
225 259
 	for _, item := range details {
226
-		goods, err := s.dao.GetGoodsWithPriceByID(item.GoodsId, item.SpecId, caseID)
227
-		if err != nil {
228
-			utils.LogError("查询商品详情失败: " + err.Error())
229
-			return errors.New("校验商品信息失败")
260
+
261
+		var price float64
262
+		var goodsPrice float64
263
+
264
+		price, _ = strconv.ParseFloat(item.Price, 64)
265
+
266
+		// 商品无规格
267
+		if item.SpecId == "" {
268
+			goods, err := s.dao.GetGoodsByID(item.GoodsId)
269
+			if err != nil {
270
+				utils.LogError("查询商品详情失败: " + err.Error())
271
+				return errors.New("校验商品信息失败")
272
+			}
273
+
274
+			goodsPrice, _ = strconv.ParseFloat(goods.Price, 64)
275
+		} else {
276
+			goods, err := s.dao.GetGoodsWithPriceByID(item.GoodsId, item.SpecId, caseID)
277
+			if err != nil {
278
+				utils.LogError("查询商品详情失败: " + err.Error())
279
+				return errors.New("校验商品信息失败")
280
+			}
281
+
282
+			goodsPrice, _ = strconv.ParseFloat(goods.GoodsPrice, 64)
230 283
 		}
231 284
 
232
-		if goods.GoodsPrice != item.Price {
285
+		if math.Abs(price-goodsPrice) > 0.00001 {
233 286
 			return errors.New("商品金额计算错误")
234 287
 		}
235 288
 
236 289
 		// TODO 校验库存
237 290
 		// 商品暂时无库存
238 291
 
239
-		price, _ := strconv.ParseFloat(item.Price, 64)
240 292
 		goodsAmount += price * float64(item.Number)
241 293
 	}
242 294
 
@@ -247,6 +299,10 @@ func (s *GoodsServ) validBillCharges(info *model.TaGoodsOrders, details []model.
247 299
 		return errors.New("商品金额计算错误")
248 300
 	}
249 301
 
302
+	// TODO
303
+	// 暂时实际支付为 0
304
+	info.ActualAmount = "0.0"
305
+
250 306
 	return nil
251 307
 }
252 308
 
@@ -284,9 +340,16 @@ func (s *GoodsServ) GetOrderList(caseID, userType, status string, orderDate []ti
284 340
 
285 341
 // GetOnLineOrders 获取订单列表
286 342
 // 管理端 - 在线订单
287
-func (s *GoodsServ) GetOnLineOrders(caseID string) ([]goods.OrdersWithGoods, error) {
288
-	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
289
-		return nil, err
343
+func (s *GoodsServ) GetOnLineOrders(caseID string, checkRights ...bool) ([]goods.OrdersWithGoods, error) {
344
+	needRights := true
345
+	if checkRights != nil && len(checkRights) > 0 {
346
+		needRights = checkRights[0]
347
+	}
348
+
349
+	if needRights {
350
+		if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
351
+			return nil, err
352
+		}
290 353
 	}
291 354
 
292 355
 	makeStatus := []string{goods.MAKESTATUS_NOTSTARTED, goods.MAKESTATUS_DOING}
@@ -310,3 +373,93 @@ func (s *GoodsServ) GetOrdersByRecord(recordid string) ([]goods.OrdersWithGoods,
310 373
 	}
311 374
 	return orders, nil
312 375
 }
376
+
377
+// validOrdersCase 校验案场信息
378
+func (s *GoodsServ) validOrdersCase(info *model.TaGoodsOrders) error {
379
+	conf, err := s.caseDAO.GetConfByCase(info.CaseId, cases.CONFTYPE_GOODS)
380
+	if err != nil {
381
+		utils.LogError("获取配置信息失败: " + err.Error())
382
+		return errors.New("获取配置信息失败")
383
+	}
384
+
385
+	if conf == nil || conf.Status != models.STATUS_NORMAL {
386
+		return errors.New("当前案场已歇业!不允许下单!")
387
+	}
388
+
389
+	// 获取当月记录
390
+	record, err := s.caseDAO.GetRecordByCase(info.CaseId)
391
+	if err != nil {
392
+		utils.LogError("获取月记录失败: " + err.Error())
393
+		return errors.New("获取月记录失败")
394
+	}
395
+	if record != nil && record.IsOver == casemodel.ISNOOVER && record.LeftNum < info.OrdersNum {
396
+		return errors.New("超出案场限制的本月下单次数!不允许下单!")
397
+	}
398
+	return nil
399
+}
400
+
401
+// GetCustomerOrders 获取用户订单
402
+func (s *GoodsServ) GetCustomerOrders(page, pageSize int) (map[string]interface{}, error) {
403
+	if pageSize == 0 {
404
+		pageSize = service.PAGENUM
405
+	}
406
+	if page == 0 {
407
+		page = 1
408
+	}
409
+	cust := s.ctx.Get("customer").(model.TaCustomer)
410
+	list, err := s.dao.GetCustomerOrders(cust.CustomerId, page, pageSize)
411
+	if err != nil {
412
+		utils.LogError("获取订单信息失败: " + err.Error())
413
+		return nil, errors.New("获取订单信息失败")
414
+	}
415
+	total, err := s.dao.GetCustomerOrdersCount(cust.CustomerId)
416
+	if err != nil {
417
+		utils.LogError("获取订单信息失败: " + err.Error())
418
+		return nil, errors.New("获取订单信息失败")
419
+	}
420
+
421
+	return map[string]interface{}{
422
+		"list":     list,
423
+		"pagesize": pageSize,
424
+		"pagenum":  total,
425
+		"page":     page,
426
+	}, nil
427
+}
428
+
429
+// GetCaseOrdersNum 获取案场订单数量
430
+func (s *GoodsServ) GetCaseOrdersNum(caseid string) (map[string]interface{}, error) {
431
+	total, err := s.dao.GetOrdersCountByCase(caseid)
432
+	if err != nil {
433
+		utils.LogError("获取案场订单数量失败: " + err.Error())
434
+		return nil, errors.New("获取案场信息失败")
435
+	}
436
+	monthtotal, err := s.dao.GetMonthOrdersCountByCase(caseid)
437
+	if err != nil {
438
+		utils.LogError("获取月案场订单数量失败: " + err.Error())
439
+		return nil, errors.New("获取案场信息失败")
440
+	}
441
+	return map[string]interface{}{
442
+		"total":      total,
443
+		"monthtotal": monthtotal,
444
+	}, nil
445
+}
446
+
447
+// FinishMake 完成制作
448
+func (s *GoodsServ) FinishMake(id string) error {
449
+	var orders = model.TaGoodsOrders{
450
+		OrdersId:   id,
451
+		MakeStatus: goods.MAKESTATUS_FINISHED,
452
+	}
453
+	err := s.dao.UpdateOrdersMake(orders)
454
+	return err
455
+}
456
+
457
+// CancelMake 取消制作
458
+func (s *GoodsServ) CancelMake(id string) error {
459
+	var orders = model.TaGoodsOrders{
460
+		OrdersId:   id,
461
+		MakeStatus: goods.MAKESTATUS_CANCEL,
462
+	}
463
+	err := s.dao.UpdateOrdersMake(orders)
464
+	return err
465
+}

+ 110
- 0
service/gymcard/gymcard.go Ver fichero

@@ -0,0 +1,110 @@
1
+package gymcard
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/models/gymcard"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/service"
8
+	"spaceofcheng/services/utils"
9
+)
10
+
11
+// GymcardServ 系统处理
12
+type GymcardServ struct {
13
+	ctx *utils.Context
14
+	dao *gymcard.GymcardDAO
15
+}
16
+
17
+// NewGymcardServ 初始化
18
+func NewGymcardServ(ctx *utils.Context) *GymcardServ {
19
+	return &GymcardServ{
20
+		ctx: ctx,
21
+		dao: gymcard.NewGymcardDAO(ctx),
22
+	}
23
+}
24
+func (s *GymcardServ) GetGymcardList(caseid string, page, pageSize int) (map[string]interface{}, error) {
25
+	if pageSize == 0 {
26
+		pageSize = service.PAGENUM
27
+	}
28
+	gymcard, err := s.dao.GetGymcard(caseid, page, pageSize)
29
+	if err != nil {
30
+		utils.LogError("获取健身卡列表失败:" + err.Error())
31
+		return nil, errors.New("获取健身卡列表失败")
32
+	}
33
+	total, err := s.dao.GetGymcardCount(caseid)
34
+	if err != nil {
35
+		utils.LogError("获取健身卡列表失败:" + err.Error())
36
+		return nil, errors.New("获取健身卡列表失败")
37
+	}
38
+	return map[string]interface{}{
39
+		"list":     gymcard,
40
+		"pageSize": pageSize,
41
+		"pagenum":  total,
42
+		"page":     page,
43
+	}, nil
44
+}
45
+func (s *GymcardServ) GetCustomerGymBycustomerId(customerId string, page, pageSize int) (map[string]interface{}, error) {
46
+	if pageSize == 0 {
47
+		pageSize = service.PAGENUM
48
+	}
49
+	customerGym, err := s.dao.GetCustomerGymByCustomerId(customerId, page, pageSize)
50
+	if err != nil {
51
+		utils.LogError("获取健身卡列表失败:" + err.Error())
52
+		return nil, errors.New("获取健身卡列表失败")
53
+	}
54
+	total, err := s.dao.GetCustomerGymCountByCustomerId(customerId)
55
+	if err != nil {
56
+		utils.LogError("获取健身卡列表失败:" + err.Error())
57
+		return nil, errors.New("获取健身卡列表失败")
58
+	}
59
+	return map[string]interface{}{
60
+		"list":     customerGym,
61
+		"pageSize": pageSize,
62
+		"pagenum":  total,
63
+		"page":     page,
64
+	}, nil
65
+}
66
+func (s *GymcardServ) GetGymcardDetailByIdZ(gymcardId string) (*gymcard.Gymcard, error) {
67
+	gymcard, err := s.dao.GetGymcardById(gymcardId)
68
+	if err != nil {
69
+		utils.LogError("获取健身卡详情失败" + err.Error())
70
+		return nil, errors.New("获取健身卡详情失败")
71
+	}
72
+	return gymcard, nil
73
+}
74
+
75
+func (s *GymcardServ) SaveGymcard(newGym gymcard.Gymcard) (*gymcard.Gymcard, error) {
76
+	var newGymCard model.TaGymCard
77
+	var cardGym model.TaGymCard
78
+	var err error
79
+	if newGym.GymCardId == "" {
80
+		newGymCard = newGym.TaGymCard
81
+		cardGym, err = s.dao.AddGymcard(newGymCard)
82
+		err = s.dao.AddGymcardImg(newGym.GymCardId, newGym.CardImageUrl)
83
+		newGym.TaGymCard = cardGym
84
+		err = s.dao.AddGymcardShare(newGym.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
85
+	} else {
86
+		err = s.dao.EditGymcardImg(newGym.GymCardId, newGym.CardImageUrl)
87
+		err = s.dao.EditGymcardShare(newGym.GymCardId, newGym.CardShareInfo, newGym.CardUseRule, newGym.CardUseInstruction)
88
+	}
89
+	if err != nil {
90
+		utils.LogError("保存健身卡信息失败" + err.Error())
91
+		return nil, errors.New("保存健身卡信息失败")
92
+	}
93
+	return &newGym, nil
94
+}
95
+
96
+func (s *GymcardServ) SendGymCardToUser(customerId, gymcardId string) (*model.TaCustomerGym, error) {
97
+	var customerGym *model.TaCustomerGym
98
+	gymCard, err := s.dao.GetGymcardById(gymcardId)
99
+	if err != nil {
100
+		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
101
+		return nil, errors.New("发送游泳健身卡给客户失败")
102
+	}
103
+	customerGym, err = s.dao.SendGymcardToCustomer(gymCard, customerId)
104
+	if err != nil {
105
+		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
106
+		return nil, errors.New("发送游泳健身卡给客户失败")
107
+	}
108
+	return customerGym, nil
109
+
110
+}

+ 2
- 0
service/message/cmscase.go Ver fichero

@@ -136,6 +136,8 @@ func (s *MessageServ) SaveCmsCase(cmscase model.TaCmsCase, courseids, imgs, deta
136 136
 	// }
137 137
 
138 138
 	if cmscase.CmsCaseId == "" {
139
+		org := s.ctx.Get("org").(model.SysOrg)
140
+		cmscase.OrgId = org.OrgId
139 141
 		newInfo, err = s.dao.AddCmsCase(cmscase)
140 142
 	} else {
141 143
 		err = s.dao.UpdateCmsCase(cmscase)

+ 2
- 0
service/message/message.go Ver fichero

@@ -75,6 +75,8 @@ func (s *MessageServ) GetCmsInfoByID(id string) (*model.TaCmsInfo, error) {
75 75
 // SaveCmsInfo 保存消息信息
76 76
 func (s *MessageServ) SaveCmsInfo(cmsinfo model.TaCmsInfo) (*model.TaCmsInfo, error) {
77 77
 	if cmsinfo.InfoId == "" {
78
+		org := s.ctx.Get("org").(model.SysOrg)
79
+		cmsinfo.OrgId = org.OrgId
78 80
 		newcmsinfo, err := s.dao.AddCmsInfo(cmsinfo)
79 81
 		if err != nil {
80 82
 			utils.LogError("保存信息失败: " + err.Error())

+ 3
- 3
service/system/role.go Ver fichero

@@ -23,19 +23,19 @@ func NewRoleServ(ctx *utils.Context) *RoleServ {
23 23
 }
24 24
 
25 25
 // GetRoleList 获取Role列表
26
-func (s *RoleServ) GetRoleList(caseids, name, caseid string, page, pageSize int) (map[string]interface{}, error) {
26
+func (s *RoleServ) GetRoleList(name string, page, pageSize int) (map[string]interface{}, error) {
27 27
 	if pageSize == 0 {
28 28
 		pageSize = service.PAGENUM
29 29
 	}
30 30
 	if page == 0 {
31 31
 		page = 1
32 32
 	}
33
-	roles, err := s.dao.GetRoleList(caseids, name, caseid, page, pageSize)
33
+	roles, err := s.dao.GetRoleList(name, page, pageSize)
34 34
 	if err != nil {
35 35
 		utils.LogError("获取角色列表失败: " + err.Error())
36 36
 		return nil, errors.New("获取角色列表失败")
37 37
 	}
38
-	total, err := s.dao.GetRoleCount(caseids, name, caseid)
38
+	total, err := s.dao.GetRoleCount(name)
39 39
 	if err != nil {
40 40
 		utils.LogError("获取角色列表失败: " + err.Error())
41 41
 		return nil, errors.New("获取角色列表失败")

+ 6
- 0
service/user.go Ver fichero

@@ -337,3 +337,9 @@ func (s *UserServ) CheckUserSignIn(userName, userPassword string) (*model.SysUse
337 337
 
338 338
 	return user, nil
339 339
 }
340
+
341
+// GetUserByTel 根据电话获取用户信息
342
+func (s *UserServ) GetUserByTel(tel string) (*model.SysUser, error) {
343
+	user, err := s.dao.GetUserByPhone(tel)
344
+	return user, err
345
+}

+ 9
- 12
service/verify/verify.go Ver fichero

@@ -28,23 +28,23 @@ func NewVerifyServ(ctx *utils.Context) *VerifyServ {
28 28
 }
29 29
 
30 30
 // GetCustomerCourseDetailById 根据ID获取当日可核销课程
31
-func (s *VerifyServ) GetCustomerCourseDetailById(id, caseid string, page, pageSize int) (map[string]interface{}, error) {
32
-	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseid); err != nil {
33
-		return nil, err
34
-	}
31
+func (s *VerifyServ) GetCustomerCourseDetailById(id, caseids string, page, pageSize int) (map[string]interface{}, error) {
32
+	// if err := utils.NewAuthEngine(s.ctx).CheckCase(caseid); err != nil {
33
+	// 	return nil, err
34
+	// }
35 35
 	if pageSize == 0 {
36 36
 		pageSize = service.PAGENUM
37 37
 	}
38 38
 	if page == 0 {
39 39
 		page = 1
40 40
 	}
41
-	customerDetail, err := s.dao.GetCustomerCourseList(id, caseid, page, pageSize)
41
+	customerDetail, err := s.dao.GetCustomerCourseList(id, caseids, page, pageSize)
42 42
 	if err != nil {
43 43
 		utils.LogError("获取列表失败: " + err.Error())
44 44
 		return nil, errors.New("获取列表失败")
45 45
 	}
46 46
 	customerId := customerDetail[0].CustomerId
47
-	total, err := s.dao.GetCustomerCourseListCount(id, caseid)
47
+	total, err := s.dao.GetCustomerCourseListCount(id, caseids)
48 48
 	if err != nil {
49 49
 		utils.LogError("获取列表失败: " + err.Error())
50 50
 		return nil, errors.New("获取列表失败")
@@ -65,23 +65,20 @@ func (s *VerifyServ) GetCustomerCourseDetailById(id, caseid string, page, pageSi
65 65
 }
66 66
 
67 67
 // GetCustomerCourseDetailByTel根据电话号码获取当日可核销课程
68
-func (s *VerifyServ) GetCustomerCourseDetailByTel(tel, caseid string, page, pageSize int) (map[string]interface{}, error) {
69
-	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseid); err != nil {
70
-		return nil, err
71
-	}
68
+func (s *VerifyServ) GetCustomerCourseDetailByTel(tel, caseids string, page, pageSize int) (map[string]interface{}, error) {
72 69
 	if pageSize == 0 {
73 70
 		pageSize = service.PAGENUM
74 71
 	}
75 72
 	if page == 0 {
76 73
 		page = 1
77 74
 	}
78
-	customerDetail, err := s.dao.GetCustomerCourseListByTel(tel, caseid, page, pageSize)
75
+	customerDetail, err := s.dao.GetCustomerCourseListByTel(tel, caseids, page, pageSize)
79 76
 	if err != nil {
80 77
 		utils.LogError("获取列表失败: " + err.Error())
81 78
 		return nil, errors.New("获取列表失败")
82 79
 	}
83 80
 	customerId := customerDetail[0].CustomerId
84
-	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseid)
81
+	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseids)
85 82
 	if err != nil {
86 83
 		utils.LogError("获取列表失败: " + err.Error())
87 84
 		return nil, errors.New("获取列表失败")

+ 4
- 3
service/vipcard/vipcard.go Ver fichero

@@ -27,19 +27,19 @@ func NewVipcardServ(ctx *utils.Context) *VipcardServ {
27 27
 }
28 28
 
29 29
 // GetVipChild 获取VIP卡列表
30
-func (s *VipcardServ) GetVipChild(caseid string, page, pageSize int) (map[string]interface{}, error) {
30
+func (s *VipcardServ) GetVipChild(caseids, cardNo, sellerName, userName string, page, pageSize int) (map[string]interface{}, error) {
31 31
 	if pageSize == 0 {
32 32
 		pageSize = service.PAGENUM
33 33
 	}
34 34
 	if page == 0 {
35 35
 		page = 1
36 36
 	}
37
-	vipchild, err := s.dao.GetVipCardList(caseid, page, pageSize)
37
+	vipchild, err := s.dao.GetVipCardList(caseids, cardNo, sellerName, userName, page, pageSize)
38 38
 	if err != nil {
39 39
 		utils.LogError("获取VIP卡信息失败: " + err.Error())
40 40
 		return nil, errors.New("获取VIP卡信息失败")
41 41
 	}
42
-	total, err := s.dao.GetCardCount(caseid)
42
+	total, err := s.dao.GetCardCount(caseids, cardNo, sellerName, userName)
43 43
 	if err != nil {
44 44
 		utils.LogError("获取VIP卡信息失败: " + err.Error())
45 45
 		return nil, errors.New("获取VIP卡信息失败")
@@ -84,6 +84,7 @@ func (s *VipcardServ) AddVipCard(vipCard model.TaVipCard) (*model.TaVipCard, err
84 84
 		var vipChild model.TaVipCardChild
85 85
 		vipChild.VipCardId = vipcard.VipCardId
86 86
 		vipChild.VipCardChildCode = s.dao.GenerateChildCode()
87
+		vipChild.Amount = vipCard.CardAmount
87 88
 		_, err := s.dao.AddVipChildCard(vipChild)
88 89
 		if err != nil {
89 90
 			utils.LogError("创建VIP卡失败: " + err.Error())

+ 15
- 2
utils/message.go Ver fichero

@@ -8,7 +8,11 @@ import (
8 8
 type ClientID websocket.ClientID
9 9
 
10 10
 // Message 发送消息
11
-type Message websocket.Message
11
+type Message struct {
12
+	From ClientID    `json:"from"`
13
+	To   ClientID    `json:"to"`
14
+	Data interface{} `json:"data"`
15
+}
12 16
 
13 17
 // 消息类型
14 18
 const (
@@ -19,7 +23,12 @@ const (
19 23
 
20 24
 // SendWs 发送 websocket
21 25
 func SendWs(message Message) {
22
-	msg := websocket.Message(message)
26
+	msg := websocket.Message{
27
+		From: websocket.ClientID(message.From),
28
+		To:   websocket.ClientID(message.To),
29
+		Data: message.Data,
30
+	}
31
+
23 32
 	websocket.Send(msg)
24 33
 }
25 34
 
@@ -33,3 +42,7 @@ func SendMessage(message Message, msgType string) {
33 42
 	default:
34 43
 	}
35 44
 }
45
+
46
+func init() {
47
+	go websocket.Run()
48
+}

+ 5
- 0
utils/wechat.go Ver fichero

@@ -24,6 +24,11 @@ func WxClientFor(org string) *wx.Client {
24 24
 	return wxClients[org]
25 25
 }
26 26
 
27
+// GetWxAppID 获取微信ID
28
+func GetWxAppID(org string) string {
29
+	return wxClients[org].GetAppID()
30
+}
31
+
27 32
 func init() {
28 33
 	wx.SetLogInst(defaultLogger)
29 34
 }