Sfoglia il codice sorgente

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

zjxpcyc 6 anni fa
parent
commit
57293b08b0

+ 1
- 1
conf/log.conf Vedi File

1
 [common]
1
 [common]
2
-filename="E:\\GoProjects\\src\\spaceofcheng\\services\\log\\common.log"
2
+filename="E:\\GoProject\\src\\spaceofcheng\\services\\log\\common.log"
3
 # log level "emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"
3
 # log level "emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"
4
 level="debug"
4
 level="debug"

+ 2
- 2
controllers/course/order.go Vedi File

15
 	}
15
 	}
16
 
16
 
17
 	// 订单优惠券
17
 	// 订单优惠券
18
-	coupon := c.GetString("coupon")
18
+	coupons := c.GetString("coupons")
19
 
19
 
20
 	//
20
 	//
21
 	var orderInfo model.TaCourseOrders
21
 	var orderInfo model.TaCourseOrders
26
 		c.ResponseError(errors.New("下单数据格式不正确"))
26
 		c.ResponseError(errors.New("下单数据格式不正确"))
27
 	}
27
 	}
28
 
28
 
29
-	if err := json.Unmarshal([]byte(coupon), &orderCoupon); err != nil {
29
+	if err := json.Unmarshal([]byte(coupons), &orderCoupon); err != nil {
30
 		utils.LogError("下单优惠转换JSON失败: " + err.Error())
30
 		utils.LogError("下单优惠转换JSON失败: " + err.Error())
31
 		c.ResponseError(errors.New("优惠数据格式不正确"))
31
 		c.ResponseError(errors.New("优惠数据格式不正确"))
32
 	}
32
 	}

+ 2
- 2
controllers/goods/goods.go Vedi File

80
 	gds := model.TaGoods{}
80
 	gds := model.TaGoods{}
81
 	if err := c.ParseForm(&gds); err != nil {
81
 	if err := c.ParseForm(&gds); err != nil {
82
 		utils.LogError("接收商品参数失败: " + err.Error())
82
 		utils.LogError("接收商品参数失败: " + err.Error())
83
-		c.ResponseError(errors.New("接收商品参数失败"))
83
+		c.ResponseError(errors.New("接收商品参数失败1"))
84
 	}
84
 	}
85
 
85
 
86
 	// 图片
86
 	// 图片
91
 	specsJSON := c.GetString("specs")
91
 	specsJSON := c.GetString("specs")
92
 	if err := json.Unmarshal([]byte(specsJSON), &specs); err != nil {
92
 	if err := json.Unmarshal([]byte(specsJSON), &specs); err != nil {
93
 		utils.LogError("接收商品参数失败: " + err.Error())
93
 		utils.LogError("接收商品参数失败: " + err.Error())
94
-		c.ResponseError(errors.New("接收商品参数失败"))
94
+		c.ResponseError(errors.New("接收商品参数失败2"))
95
 	}
95
 	}
96
 
96
 
97
 	goodsID := c.GetString(":id")
97
 	goodsID := c.GetString(":id")

+ 124
- 0
controllers/marketing/marketing.go Vedi File

1
+package marketing
2
+
3
+import(
4
+	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/service/marketing"
6
+	"spaceofcheng/services/models/model"
7
+)
8
+
9
+
10
+// CourseController 商品
11
+type MarketingController struct {
12
+	serv *marketing.MarketingServ
13
+	controllers.BaseController
14
+}
15
+
16
+// Constructor 初始化 Controller
17
+// @Title Constructor
18
+// @Description 初始化 Controller, 系统自动调用
19
+func (c *MarketingController) Constructor() {
20
+	c.serv = marketing.NewMarketingServ(c.Context)
21
+}
22
+
23
+// 获取 营销活动列表
24
+func (c *MarketingController) GetMarketingList(){
25
+	page, _ := c.GetInt("page")
26
+	pageSize, _ := c.GetInt("pagesize")
27
+
28
+	marketings, err := c.serv.GetMarketingList(page,pageSize)
29
+	if err != nil {
30
+		c.ResponseError(err)
31
+	}
32
+	c.ResponseJSON(marketings)
33
+
34
+}
35
+
36
+// SaveMarketing 保存营销活动
37
+func (c *MarketingController) SaveMarketing() {
38
+	marketing := model.SysActivity{}
39
+
40
+	// 获取值
41
+	activityName := c.GetString("activityName")
42
+	activityType := c.GetString("activityType")
43
+	resourceDesc := c.GetString("resourceDesc") // 活动描述
44
+
45
+	// 赋值
46
+	marketing.ActivityName = activityName
47
+	marketing.ActivityType = activityType
48
+
49
+	newInfo,_, err := c.serv.SaveMarketing(marketing,resourceDesc)
50
+	if err != nil {
51
+		c.ResponseError(err)
52
+	}
53
+
54
+	c.ResponseJSON(newInfo)
55
+}
56
+
57
+
58
+// GetMarketingById 根据activityId查询
59
+func (c *MarketingController) GetMarketingById(){
60
+	 activityId := c.GetString("activityId")
61
+
62
+	 info,err :=	c.serv.GetMarketingById(activityId)
63
+	 if err != nil {
64
+		c.ResponseError(err)
65
+	}
66
+
67
+	c.ResponseJSON(info)
68
+}
69
+
70
+// UpdateMarketing 修改数据
71
+func (c *MarketingController) UpdateMarketing(){
72
+	activity := model.SysActivity{}
73
+
74
+	// 获取值
75
+	activityName := c.GetString("activityName")
76
+	activityType := c.GetString("activityType")
77
+	
78
+	// 赋值
79
+	activity.ActivityName = activityName
80
+	activity.ActivityType = activityType
81
+	
82
+	err := c.serv.UpdateMarketing(activity)
83
+	if err != nil {
84
+		c.ResponseError(err)
85
+	}
86
+	c.ResponseJSON("操作成功!")
87
+}
88
+
89
+// DelMarketing 删除
90
+func (c *MarketingController) DelMarketing(){
91
+	activityId := c.GetString("activityId")
92
+	err := c.serv.DelMarketing(activityId)
93
+	if err != nil {
94
+		c.ResponseError(err)
95
+	}
96
+	c.ResponseJSON("操作成功!")
97
+}
98
+
99
+// DelMarketing 正常
100
+func (c *MarketingController) DelMarketingNormal(){
101
+	activityId := c.GetString("activityId")
102
+	err := c.serv.DelMarketingNormal(activityId)
103
+	if err != nil {
104
+		c.ResponseError(err)
105
+	}
106
+	c.ResponseJSON("操作成功!")
107
+}
108
+
109
+// DelMarketing 停用
110
+func (c *MarketingController) DelMarketingDisable(){
111
+	activityId := c.GetString("activityId")
112
+	err := c.serv.DelMarketingDisable(activityId)
113
+	if err != nil {
114
+		c.ResponseError(err)
115
+	}
116
+	c.ResponseJSON("操作成功!")
117
+}
118
+
119
+
120
+
121
+
122
+
123
+
124
+

+ 2
- 2
controllers/user/user.go Vedi File

79
 func (c *UserController) GetUserTypes() {
79
 func (c *UserController) GetUserTypes() {
80
 	// cases := c.Context.Get("cases").([]model.SysUserCase)
80
 	// cases := c.Context.Get("cases").([]model.SysUserCase)
81
 	// caseIDs := c.GetCaseIDs(cases)
81
 	// caseIDs := c.GetCaseIDs(cases)
82
-	orgid := c.GetString(":org")
83
-	usertypes, err := c.dao.GetUserTypes(orgid)
82
+	org := c.Context.Get("org").(model.SysOrg)
83
+	usertypes, err := c.dao.GetUserTypes(org.OrgId)
84
 	if err != nil {
84
 	if err != nil {
85
 		c.ResponseError(err)
85
 		c.ResponseError(err)
86
 	}
86
 	}

+ 95
- 0
controllers/verify/verify.go Vedi File

1
+package verify
2
+
3
+import (
4
+	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/service/verify"
7
+)
8
+
9
+// CaseController 信息
10
+type VerifyController struct {
11
+	dao *verify.VerifyServ
12
+	controllers.BaseController
13
+}
14
+
15
+// Constructor 初始化 Controller
16
+// @Title Constructor
17
+// @Description 初始化 Controller, 系统自动调用
18
+func (c *VerifyController) Constructor() {
19
+	c.dao = verify.NewVerifyServ(c.Context)
20
+}
21
+
22
+// GetCustomerCourseDetailListById 根据id获取我的课程详情
23
+func (c *VerifyController) GetCustomerCourseDetailListById() {
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
+	}
30
+	page, _ := c.GetInt("page")
31
+	pageSize, _ := c.GetInt("pagesize")
32
+	list, err := c.dao.GetCustomerCourseDetailById(customerCourseId, caseid, page, pageSize)
33
+	if err != nil {
34
+		c.ResponseError(err)
35
+	}
36
+	c.ResponseJSON(list)
37
+
38
+}
39
+
40
+// GetCustomerCourseDetailListBytel 根据手机号获取我的课程详情id
41
+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
+	}
47
+	tel := c.GetString(":tel")
48
+	page, _ := c.GetInt("page")
49
+	pageSize, _ := c.GetInt("pagesize")
50
+	list, err := c.dao.GetCustomerCourseDetailByTel(tel, caseid, page, pageSize)
51
+	if err != nil {
52
+		c.ResponseError(err)
53
+	}
54
+	c.ResponseJSON(list)
55
+
56
+}
57
+
58
+// VerifyCourse核销我的课程详情
59
+func (c *VerifyController) VerifyCourse() {
60
+	sysUser := c.Context.Get("user").(model.SysUser)
61
+	userId := sysUser.UserId
62
+	customerDetailId := c.GetString(":customerDetailId")
63
+	customerCourseDetail, err := c.dao.GetCustomerCourseDetailByDetailId(customerDetailId)
64
+	if err != nil {
65
+		c.ResponseError(err)
66
+	}
67
+
68
+	customerCourse, err := c.dao.GetCustomerCourseByDetailId(customerCourseDetail.CustomerDetailId)
69
+	if err != nil {
70
+		c.ResponseError(err)
71
+	}
72
+	if customerCourse.CourseObtaimType == "card" {
73
+		customerCard, err := c.dao.GetCustomerCardByDetailId(customerCourseDetail.CustomerDetailId)
74
+		if err != nil {
75
+			c.ResponseError(err)
76
+		}
77
+		if customerCard.VerifyStatus == "usable" {
78
+			customerCard.VerifyStatus = "used"
79
+			err := c.dao.UpdateCustomerCard(customerCard)
80
+			if err != nil {
81
+				c.ResponseError(err)
82
+			}
83
+		}
84
+	}
85
+	err = c.dao.UpdateCustomerCourse(customerCourse)
86
+	if err != nil {
87
+		c.ResponseError(err)
88
+	}
89
+	err = c.dao.UpdateCustomerCourseDetail(customerCourseDetail, userId)
90
+	if err != nil {
91
+		c.ResponseError(err)
92
+	}
93
+	c.ResponseJSON("核销成功")
94
+
95
+}

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

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

+ 0
- 27
log/common.2018-08-23.log Vedi File

1
-2018/08/20 15:27:18 [E] 获取客户列表失败: sql: converting Exec argument $1 type: unsupported type []interface {}, a slice of interface
2
-2018/08/20 15:36:51 [E] 获取客户列表失败: sql: converting Exec argument $1 type: unsupported type []interface {}, a slice of interface
3
-2018/08/20 15:37:19 [E] 获取客户列表失败: sql: converting Exec argument $1 type: unsupported type []interface {}, a slice of interface
4
-2018/08/20 15:44:30 [E] 获取客户列表失败: Error 1248: Every derived table must have its own alias
5
-2018/08/20 15:46:35 [E] 获取客户列表失败: Error 1248: Every derived table must have its own alias
6
-2018/08/20 15:49:09 [E] 获取客户列表失败: Error 1060: Duplicate column name 'user_id'
7
-2018/08/20 15:57:45 [E] 获取客户列表失败: sql: statement expects 2 inputs; got 1
8
-2018/08/20 19:25:08 [E] 短信发送失败: 400 
9
-2018/08/20 19:27:58 [E] 短信发送失败: 400 
10
-2018/08/20 19:28:52 [E] 短信发送失败: 400 
11
-2018/08/21 13:38:17 [E] 用户没有设置默认案场
12
-2018/08/21 13:38:17 [E] 您没有该案场的权限!
13
-2018/08/21 13:39:04 [E] 用户没有设置默认案场
14
-2018/08/21 13:39:04 [E] 您没有该案场的权限!
15
-2018/08/21 13:39:09 [E] 用户没有设置默认案场
16
-2018/08/21 13:39:09 [E] 您没有该案场的权限!
17
-2018/08/21 13:39:24 [E] 用户没有设置默认案场
18
-2018/08/21 13:39:24 [E] 您没有该案场的权限!
19
-2018/08/21 13:41:04 [E] 用户没有设置默认案场
20
-2018/08/21 13:41:04 [E] 您没有该案场的权限!
21
-2018/08/21 14:26:22 [E] 用户登录失败: dial tcp 192.168.0.62:3306: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
22
-2018/08/21 14:27:06 [E] 用户登录失败: dial tcp 192.168.0.62:3306: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
23
-2018/08/23 19:57:03 [E] 获取人员映射账户失败: Params type error
24
-2018/08/23 19:58:00 [E] 获取人员映射账户失败: Params type error
25
-2018/08/23 19:58:39 [E] 获取人员映射账户失败: Params type error
26
-2018/08/23 20:03:16 [E] 获取人员映射账户失败: Params type error
27
-2018/08/23 20:05:14 [E] 获取人员映射账户失败: Params type error

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

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

+ 0
- 0
log/common.2018-08-25.log Vedi File


+ 118
- 0
log/common.2018-09-05.log Vedi File

1
+2018/08/26 09:37:50 [E] 查询微信配置失败: Error 1054: Unknown column 'rmark' in 'field list'
2
+2018/08/26 09:38:37 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3
+2018/08/26 09:38:37 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_-Lg_RS71-apY79btcVmfgOoi47yZER01vtlROS4cXfqgIRfbPkzUPTwvZz6w0DlHMJIk7h-xISGUwZ0Tosff1sEpcfhNiBLw6zvr-l9zpi-tp2N6hJY7QM4uExMIZTSOixTUS9uHKOiK7trvUZWdAIAHMJ","expires_in":7200})
4
+2018/08/26 09:38:37 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_-Lg_RS71-apY79btcVmfgOoi47yZER01vtlROS4cXfqgIRfbPkzUPTwvZz6w0DlHMJIk7h-xISGUwZ0Tosff1sEpcfhNiBLw6zvr-l9zpi-tp2N6hJY7QM4uExMIZTSOixTUS9uHKOiK7trvUZWdAIAHMJ])
5
+2018/08/26 09:44:13 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
6
+2018/08/26 09:44:13 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_2REPD5yYQxrGgfgH94odWyxn0xLwS_-9HvVko999_vYdApibljI1UuhMYohVkLz84IMkGEyf9BpSFWbR9oH3qJffwFnjb-f3XVDXjuuGRPpFU5q3acQ1-8Q5PzEXWZdAJAGFI","expires_in":7200})
7
+2018/08/26 09:44:13 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_2REPD5yYQxrGgfgH94odWyxn0xLwS_-9HvVko999_vYdApibljI1UuhMYohVkLz84IMkGEyf9BpSFWbR9oH3qJffwFnjb-f3XVDXjuuGRPpFU5q3acQ1-8Q5PzEXWZdAJAGFI expires_in:7200])
8
+2018/08/26 09:45:32 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
9
+2018/08/26 09:45:32 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_xTyy-6CTPuz4gw7CzuHQhZ73GnK1IL_KpzT9EgUTUX4qSgdqH0ZEgNMxhavJY-kMsaHN15owtkQe0dlf9kfE7Cl0PvCmC9OPc5PiJhflZ2NAAiZp84sKHp81FDsTSBeAHAYXG","expires_in":7200})
10
+2018/08/26 09:45:32 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_xTyy-6CTPuz4gw7CzuHQhZ73GnK1IL_KpzT9EgUTUX4qSgdqH0ZEgNMxhavJY-kMsaHN15owtkQe0dlf9kfE7Cl0PvCmC9OPc5PiJhflZ2NAAiZp84sKHp81FDsTSBeAHAYXG expires_in:7200])
11
+2018/08/26 09:49:08 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
12
+2018/08/26 09:49:09 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_K6k5JNOBeMpIe_gitC04i233yiyA6yh1smV1feyiUQTk6010b98PU3X67e8KCvaCjTR0HmjrttsTJLrtzg54TwKnGLE-UgV7NDMMhp4u2r2V56ghJDZ5-7xlC9SxvTkIu0nmQAfAif3ktCULIQZeADAVDM","expires_in":7200})
13
+2018/08/26 09:49:09 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_K6k5JNOBeMpIe_gitC04i233yiyA6yh1smV1feyiUQTk6010b98PU3X67e8KCvaCjTR0HmjrttsTJLrtzg54TwKnGLE-UgV7NDMMhp4u2r2V56ghJDZ5-7xlC9SxvTkIu0nmQAfAif3ktCULIQZeADAVDM expires_in:7200])
14
+2018/08/26 09:50:11 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
15
+2018/08/26 09:50:11 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_Dm3oaLYTAMFOsaxzn6Sm-liedNbNRUDD0lZuCSUHfVFWry9R7oXyyLDXGOsDR6XO_cAReWZ0KBgituizW20oxfHHq8ezj0iiUveePrL03Cml6x7R0WkzMOiNGcXmyzo3Igh3r8QhGK2WfuwOMVQfAAAHQL","expires_in":7200})
16
+2018/08/26 09:50:11 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_Dm3oaLYTAMFOsaxzn6Sm-liedNbNRUDD0lZuCSUHfVFWry9R7oXyyLDXGOsDR6XO_cAReWZ0KBgituizW20oxfHHq8ezj0iiUveePrL03Cml6x7R0WkzMOiNGcXmyzo3Igh3r8QhGK2WfuwOMVQfAAAHQL expires_in:7200])
17
+2018/08/26 09:51:59 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
18
+2018/08/26 09:51:59 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_B0bGSFxdnZK5KT9wzuHQhZ73GnK1IL_KpzT9EvI_ZHhdHbiwSy9FiEfhct77uI_1Brx6kBu3SklukBzw2BnWBk-Q52pYYIb9NpZELzJVR8tzWWbPWD9Tc36StP7FmdpzG1y9UrT4A3idUIDfVRGgAEAZVK","expires_in":7200})
19
+2018/08/26 09:51:59 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_B0bGSFxdnZK5KT9wzuHQhZ73GnK1IL_KpzT9EvI_ZHhdHbiwSy9FiEfhct77uI_1Brx6kBu3SklukBzw2BnWBk-Q52pYYIb9NpZELzJVR8tzWWbPWD9Tc36StP7FmdpzG1y9UrT4A3idUIDfVRGgAEAZVK expires_in:7200])
20
+2018/08/26 09:52:26 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
21
+2018/08/26 09:52:26 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_JaO07aaK8Vbt8mVhb88JC_57VjUKFd0UxQUL0TVMKNF0DUrcHPt4tjZjaeF3K1UI0NPOyNqYytzPg5YfIeSfDowMBreC86pigfPIXZrwlqspCOddE5QtTmD8uGQZ7_VhX0aHegYT8Iy-dSupBNQcAFAPBE","expires_in":7200})
22
+2018/08/26 09:52:26 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_JaO07aaK8Vbt8mVhb88JC_57VjUKFd0UxQUL0TVMKNF0DUrcHPt4tjZjaeF3K1UI0NPOyNqYytzPg5YfIeSfDowMBreC86pigfPIXZrwlqspCOddE5QtTmD8uGQZ7_VhX0aHegYT8Iy-dSupBNQcAFAPBE expires_in:7200])
23
+2018/08/26 09:52:52 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
24
+2018/08/26 09:52:52 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_W_Xh9756zIW8jFK4bRxCsoQiUV0j-zAfNmXR38hdAk10_MDRh15cOJkDRkROLC6iU7zSqQxcPQQz-NsBHfFaK9Ol1HliVvIg8efKZGrfBwXva0asAn0OnU869MNfv5-EtNzJl_talvZ7N2twBOBfAEAVIV","expires_in":7200})
25
+2018/08/26 09:52:52 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_W_Xh9756zIW8jFK4bRxCsoQiUV0j-zAfNmXR38hdAk10_MDRh15cOJkDRkROLC6iU7zSqQxcPQQz-NsBHfFaK9Ol1HliVvIg8efKZGrfBwXva0asAn0OnU869MNfv5-EtNzJl_talvZ7N2twBOBfAEAVIV])
26
+2018/08/26 09:53:06 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
27
+2018/08/26 09:53:06 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_x8W4tYHqT6-xw2KZbRxCsoQiUV0j-zAfNmXR38hdAk10_MDRh15cOJkDRkTiPc6vNMq046pPpyHg_ksa0ELjakenatHGtKfyBPLppB1hTwdcpghc5Z8QmY5upPqR37Epw0HfFweotkLnljJiOEOfAEAXNX","expires_in":7200})
28
+2018/08/26 09:53:06 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_x8W4tYHqT6-xw2KZbRxCsoQiUV0j-zAfNmXR38hdAk10_MDRh15cOJkDRkTiPc6vNMq046pPpyHg_ksa0ELjakenatHGtKfyBPLppB1hTwdcpghc5Z8QmY5upPqR37Epw0HfFweotkLnljJiOEOfAEAXNX expires_in:7200])
29
+2018/08/26 09:54:43 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
30
+2018/08/26 09:54:44 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_PK1MfsKJTJBSyulyKvLRHiorDM-9wwzYsyPyvpnEpTQgtpnYsMM6AwA9DcpV5vq0REYd69l3WhYQ1_0AOZcTW7GKQaAxLmxj47IBXdxLScTYi4l-8ZtP6ZmS96kFROeAGAJVS","expires_in":7200})
31
+2018/08/26 09:54:44 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_PK1MfsKJTJBSyulyKvLRHiorDM-9wwzYsyPyvpnEpTQgtpnYsMM6AwA9DcpV5vq0REYd69l3WhYQ1_0AOZcTW7GKQaAxLmxj47IBXdxLScTYi4l-8ZtP6ZmS96kFROeAGAJVS expires_in:7200])
32
+2018/08/26 09:56:04 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
33
+2018/08/26 09:56:04 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_igGxdtw6AzmfTOu9cIlzH2dMOQRu-NPQ0Pm92NS4Hm9llCRTrFHsaxQb0etiAjOuQBL7_ep7csgPjvyNWEEZGOZ28akNtaDQD1ApoYYeAihI58iUra270dbdmO8MNEfAGAWXO","expires_in":7200})
34
+2018/08/26 09:56:04 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_igGxdtw6AzmfTOu9cIlzH2dMOQRu-NPQ0Pm92NS4Hm9llCRTrFHsaxQb0etiAjOuQBL7_ep7csgPjvyNWEEZGOZ28akNtaDQD1ApoYYeAihI58iUra270dbdmO8MNEfAGAWXO expires_in:7200])
35
+2018/08/26 10:01:23 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
36
+2018/08/26 10:01:23 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_ho3BftxaKmrGQie6QrTSheSWuAj8XAN8wpjERCj2FB00PWVCksSlu-X-3yVreKXyMZiE9TKDHdpFRJ4TwWiWKC6Bn7nwuF38emI9H3YKw41aq4OzdCHxSpeswgkiUTmGyyLdUBTGvBg3LrgbQUQaACACGC","expires_in":7200})
37
+2018/08/26 10:01:23 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_ho3BftxaKmrGQie6QrTSheSWuAj8XAN8wpjERCj2FB00PWVCksSlu-X-3yVreKXyMZiE9TKDHdpFRJ4TwWiWKC6Bn7nwuF38emI9H3YKw41aq4OzdCHxSpeswgkiUTmGyyLdUBTGvBg3LrgbQUQaACACGC])
38
+2018/08/26 10:03:00 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
39
+2018/08/26 10:03:00 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_mPkwKKOyg1_TrG55P9WmMf-uZJq9ElASxwnCi3kwUmH6i2JfpZRszI-vThMJ8p2BZ155si1rJiD9T1OMphQ2LlU4mVJK2VylENa49ZYKq1nman7AQKmmUhQQf1NF61dSpJzwWL1YcmtxdswWPEWcAFAGVN","expires_in":7200})
40
+2018/08/26 10:03:00 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_mPkwKKOyg1_TrG55P9WmMf-uZJq9ElASxwnCi3kwUmH6i2JfpZRszI-vThMJ8p2BZ155si1rJiD9T1OMphQ2LlU4mVJK2VylENa49ZYKq1nman7AQKmmUhQQf1NF61dSpJzwWL1YcmtxdswWPEWcAFAGVN expires_in:7200])
41
+2018/08/26 10:03:34 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
42
+2018/08/26 10:03:37 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
43
+2018/08/26 10:03:37 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_pDrce0TWVtCLO-krXhdBpI73YPmDSHDuiZldQlc0KhV3MDE9JEF9fhiCft8VbdEtodGzPVCL0_HE1pGlJ8SPI64yDhihRsrgkw7gh8tUnzSXlax1SqATFixZjSN6ufmekVUwX1lTNaQxz74BDSNaAHAYNI","expires_in":7200})
44
+2018/08/26 10:03:37 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_pDrce0TWVtCLO-krXhdBpI73YPmDSHDuiZldQlc0KhV3MDE9JEF9fhiCft8VbdEtodGzPVCL0_HE1pGlJ8SPI64yDhihRsrgkw7gh8tUnzSXlax1SqATFixZjSN6ufmekVUwX1lTNaQxz74BDSNaAHAYNI expires_in:7200])
45
+2018/08/26 10:06:33 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
46
+2018/08/26 10:06:33 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_DZoFCC4yhlTyAkYxNIDuR2xRUAWJHPruJFOqDuEV3D5d1DdqVNkCznwmzs340F7K4wM5CiXND7hySR6ljElUYYPdZq_LrWW-g-Q5SzsRT6RRelYmhu4yRe8J8cBBg_ElkEbervWfr1DBlstvZOHaAIADSL","expires_in":7200})
47
+2018/08/26 10:06:33 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_DZoFCC4yhlTyAkYxNIDuR2xRUAWJHPruJFOqDuEV3D5d1DdqVNkCznwmzs340F7K4wM5CiXND7hySR6ljElUYYPdZq_LrWW-g-Q5SzsRT6RRelYmhu4yRe8J8cBBg_ElkEbervWfr1DBlstvZOHaAIADSL expires_in:7200])
48
+2018/08/26 10:08:42 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
49
+2018/08/26 10:08:43 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_96NNB_wLDEFTiOTGTmi9TkQvj1AiAe3lQIQWnbQIohFWbJ5DduY27W7k_Acaf8CUKq-N1Bl9yorRUuG690EDGHwBuA5tpkg3fAvrnn50VNEmTbtaNN3H22dcMu5eqxZIAtptEs_n5SRPXBfXOKIcACABXV","expires_in":7200})
50
+2018/08/26 10:08:43 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_96NNB_wLDEFTiOTGTmi9TkQvj1AiAe3lQIQWnbQIohFWbJ5DduY27W7k_Acaf8CUKq-N1Bl9yorRUuG690EDGHwBuA5tpkg3fAvrnn50VNEmTbtaNN3H22dcMu5eqxZIAtptEs_n5SRPXBfXOKIcACABXV expires_in:7200])
51
+2018/08/26 10:28:46 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
52
+2018/08/26 10:28:47 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_tfSozSKyxf6tttaz0yd2aut_EFTLarqBafPHq9AIARgmCTZL471kN1LURN4Fkklongv4QIwKWMKPgiDc0Lz_2UrwBmbDWFsr_CsKoXMewVTLbjcPRMzVwps-bgL865o-ivCgAv_1lk9AZ92BFPFeAFAYIY","expires_in":7200})
53
+2018/08/26 10:28:47 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_tfSozSKyxf6tttaz0yd2aut_EFTLarqBafPHq9AIARgmCTZL471kN1LURN4Fkklongv4QIwKWMKPgiDc0Lz_2UrwBmbDWFsr_CsKoXMewVTLbjcPRMzVwps-bgL865o-ivCgAv_1lk9AZ92BFPFeAFAYIY expires_in:7200])
54
+2018/08/26 10:36:16 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
55
+2018/08/26 10:36:16 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_Bgp4G3PY317x9UpbQOS6uPUvYLON3hDKHhqdyhD0TB_S4qUw5Kps-GnjTBABV8fU0Fq5JZkiTeXHHCLXnolcWgx3lMMy736Q_UU2hWVRHoiVTR7WRe08Yg3p2_OxIS43-bhf5ZZ1Pq1vpla5PDDfABACQQ","expires_in":7200})
56
+2018/08/26 10:36:16 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_Bgp4G3PY317x9UpbQOS6uPUvYLON3hDKHhqdyhD0TB_S4qUw5Kps-GnjTBABV8fU0Fq5JZkiTeXHHCLXnolcWgx3lMMy736Q_UU2hWVRHoiVTR7WRe08Yg3p2_OxIS43-bhf5ZZ1Pq1vpla5PDDfABACQQ expires_in:7200])
57
+2018/08/26 10:37:08 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
58
+2018/08/26 10:37:08 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_7OsVSwADwqEcwqQKNIDuR2xRUAWJHPruJFOqDlmHgDjknD0fdU94o7ndqas3U5aNtlfiNoovlsA4RLjUmqIMGf0vTlCFBjQ_M8L-N-i1jlcQiugyXFDRWsui1CUIG_9gW7gCdS1LUybkGRE4ZCIcABAEHN","expires_in":7200})
59
+2018/08/26 10:37:08 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_7OsVSwADwqEcwqQKNIDuR2xRUAWJHPruJFOqDlmHgDjknD0fdU94o7ndqas3U5aNtlfiNoovlsA4RLjUmqIMGf0vTlCFBjQ_M8L-N-i1jlcQiugyXFDRWsui1CUIG_9gW7gCdS1LUybkGRE4ZCIcABAEHN expires_in:7200])
60
+2018/08/26 10:48:19 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
61
+2018/08/26 10:48:20 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_kgQXjSoiSNu6r7VNYRaB7Jkvc6MyxsgqlfRp0GD3t4U9VVRlLLteA1jq_4IZBAVt3zYLiacrmsTJLR2nD9qb99yUWfPaLFP8NBTDPvu4cFYbNFHmOBMUJwVW9lVEaPm_2kQY1tnqcmFRpa6uKOGeABAFJB","expires_in":7200})
62
+2018/08/26 10:48:20 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_kgQXjSoiSNu6r7VNYRaB7Jkvc6MyxsgqlfRp0GD3t4U9VVRlLLteA1jq_4IZBAVt3zYLiacrmsTJLR2nD9qb99yUWfPaLFP8NBTDPvu4cFYbNFHmOBMUJwVW9lVEaPm_2kQY1tnqcmFRpa6uKOGeABAFJB expires_in:7200])
63
+2018/08/26 10:57:38 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
64
+2018/08/26 10:57:38 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_IuDEV53CHWkI4PMqWBMNgMuHx4Y6f7UP5MD90PRncFeGPK9Ri00Zbf6d-IvnUZ3FEhCN7bkwGK9wJPJGXu-RY5J91Cpr_OII7IZhVYPjtdLWuBIPzkcq28gKfxTRlSQTCQXGc3_khJMAJrNIDUThAGAGXW","expires_in":7200})
65
+2018/08/26 10:57:38 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_IuDEV53CHWkI4PMqWBMNgMuHx4Y6f7UP5MD90PRncFeGPK9Ri00Zbf6d-IvnUZ3FEhCN7bkwGK9wJPJGXu-RY5J91Cpr_OII7IZhVYPjtdLWuBIPzkcq28gKfxTRlSQTCQXGc3_khJMAJrNIDUThAGAGXW expires_in:7200])
66
+2018/08/26 10:58:56 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
67
+2018/08/26 10:58:56 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_j6hv2N3bFx7qKu-zMWqgXQqP5f3C1fi5MKw7aVmOU27p7NHWfiwleuTzzhyuccc9zfejZJV9s615X9pGZo2swrUQa_R4b3jFxn7OLuA3jDgBBUQwvIv578aeNjgLLVfAIAUUE","expires_in":7200})
68
+2018/08/26 10:58:56 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_j6hv2N3bFx7qKu-zMWqgXQqP5f3C1fi5MKw7aVmOU27p7NHWfiwleuTzzhyuccc9zfejZJV9s615X9pGZo2swrUQa_R4b3jFxn7OLuA3jDgBBUQwvIv578aeNjgLLVfAIAUUE expires_in:7200])
69
+2018/08/26 15:20:02 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
70
+2018/08/26 15:20:03 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_BWujCeV9M2yUp5tsJpx7FaGHTMbuGAJ0c3XHxCrkY7-Ro9tiu-cAJNx45PdkiNe5SfTZrW7ZhHXz36VnZ8HYzN6arFiFgloLHh9qJIb9_sIqFAgi2NPApcOm16BXEF4GY7KDOza67EWofM1jIQIgABAUCU","expires_in":7200})
71
+2018/08/26 15:20:03 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_BWujCeV9M2yUp5tsJpx7FaGHTMbuGAJ0c3XHxCrkY7-Ro9tiu-cAJNx45PdkiNe5SfTZrW7ZhHXz36VnZ8HYzN6arFiFgloLHh9qJIb9_sIqFAgi2NPApcOm16BXEF4GY7KDOza67EWofM1jIQIgABAUCU expires_in:7200])
72
+2018/08/26 16:17:50 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
73
+2018/08/26 16:17:50 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_hezlnSFBORaBwf5SdwfaSZEoGO35hkS4XL7D2SKqDSUwryGZpP6lFh9fVUDjFQzwv0oH3wZnP5ANT4rE1nQEeBgZTHIPo5Qzu5KpHhVFQNc_0bb6XGAFm-ugPf9iKI2tVA4SIfILsf6VunDeLZUeAAAVJE","expires_in":7200})
74
+2018/08/26 16:17:50 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_hezlnSFBORaBwf5SdwfaSZEoGO35hkS4XL7D2SKqDSUwryGZpP6lFh9fVUDjFQzwv0oH3wZnP5ANT4rE1nQEeBgZTHIPo5Qzu5KpHhVFQNc_0bb6XGAFm-ugPf9iKI2tVA4SIfILsf6VunDeLZUeAAAVJE expires_in:7200])
75
+2018/09/05 14:05:44.496 [E]  不存在营销信息!
76
+2018/09/05 16:08:13.236 [E]  没有对应的营销活动
77
+2018/09/05 20:46:22 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
78
+2018/09/05 20:46:22 [E] 获取组织信息失败: 没有查询到机构信息
79
+2018/09/05 20:46:22 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
80
+2018/09/05 20:46:22 [E] 下单转换JSON失败: json: cannot unmarshal number into Go struct field TaCourseOrders.CustomerId of type string
81
+2018/09/05 20:46:22 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_40wwMDxnHi_pYFr00yd2aut_EFTLarqBafPHqwv8R183qUqb_YaeFDTKjy41RrX3fcayrs1zAx5M_6V9ZD3sDSlU-y6F6AUbjV9EPZKOwIASwWYXHIjgt0sFtaWVB0WGhgDUSTKjiN-xejmBZGFcACAQXW","expires_in":7200})
82
+2018/09/05 20:46:22 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_40wwMDxnHi_pYFr00yd2aut_EFTLarqBafPHqwv8R183qUqb_YaeFDTKjy41RrX3fcayrs1zAx5M_6V9ZD3sDSlU-y6F6AUbjV9EPZKOwIASwWYXHIjgt0sFtaWVB0WGhgDUSTKjiN-xejmBZGFcACAQXW])
83
+2018/09/05 20:47:15 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
84
+2018/09/05 20:47:15 [E] 获取组织信息失败: 没有查询到机构信息
85
+2018/09/05 20:47:17 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
86
+2018/09/05 20:47:17 [E] 获取组织信息失败: 没有查询到机构信息
87
+2018/09/05 20:47:17 [E] 下单优惠转换JSON失败: unexpected end of JSON input
88
+2018/09/05 20:48:57 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
89
+2018/09/05 20:48:57 [E] 获取组织信息失败: 没有查询到机构信息
90
+2018/09/05 20:48:57 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
91
+2018/09/05 20:48:58 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_cODCqx4ygv6jVXcnJpx7FaGHTMbuGAJ0c3XHxHJvQHXHMcBcaodYjJY5tRxxoe2Gsd0-sIBbBj-q0CgP4zyVQamH4N5Y7ea4MaPEMRdM52tJMfsGeDrmO1679DHdpl-gxcPMGdTSgm_Sn5SHNLLcAFAQOO","expires_in":7200})
92
+2018/09/05 20:48:58 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_cODCqx4ygv6jVXcnJpx7FaGHTMbuGAJ0c3XHxHJvQHXHMcBcaodYjJY5tRxxoe2Gsd0-sIBbBj-q0CgP4zyVQamH4N5Y7ea4MaPEMRdM52tJMfsGeDrmO1679DHdpl-gxcPMGdTSgm_Sn5SHNLLcAFAQOO expires_in:7200])
93
+2018/09/05 20:49:18 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
94
+2018/09/05 20:49:18 [E] 获取组织信息失败: 没有查询到机构信息
95
+2018/09/05 20:49:23 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
96
+2018/09/05 20:49:23 [E] 获取组织信息失败: 没有查询到机构信息
97
+2018/09/05 20:49:27 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
98
+2018/09/05 20:49:27 [E] 获取组织信息失败: 没有查询到机构信息
99
+2018/09/05 20:49:44 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
100
+2018/09/05 20:49:44 [E] 获取组织信息失败: 没有查询到机构信息
101
+2018/09/05 20:50:00 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
102
+2018/09/05 20:50:00 [E] 获取组织信息失败: 没有查询到机构信息
103
+2018/09/05 20:50:00 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
104
+2018/09/05 20:50:01 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_Kx2YTe2o_Xlqu7XwXF_SmuGSs0pzMKdzTxBVOrdW9Y406UB_OAbuy181N3cqFQVOoZodH7DHkEddPsPgIPU2vlxzXwkW3W5yafkaNSYtFWE80lWE4u8-HpRsU2pSqlplcPZH4hkcqMDFbuJ3NAUaAHAJWQ","expires_in":7200})
105
+2018/09/05 20:50:01 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_Kx2YTe2o_Xlqu7XwXF_SmuGSs0pzMKdzTxBVOrdW9Y406UB_OAbuy181N3cqFQVOoZodH7DHkEddPsPgIPU2vlxzXwkW3W5yafkaNSYtFWE80lWE4u8-HpRsU2pSqlplcPZH4hkcqMDFbuJ3NAUaAHAJWQ])
106
+2018/09/05 20:50:06 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
107
+2018/09/05 20:50:06 [E] 获取组织信息失败: 没有查询到机构信息
108
+2018/09/05 20:50:10 [E] 解密 Base64 字串失败: illegal base64 data at input byte 1
109
+2018/09/05 20:50:10 [E] 获取组织信息失败: 没有查询到机构信息
110
+2018/09/05 20:50:45 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
111
+2018/09/05 20:50:45 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_JBzudKpFiCtAdYE0Rouc5sin8BHZTUcYQXNEZsXSd7xj7A9OfXnnywRVpAcdwjR2-Bz6OzGkl3lfVl23L7XvGYVU8dj3cjI8qLLW93vaXgz1qE3dPhDt2xqHTTYOv8Ajh4rofEGTmnXP9iX1UAXaAGADJG","expires_in":7200})
112
+2018/09/05 20:50:45 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_JBzudKpFiCtAdYE0Rouc5sin8BHZTUcYQXNEZsXSd7xj7A9OfXnnywRVpAcdwjR2-Bz6OzGkl3lfVl23L7XvGYVU8dj3cjI8qLLW93vaXgz1qE3dPhDt2xqHTTYOv8Ajh4rofEGTmnXP9iX1UAXaAGADJG expires_in:7200])
113
+2018/09/05 20:55:30 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
114
+2018/09/05 20:55:30 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_xvcEAyP8v3zEDtsbWm__3tPL-9QqCmyCudjbChDCB9R-KjLf6T4SKjItQO9to77IfBUy96-2z36i3YKKgpDFTFOA8lNQ6ao81nyrzPkwdhtWV8UHrZctadS1rN6uIm0NHzY353OMLIitxWuBKWFcAGAAMV","expires_in":7200})
115
+2018/09/05 20:55:30 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_xvcEAyP8v3zEDtsbWm__3tPL-9QqCmyCudjbChDCB9R-KjLf6T4SKjItQO9to77IfBUy96-2z36i3YKKgpDFTFOA8lNQ6ao81nyrzPkwdhtWV8UHrZctadS1rN6uIm0NHzY353OMLIitxWuBKWFcAGAAMV expires_in:7200])
116
+2018/09/05 22:55:30 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
117
+2018/09/05 22:55:30 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_t_RW2B_Cdc9JwXZWF5oX2-mKsE_NyyL3FclnDrUGboPVRbdDUOKiATUMBPxpfReVAFildW2ChpcVFmo9fR0OAVQCMEE0JYO4kFNN4nVTBKjDr7ih0YnhHn54Ttkrc6vbiiTGfOGJZGgVN1ZAAOBhAIADRE","expires_in":7200})
118
+2018/09/05 22:55:30 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_t_RW2B_Cdc9JwXZWF5oX2-mKsE_NyyL3FclnDrUGboPVRbdDUOKiATUMBPxpfReVAFildW2ChpcVFmo9fR0OAVQCMEE0JYO4kFNN4nVTBKjDr7ih0YnhHn54Ttkrc6vbiiTGfOGJZGgVN1ZAAOBhAIADRE expires_in:7200])

+ 19
- 74
log/common.log Vedi File

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

+ 49
- 17
models/course/course.go Vedi File

194
 	return err
194
 	return err
195
 }
195
 }
196
 
196
 
197
+// TagDetail 标签
198
+type TagDetail struct {
199
+	model.TaCourseTag `xorm:"extends"`
200
+	TagName           string
201
+}
202
+
197
 // CourseDetail 课程详情
203
 // CourseDetail 课程详情
198
 type CourseDetail struct {
204
 type CourseDetail struct {
199
 	model.TaCourse `xorm:"extends"`
205
 	model.TaCourse `xorm:"extends"`
200
-	CourseTags     []model.TaCourseTag
206
+	CourseTags     []TagDetail
201
 	CourseImgs     []model.TaCourseImg
207
 	CourseImgs     []model.TaCourseImg
202
 	CourseDetail   []model.TaCourseDetail
208
 	CourseDetail   []model.TaCourseDetail
203
 	CaseInfo       *model.SysCase
209
 	CaseInfo       *model.SysCase
205
 
211
 
206
 // GetCourseInfo 获取课程详情
212
 // GetCourseInfo 获取课程详情
207
 func (m *CourseDAO) GetCourseInfo(courseid string) (*CourseDetail, error) {
213
 func (m *CourseDAO) GetCourseInfo(courseid string) (*CourseDetail, error) {
208
-	var courses []CourseDetail
214
+	course := new(CourseDetail)
209
 	sql := `select * from ta_course where course_id='` + courseid + `'`
215
 	sql := `select * from ta_course where course_id='` + courseid + `'`
210
-	err := m.db.Sql(sql).Find(&courses)
216
+	has, err := m.db.Sql(sql).Get(&course)
211
 	if err != nil {
217
 	if err != nil {
212
 		return nil, err
218
 		return nil, err
213
 	}
219
 	}
214
-	if len(courses) > 0 {
215
-		return &courses[0], nil
220
+
221
+	if !has {
222
+		return nil, nil
216
 	}
223
 	}
217
-	return nil, nil
224
+
225
+	details, err := m.GetCourseDetail(courseid)
226
+	if err != nil {
227
+		return nil, err
228
+	}
229
+
230
+	course.CourseDetail = details
231
+
232
+	return course, nil
218
 }
233
 }
219
 
234
 
220
 // GetCourseDetail 获取课程明细
235
 // GetCourseDetail 获取课程明细
224
 	return details, err
239
 	return details, err
225
 }
240
 }
226
 
241
 
242
+// DetailInfo 排课记录
243
+type DetailInfo struct {
244
+	model.TaCourseDetail `xorm:"extends"`
245
+	CourseStatus         int
246
+	CourseName           string
247
+	CaseName             string
248
+	CaseAddress          string
249
+}
250
+
227
 // GetDetails 获取所有的排课记录
251
 // GetDetails 获取所有的排课记录
228
-func (m *CourseDAO) GetDetails(caseid, date string) ([]model.TaCourseDetail, error) {
229
-	var details []model.TaCourseDetail
230
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("DATE_FORMAT(begin_date,'%Y-%m') = ?", date).Find(&details)
252
+func (m *CourseDAO) GetDetails(caseid, date string) ([]DetailInfo, error) {
253
+	var details []DetailInfo
254
+
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 
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 + `'`
259
+	err := m.db.Sql(sql).Find(&details)
260
+
261
+	// err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("DATE_FORMAT(begin_date,'%Y-%m') = ?", date).Find(&details)
231
 	return details, err
262
 	return details, err
232
 }
263
 }
233
 
264
 
234
 // GetCourseSchedule 获取需要排课的记录
265
 // GetCourseSchedule 获取需要排课的记录
235
 func (m *CourseDAO) GetCourseSchedule(name, caseids, date string, page, pageSize int) ([]model.TaCourse, error) {
266
 func (m *CourseDAO) GetCourseSchedule(name, caseids, date string, page, pageSize int) ([]model.TaCourse, error) {
236
 	var courses []model.TaCourse
267
 	var courses []model.TaCourse
237
-	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And(date + " BETWEEN begin_date and end_date")
268
+	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
238
 	if name != "" {
269
 	if name != "" {
239
 		dao.And("course_name like '%" + name + "%'")
270
 		dao.And("course_name like '%" + name + "%'")
240
 	}
271
 	}
241
 	if caseids != "" {
272
 	if caseids != "" {
242
-		dao.And("caseids in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
273
+		dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
243
 	}
274
 	}
244
-	err := dao.OrderBy("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
275
+	err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
245
 	return courses, err
276
 	return courses, err
246
 }
277
 }
247
 
278
 
248
 // GetCourseScheduleCount 获取排课记录数
279
 // GetCourseScheduleCount 获取排课记录数
249
 func (m *CourseDAO) GetCourseScheduleCount(name, caseids, date string) (int, error) {
280
 func (m *CourseDAO) GetCourseScheduleCount(name, caseids, date string) (int, error) {
250
 	var courses []model.TaCourse
281
 	var courses []model.TaCourse
251
-	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And(date + " BETWEEN begin_date and end_date")
282
+	dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
252
 	if name != "" {
283
 	if name != "" {
253
 		dao.And("course_name like '%" + name + "%'")
284
 		dao.And("course_name like '%" + name + "%'")
254
 	}
285
 	}
255
 	if caseids != "" {
286
 	if caseids != "" {
256
-		dao.And("caseids in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
287
+		dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
257
 	}
288
 	}
258
 	err := dao.Find(&courses)
289
 	err := dao.Find(&courses)
259
 	return len(courses), err
290
 	return len(courses), err
319
 }
350
 }
320
 
351
 
321
 // GetCourseTag 获取课程对应标签
352
 // GetCourseTag 获取课程对应标签
322
-func (m *CourseDAO) GetCourseTag(courseid string) ([]model.TaCourseTag, error) {
323
-	var coursetags []model.TaCourseTag
324
-	err := m.db.Where("course_id=?", courseid).Find(&coursetags)
353
+func (m *CourseDAO) GetCourseTag(courseid string) ([]TagDetail, error) {
354
+	var coursetags []TagDetail
355
+	sql := `select a.*,b.tag_name from ta_course_tag a inner join td_course_tag b on a.tag_id=b.tag_id where a.course_id='` + courseid + `'`
356
+	err := m.db.Sql(sql).Find(&coursetags)
325
 	return coursetags, err
357
 	return coursetags, err
326
 }
358
 }
327
 
359
 

+ 2
- 0
models/course/tag.go Vedi File

5
 	"spaceofcheng/services/models/model"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/utils"
6
 	"spaceofcheng/services/utils"
7
 	"strconv"
7
 	"strconv"
8
+	"time"
8
 )
9
 )
9
 
10
 
10
 // GetTagsList 获取标签列表
11
 // GetTagsList 获取标签列表
31
 func (m *CourseDAO) AddCourseTag(tag model.TdCourseTag) (*model.TdCourseTag, error) {
32
 func (m *CourseDAO) AddCourseTag(tag model.TdCourseTag) (*model.TdCourseTag, error) {
32
 	tag.TagId = utils.GetGUID()
33
 	tag.TagId = utils.GetGUID()
33
 	tag.Status = models.STATUS_NORMAL
34
 	tag.Status = models.STATUS_NORMAL
35
+	tag.CreateDate = time.Now()
34
 	_, err := m.db.Insert(tag)
36
 	_, err := m.db.Insert(tag)
35
 	return &tag, err
37
 	return &tag, err
36
 }
38
 }

+ 33
- 12
models/goods/goods.go Vedi File

5
 	"spaceofcheng/services/models"
5
 	"spaceofcheng/services/models"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/utils"
7
 	"spaceofcheng/services/utils"
8
+	"strconv"
9
+	"strings"
8
 	"time"
10
 	"time"
9
 
11
 
10
 	"github.com/yl10/kit/guid"
12
 	"github.com/yl10/kit/guid"
32
 	sql := `
34
 	sql := `
33
 		SELECT *
35
 		SELECT *
34
 		FROM
36
 		FROM
35
-			ta_goods t
37
+			ta_goods
36
 		WHERE
38
 		WHERE
37
-			t.case_id = ?
39
+			case_id in ('` + strings.Replace(caseID, ",", "','", -1) + `')
38
 	`
40
 	`
39
 
41
 
40
 	if name != "" {
42
 	if name != "" {
41
 		sql += `
43
 		sql += `
42
-			AND LOWER(t.goods_name) LIKE '%` + name + `%'
44
+			AND goods_name LIKE '%` + name + `%'
43
 		`
45
 		`
44
 	}
46
 	}
45
 
47
 
46
 	if typeID != "" {
48
 	if typeID != "" {
47
 		sql += `
49
 		sql += `
48
-			AND t.type_id = '` + typeID + `'
50
+			AND type_id = '` + typeID + `'
49
 		`
51
 		`
50
 	}
52
 	}
51
 
53
 
52
 	sql += `		
54
 	sql += `		
53
-		AND t.status > ?
55
+		AND status > ` + strconv.Itoa(models.STATUS_DEL) + `
54
 		ORDER BY
56
 		ORDER BY
55
-			t.type_id,
56
-			t.create_date
57
+			type_id,
58
+			create_date
57
 	`
59
 	`
58
 
60
 
61
+	// sql += ` limit ` + strconv.Itoa(limit[0]) + ` OFFSET ` + strconv.Itoa(limit[1])
62
+
59
 	var goodsList []GoodsWithSpec
63
 	var goodsList []GoodsWithSpec
60
-	cnt, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&goodsList, sql, limit, caseID, models.STATUS_DEL)
64
+	cnt, err := utils.NewPageNaviEngine(m.ctx).GetPageList(&goodsList, sql, limit)
61
 	if err != nil {
65
 	if err != nil {
62
 		return nil, 0, err
66
 		return nil, 0, err
63
 	}
67
 	}
64
-
65
 	for inx, goods := range goodsList {
68
 	for inx, goods := range goodsList {
66
 		specs, err := m.GetSpecWithPrice(goods.GoodsId)
69
 		specs, err := m.GetSpecWithPrice(goods.GoodsId)
67
 		if err != nil {
70
 		if err != nil {
68
 			return nil, 0, err
71
 			return nil, 0, err
69
 		}
72
 		}
70
-
71
 		goodsList[inx].Specs = specs
73
 		goodsList[inx].Specs = specs
74
+
75
+		imgs, err := m.GetGoodsImgByGoodsID(goods.GoodsId)
76
+		if err != nil {
77
+			return nil, 0, err
78
+		}
79
+		goodsList[inx].Images = imgs
72
 	}
80
 	}
73
 
81
 
74
 	return goodsList, cnt, nil
82
 	return goodsList, cnt, nil
98
 
106
 
99
 // GetSpecWithPrice 获取商品规格 含 金额
107
 // GetSpecWithPrice 获取商品规格 含 金额
100
 func (m *GoodsDAO) GetSpecWithPrice(goodsID string) ([]SpecWithPrice, error) {
108
 func (m *GoodsDAO) GetSpecWithPrice(goodsID string) ([]SpecWithPrice, error) {
101
-	sql := `SELECT * FROM td_spec t
109
+	sql := `SELECT t.*,s.goods_price FROM td_spec t
102
 		JOIN ta_goods_spec s ON t.spec_id = s.spec_id
110
 		JOIN ta_goods_spec s ON t.spec_id = s.spec_id
103
-		WHERE t.status = ? AND s.goods_id = ?
111
+		WHERE t.status > ? AND s.goods_id = ?
104
 	`
112
 	`
105
 
113
 
106
 	var specs []SpecWithPrice
114
 	var specs []SpecWithPrice
162
 		return nil, err
170
 		return nil, err
163
 	}
171
 	}
164
 
172
 
173
+	imgs, err := m.GetGoodsImgByGoodsID(id)
174
+	if err != nil {
175
+		return nil, err
176
+	}
177
+
165
 	return &GoodsWithSpec{
178
 	return &GoodsWithSpec{
166
 		TaGoods: *goods,
179
 		TaGoods: *goods,
167
 		Specs:   specs,
180
 		Specs:   specs,
181
+		Images:  imgs,
168
 	}, nil
182
 	}, nil
169
 }
183
 }
170
 
184
 
293
 
307
 
294
 	return nil
308
 	return nil
295
 }
309
 }
310
+
311
+// GetGoodsImgByGoodsID 根据商品ID获取商品图片信息
312
+func (m *GoodsDAO) GetGoodsImgByGoodsID(goodsid string) ([]model.TaGoodsImg, error) {
313
+	var goodsimg []model.TaGoodsImg
314
+	err := m.db.Where("goods_id=?", goodsid).Find(&goodsimg)
315
+	return goodsimg, err
316
+}

+ 5
- 4
models/goods/types.go Vedi File

14
 
14
 
15
 // SpecWithPrice 规格价格
15
 // SpecWithPrice 规格价格
16
 type SpecWithPrice struct {
16
 type SpecWithPrice struct {
17
-	model.TdSpec `xorm."extends"`
17
+	model.TdSpec `xorm:"extends"`
18
 	GoodsPrice   string `xorm:"DECIMAL(8,2)"`
18
 	GoodsPrice   string `xorm:"DECIMAL(8,2)"`
19
 }
19
 }
20
 
20
 
21
 // GoodsWithSpec 含规格商品
21
 // GoodsWithSpec 含规格商品
22
 type GoodsWithSpec struct {
22
 type GoodsWithSpec struct {
23
-	model.TaGoods `xorm."extends"`
23
+	model.TaGoods `xorm:"extends"`
24
 	Specs         []SpecWithPrice
24
 	Specs         []SpecWithPrice
25
+	Images        []model.TaGoodsImg
25
 }
26
 }
26
 
27
 
27
 // GoodsWithPrice 含规格商品
28
 // GoodsWithPrice 含规格商品
28
 type GoodsWithPrice struct {
29
 type GoodsWithPrice struct {
29
-	model.TaGoods     `xorm."extends"`
30
-	model.TaGoodsSpec `xorm."extends"`
30
+	model.TaGoods     `xorm:"extends"`
31
+	model.TaGoodsSpec `xorm:"extends"`
31
 }
32
 }
32
 
33
 
33
 // OrdersWithGoods 订单列表
34
 // OrdersWithGoods 订单列表

+ 153
- 0
models/marketing/marketing.go Vedi File

1
+package marketing
2
+
3
+import(
4
+	"spaceofcheng/services/models/model"
5
+	"spaceofcheng/services/utils"
6
+	"strconv"
7
+	"time"
8
+	"github.com/go-xorm/xorm"
9
+)
10
+
11
+// 活动类型
12
+const (
13
+	NEW_ACTIVITIES = 0 // 注册赠券
14
+
15
+)
16
+
17
+// 状态
18
+const (
19
+	DELETE = -1 // 删除
20
+	NORMAL = 0 // 正常
21
+	DISABLE = 1 // 停用
22
+
23
+)
24
+
25
+// 赠券卡券
26
+const (
27
+	drink = 1 // 饮品通用卷
28
+	course = 2 // 课程通用卷
29
+	petty_diplomat = 3 // 小小外交官通用卷
30
+)
31
+
32
+// GoodsDAO 当前数据库操作对象
33
+type MarketingDAO struct {
34
+	ctx *utils.Context
35
+	db  *xorm.Session
36
+}
37
+
38
+// NewMarketingDAO New Inst
39
+func NewMarketingDAO(ctx *utils.Context) *MarketingDAO {
40
+	return &MarketingDAO{
41
+		ctx: ctx,
42
+		db:  ctx.DB,
43
+	}
44
+}
45
+
46
+// MarketingInfo 课程
47
+type MarketingInfo struct {
48
+	model.SysActivity `xorm:"extends"`
49
+	Actions []model.SysActivityAction
50
+}
51
+
52
+// GetMarketingList 查询所有
53
+func (m *MarketingDAO) GetMarketingList(page int, pageSize int) ([]MarketingInfo ,error){
54
+
55
+	var news []MarketingInfo
56
+	sql := `select * from sys_activity new order by new.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
57
+	err := m.db.Sql(sql).Find(&news)
58
+	return news, err
59
+
60
+}
61
+
62
+// GetMarketingCount 获取总数
63
+func (m *MarketingDAO) GetMarketingCount()(int64, error){
64
+	var total []int64
65
+	sql := `select count(*) as total from sys_activity`
66
+	err := m.db.Sql(sql).Cols("total").Find(&total)
67
+	if err!=nil{
68
+
69
+	}
70
+	return total[0], err
71
+}
72
+
73
+
74
+// AddMarketing 添加
75
+func (m *MarketingDAO) AddMarketing(activity *model.SysActivity) (*model.SysActivity, error) {
76
+	activity.ActivityId = utils.GetGUID()
77
+	activity.CreateDate = time.Now()
78
+	//activity.Status = models.STATUS_NORMAL
79
+	activity.Status = NORMAL // 状态为正常
80
+	org := m.ctx.Get("org").(model.SysOrg)
81
+	activity.OrgId = org.OrgId
82
+	caseinfo := m.ctx.Get("currentCase").(model.SysCase)
83
+	activity.CaseId = caseinfo.CaseId
84
+	//activity.CaseId = user.
85
+
86
+	_, err := m.db.Insert(activity)
87
+
88
+	// // 添加活动动作数据
89
+	// var new model.SysActivityAction
90
+	// new.ActionId = activity.ActivityId
91
+	// new.ActiveType = activity.ActivityType
92
+	return activity, err
93
+}
94
+
95
+
96
+// GetMarketingById 根据ID查询活动营销
97
+func (m *MarketingDAO) GetMarketingById(activityId string) (*model.SysActivity,error){
98
+
99
+	var activity []model.SysActivity
100
+	err := m.db.Where("activity_id=?",activityId).Find(&activity)
101
+	if err != nil {
102
+		return nil, err
103
+	}
104
+	if len(activity) >0 {
105
+		return &activity[0],nil
106
+	}
107
+	return nil,nil
108
+	
109
+}
110
+
111
+// DelMarketing 修改状态 营销活动(删除,启用,停用)
112
+/**
113
+ *	DELETE = -1 // 删除
114
+		NORMAL = 0 // 正常
115
+		DISABLE = 1 // 停用
116
+ **/
117
+func (m *MarketingDAO) DelMarketing(activityId string,status int) error {
118
+
119
+	var info = model.SysActivity{
120
+		ActivityId: activityId,
121
+		// Status:   models.STATUS_DEL,
122
+		Status:   status,
123
+	}
124
+	var cols = []string{
125
+		"status",
126
+	}
127
+	_, err := m.db.Cols(cols...).Where("activity_id=?", activityId).Update(info)
128
+	return err
129
+}
130
+
131
+
132
+// UpdateMarketing 修改 营销活动
133
+func (m *MarketingDAO) UpdateMarketing(activity model.SysActivity) error {
134
+	// var cols = []string{
135
+	// 	"activity_name",
136
+	// 	"activity_type",
137
+	// 	"case_id",
138
+	// 	"org_id",
139
+	// 	"case_id",
140
+	// }
141
+
142
+	var cols = []string{
143
+		"activity_name",
144
+		"activity_type",
145
+	}
146
+	_, err := m.db.Cols(cols...).Where("action_id=?", activity.ActivityId).Update(activity)
147
+	return err
148
+}
149
+
150
+
151
+
152
+
153
+

+ 52
- 0
models/marketing/work.go Vedi File

1
+package marketing
2
+
3
+import(
4
+	"spaceofcheng/services/models/model"
5
+	"spaceofcheng/services/utils"
6
+	"github.com/go-xorm/xorm"
7
+)
8
+
9
+// WorkDAO 当前数据库操作对象
10
+type WorkDAO struct {
11
+	ctx *utils.Context
12
+	db *xorm.Session
13
+}
14
+
15
+// NewMarketingDAO New Inst
16
+func NewWorkDAO(ctx *utils.Context) *WorkDAO {
17
+	return &WorkDAO{
18
+		ctx: ctx,
19
+		db:  ctx.DB,
20
+	}
21
+}
22
+
23
+// WrokInfo 活动动作
24
+type WrokInfo struct {
25
+	model.SysActivityAction `xorm:"extends"`
26
+	CourseType     string
27
+}
28
+
29
+// 添加 活动动作
30
+func (m *WorkDAO) AddWork(action *model.SysActivityAction) (*model.SysActivityAction,error){
31
+	action.ActionId = utils.GetGUID()
32
+	_,err := m.db.Insert(&action)
33
+
34
+	return action,err
35
+
36
+}
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+

+ 13
- 10
models/message/cmscase.go Vedi File

2
 
2
 
3
 import (
3
 import (
4
 	"spaceofcheng/services/models"
4
 	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/course"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/utils"
7
 	"spaceofcheng/services/utils"
7
 	"strconv"
8
 	"strconv"
9
 	"time"
10
 	"time"
10
 
11
 
11
 	"github.com/astaxie/beego"
12
 	"github.com/astaxie/beego"
12
-
13
-	"github.com/go-xorm/builder"
14
 )
13
 )
15
 
14
 
16
 // CmsCaseInfo 项目专题
15
 // CmsCaseInfo 项目专题
60
 // CmsCase 项目详情
59
 // CmsCase 项目详情
61
 type CmsCase struct {
60
 type CmsCase struct {
62
 	model.TaCmsCase `xorm:"extends"`
61
 	model.TaCmsCase `xorm:"extends"`
63
-	Courses         []model.TaCourse
62
+	CaseAddress     string
63
+	Courses         []course.CourseDetail
64
 	CmsCaseImgs     []model.TaCmsCaseImage
64
 	CmsCaseImgs     []model.TaCmsCaseImage
65
 }
65
 }
66
 
66
 
67
 // GetCmsCaseByID 获取项目专题详情
67
 // GetCmsCaseByID 获取项目专题详情
68
 func (m *MessageDAO) GetCmsCaseByID(cmscaseid string) (*CmsCase, error) {
68
 func (m *MessageDAO) GetCmsCaseByID(cmscaseid string) (*CmsCase, error) {
69
 	var cases []CmsCase
69
 	var cases []CmsCase
70
-	sql := `select * from ta_cms_case where cms_case_id='` + cmscaseid + `' and status>` + strconv.Itoa(models.STATUS_DEL)
70
+	sql := `select a.*,b.case_address from ta_cms_case a inner join sys_case b on a.case_id=b.case_id where a.cms_case_id='` + cmscaseid + `' and b.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.status>` + strconv.Itoa(models.STATUS_DEL)
71
 	err := m.db.Sql(sql).Find(&cases)
71
 	err := m.db.Sql(sql).Find(&cases)
72
 	if err != nil {
72
 	if err != nil {
73
 		beego.Error(err)
73
 		beego.Error(err)
80
 }
80
 }
81
 
81
 
82
 // GetCoursesByCmsCase 根据项目专题ID获取课程信息
82
 // GetCoursesByCmsCase 根据项目专题ID获取课程信息
83
-func (m *MessageDAO) GetCoursesByCmsCase(cmscaseid string) ([]model.TaCourse, error) {
84
-	var course []model.TaCourse
85
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).In("course_id", builder.Select("course_id").From("ta_cms_case_course").Where(builder.Eq{"cms_case_id": cmscaseid})).Find(&course)
83
+func (m *MessageDAO) GetCoursesByCmsCase(cmscaseid string) ([]course.CourseDetail, error) {
84
+	var course []course.CourseDetail
85
+	sql := `select a.* from ta_course a inner join ta_cms_case_course b on a.course_id=b.course_id where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and b.cms_case_id = ?`
86
+
87
+	err := m.db.Sql(sql, cmscaseid).Find(&course)
86
 	return course, err
88
 	return course, err
87
 }
89
 }
88
 
90
 
94
 }
96
 }
95
 
97
 
96
 // GetCourseByCaseID 根据案场ID获取所有的课程信息
98
 // GetCourseByCaseID 根据案场ID获取所有的课程信息
97
-func (m *MessageDAO) GetCourseByCaseID(caseid string) ([]model.TaCourse, error) {
98
-	var course []model.TaCourse
99
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id=?", caseid).Find(&course)
99
+func (m *MessageDAO) GetCourseByCaseID(caseid string) ([]course.CourseDetail, error) {
100
+	var course []course.CourseDetail
101
+	sql := `select * from ta_course where status>` + strconv.Itoa(models.STATUS_DEL) + ` and case_id=?`
102
+	err := m.db.Sql(sql, caseid).Find(&course)
100
 	return course, err
103
 	return course, err
101
 }
104
 }
102
 
105
 

+ 0
- 3
models/model/ta_customer_card.go Vedi File

11
 	CustomerId       string    `xorm:"VARCHAR(64)"`
11
 	CustomerId       string    `xorm:"VARCHAR(64)"`
12
 	StartDate        time.Time `xorm:"DATETIME"`
12
 	StartDate        time.Time `xorm:"DATETIME"`
13
 	EndDate          time.Time `xorm:"DATETIME"`
13
 	EndDate          time.Time `xorm:"DATETIME"`
14
-	CourseNum        int       `xorm:"INT(11)"`
15
-	JoinNum          int       `xorm:"INT(11)"`
16
-	CardState        string    `xorm:"VARCHAR(64)"`
17
 	Status           int       `xorm:"SMALLINT(6)"`
14
 	Status           int       `xorm:"SMALLINT(6)"`
18
 	ReceiveDate      time.Time `xorm:"DATETIME"`
15
 	ReceiveDate      time.Time `xorm:"DATETIME"`
19
 	VerifyDate       time.Time `xorm:"DATETIME"`
16
 	VerifyDate       time.Time `xorm:"DATETIME"`

+ 1
- 0
models/model/ta_customer_course.go Vedi File

11
 	OrgId            string    `xorm:"VARCHAR(64)"`
11
 	OrgId            string    `xorm:"VARCHAR(64)"`
12
 	CaseId           string    `xorm:"VARCHAR(64)"`
12
 	CaseId           string    `xorm:"VARCHAR(64)"`
13
 	CourseName       string    `xorm:"VARCHAR(50)"`
13
 	CourseName       string    `xorm:"VARCHAR(50)"`
14
+	LocationId       string    `xorm:"VARCHAR(64)"`
14
 	Price            string    `xorm:"DECIMAL(8,2)"`
15
 	Price            string    `xorm:"DECIMAL(8,2)"`
15
 	CourseNum        int       `xorm:"INT(11)"`
16
 	CourseNum        int       `xorm:"INT(11)"`
16
 	JoinNum          int       `xorm:"INT(11)"`
17
 	JoinNum          int       `xorm:"INT(11)"`

+ 139
- 232
models/verify/verify.go Vedi File

1
 package verify
1
 package verify
2
 
2
 
3
 import (
3
 import (
4
-	"spaceofcheng/services/models"
5
 	"spaceofcheng/services/models/model"
4
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/utils"
5
 	"spaceofcheng/services/utils"
7
 	"strconv"
6
 	"strconv"
8
-	"time"
9
 
7
 
10
 	"github.com/go-xorm/xorm"
8
 	"github.com/go-xorm/xorm"
11
 )
9
 )
24
 	}
22
 	}
25
 }
23
 }
26
 
24
 
27
-type verifyCourse struct {
28
-	targetId     string
29
-	caseId       string
30
-	caseName     string
31
-	locationName string
32
-	courseName   string
33
-	detailName   string
34
-	beginDate    time.Time
35
-	endDate      time.Time
36
-	courseType   string
25
+type MyCourse struct {
26
+	model.TaCustomerCourseDetail `xorm:"extends"`
27
+	CaseName                     string
28
+	CourseName                   string
29
+	DetailName                   string
30
+	LocationName                 string
31
+	CustomerId                   string
37
 }
32
 }
38
 
33
 
39
-func (m *VerifyDAO) GetExperienceCardVerifyList(customerCardId string, page, pageSize int) ([]verifyCourse, error) {
40
-	var course []verifyCourse
41
-	sql := `SELECT
42
-	a.target_id,
43
-	g.case_name,
44
-	c.card_id,
45
-	f.location_name,
46
-	e.course_name,
47
-	d.detail_name,
48
-	d.begin_date,
49
-	d.end_date,
50
-	'card' as courseType 
51
-FROM
52
-	ta_coupon_card_target a
53
-	INNER JOIN ta_coupon_card b ON a.card_id = b.card_id
54
-	INNER JOIN ta_customer_card c ON c.card_id = b.card_id
55
-	INNER JOIN ta_course_detail d ON d.detail_id = a.detail_id
56
-	INNER JOIN ta_course e ON d.course_id = e.course_id
57
-	INNER JOIN td_cms_image_location f ON e.location_id = f.location_id
58
-	INNER JOIN sys_case g ON g.case_id = c.case_id 
59
-WHERE
60
-	DATE_FORMAT( d.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
61
-	AND c.customer_card_id = ` + customerCardId
62
-	sql = sql + " limit  " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
63
-	err := m.db.Sql(sql).Find(&course)
64
-	return course, err
34
+func (m *VerifyDAO) GetCustomerCourseDetailById(id string) (*model.TaCustomerCourseDetail, error) {
35
+	var customerCourseDerail []model.TaCustomerCourseDetail
36
+	err := m.db.Where("customer_detail_id =?", id).Find(&customerCourseDerail)
37
+	if err != nil {
38
+		return nil, err
39
+	}
40
+	if len(customerCourseDerail) > 0 {
41
+		return &customerCourseDerail[0], nil
42
+	}
43
+	return nil, nil
65
 }
44
 }
66
 
45
 
67
-func (m *VerifyDAO) GetExperienceCardVerifyListCount(customerCardId string) (int, error) {
68
-	var course []verifyCourse
46
+// GetCustomerCourseList 根据我的课程id获取我的课程详情
47
+func (m *VerifyDAO) GetCustomerCourseList(customerCourseId, caseid string, page int, pageSize int) ([]MyCourse, error) {
48
+	var courseList []MyCourse
69
 	sql := `SELECT
49
 	sql := `SELECT
70
-	a.target_id,
71
-	g.case_name,
72
-	c.card_id,
50
+	a.*,
51
+	d.case_name,
52
+	b.course_name,	
53
+	c.detail_name,
73
 	f.location_name,
54
 	f.location_name,
74
-	e.course_name,
75
-	d.detail_name,
76
-	d.begin_date,
77
-	d.end_date,
78
-	'card' as courseType 
79
-FROM
80
-	ta_coupon_card_target a
81
-	INNER JOIN ta_coupon_card b ON a.card_id = b.card_id
82
-	INNER JOIN ta_customer_card c ON c.card_id = b.card_id
83
-	INNER JOIN ta_course_detail d ON d.detail_id = a.detail_id
84
-	INNER JOIN ta_course e ON d.course_id = e.course_id
85
-	INNER JOIN td_cms_image_location f ON e.location_id = f.location_id
86
-	INNER JOIN sys_case g ON g.case_id = c.case_id 
87
-WHERE
88
-	DATE_FORMAT( d.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
89
-	AND c.customer_card_id = ` + customerCardId
90
-	err := m.db.Sql(sql).Find(&course)
91
-	return len(course), err
55
+	b.customer_id
56
+	FROM
57
+	ta_customer_course_detail a
58
+	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
59
+	INNER JOIN ta_course_detail c ON c.detail_id = a.detail_id
60
+	INNER JOIN sys_case d ON d.case_id = a.case_id
61
+	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
+	AND a.customer_course_id = '` + customerCourseId + `'
64
+	and b.case_id = '` + caseid + `'`
65
+	sql = sql + " limit " + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
66
+	err := m.db.Sql(sql).Find(&courseList)
67
+	return courseList, err
92
 }
68
 }
93
 
69
 
94
-func (m *VerifyDAO) GetOrderCourseList(courseOrderId string, page, pageSize int) ([]verifyCourse, error) {
95
-	var course []verifyCourse
70
+// GetCustomerCourseListCount 根据我的课程id获取我的课程详情数量
71
+func (m *VerifyDAO) GetCustomerCourseListCount(customerCourseId, caseid string) (int, error) {
72
+	var courseList []MyCourse
96
 	sql := `SELECT
73
 	sql := `SELECT
97
-	a.orders_detail_id AS target_id,
98
-	b.case_id,
99
-	f.case_name,
100
-	e.location_name,
101
-	c.course_name,
102
-	d.detail_name,
103
-	a.begin_date,
104
-	a.end_date,
105
-	'order' as courseType
106
-FROM
107
-	ta_course_orders_detail a
108
-	INNER JOIN ta_course_orders b ON a.orders_id = b.orders_id
109
-	INNER JOIN ta_course c ON b.course_id = c.course_id
110
-	INNER JOIN ta_course_detail d ON a.course_detail_id = d.detail_id
111
-	INNER JOIN td_cms_image_location e ON e.location_id = c.location_id
112
-	INNER JOIN sys_case f ON b.case_id = f.case_id 
113
-WHERE
114
-	DATE_FORMAT( a.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
115
-	AND b.orders_id = ` + courseOrderId
116
-	sql = sql + " limit  " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
117
-	err := m.db.Sql(sql).Find(&course)
118
-	return course, err
119
-
74
+	a.*,
75
+	d.case_name,
76
+	b.course_name,	
77
+	c.detail_name
78
+	FROM
79
+	ta_customer_course_detail a
80
+	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
81
+	INNER JOIN ta_course_detail c ON c.detail_id = a.detail_id
82
+	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
+	AND a.customer_course_id = '` + customerCourseId + `'
85
+	and b.case_id = '` + caseid + `'`
86
+	err := m.db.Sql(sql).Find(&courseList)
87
+	return len(courseList), err
120
 }
88
 }
121
 
89
 
122
-func (m *VerifyDAO) GetOrderCourseListCount(courseOrderId string) (int, error) {
123
-	var course []verifyCourse
124
-	sql := `SELECT
125
-	a.orders_detail_id AS target_id,
126
-	b.case_id,
127
-	f.case_name,
128
-	e.location_name,
129
-	c.course_name,
130
-	d.detail_name,
131
-	a.begin_date,
132
-	a.end_date,
133
-	'order' as courseType
134
-FROM
135
-	ta_course_orders_detail a
136
-	INNER JOIN ta_course_orders b ON a.orders_id = b.orders_id
137
-	INNER JOIN ta_course c ON b.course_id = c.course_id
138
-	INNER JOIN ta_course_detail d ON a.course_detail_id = d.detail_id
139
-	INNER JOIN td_cms_image_location e ON e.location_id = c.location_id
140
-	INNER JOIN sys_case f ON b.case_id = f.case_id 
141
-WHERE
142
-	DATE_FORMAT( a.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
143
-	AND b.orders_id = ` + courseOrderId
144
-	err := m.db.Sql(sql).Find(&course)
145
-	return len(course), err
90
+// UpdateCustomerCourseDetail 更新我的课程详情
91
+func (m *VerifyDAO) UpdateCustomerCourseDetail(customerCourse *model.TaCustomerCourseDetail) error {
92
+	var cols = []string{
93
+		"verify_status",
94
+		"verify_date",
95
+		"verify_user",
96
+	}
97
+	_, err := m.db.Cols(cols...).Where("customer_detail_id=?", customerCourse.CustomerDetailId).Update(customerCourse)
98
+	return err
146
 }
99
 }
147
 
100
 
148
-func (m *VerifyDAO) GetCourseListByTel(tel string, page, pageSize int) ([]verifyCourse, error) {
149
-	var course []verifyCourse
101
+// GetCustomerCourseListByTel 根据客户电话获取我的课程详情
102
+func (m *VerifyDAO) GetCustomerCourseListByTel(tel, caseid string, page, pageSize int) ([]MyCourse, error) {
103
+	var courseList []MyCourse
150
 	sql := `SELECT
104
 	sql := `SELECT
151
-	a.target_id,
152
-	g.case_name,
153
-	c.card_id,
154
-	f.location_name,
155
-	e.course_name,
156
-	d.detail_name,
157
-	d.begin_date,
158
-	d.end_date,
159
-	'card' as courseType 
160
-FROM
161
-	ta_coupon_card_target a
162
-	INNER JOIN ta_coupon_card b ON a.card_id = b.card_id
163
-	INNER JOIN ta_customer_card c ON c.card_id = b.card_id
164
-	INNER JOIN ta_course_detail d ON d.detail_id = a.detail_id
165
-	INNER JOIN ta_course e ON d.course_id = e.course_id
166
-	INNER JOIN td_cms_image_location f ON e.location_id = f.location_id
167
-	INNER JOIN sys_case g ON g.case_id = c.case_id 
168
-	INNER JOIN ta_customer h ON c.customer_id = h.customer_id
169
-WHERE
170
-	DATE_FORMAT( d.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
171
-	AND h.phone = ` + tel + `
172
-	union all
173
-	SELECT
174
-	a.orders_detail_id AS target_id,
175
-	b.case_id,
176
-	f.case_name,
177
-	e.location_name,
178
-	c.course_name,
179
-	d.detail_name,
180
-	a.begin_date,
181
-	a.end_date,
182
-	'order' as courseType
183
-FROM
184
-	ta_course_orders_detail a
185
-	INNER JOIN ta_course_orders b ON a.orders_id = b.orders_id
186
-	INNER JOIN ta_course c ON b.course_id = c.course_id
187
-	INNER JOIN ta_course_detail d ON a.course_detail_id = d.detail_id
188
-	INNER JOIN td_cms_image_location e ON e.location_id = c.location_id
189
-	INNER JOIN sys_case f ON b.case_id = f.case_id 
190
-	INNER JOIN ta_customer g ON b.customer_id = g.customer_id
191
-WHERE
192
-	DATE_FORMAT( a.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
193
-	AND g.phone = ` + tel
194
-	sql = sql + " limit  " + strconv.Itoa((page-1)*pageSize) + ", " + strconv.Itoa(pageSize)
195
-	err := m.db.Sql(sql).Find(&course)
196
-	return course, err
105
+	a.*,
106
+	d.case_name,
107
+	b.course_name,
108
+	c.detail_name,
109
+	b.customer_id,
110
+	f.location_name
111
+	FROM
112
+	ta_customer_course_detail a
113
+	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
114
+	INNER JOIN ta_course_detail c ON c.detail_id = a.detail_id
115
+	INNER JOIN sys_case d ON d.case_id = a.case_id
116
+	INNER JOIN ta_customer e ON b.customer_id = e.customer_id
117
+	LEFT JOIN td_cms_image_location f on b.location_id=f.location_id
118
+	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
119
+	AND e.phone = '` + tel + `'
120
+	and b.case_id='` + caseid + `'`
121
+	sql = sql + " limit " + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
122
+
123
+	err := m.db.Sql(sql).Find(&courseList)
124
+	return courseList, err
197
 }
125
 }
198
 
126
 
199
-func (m *VerifyDAO) GetCourseListByTelCount(tel string) (int, error) {
200
-	var course []verifyCourse
127
+// GetCustomerCourseListByTelCount 根据客户电话获取我的课程详情数量
128
+func (m *VerifyDAO) GetCustomerCourseListByTelCount(tel, caseid string) (int, error) {
129
+	var courseList []MyCourse
201
 	sql := `SELECT
130
 	sql := `SELECT
202
-	a.target_id,
203
-	g.case_name,
204
-	c.card_id,
205
-	f.location_name,
206
-	e.course_name,
207
-	d.detail_name,
208
-	d.begin_date,
209
-	d.end_date,
210
-	'card' as courseType 
131
+	a.*,
132
+	d.case_name,
133
+	b.course_name,
134
+	c.detail_name
211
 FROM
135
 FROM
212
-	ta_coupon_card_target a
213
-	INNER JOIN ta_coupon_card b ON a.card_id = b.card_id
214
-	INNER JOIN ta_customer_card c ON c.card_id = b.card_id
215
-	INNER JOIN ta_course_detail d ON d.detail_id = a.detail_id
216
-	INNER JOIN ta_course e ON d.course_id = e.course_id
217
-	INNER JOIN td_cms_image_location f ON e.location_id = f.location_id
218
-	INNER JOIN sys_case g ON g.case_id = c.case_id 
219
-	INNER JOIN ta_customer h ON c.customer_id = h.customer_id
220
-WHERE
221
-	DATE_FORMAT( d.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW(), '%Y-%m-%d' )
222
-	AND h.phone = ` + tel + `
223
-	union all
224
-	SELECT
225
-	a.orders_detail_id AS target_id,
226
-	b.case_id,
227
-	f.case_name,
228
-	e.location_name,
229
-	c.course_name,
230
-	d.detail_name,
231
-	a.begin_date,
232
-	a.end_date,
233
-	'order' as courseType
234
-FROM
235
-	ta_course_orders_detail a
236
-	INNER JOIN ta_course_orders b ON a.orders_id = b.orders_id
237
-	INNER JOIN ta_course c ON b.course_id = c.course_id
238
-	INNER JOIN ta_course_detail d ON a.course_detail_id = d.detail_id
239
-	INNER JOIN td_cms_image_location e ON e.location_id = c.location_id
240
-	INNER JOIN sys_case f ON b.case_id = f.case_id 
241
-	INNER JOIN ta_customer g ON b.customer_id = g.customer_id
242
-WHERE
243
-	DATE_FORMAT( a.begin_date, '%Y-%m-%d' ) = DATE_FORMAT( NOW( ), '%Y-%m-%d' )
244
-	AND g.phone = ` + tel
245
-	err := m.db.Sql(sql).Find(&course)
246
-	return len(course), err
136
+	ta_customer_course_detail a
137
+	INNER JOIN ta_customer_course b ON a.customer_course_id = b.customer_course_id
138
+	INNER JOIN ta_course_detail c ON c.detail_id = a.detail_id
139
+	INNER JOIN sys_case d ON d.case_id = a.case_id
140
+	INNER JOIN ta_customer e ON b.customer_id = e.customer_id
141
+	WHERE DATE_FORMAT(a.start_date,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
142
+	AND e.phone = '` + tel + `'
143
+	and b.case_id='` + caseid + `'`
144
+	err := m.db.Sql(sql).Find(&courseList)
145
+	return len(courseList), err
247
 }
146
 }
248
 
147
 
249
-func (m *VerifyDAO) AddExperienceCardVerification(verify model.TaExperienceCardVerification) (*model.TaExperienceCardVerification, error) {
250
-	verify.ExperienceCardVerifyTime = time.Now()
251
-	verify.Status = models.STATUS_NORMAL
252
-	verify.ExperienceCardVerifyId = utils.GetGUID()
253
-	_, err := m.db.Insert(verify)
254
-	return &verify, err
255
-}
256
-
257
-func (m *VerifyDAO) updateExperienceCardTarget(verify model.TaCouponCardTarget) error {
148
+// UpdateCustomerCard 更新客户体验卡
149
+func (m *VerifyDAO) UpdateCustomerCard(customerCard *model.TaCustomerCard) error {
258
 	var cols = []string{
150
 	var cols = []string{
259
-		"card_state",
260
-	}
261
-	_, err := m.db.Cols(cols...).Where("target_id=?", verify.TargetId).Update(verify)
262
-	return err
263
-}
264
-
265
-func (m *VerifyDAO) updateCustomerExperienceCard(verify model.TaCustomerCard) error {
266
-	var cols = []string{
267
-		"card_state",
268
-		"join_num",
269
 		"verify_date",
151
 		"verify_date",
152
+		"verify_status",
270
 	}
153
 	}
271
-	_, err := m.db.Cols(cols...).Where("customer_card_id=?", verify.CustomerCardId).Update(verify)
154
+	_, err := m.db.Cols(cols...).Where("customer_card_id=?", customerCard.CustomerCardId).Update(customerCard)
272
 	return err
155
 	return err
273
 }
156
 }
274
 
157
 
275
-func (m *VerifyDAO) updateCustomerOrderCourse(verify model.TaCourseOrders) error {
158
+// UpdateCustomerCourse 更新我的课程
159
+func (m *VerifyDAO) UpdateCustomerCourse(customerCourse *model.TaCustomerCourse) error {
276
 	var cols = []string{
160
 	var cols = []string{
277
 		"join_num",
161
 		"join_num",
162
+		"is_done",
278
 	}
163
 	}
279
-	_, err := m.db.Cols(cols...).Where("orders_id = ?", verify.OrdersId).Update(verify)
164
+	_, err := m.db.Cols(cols...).Where("customer_course_id=?", customerCourse.CustomerCourseId).Update(customerCourse)
280
 	return err
165
 	return err
281
 }
166
 }
282
 
167
 
283
-func (m *VerifyDAO) AddOrdersVerification(verify model.TaCourseVerifcation) (*model.TaCourseVerifcation, error) {
284
-	verify.CreateDate = time.Now()
285
-	verify.VerifcationId = utils.GetGUID()
286
-	verify.Status = models.STATUS_NORMAL
287
-	_, err := m.db.Insert(verify)
288
-	return &verify, err
168
+// GetCustomerCardByDetailId 根据我的课程详情ID查询用户体验卡
169
+func (m *VerifyDAO) GetCustomerCardByDetailId(detailId string) (*model.TaCustomerCard, error) {
170
+	var customerCard []model.TaCustomerCard
171
+	sql := `SELECT
172
+	a.* 
173
+FROM
174
+	ta_customer_card a
175
+	INNER JOIN ta_customer_course b ON a.customer_card_id = b.source_id 
176
+	
177
+	INNER JOIN ta_customer_course_detail c ON c.customer_course_id = b.customer_course_id
178
+WHERE  b.course_obtaim_type = 'card'
179
+and  c.customer_detail_id = '` + detailId + `'`
180
+	err := m.db.Sql(sql).Find(&customerCard)
181
+	return &customerCard[0], err
182
+
183
+}
289
 
184
 
185
+// GetCustomerCourseByDetailId 根据我的课程详情ID查询我的课程
186
+func (m *VerifyDAO) GetCustomerCourseByDetailId(detailId string) (*model.TaCustomerCourse, error) {
187
+	var customerCard []model.TaCustomerCourse
188
+	sql := `SELECT
189
+	a.* 
190
+FROM
191
+	ta_customer_course a
192
+	INNER JOIN ta_customer_course_detail b ON a.customer_course_id = b.customer_course_id 
193
+WHERE
194
+	b.customer_detail_id = '` + detailId + `'`
195
+	err := m.db.Sql(sql).Find(&customerCard)
196
+	return &customerCard[0], err
290
 }
197
 }

+ 21
- 3
routers/common.go Vedi File

10
 	"spaceofcheng/services/controllers/message"
10
 	"spaceofcheng/services/controllers/message"
11
 	"spaceofcheng/services/controllers/system"
11
 	"spaceofcheng/services/controllers/system"
12
 	"spaceofcheng/services/controllers/user"
12
 	"spaceofcheng/services/controllers/user"
13
+	"spaceofcheng/services/controllers/verify"
13
 	"spaceofcheng/services/controllers/vipcard"
14
 	"spaceofcheng/services/controllers/vipcard"
15
+	"spaceofcheng/services/controllers/marketing"
14
 
16
 
15
 	"github.com/astaxie/beego"
17
 	"github.com/astaxie/beego"
16
 )
18
 )
151
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "post:AddVipCard"),
153
 		beego.NSRouter("/vipcard", &vipcard.VipcardController{}, "post:AddVipCard"),
152
 		beego.NSRouter("/vipcard/:vipCardChildCode", &vipcard.VipcardController{}, "put:UserCharge"),
154
 		beego.NSRouter("/vipcard/:vipCardChildCode", &vipcard.VipcardController{}, "put:UserCharge"),
153
 
155
 
156
+		// courseVerify 核销课程
157
+		beego.NSRouter("/verify/course/code/:customerCourseId", &verify.VerifyController{}, "get:GetCustomerCourseDetailListById"),
158
+		beego.NSRouter("/verify/course/tel/:tel", &verify.VerifyController{}, "get:GetCustomerCourseDetailListBytel"),
159
+		beego.NSRouter("/verify/course/:customerDetailId", &verify.VerifyController{}, "put:VerifyCourse"),
160
+
154
 		// role 角色
161
 		// role 角色
155
 		beego.NSRouter("/role", &system.RoleController{}, "get:GetRoleList"),
162
 		beego.NSRouter("/role", &system.RoleController{}, "get:GetRoleList"),
156
 		beego.NSRouter("/role/:roleid", &system.RoleController{}, "get:GetRoleByID"),
163
 		beego.NSRouter("/role/:roleid", &system.RoleController{}, "get:GetRoleByID"),
171
 		beego.NSRouter("/course", &course.CourseController{}, "put:SaveCourse"),
178
 		beego.NSRouter("/course", &course.CourseController{}, "put:SaveCourse"),
172
 		beego.NSRouter("/course/:courseid", &course.CourseController{}, "delete:DeleteCourse"),
179
 		beego.NSRouter("/course/:courseid", &course.CourseController{}, "delete:DeleteCourse"),
173
 		beego.NSRouter("/course/:courseid/public", &course.CourseController{}, "put:CoursePublic"),
180
 		beego.NSRouter("/course/:courseid/public", &course.CourseController{}, "put:CoursePublic"),
174
-		beego.NSRouter("/course/:courseid/unpublic", &course.CourseController{}, "get:CourseUnPublic"),
181
+		beego.NSRouter("/course/:courseid/unpublic", &course.CourseController{}, "put:CourseUnPublic"),
175
 		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "get:GetCourseImgs"),
182
 		beego.NSRouter("/courseimg/:courseid", &course.CourseController{}, "get:GetCourseImgs"),
176
 		beego.NSRouter("/courseimg", &course.CourseController{}, "post:SaveCourseImg"),
183
 		beego.NSRouter("/courseimg", &course.CourseController{}, "post:SaveCourseImg"),
177
 		beego.NSRouter("/courseimg", &course.CourseController{}, "put:SaveCourseImg"),
184
 		beego.NSRouter("/courseimg", &course.CourseController{}, "put:SaveCourseImg"),
185
 
192
 
186
 		// 商品
193
 		// 商品
187
 		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListByCase"),
194
 		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListByCase"),
188
-		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "get:UpdateGoods"),
195
+		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "get:GetGoodsByID"),
189
 		beego.NSRouter("/goods", &goods.GoodsController{}, "post:UpdateGoods"),
196
 		beego.NSRouter("/goods", &goods.GoodsController{}, "post:UpdateGoods"),
190
 		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "put:UpdateGoods"),
197
 		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "put:UpdateGoods"),
191
-		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "delete:UpdateGoods"),
198
+		beego.NSRouter("/goods/:id", &goods.GoodsController{}, "delete:DeleteGoods"),
192
 
199
 
193
 		// 商品订单
200
 		// 商品订单
194
 		beego.NSRouter("/order/goods", &goods.GoodsController{}, "get:GetOrderList"),
201
 		beego.NSRouter("/order/goods", &goods.GoodsController{}, "get:GetOrderList"),
202
 
209
 
203
 		// 系统相关
210
 		// 系统相关
204
 		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
211
 		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
212
+
213
+
214
+		// 营销活动
215
+		beego.NSRouter("/marketing/list",&marketing.MarketingController{},"get:GetMarketingList"),
216
+		beego.NSRouter("/marketing/add",&marketing.MarketingController{},"get:SaveMarketing"),
217
+		beego.NSRouter("/marketing/:activityId",&marketing.MarketingController{},"get:GetMarketingById"),
218
+		beego.NSRouter("/marketing/update",&marketing.MarketingController{},"get:UpdateMarketing"),
219
+		beego.NSRouter("/marketing/normal/:activityId",&marketing.MarketingController{},"get:DelMarketingNormal"),
220
+		beego.NSRouter("/marketing/disable/:activityId",&marketing.MarketingController{},"get:DelMarketingDisable"),
221
+		beego.NSRouter("/marketing/delete/:activityId",&marketing.MarketingController{},"get:DelMarketing"),
222
+
205
 	)
223
 	)
206
 }
224
 }

+ 51
- 47
routers/guest.go Vedi File

1
-package routers
2
-
3
-import (
4
-	"spaceofcheng/services/controllers"
5
-	"spaceofcheng/services/controllers/cases"
6
-	"spaceofcheng/services/controllers/course"
7
-	"spaceofcheng/services/controllers/customer"
8
-	"spaceofcheng/services/controllers/goods"
9
-	"spaceofcheng/services/controllers/message"
10
-	"spaceofcheng/services/controllers/user"
11
-
12
-	"github.com/astaxie/beego"
13
-)
14
-
15
-func getGuestRoutes() beego.LinkNamespace {
16
-	prefix := beego.AppConfig.String("api::guest")
17
-
18
-	return beego.NSNamespace(prefix,
19
-		// cms
20
-		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoByLocation"),
21
-		beego.NSRouter("/cms/img", &message.MessageController{}, "get:GetImgByLocation"),
22
-		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
23
-		beego.NSRouter("/cms/case", &message.MessageController{}, "get:GetCmsCaseList"),
24
-		beego.NSRouter("/cms/location", &message.MessageController{}, "get:GetLocations"),
25
-		beego.NSRouter("/cms/course", &course.CourseController{}, "get:GetCourseByLocation"),
26
-
27
-		// 案场
28
-		beego.NSRouter("/case", &cases.CaseController{}, "get:GetOrgCases"),
29
-
30
-		// 商品制作状态
31
-		beego.NSRouter("/dict/order/makestatus", &goods.GoodsController{}, "get:GetMakeStatus"),
32
-
33
-		// 商品
34
-		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListForWechat"),
35
-
36
-		// 验证码 获取, 校验
37
-		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),
38
-		beego.NSRouter("/captcha", &controllers.BaseController{}, "post:ValidCaptcha"),
39
-
40
-		// 微信 登录, 注册
41
-		beego.NSRouter("/wxsignin", &customer.CustomerController{}, "post:SignIn"),
42
-		beego.NSRouter("/wxsignup", &customer.CustomerController{}, "post:SignUp"),
43
-
44
-		// 登录
45
-		beego.NSRouter("/signin", &user.UserController{}, "post:SignIn"),
46
-	)
47
-}
1
+package routers
2
+
3
+import (
4
+	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/controllers/cases"
6
+	"spaceofcheng/services/controllers/course"
7
+	"spaceofcheng/services/controllers/customer"
8
+	"spaceofcheng/services/controllers/goods"
9
+	"spaceofcheng/services/controllers/message"
10
+	"spaceofcheng/services/controllers/user"
11
+
12
+	"github.com/astaxie/beego"
13
+)
14
+
15
+func getGuestRoutes() beego.LinkNamespace {
16
+	prefix := beego.AppConfig.String("api::guest")
17
+
18
+	return beego.NSNamespace(prefix,
19
+		// cms
20
+		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoByLocation"),
21
+		beego.NSRouter("/cms/img", &message.MessageController{}, "get:GetImgByLocation"),
22
+		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
23
+		beego.NSRouter("/cms/case", &message.MessageController{}, "get:GetCmsCaseList"),
24
+		beego.NSRouter("/cms/location", &message.MessageController{}, "get:GetLocations"),
25
+		beego.NSRouter("/cms/course", &course.CourseController{}, "get:GetCourseByLocation"),
26
+		beego.NSRouter("/cms/case/:cmscaseid", &message.MessageController{}, "get:GetCmsCaseByID"),
27
+
28
+		// 课程
29
+		beego.NSRouter("/course/:courseid", &course.CourseController{}, "get:GetCourseByID"),
30
+
31
+		// 案场
32
+		beego.NSRouter("/case", &cases.CaseController{}, "get:GetOrgCases"),
33
+
34
+		// 商品制作状态
35
+		beego.NSRouter("/dict/order/makestatus", &goods.GoodsController{}, "get:GetMakeStatus"),
36
+
37
+		// 商品
38
+		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListForWechat"),
39
+
40
+		// 验证码 获取, 校验
41
+		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),
42
+		beego.NSRouter("/captcha", &controllers.BaseController{}, "post:ValidCaptcha"),
43
+
44
+		// 微信 登录, 注册
45
+		beego.NSRouter("/wxsignin", &customer.CustomerController{}, "post:SignIn"),
46
+		beego.NSRouter("/wxsignup", &customer.CustomerController{}, "post:SignUp"),
47
+
48
+		// 登录
49
+		beego.NSRouter("/signin", &user.UserController{}, "post:SignIn"),
50
+	)
51
+}

+ 3
- 3
service/course/course.go Vedi File

134
 	if course.BeginDate.IsZero() || course.EndDate.IsZero() {
134
 	if course.BeginDate.IsZero() || course.EndDate.IsZero() {
135
 		return nil, utils.LogError("课程时间不允许为空!")
135
 		return nil, utils.LogError("课程时间不允许为空!")
136
 	}
136
 	}
137
-	if course.EndDate.After(course.BeginDate) {
137
+	if !course.EndDate.After(course.BeginDate) {
138
 		return nil, utils.LogError("截止时间必须大于开始时间!")
138
 		return nil, utils.LogError("截止时间必须大于开始时间!")
139
 	}
139
 	}
140
 	if tagids == "" {
140
 	if tagids == "" {
176
 			tagid = newtag.TagId
176
 			tagid = newtag.TagId
177
 		}
177
 		}
178
 		var coursetag = model.TaCourseTag{
178
 		var coursetag = model.TaCourseTag{
179
-			CourseId: course.CourseId,
179
+			CourseId: newInfo.CourseId,
180
 			TagId:    tagid,
180
 			TagId:    tagid,
181
 		}
181
 		}
182
 		courseTags = append(courseTags, coursetag)
182
 		courseTags = append(courseTags, coursetag)
306
 }
306
 }
307
 
307
 
308
 // GetDetails 获取所有排课
308
 // GetDetails 获取所有排课
309
-func (s *CourseServ) GetDetails(caseid, date string) ([]model.TaCourseDetail, error) {
309
+func (s *CourseServ) GetDetails(caseid, date string) ([]course.DetailInfo, error) {
310
 	if caseid == "" {
310
 	if caseid == "" {
311
 		return nil, utils.LogError("请先选择案场!")
311
 		return nil, utils.LogError("请先选择案场!")
312
 	}
312
 	}

+ 2
- 0
service/course/order.go Vedi File

33
 		couseOrder.PayType = models.CONSUME_COUPON
33
 		couseOrder.PayType = models.CONSUME_COUPON
34
 	}
34
 	}
35
 
35
 
36
+	// TODO
36
 	// 校验案场
37
 	// 校验案场
37
 	// caseID := couseOrder.CaseId
38
 	// caseID := couseOrder.CaseId
38
 	// if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
39
 	// if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
245
 		OrgId:            order.OrgId,
246
 		OrgId:            order.OrgId,
246
 		CaseId:           order.CaseId,
247
 		CaseId:           order.CaseId,
247
 		CourseName:       course.CourseName,
248
 		CourseName:       course.CourseName,
249
+		LocationId:       course.LocationId,
248
 		Price:            course.Price,
250
 		Price:            course.Price,
249
 		CourseNum:        course.CourseNum,
251
 		CourseNum:        course.CourseNum,
250
 		JoinNum:          0,
252
 		JoinNum:          0,

+ 177
- 0
service/marketing/marketing.go Vedi File

1
+package marketing
2
+
3
+import(
4
+	"spaceofcheng/services/models/marketing"
5
+	"spaceofcheng/services/utils"
6
+	"spaceofcheng/services/service"
7
+	"spaceofcheng/services/models/model"
8
+	"github.com/astaxie/beego"
9
+)
10
+
11
+// MarketingServ 系统处理
12
+type MarketingServ struct {
13
+	ctx     *utils.Context
14
+	dao     *marketing.MarketingDAO
15
+	wdao    *marketing.WorkDAO
16
+}
17
+
18
+// NewMarketingServ 初始化
19
+func NewMarketingServ(ctx *utils.Context) *MarketingServ {
20
+	return &MarketingServ{
21
+		ctx:     ctx,
22
+		dao:     marketing.NewMarketingDAO(ctx),
23
+	}
24
+}
25
+
26
+// GetCustWithWXList 获取客户列表
27
+func (s *MarketingServ) GetMarketingList(page int, pageSize int) (map[string]interface{}, error) {
28
+
29
+	if pageSize == 0 {
30
+		pageSize = service.PAGENUM
31
+	}
32
+	if page == 0 {
33
+		page = 1
34
+	}
35
+
36
+	list,err := s.dao.GetMarketingList(page,pageSize)
37
+	if err != nil {
38
+		beego.Error(err)
39
+		return nil, err
40
+	}
41
+
42
+	total, err := s.dao.GetMarketingCount()
43
+
44
+	return map[string]interface{}{
45
+		"list":     list,
46
+		"pagesize": pageSize,
47
+		"pagenum":  total,
48
+		"page":     page,
49
+	}, err
50
+}
51
+
52
+// 保存 营销活动
53
+/**
54
+	* resource_desc 活动描述
55
+	*/
56
+func (s *MarketingServ) SaveMarketing(activity model.SysActivity,resourceDesc string) (*model.SysActivity,*model.SysActivityAction, error) {
57
+
58
+	var newInfo *model.SysActivity
59
+	var newWoke *model.SysActivityAction
60
+
61
+	var err error
62
+	// 存储 营销活动
63
+	newInfo,err = s.dao.AddMarketing(&activity)
64
+	if err != nil {
65
+		return nil,nil, err
66
+	}
67
+	
68
+	woke := model.SysActivityAction{}
69
+	woke.ActivityId = newInfo.ActivityId
70
+	woke.ActiveType = newInfo.ActivityType
71
+	woke.ResourceDesc = resourceDesc
72
+
73
+	// 存储 活动动作
74
+	newWoke,err = s.wdao.AddWork(&woke)
75
+	if err != nil {
76
+		return nil,nil, err
77
+	}
78
+
79
+	return newInfo,newWoke,err
80
+
81
+}
82
+
83
+// GetMarketingById 根据ID查询数据
84
+func (s *MarketingServ) GetMarketingById(activityId string) (*model.SysActivity,error){
85
+
86
+	if activityId == "" {
87
+		return nil,utils.LogError("不存在营销信息!")
88
+	}
89
+
90
+	info,err:= s.dao.GetMarketingById(activityId)
91
+	if err != nil {
92
+		return nil, err
93
+	}
94
+	if info == nil {
95
+		return nil,utils.LogError("不存在营销信息!")
96
+	}
97
+	if info.Status == marketing.DELETE {
98
+		return nil, utils.LogError("营销信息已被删除!")
99
+	}
100
+
101
+	return info,err
102
+
103
+}
104
+
105
+// DelMarketing 删除 根据ID删除数据
106
+func (s *MarketingServ) DelMarketing(activityId string) error {
107
+
108
+	if activityId == "" {
109
+		return utils.LogError("没有对应的营销活动")
110
+	}
111
+
112
+	info,err := s.dao.GetMarketingById(activityId)
113
+	if err != nil {
114
+		return err
115
+	}
116
+	// 判断状态是否被删除
117
+	if info.Status == marketing.DELETE {
118
+		return utils.LogError("营销状态异常")
119
+	}
120
+	err = s.dao.DelMarketing(activityId,marketing.DELETE)
121
+	return err;
122
+
123
+}
124
+
125
+// DelMarketing  根据ID 修改状态为 正常
126
+func (s *MarketingServ) DelMarketingNormal(activityId string) error {
127
+
128
+	if activityId == "" {
129
+		return utils.LogError("没有对应的营销活动")
130
+	}
131
+
132
+	info,err := s.dao.GetMarketingById(activityId)
133
+	if err != nil {
134
+		return err
135
+	}
136
+	// 判断状态是否已经是正常
137
+	if info.Status == marketing.NORMAL {
138
+		return utils.LogError("营销状态异常")
139
+	}
140
+	err = s.dao.DelMarketing(activityId,marketing.NORMAL)
141
+	return err;
142
+
143
+}
144
+
145
+// DelMarketing  根据ID 修改状态为 停用
146
+func (s *MarketingServ) DelMarketingDisable(activityId string) error {
147
+
148
+	if activityId == "" {
149
+		return utils.LogError("没有对应的营销活动")
150
+	}
151
+
152
+	info,err := s.dao.GetMarketingById(activityId)
153
+	if err != nil {
154
+		return err
155
+	}
156
+	// 判断状态是否已经是停用
157
+	if info.Status == marketing.DISABLE {
158
+		return utils.LogError("营销状态异常")
159
+	}
160
+	err = s.dao.DelMarketing(activityId,marketing.DISABLE)
161
+	return err;
162
+
163
+}
164
+
165
+
166
+// UpdateMarketing 修改 营销活动
167
+func (s *MarketingServ) UpdateMarketing(activity model.SysActivity) error {
168
+	if activity.ActivityId == "" {
169
+		return utils.LogError("没有对应的营销活动")
170
+	}
171
+	err := s.dao.UpdateMarketing(activity)
172
+	return err
173
+}
174
+
175
+
176
+
177
+

+ 46
- 0
service/marketing/work.go Vedi File

1
+package marketing
2
+
3
+
4
+import(
5
+	"spaceofcheng/services/models/marketing"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/utils"
8
+
9
+)
10
+
11
+
12
+// MarketingServ 系统处理
13
+type WorkServ struct {
14
+	ctx     *utils.Context
15
+	dao     *marketing.WorkDAO
16
+}
17
+
18
+// NewMarketingServ 初始化
19
+func NewWorkServ(ctx *utils.Context) *WorkServ {
20
+	return &WorkServ{
21
+		ctx:     ctx,
22
+		dao:     marketing.NewWorkDAO(ctx),
23
+	}
24
+}
25
+
26
+// 保存 Work
27
+func (s *WorkServ) SaveWork(work *model.SysActivityAction)  (*model.SysActivityAction, error){
28
+		var newInfo *model.SysActivityAction
29
+		if work.ActivityId == "" {
30
+			return nil, utils.LogError("营销编号为空!")
31
+		}
32
+		
33
+		newInfo,err := s.dao.AddWork(work)
34
+		
35
+		if err != nil {
36
+			return nil, err
37
+		}
38
+
39
+		return newInfo,nil
40
+
41
+}
42
+
43
+
44
+
45
+
46
+

+ 39
- 16
service/message/cmscase.go Vedi File

2
 
2
 
3
 import (
3
 import (
4
 	"spaceofcheng/services/models"
4
 	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/course"
5
 	"spaceofcheng/services/models/message"
6
 	"spaceofcheng/services/models/message"
6
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/models/model"
7
 	"spaceofcheng/services/service"
8
 	"spaceofcheng/services/service"
63
 		beego.Error(err)
64
 		beego.Error(err)
64
 		return nil, err
65
 		return nil, err
65
 	}
66
 	}
66
-	var course []model.TaCourse
67
-	if info.IsAllCourse == 1 {
68
-		course, err = s.dao.GetCourseByCaseID(info.CaseId)
69
-	} else {
70
-		course, err = s.dao.GetCoursesByCmsCase(info.CmsCaseId)
71
-	}
72
-	if err != nil {
73
-		beego.Error(err)
74
-		return nil, err
75
-	}
76
-	info.Courses = course
67
+	if info != nil {
68
+		var courses []course.CourseDetail
69
+		if info.IsAllCourse == 1 {
70
+			courses, err = s.dao.GetCourseByCaseID(info.CaseId)
71
+		} else {
72
+			courses, err = s.dao.GetCoursesByCmsCase(info.CmsCaseId)
73
+		}
74
+		if err != nil {
75
+			beego.Error(err)
76
+			return nil, err
77
+		}
77
 
78
 
78
-	imgs, err := s.dao.GetCmsCaseImgs(info.CmsCaseId)
79
-	if err != nil {
80
-		beego.Error(err)
81
-		return nil, err
79
+		for inx, course := range courses {
80
+			tags, err := s.coursedao.GetCourseTag(course.CourseId)
81
+			if err != nil {
82
+				return nil, err
83
+			}
84
+			courses[inx].CourseTags = tags
85
+			details, err := s.coursedao.GetCourseDetail(course.CourseId)
86
+			if err != nil {
87
+				return nil, err
88
+			}
89
+			courses[inx].CourseDetail = details
90
+			imgs, err := s.coursedao.GetCourseImgs(course.CourseId)
91
+			if err != nil {
92
+				return nil, err
93
+			}
94
+			courses[inx].CourseImgs = imgs
95
+		}
96
+
97
+		info.Courses = courses
98
+
99
+		imgs, err := s.dao.GetCmsCaseImgs(info.CmsCaseId)
100
+		if err != nil {
101
+			beego.Error(err)
102
+			return nil, err
103
+		}
104
+		info.CmsCaseImgs = imgs
82
 	}
105
 	}
83
-	info.CmsCaseImgs = imgs
106
+
84
 	return info, nil
107
 	return info, nil
85
 }
108
 }
86
 
109
 

+ 7
- 4
service/message/message.go Vedi File

1
 package message
1
 package message
2
 
2
 
3
 import (
3
 import (
4
+	"spaceofcheng/services/models/course"
4
 	"spaceofcheng/services/models/message"
5
 	"spaceofcheng/services/models/message"
5
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/models/model"
6
 	"spaceofcheng/services/service"
7
 	"spaceofcheng/services/service"
11
 
12
 
12
 // MessageServ 系统处理
13
 // MessageServ 系统处理
13
 type MessageServ struct {
14
 type MessageServ struct {
14
-	ctx *utils.Context
15
-	dao *message.MessageDAO
15
+	ctx       *utils.Context
16
+	dao       *message.MessageDAO
17
+	coursedao *course.CourseDAO
16
 }
18
 }
17
 
19
 
18
 // NewMessageServ 初始化
20
 // NewMessageServ 初始化
19
 func NewMessageServ(ctx *utils.Context) *MessageServ {
21
 func NewMessageServ(ctx *utils.Context) *MessageServ {
20
 	return &MessageServ{
22
 	return &MessageServ{
21
-		ctx: ctx,
22
-		dao: message.NewMessageDAO(ctx),
23
+		ctx:       ctx,
24
+		dao:       message.NewMessageDAO(ctx),
25
+		coursedao: course.NewCourseDAO(ctx),
23
 	}
26
 	}
24
 }
27
 }
25
 
28
 

+ 162
- 0
service/verify/verify.go Vedi File

1
+package verify
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/customer"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/models/verify"
8
+	"spaceofcheng/services/service"
9
+	"spaceofcheng/services/utils"
10
+	"time"
11
+
12
+	"github.com/astaxie/beego"
13
+)
14
+
15
+// CaseServ 系统处理
16
+type VerifyServ struct {
17
+	ctx  *utils.Context
18
+	dao  *verify.VerifyDAO
19
+	cdao *customer.CustomerDAO
20
+}
21
+
22
+// NewVerifyServ 初始化
23
+func NewVerifyServ(ctx *utils.Context) *VerifyServ {
24
+	return &VerifyServ{
25
+		ctx:  ctx,
26
+		dao:  verify.NewVerifyDAO(ctx),
27
+		cdao: customer.NewCustomerDAO(ctx),
28
+	}
29
+}
30
+
31
+// GetCustomerCourseDetailById 根据ID获取当日可核销课程
32
+func (s *VerifyServ) GetCustomerCourseDetailById(id, caseid string, page, pageSize int) (map[string]interface{}, error) {
33
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseid); err != nil {
34
+		return nil, err
35
+	}
36
+	if pageSize == 0 {
37
+		pageSize = service.PAGENUM
38
+	}
39
+	if page == 0 {
40
+		page = 1
41
+	}
42
+	customerDetail, err := s.dao.GetCustomerCourseList(id, caseid, page, pageSize)
43
+	if err != nil {
44
+		beego.Error(err)
45
+		return nil, err
46
+	}
47
+	customerId := customerDetail[0].CustomerId
48
+	total, err := s.dao.GetCustomerCourseListCount(id, caseid)
49
+	if err != nil {
50
+		beego.Error(err)
51
+		return nil, err
52
+	}
53
+	beego.Error(customerId)
54
+	customer, err := s.cdao.GetCustomerByID(customerId)
55
+	if err != nil {
56
+		beego.Error(err)
57
+		return nil, err
58
+	}
59
+	return map[string]interface{}{
60
+		"list":         customerDetail,
61
+		"pagesize":     pageSize,
62
+		"pagenum":      total,
63
+		"page":         page,
64
+		"customerInfo": customer,
65
+	}, err
66
+}
67
+
68
+// GetCustomerCourseDetailByTel根据电话号码获取当日可核销课程
69
+func (s *VerifyServ) GetCustomerCourseDetailByTel(tel, caseid string, page, pageSize int) (map[string]interface{}, error) {
70
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseid); err != nil {
71
+		return nil, err
72
+	}
73
+	if pageSize == 0 {
74
+		pageSize = service.PAGENUM
75
+	}
76
+	if page == 0 {
77
+		page = 1
78
+	}
79
+	customerDetail, err := s.dao.GetCustomerCourseListByTel(tel, caseid, page, pageSize)
80
+	if err != nil {
81
+		beego.Error(err)
82
+		return nil, err
83
+	}
84
+	customerId := customerDetail[0].CustomerId
85
+	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseid)
86
+	if err != nil {
87
+		beego.Error(err)
88
+		return nil, err
89
+	}
90
+	customer, err := s.cdao.GetCustomerByID(customerId)
91
+	if err != nil {
92
+		beego.Error(err)
93
+		return nil, err
94
+	}
95
+	return map[string]interface{}{
96
+		"list":         customerDetail,
97
+		"pagesize":     pageSize,
98
+		"pagenum":      total,
99
+		"page":         page,
100
+		"customerInfo": customer,
101
+	}, err
102
+
103
+}
104
+func (s *VerifyServ) GetCustomerCourseDetailByDetailId(id string) (*model.TaCustomerCourseDetail, error) {
105
+	customerDetail, err := s.dao.GetCustomerCourseDetailById(id)
106
+	return customerDetail, err
107
+}
108
+
109
+// UpdateCustomerCourseDetail更新我的课程详情
110
+func (s *VerifyServ) UpdateCustomerCourseDetail(customerDetail *model.TaCustomerCourseDetail, userid string) error {
111
+	var err error
112
+	customerDetail.VerifyDate = time.Now()
113
+	customerDetail.VerifyUser = userid
114
+	if time.Now().After(customerDetail.EndDate) {
115
+		customerDetail.VerifyStatus = "late"
116
+	} else {
117
+		customerDetail.VerifyStatus = "used"
118
+	}
119
+	err = s.dao.UpdateCustomerCourseDetail(customerDetail)
120
+	return err
121
+}
122
+
123
+// UpdateCustomerCard 更新我的体验卡
124
+func (s *VerifyServ) UpdateCustomerCard(customerCard *model.TaCustomerCard) error {
125
+	var err error
126
+	customerCard.VerifyDate = time.Now()
127
+	err = s.dao.UpdateCustomerCard(customerCard)
128
+	return err
129
+
130
+}
131
+
132
+// UpdateCustomerCourse 更新我的课程
133
+func (s *VerifyServ) UpdateCustomerCourse(customerCourse *model.TaCustomerCourse) error {
134
+	var err error
135
+	customerCourse.JoinNum = customerCourse.JoinNum + 1
136
+	if customerCourse.JoinNum >= customerCourse.CourseNum {
137
+		customerCourse.IsDone = models.BOOL_TRUE
138
+	}
139
+	err = s.dao.UpdateCustomerCourse(customerCourse)
140
+	return err
141
+
142
+}
143
+
144
+// GetCustomerCardByDetailId 根据我的课程详情id获取体验卡
145
+func (s *VerifyServ) GetCustomerCardByDetailId(detailId string) (*model.TaCustomerCard, error) {
146
+	customerCard, err := s.dao.GetCustomerCardByDetailId(detailId)
147
+	if err != nil {
148
+		beego.Error(err)
149
+		return nil, err
150
+	}
151
+	return customerCard, err
152
+}
153
+
154
+// GetCustomerCourseByDetailId 根据我的课程详情id获取我的课程
155
+func (s *VerifyServ) GetCustomerCourseByDetailId(detailId string) (*model.TaCustomerCourse, error) {
156
+	customerCourse, err := s.dao.GetCustomerCourseByDetailId(detailId)
157
+	if err != nil {
158
+		beego.Error(err)
159
+		return nil, err
160
+	}
161
+	return customerCourse, err
162
+}