Browse Source

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

keyman1995 6 years ago
parent
commit
c6809488be
65 changed files with 3773 additions and 296 deletions
  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 View File

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

+ 2
- 0
conf/app.conf View File

5
 copyrequestbody = true
5
 copyrequestbody = true
6
 EnableDocs = true
6
 EnableDocs = true
7
 sessionon = true
7
 sessionon = true
8
+excelpath = ./
8
 
9
 
9
 
10
 
10
 [cros]
11
 [cros]
20
 guest = "/guest/:org"
21
 guest = "/guest/:org"
21
 common = "/common/:org"
22
 common = "/common/:org"
22
 wechat = "/wechat/:org"
23
 wechat = "/wechat/:org"
24
+

+ 15
- 13
controllers/auth.go View File

3
 import (
3
 import (
4
 	"errors"
4
 	"errors"
5
 	"net/http"
5
 	"net/http"
6
+	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/utils"
8
 	"spaceofcheng/services/utils"
8
 	"strings"
9
 	"strings"
24
 
25
 
25
 	// 客户端类型
26
 	// 客户端类型
26
 	clientType := utils.GetClientType(c.Ctx.Request)
27
 	clientType := utils.GetClientType(c.Ctx.Request)
28
+
27
 	switch clientType {
29
 	switch clientType {
28
 	case utils.ClientAdmin:
30
 	case utils.ClientAdmin:
29
 		c.authPCAdmin(serv)
31
 		c.authPCAdmin(serv)
78
 		custID = custIDRaw.(string)
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
 	if err != nil {
88
 	if err != nil {
86
 		utils.LogError("查询微信配置失败: " + err.Error())
89
 		utils.LogError("查询微信配置失败: " + err.Error())
87
 		c.ResponseError(
90
 		c.ResponseError(
89
 			http.StatusBadRequest,
92
 			http.StatusBadRequest,
90
 		)
93
 		)
91
 	}
94
 	}
92
-	utils.WxClientSingleton(orgID, wxConf)
95
+	utils.WxClientSingleton(org.OrgId, wxConf)
93
 
96
 
94
 	// 用户微信信息
97
 	// 用户微信信息
95
 	var wxDetail map[string]interface{}
98
 	var wxDetail map[string]interface{}
111
 				"unionid":    "o6_bmasdasdsad6_2sgVt7hMZOPfL",
114
 				"unionid":    "o6_bmasdasdsad6_2sgVt7hMZOPfL",
112
 			}
115
 			}
113
 		} else {
116
 		} else {
114
-			wxDetail = c.getWechatDetail(orgID, serv)
117
+			wxDetail = c.getWechatDetail(org.OrgId, serv)
115
 		}
118
 		}
116
 
119
 
117
 		c.SetSession("wechat_user", wxDetail)
120
 		c.SetSession("wechat_user", wxDetail)
132
 	if !c.needAuth() {
135
 	if !c.needAuth() {
133
 		return
136
 		return
134
 	}
137
 	}
135
-
136
 	// 未登录或者绑定, 返回 401
138
 	// 未登录或者绑定, 返回 401
137
 	if custID == "" && userMap.UserId == "" {
139
 	if custID == "" && userMap.UserId == "" {
138
-		c.ResponseData(
139
-			map[string]interface{}{
140
-				"appid": wxConf["appid"],
141
-			},
140
+		c.ResponseError(
142
 			errors.New("用户未登录或绑定"),
141
 			errors.New("用户未登录或绑定"),
143
-			http.StatusUnauthorized,
142
+			http.StatusNotAcceptable,
144
 		)
143
 		)
145
 	}
144
 	}
146
 
145
 
178
 	// 微信 code
177
 	// 微信 code
179
 	code := c.GetString("code")
178
 	code := c.GetString("code")
180
 	if code == "" {
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
 			http.StatusUnauthorized,
185
 			http.StatusUnauthorized,
184
 		)
186
 		)
185
 	}
187
 	}

+ 36
- 0
controllers/cases/case.go View File

1
 package cases
1
 package cases
2
 
2
 
3
 import (
3
 import (
4
+	"errors"
4
 	"spaceofcheng/services/controllers"
5
 	"spaceofcheng/services/controllers"
6
+	"spaceofcheng/services/models"
5
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service/cases"
8
 	"spaceofcheng/services/service/cases"
9
+	"spaceofcheng/services/utils"
7
 )
10
 )
8
 
11
 
9
 // CaseController 信息
12
 // CaseController 信息
78
 
81
 
79
 	c.ResponseJSON(res)
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 View File

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

+ 26
- 2
controllers/course/course.go View File

128
 func (c *CourseController) GetCourseSchedule() {
128
 func (c *CourseController) GetCourseSchedule() {
129
 	name := c.GetString("name")
129
 	name := c.GetString("name")
130
 	caseids := c.GetString("caseid")
130
 	caseids := c.GetString("caseid")
131
+	courseid := c.GetString("courseid")
131
 	if caseids == "" {
132
 	if caseids == "" {
132
 		cases := c.Context.Get("cases").([]model.SysUserCase)
133
 		cases := c.Context.Get("cases").([]model.SysUserCase)
133
 		caseids = c.GetCaseIDs(cases)
134
 		caseids = c.GetCaseIDs(cases)
135
 	date := c.GetString("date")
136
 	date := c.GetString("date")
136
 	page, _ := c.GetInt("page")
137
 	page, _ := c.GetInt("page")
137
 	pageSize, _ := c.GetInt("pagesize")
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
 	if err != nil {
140
 	if err != nil {
140
 		c.ResponseError(err)
141
 		c.ResponseError(err)
141
 	}
142
 	}
146
 func (c *CourseController) GetDetails() {
147
 func (c *CourseController) GetDetails() {
147
 	caseid := c.GetString("caseid")
148
 	caseid := c.GetString("caseid")
148
 	date := c.GetString("date")
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
 	if err != nil {
152
 	if err != nil {
151
 		c.ResponseError(err)
153
 		c.ResponseError(err)
152
 	}
154
 	}
213
 	}
215
 	}
214
 	c.ResponseJSON(courses)
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 View File

115
 
115
 
116
 	c.ResponseJSON("ok")
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 View File

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

+ 145
- 1
controllers/goods/order.go View File

1
 package goods
1
 package goods
2
 
2
 
3
 import (
3
 import (
4
+	"cdkj-check/models"
4
 	"encoding/json"
5
 	"encoding/json"
5
 	"errors"
6
 	"errors"
6
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/utils"
8
 	"spaceofcheng/services/utils"
9
+	"strconv"
8
 	"time"
10
 	"time"
11
+
12
+	"github.com/astaxie/beego"
13
+	"github.com/tealeg/xlsx"
9
 )
14
 )
10
 
15
 
11
 // GetOrderList 获取商品订单
16
 // GetOrderList 获取商品订单
125
 	c.ResponseJSON("ok")
130
 	c.ResponseJSON("ok")
126
 }
131
 }
127
 
132
 
128
-// GetOrdersByRecord 根据月记录获取订单信息
133
+// GetOrdersByRecord 根据月记录导出订单信息
129
 func (c *GoodsController) GetOrdersByRecord() {
134
 func (c *GoodsController) GetOrdersByRecord() {
130
 	recordid := c.GetString(":recordid")
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
 	orders, err := c.serv.GetOrdersByRecord(recordid)
145
 	orders, err := c.serv.GetOrdersByRecord(recordid)
132
 	if err != nil {
146
 	if err != nil {
133
 		c.ResponseError(err)
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
 	c.ResponseJSON(orders)
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 View File

21
 
21
 
22
 // GetRoleList 获取角色列表
22
 // GetRoleList 获取角色列表
23
 func (c *RoleController) GetRoleList() {
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
 	page, _ := c.GetInt("page")
26
 	page, _ := c.GetInt("page")
27
 	pageSize, _ := c.GetInt("pagesize")
27
 	pageSize, _ := c.GetInt("pagesize")
28
 	name := c.GetString("name")
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
 	if err != nil {
32
 	if err != nil {
33
 		c.ResponseError(err)
33
 		c.ResponseError(err)
34
 	}
34
 	}

+ 14
- 0
controllers/user/user.go View File

230
 	}
230
 	}
231
 	c.ResponseJSON(roles)
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 View File

22
 // GetCustomerCourseDetailListById 根据id获取我的课程详情
22
 // GetCustomerCourseDetailListById 根据id获取我的课程详情
23
 func (c *VerifyController) GetCustomerCourseDetailListById() {
23
 func (c *VerifyController) GetCustomerCourseDetailListById() {
24
 	customerCourseId := c.GetString(":customerCourseId")
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
 	page, _ := c.GetInt("page")
27
 	page, _ := c.GetInt("page")
31
 	pageSize, _ := c.GetInt("pagesize")
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
 	if err != nil {
30
 	if err != nil {
34
 		c.ResponseError(err)
31
 		c.ResponseError(err)
35
 	}
32
 	}
39
 
36
 
40
 // GetCustomerCourseDetailListBytel 根据手机号获取我的课程详情id
37
 // GetCustomerCourseDetailListBytel 根据手机号获取我的课程详情id
41
 func (c *VerifyController) GetCustomerCourseDetailListBytel() {
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
 	tel := c.GetString(":tel")
41
 	tel := c.GetString(":tel")
48
 	page, _ := c.GetInt("page")
42
 	page, _ := c.GetInt("page")
49
 	pageSize, _ := c.GetInt("pagesize")
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
 	if err != nil {
45
 	if err != nil {
52
 		c.ResponseError(err)
46
 		c.ResponseError(err)
53
 	}
47
 	}

+ 35
- 8
controllers/vipcard/vipcard.go View File

2
 
2
 
3
 import (
3
 import (
4
 	"spaceofcheng/services/controllers"
4
 	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/models"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service/vipcard"
7
 	"spaceofcheng/services/service/vipcard"
7
 	"time"
8
 	"time"
22
 
23
 
23
 // GetVipList 获取VIP卡列表
24
 // GetVipList 获取VIP卡列表
24
 func (c *VipcardController) GetVipList() {
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
 	page, _ := c.GetInt("page")
32
 	page, _ := c.GetInt("page")
28
 	pageSize, _ := c.GetInt("pagesize")
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
 	if err != nil {
40
 	if err != nil {
31
 		c.ResponseError(err)
41
 		c.ResponseError(err)
32
 	}
42
 	}
50
 // userCharge 用户激活vip卡
60
 // userCharge 用户激活vip卡
51
 func (c *VipcardController) UserCharge() {
61
 func (c *VipcardController) UserCharge() {
52
 	vipCode := c.GetString(":vipCardChildCode")
62
 	vipCode := c.GetString(":vipCardChildCode")
53
-	tel := c.GetString(":tel")
63
+	tel := c.GetString("tel")
54
 	var createUser = c.Context.Get("user").(model.SysUser)
64
 	var createUser = c.Context.Get("user").(model.SysUser)
55
 	vipChild, err := c.dao.GetVipChildByCode(vipCode)
65
 	vipChild, err := c.dao.GetVipChildByCode(vipCode)
56
 	if err != nil {
66
 	if err != nil {
61
 	if err != nil {
71
 	if err != nil {
62
 		c.ResponseError(err)
72
 		c.ResponseError(err)
63
 	}
73
 	}
74
+
75
+	salesid := c.GetString("salesid")
76
+	salesname := c.GetString("salesname")
77
+
64
 	vipChild.CustomerId = customer.CustomerId
78
 	vipChild.CustomerId = customer.CustomerId
65
 	vipChild.CustomerTel = tel
79
 	vipChild.CustomerTel = tel
66
 	vipChild.ActiveDate = time.Now()
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
 		c.ResponseError(err)
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
 		c.ResponseError(err)
90
 		c.ResponseError(err)
74
 	}
91
 	}
75
 	c.ResponseJSON("激活成功")
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
File diff suppressed because it is too large
View File


+ 7
- 3
models/cases/cases.go View File

132
 // GetCaseUserByType 获取案场人员
132
 // GetCaseUserByType 获取案场人员
133
 func (m *CaseDAO) GetCaseUserByType(csIDs []string, typeID string) ([]UserCase, error) {
133
 func (m *CaseDAO) GetCaseUserByType(csIDs []string, typeID string) ([]UserCase, error) {
134
 	query := `
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
 		FROM
140
 		FROM
137
 			td_user_type s
141
 			td_user_type s
138
 		JOIN sys_user_type m ON s.type_id = m.type_id
142
 		JOIN sys_user_type m ON s.type_id = m.type_id
139
 		JOIN sys_user n ON m.user_id = n.user_id
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
 		AND n.status = ?
145
 		AND n.status = ?
141
 		WHERE
146
 		WHERE
142
-			s.case_id IN ('` + strings.Join(csIDs, "','") + `')
147
+			c.case_id IN ('` + strings.Join(csIDs, "','") + `')
143
 		AND s.type_id = ?
148
 		AND s.type_id = ?
144
 	`
149
 	`
145
-
146
 	var users []UserCase
150
 	var users []UserCase
147
 	if err := m.db.SQL(query, models.STATUS_NORMAL, typeID).Find(&users); err != nil {
151
 	if err := m.db.SQL(query, models.STATUS_NORMAL, typeID).Find(&users); err != nil {
148
 		return nil, err
152
 		return nil, err

+ 7
- 7
models/cases/conf.go View File

8
 
8
 
9
 // GetConfByCase 获取配置信息
9
 // GetConfByCase 获取配置信息
10
 func (m *CaseDAO) GetConfByCase(caseid, conftype string) (*model.SysCaseConf, error) {
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
 	if err != nil {
13
 	if err != nil {
15
 		return nil, err
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
 // SaveCaseConf 保存案场配置信息
22
 // SaveCaseConf 保存案场配置信息
24
 func (m *CaseDAO) SaveCaseConf(conf model.SysCaseConf) (*model.SysCaseConf, error) {
23
 func (m *CaseDAO) SaveCaseConf(conf model.SysCaseConf) (*model.SysCaseConf, error) {
25
 	conf.ConfId = utils.GetGUID()
24
 	conf.ConfId = utils.GetGUID()
25
+	conf.Status = models.STATUS_READY
26
 	_, err := m.db.Insert(conf)
26
 	_, err := m.db.Insert(conf)
27
 	return &conf, err
27
 	return &conf, err
28
 }
28
 }
32
 	cols := []string{
32
 	cols := []string{
33
 		"status",
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
 	return err
36
 	return err
37
 }
37
 }

+ 62
- 1
models/cases/record.go View File

18
 	LeftNum             int
18
 	LeftNum             int
19
 }
19
 }
20
 
20
 
21
+const (
22
+	ISOVER   = 1
23
+	ISNOOVER = 0
24
+)
25
+
21
 // GetCaseRecord 获取案场月记录
26
 // GetCaseRecord 获取案场月记录
22
 func (m *CaseDAO) GetCaseRecord(caseids string, page, pageSize int) ([]CaseRecord, error) {
27
 func (m *CaseDAO) GetCaseRecord(caseids string, page, pageSize int) ([]CaseRecord, error) {
23
 	var records []CaseRecord
28
 	var records []CaseRecord
65
 	record.CreateDate = time.Now()
70
 	record.CreateDate = time.Now()
66
 	record.RecordId = utils.GetGUID()
71
 	record.RecordId = utils.GetGUID()
67
 	record.Status = models.STATUS_NORMAL
72
 	record.Status = models.STATUS_NORMAL
68
-	record.IsOver = 1
73
+	record.IsOver = ISOVER
69
 	_, err := m.db.Insert(record)
74
 	_, err := m.db.Insert(record)
70
 	return &record, err
75
 	return &record, err
71
 }
76
 }
84
 	}
89
 	}
85
 	return nil, nil
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 View File

86
 	USERTYPE_SALES = "sales"
86
 	USERTYPE_SALES = "sales"
87
 	// 主管
87
 	// 主管
88
 	USERTYPE_MANAGER = "manager"
88
 	USERTYPE_MANAGER = "manager"
89
+	// 客户
90
+	USERTYPE_CUSTOMER = "customer"
89
 )
91
 )
90
 
92
 
91
 // 课程获取方式
93
 // 课程获取方式
107
 	VERIFY_USED    = "used"
109
 	VERIFY_USED    = "used"
108
 	VERIFY_LATE    = "late"
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 View File

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 View File

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 View File

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 View File

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 View File

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 View File

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 View File

213
 func (m *CourseDAO) GetCourseInfo(courseid string) (*CourseDetail, error) {
213
 func (m *CourseDAO) GetCourseInfo(courseid string) (*CourseDetail, error) {
214
 	course := new(CourseDetail)
214
 	course := new(CourseDetail)
215
 	sql := `select * from ta_course where course_id='` + courseid + `'`
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
 	if err != nil {
217
 	if err != nil {
218
 		return nil, err
218
 		return nil, err
219
 	}
219
 	}
249
 }
249
 }
250
 
250
 
251
 // GetDetails 获取所有的排课记录
251
 // GetDetails 获取所有的排课记录
252
-func (m *CourseDAO) GetDetails(caseid, date string) ([]DetailInfo, error) {
252
+func (m *CourseDAO) GetDetails(caseid, date, courseid string) ([]DetailInfo, error) {
253
 	var details []DetailInfo
253
 	var details []DetailInfo
254
 
254
 
255
 	sql := `select a.*,b.course_name,b.status as course_status,c.case_name,c.case_address from ta_course_detail a 
255
 	sql := `select a.*,b.course_name,b.status as course_status,c.case_name,c.case_address from ta_course_detail a 
256
 	inner join ta_course b on a.course_id=b.course_id 
256
 	inner join ta_course b on a.course_id=b.course_id 
257
 	inner join sys_case c on a.case_id=c.case_id where a.status>` + strconv.Itoa(models.STATUS_DEL) + `
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
 	err := m.db.Sql(sql).Find(&details)
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
 	return details, err
267
 	return details, err
263
 }
268
 }
264
 
269
 
265
 // GetCourseSchedule 获取需要排课的记录
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
 	var courses []model.TaCourse
272
 	var courses []model.TaCourse
268
 	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
273
 	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
269
 	if name != "" {
274
 	if name != "" {
270
 		dao.And("course_name like '%" + name + "%'")
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
 	err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
285
 	err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
276
 	return courses, err
286
 	return courses, err
277
 }
287
 }
278
 
288
 
279
 // GetCourseScheduleCount 获取排课记录数
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
 	var courses []model.TaCourse
291
 	var courses []model.TaCourse
282
 	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
292
 	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
283
 	if name != "" {
293
 	if name != "" {
284
 		dao.And("course_name like '%" + name + "%'")
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
 	err := dao.Find(&courses)
303
 	err := dao.Find(&courses)
290
 	return len(courses), err
304
 	return len(courses), err
448
 
462
 
449
 	return nil
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 View File

11
 
11
 
12
 // SaveCourseOrder 保存订单
12
 // SaveCourseOrder 保存订单
13
 func (m *CourseDAO) SaveCourseOrder(order *model.TaCourseOrders) error {
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
 	// 当前订单号的随机方式 = 时间 + 个人ID
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
 	order.CreateDate = time.Now()
22
 	order.CreateDate = time.Now()
18
 	_, err := m.db.Insert(order)
23
 	_, err := m.db.Insert(order)
19
 	return err
24
 	return err

+ 3
- 0
models/customer/account.go View File

73
 
73
 
74
 		accAmount -= moenyCheng
74
 		accAmount -= moenyCheng
75
 		accPoints -= points
75
 		accPoints -= points
76
+	} else {
77
+		accAmount += moenyCheng
78
+		accPoints += points
76
 	}
79
 	}
77
 
80
 
78
 	// 账户不能为负
81
 	// 账户不能为负

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

122
 		return nil, nil
122
 		return nil, nil
123
 	}
123
 	}
124
 
124
 
125
-	if len(custs) > 0 {
125
+	if len(custs) > 1 {
126
 		return nil, errors.New("数据异常, 一个手机绑定了多个用户")
126
 		return nil, errors.New("数据异常, 一个手机绑定了多个用户")
127
 	}
127
 	}
128
 
128
 

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

93
 	}
93
 	}
94
 
94
 
95
 	for inx, goods := range goodsList {
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
 		specs, err := m.GetSpecWithPrice(goods.GoodsId)
102
 		specs, err := m.GetSpecWithPrice(goods.GoodsId)
97
 		if err != nil {
103
 		if err != nil {
98
 			return nil, err
104
 			return nil, err

+ 73
- 11
models/goods/orders.go View File

38
 		return err
38
 		return err
39
 	}
39
 	}
40
 
40
 
41
-	order.OrdersId = guid.NewGUIDString()
41
+	// order.OrdersId = guid.NewGUIDString()
42
 	order.OrgId = caseInfo.OrgId
42
 	order.OrgId = caseInfo.OrgId
43
 	order.CreateDate = time.Now().Local()
43
 	order.CreateDate = time.Now().Local()
44
 	order.Status = models.STATUS_NORMAL
44
 	order.Status = models.STATUS_NORMAL
46
 	order.CouponAmount = "0"
46
 	order.CouponAmount = "0"
47
 
47
 
48
 	// 当前订单号的随机方式 = 时间 + 个人ID
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
 	if _, err := m.db.Insert(order); err != nil {
51
 	if _, err := m.db.Insert(order); err != nil {
52
 		utils.LogError("保存订单主记录失败: " + err.Error())
52
 		utils.LogError("保存订单主记录失败: " + err.Error())
53
 
53
 
59
 // SaveOrdersDetail 保存订单明细
59
 // SaveOrdersDetail 保存订单明细
60
 func (m *GoodsDAO) SaveOrdersDetail(list []model.TaGoodsOrdersDetail, ordersID string) error {
60
 func (m *GoodsDAO) SaveOrdersDetail(list []model.TaGoodsOrdersDetail, ordersID string) error {
61
 	for inx := range list {
61
 	for inx := range list {
62
+		list[inx].DetailId = guid.NewGUIDString()
62
 		list[inx].OrdersId = ordersID
63
 		list[inx].OrdersId = ordersID
63
 	}
64
 	}
64
 
65
 
125
 func (m *GoodsDAO) GetOrdersByCaseID(caseID, userType string, makeStatus []string, orderDate []time.Time, limit []int) ([]OrdersWithGoods, int64, error) {
126
 func (m *GoodsDAO) GetOrdersByCaseID(caseID, userType string, makeStatus []string, orderDate []time.Time, limit []int) ([]OrdersWithGoods, int64, error) {
126
 	var orderList []OrdersWithGoods
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
 	if makeStatus != nil && len(makeStatus) > 0 {
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
 	if userType != "" {
137
 	if userType != "" {
137
-		query += ` and user_type = '` + userType + `'`
138
+		query += ` and a.user_type = '` + userType + `'`
138
 	}
139
 	}
139
 
140
 
140
 	// 订单起始时间
141
 	// 订单起始时间
141
 	if orderDate != nil && len(orderDate) > 0 {
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
 		if len(orderDate) > 1 {
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
 	var cnt int64
152
 	var cnt int64
152
 	if limit != nil && len(limit) > 1 {
153
 	if limit != nil && len(limit) > 1 {
185
 // GetOrdersByRecord 根据
186
 // GetOrdersByRecord 根据
186
 func (m *GoodsDAO) GetOrdersByRecord(recordid string) ([]OrdersWithGoods, error) {
187
 func (m *GoodsDAO) GetOrdersByRecord(recordid string) ([]OrdersWithGoods, error) {
187
 	var orderList []OrdersWithGoods
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
 	err := m.db.Sql(sql).Find(&orderList)
193
 	err := m.db.Sql(sql).Find(&orderList)
191
 	if err != nil {
194
 	if err != nil {
192
 		return nil, err
195
 		return nil, err
200
 	}
203
 	}
201
 	return orderList, nil
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 View File

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

+ 238
- 8
models/gymcard/gymcard.go View File

24
 		db:  ctx.DB,
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
 	where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')
57
 	where a.case_id in('` + strings.Replace(caseid, ",", "','", -1) + `')
31
 	and  a.status > ` + strconv.Itoa(models.STATUS_DEL)
58
 	and  a.status > ` + strconv.Itoa(models.STATUS_DEL)
32
 	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
59
 	sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
34
 	return gymcard, err
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
 	if err != nil {
99
 	if err != nil {
41
 		return nil, err
100
 		return nil, err
42
 	}
101
 	}
46
 	return nil, nil
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
 	gymcard.GymCardId = utils.GetGUID()
110
 	gymcard.GymCardId = utils.GetGUID()
51
 	gymcard.SentCount = 0
111
 	gymcard.SentCount = 0
52
 	gymcard.UsedCount = 0
112
 	gymcard.UsedCount = 0
53
 	gymcard.Status = models.STATUS_NORMAL
113
 	gymcard.Status = models.STATUS_NORMAL
54
 	gymcard.CreateDate = time.Now()
114
 	gymcard.CreateDate = time.Now()
55
 	_, err := m.db.Insert(gymcard)
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
 func (m *GymcardDAO) DeleteGymcard(gymcardId string) error {
145
 func (m *GymcardDAO) DeleteGymcard(gymcardId string) error {
60
 	var gymcard = model.TaGymCard{
146
 	var gymcard = model.TaGymCard{
61
 		GymCardId: gymcardId,
147
 		GymCardId: gymcardId,
68
 	return err
154
 	return err
69
 }
155
 }
70
 
156
 
157
+// DeleteCardImg 删除健身卡图片
71
 func (m *GymcardDAO) DeleteCardImg(gymcardId string) error {
158
 func (m *GymcardDAO) DeleteCardImg(gymcardId string) error {
72
 	var cardImg = model.TaCardImage{
159
 	var cardImg = model.TaCardImage{
73
 		GymCardId: gymcardId,
160
 		GymCardId: gymcardId,
80
 	return err
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 View File

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

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

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

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

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 View File

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 View File

13
 	EndDate         time.Time `xorm:"DATETIME"`
13
 	EndDate         time.Time `xorm:"DATETIME"`
14
 	Status          int       `xorm:"SMALLINT(6)"`
14
 	Status          int       `xorm:"SMALLINT(6)"`
15
 	ReceiveDate     time.Time `xorm:"DATETIME"`
15
 	ReceiveDate     time.Time `xorm:"DATETIME"`
16
-	VerifyDate      time.Time `xorm:"DATETIME"`
17
 	GymType         string    `xorm:"VARCHAR(64)"`
16
 	GymType         string    `xorm:"VARCHAR(64)"`
18
 	CaseId          string    `xorm:"VARCHAR(64)"`
17
 	CaseId          string    `xorm:"VARCHAR(64)"`
19
 	OrgId           string    `xorm:"VARCHAR(64)"`
18
 	OrgId           string    `xorm:"VARCHAR(64)"`

+ 15
- 20
models/model/ta_gym_card.go View File

5
 )
5
 )
6
 
6
 
7
 type TaGymCard struct {
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 View File

10
 	VipCardChildCode string    `xorm:"VARCHAR(255)"`
10
 	VipCardChildCode string    `xorm:"VARCHAR(255)"`
11
 	Status           int       `xorm:"SMALLINT(6)"`
11
 	Status           int       `xorm:"SMALLINT(6)"`
12
 	CustomerId       string    `xorm:"VARCHAR(64)"`
12
 	CustomerId       string    `xorm:"VARCHAR(64)"`
13
-	CustomerTel      string    `xorm:"DECIMAL(13)"`
13
+	CustomerTel      string    `xorm:"VARCHAR(50)"`
14
 	CreateDate       time.Time `xorm:"DATETIME"`
14
 	CreateDate       time.Time `xorm:"DATETIME"`
15
 	ActiveDate       time.Time `xorm:"DATETIME"`
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 View File

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

+ 4
- 10
models/system/role.go View File

26
 }
26
 }
27
 
27
 
28
 // GetRoleCount 获取角色总数
28
 // GetRoleCount 获取角色总数
29
-func (m *RoleDAO) GetRoleCount(caseids, name, caseid string) (int, error) {
29
+func (m *RoleDAO) GetRoleCount(name string) (int, error) {
30
 	var roles []model.SysRole
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
 	if name != "" {
32
 	if name != "" {
33
 		dao.And("role_name like '%" + name + "%'")
33
 		dao.And("role_name like '%" + name + "%'")
34
 	}
34
 	}
35
-	if caseid != "" {
36
-		dao.And("case_id =?", caseid)
37
-	}
38
 	err := dao.Find(&roles)
35
 	err := dao.Find(&roles)
39
 	return len(roles), err
36
 	return len(roles), err
40
 }
37
 }
41
 
38
 
42
 // GetRoleList 根据案场获取角色
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
 	var roles []model.SysRole
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
 	if name != "" {
43
 	if name != "" {
47
 		dao.And("role_name like '%" + name + "%'")
44
 		dao.And("role_name like '%" + name + "%'")
48
 	}
45
 	}
49
-	if caseid != "" {
50
-		dao.And("case_id =?", caseid)
51
-	}
52
 	err := dao.Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&roles)
46
 	err := dao.Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&roles)
53
 	return roles, err
47
 	return roles, err
54
 }
48
 }

+ 2
- 2
models/system/user.go View File

39
 	sql := `select user.*,c.user_type_names from sys_user user left join (
39
 	sql := `select user.*,c.user_type_names from sys_user user left join (
40
 		select a.user_id,GROUP_CONCAT(b.type_name) as user_type_names from sys_user_type a
40
 		select a.user_id,GROUP_CONCAT(b.type_name) as user_type_names from sys_user_type a
41
 		INNER join td_user_type b on a.type_id = b.type_id
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
 		(status> ` + strconv.Itoa(models.STATUS_DEL) + ` and user_name like '%` + username + `%' and user.user_id in 
43
 		(status> ` + strconv.Itoa(models.STATUS_DEL) + ` and user_name like '%` + username + `%' and user.user_id in 
44
 		(select user_id from sys_user_case where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
44
 		(select user_id from sys_user_case where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
45
 
45
 
58
 	sql := `select user.*,c.user_type_names from sys_user user left join (
58
 	sql := `select user.*,c.user_type_names from sys_user user left join (
59
 		select a.user_id,GROUP_CONCAT(b.type_name) as user_type_names from sys_user_type a
59
 		select a.user_id,GROUP_CONCAT(b.type_name) as user_type_names from sys_user_type a
60
 		INNER join td_user_type b on a.type_id = b.type_id
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
 		(status> ` + strconv.Itoa(models.STATUS_DEL) + ` and user_name like '%` + username + `%' and user.user_id in 
62
 		(status> ` + strconv.Itoa(models.STATUS_DEL) + ` and user_name like '%` + username + `%' and user.user_id in 
63
 		(select user_id from sys_user_case where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
63
 		(select user_id from sys_user_case where case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')))`
64
 
64
 

+ 9
- 13
models/verify/verify.go View File

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

+ 38
- 12
models/vipcard/vipcard.go View File

27
 }
27
 }
28
 
28
 
29
 type VipChild struct {
29
 type VipChild struct {
30
-	model.TaVipCardChild `xorm:"extendes"`
31
-	CaesName             string
30
+	model.TaVipCardChild `xorm:"extends"`
31
+	CaseName             string
32
 	CustomerName         string
32
 	CustomerName         string
33
 }
33
 }
34
 
34
 
35
 // GetVipCardList获取VIP卡列表
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
 	var vipcards []VipChild
37
 	var vipcards []VipChild
38
 	sql := `SELECT
38
 	sql := `SELECT
39
 	vcc.*,
39
 	vcc.*,
43
 	ta_vip_card_child vcc
43
 	ta_vip_card_child vcc
44
 	INNER JOIN ta_vip_card vc ON vcc.vip_card_id = vc.vip_card_id
44
 	INNER JOIN ta_vip_card vc ON vcc.vip_card_id = vc.vip_card_id
45
 	INNER JOIN sys_case sc ON vc.case_id = sc.case_id 
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
 WHERE
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
 	err := m.db.Sql(sql).Find(&vipcards)
63
 	err := m.db.Sql(sql).Find(&vipcards)
52
 	return vipcards, err
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
 	var vipcards []VipChild
68
 	var vipcards []VipChild
57
 	sql := `SELECT
69
 	sql := `SELECT
58
 	vcc.*,
70
 	vcc.*,
62
 	ta_vip_card_child vcc
74
 	ta_vip_card_child vcc
63
 	INNER JOIN ta_vip_card vc ON vcc.vip_card_id = vc.vip_card_id
75
 	INNER JOIN ta_vip_card vc ON vcc.vip_card_id = vc.vip_card_id
64
 	INNER JOIN sys_case sc ON vc.case_id = sc.case_id 
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
 WHERE
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
 	err := m.db.Sql(sql).Find(&vipcards)
92
 	err := m.db.Sql(sql).Find(&vipcards)
70
 	return len(vipcards), err
93
 	return len(vipcards), err
71
 
94
 
86
 func (m *VipcardDAO) AddVipChildCard(vipChild model.TaVipCardChild) (*model.TaVipCardChild, error) {
109
 func (m *VipcardDAO) AddVipChildCard(vipChild model.TaVipCardChild) (*model.TaVipCardChild, error) {
87
 	vipChild.CreateDate = time.Now()
110
 	vipChild.CreateDate = time.Now()
88
 	vipChild.VipCardChildId = utils.GetGUID()
111
 	vipChild.VipCardChildId = utils.GetGUID()
89
-	vipChild.Status = models.STATUS_NORMAL
112
+	vipChild.Status = models.STATUS_READY
90
 	_, err := m.db.Insert(vipChild)
113
 	_, err := m.db.Insert(vipChild)
91
 	return &vipChild, err
114
 	return &vipChild, err
92
 }
115
 }
124
 		"customer_id",
147
 		"customer_id",
125
 		"customer_tel",
148
 		"customer_tel",
126
 		"active_date",
149
 		"active_date",
150
+		"status",
151
+		"sales_id",
152
+		"sales_name",
127
 	}
153
 	}
128
 	_, err := m.db.Cols(cols...).Where("vip_card_child_id = ?", vipChild.VipCardChildId).Update(vipChild)
154
 	_, err := m.db.Cols(cols...).Where("vip_card_child_id = ?", vipChild.VipCardChildId).Update(vipChild)
129
 	return err
155
 	return err

+ 22
- 0
npm-debug.log View File

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 View File

44
 		beego.NSRouter("/user/:userid/password", &user.UserController{}, "put:UpdatePassword"),
44
 		beego.NSRouter("/user/:userid/password", &user.UserController{}, "put:UpdatePassword"),
45
 		beego.NSRouter("/user/password/reset", &user.UserController{}, "put:ResetPassword"),
45
 		beego.NSRouter("/user/password/reset", &user.UserController{}, "put:ResetPassword"),
46
 		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
46
 		beego.NSRouter("/signout", &user.UserController{}, "post:SignOut"),
47
+		beego.NSRouter("/user/tel/:tel", &user.UserController{}, "get:GetUserByTel"),
47
 
48
 
48
 		// 用户类型
49
 		// 用户类型
49
 		beego.NSRouter("/usertype", &user.UserController{}, "get:GetUserTypes"),
50
 		beego.NSRouter("/usertype", &user.UserController{}, "get:GetUserTypes"),
120
 		beego.NSRouter("/case/info", &cases.CaseController{}, "post:SaveCase"),
121
 		beego.NSRouter("/case/info", &cases.CaseController{}, "post:SaveCase"),
121
 		beego.NSRouter("/case/info", &cases.CaseController{}, "put:SaveCase"),
122
 		beego.NSRouter("/case/info", &cases.CaseController{}, "put:SaveCase"),
122
 		beego.NSRouter("/case/info/:id", &cases.CaseController{}, "delete:DelCase"),
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
 		// casekey 案场钥匙
128
 		// casekey 案场钥匙
125
 		beego.NSRouter("/case/key", &cases.CaseController{}, "get:GetKeyList"),
129
 		beego.NSRouter("/case/key", &cases.CaseController{}, "get:GetKeyList"),
154
 
158
 
155
 		// vipcard VIP卡
159
 		// vipcard VIP卡
156
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "get:GetVipList"),
160
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "get:GetVipList"),
161
+		beego.NSRouter("/vipcard/:code", &vipcard.VipcardController{}, "get:GetVipByCode"),
157
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "post:AddVipCard"),
162
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "post:AddVipCard"),
158
 		beego.NSRouter("/vipcard/:vipCardChildCode", &vipcard.VipcardController{}, "put:UserCharge"),
163
 		beego.NSRouter("/vipcard/:vipCardChildCode", &vipcard.VipcardController{}, "put:UserCharge"),
159
 
164
 
206
 		beego.NSRouter("/order/online/goods", &goods.GoodsController{}, "get:GetOnlineOrder"),
211
 		beego.NSRouter("/order/online/goods", &goods.GoodsController{}, "get:GetOnlineOrder"),
207
 		beego.NSRouter("/order/goods/record/:recordid", &goods.GoodsController{}, "get:GetOrdersByRecord"),
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
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
218
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
211
 
219
 
212
 		// 会员
220
 		// 会员
213
 		beego.NSRouter("/customer", &customer.CustomerController{}, "get:CustWXList"),
221
 		beego.NSRouter("/customer", &customer.CustomerController{}, "get:CustWXList"),
222
+		beego.NSRouter("/customer/tel/:tel", &customer.CustomerController{}, "get:CustByTel"),
214
 
223
 
215
 		// 系统相关
224
 		// 系统相关
216
 		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
225
 		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
226
 
235
 
227
 		// 签到
236
 		// 签到
228
 		beego.NSRouter("/case/signin", &cases.SigninController{}, "get:GetSigninWhere"),
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 View File

48
 		beego.NSRouter("/wxsignup", &customer.CustomerController{}, "post:SignUp"),
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 View File

18
 		// 下单
18
 		// 下单
19
 		beego.NSRouter("/order/goods", &goods.GoodsController{}, "post:PostOrder"),
19
 		beego.NSRouter("/order/goods", &goods.GoodsController{}, "post:PostOrder"),
20
 		beego.NSRouter("/order/course", &course.CourseController{}, "post:PostOrder"),
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 View File

27
 }
27
 }
28
 
28
 
29
 const (
29
 const (
30
-	CONFTYPE_COFFEE = "coffee"
30
+	CONFTYPE_GOODS = "goods"
31
 )
31
 )
32
 
32
 
33
 // GetCases 获取案场列表
33
 // GetCases 获取案场列表
100
 		// 新增案场配置信息
100
 		// 新增案场配置信息
101
 		var conf = model.SysCaseConf{
101
 		var conf = model.SysCaseConf{
102
 			CaseId:   newInfo.CaseId,
102
 			CaseId:   newInfo.CaseId,
103
-			ConfType: CONFTYPE_COFFEE,
103
+			ConfType: CONFTYPE_GOODS,
104
 		}
104
 		}
105
 		_, err = s.dao.SaveCaseConf(conf)
105
 		_, err = s.dao.SaveCaseConf(conf)
106
 	} else {
106
 	} else {
158
 	}
158
 	}
159
 	return conf, nil
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 View File

14
 func (s *CaseServ) GetKeysByCase(caseid, num string, page, pageSize int) (map[string]interface{}, error) {
14
 func (s *CaseServ) GetKeysByCase(caseid, num string, page, pageSize int) (map[string]interface{}, error) {
15
 	cases := s.ctx.Get("cases").([]model.SysUserCase)
15
 	cases := s.ctx.Get("cases").([]model.SysUserCase)
16
 	isdict := false
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
 	if pageSize == 0 {
29
 	if pageSize == 0 {

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

2
 
2
 
3
 import (
3
 import (
4
 	"errors"
4
 	"errors"
5
+	"spaceofcheng/services/models/cases"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/utils"
8
 	"spaceofcheng/services/utils"
51
 	}
52
 	}
52
 	return newinfo, nil
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 View File

235
 	if info.Status != course.STATUS_UNPUBLISH {
235
 	if info.Status != course.STATUS_UNPUBLISH {
236
 		return utils.LogError("当前课程状态异常!请刷新后重试!")
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
 	err = s.dao.CoursePublic(courseid)
247
 	err = s.dao.CoursePublic(courseid)
239
 	if err != nil {
248
 	if err != nil {
240
 		utils.LogError("课程发布失败: " + err.Error())
249
 		utils.LogError("课程发布失败: " + err.Error())
311
 }
320
 }
312
 
321
 
313
 // GetCourseSchedule 获取课程排期
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
 	if pageSize == 0 {
324
 	if pageSize == 0 {
316
 		pageSize = service.PAGENUM
325
 		pageSize = service.PAGENUM
317
 	}
326
 	}
321
 	if date == "" {
330
 	if date == "" {
322
 		return nil, utils.LogError("请先选择需要排课的日期!")
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
 	if err != nil {
335
 	if err != nil {
326
 		utils.LogError("获取课程排期失败: " + err.Error())
336
 		utils.LogError("获取课程排期失败: " + err.Error())
327
 		return nil, errors.New("获取课程排期失败")
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
 	if err != nil {
340
 	if err != nil {
331
 		utils.LogError("获取课程排期失败: " + err.Error())
341
 		utils.LogError("获取课程排期失败: " + err.Error())
332
 		return nil, errors.New("获取课程排期失败")
342
 		return nil, errors.New("获取课程排期失败")
341
 }
351
 }
342
 
352
 
343
 // GetDetails 获取所有排课
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
 		return nil, utils.LogError("请先选择案场!")
356
 		return nil, utils.LogError("请先选择案场!")
347
 	}
357
 	}
348
 	if date == "" {
358
 	if date == "" {
349
 		return nil, utils.LogError("请选择需要查看的月份!")
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
 	if err != nil {
362
 	if err != nil {
353
 		utils.LogError("获取排期信息失败: " + err.Error())
363
 		utils.LogError("获取排期信息失败: " + err.Error())
354
 		return nil, errors.New("获取排期信息失败")
364
 		return nil, errors.New("获取排期信息失败")
498
 	}
508
 	}
499
 	return list, err
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 View File

21
 	cust := s.ctx.Get("customer").(model.TaCustomer)
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
 	if cust.UserId != "" {
25
 	if cust.UserId != "" {
28
 		// 内部人员
26
 		// 内部人员
29
 		// 如果是内部人员购买或者兑换课程, 卡券或者城币就从内部人员自己的账户走
27
 		// 如果是内部人员购买或者兑换课程, 卡券或者城币就从内部人员自己的账户走
45
 	if err != nil {
43
 	if err != nil {
46
 		return err
44
 		return err
47
 	}
45
 	}
48
-	if course.CourseDetail == nil || len(course.CourseDetail) > 0 {
46
+	if course.CourseDetail == nil || len(course.CourseDetail) == 0 {
49
 		return errors.New("定单课程尚未排课, 不能下单")
47
 		return errors.New("定单课程尚未排课, 不能下单")
50
 	}
48
 	}
51
 
49
 
54
 		// TODO
52
 		// TODO
55
 	}
53
 	}
56
 
54
 
57
-	// 课程价格, 即为订单价格
58
-	couseOrder.Price = course.Price
55
+	couseOrder.OrdersId = guid.NewGUIDString()
56
+	couseOrder.Price = course.Price // 课程价格, 即为订单价格
59
 	couseOrder.ActualAmount = course.Price
57
 	couseOrder.ActualAmount = course.Price
60
 	couseOrder.CourseName = course.CourseName
58
 	couseOrder.CourseName = course.CourseName
61
 	couseOrder.CourseNum = course.CourseNum
59
 	couseOrder.CourseNum = course.CourseNum
62
 	couseOrder.OrgId = org.OrgId
60
 	couseOrder.OrgId = org.OrgId
61
+	couseOrder.Status = models.STATUS_NORMAL
62
+
63
+	// 默认是已支付
64
+	couseOrder.IsPay = models.BOOL_TRUE
65
+
63
 	if cust.Name != "" {
66
 	if cust.Name != "" {
64
 		couseOrder.CustomerName = cust.Name
67
 		couseOrder.CustomerName = cust.Name
65
 	} else {
68
 	} else {
71
 		return err
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
 	actualAmount, _ := strconv.ParseFloat(couseOrder.ActualAmount, 64)
78
 	actualAmount, _ := strconv.ParseFloat(couseOrder.ActualAmount, 64)
82
 
79
 
83
-	// 用户账户
80
+	// 用户账户  -- 内部人员也可以购买
84
 	if actualAmount > 0 {
81
 	if actualAmount > 0 {
85
 		couseOrder.PayType = models.CONSUME_COINCHG
82
 		couseOrder.PayType = models.CONSUME_COINCHG
86
 		account, err := s.custDAO.GetAccountByCust(cust.CustomerId)
83
 		account, err := s.custDAO.GetAccountByCust(cust.CustomerId)
93
 		if actualAmount > accMoney {
90
 		if actualAmount > accMoney {
94
 			return errors.New("账户余额不足")
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
 	return nil
107
 	return nil
226
 
235
 
227
 	// 默认城币购买
236
 	// 默认城币购买
228
 	courseObtaimType := models.COURSE_GETBY_COINCHG
237
 	courseObtaimType := models.COURSE_GETBY_COINCHG
229
-	srcID := ""
230
 	if coupons != nil && len(coupons) > 0 {
238
 	if coupons != nil && len(coupons) > 0 {
231
 		for _, c := range coupons {
239
 		for _, c := range coupons {
232
 			if c.CouponType == models.COURSE_COUPON_CARD {
240
 			if c.CouponType == models.COURSE_COUPON_CARD {
234
 			} else if c.CouponType == models.COURSE_COUPON_COUPON {
242
 			} else if c.CouponType == models.COURSE_COUPON_COUPON {
235
 				courseObtaimType = models.COURSE_GETBY_COUPON
243
 				courseObtaimType = models.COURSE_GETBY_COUPON
236
 			}
244
 			}
237
-
238
-			srcID = c.CouponId
239
 		}
245
 		}
240
 	}
246
 	}
241
 
247
 
252
 		JoinNum:          0,
258
 		JoinNum:          0,
253
 		CreateDate:       time.Now().Local(),
259
 		CreateDate:       time.Now().Local(),
254
 		CourseObtaimType: courseObtaimType,
260
 		CourseObtaimType: courseObtaimType,
255
-		SourceId:         srcID,
261
+		SourceId:         order.OrdersId,
256
 		IsDone:           models.BOOL_FALSE,
262
 		IsDone:           models.BOOL_FALSE,
257
 	}
263
 	}
258
 
264
 

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

98
 		}
98
 		}
99
 
99
 
100
 		wxInfo := wxInfoRaw.(map[string]interface{})
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
 		if err != nil {
102
 		if err != nil {
103
 			utils.LogError(err.Error())
103
 			utils.LogError(err.Error())
104
 			return nil, err
104
 			return nil, err
143
 		}
143
 		}
144
 
144
 
145
 		wxInfo := wxInfoRaw.(map[string]interface{})
145
 		wxInfo := wxInfoRaw.(map[string]interface{})
146
-		newCust, err := s.SaveNewCustomer(wxInfo, caseID, userID, "")
146
+		newCust, err := s.SaveNewCustomer(wxInfo, caseID, userID, phone, "")
147
 		if err != nil {
147
 		if err != nil {
148
 			utils.LogError(err.Error())
148
 			utils.LogError(err.Error())
149
 			return nil, err
149
 			return nil, err
175
 }
175
 }
176
 
176
 
177
 // SaveNewCustomer 新增客户
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
 	if caseID == "" && arID == "" && userID == "" {
179
 	if caseID == "" && arID == "" && userID == "" {
180
 		return nil, errors.New("新增信息失败, 无法确认人员类型")
180
 		return nil, errors.New("新增信息失败, 无法确认人员类型")
181
 	}
181
 	}
190
 		sexInt = 1 // 默认男性
190
 		sexInt = 1 // 默认男性
191
 	}
191
 	}
192
 
192
 
193
+	org := s.ctx.Get("org").(model.SysOrg)
194
+
193
 	cust := model.TaCustomer{
195
 	cust := model.TaCustomer{
194
 		CustomerName: nickyName,
196
 		CustomerName: nickyName,
195
 		Name:         nickyName,
197
 		Name:         nickyName,
196
 		Sex:          sexInt,
198
 		Sex:          sexInt,
197
 		Headimgurl:   headimgurl,
199
 		Headimgurl:   headimgurl,
200
+		Phone:        phone,
201
+		OrgId:        org.OrgId,
198
 	}
202
 	}
199
 
203
 
200
 	// 校验案场信息
204
 	// 校验案场信息
264
 
268
 
265
 	return &cust, nil
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 View File

47
 
47
 
48
 // GetGoodsListPageNavi 获取商品列表
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
 	if page < 1 {
51
 	if page < 1 {
52
 		page = 1
52
 		page = 1
53
 	}
53
 	}
57
 
57
 
58
 	offset := (page - 1) * pagesize
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
 	if err != nil {
61
 	if err != nil {
62
 		utils.LogError("获取商品列表失败: " + err.Error())
62
 		utils.LogError("获取商品列表失败: " + err.Error())
63
 		return nil, 0, errors.New("获取列表失败, 请重试")
63
 		return nil, 0, errors.New("获取列表失败, 请重试")

+ 209
- 56
service/goods/orders.go View File

4
 	"errors"
4
 	"errors"
5
 	"math"
5
 	"math"
6
 	"spaceofcheng/services/models"
6
 	"spaceofcheng/services/models"
7
+	casemodel "spaceofcheng/services/models/cases"
7
 	"spaceofcheng/services/models/goods"
8
 	"spaceofcheng/services/models/goods"
8
 	"spaceofcheng/services/models/model"
9
 	"spaceofcheng/services/models/model"
10
+	"spaceofcheng/services/service"
11
+	"spaceofcheng/services/service/cases"
9
 	"spaceofcheng/services/utils"
12
 	"spaceofcheng/services/utils"
10
 	"strconv"
13
 	"strconv"
11
 	"time"
14
 	"time"
15
+
16
+	"github.com/yl10/kit/guid"
12
 )
17
 )
13
 
18
 
14
 // Orders 下单
19
 // Orders 下单
16
 	info *model.TaGoodsOrders,
21
 	info *model.TaGoodsOrders,
17
 	details []model.TaGoodsOrdersDetail,
22
 	details []model.TaGoodsOrdersDetail,
18
 	coupons []model.TaGoodsOrdersCoupon) error {
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
 	if err := s.validOrdersInfo(info); err != nil {
32
 	if err := s.validOrdersInfo(info); err != nil {
22
 		return err
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
 		return err
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
 		return err
43
 		return err
38
 	}
44
 	}
39
 
45
 
40
-	// 内部人员, 可以直接购买
41
 	if info.PayType == models.CONSUME_INNER {
46
 	if info.PayType == models.CONSUME_INNER {
42
-
47
+		// 内部人员, 可以直接购买
43
 		// TODO
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
 	// 通知后端有新订单 - websocket
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
 	return nil
126
 	return nil
95
 }
127
 }
165
 		return errors.New("下单人状态不正确, 不能下单")
197
 		return errors.New("下单人状态不正确, 不能下单")
166
 	}
198
 	}
167
 
199
 
200
+	info.UserType = models.USERTYPE_CUSTOMER
201
+
168
 	// 如果是管理人员
202
 	// 如果是管理人员
169
 	if cust.UserId != "" {
203
 	if cust.UserId != "" {
170
 		// 内部人员
204
 		// 内部人员
223
 
257
 
224
 	goodsAmount := float64(0.0)
258
 	goodsAmount := float64(0.0)
225
 	for _, item := range details {
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
 			return errors.New("商品金额计算错误")
286
 			return errors.New("商品金额计算错误")
234
 		}
287
 		}
235
 
288
 
236
 		// TODO 校验库存
289
 		// TODO 校验库存
237
 		// 商品暂时无库存
290
 		// 商品暂时无库存
238
 
291
 
239
-		price, _ := strconv.ParseFloat(item.Price, 64)
240
 		goodsAmount += price * float64(item.Number)
292
 		goodsAmount += price * float64(item.Number)
241
 	}
293
 	}
242
 
294
 
247
 		return errors.New("商品金额计算错误")
299
 		return errors.New("商品金额计算错误")
248
 	}
300
 	}
249
 
301
 
302
+	// TODO
303
+	// 暂时实际支付为 0
304
+	info.ActualAmount = "0.0"
305
+
250
 	return nil
306
 	return nil
251
 }
307
 }
252
 
308
 
284
 
340
 
285
 // GetOnLineOrders 获取订单列表
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
 	makeStatus := []string{goods.MAKESTATUS_NOTSTARTED, goods.MAKESTATUS_DOING}
355
 	makeStatus := []string{goods.MAKESTATUS_NOTSTARTED, goods.MAKESTATUS_DOING}
310
 	}
373
 	}
311
 	return orders, nil
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 View File

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 View File

136
 	// }
136
 	// }
137
 
137
 
138
 	if cmscase.CmsCaseId == "" {
138
 	if cmscase.CmsCaseId == "" {
139
+		org := s.ctx.Get("org").(model.SysOrg)
140
+		cmscase.OrgId = org.OrgId
139
 		newInfo, err = s.dao.AddCmsCase(cmscase)
141
 		newInfo, err = s.dao.AddCmsCase(cmscase)
140
 	} else {
142
 	} else {
141
 		err = s.dao.UpdateCmsCase(cmscase)
143
 		err = s.dao.UpdateCmsCase(cmscase)

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

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

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

23
 }
23
 }
24
 
24
 
25
 // GetRoleList 获取Role列表
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
 	if pageSize == 0 {
27
 	if pageSize == 0 {
28
 		pageSize = service.PAGENUM
28
 		pageSize = service.PAGENUM
29
 	}
29
 	}
30
 	if page == 0 {
30
 	if page == 0 {
31
 		page = 1
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
 	if err != nil {
34
 	if err != nil {
35
 		utils.LogError("获取角色列表失败: " + err.Error())
35
 		utils.LogError("获取角色列表失败: " + err.Error())
36
 		return nil, errors.New("获取角色列表失败")
36
 		return nil, errors.New("获取角色列表失败")
37
 	}
37
 	}
38
-	total, err := s.dao.GetRoleCount(caseids, name, caseid)
38
+	total, err := s.dao.GetRoleCount(name)
39
 	if err != nil {
39
 	if err != nil {
40
 		utils.LogError("获取角色列表失败: " + err.Error())
40
 		utils.LogError("获取角色列表失败: " + err.Error())
41
 		return nil, errors.New("获取角色列表失败")
41
 		return nil, errors.New("获取角色列表失败")

+ 6
- 0
service/user.go View File

337
 
337
 
338
 	return user, nil
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 View File

28
 }
28
 }
29
 
29
 
30
 // GetCustomerCourseDetailById 根据ID获取当日可核销课程
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
 	if pageSize == 0 {
35
 	if pageSize == 0 {
36
 		pageSize = service.PAGENUM
36
 		pageSize = service.PAGENUM
37
 	}
37
 	}
38
 	if page == 0 {
38
 	if page == 0 {
39
 		page = 1
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
 	if err != nil {
42
 	if err != nil {
43
 		utils.LogError("获取列表失败: " + err.Error())
43
 		utils.LogError("获取列表失败: " + err.Error())
44
 		return nil, errors.New("获取列表失败")
44
 		return nil, errors.New("获取列表失败")
45
 	}
45
 	}
46
 	customerId := customerDetail[0].CustomerId
46
 	customerId := customerDetail[0].CustomerId
47
-	total, err := s.dao.GetCustomerCourseListCount(id, caseid)
47
+	total, err := s.dao.GetCustomerCourseListCount(id, caseids)
48
 	if err != nil {
48
 	if err != nil {
49
 		utils.LogError("获取列表失败: " + err.Error())
49
 		utils.LogError("获取列表失败: " + err.Error())
50
 		return nil, errors.New("获取列表失败")
50
 		return nil, errors.New("获取列表失败")
65
 }
65
 }
66
 
66
 
67
 // GetCustomerCourseDetailByTel根据电话号码获取当日可核销课程
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
 	if pageSize == 0 {
69
 	if pageSize == 0 {
73
 		pageSize = service.PAGENUM
70
 		pageSize = service.PAGENUM
74
 	}
71
 	}
75
 	if page == 0 {
72
 	if page == 0 {
76
 		page = 1
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
 	if err != nil {
76
 	if err != nil {
80
 		utils.LogError("获取列表失败: " + err.Error())
77
 		utils.LogError("获取列表失败: " + err.Error())
81
 		return nil, errors.New("获取列表失败")
78
 		return nil, errors.New("获取列表失败")
82
 	}
79
 	}
83
 	customerId := customerDetail[0].CustomerId
80
 	customerId := customerDetail[0].CustomerId
84
-	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseid)
81
+	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseids)
85
 	if err != nil {
82
 	if err != nil {
86
 		utils.LogError("获取列表失败: " + err.Error())
83
 		utils.LogError("获取列表失败: " + err.Error())
87
 		return nil, errors.New("获取列表失败")
84
 		return nil, errors.New("获取列表失败")

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

27
 }
27
 }
28
 
28
 
29
 // GetVipChild 获取VIP卡列表
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
 	if pageSize == 0 {
31
 	if pageSize == 0 {
32
 		pageSize = service.PAGENUM
32
 		pageSize = service.PAGENUM
33
 	}
33
 	}
34
 	if page == 0 {
34
 	if page == 0 {
35
 		page = 1
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
 	if err != nil {
38
 	if err != nil {
39
 		utils.LogError("获取VIP卡信息失败: " + err.Error())
39
 		utils.LogError("获取VIP卡信息失败: " + err.Error())
40
 		return nil, errors.New("获取VIP卡信息失败")
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
 	if err != nil {
43
 	if err != nil {
44
 		utils.LogError("获取VIP卡信息失败: " + err.Error())
44
 		utils.LogError("获取VIP卡信息失败: " + err.Error())
45
 		return nil, errors.New("获取VIP卡信息失败")
45
 		return nil, errors.New("获取VIP卡信息失败")
84
 		var vipChild model.TaVipCardChild
84
 		var vipChild model.TaVipCardChild
85
 		vipChild.VipCardId = vipcard.VipCardId
85
 		vipChild.VipCardId = vipcard.VipCardId
86
 		vipChild.VipCardChildCode = s.dao.GenerateChildCode()
86
 		vipChild.VipCardChildCode = s.dao.GenerateChildCode()
87
+		vipChild.Amount = vipCard.CardAmount
87
 		_, err := s.dao.AddVipChildCard(vipChild)
88
 		_, err := s.dao.AddVipChildCard(vipChild)
88
 		if err != nil {
89
 		if err != nil {
89
 			utils.LogError("创建VIP卡失败: " + err.Error())
90
 			utils.LogError("创建VIP卡失败: " + err.Error())

+ 15
- 2
utils/message.go View File

8
 type ClientID websocket.ClientID
8
 type ClientID websocket.ClientID
9
 
9
 
10
 // Message 发送消息
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
 const (
18
 const (
19
 
23
 
20
 // SendWs 发送 websocket
24
 // SendWs 发送 websocket
21
 func SendWs(message Message) {
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
 	websocket.Send(msg)
32
 	websocket.Send(msg)
24
 }
33
 }
25
 
34
 
33
 	default:
42
 	default:
34
 	}
43
 	}
35
 }
44
 }
45
+
46
+func init() {
47
+	go websocket.Run()
48
+}

+ 5
- 0
utils/wechat.go View File

24
 	return wxClients[org]
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
 func init() {
32
 func init() {
28
 	wx.SetLogInst(defaultLogger)
33
 	wx.SetLogInst(defaultLogger)
29
 }
34
 }