ソースを参照

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

胡轶钦 6 年 前
コミット
68755fba4b

+ 1
- 1
conf/log.conf ファイルの表示

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

+ 169
- 0
controllers/coupon/coupon.go ファイルの表示

@@ -0,0 +1,169 @@
1
+package coupon
2
+
3
+import (
4
+	"encoding/json"
5
+	"errors"
6
+	"net/http"
7
+	"spaceofcheng/services/controllers"
8
+	cpModel "spaceofcheng/services/models/coupon"
9
+	"spaceofcheng/services/service/coupon"
10
+	"spaceofcheng/services/utils"
11
+	"strings"
12
+)
13
+
14
+// CouponController 商品
15
+type CouponController struct {
16
+	serv *coupon.CouponServ
17
+	controllers.BaseController
18
+}
19
+
20
+// Constructor 初始化 Controller
21
+// @Title Constructor
22
+// @Description 初始化 Controller, 系统自动调用
23
+func (c *CouponController) Constructor() {
24
+	c.serv = coupon.NewCouponServ(c.Context)
25
+}
26
+
27
+// ListByCase 获取券列表
28
+func (c *CouponController) ListByCase() {
29
+	caseID := c.GetString("caseid")
30
+
31
+	page, _ := c.GetInt("page")
32
+	pagesize, _ := c.GetInt("pagesize")
33
+	if page < 0 {
34
+		page = 1
35
+	}
36
+
37
+	if pagesize <= 0 {
38
+		pagesize = 10
39
+	}
40
+
41
+	list, total, err := c.serv.GetCouponList(caseID, page, pagesize)
42
+	if err != nil {
43
+		c.ResponseError(err)
44
+	}
45
+
46
+	c.ResponseJSON(map[string]interface{}{
47
+		"list":     list,
48
+		"page":     page,
49
+		"pagesize": pagesize,
50
+		"pagenum":  total,
51
+	})
52
+}
53
+
54
+// GetCouponByIDForAdmin 获取优惠券
55
+// 管理端
56
+func (c *CouponController) GetCouponByIDForAdmin() {
57
+	id := c.GetString(":id")
58
+	if id == "" {
59
+		c.ResponseError(errors.New("未指定券"))
60
+	}
61
+
62
+	cp, err := c.serv.GetCouponByIDWithCheck(id)
63
+	if err != nil {
64
+		c.ResponseError(err)
65
+	}
66
+
67
+	c.ResponseJSON(map[string]interface{}{
68
+		"coupon": cp,
69
+	})
70
+}
71
+
72
+// GetCouponByID 获取优惠券
73
+// 微信端
74
+func (c *CouponController) GetCouponByID() {
75
+	id := c.GetString(":id")
76
+	if id == "" {
77
+		c.ResponseError(errors.New("未指定券"))
78
+	}
79
+
80
+	cp, err := c.serv.GetCouponByID(id)
81
+	if err != nil {
82
+		c.ResponseError(err)
83
+	}
84
+
85
+	c.ResponseJSON(map[string]interface{}{
86
+		"coupon": cp,
87
+	})
88
+}
89
+
90
+// SaveCoupon 保存优惠券
91
+func (c *CouponController) SaveCoupon() {
92
+	jsnStr := c.GetString("info")
93
+	if jsnStr == "" {
94
+		c.ResponseError(errors.New("未接收到保存内容"))
95
+	}
96
+
97
+	cp := cpModel.CouponInfo{}
98
+
99
+	if err := json.Unmarshal([]byte(jsnStr), &cp); err != nil {
100
+		utils.LogError("接收优惠券信息失败: " + err.Error())
101
+		c.ResponseError(errors.New("接收参数失败"), http.StatusInternalServerError)
102
+	}
103
+
104
+	// TODO
105
+	// 校验各字段不能为空
106
+
107
+	// 入库
108
+	cp.CouponId = ""
109
+	if err := c.serv.SaveCoupon(&cp); err != nil {
110
+		c.ResponseError(err)
111
+	}
112
+
113
+	c.ResponseJSON(map[string]interface{}{
114
+		"coupon": cp,
115
+	})
116
+}
117
+
118
+// UpdateCoupon 更新优惠券
119
+func (c *CouponController) UpdateCoupon() {
120
+	jsnStr := c.GetString("info")
121
+	if jsnStr == "" {
122
+		c.ResponseError(errors.New("未接收到更新内容"))
123
+	}
124
+
125
+	id := c.GetString(":id")
126
+	if id == "" {
127
+		c.ResponseError(errors.New("未指定券"))
128
+	}
129
+
130
+	cp := cpModel.CouponInfo{}
131
+
132
+	if err := json.Unmarshal([]byte(jsnStr), &cp); err != nil {
133
+		utils.LogError("接收优惠券信息失败: " + err.Error())
134
+		c.ResponseError(errors.New("接收参数失败"), http.StatusInternalServerError)
135
+	}
136
+
137
+	// TODO
138
+	// 校验各字段不能为空
139
+
140
+	// 入库
141
+	cp.CouponId = id
142
+	if err := c.serv.UpdateCoupon(&cp); err != nil {
143
+		c.ResponseError(err)
144
+	}
145
+
146
+	c.ResponseJSON(map[string]interface{}{
147
+		"coupon": cp,
148
+	})
149
+}
150
+
151
+// GiveCoupon 赠送优惠券
152
+func (c *CouponController) GiveCoupon() {
153
+	id := c.GetString(":id")
154
+	if id == "" {
155
+		c.ResponseError(errors.New("未指定券"))
156
+	}
157
+
158
+	uids := c.GetString(":users")
159
+	if uids == "" {
160
+		c.ResponseError(errors.New("未指定赠送人"))
161
+	}
162
+
163
+	err := c.serv.GiveCoupon(id, strings.Split(uids, ","))
164
+	if err != nil {
165
+		c.ResponseError(err)
166
+	}
167
+
168
+	c.ResponseJSON("ok")
169
+}

+ 603
- 0
log/common.log ファイルの表示

@@ -3060,3 +3060,606 @@
3060 3060
 2018/09/11 17:57:59 [E] 用户没有设置默认案场
3061 3061
 2018/09/11 17:58:51 [E] 用户没有设置默认案场
3062 3062
 2018/09/11 18:00:05 [E] 用户没有设置默认案场
3063
+2018/09/12 09:39:30 [E] 用户没有设置默认案场
3064
+2018/09/12 09:40:06 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3065
+2018/09/12 09:40:06 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_OC15Gmge9rmTgj9gghR_fcN6dwBUGKeKYm2z-QpGRi5hcBwdzb690dlyJjw4HMm2khywsPH2Eb-f75dx7YmAE9k6y_T_YLiNLw_9XJjts1tChoN6PTPeKeBurmt8CO-eO6AAfeGCETqAEJl2ZALfABASTE","expires_in":7200})
3066
+2018/09/12 09:40:06 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_OC15Gmge9rmTgj9gghR_fcN6dwBUGKeKYm2z-QpGRi5hcBwdzb690dlyJjw4HMm2khywsPH2Eb-f75dx7YmAE9k6y_T_YLiNLw_9XJjts1tChoN6PTPeKeBurmt8CO-eO6AAfeGCETqAEJl2ZALfABASTE expires_in:7200])
3067
+2018/09/12 09:41:35 [E] 用户没有设置默认案场
3068
+2018/09/12 09:41:36 [E] 用户没有设置默认案场
3069
+2018/09/12 09:42:26 [E] 用户没有设置默认案场
3070
+2018/09/12 09:42:26 [E] 用户没有设置默认案场
3071
+2018/09/12 09:42:26 [E] 用户没有设置默认案场
3072
+2018/09/12 09:43:03 [E] 用户没有设置默认案场
3073
+2018/09/12 09:43:03 [E] 用户没有设置默认案场
3074
+2018/09/12 09:43:06 [E] 用户没有设置默认案场
3075
+2018/09/12 09:43:06 [E] 用户没有设置默认案场
3076
+2018/09/12 09:43:23 [E] 用户没有设置默认案场
3077
+2018/09/12 09:43:23 [E] 用户没有设置默认案场
3078
+2018/09/12 09:43:26 [E] 用户没有设置默认案场
3079
+2018/09/12 09:43:27 [E] 用户没有设置默认案场
3080
+2018/09/12 09:43:28 [E] 用户没有设置默认案场
3081
+2018/09/12 09:43:28 [E] 用户没有设置默认案场
3082
+2018/09/12 09:43:39 [E] 用户没有设置默认案场
3083
+2018/09/12 09:43:39 [E] 用户没有设置默认案场
3084
+2018/09/12 09:43:47 [E] 用户没有设置默认案场
3085
+2018/09/12 09:43:47 [E] 用户没有设置默认案场
3086
+2018/09/12 09:48:14 [E] 用户没有设置默认案场
3087
+2018/09/12 09:48:14 [E] 用户没有设置默认案场
3088
+2018/09/12 09:48:52 [E] 用户没有设置默认案场
3089
+2018/09/12 09:48:59 [E] 用户没有设置默认案场
3090
+2018/09/12 09:48:59 [E] 用户没有设置默认案场
3091
+2018/09/12 09:49:21 [E] 用户没有设置默认案场
3092
+2018/09/12 09:49:24 [E] 用户没有设置默认案场
3093
+2018/09/12 09:49:24 [E] 用户没有设置默认案场
3094
+2018/09/12 09:49:33 [E] 用户没有设置默认案场
3095
+2018/09/12 09:49:39 [E] 用户没有设置默认案场
3096
+2018/09/12 09:49:39 [E] 用户没有设置默认案场
3097
+2018/09/12 09:50:00 [E] 用户没有设置默认案场
3098
+2018/09/12 09:50:06 [E] 用户没有设置默认案场
3099
+2018/09/12 09:50:08 [E] 用户没有设置默认案场
3100
+2018/09/12 09:50:11 [E] 用户没有设置默认案场
3101
+2018/09/12 09:50:11 [E] 用户没有设置默认案场
3102
+2018/09/12 09:50:16 [E] 用户没有设置默认案场
3103
+2018/09/12 09:50:16 [E] 用户没有设置默认案场
3104
+2018/09/12 09:50:31 [E] 用户没有设置默认案场
3105
+2018/09/12 09:50:34 [E] 用户没有设置默认案场
3106
+2018/09/12 09:50:34 [E] 用户没有设置默认案场
3107
+2018/09/12 09:51:21 [E] 用户没有设置默认案场
3108
+2018/09/12 09:51:21 [E] 用户没有设置默认案场
3109
+2018/09/12 09:51:56 [E] 用户没有设置默认案场
3110
+2018/09/12 09:52:25 [E] 用户没有设置默认案场
3111
+2018/09/12 09:53:22 [E] 用户没有设置默认案场
3112
+2018/09/12 09:53:22 [E] 用户没有设置默认案场
3113
+2018/09/12 09:53:24 [E] 用户没有设置默认案场
3114
+2018/09/12 09:53:24 [E] 用户没有设置默认案场
3115
+2018/09/12 09:53:25 [E] 用户没有设置默认案场
3116
+2018/09/12 09:53:35 [E] 用户没有设置默认案场
3117
+2018/09/12 09:53:38 [E] 用户没有设置默认案场
3118
+2018/09/12 09:53:38 [E] 用户没有设置默认案场
3119
+2018/09/12 09:53:40 [E] 用户没有设置默认案场
3120
+2018/09/12 09:53:43 [E] 用户没有设置默认案场
3121
+2018/09/12 09:53:43 [E] 用户没有设置默认案场
3122
+2018/09/12 09:54:57 [E] 用户没有设置默认案场
3123
+2018/09/12 09:54:57 [E] 用户没有设置默认案场
3124
+2018/09/12 09:54:58 [E] 用户没有设置默认案场
3125
+2018/09/12 09:54:58 [E] 用户没有设置默认案场
3126
+2018/09/12 09:54:59 [E] 用户没有设置默认案场
3127
+2018/09/12 09:59:23 [E] 用户没有设置默认案场
3128
+2018/09/12 10:00:22 [E] 用户没有设置默认案场
3129
+2018/09/12 10:00:22 [E] 用户没有设置默认案场
3130
+2018/09/12 10:00:48 [E] 用户没有设置默认案场
3131
+2018/09/12 10:01:02 [E] 用户没有设置默认案场
3132
+2018/09/12 10:01:02 [E] 用户没有设置默认案场
3133
+2018/09/12 10:01:03 [E] 用户没有设置默认案场
3134
+2018/09/12 10:01:05 [E] 用户没有设置默认案场
3135
+2018/09/12 10:01:05 [E] 用户没有设置默认案场
3136
+2018/09/12 10:01:05 [E] 用户没有设置默认案场
3137
+2018/09/12 10:03:10 [E] 用户没有设置默认案场
3138
+2018/09/12 10:03:10 [E] 用户没有设置默认案场
3139
+2018/09/12 10:03:10 [E] 用户没有设置默认案场
3140
+2018/09/12 10:03:10 [E] 用户没有设置默认案场
3141
+2018/09/12 10:03:25 [E] 用户没有设置默认案场
3142
+2018/09/12 10:03:26 [E] 用户没有设置默认案场
3143
+2018/09/12 10:03:26 [E] 用户没有设置默认案场
3144
+2018/09/12 10:04:16 [E] 用户没有设置默认案场
3145
+2018/09/12 10:04:16 [E] 用户没有设置默认案场
3146
+2018/09/12 10:04:16 [E] 用户没有设置默认案场
3147
+2018/09/12 10:07:16 [E] 用户没有设置默认案场
3148
+2018/09/12 10:08:31 [E] 用户没有设置默认案场
3149
+2018/09/12 10:08:31 [E] 用户没有设置默认案场
3150
+2018/09/12 10:08:31 [E] 用户没有设置默认案场
3151
+2018/09/12 10:08:33 [E] 用户没有设置默认案场
3152
+2018/09/12 10:08:34 [E] 用户没有设置默认案场
3153
+2018/09/12 10:08:34 [E] 用户没有设置默认案场
3154
+2018/09/12 10:08:45 [E] 用户没有设置默认案场
3155
+2018/09/12 10:08:45 [E] 用户没有设置默认案场
3156
+2018/09/12 10:08:45 [E] 用户没有设置默认案场
3157
+2018/09/12 10:09:00 [E] 用户没有设置默认案场
3158
+2018/09/12 10:09:01 [E] 用户没有设置默认案场
3159
+2018/09/12 10:09:01 [E] 用户没有设置默认案场
3160
+2018/09/12 10:12:11 [E] 用户没有设置默认案场
3161
+2018/09/12 10:12:11 [E] 用户没有设置默认案场
3162
+2018/09/12 10:22:46 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3163
+2018/09/12 10:22:47 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_EwN2cbZUMOEXEUiNcIlzH2dMOQRu-NPQ0Pm92O6d1PyBc7-Y3qTnvtbGssRgu6ahy7xdZC2mWuhBZoUXwujJp-qScWSRXTBTVR2eaRzY1BDr0JkgQ3JyEO-Tw71CYSDkneFJ01HMrbwXDQaiWZFfAAAKNT","expires_in":7200})
3164
+2018/09/12 10:22:47 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_EwN2cbZUMOEXEUiNcIlzH2dMOQRu-NPQ0Pm92O6d1PyBc7-Y3qTnvtbGssRgu6ahy7xdZC2mWuhBZoUXwujJp-qScWSRXTBTVR2eaRzY1BDr0JkgQ3JyEO-Tw71CYSDkneFJ01HMrbwXDQaiWZFfAAAKNT expires_in:7200])
3165
+2018/09/12 10:35:17 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3166
+2018/09/12 10:35:17 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_8inPAb7cKbz4aVIf2IuhpSDriQBy87UH-yeqoMuC5I6sCcXbszS8xECxNXGv06IyhS-4SmdxkKD5-RgjjxTs4UMJ-LTP4mbEsNEtdzmENm06KYXAS4W3sLw45GNYqtkB1DsHASxr9koxohDZAGPeAFAKQZ","expires_in":7200})
3167
+2018/09/12 10:35:17 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_8inPAb7cKbz4aVIf2IuhpSDriQBy87UH-yeqoMuC5I6sCcXbszS8xECxNXGv06IyhS-4SmdxkKD5-RgjjxTs4UMJ-LTP4mbEsNEtdzmENm06KYXAS4W3sLw45GNYqtkB1DsHASxr9koxohDZAGPeAFAKQZ expires_in:7200])
3168
+2018/09/12 10:54:13 [E] 用户没有设置默认案场
3169
+2018/09/12 10:54:52 [E] 用户没有设置默认案场
3170
+2018/09/12 11:10:11 [E] 用户没有设置默认案场
3171
+2018/09/12 11:14:01 [E] 用户没有设置默认案场
3172
+2018/09/12 11:14:57 [E] 用户没有设置默认案场
3173
+2018/09/12 11:15:00 [E] 用户没有设置默认案场
3174
+2018/09/12 11:15:02 [E] 用户没有设置默认案场
3175
+2018/09/12 11:15:03 [E] 用户没有设置默认案场
3176
+2018/09/12 11:15:09 [E] 用户没有设置默认案场
3177
+2018/09/12 11:15:09 [E] 用户没有设置默认案场
3178
+2018/09/12 11:15:25 [E] 解密 Base64 字串失败: illegal base64 data at input byte 0
3179
+2018/09/12 11:15:25 [E] 获取组织信息失败: 没有查询到机构信息
3180
+2018/09/12 11:15:25 [E] 用户没有设置默认案场
3181
+2018/09/12 11:15:48 [E] 用户没有设置默认案场
3182
+2018/09/12 11:16:26 [E] 用户没有设置默认案场
3183
+2018/09/12 11:16:29 [E] 用户没有设置默认案场
3184
+2018/09/12 11:16:45 [E] 用户没有设置默认案场
3185
+2018/09/12 11:16:45 [E] 用户没有设置默认案场
3186
+2018/09/12 11:16:54 [E] 解密 Base64 字串失败: illegal base64 data at input byte 0
3187
+2018/09/12 11:16:54 [E] 获取组织信息失败: 没有查询到机构信息
3188
+2018/09/12 11:16:54 [E] 用户没有设置默认案场
3189
+2018/09/12 11:17:01 [E] 用户没有设置默认案场
3190
+2018/09/12 11:17:05 [E] 用户没有设置默认案场
3191
+2018/09/12 11:17:08 [E] 用户没有设置默认案场
3192
+2018/09/12 11:17:09 [E] 用户没有设置默认案场
3193
+2018/09/12 11:17:09 [E] 用户没有设置默认案场
3194
+2018/09/12 11:17:12 [E] 用户没有设置默认案场
3195
+2018/09/12 11:17:12 [E] 用户没有设置默认案场
3196
+2018/09/12 11:17:25 [E] 用户没有设置默认案场
3197
+2018/09/12 11:17:37 [E] 用户没有设置默认案场
3198
+2018/09/12 11:20:32 [E] 用户没有设置默认案场
3199
+2018/09/12 11:20:51 [E] 用户没有设置默认案场
3200
+2018/09/12 11:20:57 [E] 用户没有设置默认案场
3201
+2018/09/12 11:20:57 [E] 用户没有设置默认案场
3202
+2018/09/12 11:20:58 [E] 用户没有设置默认案场
3203
+2018/09/12 11:21:08 [E] 用户没有设置默认案场
3204
+2018/09/12 11:21:08 [E] 用户没有设置默认案场
3205
+2018/09/12 11:21:10 [E] 用户没有设置默认案场
3206
+2018/09/12 11:21:15 [E] 用户没有设置默认案场
3207
+2018/09/12 11:21:18 [E] 用户没有设置默认案场
3208
+2018/09/12 11:21:18 [E] 用户没有设置默认案场
3209
+2018/09/12 11:21:22 [E] 用户没有设置默认案场
3210
+2018/09/12 11:21:22 [E] 用户没有设置默认案场
3211
+2018/09/12 11:21:24 [E] 用户没有设置默认案场
3212
+2018/09/12 11:21:26 [E] 用户没有设置默认案场
3213
+2018/09/12 11:21:44 [E] 用户没有设置默认案场
3214
+2018/09/12 11:21:53 [E] 用户没有设置默认案场
3215
+2018/09/12 11:22:10 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3216
+2018/09/12 11:22:11 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_H0YONvl0O6RxeMajJpx7FaGHTMbuGAJ0c3XHxFQdxnQLy8RwDwFGxFXx964Yz_zaH7Uqt9iSPLuPxWafZeWJkJ21JQDx1Fnp5om1g0ppGWvwjxFtaOcMbpc42xAWTScAHAMJI","expires_in":7200})
3217
+2018/09/12 11:22:11 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_H0YONvl0O6RxeMajJpx7FaGHTMbuGAJ0c3XHxFQdxnQLy8RwDwFGxFXx964Yz_zaH7Uqt9iSPLuPxWafZeWJkJ21JQDx1Fnp5om1g0ppGWvwjxFtaOcMbpc42xAWTScAHAMJI expires_in:7200])
3218
+2018/09/12 11:22:45 [E] 用户没有设置默认案场
3219
+2018/09/12 11:23:02 [E] 用户没有设置默认案场
3220
+2018/09/12 11:23:04 [E] 用户没有设置默认案场
3221
+2018/09/12 11:23:07 [E] 用户没有设置默认案场
3222
+2018/09/12 11:23:07 [E] 用户没有设置默认案场
3223
+2018/09/12 11:23:21 [E] 用户没有设置默认案场
3224
+2018/09/12 11:23:27 [E] 用户没有设置默认案场
3225
+2018/09/12 11:23:56 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3226
+2018/09/12 11:23:56 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_D-cFwx0SKVT1vffkUp52tm86n8YYduWiX_1B5tZploz1PI4R9XeeR_lmwlkvswM-vvpinpqpRqTeurMb51supETRj3k776PkxH63ewEwUdVWtgsJqAQrBadFjp5PpLNE8o16vTh0bu60hVKjJREiAGAZHU","expires_in":7200})
3227
+2018/09/12 11:23:56 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_D-cFwx0SKVT1vffkUp52tm86n8YYduWiX_1B5tZploz1PI4R9XeeR_lmwlkvswM-vvpinpqpRqTeurMb51supETRj3k776PkxH63ewEwUdVWtgsJqAQrBadFjp5PpLNE8o16vTh0bu60hVKjJREiAGAZHU expires_in:7200])
3228
+2018/09/12 11:24:37 [E] 用户没有设置默认案场
3229
+2018/09/12 11:24:38 [E] 用户没有设置默认案场
3230
+2018/09/12 11:24:39 [E] 用户没有设置默认案场
3231
+2018/09/12 11:24:41 [E] 用户没有设置默认案场
3232
+2018/09/12 11:24:42 [E] 用户没有设置默认案场
3233
+2018/09/12 11:25:45 [E] 用户没有设置默认案场
3234
+2018/09/12 11:25:45 [E] 用户没有设置默认案场
3235
+2018/09/12 11:25:45 [E] 用户没有设置默认案场
3236
+2018/09/12 11:25:46 [E] 用户没有设置默认案场
3237
+2018/09/12 11:25:47 [E] 用户没有设置默认案场
3238
+2018/09/12 11:27:31 [E] 用户没有设置默认案场
3239
+2018/09/12 11:32:09 [E] 用户没有设置默认案场
3240
+2018/09/12 11:32:10 [E] 用户没有设置默认案场
3241
+2018/09/12 11:32:37 [E] 用户没有设置默认案场
3242
+2018/09/12 11:32:37 [E] 用户没有设置默认案场
3243
+2018/09/12 11:32:44 [E] 用户没有设置默认案场
3244
+2018/09/12 11:32:45 [E] 用户没有设置默认案场
3245
+2018/09/12 11:32:50 [E] 用户没有设置默认案场
3246
+2018/09/12 11:32:50 [E] 用户没有设置默认案场
3247
+2018/09/12 11:33:34 [E] 用户没有设置默认案场
3248
+2018/09/12 11:33:36 [E] 用户没有设置默认案场
3249
+2018/09/12 11:33:38 [E] 用户没有设置默认案场
3250
+2018/09/12 11:33:39 [E] 用户没有设置默认案场
3251
+2018/09/12 11:33:47 [E] 用户没有设置默认案场
3252
+2018/09/12 11:33:47 [E] 用户没有设置默认案场
3253
+2018/09/12 11:33:47 [E] 用户没有设置默认案场
3254
+2018/09/12 11:34:12 [E] 用户没有设置默认案场
3255
+2018/09/12 11:34:12 [E] 用户没有设置默认案场
3256
+2018/09/12 11:34:15 [E] 用户没有设置默认案场
3257
+2018/09/12 11:34:15 [E] 用户没有设置默认案场
3258
+2018/09/12 11:34:17 [E] 用户没有设置默认案场
3259
+2018/09/12 11:34:18 [E] 用户没有设置默认案场
3260
+2018/09/12 11:34:19 [E] 用户没有设置默认案场
3261
+2018/09/12 11:34:21 [E] 用户没有设置默认案场
3262
+2018/09/12 11:35:30 [E] 用户没有设置默认案场
3263
+2018/09/12 11:35:38 [E] 用户没有设置默认案场
3264
+2018/09/12 11:37:37 [E] 用户没有设置默认案场
3265
+2018/09/12 11:37:37 [E] 用户没有设置默认案场
3266
+2018/09/12 11:37:54 [E] 用户没有设置默认案场
3267
+2018/09/12 11:37:54 [E] 用户没有设置默认案场
3268
+2018/09/12 11:37:54 [E] 用户没有设置默认案场
3269
+2018/09/12 11:37:56 [E] 用户没有设置默认案场
3270
+2018/09/12 11:37:56 [E] 用户没有设置默认案场
3271
+2018/09/12 11:37:58 [E] 用户没有设置默认案场
3272
+2018/09/12 11:38:00 [E] 用户没有设置默认案场
3273
+2018/09/12 11:38:00 [E] 用户没有设置默认案场
3274
+2018/09/12 11:38:02 [E] 用户没有设置默认案场
3275
+2018/09/12 11:38:02 [E] 用户没有设置默认案场
3276
+2018/09/12 11:38:04 [E] 用户没有设置默认案场
3277
+2018/09/12 11:38:05 [E] 用户没有设置默认案场
3278
+2018/09/12 11:38:55 [E] 用户没有设置默认案场
3279
+2018/09/12 11:39:14 [E] 用户没有设置默认案场
3280
+2018/09/12 11:39:22 [E] 用户没有设置默认案场
3281
+2018/09/12 11:39:53 [E] 用户没有设置默认案场
3282
+2018/09/12 11:39:58 [E] 用户没有设置默认案场
3283
+2018/09/12 11:39:58 [E] 用户没有设置默认案场
3284
+2018/09/12 11:40:06 [E] 用户没有设置默认案场
3285
+2018/09/12 11:42:30 [E] 用户没有设置默认案场
3286
+2018/09/12 11:42:30 [E] 用户没有设置默认案场
3287
+2018/09/12 11:44:00 [E] 用户没有设置默认案场
3288
+2018/09/12 11:44:04 [E] 用户没有设置默认案场
3289
+2018/09/12 11:45:28 [E] 用户没有设置默认案场
3290
+2018/09/12 11:45:28 [E] 用户没有设置默认案场
3291
+2018/09/12 11:45:35 [E] 用户没有设置默认案场
3292
+2018/09/12 11:46:15 [E] 用户没有设置默认案场
3293
+2018/09/12 11:46:20 [E] 用户没有设置默认案场
3294
+2018/09/12 11:47:29 [E] 用户没有设置默认案场
3295
+2018/09/12 11:50:48 [E] 用户没有设置默认案场
3296
+2018/09/12 11:50:48 [E] 用户没有设置默认案场
3297
+2018/09/12 11:54:38 [E] 用户没有设置默认案场
3298
+2018/09/12 11:54:41 [E] 用户没有设置默认案场
3299
+2018/09/12 11:54:45 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3300
+2018/09/12 11:54:45 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_L00IPNlls6l1dGNP0yd2aut_EFTLarqBafPHq_E_tM25DjU6NPQo7qzIrMgL24pVA3yWhi6Au_PdiWdf70rGaGmGX_g-frOVC47uY4Wz_9PHlg0LLQ-EFYvLB8lxgqommPSv-FGWpiNYp-f5BVMcACASMD","expires_in":7200})
3301
+2018/09/12 11:54:45 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_L00IPNlls6l1dGNP0yd2aut_EFTLarqBafPHq_E_tM25DjU6NPQo7qzIrMgL24pVA3yWhi6Au_PdiWdf70rGaGmGX_g-frOVC47uY4Wz_9PHlg0LLQ-EFYvLB8lxgqommPSv-FGWpiNYp-f5BVMcACASMD])
3302
+2018/09/12 11:54:46 [E] 用户没有设置默认案场
3303
+2018/09/12 11:54:49 [E] 用户没有设置默认案场
3304
+2018/09/12 11:56:28 [E] 用户没有设置默认案场
3305
+2018/09/12 11:56:39 [E] 用户没有设置默认案场
3306
+2018/09/12 11:56:41 [E] 用户没有设置默认案场
3307
+2018/09/12 11:56:41 [E] 用户没有设置默认案场
3308
+2018/09/12 11:56:44 [E] 用户没有设置默认案场
3309
+2018/09/12 11:56:46 [E] 用户没有设置默认案场
3310
+2018/09/12 11:56:52 [E] 用户没有设置默认案场
3311
+2018/09/12 11:56:52 [E] 用户没有设置默认案场
3312
+2018/09/12 11:56:52 [E] 用户没有设置默认案场
3313
+2018/09/12 11:56:54 [E] 用户没有设置默认案场
3314
+2018/09/12 11:56:54 [E] 用户没有设置默认案场
3315
+2018/09/12 13:02:58 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3316
+2018/09/12 13:03:03 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_ri9FogXsOZzllRzEg982DKn7EJUbs4o04CLUqDK1qfEUbjFLxsIcaQIBQtx1fjEJsFeuj3esg2DWinMH02tEEC1a2DcKSjOLvXfm-KruzxGLwdx5Nxs5eL425K0xsiAVl7j61HWb2YeYO7KgCXUaAJAUPM","expires_in":7200})
3317
+2018/09/12 13:03:03 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_ri9FogXsOZzllRzEg982DKn7EJUbs4o04CLUqDK1qfEUbjFLxsIcaQIBQtx1fjEJsFeuj3esg2DWinMH02tEEC1a2DcKSjOLvXfm-KruzxGLwdx5Nxs5eL425K0xsiAVl7j61HWb2YeYO7KgCXUaAJAUPM])
3318
+2018/09/12 13:33:59 [E] 用户没有设置默认案场
3319
+2018/09/12 13:34:06 [E] 用户没有设置默认案场
3320
+2018/09/12 13:34:07 [E] 用户没有设置默认案场
3321
+2018/09/12 13:35:01 [E] 用户没有设置默认案场
3322
+2018/09/12 13:35:33 [E] 用户没有设置默认案场
3323
+2018/09/12 13:35:35 [E] 用户没有设置默认案场
3324
+2018/09/12 13:35:35 [E] 用户没有设置默认案场
3325
+2018/09/12 13:36:17 [E] 用户没有设置默认案场
3326
+2018/09/12 13:36:17 [E] 用户没有设置默认案场
3327
+2018/09/12 13:36:20 [E] 用户没有设置默认案场
3328
+2018/09/12 13:36:20 [E] 用户没有设置默认案场
3329
+2018/09/12 13:36:24 [E] 用户没有设置默认案场
3330
+2018/09/12 13:36:25 [E] 用户没有设置默认案场
3331
+2018/09/12 13:36:27 [E] 用户没有设置默认案场
3332
+2018/09/12 13:36:27 [E] 用户没有设置默认案场
3333
+2018/09/12 13:36:29 [E] 用户没有设置默认案场
3334
+2018/09/12 13:36:32 [E] 用户没有设置默认案场
3335
+2018/09/12 13:36:32 [E] 用户没有设置默认案场
3336
+2018/09/12 13:36:36 [E] 用户没有设置默认案场
3337
+2018/09/12 13:36:37 [E] 用户没有设置默认案场
3338
+2018/09/12 13:36:42 [E] 用户没有设置默认案场
3339
+2018/09/12 13:36:42 [E] 用户没有设置默认案场
3340
+2018/09/12 13:36:45 [E] 用户没有设置默认案场
3341
+2018/09/12 13:36:46 [E] 用户没有设置默认案场
3342
+2018/09/12 13:41:03 [E] 用户没有设置默认案场
3343
+2018/09/12 13:41:06 [E] 用户没有设置默认案场
3344
+2018/09/12 13:42:34 [E] 用户没有设置默认案场
3345
+2018/09/12 13:42:34 [E] 用户没有设置默认案场
3346
+2018/09/12 13:42:41 [E] 用户没有设置默认案场
3347
+2018/09/12 13:42:41 [E] 用户没有设置默认案场
3348
+2018/09/12 13:42:43 [E] 用户没有设置默认案场
3349
+2018/09/12 13:42:43 [E] 用户没有设置默认案场
3350
+2018/09/12 13:42:43 [E] 用户没有设置默认案场
3351
+2018/09/12 13:42:44 [E] 用户没有设置默认案场
3352
+2018/09/12 13:42:46 [E] 用户没有设置默认案场
3353
+2018/09/12 13:42:46 [E] 用户没有设置默认案场
3354
+2018/09/12 13:42:46 [E] 用户没有设置默认案场
3355
+2018/09/12 13:42:48 [E] 用户没有设置默认案场
3356
+2018/09/12 13:42:48 [E] 用户没有设置默认案场
3357
+2018/09/12 13:42:48 [E] 用户没有设置默认案场
3358
+2018/09/12 13:42:51 [E] 用户没有设置默认案场
3359
+2018/09/12 13:42:51 [E] 用户没有设置默认案场
3360
+2018/09/12 13:42:51 [E] 用户没有设置默认案场
3361
+2018/09/12 13:42:52 [E] 用户没有设置默认案场
3362
+2018/09/12 13:42:52 [E] 用户没有设置默认案场
3363
+2018/09/12 13:42:52 [E] 用户没有设置默认案场
3364
+2018/09/12 13:42:55 [E] 用户没有设置默认案场
3365
+2018/09/12 13:42:55 [E] 用户没有设置默认案场
3366
+2018/09/12 13:42:55 [E] 用户没有设置默认案场
3367
+2018/09/12 13:42:56 [E] 用户没有设置默认案场
3368
+2018/09/12 13:42:56 [E] 用户没有设置默认案场
3369
+2018/09/12 13:42:56 [E] 用户没有设置默认案场
3370
+2018/09/12 13:42:59 [E] 用户没有设置默认案场
3371
+2018/09/12 13:42:59 [E] 用户没有设置默认案场
3372
+2018/09/12 13:42:59 [E] 用户没有设置默认案场
3373
+2018/09/12 13:43:00 [E] 用户没有设置默认案场
3374
+2018/09/12 13:43:00 [E] 用户没有设置默认案场
3375
+2018/09/12 13:43:00 [E] 用户没有设置默认案场
3376
+2018/09/12 13:43:02 [E] 用户没有设置默认案场
3377
+2018/09/12 13:43:02 [E] 用户没有设置默认案场
3378
+2018/09/12 13:43:02 [E] 用户没有设置默认案场
3379
+2018/09/12 13:43:04 [E] 用户没有设置默认案场
3380
+2018/09/12 13:43:05 [E] 用户没有设置默认案场
3381
+2018/09/12 13:43:06 [E] 用户没有设置默认案场
3382
+2018/09/12 13:43:07 [E] 用户没有设置默认案场
3383
+2018/09/12 13:43:09 [E] 用户没有设置默认案场
3384
+2018/09/12 13:43:09 [E] 用户没有设置默认案场
3385
+2018/09/12 13:43:10 [E] 用户没有设置默认案场
3386
+2018/09/12 13:43:10 [E] 用户没有设置默认案场
3387
+2018/09/12 13:43:11 [E] 用户没有设置默认案场
3388
+2018/09/12 13:43:12 [E] 用户没有设置默认案场
3389
+2018/09/12 13:43:13 [E] 用户没有设置默认案场
3390
+2018/09/12 13:43:13 [E] 用户没有设置默认案场
3391
+2018/09/12 13:43:15 [E] 用户没有设置默认案场
3392
+2018/09/12 13:43:15 [E] 用户没有设置默认案场
3393
+2018/09/12 13:43:15 [E] 用户没有设置默认案场
3394
+2018/09/12 13:43:15 [E] 用户没有设置默认案场
3395
+2018/09/12 13:43:16 [E] 用户没有设置默认案场
3396
+2018/09/12 13:43:16 [E] 用户没有设置默认案场
3397
+2018/09/12 13:43:18 [E] 用户没有设置默认案场
3398
+2018/09/12 13:43:18 [E] 用户没有设置默认案场
3399
+2018/09/12 13:43:19 [E] 用户没有设置默认案场
3400
+2018/09/12 13:43:19 [E] 用户没有设置默认案场
3401
+2018/09/12 13:43:23 [E] 用户没有设置默认案场
3402
+2018/09/12 13:43:23 [E] 用户没有设置默认案场
3403
+2018/09/12 13:43:25 [E] 用户没有设置默认案场
3404
+2018/09/12 13:43:25 [E] 用户没有设置默认案场
3405
+2018/09/12 13:43:30 [E] 用户没有设置默认案场
3406
+2018/09/12 13:44:39 [E] 用户没有设置默认案场
3407
+2018/09/12 13:44:39 [E] 用户没有设置默认案场
3408
+2018/09/12 13:44:39 [E] 用户没有设置默认案场
3409
+2018/09/12 13:45:11 [E] 用户没有设置默认案场
3410
+2018/09/12 13:45:11 [E] 用户没有设置默认案场
3411
+2018/09/12 13:45:11 [E] 用户没有设置默认案场
3412
+2018/09/12 13:50:49 [E] 用户没有设置默认案场
3413
+2018/09/12 13:52:44 [E] 用户没有设置默认案场
3414
+2018/09/12 13:52:44 [E] 用户没有设置默认案场
3415
+2018/09/12 13:52:47 [E] 用户没有设置默认案场
3416
+2018/09/12 13:52:47 [E] 用户没有设置默认案场
3417
+2018/09/12 13:52:47 [E] 用户没有设置默认案场
3418
+2018/09/12 13:53:07 [E] 用户没有设置默认案场
3419
+2018/09/12 13:53:07 [E] 用户没有设置默认案场
3420
+2018/09/12 13:53:09 [E] 用户没有设置默认案场
3421
+2018/09/12 13:53:10 [E] 用户没有设置默认案场
3422
+2018/09/12 13:53:10 [E] 用户没有设置默认案场
3423
+2018/09/12 13:53:14 [E] 用户没有设置默认案场
3424
+2018/09/12 13:53:14 [E] 用户没有设置默认案场
3425
+2018/09/12 13:53:14 [E] 用户没有设置默认案场
3426
+2018/09/12 13:53:19 [E] 用户没有设置默认案场
3427
+2018/09/12 13:53:19 [E] 用户没有设置默认案场
3428
+2018/09/12 13:54:03 [E] 用户没有设置默认案场
3429
+2018/09/12 13:54:03 [E] 用户没有设置默认案场
3430
+2018/09/12 13:54:03 [E] 用户没有设置默认案场
3431
+2018/09/12 13:54:06 [E] 用户没有设置默认案场
3432
+2018/09/12 13:54:06 [E] 用户没有设置默认案场
3433
+2018/09/12 13:54:06 [E] 用户没有设置默认案场
3434
+2018/09/12 13:54:06 [E] 用户没有设置默认案场
3435
+2018/09/12 13:54:08 [E] 用户没有设置默认案场
3436
+2018/09/12 13:54:08 [E] 用户没有设置默认案场
3437
+2018/09/12 13:54:13 [E] 用户没有设置默认案场
3438
+2018/09/12 13:54:14 [E] 用户没有设置默认案场
3439
+2018/09/12 13:54:14 [E] 用户没有设置默认案场
3440
+2018/09/12 13:54:16 [E] 用户没有设置默认案场
3441
+2018/09/12 13:54:18 [E] 用户没有设置默认案场
3442
+2018/09/12 13:54:18 [E] 用户没有设置默认案场
3443
+2018/09/12 13:54:18 [E] 用户没有设置默认案场
3444
+2018/09/12 13:54:22 [E] 用户没有设置默认案场
3445
+2018/09/12 13:54:22 [E] 用户没有设置默认案场
3446
+2018/09/12 13:54:27 [E] 用户没有设置默认案场
3447
+2018/09/12 13:54:27 [E] 用户没有设置默认案场
3448
+2018/09/12 13:54:29 [E] 用户没有设置默认案场
3449
+2018/09/12 13:54:30 [E] 用户没有设置默认案场
3450
+2018/09/12 13:54:30 [E] 用户没有设置默认案场
3451
+2018/09/12 13:54:32 [E] 用户没有设置默认案场
3452
+2018/09/12 13:54:33 [E] 用户没有设置默认案场
3453
+2018/09/12 13:54:33 [E] 用户没有设置默认案场
3454
+2018/09/12 13:54:33 [E] 用户没有设置默认案场
3455
+2018/09/12 13:54:37 [E] 用户没有设置默认案场
3456
+2018/09/12 13:54:37 [E] 用户没有设置默认案场
3457
+2018/09/12 13:57:54 [E] 用户没有设置默认案场
3458
+2018/09/12 13:57:54 [E] 用户没有设置默认案场
3459
+2018/09/12 13:57:56 [E] 用户没有设置默认案场
3460
+2018/09/12 13:57:56 [E] 用户没有设置默认案场
3461
+2018/09/12 13:57:57 [E] 用户没有设置默认案场
3462
+2018/09/12 13:59:36 [E] 用户没有设置默认案场
3463
+2018/09/12 13:59:36 [E] 用户没有设置默认案场
3464
+2018/09/12 13:59:43 [E] 用户没有设置默认案场
3465
+2018/09/12 13:59:49 [E] 用户没有设置默认案场
3466
+2018/09/12 13:59:49 [E] 用户没有设置默认案场
3467
+2018/09/12 13:59:51 [E] 用户没有设置默认案场
3468
+2018/09/12 13:59:52 [E] 用户没有设置默认案场
3469
+2018/09/12 13:59:55 [E] 用户没有设置默认案场
3470
+2018/09/12 13:59:55 [E] 用户没有设置默认案场
3471
+2018/09/12 13:59:55 [E] 用户没有设置默认案场
3472
+2018/09/12 13:59:58 [E] 用户没有设置默认案场
3473
+2018/09/12 13:59:58 [E] 用户没有设置默认案场
3474
+2018/09/12 13:59:59 [E] 用户没有设置默认案场
3475
+2018/09/12 14:00:07 [E] 用户没有设置默认案场
3476
+2018/09/12 14:00:07 [E] 用户没有设置默认案场
3477
+2018/09/12 14:00:10 [E] 用户没有设置默认案场
3478
+2018/09/12 14:00:10 [E] 用户没有设置默认案场
3479
+2018/09/12 14:00:10 [E] 用户没有设置默认案场
3480
+2018/09/12 14:00:10 [E] 用户没有设置默认案场
3481
+2018/09/12 14:03:11 [E] 用户没有设置默认案场
3482
+2018/09/12 14:03:15 [E] 用户没有设置默认案场
3483
+2018/09/12 14:04:13 [E] 用户没有设置默认案场
3484
+2018/09/12 14:04:17 [E] 用户没有设置默认案场
3485
+2018/09/12 14:04:17 [E] 用户没有设置默认案场
3486
+2018/09/12 14:04:19 [E] 用户没有设置默认案场
3487
+2018/09/12 14:04:19 [E] 用户没有设置默认案场
3488
+2018/09/12 14:04:19 [E] 用户没有设置默认案场
3489
+2018/09/12 14:04:21 [E] 用户没有设置默认案场
3490
+2018/09/12 14:04:21 [E] 用户没有设置默认案场
3491
+2018/09/12 14:04:27 [E] 用户没有设置默认案场
3492
+2018/09/12 14:04:27 [E] 用户没有设置默认案场
3493
+2018/09/12 14:04:27 [E] 用户没有设置默认案场
3494
+2018/09/12 14:04:31 [E] 用户没有设置默认案场
3495
+2018/09/12 14:04:31 [E] 用户没有设置默认案场
3496
+2018/09/12 14:04:31 [E] 用户没有设置默认案场
3497
+2018/09/12 14:05:05 [E] 用户没有设置默认案场
3498
+2018/09/12 14:05:05 [E] 用户没有设置默认案场
3499
+2018/09/12 14:05:05 [E] 用户没有设置默认案场
3500
+2018/09/12 14:05:07 [E] 用户没有设置默认案场
3501
+2018/09/12 14:05:07 [E] 用户没有设置默认案场
3502
+2018/09/12 14:05:08 [E] 用户没有设置默认案场
3503
+2018/09/12 14:05:08 [E] 用户没有设置默认案场
3504
+2018/09/12 14:05:08 [E] 用户没有设置默认案场
3505
+2018/09/12 14:05:08 [E] 用户没有设置默认案场
3506
+2018/09/12 14:05:09 [E] 用户没有设置默认案场
3507
+2018/09/12 14:05:10 [E] 用户没有设置默认案场
3508
+2018/09/12 14:05:10 [E] 用户没有设置默认案场
3509
+2018/09/12 14:05:11 [E] 用户没有设置默认案场
3510
+2018/09/12 14:05:12 [E] 用户没有设置默认案场
3511
+2018/09/12 14:05:12 [E] 用户没有设置默认案场
3512
+2018/09/12 14:05:12 [E] 用户没有设置默认案场
3513
+2018/09/12 14:05:13 [E] 用户没有设置默认案场
3514
+2018/09/12 14:05:13 [E] 用户没有设置默认案场
3515
+2018/09/12 14:06:44 [E] 用户没有设置默认案场
3516
+2018/09/12 14:06:44 [E] 用户没有设置默认案场
3517
+2018/09/12 14:06:45 [E] 用户没有设置默认案场
3518
+2018/09/12 14:06:48 [E] 用户没有设置默认案场
3519
+2018/09/12 14:06:48 [E] 用户没有设置默认案场
3520
+2018/09/12 14:06:50 [E] 用户没有设置默认案场
3521
+2018/09/12 14:06:50 [E] 用户没有设置默认案场
3522
+2018/09/12 14:06:51 [E] 用户没有设置默认案场
3523
+2018/09/12 14:06:52 [E] 用户没有设置默认案场
3524
+2018/09/12 14:06:52 [E] 用户没有设置默认案场
3525
+2018/09/12 14:06:52 [E] 用户没有设置默认案场
3526
+2018/09/12 14:06:55 [E] 用户没有设置默认案场
3527
+2018/09/12 14:06:55 [E] 用户没有设置默认案场
3528
+2018/09/12 14:06:55 [E] 用户没有设置默认案场
3529
+2018/09/12 14:06:56 [E] 用户没有设置默认案场
3530
+2018/09/12 14:06:56 [E] 用户没有设置默认案场
3531
+2018/09/12 14:06:57 [E] 用户没有设置默认案场
3532
+2018/09/12 14:06:59 [E] 用户没有设置默认案场
3533
+2018/09/12 14:06:59 [E] 用户没有设置默认案场
3534
+2018/09/12 14:07:00 [E] 用户没有设置默认案场
3535
+2018/09/12 14:07:00 [E] 用户没有设置默认案场
3536
+2018/09/12 14:07:00 [E] 用户没有设置默认案场
3537
+2018/09/12 14:07:34 [E] 用户没有设置默认案场
3538
+2018/09/12 14:07:34 [E] 用户没有设置默认案场
3539
+2018/09/12 14:07:34 [E] 用户没有设置默认案场
3540
+2018/09/12 14:07:48 [E] 用户没有设置默认案场
3541
+2018/09/12 14:07:48 [E] 用户没有设置默认案场
3542
+2018/09/12 14:07:50 [E] 用户没有设置默认案场
3543
+2018/09/12 14:07:50 [E] 用户没有设置默认案场
3544
+2018/09/12 14:07:50 [E] 用户没有设置默认案场
3545
+2018/09/12 14:07:52 [E] 用户没有设置默认案场
3546
+2018/09/12 14:07:52 [E] 用户没有设置默认案场
3547
+2018/09/12 14:07:52 [E] 用户没有设置默认案场
3548
+2018/09/12 14:07:54 [E] 用户没有设置默认案场
3549
+2018/09/12 14:07:54 [E] 用户没有设置默认案场
3550
+2018/09/12 14:07:54 [E] 用户没有设置默认案场
3551
+2018/09/12 14:07:55 [E] 用户没有设置默认案场
3552
+2018/09/12 14:07:55 [E] 用户没有设置默认案场
3553
+2018/09/12 14:07:55 [E] 用户没有设置默认案场
3554
+2018/09/12 14:08:02 [E] 用户没有设置默认案场
3555
+2018/09/12 14:08:03 [E] 用户没有设置默认案场
3556
+2018/09/12 14:08:03 [E] 用户没有设置默认案场
3557
+2018/09/12 14:08:03 [E] 用户没有设置默认案场
3558
+2018/09/12 14:08:03 [E] 用户没有设置默认案场
3559
+2018/09/12 14:08:04 [E] 用户没有设置默认案场
3560
+2018/09/12 14:08:04 [E] 用户没有设置默认案场
3561
+2018/09/12 14:08:04 [E] 用户没有设置默认案场
3562
+2018/09/12 14:08:05 [E] 用户没有设置默认案场
3563
+2018/09/12 14:08:06 [E] 用户没有设置默认案场
3564
+2018/09/12 14:08:06 [E] 用户没有设置默认案场
3565
+2018/09/12 14:08:06 [E] 用户没有设置默认案场
3566
+2018/09/12 14:08:07 [E] 用户没有设置默认案场
3567
+2018/09/12 14:08:07 [E] 用户没有设置默认案场
3568
+2018/09/12 14:08:17 [E] 用户没有设置默认案场
3569
+2018/09/12 14:08:17 [E] 用户没有设置默认案场
3570
+2018/09/12 14:08:18 [E] 用户没有设置默认案场
3571
+2018/09/12 14:08:18 [E] 用户没有设置默认案场
3572
+2018/09/12 14:08:18 [E] 用户没有设置默认案场
3573
+2018/09/12 14:08:20 [E] 用户没有设置默认案场
3574
+2018/09/12 14:08:20 [E] 用户没有设置默认案场
3575
+2018/09/12 14:08:20 [E] 用户没有设置默认案场
3576
+2018/09/12 14:08:21 [E] 用户没有设置默认案场
3577
+2018/09/12 14:08:21 [E] 用户没有设置默认案场
3578
+2018/09/12 14:08:22 [E] 用户没有设置默认案场
3579
+2018/09/12 14:08:22 [E] 用户没有设置默认案场
3580
+2018/09/12 14:08:23 [E] 用户没有设置默认案场
3581
+2018/09/12 14:08:23 [E] 用户没有设置默认案场
3582
+2018/09/12 14:08:24 [E] 用户没有设置默认案场
3583
+2018/09/12 14:08:24 [E] 用户没有设置默认案场
3584
+2018/09/12 14:08:24 [E] 用户没有设置默认案场
3585
+2018/09/12 14:08:25 [E] 用户没有设置默认案场
3586
+2018/09/12 14:08:26 [E] 用户没有设置默认案场
3587
+2018/09/12 14:08:26 [E] 用户没有设置默认案场
3588
+2018/09/12 14:08:27 [E] 用户没有设置默认案场
3589
+2018/09/12 14:08:27 [E] 用户没有设置默认案场
3590
+2018/09/12 14:08:27 [E] 用户没有设置默认案场
3591
+2018/09/12 14:08:28 [E] 用户没有设置默认案场
3592
+2018/09/12 14:08:29 [E] 用户没有设置默认案场
3593
+2018/09/12 14:08:29 [E] 用户没有设置默认案场
3594
+2018/09/12 14:10:17 [E] 用户没有设置默认案场
3595
+2018/09/12 14:10:17 [E] 用户没有设置默认案场
3596
+2018/09/12 14:10:24 [E] 用户没有设置默认案场
3597
+2018/09/12 14:11:23 [E] 用户没有设置默认案场
3598
+2018/09/12 14:11:23 [E] 用户没有设置默认案场
3599
+2018/09/12 14:11:42 [E] 用户没有设置默认案场
3600
+2018/09/12 14:12:16 [E] 用户没有设置默认案场
3601
+2018/09/12 14:12:16 [E] 用户没有设置默认案场
3602
+2018/09/12 14:12:16 [E] 用户没有设置默认案场
3603
+2018/09/12 14:12:18 [E] 解密 Base64 字串失败: illegal base64 data at input byte 0
3604
+2018/09/12 14:12:18 [E] 获取组织信息失败: 没有查询到机构信息
3605
+2018/09/12 14:12:18 [E] 用户没有设置默认案场
3606
+2018/09/12 14:12:32 [E] 用户没有设置默认案场
3607
+2018/09/12 14:12:32 [E] 用户没有设置默认案场
3608
+2018/09/12 14:12:32 [E] 用户没有设置默认案场
3609
+2018/09/12 14:16:09 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3610
+2018/09/12 14:16:09 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_TP-2l8mlyotE0zKpHpk6tfyd7LoANq3_KSx7OrxhRYCFjvfATXngEhYHQzWdiptJerGUayCPQGaKjKaVY80PrQCGW2fQdKBHAoi_UbYUrlOBNn8ej5bItPIW55tfRbmJbRWOcPkcNMarsVXWEBIaAIAROV","expires_in":7200})
3611
+2018/09/12 14:16:09 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_TP-2l8mlyotE0zKpHpk6tfyd7LoANq3_KSx7OrxhRYCFjvfATXngEhYHQzWdiptJerGUayCPQGaKjKaVY80PrQCGW2fQdKBHAoi_UbYUrlOBNn8ej5bItPIW55tfRbmJbRWOcPkcNMarsVXWEBIaAIAROV expires_in:7200])
3612
+2018/09/12 14:16:18 [E] 用户没有设置默认案场
3613
+2018/09/12 14:16:18 [E] 用户没有设置默认案场
3614
+2018/09/12 14:20:28 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3615
+2018/09/12 14:20:28 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_6cXJhV-7Luh4-xqkbRxCsoQiUV0j-zAfNmXR33XYtjRHNnK7Qk-ZiWmlbkXmpz5wyu1r7F782SIFCQhK6NoN02MCIAzsdiufgUQFUJV8ZE0L2NFC06jsJRDR0hNBai3XQM3WUFhT9KZnj26qLBTdAFAHXP","expires_in":7200})
3616
+2018/09/12 14:20:28 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[expires_in:7200 access_token:13_6cXJhV-7Luh4-xqkbRxCsoQiUV0j-zAfNmXR33XYtjRHNnK7Qk-ZiWmlbkXmpz5wyu1r7F782SIFCQhK6NoN02MCIAzsdiufgUQFUJV8ZE0L2NFC06jsJRDR0hNBai3XQM3WUFhT9KZnj26qLBTdAFAHXP])
3617
+2018/09/12 14:22:35 [E] 用户没有设置默认案场
3618
+2018/09/12 14:22:39 [E] 用户没有设置默认案场
3619
+2018/09/12 14:22:42 [E] 用户没有设置默认案场
3620
+2018/09/12 14:23:11 [E] 用户没有设置默认案场
3621
+2018/09/12 14:23:22 [E] 用户没有设置默认案场
3622
+2018/09/12 14:23:29 [E] 用户没有设置默认案场
3623
+2018/09/12 14:23:30 [E] 用户没有设置默认案场
3624
+2018/09/12 14:23:30 [E] 用户没有设置默认案场
3625
+2018/09/12 14:23:30 [E] 用户没有设置默认案场
3626
+2018/09/12 14:23:32 [E] 用户没有设置默认案场
3627
+2018/09/12 14:23:34 [E] 用户没有设置默认案场
3628
+2018/09/12 14:23:37 [E] 用户没有设置默认案场
3629
+2018/09/12 14:23:38 [E] 用户没有设置默认案场
3630
+2018/09/12 14:23:38 [E] 用户没有设置默认案场
3631
+2018/09/12 14:23:39 [E] 用户没有设置默认案场
3632
+2018/09/12 14:23:41 [E] 用户没有设置默认案场
3633
+2018/09/12 14:23:41 [E] 用户没有设置默认案场
3634
+2018/09/12 14:23:43 [E] 用户没有设置默认案场
3635
+2018/09/12 14:23:45 [E] 用户没有设置默认案场
3636
+2018/09/12 14:23:48 [E] 用户没有设置默认案场
3637
+2018/09/12 14:23:48 [E] 用户没有设置默认案场
3638
+2018/09/12 14:23:50 [E] 用户没有设置默认案场
3639
+2018/09/12 14:23:51 [E] 用户没有设置默认案场
3640
+2018/09/12 14:23:52 [E] 用户没有设置默认案场
3641
+2018/09/12 14:23:54 [E] 用户没有设置默认案场
3642
+2018/09/12 14:23:54 [E] 用户没有设置默认案场
3643
+2018/09/12 14:23:55 [E] 用户没有设置默认案场
3644
+2018/09/12 14:23:58 [E] 用户没有设置默认案场
3645
+2018/09/12 14:23:58 [E] 删除商品规格失败: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'b.spec_id='24d205e9-cd33-4602-976d-7bf69fa6d7b8'' at line 1
3646
+2018/09/12 14:25:04 [E] 用户没有设置默认案场
3647
+2018/09/12 14:25:07 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3648
+2018/09/12 14:25:08 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_cGWgMW0Dy_6gDn4WgmLL3CeQvPN3Pqi8eznKe8TpmKWOfDMgGKh2ITAr7GLFk16mX2KyeyGy4Hvrxot2h3zJqmV9JiDAi7gwmoRHI35xjYf6jYA9GkuK6tKjnojPMMzTQP2Seaq_xt1_Inn3JPTiAFACIM","expires_in":7200})
3649
+2018/09/12 14:25:08 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_cGWgMW0Dy_6gDn4WgmLL3CeQvPN3Pqi8eznKe8TpmKWOfDMgGKh2ITAr7GLFk16mX2KyeyGy4Hvrxot2h3zJqmV9JiDAi7gwmoRHI35xjYf6jYA9GkuK6tKjnojPMMzTQP2Seaq_xt1_Inn3JPTiAFACIM expires_in:7200])
3650
+2018/09/12 14:25:09 [E] 用户没有设置默认案场
3651
+2018/09/12 14:25:12 [E] 用户没有设置默认案场
3652
+2018/09/12 14:25:18 [E] 用户没有设置默认案场
3653
+2018/09/12 14:25:18 [E] 用户没有设置默认案场
3654
+2018/09/12 14:25:22 [E] 用户没有设置默认案场
3655
+2018/09/12 14:25:22 [E] 用户没有设置默认案场
3656
+2018/09/12 14:25:23 [E] 用户没有设置默认案场
3657
+2018/09/12 14:25:27 [E] 用户没有设置默认案场
3658
+2018/09/12 14:25:36 [E] 用户没有设置默认案场
3659
+2018/09/12 14:25:39 [E] 用户没有设置默认案场
3660
+2018/09/12 14:26:48 [E] 用户没有设置默认案场
3661
+2018/09/12 14:26:51 [E] 用户没有设置默认案场
3662
+2018/09/12 14:26:51 [E] 获取商品规格失败: Error 1054: Unknown column 'create_date' in 'order clause'
3663
+2018/09/12 14:27:38 [I] 请求远程接口: %!(EXTRA string=https://api.weixin.qq.com/cgi-bin/token?appid=wx7320287e057bbeee&grant_type=client_credential&secret=6e844dc2ade439545c47569ba1707673)
3664
+2018/09/12 14:27:38 [I] 远程请求结果:%!(EXTRA string={"access_token":"13_0QjgwowdSGInKdwbrmtbkXrv6GoHX0tx6D0z56rH8acNnHqeB0NgY4tzJ4KFVi7YxnIBH9ZMnePZVbpKUMJBJ0uZp3RPnjz3ughGkbP_weau5lL_3Mbs3Xrrsi6_sXkPUesmk1P9eN767-oSFIQcAJAMPX","expires_in":7200})
3665
+2018/09/12 14:27:38 [I] 接口返回结果: %!(EXTRA map[string]interface {}=map[access_token:13_0QjgwowdSGInKdwbrmtbkXrv6GoHX0tx6D0z56rH8acNnHqeB0NgY4tzJ4KFVi7YxnIBH9ZMnePZVbpKUMJBJ0uZp3RPnjz3ughGkbP_weau5lL_3Mbs3Xrrsi6_sXkPUesmk1P9eN767-oSFIQcAJAMPX expires_in:7200])

+ 7
- 0
models/cases/cases.go ファイルの表示

@@ -154,3 +154,10 @@ func (m *CaseDAO) GetCaseUserByType(csIDs []string, typeID string) ([]UserCase,
154 154
 
155 155
 	return users, nil
156 156
 }
157
+
158
+// GetCaseByIDs 获取案场信息
159
+func (m *CaseDAO) GetCaseByIDs(caseids string) ([]model.SysCase, error) {
160
+	var cases []model.SysCase
161
+	err := m.db.Where("status>" + strconv.Itoa(models.STATUS_DEL)).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").Find(&cases)
162
+	return cases, err
163
+}

+ 7
- 0
models/constant.go ファイルの表示

@@ -124,3 +124,10 @@ const (
124 124
 	GYM_CARD_QUARTER = "quarter"
125 125
 	GYM_CARD_YEAR    = "year"
126 126
 )
127
+
128
+// 系统资源
129
+// 可用于卡券关联内容选择
130
+const (
131
+	SYS_RESOURCE_COURSE = "course"
132
+	SYS_RESOURCE_GOODS  = "goods"
133
+)

+ 1
- 0
models/coupon/coupon.go ファイルの表示

@@ -96,6 +96,7 @@ func (m *CouponDAO) GetCouponList(filters []string, limit []int) ([]model.TaCoup
96 96
 	filterString := ""
97 97
 	if len(filters) > 0 {
98 98
 		filterString = strings.Join(filters, " and ")
99
+		filterString += " and "
99 100
 	}
100 101
 
101 102
 	sql := `select * from ta_coupon where %s status = 1 order by create_date desc`

+ 8
- 0
models/coupon/target.go ファイルの表示

@@ -1,6 +1,7 @@
1 1
 package coupon
2 2
 
3 3
 import (
4
+	"errors"
4 5
 	"spaceofcheng/services/models/model"
5 6
 )
6 7
 
@@ -11,6 +12,13 @@ func (m *CouponDAO) UpdateTarget(targets []model.TaCouponTarget, couponID string
11 12
 	}
12 13
 
13 14
 	for i := range targets {
15
+		if targets[i].TargetId == "" {
16
+			return errors.New("关联内容不能为空")
17
+		}
18
+
19
+		// TODO
20
+		// 校验关联内容是否有效
21
+
14 22
 		targets[i].CouponId = couponID
15 23
 	}
16 24
 

+ 17
- 0
models/goods/goods.go ファイルの表示

@@ -250,6 +250,8 @@ func (m *GoodsDAO) UpdateGoods(goods *model.TaGoods, images []string, specs []Sp
250 250
 		"goods_name",
251 251
 		"type_id",
252 252
 		"status",
253
+		"price",
254
+		"case_id",
253 255
 	}
254 256
 
255 257
 	// 商品图片
@@ -320,3 +322,18 @@ func (m *GoodsDAO) GetGoodsImgByGoodsID(goodsid string) ([]model.TaGoodsImg, err
320 322
 	err := m.db.Where("goods_id=?", goodsid).Find(&goodsimg)
321 323
 	return goodsimg, err
322 324
 }
325
+
326
+// GetGoodsBySpec 根据商品规格获取商品信息
327
+func (m *GoodsDAO) GetGoodsBySpec(specid string) ([]model.TaGoods, error) {
328
+	var goods []model.TaGoods
329
+	sql := `select a.* from ta_goods a inner join ta_goods_spec b on a.goods_id=b.goods_id where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and b.spec_id='` + specid + `'`
330
+	err := m.db.Sql(sql).Find(&goods)
331
+	return goods, err
332
+}
333
+
334
+// GetGoodsByType 根据商品类型获取商品信息
335
+func (m *GoodsDAO) GetGoodsByType(typeid string) ([]model.TaGoods, error) {
336
+	var goods []model.TaGoods
337
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("type_id=?", typeid).Find(&goods)
338
+	return goods, err
339
+}

+ 4
- 1
models/goods/spec.go ファイルの表示

@@ -6,6 +6,7 @@ import (
6 6
 	"spaceofcheng/services/utils"
7 7
 	"strconv"
8 8
 	"strings"
9
+	"time"
9 10
 )
10 11
 
11 12
 // GetGoodsSpecCount 获取商品规格总数
@@ -18,7 +19,7 @@ func (m *GoodsDAO) GetGoodsSpecCount(caseids string) (int, error) {
18 19
 // GetGoodsSpec 根据案场获取商品规格
19 20
 func (m *GoodsDAO) GetGoodsSpec(caseids string, page int, pageSize int) ([]model.TdSpec, error) {
20 21
 	var goodsSpec []model.TdSpec
21
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, (page-1)*pageSize).Find(&goodsSpec)
22
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&goodsSpec)
22 23
 	return goodsSpec, err
23 24
 }
24 25
 
@@ -39,6 +40,7 @@ func (m *GoodsDAO) GetGoodsSpecByID(specid string) (*model.TdSpec, error) {
39 40
 func (m *GoodsDAO) AddGoodsSpec(goodsSpec *model.TdSpec) (*model.TdSpec, error) {
40 41
 	goodsSpec.SpecId = utils.GetGUID()
41 42
 	goodsSpec.Status = models.STATUS_NORMAL
43
+	goodsSpec.CreateDate = time.Now()
42 44
 	_, err := m.db.Insert(goodsSpec)
43 45
 	return goodsSpec, err
44 46
 }
@@ -47,6 +49,7 @@ func (m *GoodsDAO) AddGoodsSpec(goodsSpec *model.TdSpec) (*model.TdSpec, error)
47 49
 func (m *GoodsDAO) UpdateGoodsSpec(goodsSpec model.TdSpec) error {
48 50
 	var cols = []string{
49 51
 		"spec_name",
52
+		"case_id",
50 53
 	}
51 54
 	_, err := m.db.Cols(cols...).Where("spec_id=?", goodsSpec.SpecId).Update(goodsSpec)
52 55
 	return err

+ 1
- 1
models/goods/type.go ファイルの表示

@@ -25,7 +25,7 @@ func (m *GoodsDAO) GetGoodsTypeByCase(caseid string) ([]model.TdGoodsType, error
25 25
 // GetGoodsType 根据案场获取商品类型
26 26
 func (m *GoodsDAO) GetGoodsType(caseids string, page int, pageSize int) ([]model.TdGoodsType, error) {
27 27
 	var goodstype []model.TdGoodsType
28
-	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&goodstype)
28
+	err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").Desc("create_date").Limit(pageSize, (page-1)*pageSize).Desc("create_date").Find(&goodstype)
29 29
 	return goodstype, err
30 30
 }
31 31
 

+ 1
- 1
models/model/ta_coupon.go ファイルの表示

@@ -8,7 +8,7 @@ type TaCoupon struct {
8 8
 	CouponId     string    `xorm:"not null pk VARCHAR(64)"`
9 9
 	CouponName   string    `xorm:"VARCHAR(255)"`
10 10
 	CouponTypeId string    `xorm:"VARCHAR(64)"`
11
-	SendType     int       `xorm:"comment('0案场 1渠道') SMALLINT(6)"`
11
+	SendType     string    `xorm:"VARCHAR(20)"`
12 12
 	VideoUrl     string    `xorm:"TEXT"`
13 13
 	CoverUrl     string    `xorm:"TEXT"`
14 14
 	Price        string    `xorm:"DECIMAL(64)"`

+ 1
- 0
models/model/ta_coupon_target.go ファイルの表示

@@ -1,6 +1,7 @@
1 1
 package model
2 2
 
3 3
 type TaCouponTarget struct {
4
+	TargetType string `xorm:"not null pk VARCHAR(20)"`
4 5
 	TargetId   string `xorm:"not null pk VARCHAR(64)"`
5 6
 	CouponId   string `xorm:"VARCHAR(64)"`
6 7
 	TargetName string `xorm:"VARCHAR(255)"`

+ 8
- 5
models/model/td_spec.go ファイルの表示

@@ -1,9 +1,12 @@
1 1
 package model
2 2
 
3
+import "time"
4
+
3 5
 type TdSpec struct {
4
-	SpecId   string `xorm:"not null pk VARCHAR(64)"`
5
-	SpecName string `xorm:"VARCHAR(50)"`
6
-	Status   int    `xorm:"SMALLINT(6)"`
7
-	OrgId    string `xorm:"VARCHAR(64)"`
8
-	CaseId   string `xorm:"VARCHAR(64)"`
6
+	SpecId     string    `xorm:"not null pk VARCHAR(64)"`
7
+	SpecName   string    `xorm:"VARCHAR(50)"`
8
+	Status     int       `xorm:"SMALLINT(6)"`
9
+	OrgId      string    `xorm:"VARCHAR(64)"`
10
+	CaseId     string    `xorm:"VARCHAR(64)"`
11
+	CreateDate time.Time `xorm:"DATETIME"`
9 12
 }

+ 34
- 0
models/system/user.go ファイルの表示

@@ -421,3 +421,37 @@ func (m *UserDAO) GetForbidUserByUserID(userID string) ([]model.TaForbidUser, er
421 421
 
422 422
 	return fbUsers, nil
423 423
 }
424
+
425
+// CheckUserPhone 用户电话重复校验
426
+func (m *UserDAO) CheckUserPhone(userid, phone, orgid string) (bool, error) {
427
+	var users []model.SysUser
428
+	dao := m.db.Where("phone=?", phone).And("org_id=?", orgid)
429
+	if userid != "" {
430
+		dao.And("user_id <> '" + userid + "'")
431
+	}
432
+	err := dao.Find(&users)
433
+	if err != nil {
434
+		return false, err
435
+	}
436
+	if len(users) > 0 {
437
+		return false, nil
438
+	}
439
+	return true, nil
440
+}
441
+
442
+// CheckUserName 用户账户名重复校验
443
+func (m *UserDAO) CheckUserName(userid, username, orgid string) (bool, error) {
444
+	var users []model.SysUser
445
+	dao := m.db.Where("user_name=?", username).And("org_id=?", orgid)
446
+	if userid != "" {
447
+		dao.And("user_id <> '" + userid + "'")
448
+	}
449
+	err := dao.Find(&users)
450
+	if err != nil {
451
+		return false, err
452
+	}
453
+	if len(users) > 0 {
454
+		return false, nil
455
+	}
456
+	return true, nil
457
+}

+ 7
- 0
routers/common.go ファイルの表示

@@ -4,6 +4,7 @@ import (
4 4
 	"spaceofcheng/services/controllers"
5 5
 	"spaceofcheng/services/controllers/cases"
6 6
 	"spaceofcheng/services/controllers/channel"
7
+	"spaceofcheng/services/controllers/coupon"
7 8
 	"spaceofcheng/services/controllers/course"
8 9
 	"spaceofcheng/services/controllers/customer"
9 10
 	"spaceofcheng/services/controllers/goods"
@@ -222,6 +223,12 @@ func getCommonRoutes() beego.LinkNamespace {
222 223
 		beego.NSRouter("/order/goods/finish/:id", &goods.GoodsController{}, "put:FinishMake"),
223 224
 		beego.NSRouter("/order/goods/cancel/:id", &goods.GoodsController{}, "put:CancelMake"),
224 225
 
226
+		// 优惠券
227
+		beego.NSRouter("/coupon", &coupon.CouponController{}, "get:ListByCase"),
228
+		beego.NSRouter("/coupon", &coupon.CouponController{}, "post:SaveCoupon"),
229
+		beego.NSRouter("/coupon/:id", &coupon.CouponController{}, "put:UpdateCoupon"),
230
+		beego.NSRouter("/coupon/:id/to/:users", &coupon.CouponController{}, "post:GiveCoupon"),
231
+
225 232
 		// 文件
226 233
 		beego.NSRouter("/file", &controllers.BaseController{}, "post:FileUpload"),
227 234
 

+ 124
- 54
service/coupon/coupon.go ファイルの表示

@@ -7,6 +7,7 @@ import (
7 7
 	"spaceofcheng/services/models/customer"
8 8
 	"spaceofcheng/services/models/model"
9 9
 	"spaceofcheng/services/utils"
10
+	"strings"
10 11
 	"time"
11 12
 
12 13
 	"github.com/yl10/kit/guid"
@@ -30,19 +31,34 @@ func NewCouponServ(ctx *utils.Context) *CouponServ {
30 31
 
31 32
 // GetCouponList 获取优惠券列表
32 33
 func (s *CouponServ) GetCouponList(caseID string, pagenavi ...int) ([]model.TaCoupon, int64, error) {
33
-	if caseID == "" {
34
-		return nil, 0, errors.New("未指定案场")
35
-	}
34
+	filters := []string{}
36 35
 
37
-	if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
38
-		return nil, 0, err
39
-	}
36
+	if caseID != "" {
37
+		if err := utils.NewAuthEngine(s.ctx).CheckCase(caseID); err != nil {
38
+			return nil, 0, err
39
+		}
40 40
 
41
-	limit := utils.GetPageNaviLimit(pagenavi...)
42
-	filters := []string{
43
-		"case_id='" + caseID + "'",
41
+		filters = []string{
42
+			"case_id='" + caseID + "'",
43
+		}
44
+	} else {
45
+		casesRaw := s.ctx.Get("cases")
46
+		if casesRaw == nil {
47
+			return nil, 0, errors.New("请设置过滤案场")
48
+		}
49
+
50
+		cases := casesRaw.([]model.SysUserCase)
51
+		caseIDs := []string{}
52
+		for _, cs := range cases {
53
+			caseIDs = append(caseIDs, cs.CaseId)
54
+		}
55
+
56
+		filters = []string{
57
+			"case_id in ('" + strings.Join(caseIDs, "','") + "')",
58
+		}
44 59
 	}
45 60
 
61
+	limit := utils.GetPageNaviLimit(pagenavi...)
46 62
 	res, total, err := s.dao.GetCouponList(filters, limit)
47 63
 	if err != nil {
48 64
 		utils.LogError("查询优惠券列表失败: " + err.Error())
@@ -176,17 +192,6 @@ func (s *CouponServ) GiveCoupon(couponID string, uids []string) error {
176 192
 		}
177 193
 	}
178 194
 
179
-	// 计算卡券有效期
180
-	startDate := cp.StartDate
181
-	endDate := cp.EndDate
182
-	if cp.ValidDays > 0 {
183
-		startDate = now
184
-		hs := int64(cp.ValidDays * 24)
185
-		endDate = now.Add(time.Hour * time.Duration(hs))
186
-	}
187
-
188
-	cps := make([]model.TaCustomerCoupon, 0)
189
-	recs := make([]model.TaCouponGiveRecord, 0)
190 195
 	for _, uid := range uids {
191 196
 		// 获取客户信息
192 197
 		cust, err := s.custDao.GetCustomerByID(uid)
@@ -195,56 +200,121 @@ func (s *CouponServ) GiveCoupon(couponID string, uids []string) error {
195 200
 			return errors.New("校验客户信息失败")
196 201
 		}
197 202
 
198
-		// 检查用户是否已经有了该券
199
-		custCPS, err := s.dao.CheckCustCoupon(uid, cp.CouponId, startDate, endDate)
200
-		if err != nil {
201
-			utils.LogError("校验客户优惠券失败: " + err.Error())
202
-			return errors.New("校验客户优惠券失败")
203
+		if err := s.GiveCouponTo(&user, cust, cp); err != nil {
204
+			return err
203 205
 		}
206
+	}
204 207
 
205
-		if custCPS != nil && len(custCPS) > 0 {
206
-			return errors.New("客户 " + cust.CustomerName + " 已经拥有该券")
207
-		}
208
+	return nil
209
+}
208 210
 
209
-		// 放入我的卡券
210
-		custCP := model.TaCustomerCoupon{
211
-			CouponId:           cp.CouponId,
212
-			CustomerCouponName: cp.CouponName,
213
-			CustomerId:         uid,
214
-			StartDate:          startDate,
215
-			EndDate:            endDate,
216
-			ReceiveDate:        now,
217
-			CaseId:             cp.CaseId,
218
-			OrgId:              cp.OrgId,
219
-		}
211
+// GiveCouponTo 赠送优惠券
212
+// 本方法会被多出调用, 方法内使用 Context 将是不安全的
213
+func (s *CouponServ) GiveCouponTo(from *model.SysUser, to *model.TaCustomer, cp *model.TaCoupon) error {
214
+	if from.UserId == "" {
215
+		return errors.New("必须指定赠送人")
216
+	}
217
+
218
+	if to.CustomerId == "" {
219
+		return errors.New("必须指定接收人")
220
+	}
220 221
 
221
-		cps = append(cps, custCP)
222
-
223
-		// 放入赠送记录
224
-		rec := model.TaCouponGiveRecord{
225
-			GiftType:   models.GIVE_GIFT_COUPON,
226
-			GiftId:     cp.CouponId,
227
-			GiftName:   cp.CouponName,
228
-			FromId:     user.UserId,
229
-			FromName:   user.UserName,
230
-			ToId:       cust.CustomerId,
231
-			ToName:     cust.CustomerName,
232
-			CreateDate: now,
222
+	// 优惠券必须状态正常
223
+	if cp.CouponId == "" || cp.Status != models.STATUS_NORMAL {
224
+		return errors.New("优惠券已失效或者不存在")
225
+	}
226
+
227
+	now := time.Now().Local()
228
+	if cp.ValidDays <= 0 {
229
+		if cp.EndDate.Before(now) {
230
+			return errors.New("优惠券已失效")
233 231
 		}
232
+	}
233
+
234
+	// 计算卡券有效期
235
+	startDate := cp.StartDate
236
+	endDate := cp.EndDate
237
+	if cp.ValidDays > 0 {
238
+		startDate = now
239
+		hs := int64(cp.ValidDays * 24)
240
+		endDate = now.Add(time.Hour * time.Duration(hs))
241
+	}
234 242
 
235
-		recs = append(recs, rec)
243
+	// 检查用户是否已经有了该券
244
+	custCPS, err := s.dao.CheckCustCoupon(to.CustomerId, cp.CouponId, startDate, endDate)
245
+	if err != nil {
246
+		utils.LogError("校验客户优惠券失败: " + err.Error())
247
+		return errors.New("校验客户优惠券失败")
248
+	}
249
+
250
+	if custCPS != nil && len(custCPS) > 0 {
251
+		return errors.New("客户 " + to.CustomerName + " 已经拥有该券")
252
+	}
253
+
254
+	// 放入我的卡券
255
+	custCP := model.TaCustomerCoupon{
256
+		CouponId:           cp.CouponId,
257
+		CustomerCouponName: cp.CouponName,
258
+		CustomerId:         to.CustomerId,
259
+		StartDate:          startDate,
260
+		EndDate:            endDate,
261
+		ReceiveDate:        now,
262
+		CaseId:             cp.CaseId,
263
+		OrgId:              cp.OrgId,
264
+	}
265
+
266
+	// 放入赠送记录
267
+	rec := model.TaCouponGiveRecord{
268
+		GiftType:   models.GIVE_GIFT_COUPON,
269
+		GiftId:     cp.CouponId,
270
+		GiftName:   cp.CouponName,
271
+		FromId:     from.UserId,
272
+		FromName:   from.UserName,
273
+		ToId:       to.CustomerId,
274
+		ToName:     to.CustomerName,
275
+		CreateDate: now,
236 276
 	}
237 277
 
238 278
 	// 入库
239
-	if err := s.dao.SaveCustomerCoupons(cps); err != nil {
279
+	if err := s.dao.SaveCustomerCoupons([]model.TaCustomerCoupon{custCP}); err != nil {
240 280
 		utils.LogError("保存客户优惠券失败: " + err.Error())
241 281
 		return errors.New("保存客户优惠券失败")
242 282
 	}
243 283
 
244
-	if err := s.dao.SaveCouponRecoreds(recs); err != nil {
284
+	if err := s.dao.SaveCouponRecoreds([]model.TaCouponGiveRecord{rec}); err != nil {
245 285
 		utils.LogError("保存优惠券赠送记录失败: " + err.Error())
246 286
 		return errors.New("保存优惠券赠送记录失败")
247 287
 	}
248 288
 
289
+	// TODO
290
+	// 券库存处理
291
+
249 292
 	return nil
250 293
 }
294
+
295
+// GetCouponByID 获取优惠券
296
+// 未进行权限校验, 非安全的
297
+func (s *CouponServ) GetCouponByID(cpID string) (*model.TaCoupon, error) {
298
+	cp, err := s.dao.GetCouponByID(cpID)
299
+	if err != nil {
300
+		utils.LogError("获取优惠券失败: " + err.Error())
301
+		return nil, errors.New("校验优惠券失败")
302
+	}
303
+
304
+	return cp, nil
305
+}
306
+
307
+// GetCouponByIDWithCheck 获取优惠券
308
+func (s *CouponServ) GetCouponByIDWithCheck(cpID string) (*model.TaCoupon, error) {
309
+	cp, err := s.dao.GetCouponByID(cpID)
310
+	if err != nil {
311
+		utils.LogError("获取优惠券失败: " + err.Error())
312
+		return nil, errors.New("校验优惠券失败")
313
+	}
314
+
315
+	if err := utils.NewAuthEngine(s.ctx).CheckCase(cp.CaseId); err != nil {
316
+		return nil, err
317
+	}
318
+
319
+	return cp, nil
320
+}

+ 4
- 2
service/customer/customer.go ファイルの表示

@@ -141,7 +141,8 @@ func (s *CustomerServ) BindWechatUser(userMap *model.TaUserMapping, phone string
141 141
 	}
142 142
 
143 143
 	// triggerRegiteEvent 触发注册事件
144
-	utils.EmitEvent(events.EvtRegiste, *cust)
144
+	evtEngID := utils.EngineIDBy(cust.OrgId, cust.RecommendCase)
145
+	utils.EventEngineBus(evtEngID).EmitEvent(events.EvtRegiste, *cust)
145 146
 
146 147
 	// if cust.CustomerId == userMap.UserId {
147 148
 	// 	return cust, nil
@@ -246,7 +247,8 @@ func (s *CustomerServ) BindWechatCust(userMap *model.TaUserMapping, phone, caseI
246 247
 	}
247 248
 
248 249
 	// triggerRegiteEvent 触发注册事件
249
-	utils.EmitEvent(events.EvtRegiste, *cust)
250
+	evtEngID := utils.EngineIDBy(cust.OrgId, cust.RecommendCase)
251
+	utils.EventEngineBus(evtEngID).EmitEvent(events.EvtRegiste, *cust)
250 252
 
251 253
 	// 更新用户映射信息
252 254
 	userMap.UserId = cust.CustomerId

+ 52
- 33
service/events/events.go ファイルの表示

@@ -2,6 +2,9 @@ package events
2 2
 
3 3
 import (
4 4
 	"fmt"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/utils"
5 8
 	"sync"
6 9
 
7 10
 	"github.com/zjxpcyc/tinyevent"
@@ -19,45 +22,61 @@ var EvtActions = map[string]tinyevent.Action{
19 22
 }
20 23
 
21 24
 // ListenAllEvent 监听所有事件
22
-func ListenAllEvent() {
25
+func ListenAllEvent(orgID, caseID string) {
23 26
 	mtx.Lock()
24 27
 	defer mtx.Unlock()
25 28
 
26
-	// // 所有需要执行的事件
27
-	// allEvts, err := getAllEvents()
28
-	// if err != nil {
29
-	// 	utils.LogError(err)
30
-	// }
31
-
32
-	// // 刷新中控中心
33
-	// utils.ResetEvtBus()
34
-
35
-	// for evt, acts := range allEvts {
36
-	// 	for _, actKey := range acts {
37
-	// 		act, ok := EvtActions[actKey]
38
-	// 		if ok {
39
-	// 			utils.ListenEvent(evt, act)
40
-	// 		}
41
-	// 	}
42
-	// }
29
+	evtEngID := utils.EngineIDBy(orgID, caseID)
30
+	evtEngine := utils.ResetEventEngineBus(evtEngID)
31
+
32
+	// 所有需要执行的事件
33
+	allEvts, err := getAllEvents(orgID, caseID)
34
+	if err != nil {
35
+		utils.LogError(err)
36
+	}
37
+
38
+	// 刷新中控中心
39
+	for evt, acts := range allEvts {
40
+		for _, actKey := range acts {
41
+			act, ok := EvtActions[actKey]
42
+			if ok {
43
+				evtEngine.ListenEvent(evt, act)
44
+			}
45
+		}
46
+	}
43 47
 }
44 48
 
45 49
 // getAllEvents 获取数据库配置
46
-func getAllEvents() (map[string][]string, error) {
47
-	// db := models.DBEngine
48
-
49
-	// var evts []model.SysActivity
50
-	// if err := db.Where("status=?", models.STATUS_NORMAL).Find(&evts); err != nil {
51
-	// 	return nil, err
52
-	// }
53
-
54
-	// TODO
55
-	return map[string][]string{
56
-		EvtRegiste: []string{
57
-			ActTest,
58
-			ActGiveCoupon,
59
-		},
60
-	}, nil
50
+func getAllEvents(orgID, caseID string) (map[string][]string, error) {
51
+	db := models.DBEngine
52
+
53
+	var evts []model.SysActivity
54
+	var acts []model.SysActivityAction
55
+
56
+	if err := db.Where("org_id=?", orgID).
57
+		And("case_id=?", caseID).
58
+		And("status=?", models.STATUS_NORMAL).
59
+		Find(&evts); err != nil {
60
+		utils.LogError("查询营销活动配置表失败: " + err.Error())
61
+		return nil, err
62
+	}
63
+
64
+	res := make(map[string][]string)
65
+	for _, evtSetting := range evts {
66
+		res[evtSetting.ActivityType] = make([]string, 0)
67
+		acts = make([]model.SysActivityAction, 0)
68
+
69
+		if err := db.Where("activity_id=?", evtSetting.ActivityId).Find(&acts); err != nil {
70
+			utils.LogError("查询营销活动配置明细失败: " + err.Error())
71
+			return nil, err
72
+		}
73
+
74
+		for _, act := range acts {
75
+			res[evtSetting.ActivityType] = append(res[evtSetting.ActivityType], act.ActiveType)
76
+		}
77
+	}
78
+
79
+	return res, nil
61 80
 }
62 81
 
63 82
 var tsAction = func(e tinyevent.Event) error {

+ 66
- 8
service/events/giveCoupon.go ファイルの表示

@@ -1,22 +1,80 @@
1 1
 package events
2 2
 
3 3
 import (
4
+	"errors"
5
+	"spaceofcheng/services/models"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/service/coupon"
8
+	"spaceofcheng/services/utils"
9
+
4 10
 	"github.com/zjxpcyc/tinyevent"
5 11
 )
6 12
 
7 13
 // giveCoupon 赠送卡券
8 14
 // Event.Payload.customer  = model.TaCustomer
9
-// Event.Payload.caseId  = 案场ID
10 15
 var giveCoupon = func(e tinyevent.Event) error {
11
-	// db := models.DBEngine
16
+	hasDBError := false
17
+	ctx := NewContext()
18
+	defer DestroyContext(ctx, hasDBError)
19
+
20
+	if e.Payload == nil {
21
+		hasDBError = true
22
+		utils.LogError("注册送券失败, 没有用户信息")
23
+		return errors.New("注册送券失败, 没有用户信息")
24
+	}
25
+	dtRaw := e.Payload.(map[string]interface{})
26
+
27
+	cust := dtRaw["customer"].(model.TaCustomer)
28
+	caseID := cust.RecommendCase
29
+	orgID := cust.OrgId
30
+
31
+	query := `
32
+		SELECT
33
+			t.*
34
+		FROM
35
+			sys_activity_action t
36
+		JOIN sys_activity s ON t.activity_id = s.activity_id
37
+		WHERE
38
+			s.org_id = ?
39
+		AND s.case_id = ?
40
+		AND s.status = ?
41
+		AND t.active_type = ?
42
+	`
43
+
44
+	var gifts []model.SysActivityAction
45
+	if err := models.DBEngine.SQL(query, orgID, caseID, models.STATUS_NORMAL, e.Name).Find(&gifts); err != nil {
46
+		hasDBError = true
47
+		utils.LogError("检查营销活动失败: " + err.Error())
48
+		return errors.New("检查营销活动失败")
49
+	}
50
+
51
+	fromUser := model.SysUser{
52
+		UserId:   "SYSTEM",
53
+		UserName: "system",
54
+	}
55
+
56
+	cpServ := coupon.NewCouponServ(ctx)
12 57
 
13
-	// if e.Payload == nil {
14
-	// 	utils.LogError("注册送券失败, 没有用户信息")
15
-	// }
16
-	// dtRaw := e.Payload.(map[string]interface{})
58
+	for _, gift := range gifts {
59
+		switch gift.ResourceType {
60
+		case models.GIVE_GIFT_COUPON:
61
+			cpID := gift.ResourceDesc
62
+			cp, err := cpServ.GetCouponByID(cpID)
63
+			if err != nil {
64
+				utils.LogError("获取优惠券失败: " + err.Error())
65
+				hasDBError = true
66
+				return errors.New("校验优惠券失败")
67
+			}
17 68
 
18
-	// cust := dtRaw["customer"].(model.TaCustomer)
19
-	// caseID := dtRaw["caseId"].(string)
69
+			if err := cpServ.GiveCouponTo(&fromUser, &cust, cp); err != nil {
70
+				hasDBError = true
71
+				return err
72
+			}
73
+		case models.GIVE_GIFT_EXPERIENCECARD:
74
+		case models.GIVE_GIFT_GYM:
75
+		default:
76
+		}
77
+	}
20 78
 
21 79
 	return nil
22 80
 }

+ 25
- 0
service/events/utils.go ファイルの表示

@@ -0,0 +1,25 @@
1
+package events
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/utils"
6
+)
7
+
8
+// NewContext 初始化 ctx 实例
9
+func NewContext() *utils.Context {
10
+	ctx := utils.NewContext(models.DBEngine, nil)
11
+	ctx.Ready()
12
+
13
+	return ctx
14
+}
15
+
16
+// DestroyContext 注销 ctx
17
+func DestroyContext(ctx *utils.Context, hasError bool) {
18
+	if !hasError {
19
+		ctx.DB.Commit()
20
+	} else {
21
+		ctx.DB.Rollback()
22
+	}
23
+
24
+	ctx.Destroy()
25
+}

+ 9
- 1
service/goods/spec.go ファイルの表示

@@ -68,7 +68,15 @@ func (s *GoodsServ) SaveGoodsSpec(goodsSpec model.TdSpec) (*model.TdSpec, error)
68 68
 
69 69
 // DelGoodsSpec 删除商品类型
70 70
 func (s *GoodsServ) DelGoodsSpec(specid string) error {
71
-	err := s.dao.DelGoodsSpec(specid)
71
+	goods, err := s.dao.GetGoodsBySpec(specid)
72
+	if err != nil {
73
+		utils.LogError("删除商品规格失败: " + err.Error())
74
+		return errors.New("删除商品规格失败")
75
+	}
76
+	if len(goods) > 0 {
77
+		return errors.New("已关联商品。不允许删除")
78
+	}
79
+	err = s.dao.DelGoodsSpec(specid)
72 80
 	if err != nil {
73 81
 		utils.LogError("删除商品规格失败: " + err.Error())
74 82
 		return errors.New("删除商品规格失败")

+ 9
- 1
service/goods/type.go ファイルの表示

@@ -82,7 +82,15 @@ func (s *GoodsServ) SaveGoodsType(goodsType model.TdGoodsType) (*model.TdGoodsTy
82 82
 
83 83
 // DelGoodsType 删除商品类型
84 84
 func (s *GoodsServ) DelGoodsType(typeid string) error {
85
-	err := s.dao.DelGoodsType(typeid)
85
+	goods, err := s.dao.GetGoodsByType(typeid)
86
+	if err != nil {
87
+		utils.LogError("删除商品类型失败: " + err.Error())
88
+		return errors.New("删除商品类型失败")
89
+	}
90
+	if len(goods) > 0 {
91
+		return errors.New("已关联商品。不允许删除")
92
+	}
93
+	err = s.dao.DelGoodsType(typeid)
86 94
 	if err != nil {
87 95
 		utils.LogError("删除商品类型失败: " + err.Error())
88 96
 		return errors.New("删除商品类型失败")

+ 2
- 2
service/sys.go ファイルの表示

@@ -75,7 +75,7 @@ func (s *SysServ) SetCustomer(id string) error {
75 75
 func (s *SysServ) SaveNewCustomer(wxInfo map[string]interface{}, userMap *model.TaUserMapping) (*model.TaCustomer, error) {
76 76
 	// 微信相关字段
77 77
 	nickyName := wxInfo["nickname"].(string)
78
-	sex := wxInfo["sex"].(int)
78
+	sex := wxInfo["sex"].(float64)
79 79
 	headimgurl := wxInfo["headimgurl"].(string)
80 80
 
81 81
 	org := s.ctx.Get("org").(model.SysOrg)
@@ -83,7 +83,7 @@ func (s *SysServ) SaveNewCustomer(wxInfo map[string]interface{}, userMap *model.
83 83
 	cust := model.TaCustomer{
84 84
 		CustomerName: nickyName,
85 85
 		Name:         nickyName,
86
-		Sex:          sex,
86
+		Sex:          int(sex),
87 87
 		Headimgurl:   headimgurl,
88 88
 		OrgId:        org.OrgId,
89 89
 	}

+ 32
- 1
service/user.go ファイルの表示

@@ -64,7 +64,19 @@ func (s *UserServ) GetCurrentEnvVars() (map[string]interface{}, error) {
64 64
 	user := s.ctx.Get("user").(model.SysUser)
65 65
 	user.Pwd = ""
66 66
 	// 当前用户案场
67
-	cases := s.ctx.Get("cases").([]model.SysUserCase)
67
+	sessionCase := s.ctx.Get("cases").([]model.SysUserCase)
68
+	caseIDs := ""
69
+	for _, value := range sessionCase {
70
+		if caseIDs != "" {
71
+			caseIDs = caseIDs + ","
72
+		}
73
+		caseIDs = caseIDs + value.CaseId
74
+	}
75
+	cases, err := s.casedao.GetCaseByIDs(caseIDs)
76
+	if err != nil {
77
+		beego.Error(err)
78
+		return nil, err
79
+	}
68 80
 	// 当前用户角色
69 81
 	roles, err := s.dao.GetUserRole(user.UserId)
70 82
 	if err != nil {
@@ -150,6 +162,25 @@ func (s *UserServ) SaveUser(user system.SysUserForm) (*model.SysUser, error) {
150 162
 
151 163
 	var err error
152 164
 	var newUSer *model.SysUser
165
+
166
+	// 手机号码与用户名校验
167
+	var isok bool
168
+	isok, err = s.dao.CheckUserName(user.UserId, user.UserName, user.OrgId)
169
+	if err != nil {
170
+		beego.Error(err)
171
+		return nil, err
172
+	}
173
+	if !isok {
174
+		return nil, errors.New("用户名重复!")
175
+	}
176
+	isok, err = s.dao.CheckUserPhone(user.UserId, user.Phone, user.OrgId)
177
+	if err != nil {
178
+		beego.Error(err)
179
+		return nil, err
180
+	}
181
+	if !isok {
182
+		return nil, errors.New("手机号码重复!")
183
+	}
153 184
 	if user.UserId != "" {
154 185
 		err = s.dao.UpdateUser(userInfo)
155 186
 		if err != nil {

+ 5
- 2
service/verify/verify.go ファイルの表示

@@ -77,13 +77,16 @@ func (s *VerifyServ) GetCustomerCourseDetailByTel(tel, caseids string, page, pag
77 77
 		utils.LogError("获取列表失败: " + err.Error())
78 78
 		return nil, errors.New("获取列表失败")
79 79
 	}
80
-	customerId := customerDetail[0].CustomerId
80
+	if len(customerDetail) == 0 {
81
+		return nil, errors.New("获取列表失败")
82
+	}
83
+	customerID := customerDetail[0].CustomerId
81 84
 	total, err := s.dao.GetCustomerCourseListByTelCount(tel, caseids)
82 85
 	if err != nil {
83 86
 		utils.LogError("获取列表失败: " + err.Error())
84 87
 		return nil, errors.New("获取列表失败")
85 88
 	}
86
-	customer, err := s.cdao.GetCustomerByID(customerId)
89
+	customer, err := s.cdao.GetCustomerByID(customerID)
87 90
 	if err != nil {
88 91
 		utils.LogError("获取列表失败: " + err.Error())
89 92
 		return nil, errors.New("获取列表失败")

+ 60
- 36
utils/event.go ファイルの表示

@@ -1,49 +1,73 @@
1 1
 package utils
2 2
 
3
-// type EventEngine struct {
4
-// 	ID     string
5
-// 	engine *tinyevent.DefaultBus
6
-// }
3
+import "github.com/zjxpcyc/tinyevent"
7 4
 
8
-// var evtBus map[string]*EventEngine
5
+// EventEngine Event Engine
6
+type EventEngine struct {
7
+	ID     string
8
+	engine *tinyevent.DefaultBus
9
+}
9 10
 
10
-// func NewEventEngineBus(id string) *EventEngine {
11
-// 	if evtBus == nil {
12
-// 		evtBus = make(map[string]*EventEngine)
13
-// 	}
11
+var evtBus map[string]*EventEngine
14 12
 
15
-// 	if id == "" {
16
-// 		return nil
17
-// 	}
13
+// EventEngineBus 初始化实例
14
+func EventEngineBus(id string) *EventEngine {
15
+	if evtBus == nil {
16
+		evtBus = make(map[string]*EventEngine)
17
+	}
18 18
 
19
-// 	evtEngine := &EventEngine{
20
-// 		ID:     id,
21
-// 		engine: new(tinyevent.DefaultBus),
22
-// 	}
19
+	if id == "" {
20
+		return nil
21
+	}
23 22
 
24
-// 	evtBus[id] = evtEngine
23
+	if evtBus[id] == nil {
24
+		evtEngine := &EventEngine{
25
+			ID:     id,
26
+			engine: new(tinyevent.DefaultBus),
27
+		}
25 28
 
26
-// 	return evtEngine
27
-// }
29
+		evtBus[id] = evtEngine
30
+	}
28 31
 
29
-// // EmitEvent 执行事件
30
-// func (t EventEngine) EmitEvent(evt string, payload interface{}) {
31
-// 	e := tinyevent.Event{
32
-// 		Name:    evt,
33
-// 		Payload: payload,
34
-// 	}
32
+	return evtBus[id]
33
+}
35 34
 
36
-// 	t.engine.Emit(e)
37
-// }
35
+// ResetEventEngineBus 重设事件管理引擎
36
+func ResetEventEngineBus(id string) *EventEngine {
37
+	if id == "" || evtBus[id] == nil {
38
+		return nil
39
+	}
38 40
 
39
-// // ListenEvent 注册监听
40
-// func (t EventEngine) ListenEvent(evt string, act tinyevent.Action) string {
41
-// 	return t.engine.On(evt, act)
42
-// }
41
+	evtEngine := &EventEngine{
42
+		ID:     id,
43
+		engine: new(tinyevent.DefaultBus),
44
+	}
43 45
 
44
-// // UnListenEvt 取消监听
45
-// func (t EventEngine) UnListenEvt(id string) {
46
-// 	t.engine.Off(id)
47
-// }
46
+	evtBus[id] = evtEngine
47
+	return evtEngine
48
+}
48 49
 
49
-func EmitEvent(evt string, payload interface{}) {}
50
+// EmitEvent 执行事件
51
+func (t EventEngine) EmitEvent(evt string, payload interface{}) {
52
+	e := tinyevent.Event{
53
+		Name:    evt,
54
+		Payload: payload,
55
+	}
56
+
57
+	t.engine.Emit(e)
58
+}
59
+
60
+// ListenEvent 注册监听
61
+func (t EventEngine) ListenEvent(evt string, act tinyevent.Action) string {
62
+	return t.engine.On(evt, act)
63
+}
64
+
65
+// UnListenEvt 取消监听
66
+func (t EventEngine) UnListenEvt(id string) {
67
+	t.engine.Off(id)
68
+}
69
+
70
+// EngineIDBy 获取 Engine Id
71
+func EngineIDBy(orgID, caseID string) string {
72
+	return orgID + caseID
73
+}