Browse Source

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

zjxpcyc 6 years ago
parent
commit
65c0b198d6

+ 298
- 0
controllers/bodycheck/bodycheck.go View File

@@ -0,0 +1,298 @@
1
+package bodycheck
2
+
3
+import (
4
+	"encoding/json"
5
+	"io/ioutil"
6
+	"spaceofcheng/services/controllers"
7
+	"spaceofcheng/services/models/model"
8
+	"spaceofcheng/services/service/bodycheck"
9
+	"spaceofcheng/services/utils"
10
+	"strconv"
11
+	"time"
12
+
13
+	"github.com/astaxie/beego"
14
+
15
+	"github.com/astaxie/beego/config"
16
+	"github.com/zjxpcyc/wechat/wx"
17
+)
18
+
19
+// BodyCheckController 应用
20
+type BodyCheckController struct {
21
+	dao *bodycheck.BodycheckServ
22
+	controllers.BaseController
23
+	weixin *wx.Client
24
+}
25
+
26
+// Constructor 初始化 Controller
27
+// @Title Constructor
28
+// @Description 初始化 Controller, 系统自动调用
29
+func (c *BodyCheckController) Constructor() {
30
+	c.dao = bodycheck.NewBodycheckServ(c.Context)
31
+	org := c.Context.Get("org").(model.SysOrg)
32
+	c.weixin = utils.WxClientFor(org.OrgId)
33
+}
34
+
35
+// GetCheckByUser 根据用户获取体检报告
36
+func (c *BodyCheckController) GetCheckByUser() {
37
+	code := c.GetString("code")
38
+	openid, err := c.weixin.GetOpenID(code)
39
+	if err != nil {
40
+		beego.Error("获取openid失败!", err.Error())
41
+		c.ResponseError(err)
42
+	}
43
+	// openid := "o5EGQ0ytw9JUpSa6N84ddo3CYFO4"
44
+	user, err := c.dao.GetUserByOpenID(openid)
45
+	if err != nil {
46
+		c.ResponseError(err)
47
+	}
48
+	if user == nil {
49
+		c.ResponseError(err)
50
+	}
51
+
52
+	bodyCheck, err := c.dao.GetBodyCheckByUser(user.CustomerId)
53
+	if err != nil {
54
+		c.ResponseJSON(map[string]interface{}{
55
+			"Status":  false,
56
+			"Message": err.Error(),
57
+		})
58
+	}
59
+	if len(bodyCheck) == 0 {
60
+		c.ResponseJSON(map[string]interface{}{
61
+			"Status":  false,
62
+			"Message": "没有查询到数据",
63
+		})
64
+	}
65
+	presentations, err := c.dao.GetPresentationByCheckID(bodyCheck[0].Id)
66
+	if err != nil {
67
+		c.ResponseJSON(map[string]interface{}{
68
+			"Status":  false,
69
+			"Message": err.Error(),
70
+		})
71
+	}
72
+	c.ResponseJSON(map[string]interface{}{
73
+		"Status":   true,
74
+		"Message":  presentations,
75
+		"Info":     bodyCheck,
76
+		"UserInfo": user,
77
+	})
78
+}
79
+
80
+// PostCheckResult 测量结果返回
81
+func (c *BodyCheckController) PostCheckResult() {
82
+	r := c.Ctx.Request
83
+	defer r.Body.Close()
84
+	con, _ := ioutil.ReadAll(r.Body) //获取post的数据
85
+
86
+	var formVal map[string]interface{}
87
+	err := json.Unmarshal(con, &formVal)
88
+	if err != nil {
89
+		beego.Error(err)
90
+		c.ResponseJSON(map[string]interface{}{
91
+			"Status":  false,
92
+			"Message": err.Error(),
93
+		})
94
+	}
95
+
96
+	type CheckResult struct {
97
+		WechatAccount string
98
+		EquipmentId   string
99
+		CheckType     int
100
+		CheckDate     time.Time
101
+		CheckResult   string
102
+		ReportUrl     string
103
+		HMSReportUrl  string
104
+	}
105
+
106
+	var result = CheckResult{}
107
+
108
+	result.EquipmentId = formVal["EquipmentId"].(string)
109
+	result.WechatAccount = formVal["WechatAccount"].(string)
110
+	// result.CheckResult = formVal["CheckResult"].(string)
111
+	result.CheckResult = ""
112
+	result.ReportUrl = formVal["ReportUrl"].(string)
113
+	result.HMSReportUrl = formVal["HMSReportUrl"].(string)
114
+	result.CheckType = int(formVal["CheckType"].(float64))
115
+	if err != nil {
116
+		beego.Error(err.Error())
117
+		c.ResponseJSON(map[string]interface{}{
118
+			"Status":  false,
119
+			"Message": err.Error(),
120
+		})
121
+	}
122
+	loc, _ := time.LoadLocation("Local")
123
+	result.CheckDate, err = time.ParseInLocation("2006-01-02 15:04:05", formVal["CheckDate"].(string), loc)
124
+	if err != nil {
125
+		beego.Error(err.Error())
126
+		c.ResponseJSON(map[string]interface{}{
127
+			"Status":  false,
128
+			"Message": err.Error(),
129
+		})
130
+	}
131
+
132
+	user, err := c.dao.GetUserByOpenID(result.WechatAccount)
133
+	if err != nil {
134
+		beego.Error(err.Error())
135
+		c.ResponseJSON(map[string]interface{}{
136
+			"Status":  false,
137
+			"Message": err.Error(),
138
+		})
139
+	}
140
+
141
+	if user == nil || user.CustomerId == "" {
142
+		beego.Error("没有当前用户信息!")
143
+		c.ResponseJSON(map[string]interface{}{
144
+			"Status":  false,
145
+			"Message": "没有当前用户信息!",
146
+		})
147
+	}
148
+	userid := user.CustomerId
149
+
150
+	checkinfo, err := c.dao.GetCheckByUserAndEquipmentID(userid, result.EquipmentId)
151
+	if err != nil {
152
+		beego.Error(err.Error())
153
+		c.ResponseJSON(map[string]interface{}{
154
+			"Status":  false,
155
+			"Message": err.Error(),
156
+		})
157
+	}
158
+	if checkinfo == nil || checkinfo.Id < 1 || time.Now().Local().Format("2006-01-02") != checkinfo.CreateDate.Format("2006-01-02") {
159
+		caseEquipment, err := c.dao.GetCaseEquipment(result.EquipmentId)
160
+		if err != nil {
161
+			beego.Error(err.Error())
162
+			c.ResponseJSON(map[string]interface{}{
163
+				"Status":  false,
164
+				"Message": err.Error(),
165
+			})
166
+		}
167
+		if caseEquipment == nil || caseEquipment.Id < 1 {
168
+			beego.Error("设备未维护!")
169
+			c.ResponseJSON(map[string]interface{}{
170
+				"Status":  false,
171
+				"Message": "设备未维护!",
172
+			})
173
+		}
174
+		var checkNew = model.TaBodyCheck{}
175
+		checkNew.CaseId = caseEquipment.CaseId
176
+		checkNew.EquipmentId = result.EquipmentId
177
+		checkNew.UserId = userid
178
+		checkNew.ReportUrl = result.HMSReportUrl
179
+		checkNew.CreateDate = result.CheckDate
180
+		checkinfo, err = c.dao.SaveBodyCheckInfo(checkNew)
181
+
182
+		wxconf, _ := config.NewConfig("ini", "conf/wechat.conf")
183
+		messageTplID := wxconf.String("messageTplID")
184
+
185
+		c.weixin.SendTplMessage(result.WechatAccount, messageTplID, beego.AppConfig.String("resultURL"), map[string]wx.TplMessageData{
186
+			"first": wx.TplMessageData{
187
+				Value: "您的体检报告已生成",
188
+			},
189
+			"keyword1": wx.TplMessageData{
190
+				Value: strconv.Itoa(checkinfo.Id),
191
+			},
192
+			"keyword2": wx.TplMessageData{
193
+				Value: result.CheckDate.Format("2006-01-02 15:04"),
194
+			},
195
+			"remark": wx.TplMessageData{
196
+				Value: "",
197
+			},
198
+		})
199
+	}
200
+
201
+	presentation, err := c.dao.GetPresentation(checkinfo.Id, result.CheckType)
202
+	if err != nil {
203
+		beego.Error(err.Error())
204
+		c.ResponseJSON(map[string]interface{}{
205
+			"Status":  false,
206
+			"Message": err.Error(),
207
+		})
208
+	}
209
+	if presentation == nil || presentation.Id < 1 {
210
+		// 新增
211
+		var preNew = model.TaPresentation{}
212
+		preNew.CheckId = checkinfo.Id
213
+		preNew.CheckDate = result.CheckDate
214
+		preNew.CheckResult = result.CheckResult
215
+		preNew.CheckType = result.CheckType
216
+		preNew.ReportUrl = result.ReportUrl
217
+		presentation, err = c.dao.SavePresentation(preNew)
218
+		if err != nil {
219
+			beego.Error(err.Error())
220
+			c.ResponseJSON(map[string]interface{}{
221
+				"Status":  false,
222
+				"Message": err.Error(),
223
+			})
224
+		}
225
+	} else {
226
+		// 修改
227
+		presentation.CheckDate = result.CheckDate
228
+		presentation.CheckResult = result.CheckResult
229
+		presentation.ReportUrl = result.ReportUrl
230
+		err = c.dao.UpdatePresentation(presentation)
231
+		if err != nil {
232
+			beego.Error(err.Error())
233
+			c.ResponseJSON(map[string]interface{}{
234
+				"Status":  false,
235
+				"Message": err.Error(),
236
+			})
237
+		}
238
+		// 删除之前的记录
239
+		err = c.dao.DeletePresentionDetail(presentation.Id)
240
+		if err != nil {
241
+			beego.Error(err.Error())
242
+			c.ResponseJSON(map[string]interface{}{
243
+				"Status":  false,
244
+				"Message": err.Error(),
245
+			})
246
+		}
247
+	}
248
+
249
+	specs, err := c.dao.GetCheckSpecs()
250
+	if err != nil {
251
+		beego.Error(err.Error())
252
+		c.ResponseJSON(map[string]interface{}{
253
+			"Status":  false,
254
+			"Message": err.Error(),
255
+		})
256
+	}
257
+
258
+	if len(formVal) > 0 {
259
+		var details []model.TaPresentationDetail
260
+		for k, v := range formVal {
261
+			if k != "WechatAccount" && k != "EquipmentId" && k != "CheckType" && k != "CheckDate" && k != "CheckResult" && k != "ReportUrl" && k != "HMSReportUrl" && k != "WXID" {
262
+				var detail model.TaPresentationDetail
263
+				detail.CheckName = k
264
+				switch vx := v.(type) {
265
+				case string:
266
+					detail.CheckVal = vx
267
+				case float64:
268
+					detail.CheckVal = strconv.FormatFloat(vx, 'f', 2, 64)
269
+				}
270
+
271
+				detail.PresentationId = presentation.Id
272
+				var specName = ""
273
+				for _, spec := range specs {
274
+					if spec.SortName == k {
275
+						specName = spec.Name
276
+						break
277
+					}
278
+				}
279
+				detail.SpecName = specName
280
+				details = append(details, detail)
281
+			}
282
+		}
283
+		if len(details) > 0 {
284
+			err := c.dao.SavePresentationDetail(details)
285
+			if err != nil {
286
+				beego.Error(err.Error())
287
+				c.ResponseJSON(map[string]interface{}{
288
+					"Status":  false,
289
+					"Message": err.Error(),
290
+				})
291
+			}
292
+		}
293
+	}
294
+	c.ResponseJSON(map[string]interface{}{
295
+		"Status":  true,
296
+		"Message": "",
297
+	})
298
+}

+ 177
- 0
controllers/bodycheck/wechat.go View File

@@ -0,0 +1,177 @@
1
+package bodycheck
2
+
3
+import (
4
+	"bytes"
5
+	"encoding/json"
6
+	"errors"
7
+	"io/ioutil"
8
+	"net/http"
9
+	"strings"
10
+
11
+	"github.com/astaxie/beego"
12
+	"github.com/astaxie/beego/config"
13
+)
14
+
15
+// WechatInfo 微信接入
16
+func (c *BodyCheckController) WechatInfo() {
17
+	// signature := c.GetString("signature")
18
+	// timestamp := c.GetString("timestamp")
19
+	// nonce := c.GetString("nonce")
20
+	echostr := c.GetString("echostr")
21
+	c.ResponseRaw([]byte(echostr))
22
+}
23
+
24
+// GetQrcodeURL 获取二维码信息
25
+func (c *BodyCheckController) GetQrcodeURL() {
26
+	EquipmentID := c.GetString("EquipmentId")
27
+	qrcodePrefix := beego.AppConfig.String("qrcodePrefix")
28
+	qrcode, err := c.weixin.GetTempStrQRCode(qrcodePrefix + EquipmentID)
29
+	if err != nil {
30
+		c.ResponseJson(map[string]interface{}{
31
+			"Status":  false,
32
+			"Message": err.Error(),
33
+		})
34
+	}
35
+	c.ResponseJson(map[string]interface{}{
36
+		"Status":    true,
37
+		"Message":   "",
38
+		"QrcodeUrl": qrcode,
39
+	})
40
+}
41
+
42
+// WxReceive 微信消息接收
43
+func (c *BodyCheckController) WxReceive() {
44
+	r := c.Ctx.Request
45
+	defer r.Body.Close()
46
+	con, _ := ioutil.ReadAll(r.Body) //获取post的数据
47
+	val, err := c.weixin.TransformMessage(string(con))
48
+	if err != nil {
49
+		beego.Error(err.Error())
50
+		c.ResponseRaw([]byte(""))
51
+	}
52
+
53
+	if val["MsgType"] == "event" {
54
+		qrcodePrefix := beego.AppConfig.String("qrcodePrefix")
55
+		if (val["Event"] == "subscribe" && strings.Contains(val["EventKey"], "qrscene_"+qrcodePrefix)) || val["Event"] == "SCAN" {
56
+			EquipmentID := strings.Split(val["EventKey"], qrcodePrefix)[1]
57
+			messagetxt, err := c.scanDo(val, EquipmentID)
58
+			if err != nil {
59
+				beego.Error(err.Error())
60
+				c.ResponseRaw([]byte(""))
61
+			}
62
+			c.ResponseRaw(messagetxt)
63
+		}
64
+	}
65
+	c.ResponseRaw([]byte(""))
66
+}
67
+
68
+func (c *BodyCheckController) scanDo(val map[string]string, EquipmentID string) ([]byte, error) {
69
+	if val["FromUserName"] == "" {
70
+		return nil, errors.New("openid为空")
71
+	}
72
+
73
+	user, err := c.weixin.GetUserDetail(val["FromUserName"])
74
+	if err != nil {
75
+		return nil, err
76
+	}
77
+
78
+	// 判断用户是否存在
79
+	getUser, err := c.dao.GetUserByOpenID(user["openid"].(string))
80
+	if err != nil {
81
+		return nil, err
82
+	}
83
+	name := user["nickname"].(string)
84
+	name = UnicodeEmojiCode(name)
85
+	user["nickname"] = name
86
+	if getUser == nil || getUser.Id < 1 {
87
+		// 新增用户
88
+		var newUser = model.CustomerUser{}
89
+		newUser.Username = name
90
+		newUser.WcNickname = name
91
+		sex := int(user["sex"].(float64))
92
+		if sex == 2 {
93
+			sex = 1
94
+		} else {
95
+			sex = 0
96
+		}
97
+		newUser.Sex = sex
98
+		newUser.OpenId = user["openid"].(string)
99
+		newUser.Icon = user["headimgurl"].(string)
100
+		newUser.UserType = 4
101
+		newUser.ActualBalance = "0.00"
102
+		newUser.GiftBalance = "0.00"
103
+		_, err = c.dao.SaveUser(newUser)
104
+		if err != nil {
105
+			return nil, err
106
+		}
107
+	}
108
+
109
+	type WechatInfo struct {
110
+		EquipmentId    string
111
+		WXID           int
112
+		WechatUserInfo map[string]interface{}
113
+	}
114
+	wxconf, _ := config.NewConfig("ini", "conf/wechat.conf")
115
+	user["wechataccount"] = user["openid"].(string)
116
+	user["wechatofficial"] = wxconf.String("appid")
117
+	var userinfo = WechatInfo{}
118
+	userinfo.EquipmentId = EquipmentID
119
+	userinfo.WechatUserInfo = user
120
+	userinfo.WXID = 1
121
+
122
+	apiPrefix := beego.AppConfig.String("postwechatInfo")
123
+
124
+	b, err := json.Marshal(userinfo)
125
+	if err != nil {
126
+		return nil, err
127
+	}
128
+
129
+	body := bytes.NewBuffer([]byte(b))
130
+	beego.Error(body)
131
+	res, err := http.Post(apiPrefix, "application/json;charset=utf-8", body)
132
+	if err != nil {
133
+		beego.Error(err)
134
+		return nil, err
135
+	}
136
+	result, err := ioutil.ReadAll(res.Body)
137
+	res.Body.Close()
138
+	if err != nil {
139
+		beego.Error(err)
140
+		return nil, err
141
+	}
142
+	var postResult struct {
143
+		Status  bool
144
+		Message string
145
+	}
146
+	if err = json.Unmarshal(result, &postResult); err != nil {
147
+		beego.Error(err)
148
+		return nil, err
149
+	}
150
+
151
+	if !postResult.Status {
152
+		beego.Error(postResult.Message)
153
+		return nil, errors.New(postResult.Message)
154
+	}
155
+
156
+	messagetxt, err := c.weixin.ResponseMessageText(user["openid"].(string), beego.AppConfig.String("followText"))
157
+	if err != nil {
158
+		beego.Error(err)
159
+		return nil, err
160
+	}
161
+	return messagetxt, nil
162
+}
163
+
164
+// UnicodeEmojiCode 过滤表情
165
+func UnicodeEmojiCode(s string) string {
166
+	ret := ""
167
+	rs := []rune(s)
168
+	for i := 0; i < len(rs); i++ {
169
+		if len(string(rs[i])) == 4 {
170
+			// u := `[\u` + strconv.FormatInt(int64(rs[i]), 16) + `]`
171
+			ret += ""
172
+		} else {
173
+			ret += string(rs[i])
174
+		}
175
+	}
176
+	return ret
177
+}

+ 1
- 1
controllers/coupon/coupon.go View File

@@ -6,10 +6,10 @@ import (
6 6
 	"net/http"
7 7
 	"spaceofcheng/services/controllers"
8 8
 	cpModel "spaceofcheng/services/models/coupon"
9
+	"spaceofcheng/services/models/model"
9 10
 	"spaceofcheng/services/service/coupon"
10 11
 	"spaceofcheng/services/utils"
11 12
 	"strings"
12
-	"tolet/models/model"
13 13
 )
14 14
 
15 15
 // CouponController 商品

+ 12
- 12
controllers/gymcard/gymcard.go View File

@@ -119,18 +119,18 @@ func (c *GymcardController) SendGymToCustomer() {
119 119
 	c.ResponseJSON(customerGym)
120 120
 }
121 121
 
122
-// SendGymToCustomer 后台发卡给客户
123
-func (c *GymcardController) BackSendGymToCustomer() {
124
-	gymcardId := c.GetString(":gymcardId")
125
-	customerId := c.GetString(":customerId")
126
-	sysUser := c.Context.Get("user").(model.SysUser)
127
-	userId := sysUser.UserId
128
-	customerGym, err := c.dao.BackSendGymCardToUser(gymcardId, userId, customerId)
129
-	if err != nil {
130
-		c.ResponseError(err)
131
-	}
132
-	c.ResponseJSON(customerGym)
133
-}
122
+// // SendGymToCustomer 后台发卡给客户
123
+// func (c *GymcardController) BackSendGymToCustomer() {
124
+// 	gymcardId := c.GetString(":gymcardId")
125
+// 	customerId := c.GetString(":customerId")
126
+// 	sysUser := c.Context.Get("user").(model.SysUser)
127
+// 	userId := sysUser.UserId
128
+// 	customerGym, err := c.dao.BackSendGymCardToUser(gymcardId, userId, customerId)
129
+// 	if err != nil {
130
+// 		c.ResponseError(err)
131
+// 	}
132
+// 	c.ResponseJSON(customerGym)
133
+// }
134 134
 
135 135
 // VerifyCustomerGymcard 核销客户健身卡
136 136
 func (c *GymcardController) VerifyCustomerGymcard() {

+ 357
- 0
controllers/luckdraw/luckdraw.go View File

@@ -0,0 +1,357 @@
1
+package luckdraw
2
+
3
+import (
4
+	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/service/luckdraw"
7
+	"strconv"
8
+)
9
+
10
+// LuckdrawController 应用
11
+type LuckdrawController struct {
12
+	dao *luckdraw.LuckdrawServ
13
+	controllers.BaseController
14
+}
15
+
16
+// Constructor 初始化 Controller
17
+// @Title Constructor
18
+// @Description 初始化 Controller, 系统自动调用
19
+func (c *LuckdrawController) Constructor() {
20
+	c.dao = luckdraw.NewLuckdrawServ(c.Context)
21
+	org := c.Context.Get("org").(model.SysOrg)
22
+}
23
+
24
+// GetUserByCode 根据code获取用户信息
25
+func (c *LuckDrawController) GetUserByCode() {
26
+	custID := 0
27
+	encodeUser, _ := c.GetInt("from")
28
+	if encodeUser != 0 {
29
+		encodeUser = helper.IntXOR(encodeUser, 97)
30
+		enStr := strconv.Itoa(encodeUser)
31
+		enStr = enStr[:len(enStr)-3]
32
+
33
+		custID, _ = strconv.Atoi(enStr)
34
+	}
35
+
36
+	code := c.GetString("code")
37
+	if c.openid == "" && code == "" && custID == 0 {
38
+		c.ResponseJson(map[string]interface{}{
39
+			"Status":  false,
40
+			"Message": "401-" + c.weixin.GetAppID(),
41
+		})
42
+	}
43
+
44
+	var user *model.CustomerUser
45
+	if custID != 0 {
46
+		var err error
47
+		user, err = c.bodydao.GetCustomerByID(custID)
48
+		if err != nil {
49
+			c.ResponseJson(map[string]interface{}{
50
+				"Status":  false,
51
+				"Message": helper.LogError("获取用户信息失败", err.Error()).Error(),
52
+			})
53
+		}
54
+
55
+		c.openid = user.OpenId
56
+	}
57
+
58
+	if c.openid == "" {
59
+		openid, err := c.weixin.GetOpenID(code)
60
+		if err != nil {
61
+			c.ResponseJson(map[string]interface{}{
62
+				"Status":  false,
63
+				"Message": helper.LogError("获取微信 OpenId 失败", err.Error()).Error(),
64
+			})
65
+		}
66
+
67
+		c.openid = openid
68
+		c.SetSession("openid", openid)
69
+	}
70
+
71
+	if user == nil {
72
+		var err error
73
+		user, err = c.bodydao.GetUserByOpenID(c.openid)
74
+		if err != nil {
75
+			c.ResponseJson(map[string]interface{}{
76
+				"Status":  false,
77
+				"Message": helper.LogError("获取用户信息失败", err.Error()).Error(),
78
+			})
79
+		}
80
+	}
81
+
82
+	if user == nil || user.Tel == "" {
83
+		c.ResponseJson(map[string]interface{}{
84
+			"Status":  true,
85
+			"Message": 406,
86
+		})
87
+	}
88
+
89
+	luckdrawid, _ := c.GetInt("luckdrawid")
90
+	record, err := c.dao.GetUserLuckDrawByLuckDraw(user.Id, luckdrawid)
91
+	if err != nil {
92
+		c.ResponseJson(map[string]interface{}{
93
+			"Status":  false,
94
+			"Message": helper.LogError("获取用户抽奖信息失败", err.Error()).Error(),
95
+		})
96
+	}
97
+	var detail *model.TaPrizeDetail
98
+	if record != nil {
99
+		detail, err = c.dao.GetDetailByRecord(record.Id)
100
+		if err != nil {
101
+			c.ResponseJson(map[string]interface{}{
102
+				"Status":  false,
103
+				"Message": helper.LogError("获取用户抽奖信息失败", err.Error()).Error(),
104
+			})
105
+		}
106
+	}
107
+
108
+	c.ResponseJson(map[string]interface{}{
109
+		"Status": true,
110
+		"Message": map[string]interface{}{
111
+			"user":   user,
112
+			"record": record,
113
+			"detail": detail,
114
+		},
115
+	})
116
+}
117
+
118
+// GetLuckDraw 获取抽奖信息
119
+func (c *LuckDrawController) GetLuckDraw() {
120
+	id, _ := c.GetInt(":id")
121
+	luckdraw, err := c.dao.GetLuckDraw(id)
122
+	if err != nil {
123
+		c.ResponseJson(map[string]interface{}{
124
+			"Status":  false,
125
+			"Message": helper.LogError("获取抽奖信息失败", err.Error()).Error(),
126
+		})
127
+	}
128
+	c.ResponseJson(map[string]interface{}{
129
+		"Status":  true,
130
+		"Message": luckdraw,
131
+	})
132
+}
133
+
134
+// LuckDraw 抽奖
135
+func (c *LuckDrawController) LuckDraw() {
136
+	if c.openid == "" {
137
+		c.ResponseJson(map[string]interface{}{
138
+			"Status":  false,
139
+			"Message": "401-" + c.weixin.GetAppID(),
140
+		})
141
+	}
142
+
143
+	id, _ := c.GetInt(":id")
144
+	user, err := c.bodydao.GetUserByOpenID(c.openid)
145
+	if err != nil {
146
+		c.ResponseJson(map[string]interface{}{
147
+			"Status":  false,
148
+			"Message": helper.LogError("获取用户信息失败", err.Error()).Error(),
149
+		})
150
+	}
151
+
152
+	prize, detail, err := c.dao.LuckDraw(id, user)
153
+	if err != nil {
154
+		c.ResponseJson(map[string]interface{}{
155
+			"Status":  false,
156
+			"Message": err.Error(),
157
+		})
158
+	}
159
+	c.ResponseJson(map[string]interface{}{
160
+		"Status": true,
161
+		"Message": map[string]interface{}{
162
+			"prize":  prize,
163
+			"detail": detail,
164
+		},
165
+	})
166
+}
167
+
168
+// GetRecordByLuckDraw 获取抽奖记录
169
+func (c *LuckDrawController) GetRecordByLuckDraw() {
170
+	id, _ := c.GetInt("id")
171
+	records, err := c.dao.GetRecordByLuckDraw(id)
172
+	if err != nil {
173
+		c.ResponseJson(map[string]interface{}{
174
+			"Status":  false,
175
+			"Message": helper.LogError("获取抽奖记录失败", err.Error()).Error(),
176
+		})
177
+	}
178
+	c.ResponseJson(map[string]interface{}{
179
+		"Status":  true,
180
+		"Message": records,
181
+	})
182
+}
183
+
184
+// GetUserLuckDraw 获取用户的抽奖记录
185
+func (c *LuckDrawController) GetUserLuckDraw() {
186
+	userid, _ := c.GetInt("userid")
187
+	records, err := c.dao.GetUserLuckDraw(userid)
188
+	if err != nil {
189
+		c.ResponseJson(map[string]interface{}{
190
+			"Status":  false,
191
+			"Message": helper.LogError("获取用户抽奖记录失败", err.Error()).Error(),
192
+		})
193
+	}
194
+	c.ResponseJson(map[string]interface{}{
195
+		"Status":  true,
196
+		"Message": records,
197
+	})
198
+}
199
+
200
+// GetRecordByID 根据ID获取中奖记录信息
201
+func (c *LuckDrawController) GetRecordByID() {
202
+	id, _ := c.GetInt(":id")
203
+	record, err := c.dao.GetRecordByID(id)
204
+	if err != nil {
205
+		c.ResponseJson(map[string]interface{}{
206
+			"Status":  false,
207
+			"Message": helper.LogError("获取中奖记录失败", err.Error()).Error(),
208
+		})
209
+	}
210
+
211
+	caseAddress, err := c.dao.GetCaseAddressByLuckDarw(record.LuckdrawId)
212
+	if err != nil {
213
+		c.ResponseJson(map[string]interface{}{
214
+			"Status":  false,
215
+			"Message": helper.LogError("获取案场信息失败", err.Error()).Error(),
216
+		})
217
+	}
218
+
219
+	if caseAddress == "" {
220
+		c.ResponseJson(map[string]interface{}{
221
+			"Status":  false,
222
+			"Message": "无案场, 或案场地址没有维护",
223
+		})
224
+	}
225
+
226
+	prize, err := c.dao.GetPrizeByID(record.PrizeId)
227
+	if err != nil {
228
+		c.ResponseJson(map[string]interface{}{
229
+			"Status":  false,
230
+			"Message": helper.LogError("校验奖品记录失败", err.Error()).Error(),
231
+		})
232
+	}
233
+
234
+	c.ResponseJson(map[string]interface{}{
235
+		"Status": true,
236
+		"Message": map[string]interface{}{
237
+			"record":      record,
238
+			"prize":       prize,
239
+			"caseAddress": caseAddress,
240
+		},
241
+	})
242
+}
243
+
244
+func (c *LuckDrawController) SaveShareRecord() {
245
+	if c.openid == "" {
246
+		c.ResponseJson(map[string]interface{}{
247
+			"Status":  false,
248
+			"Message": "401-" + c.weixin.GetAppID(),
249
+		})
250
+	}
251
+
252
+	errPrefix := "logerror-"
253
+
254
+	id, _ := c.GetInt(":id")
255
+
256
+	fromID, _ := c.GetInt("from")
257
+	if fromID == 0 {
258
+		c.ResponseJson(map[string]interface{}{
259
+			"Status":  false,
260
+			"Message": errPrefix + "没有分享人ID",
261
+		})
262
+	}
263
+
264
+	from, err := c.bodydao.GetCustomerByID(fromID)
265
+	if err != nil {
266
+		c.ResponseJson(map[string]interface{}{
267
+			"Status":  false,
268
+			"Message": errPrefix + helper.LogError("获取分享人信息失败", err.Error()).Error(),
269
+		})
270
+	}
271
+
272
+	if from == nil || from.Id == 0 {
273
+		c.ResponseJson(map[string]interface{}{
274
+			"Status":  false,
275
+			"Message": errPrefix + helper.LogError("分享人信息不存在").Error(),
276
+		})
277
+	}
278
+
279
+	current, err := c.bodydao.GetUserByOpenID(c.openid)
280
+	if err != nil {
281
+		c.ResponseJson(map[string]interface{}{
282
+			"Status":  false,
283
+			"Message": errPrefix + helper.LogError("获取当前人员信息失败", err.Error()).Error(),
284
+		})
285
+	}
286
+
287
+	if current == nil || current.Id == 0 {
288
+		c.ResponseJson(map[string]interface{}{
289
+			"Status":  false,
290
+			"Message": errPrefix + "系统错误, 无当前人员信息",
291
+		})
292
+	}
293
+
294
+	// 自己分享给自己
295
+	if from.Id == current.Id {
296
+		c.ResponseJson(map[string]interface{}{
297
+			"Status":  false,
298
+			"Message": errPrefix + "本人分享内容无效",
299
+		})
300
+	}
301
+
302
+	luckdraw, err := c.dao.GetLuckDrawByID(id)
303
+	if err != nil {
304
+		c.ResponseJson(map[string]interface{}{
305
+			"Status":  false,
306
+			"Message": errPrefix + helper.LogError("获取抽奖信息失败", err.Error()).Error(),
307
+		})
308
+	}
309
+
310
+	if luckdraw == nil {
311
+		c.ResponseJson(map[string]interface{}{
312
+			"Status":  false,
313
+			"Message": errPrefix + helper.LogError("没有找到 id ("+strconv.Itoa(id)+") 对应的抽奖信息").Error(),
314
+		})
315
+	}
316
+
317
+	existsRec, err := c.dao.GetLuckDrawShareData(from.Id, current.Id, luckdraw.Id, luckdraw.CaseId)
318
+	if err != nil {
319
+		c.ResponseJson(map[string]interface{}{
320
+			"Status":  false,
321
+			"Message": errPrefix + helper.LogError("获取已有分享信息失败", err.Error()).Error(),
322
+		})
323
+	}
324
+
325
+	if existsRec != nil && len(existsRec) > 0 {
326
+		c.ResponseJson(map[string]interface{}{
327
+			"Status":  false,
328
+			"Message": errPrefix + "已分享记录, 再次分享无效",
329
+		})
330
+	}
331
+
332
+	shareDt := model.TaShareLuckyRecord{
333
+		FromCustomerId:     from.Id,
334
+		FromCustomerName:   from.Username,
335
+		FromCustomerWxname: from.WcNickname,
336
+		FromCustomerTel:    from.Tel,
337
+		ToCustomerId:       current.Id,
338
+		ToCustomerName:     current.Username,
339
+		ToCustomerWxname:   current.WcNickname,
340
+		ToCustomerTel:      current.Tel,
341
+		CaseId:             luckdraw.CaseId,
342
+		LuckydrawId:        luckdraw.Id,
343
+		LuckydrawName:      luckdraw.Name,
344
+	}
345
+
346
+	if err := c.dao.SaveLuckDrawShareData(&shareDt); err != nil {
347
+		c.ResponseJson(map[string]interface{}{
348
+			"Status":  false,
349
+			"Message": errPrefix + helper.LogError("保存分享记录失败", err.Error()).Error(),
350
+		})
351
+	}
352
+
353
+	c.ResponseJson(map[string]interface{}{
354
+		"Status":  true,
355
+		"Message": "ok",
356
+	})
357
+}

+ 45
- 0
controllers/statistics/cardcoupon.go View File

@@ -21,3 +21,48 @@ func (c *StatisticsController) CardCouponStatistics() {
21 21
 
22 22
 	c.ResponseJSON(list)
23 23
 }
24
+
25
+// CardCouponUsedStatistics 获取卡券使用统计数据
26
+func (c *StatisticsController) CardCouponUsedStatistics() {
27
+	page, _ := c.GetInt("page")
28
+	pagesize, _ := c.GetInt("pagesize")
29
+	caseids := c.GetString("caseid")
30
+	name := c.GetString("name")
31
+	receivetype := c.GetString("receivetype")
32
+	tel := c.GetString("tel")
33
+	begindate := c.GetString("begindate")
34
+	enddate := c.GetString("enddate")
35
+	status := c.GetString("status")
36
+
37
+	if caseids == "" {
38
+		cases := c.Context.Get("cases").([]model.SysUserCase)
39
+		caseids = c.GetCaseIDs(cases)
40
+	}
41
+	list, err := c.serv.CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status, page, pagesize)
42
+	if err != nil {
43
+		c.ResponseError(err)
44
+	}
45
+
46
+	c.ResponseJSON(list)
47
+}
48
+
49
+// CardCouponVerifyStatistics 获取卡券核销统计数据
50
+func (c *StatisticsController) CardCouponVerifyStatistics() {
51
+	page, _ := c.GetInt("page")
52
+	pagesize, _ := c.GetInt("pagesize")
53
+	caseids := c.GetString("caseid")
54
+	name := c.GetString("name")
55
+	tel := c.GetString("tel")
56
+	status := c.GetString("status")
57
+
58
+	if caseids == "" {
59
+		cases := c.Context.Get("cases").([]model.SysUserCase)
60
+		caseids = c.GetCaseIDs(cases)
61
+	}
62
+	list, err := c.serv.CardCouponVerifyStatistics(caseids, tel, name, status, page, pagesize)
63
+	if err != nil {
64
+		c.ResponseError(err)
65
+	}
66
+
67
+	c.ResponseJSON(list)
68
+}

+ 14
- 4
controllers/verify/verify.go View File

@@ -5,6 +5,7 @@ import (
5 5
 	"spaceofcheng/services/models"
6 6
 	"spaceofcheng/services/models/model"
7 7
 	"spaceofcheng/services/service/verify"
8
+	"time"
8 9
 )
9 10
 
10 11
 // CaseController 信息
@@ -70,11 +71,20 @@ func (c *VerifyController) VerifyCourse() {
70 71
 			c.ResponseError(err)
71 72
 		}
72 73
 		if customerCard.VerifyStatus == models.VERIFY_USEABLE {
73
-			customerCard.VerifyStatus = models.VERIFY_USED
74
-			err := c.dao.UpdateCustomerCard(customerCard)
75
-			if err != nil {
76
-				c.ResponseError(err)
74
+			if customerCard.EndDate.After(time.Now()) {
75
+				customerCard.VerifyStatus = models.VERIFY_LATE
76
+				err := c.dao.UpdateCustomerCard(customerCard)
77
+				if err != nil {
78
+					c.ResponseError(err)
79
+				}
80
+			} else {
81
+				customerCard.VerifyStatus = models.VERIFY_USED
82
+				err := c.dao.UpdateCustomerCard(customerCard)
83
+				if err != nil {
84
+					c.ResponseError(err)
85
+				}
77 86
 			}
87
+
78 88
 		}
79 89
 	}
80 90
 	err = c.dao.UpdateCustomerCourse(customerCourse)

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

@@ -1,118 +0,0 @@
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])

+ 75
- 677
log/common.log View File

@@ -1,677 +1,75 @@
1
-<<<<<<< HEAD
2
-2018/09/15 11:14:40 [E] 获取优惠券失败: a pointer to a pointer is not allowed
3
-2018/09/15 11:14:57 [E] 获取优惠券失败: a pointer to a pointer is not allowed
4
-2018/09/15 11:15:39 [E] 获取优惠券失败: a pointer to a pointer is not allowed
5
-=======
6
-2018/09/14 16:15:08 [E] 获取发送卡信息失败: Error 1054: Unknown column 'serial_code' in 'field list'
7
-2018/09/14 16:15:08 [E] 获取人员信息失败: 获取人员信息失败
8
-2018/09/14 16:20:29 [E] 获取发送卡信息失败: Error 1054: Unknown column 'serial_code' in 'field list'
9
-2018/09/14 16:20:29 [E] 获取人员信息失败: 获取人员信息失败
10
-2018/09/14 16:21:28 [E] 获取发送卡信息失败: Error 1054: Unknown column 'serial_code' in 'field list'
11
-2018/09/14 16:21:28 [E] 获取人员信息失败: 获取人员信息失败
12
-2018/09/14 17:38:13 [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 'FROM
13
-			sys_user t
14
-		JOIN sys_user_type s ON t.user_id = s.user_id
15
-		JOIN td_use' at line 4
16
-2018/09/14 18:49:55 [E] 解析 Token 失败: token contains an invalid number of segments
17
-2018/09/14 18:51:10 [E] 解析 Token 失败: token contains an invalid number of segments
18
-2018/09/14 18:51:28 [E] 解析 Token 失败: token contains an invalid number of segments
19
-2018/09/14 18:51:50 [E] 解析 Token 失败: token contains an invalid number of segments
20
-2018/09/14 18:51:57 [E] 解析 Token 失败: token contains an invalid number of segments
21
-2018/09/14 18:52:05 [E] 解析 Token 失败: token contains an invalid number of segments
22
-2018/09/14 18:53:02 [E] 用户没有设置默认案场
23
-2018/09/14 18:56:00 [E] 获取优惠券失败: a pointer to a pointer is not allowed
24
-2018/09/14 18:56:01 [E] 获取优惠券失败: a pointer to a pointer is not allowed
25
-2018/09/14 18:57:23 [E] 获取优惠券失败: Error 1146: Table 'spaceofcheng.ta_coupon_coupon' doesn't exist
26
-2018/09/14 18:57:29 [E] 获取优惠券失败: Error 1146: Table 'spaceofcheng.ta_coupon_coupon' doesn't exist
27
-2018/09/14 18:57:55 [E] 获取优惠券失败: 无优惠券信息
28
-2018/09/14 18:57:56 [E] 获取优惠券失败: 无优惠券信息
29
-2018/09/14 18:59:40 [E] 获取人员信息失败: 您没有权限查看此用户的数据!
30
-2018/09/14 19:03:57 [E] 用户没有设置默认案场
31
-2018/09/14 19:04:01 [E] 用户没有设置默认案场
32
-2018/09/14 19:04:04 [E] 用户没有设置默认案场
33
-2018/09/14 19:04:06 [E] 用户没有设置默认案场
34
-2018/09/14 19:04:08 [E] 用户没有设置默认案场
35
-2018/09/14 19:04:12 [E] 用户没有设置默认案场
36
-2018/09/14 19:04:14 [E] 用户没有设置默认案场
37
-2018/09/14 19:04:15 [E] 用户没有设置默认案场
38
-2018/09/14 19:04:15 [E] 用户没有设置默认案场
39
-2018/09/14 19:04:18 [E] 用户没有设置默认案场
40
-2018/09/14 19:04:31 [E] 用户没有设置默认案场
41
-2018/09/14 19:04:33 [E] 用户没有设置默认案场
42
-2018/09/14 19:04:35 [E] 用户没有设置默认案场
43
-2018/09/14 19:04:49 [E] 用户没有设置默认案场
44
-2018/09/14 19:06:08 [E] 用户没有设置默认案场
45
-2018/09/14 19:06:12 [E] 用户没有设置默认案场
46
-2018/09/14 19:06:12 [E] 用户没有设置默认案场
47
-2018/09/14 19:06:13 [E] 用户没有设置默认案场
48
-2018/09/14 19:06:14 [E] 用户没有设置默认案场
49
-2018/09/14 19:33:44 [E] 解密 Base64 字串失败: illegal base64 data at input byte 0
50
-2018/09/14 19:33:44 [E] 获取组织信息失败: 没有查询到机构信息
51
-2018/09/14 19:33:48 [E] 用户没有设置默认案场
52
-2018/09/14 19:33:48 [E] 用户没有设置默认案场
53
-2018/09/14 19:33:48 [E] 用户没有设置默认案场
54
-2018/09/14 19:33:50 [E] 解密 Base64 字串失败: illegal base64 data at input byte 0
55
-2018/09/14 19:33:50 [E] 获取组织信息失败: 没有查询到机构信息
56
-2018/09/14 19:33:55 [E] 解密 Base64 字串失败: illegal base64 data at input byte 0
57
-2018/09/14 19:33:55 [E] 获取组织信息失败: 没有查询到机构信息
58
-2018/09/14 19:41:54 [E] 用户没有设置默认案场
59
-2018/09/14 19:41:54 [E] 用户没有设置默认案场
60
-2018/09/14 19:41:55 [E] 用户没有设置默认案场
61
-2018/09/14 19:42:03 [E] 用户没有设置默认案场
62
-2018/09/14 19:42:03 [E] 用户没有设置默认案场
63
-2018/09/14 19:42:03 [E] 用户没有设置默认案场
64
-2018/09/14 19:42:44 [E] 用户没有设置默认案场
65
-2018/09/14 19:42:44 [E] 用户没有设置默认案场
66
-2018/09/14 19:42:45 [E] 用户没有设置默认案场
67
-2018/09/14 19:43:42 [E] 用户没有设置默认案场
68
-2018/09/14 19:43:42 [E] 用户没有设置默认案场
69
-2018/09/14 19:43:42 [E] 用户没有设置默认案场
70
-2018/09/14 19:43:57 [E] 用户没有设置默认案场
71
-2018/09/14 19:43:57 [E] 用户没有设置默认案场
72
-2018/09/14 19:43:58 [E] 用户没有设置默认案场
73
-2018/09/14 19:44:47 [E] 用户没有设置默认案场
74
-2018/09/14 19:44:47 [E] 用户没有设置默认案场
75
-2018/09/14 19:44:47 [E] 用户没有设置默认案场
76
-2018/09/14 19:45:28 [E] 用户没有设置默认案场
77
-2018/09/14 19:45:28 [E] 用户没有设置默认案场
78
-2018/09/14 19:45:28 [E] 用户没有设置默认案场
79
-2018/09/14 20:11:26 [E] 用户没有设置默认案场
80
-2018/09/14 20:11:28 [E] 用户没有设置默认案场
81
-2018/09/14 20:11:28 [E] 用户没有设置默认案场
82
-2018/09/14 20:11:39 [E] 用户没有设置默认案场
83
-2018/09/14 20:11:39 [E] 用户没有设置默认案场
84
-2018/09/14 20:11:40 [E] 用户没有设置默认案场
85
-2018/09/14 20:11:42 [E] 用户没有设置默认案场
86
-2018/09/14 20:11:42 [E] 用户没有设置默认案场
87
-2018/09/14 20:11:42 [E] 用户没有设置默认案场
88
-2018/09/14 20:11:43 [E] 用户没有设置默认案场
89
-2018/09/14 20:11:43 [E] 用户没有设置默认案场
90
-2018/09/14 20:11:43 [E] 用户没有设置默认案场
91
-2018/09/14 20:11:52 [E] 用户没有设置默认案场
92
-2018/09/14 20:12:02 [E] 用户没有设置默认案场
93
-2018/09/14 20:13:30 [E] 用户没有设置默认案场
94
-2018/09/14 20:13:30 [E] 用户没有设置默认案场
95
-2018/09/14 20:13:30 [E] 用户没有设置默认案场
96
-2018/09/14 20:13:40 [E] 用户没有设置默认案场
97
-2018/09/14 20:13:40 [E] 用户没有设置默认案场
98
-2018/09/14 20:13:46 [E] 用户没有设置默认案场
99
-2018/09/14 20:13:46 [E] 用户没有设置默认案场
100
-2018/09/14 20:13:46 [E] 用户没有设置默认案场
101
-2018/09/14 20:13:55 [E] 用户没有设置默认案场
102
-2018/09/14 20:14:26 [E] 用户没有设置默认案场
103
-2018/09/14 20:14:29 [E] 用户没有设置默认案场
104
-2018/09/14 20:14:29 [E] 用户没有设置默认案场
105
-2018/09/14 20:14:29 [E] 用户没有设置默认案场
106
-2018/09/14 20:14:30 [E] 用户没有设置默认案场
107
-2018/09/14 20:14:30 [E] 用户没有设置默认案场
108
-2018/09/14 20:14:30 [E] 用户没有设置默认案场
109
-2018/09/14 20:14:36 [E] 用户没有设置默认案场
110
-2018/09/14 20:15:35 [E] 用户没有设置默认案场
111
-2018/09/14 20:15:35 [E] 用户没有设置默认案场
112
-2018/09/14 20:15:35 [E] 用户没有设置默认案场
113
-2018/09/14 20:15:41 [E] 用户没有设置默认案场
114
-2018/09/14 20:15:41 [E] 用户没有设置默认案场
115
-2018/09/14 20:15:42 [E] 用户没有设置默认案场
116
-2018/09/14 20:15:42 [E] 用户没有设置默认案场
117
-2018/09/14 20:15:46 [E] 用户没有设置默认案场
118
-2018/09/14 20:24:55 [E] 用户没有设置默认案场
119
-2018/09/14 20:24:55 [E] 用户没有设置默认案场
120
-2018/09/14 20:24:55 [E] 用户没有设置默认案场
121
-2018/09/14 22:08:53 [E] 用户没有设置默认案场
122
-2018/09/14 22:08:56 [E] 用户没有设置默认案场
123
-2018/09/14 22:08:56 [E] 用户没有设置默认案场
124
-2018/09/14 22:08:57 [E] 用户没有设置默认案场
125
-2018/09/14 22:08:57 [E] 用户没有设置默认案场
126
-2018/09/14 22:08:58 [E] 用户没有设置默认案场
127
-2018/09/14 22:10:27 [E] 用户没有设置默认案场
128
-2018/09/14 22:10:28 [E] 用户没有设置默认案场
129
-2018/09/14 22:10:28 [E] 用户没有设置默认案场
130
-2018/09/14 22:10:30 [E] 用户没有设置默认案场
131
-2018/09/14 22:10:32 [E] 用户没有设置默认案场
132
-2018/09/14 22:10:32 [E] 用户没有设置默认案场
133
-2018/09/14 22:10:36 [E] 用户没有设置默认案场
134
-2018/09/14 22:10:37 [E] 用户没有设置默认案场
135
-2018/09/14 22:10:37 [E] 用户没有设置默认案场
136
-2018/09/14 22:10:39 [E] 用户没有设置默认案场
137
-2018/09/14 22:10:42 [E] 用户没有设置默认案场
138
-2018/09/14 22:10:43 [E] 用户没有设置默认案场
139
-2018/09/14 22:11:18 [E] 用户没有设置默认案场
140
-2018/09/14 22:11:18 [E] 用户没有设置默认案场
141
-2018/09/14 22:11:32 [E] 用户没有设置默认案场
142
-2018/09/14 22:11:48 [E] 用户没有设置默认案场
143
-2018/09/14 22:11:56 [E] 用户没有设置默认案场
144
-2018/09/14 22:11:56 [E] 用户没有设置默认案场
145
-2018/09/14 22:13:30 [E] 用户没有设置默认案场
146
-2018/09/14 22:13:32 [E] 用户没有设置默认案场
147
-2018/09/14 22:13:32 [E] 用户没有设置默认案场
148
-2018/09/14 22:15:12 [E] 用户没有设置默认案场
149
-2018/09/14 22:15:12 [E] 用户没有设置默认案场
150
-2018/09/14 22:15:22 [E] 用户没有设置默认案场
151
-2018/09/14 22:15:23 [E] 用户没有设置默认案场
152
-2018/09/14 22:15:24 [E] 用户没有设置默认案场
153
-2018/09/14 22:15:47 [E] 用户没有设置默认案场
154
-2018/09/14 22:15:47 [E] 用户没有设置默认案场
155
-2018/09/14 22:15:52 [E] 用户没有设置默认案场
156
-2018/09/14 22:15:55 [E] 用户没有设置默认案场
157
-2018/09/14 22:15:55 [E] 用户没有设置默认案场
158
-2018/09/14 22:15:57 [E] 用户没有设置默认案场
159
-2018/09/14 22:15:57 [E] 用户没有设置默认案场
160
-2018/09/14 22:16:05 [E] 用户没有设置默认案场
161
-2018/09/14 22:16:06 [E] 用户没有设置默认案场
162
-2018/09/14 22:16:06 [E] 用户没有设置默认案场
163
-2018/09/14 22:16:08 [E] 用户没有设置默认案场
164
-2018/09/14 22:16:08 [E] 用户没有设置默认案场
165
-2018/09/14 22:16:54 [E] 用户没有设置默认案场
166
-2018/09/14 22:16:54 [E] 用户没有设置默认案场
167
-2018/09/14 22:16:55 [E] 用户没有设置默认案场
168
-2018/09/14 22:17:17 [E] 用户没有设置默认案场
169
-2018/09/14 22:17:17 [E] 用户没有设置默认案场
170
-2018/09/14 22:17:18 [E] 用户没有设置默认案场
171
-2018/09/14 22:17:48 [E] 用户没有设置默认案场
172
-2018/09/14 22:17:48 [E] 用户没有设置默认案场
173
-2018/09/14 22:17:49 [E] 用户没有设置默认案场
174
-2018/09/14 22:18:43 [E] 用户没有设置默认案场
175
-2018/09/14 22:18:43 [E] 用户没有设置默认案场
176
-2018/09/14 22:18:43 [E] 用户没有设置默认案场
177
-2018/09/14 22:19:23 [E] 用户没有设置默认案场
178
-2018/09/14 22:19:23 [E] 用户没有设置默认案场
179
-2018/09/14 22:19:24 [E] 用户没有设置默认案场
180
-2018/09/14 22:19:43 [E] 用户没有设置默认案场
181
-2018/09/14 22:19:43 [E] 用户没有设置默认案场
182
-2018/09/14 22:19:44 [E] 用户没有设置默认案场
183
-2018/09/14 22:20:23 [E] 用户没有设置默认案场
184
-2018/09/14 22:20:24 [E] 用户没有设置默认案场
185
-2018/09/14 22:24:13 [E] 用户没有设置默认案场
186
-2018/09/14 22:24:24 [E] 用户没有设置默认案场
187
-2018/09/14 22:24:31 [E] 用户没有设置默认案场
188
-2018/09/14 22:24:31 [E] 用户没有设置默认案场
189
-2018/09/14 22:27:41 [E] 用户没有设置默认案场
190
-2018/09/14 22:27:41 [E] 用户没有设置默认案场
191
-2018/09/14 22:27:44 [E] 用户没有设置默认案场
192
-2018/09/14 22:27:46 [E] 用户没有设置默认案场
193
-2018/09/14 22:27:47 [E] 用户没有设置默认案场
194
-2018/09/14 22:27:49 [E] 用户没有设置默认案场
195
-2018/09/14 22:27:52 [E] 用户没有设置默认案场
196
-2018/09/14 22:27:53 [E] 用户没有设置默认案场
197
-2018/09/14 22:27:54 [E] 用户没有设置默认案场
198
-2018/09/14 22:27:56 [E] 用户没有设置默认案场
199
-2018/09/14 22:27:56 [E] 用户没有设置默认案场
200
-2018/09/14 22:27:58 [E] 用户没有设置默认案场
201
-2018/09/14 22:28:02 [E] 用户没有设置默认案场
202
-2018/09/14 22:28:03 [E] 用户没有设置默认案场
203
-2018/09/14 22:28:03 [E] 用户没有设置默认案场
204
-2018/09/14 22:28:06 [E] 用户没有设置默认案场
205
-2018/09/14 22:28:06 [E] 用户没有设置默认案场
206
-2018/09/14 22:28:10 [E] 用户没有设置默认案场
207
-2018/09/14 22:28:12 [E] 用户没有设置默认案场
208
-2018/09/14 22:28:12 [E] 用户没有设置默认案场
209
-2018/09/14 22:28:14 [E] 用户没有设置默认案场
210
-2018/09/14 22:28:15 [E] 用户没有设置默认案场
211
-2018/09/14 22:28:24 [E] 用户没有设置默认案场
212
-2018/09/14 22:28:24 [E] 用户没有设置默认案场
213
-2018/09/14 22:28:35 [E] 用户没有设置默认案场
214
-2018/09/14 22:30:28 [E] 用户没有设置默认案场
215
-2018/09/14 22:30:28 [E] 用户没有设置默认案场
216
-2018/09/14 22:30:28 [E] 用户没有设置默认案场
217
-2018/09/14 22:30:30 [E] 用户没有设置默认案场
218
-2018/09/14 22:30:32 [E] 用户没有设置默认案场
219
-2018/09/14 22:30:32 [E] 用户没有设置默认案场
220
-2018/09/14 22:31:11 [E] 用户没有设置默认案场
221
-2018/09/14 22:31:11 [E] 用户没有设置默认案场
222
-2018/09/14 22:31:14 [E] 用户没有设置默认案场
223
-2018/09/14 22:31:14 [E] 用户没有设置默认案场
224
-2018/09/14 22:31:17 [E] 用户没有设置默认案场
225
-2018/09/14 22:31:17 [E] 用户没有设置默认案场
226
-2018/09/14 22:31:17 [E] 用户没有设置默认案场
227
-2018/09/14 22:31:20 [E] 用户没有设置默认案场
228
-2018/09/14 22:31:21 [E] 用户没有设置默认案场
229
-2018/09/14 22:31:21 [E] 用户没有设置默认案场
230
-2018/09/14 22:31:22 [E] 用户没有设置默认案场
231
-2018/09/14 22:31:22 [E] 用户没有设置默认案场
232
-2018/09/14 22:31:22 [E] 用户没有设置默认案场
233
-2018/09/14 22:31:25 [E] 用户没有设置默认案场
234
-2018/09/14 22:31:25 [E] 用户没有设置默认案场
235
-2018/09/14 22:31:31 [E] 用户没有设置默认案场
236
-2018/09/14 22:31:34 [E] 用户没有设置默认案场
237
-2018/09/14 22:31:34 [E] 用户没有设置默认案场
238
-2018/09/14 22:31:51 [E] 用户没有设置默认案场
239
-2018/09/14 22:31:51 [E] 课程截止时间必须大于开始时间!
240
-2018/09/14 22:32:05 [E] 用户没有设置默认案场
241
-2018/09/14 22:32:05 [E] 用户没有设置默认案场
242
-2018/09/14 22:32:05 [E] 用户没有设置默认案场
243
-2018/09/14 22:32:19 [E] 用户没有设置默认案场
244
-2018/09/14 22:32:23 [E] 用户没有设置默认案场
245
-2018/09/14 22:32:24 [E] 用户没有设置默认案场
246
-2018/09/14 22:32:37 [E] 用户没有设置默认案场
247
-2018/09/14 22:32:38 [E] 用户没有设置默认案场
248
-2018/09/14 22:32:45 [E] 用户没有设置默认案场
249
-2018/09/14 22:33:03 [E] 用户没有设置默认案场
250
-2018/09/14 22:33:03 [E] 用户没有设置默认案场
251
-2018/09/14 22:33:10 [E] 用户没有设置默认案场
252
-2018/09/14 22:33:11 [E] 用户没有设置默认案场
253
-2018/09/14 22:33:15 [E] 用户没有设置默认案场
254
-2018/09/14 22:33:15 [E] 用户没有设置默认案场
255
-2018/09/14 22:33:18 [E] 用户没有设置默认案场
256
-2018/09/14 22:33:18 [E] 用户没有设置默认案场
257
-2018/09/14 22:33:35 [E] 用户没有设置默认案场
258
-2018/09/14 22:33:35 [E] 用户没有设置默认案场
259
-2018/09/14 22:33:48 [E] 用户没有设置默认案场
260
-2018/09/14 22:33:50 [E] 用户没有设置默认案场
261
-2018/09/14 22:33:52 [E] 用户没有设置默认案场
262
-2018/09/14 22:33:52 [E] 用户没有设置默认案场
263
-2018/09/14 22:33:54 [E] 用户没有设置默认案场
264
-2018/09/14 22:33:54 [E] 用户没有设置默认案场
265
-2018/09/14 22:33:57 [E] 用户没有设置默认案场
266
-2018/09/14 22:33:58 [E] 用户没有设置默认案场
267
-2018/09/14 22:33:58 [E] 用户没有设置默认案场
268
-2018/09/14 22:33:59 [E] 用户没有设置默认案场
269
-2018/09/14 22:34:02 [E] 用户没有设置默认案场
270
-2018/09/14 22:34:38 [E] 用户没有设置默认案场
271
-2018/09/14 22:34:41 [E] 用户没有设置默认案场
272
-2018/09/14 22:35:24 [E] 用户没有设置默认案场
273
-2018/09/14 22:35:24 [E] 接收优惠券信息失败: parsing time """" as ""2006-01-02T15:04:05Z07:00"": cannot parse """ as "2006"
274
-2018/09/14 22:36:00 [E] 用户没有设置默认案场
275
-2018/09/14 22:36:00 [E] 接收优惠券信息失败: parsing time """" as ""2006-01-02T15:04:05Z07:00"": cannot parse """ as "2006"
276
-2018/09/14 22:39:29 [E] 用户没有设置默认案场
277
-2018/09/14 22:39:36 [E] 用户没有设置默认案场
278
-2018/09/14 22:39:37 [E] 用户没有设置默认案场
279
-2018/09/14 22:39:48 [E] 用户没有设置默认案场
280
-2018/09/14 22:39:49 [E] 用户没有设置默认案场
281
-2018/09/14 22:39:50 [E] 用户没有设置默认案场
282
-2018/09/14 22:39:50 [E] 用户没有设置默认案场
283
-2018/09/14 22:39:51 [E] 用户没有设置默认案场
284
-2018/09/14 22:39:52 [E] 用户没有设置默认案场
285
-2018/09/14 22:39:53 [E] 用户没有设置默认案场
286
-2018/09/14 22:39:53 [E] 用户没有设置默认案场
287
-2018/09/15 11:29:11 [E] 用户没有设置默认案场
288
-2018/09/15 11:29:47 [E] 用户没有设置默认案场
289
-2018/09/15 11:30:22 [E] 用户没有设置默认案场
290
-2018/09/15 11:30:22 [E] 用户没有设置默认案场
291
-2018/09/15 11:30:23 [E] 用户没有设置默认案场
292
-2018/09/15 11:30:23 [E] 用户没有设置默认案场
293
-2018/09/15 11:30:30 [E] 用户没有设置默认案场
294
-2018/09/15 11:30:31 [E] 用户没有设置默认案场
295
-2018/09/15 11:30:31 [E] 用户没有设置默认案场
296
-2018/09/15 11:30:32 [E] 用户没有设置默认案场
297
-2018/09/15 11:30:33 [E] 用户没有设置默认案场
298
-2018/09/15 11:30:33 [E] 用户没有设置默认案场
299
-2018/09/15 11:36:00 [E] 用户没有设置默认案场
300
-2018/09/15 11:36:00 [E] 用户没有设置默认案场
301
-2018/09/15 11:36:10 [E] 用户没有设置默认案场
302
-2018/09/15 11:36:11 [E] 用户没有设置默认案场
303
-2018/09/15 11:36:13 [E] 用户没有设置默认案场
304
-2018/09/15 11:36:13 [E] 用户没有设置默认案场
305
-2018/09/15 11:36:19 [E] 用户没有设置默认案场
306
-2018/09/15 11:36:19 [E] 用户没有设置默认案场
307
-2018/09/15 11:36:50 [E] 用户没有设置默认案场
308
-2018/09/15 11:36:50 [E] 用户没有设置默认案场
309
-2018/09/15 11:36:54 [E] 用户没有设置默认案场
310
-2018/09/15 11:36:54 [E] 用户没有设置默认案场
311
-2018/09/15 11:36:54 [E] 用户没有设置默认案场
312
-2018/09/15 11:37:07 [E] 用户没有设置默认案场
313
-2018/09/15 11:37:08 [E] 用户没有设置默认案场
314
-2018/09/15 11:37:10 [E] 用户没有设置默认案场
315
-2018/09/15 11:37:10 [E] 用户没有设置默认案场
316
-2018/09/15 11:37:10 [E] 用户没有设置默认案场
317
-2018/09/15 11:37:18 [E] 用户没有设置默认案场
318
-2018/09/15 11:37:18 [E] 用户没有设置默认案场
319
-2018/09/15 11:37:23 [E] 用户没有设置默认案场
320
-2018/09/15 11:37:23 [E] 用户没有设置默认案场
321
-2018/09/15 11:37:23 [E] 用户没有设置默认案场
322
-2018/09/15 11:37:32 [E] 用户没有设置默认案场
323
-2018/09/15 11:37:36 [E] 用户没有设置默认案场
324
-2018/09/15 11:45:20 [E] 用户没有设置默认案场
325
-2018/09/15 11:45:22 [E] 用户没有设置默认案场
326
-2018/09/15 11:45:22 [E] 用户没有设置默认案场
327
-2018/09/15 11:46:04 [E] 用户没有设置默认案场
328
-2018/09/15 11:46:04 [E] 用户没有设置默认案场
329
-2018/09/15 11:46:11 [E] 用户没有设置默认案场
330
-2018/09/15 11:46:11 [E] 用户没有设置默认案场
331
-2018/09/15 11:46:16 [E] 用户没有设置默认案场
332
-2018/09/15 11:46:16 [E] 用户没有设置默认案场
333
-2018/09/15 11:46:20 [E] 用户没有设置默认案场
334
-2018/09/15 11:46:23 [E] 用户没有设置默认案场
335
-2018/09/15 11:46:56 [E] 用户没有设置默认案场
336
-2018/09/15 11:47:01 [E] 用户没有设置默认案场
337
-2018/09/15 11:47:25 [E] 用户没有设置默认案场
338
-2018/09/15 11:47:25 [E] 用户没有设置默认案场
339
-2018/09/15 11:47:36 [E] 用户没有设置默认案场
340
-2018/09/15 11:47:36 [E] 用户没有设置默认案场
341
-2018/09/15 13:28:31 [E] 用户没有设置默认案场
342
-2018/09/15 13:28:34 [E] 用户没有设置默认案场
343
-2018/09/15 13:29:21 [E] 用户没有设置默认案场
344
-2018/09/15 13:29:56 [E] 用户没有设置默认案场
345
-2018/09/15 13:30:01 [E] 用户没有设置默认案场
346
-2018/09/15 13:30:04 [E] 用户没有设置默认案场
347
-2018/09/15 13:30:04 [E] 用户没有设置默认案场
348
-2018/09/15 13:30:07 [E] 用户没有设置默认案场
349
-2018/09/15 13:30:10 [E] 用户没有设置默认案场
350
-2018/09/15 13:45:16 [E] 用户没有设置默认案场
351
-2018/09/15 13:45:16 [E] 用户没有设置默认案场
352
-2018/09/15 13:45:18 [E] 用户没有设置默认案场
353
-2018/09/15 13:45:24 [E] 用户没有设置默认案场
354
-2018/09/15 13:45:24 [E] 用户没有设置默认案场
355
-2018/09/15 13:49:03 [E] 用户没有设置默认案场
356
-2018/09/15 13:49:03 [E] 用户没有设置默认案场
357
-2018/09/15 13:49:07 [E] 用户没有设置默认案场
358
-2018/09/15 13:49:08 [E] 用户没有设置默认案场
359
-2018/09/15 13:49:08 [E] 用户没有设置默认案场
360
-2018/09/15 13:49:20 [E] 用户没有设置默认案场
361
-2018/09/15 13:49:20 [E] 用户没有设置默认案场
362
-2018/09/15 13:49:20 [E] 用户没有设置默认案场
363
-2018/09/15 13:49:23 [E] 用户没有设置默认案场
364
-2018/09/15 13:49:27 [E] 用户没有设置默认案场
365
-2018/09/15 13:49:28 [E] 用户没有设置默认案场
366
-2018/09/15 13:49:31 [E] 用户没有设置默认案场
367
-2018/09/15 13:49:31 [E] 用户没有设置默认案场
368
-2018/09/15 13:49:35 [E] 用户没有设置默认案场
369
-2018/09/15 13:49:37 [E] 用户没有设置默认案场
370
-2018/09/15 13:49:37 [E] 用户没有设置默认案场
371
-2018/09/15 13:49:38 [E] 用户没有设置默认案场
372
-2018/09/15 13:49:39 [E] 用户没有设置默认案场
373
-2018/09/15 13:49:40 [E] 用户没有设置默认案场
374
-2018/09/15 13:49:42 [E] 用户没有设置默认案场
375
-2018/09/15 13:49:44 [E] 用户没有设置默认案场
376
-2018/09/15 13:49:44 [E] 用户没有设置默认案场
377
-2018/09/15 13:49:50 [E] 用户没有设置默认案场
378
-2018/09/15 13:49:50 [E] 用户没有设置默认案场
379
-2018/09/15 13:49:54 [E] 用户没有设置默认案场
380
-2018/09/15 13:49:54 [E] 用户没有设置默认案场
381
-2018/09/15 13:49:54 [E] 用户没有设置默认案场
382
-2018/09/15 13:50:04 [E] 用户没有设置默认案场
383
-2018/09/15 13:50:04 [E] 用户没有设置默认案场
384
-2018/09/15 13:50:04 [E] 用户没有设置默认案场
385
-2018/09/15 13:50:06 [E] 用户没有设置默认案场
386
-2018/09/15 13:50:07 [E] 用户没有设置默认案场
387
-2018/09/15 13:50:08 [E] 用户没有设置默认案场
388
-2018/09/15 13:50:15 [E] 用户没有设置默认案场
389
-2018/09/15 13:50:15 [E] 用户没有设置默认案场
390
-2018/09/15 13:50:15 [E] 用户没有设置默认案场
391
-2018/09/15 13:51:50 [E] 用户没有设置默认案场
392
-2018/09/15 13:51:50 [E] 用户没有设置默认案场
393
-2018/09/15 13:51:50 [E] 用户没有设置默认案场
394
-2018/09/15 13:52:55 [E] 用户没有设置默认案场
395
-2018/09/15 13:52:55 [E] 用户没有设置默认案场
396
-2018/09/15 13:52:57 [E] 用户没有设置默认案场
397
-2018/09/15 13:52:57 [E] 用户没有设置默认案场
398
-2018/09/15 13:52:57 [E] 用户没有设置默认案场
399
-2018/09/15 13:52:59 [E] 用户没有设置默认案场
400
-2018/09/15 13:52:59 [E] 用户没有设置默认案场
401
-2018/09/15 13:53:01 [E] 用户没有设置默认案场
402
-2018/09/15 13:53:02 [E] 用户没有设置默认案场
403
-2018/09/15 13:53:02 [E] 用户没有设置默认案场
404
-2018/09/15 13:53:14 [E] 用户没有设置默认案场
405
-2018/09/15 13:53:14 [E] 用户没有设置默认案场
406
-2018/09/15 13:53:14 [E] 用户没有设置默认案场
407
-2018/09/15 13:53:16 [E] 用户没有设置默认案场
408
-2018/09/15 13:53:17 [E] 用户没有设置默认案场
409
-2018/09/15 13:53:17 [E] 用户没有设置默认案场
410
-2018/09/15 13:53:52 [E] 用户没有设置默认案场
411
-2018/09/15 13:53:52 [E] 用户没有设置默认案场
412
-2018/09/15 13:55:00 [E] 用户没有设置默认案场
413
-2018/09/15 13:55:01 [E] 用户没有设置默认案场
414
-2018/09/15 13:56:24 [E] 用户没有设置默认案场
415
-2018/09/15 13:56:24 [E] 用户没有设置默认案场
416
-2018/09/15 13:56:37 [E] 用户没有设置默认案场
417
-2018/09/15 13:56:41 [E] 用户没有设置默认案场
418
-2018/09/15 13:56:41 [E] 用户没有设置默认案场
419
-2018/09/15 13:56:43 [E] 用户没有设置默认案场
420
-2018/09/15 14:13:12 [E] 用户没有设置默认案场
421
-2018/09/15 14:13:13 [E] 用户没有设置默认案场
422
-2018/09/15 14:13:14 [E] 用户没有设置默认案场
423
-2018/09/15 14:13:16 [E] 用户没有设置默认案场
424
-2018/09/15 14:13:16 [E] 用户没有设置默认案场
425
-2018/09/15 14:13:17 [E] 用户没有设置默认案场
426
-2018/09/15 14:13:22 [E] 用户没有设置默认案场
427
-2018/09/15 14:13:27 [E] 用户没有设置默认案场
428
-2018/09/15 14:21:00 [E] 用户没有设置默认案场
429
-2018/09/15 14:21:00 [E] 用户没有设置默认案场
430
-2018/09/15 14:21:01 [E] 用户没有设置默认案场
431
-2018/09/15 14:21:03 [E] 用户没有设置默认案场
432
-2018/09/15 14:21:03 [E] 用户没有设置默认案场
433
-2018/09/15 14:23:36 [E] 用户没有设置默认案场
434
-2018/09/15 14:23:39 [E] 用户没有设置默认案场
435
-2018/09/15 14:23:39 [E] 用户没有设置默认案场
436
-2018/09/15 14:23:42 [E] 用户没有设置默认案场
437
-2018/09/15 14:23:43 [E] 用户没有设置默认案场
438
-2018/09/15 14:23:43 [E] 用户没有设置默认案场
439
-2018/09/15 14:23:44 [E] 用户没有设置默认案场
440
-2018/09/15 14:23:49 [E] 用户没有设置默认案场
441
-2018/09/15 14:23:49 [E] 用户没有设置默认案场
442
-2018/09/15 15:48:21 [E] 用户没有设置默认案场
443
-2018/09/15 15:48:24 [E] 用户没有设置默认案场
444
-2018/09/15 15:48:29 [E] 用户没有设置默认案场
445
-2018/09/15 15:48:29 [E] 用户没有设置默认案场
446
-2018/09/15 15:48:32 [E] 用户没有设置默认案场
447
-2018/09/15 15:48:36 [E] 用户没有设置默认案场
448
-2018/09/15 15:48:36 [E] 用户没有设置默认案场
449
-2018/09/15 17:32:50 [E] 用户没有设置默认案场
450
-2018/09/15 17:32:50 [E] 用户没有设置默认案场
451
-2018/09/15 17:35:31 [E] 用户没有设置默认案场
452
-2018/09/15 17:35:31 [E] 用户没有设置默认案场
453
-2018/09/15 19:53:50 [E] 用户没有设置默认案场
454
-2018/09/15 19:58:02 [E] 用户没有设置默认案场
455
-2018/09/15 19:58:21 [E] 用户没有设置默认案场
456
-2018/09/15 19:59:28 [E] 用户没有设置默认案场
457
-2018/09/15 19:59:28 [E] 用户没有设置默认案场
458
-2018/09/15 20:00:27 [E] 用户没有设置默认案场
459
-2018/09/15 20:00:27 [E] 用户没有设置默认案场
460
-2018/09/15 20:05:23 [E] 用户没有设置默认案场
461
-2018/09/15 20:05:23 [E] 用户没有设置默认案场
462
-2018/09/15 20:05:34 [E] 用户没有设置默认案场
463
-2018/09/15 20:05:34 [E] 用户没有设置默认案场
464
-2018/09/15 20:06:38 [E] 用户没有设置默认案场
465
-2018/09/15 20:08:27 [E] 用户没有设置默认案场
466
-2018/09/15 20:09:25 [E] 用户没有设置默认案场
467
-2018/09/15 20:10:33 [E] 用户没有设置默认案场
468
-2018/09/15 20:10:36 [E] 用户没有设置默认案场
469
-2018/09/15 20:10:36 [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 'lile '%111%' GROUP BY
470
-					e.case_name,
471
-					b.goods_name,
472
-					c.type_name,
473
-			' at line 24
474
-2018/09/15 20:10:59 [E] 用户没有设置默认案场
475
-2018/09/15 20:10:59 [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 'lile '%111%' GROUP BY
476
-					e.case_name,
477
-					b.goods_name,
478
-					c.type_name,
479
-			' at line 24
480
-2018/09/15 20:14:41 [E] 用户没有设置默认案场
481
-2018/09/15 20:14:41 [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 'lile '%111%' GROUP BY
482
-					e.case_name,
483
-					b.goods_name,
484
-					c.type_name,
485
-			' at line 24
486
-2018/09/15 20:15:09 [E] 用户没有设置默认案场
487
-2018/09/15 20:15:09 [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 'lile '%111%' GROUP BY
488
-					e.case_name,
489
-					b.goods_name,
490
-					c.type_name,
491
-			' at line 24
492
-2018/09/15 20:16:08 [E] 用户没有设置默认案场
493
-2018/09/15 20:16:33 [E] 用户没有设置默认案场
494
-2018/09/15 20:16:33 [E] 用户没有设置默认案场
495
-2018/09/15 20:18:10 [E] 用户没有设置默认案场
496
-2018/09/15 20:18:11 [E] 用户没有设置默认案场
497
-2018/09/15 20:18:16 [E] 用户没有设置默认案场
498
-2018/09/15 20:18:16 [E] 用户没有设置默认案场
499
-2018/09/15 20:18:17 [E] 用户没有设置默认案场
500
-2018/09/15 20:19:05 [E] 用户没有设置默认案场
501
-2018/09/15 20:19:05 [E] 用户没有设置默认案场
502
-2018/09/15 20:19:12 [E] 用户没有设置默认案场
503
-2018/09/15 20:19:19 [E] 用户没有设置默认案场
504
-2018/09/15 20:19:19 [E] 创建VIP卡失败: Error 1054: Unknown column 'sales_id' in 'field list'
505
-2018/09/15 20:20:02 [E] 用户没有设置默认案场
506
-2018/09/15 20:21:40 [E] 用户没有设置默认案场
507
-2018/09/15 20:21:40 [E] 用户没有设置默认案场
508
-2018/09/15 20:21:40 [E] 用户没有设置默认案场
509
-2018/09/15 20:21:55 [E] 用户没有设置默认案场
510
-2018/09/15 20:21:55 [E] 用户没有设置默认案场
511
-2018/09/15 20:22:03 [E] 用户没有设置默认案场
512
-2018/09/15 20:22:23 [E] 用户没有设置默认案场
513
-2018/09/15 20:22:25 [E] 用户没有设置默认案场
514
-2018/09/15 20:22:30 [E] 用户没有设置默认案场
515
-2018/09/15 20:22:36 [E] 课程下单失败: Error 1366: Incorrect decimal value: '' for column 'coupon_amount' at row 1
516
-2018/09/15 20:22:36 [E] 课程下单失败: 下单失败, 请重试
517
-2018/09/15 20:23:41 [E] 用户没有设置默认案场
518
-2018/09/15 20:23:41 [E] 用户没有设置默认案场
519
-2018/09/15 20:23:42 [E] 用户没有设置默认案场
520
-2018/09/15 20:28:39 [E] 用户没有设置默认案场
521
-2018/09/15 20:28:39 [E] 用户没有设置默认案场
522
-2018/09/15 20:30:57 [E] 用户没有设置默认案场
523
-2018/09/15 20:30:57 [E] 用户没有设置默认案场
524
-2018/09/15 20:31:21 [E] 用户没有设置默认案场
525
-2018/09/15 20:31:21 [E] 用户没有设置默认案场
526
-2018/09/15 20:35:30 [E] 用户没有设置默认案场
527
-2018/09/15 20:36:12 [E] 用户没有设置默认案场
528
-2018/09/15 20:36:12 [E] 用户没有设置默认案场
529
-2018/09/15 20:45:17 [E] 用户没有设置默认案场
530
-2018/09/15 20:46:02 [E] 用户没有设置默认案场
531
-2018/09/15 20:46:28 [E] 用户没有设置默认案场
532
-2018/09/15 20:46:41 [E] 用户没有设置默认案场
533
-2018/09/15 20:46:41 [E] 用户没有设置默认案场
534
-2018/09/15 20:47:09 [E] 用户没有设置默认案场
535
-2018/09/15 20:47:09 [E] 用户没有设置默认案场
536
-2018/09/15 20:47:26 [E] 用户没有设置默认案场
537
-2018/09/15 20:47:29 [E] 用户没有设置默认案场
538
-2018/09/15 20:47:29 [E] 用户没有设置默认案场
539
-2018/09/15 20:47:50 [E] 用户没有设置默认案场
540
-2018/09/15 20:48:53 [E] 用户没有设置默认案场
541
-2018/09/15 20:54:06 [E] 用户没有设置默认案场
542
-2018/09/15 20:54:11 [E] 用户没有设置默认案场
543
-2018/09/15 20:54:16 [E] 用户没有设置默认案场
544
-2018/09/15 20:55:29 [E] 用户没有设置默认案场
545
-2018/09/15 20:56:43 [E] 用户没有设置默认案场
546
-2018/09/15 20:56:46 [E] 用户没有设置默认案场
547
-2018/09/15 20:57:08 [E] 用户没有设置默认案场
548
-2018/09/15 20:57:08 [E] 用户没有设置默认案场
549
-2018/09/15 20:57:14 [E] 用户没有设置默认案场
550
-2018/09/15 20:57:17 [E] 用户没有设置默认案场
551
-2018/09/15 20:57:24 [E] 用户没有设置默认案场
552
-2018/09/15 20:58:03 [E] 用户没有设置默认案场
553
-2018/09/15 20:58:42 [E] 用户没有设置默认案场
554
-2018/09/15 21:01:05 [E] 用户没有设置默认案场
555
-2018/09/15 21:03:14 [E] 用户没有设置默认案场
556
-2018/09/15 21:04:55 [E] 用户没有设置默认案场
557
-2018/09/15 21:05:20 [E] 用户没有设置默认案场
558
-2018/09/15 21:07:38 [E] 用户没有设置默认案场
559
-2018/09/15 21:08:00 [E] 用户没有设置默认案场
560
-2018/09/15 21:09:20 [E] 用户没有设置默认案场
561
-2018/09/15 21:09:35 [E] 用户没有设置默认案场
562
-2018/09/15 21:09:35 [E] 用户没有设置默认案场
563
-2018/09/15 21:09:58 [E] 用户没有设置默认案场
564
-2018/09/15 21:10:18 [E] 用户没有设置默认案场
565
-2018/09/15 21:10:18 [E] 用户没有设置默认案场
566
-2018/09/15 21:10:50 [E] 用户没有设置默认案场
567
-2018/09/15 21:11:12 [E] 用户没有设置默认案场
568
-2018/09/15 21:11:20 [E] 用户没有设置默认案场
569
-2018/09/15 21:12:04 [E] 用户没有设置默认案场
570
-2018/09/15 21:12:55 [E] 用户没有设置默认案场
571
-2018/09/15 21:13:03 [E] 用户没有设置默认案场
572
-2018/09/15 21:18:03 [E] 用户没有设置默认案场
573
-2018/09/15 21:18:03 [E] 用户没有设置默认案场
574
-2018/09/15 21:18:09 [E] 用户没有设置默认案场
575
-2018/09/15 21:18:09 [E] 用户没有设置默认案场
576
-2018/09/15 21:18:09 [E] 用户没有设置默认案场
577
-2018/09/15 21:18:49 [E] 用户没有设置默认案场
578
-2018/09/15 21:18:49 [E] 用户没有设置默认案场
579
-2018/09/15 21:18:50 [E] 用户没有设置默认案场
580
-2018/09/15 21:19:33 [E] 用户没有设置默认案场
581
-2018/09/15 21:19:33 [E] 用户没有设置默认案场
582
-2018/09/15 21:19:48 [E] 用户没有设置默认案场
583
-2018/09/15 21:19:48 [E] 用户没有设置默认案场
584
-2018/09/15 21:19:51 [E] 用户没有设置默认案场
585
-2018/09/15 21:40:12 [E] 用户没有设置默认案场
586
-2018/09/15 21:41:19 [E] 用户没有设置默认案场
587
-2018/09/15 21:42:34 [E] 用户没有设置默认案场
588
-2018/09/15 21:43:20 [E] 用户没有设置默认案场
589
-2018/09/15 21:43:20 [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 'SELECT
590
-					*
591
-				FROM
592
-					ta_customer_course
593
-				Where d.case_id in ('9c04f91b' at line 34
594
-2018/09/15 21:43:23 [E] 用户没有设置默认案场
595
-2018/09/15 21:43:23 [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 'SELECT
596
-					*
597
-				FROM
598
-					ta_customer_course
599
-				Where d.case_id in ('9c04f91b' at line 34
600
-2018/09/15 21:43:59 [E] 用户没有设置默认案场
601
-2018/09/15 21:43:59 [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 'SELECT
602
-					*
603
-				FROM
604
-					ta_customer_course
605
-				Where d.case_id in ('9c04f91b' at line 34
606
-2018/09/15 21:44:20 [E] 用户没有设置默认案场
607
-2018/09/15 21:44:20 [E] 用户没有设置默认案场
608
-2018/09/15 21:45:48 [E] 用户没有设置默认案场
609
-2018/09/15 21:45:48 [E] 用户没有设置默认案场
610
-2018/09/15 21:45:48 [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 'FROM
611
-					ta_course a
612
-				INNER JOIN sys_case d ON a.case_id = d.case_id
613
-				INN' at line 9
614
-2018/09/15 21:48:06 [E] 用户没有设置默认案场
615
-2018/09/15 21:48:06 [E] 用户没有设置默认案场
616
-2018/09/15 21:48:06 [E] 用户没有设置默认案场
617
-2018/09/15 21:48:06 [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 'FROM
618
-					ta_course a
619
-				INNER JOIN sys_case d ON a.case_id = d.case_id
620
-				INN' at line 9
621
-2018/09/15 21:48:20 [E] 用户没有设置默认案场
622
-2018/09/15 21:48:20 [E] 用户没有设置默认案场
623
-2018/09/15 21:48:20 [E] 用户没有设置默认案场
624
-2018/09/15 21:51:03 [E] 用户没有设置默认案场
625
-2018/09/15 21:51:03 [E] 用户没有设置默认案场
626
-2018/09/15 21:51:11 [E] 用户没有设置默认案场
627
-2018/09/15 21:51:11 [E] 用户没有设置默认案场
628
-2018/09/15 21:51:11 [E] 用户没有设置默认案场
629
-2018/09/15 21:51:33 [E] 用户没有设置默认案场
630
-2018/09/15 21:51:38 [E] 用户没有设置默认案场
631
-2018/09/15 21:51:41 [E] 用户没有设置默认案场
632
-2018/09/15 21:51:41 [E] 用户没有设置默认案场
633
-2018/09/15 21:51:46 [E] 用户没有设置默认案场
634
-2018/09/15 21:51:48 [E] 用户没有设置默认案场
635
-2018/09/15 21:51:50 [E] 用户没有设置默认案场
636
-2018/09/15 21:51:50 [E] 用户没有设置默认案场
637
-2018/09/15 21:51:55 [E] 用户没有设置默认案场
638
-2018/09/15 21:51:55 [E] 用户没有设置默认案场
639
-2018/09/15 22:18:54 [E] 用户没有设置默认案场
640
-2018/09/15 22:18:57 [E] 用户没有设置默认案场
641
-2018/09/15 22:19:59 [E] 用户没有设置默认案场
642
-2018/09/15 22:20:01 [E] 用户没有设置默认案场
643
-2018/09/15 22:20:21 [E] 用户没有设置默认案场
644
-2018/09/15 22:47:00 [E] 用户没有设置默认案场
645
-2018/09/15 22:47:30 [E] 用户没有设置默认案场
646
-2018/09/15 22:48:21 [E] 用户没有设置默认案场
647
-2018/09/15 22:50:03 [E] 用户没有设置默认案场
648
-2018/09/15 22:50:03 [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 '' at line 47
649
-2018/09/15 22:50:13 [E] 用户没有设置默认案场
650
-2018/09/15 22:50:13 [E] 用户没有设置默认案场
651
-2018/09/15 22:50:13 [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 '' at line 47
652
-2018/09/15 22:50:43 [E] 用户没有设置默认案场
653
-2018/09/15 22:50:43 [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 '' at line 47
654
-2018/09/15 22:50:54 [E] 用户没有设置默认案场
655
-2018/09/15 22:50:54 [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 '' at line 47
656
-2018/09/15 22:51:06 [E] 用户没有设置默认案场
657
-2018/09/15 22:51:06 [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 '' at line 47
658
-2018/09/15 22:51:06 [E] 用户没有设置默认案场
659
-2018/09/15 22:52:12 [E] 用户没有设置默认案场
660
-2018/09/15 22:52:12 [E] 用户没有设置默认案场
661
-2018/09/15 22:54:10 [E] 用户没有设置默认案场
662
-2018/09/15 22:55:21 [E] 用户没有设置默认案场
663
-2018/09/15 22:57:24 [E] 用户没有设置默认案场
664
-2018/09/15 22:58:36 [E] 用户没有设置默认案场
665
-2018/09/15 22:58:41 [E] 用户没有设置默认案场
666
-2018/09/15 22:58:54 [E] 用户没有设置默认案场
667
-2018/09/15 22:58:59 [E] 用户没有设置默认案场
668
-2018/09/15 22:58:59 [E] 用户没有设置默认案场
669
-2018/09/15 22:59:16 [E] 用户没有设置默认案场
670
-2018/09/15 22:59:16 [E] 用户没有设置默认案场
671
-2018/09/15 22:59:18 [E] 用户没有设置默认案场
672
-2018/09/15 22:59:27 [E] 用户没有设置默认案场
673
-2018/09/15 22:59:27 [E] 用户没有设置默认案场
674
-2018/09/15 22:59:28 [E] 用户没有设置默认案场
675
-2018/09/15 22:59:28 [E] 用户没有设置默认案场
676
-2018/09/15 22:59:31 [E] 用户没有设置默认案场
677
->>>>>>> 261635f0082f4060d7e426d9b9a13779d3d891e3
1
+2018/09/16 13:47:31 [E] 用户没有设置默认案场
2
+2018/09/16 13:47:31 [E] 用户没有设置默认案场
3
+2018/09/16 14:28:03 [E] 用户没有设置默认案场
4
+2018/09/16 14:30:45 [E] 用户没有设置默认案场
5
+2018/09/16 14:30:45 [E] 用户没有设置默认案场
6
+2018/09/16 16:20:46 [E] 获取优惠券失败: 无优惠券信息
7
+2018/09/16 16:21:58 [E] 获取发送卡信息失败: Error 1054: Unknown column 'price' in 'field list'
8
+2018/09/16 16:21:58 [E] 获取人员信息失败: 获取人员信息失败
9
+2018/09/16 16:22:02 [E] 获取发送卡信息失败: Error 1054: Unknown column 'price' in 'field list'
10
+2018/09/16 16:22:02 [E] 获取人员信息失败: 获取人员信息失败
11
+2018/09/16 16:22:06 [E] 获取发送卡信息失败: Error 1054: Unknown column 'price' in 'field list'
12
+2018/09/16 16:22:06 [E] 获取人员信息失败: 获取人员信息失败
13
+2018/09/16 16:22:58 [E] 获取优惠券失败: 无优惠券信息
14
+2018/09/16 16:23:05 [E] 获取优惠券失败: 无优惠券信息
15
+2018/09/16 16:23:51 [E] 获取优惠券失败: 无优惠券信息
16
+2018/09/16 16:25:36 [E] 获取优惠券失败: 无优惠券信息
17
+2018/09/16 16:27:03 [E] 获取优惠券失败: 无优惠券信息
18
+2018/09/16 16:27:17 [E] 获取优惠券失败: 无优惠券信息
19
+2018/09/16 16:28:54 [E] 获取体验卡失败: 无卡信息
20
+2018/09/16 16:29:01 [E] 获取优惠券失败: 无优惠券信息
21
+2018/09/16 16:29:08 [E] 获取体验卡失败: 无卡信息
22
+2018/09/16 16:30:00 [E] 获取体验卡失败: 无卡信息
23
+2018/09/16 17:16:29 [E] 用户没有设置默认案场
24
+2018/09/16 17:17:29 [E] 用户没有设置默认案场
25
+2018/09/16 17:19:08 [E] 用户没有设置默认案场
26
+2018/09/16 17:19:08 [E] 用户没有设置默认案场
27
+2018/09/16 17:19:27 [E] 用户没有设置默认案场
28
+2018/09/16 17:19:46 [E] 用户没有设置默认案场
29
+2018/09/16 17:22:18 [E] 用户没有设置默认案场
30
+2018/09/16 17:22:37 [E] 用户没有设置默认案场
31
+2018/09/16 17:22:44 [E] 用户没有设置默认案场
32
+2018/09/16 17:25:46 [E] 用户没有设置默认案场
33
+2018/09/16 17:26:51 [E] 用户没有设置默认案场
34
+2018/09/16 17:26:51 [E] 用户没有设置默认案场
35
+2018/09/16 17:28:05 [E] 用户没有设置默认案场
36
+2018/09/16 17:28:10 [E] 用户没有设置默认案场
37
+2018/09/16 17:28:10 [E] 用户没有设置默认案场
38
+2018/09/16 17:30:24 [E] 用户没有设置默认案场
39
+2018/09/16 17:31:05 [E] 用户没有设置默认案场
40
+2018/09/16 17:31:05 [E] 用户没有设置默认案场
41
+2018/09/16 17:31:14 [E] 用户没有设置默认案场
42
+2018/09/16 17:31:47 [E] 用户没有设置默认案场
43
+2018/09/16 17:31:47 [E] 用户没有设置默认案场
44
+2018/09/16 17:32:20 [E] 用户没有设置默认案场
45
+2018/09/16 17:32:24 [E] 用户没有设置默认案场
46
+2018/09/16 17:32:24 [E] 用户没有设置默认案场
47
+2018/09/16 17:32:38 [E] 用户没有设置默认案场
48
+2018/09/16 17:32:38 [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 'and tab.phone like '%111%' order by receive_date desc limit 0, 10' at line 61
49
+2018/09/16 17:34:59 [E] 用户没有设置默认案场
50
+2018/09/16 17:35:20 [E] 用户没有设置默认案场
51
+2018/09/16 17:35:20 [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 'and tab.receivetype = 'case' order by receive_date desc limit 0, 10' at line 61
52
+2018/09/16 17:36:21 [E] 用户没有设置默认案场
53
+2018/09/16 17:36:21 [E] 用户没有设置默认案场
54
+2018/09/16 17:36:28 [E] 用户没有设置默认案场
55
+2018/09/16 17:36:48 [E] 用户没有设置默认案场
56
+2018/09/16 17:36:55 [E] 用户没有设置默认案场
57
+2018/09/16 17:36:59 [E] 用户没有设置默认案场
58
+2018/09/16 17:37:02 [E] 用户没有设置默认案场
59
+2018/09/16 17:37:05 [E] 用户没有设置默认案场
60
+2018/09/16 17:37:26 [E] 用户没有设置默认案场
61
+2018/09/16 17:37:26 [E] 获取卡券统计数据失败: Error 1054: Unknown column 'tab.receivetype' in 'where clause'
62
+2018/09/16 17:38:24 [E] 用户没有设置默认案场
63
+2018/09/16 17:38:24 [E] 用户没有设置默认案场
64
+2018/09/16 17:38:26 [E] 用户没有设置默认案场
65
+2018/09/16 17:38:35 [E] 用户没有设置默认案场
66
+2018/09/16 17:38:37 [E] 用户没有设置默认案场
67
+2018/09/16 17:38:41 [E] 用户没有设置默认案场
68
+2018/09/16 17:38:43 [E] 用户没有设置默认案场
69
+2018/09/16 17:38:45 [E] 用户没有设置默认案场
70
+2018/09/16 17:38:59 [E] 用户没有设置默认案场
71
+2018/09/16 17:39:02 [E] 用户没有设置默认案场
72
+2018/09/16 17:39:07 [E] 用户没有设置默认案场
73
+2018/09/16 17:39:13 [E] 用户没有设置默认案场
74
+2018/09/16 18:43:58 [E] 用户没有设置默认案场
75
+2018/09/16 18:43:58 [E] 用户没有设置默认案场

+ 4
- 4
models/bodycheck/bodycheck.go View File

@@ -24,7 +24,7 @@ func NewDAO(ctx *utils.Context) *DAO {
24 24
 }
25 25
 
26 26
 // GetBodyCheckByUser 根据用户信息获取体检信息
27
-func (m *DAO) GetBodyCheckByUser(userID int) ([]model.TaBodyCheck, error) {
27
+func (m *DAO) GetBodyCheckByUser(userID string) ([]model.TaBodyCheck, error) {
28 28
 	var bodychecks []model.TaBodyCheck
29 29
 	var err error
30 30
 	err = m.db.Where("user_id=?", userID).And("status=?", 1).Desc("create_date").Find(&bodychecks)
@@ -39,7 +39,7 @@ func (m *DAO) GetCheckSpecs() ([]model.TdCheckSpec, error) {
39 39
 }
40 40
 
41 41
 // GetCheckByUserAndEquipmentID 根据用户与设备ID获取体检信息
42
-func (m *DAO) GetCheckByUserAndEquipmentID(userID int, EquipmentID string) (*model.TaBodyCheck, error) {
42
+func (m *DAO) GetCheckByUserAndEquipmentID(userID string, EquipmentID string) (*model.TaBodyCheck, error) {
43 43
 	var check []model.TaBodyCheck
44 44
 	err := m.db.Where("user_id=?", userID).And("equipment_id=?", EquipmentID).And("status=?", 1).Desc("create_date").Find(&check)
45 45
 	if err != nil {
@@ -82,9 +82,9 @@ func (m *DAO) GetUserByOpenID(openid string) (*model.TaCustomer, error) {
82 82
 }
83 83
 
84 84
 // GetCustomerByID 根据客户ID 获取用户信息
85
-func (m *DAO) GetCustomerByID(id int) (*model.TaCustomer, error) {
85
+func (m *DAO) GetCustomerByID(id string) (*model.TaCustomer, error) {
86 86
 	var cust model.TaCustomer
87
-	_, err := m.db.Where("id=?", id).Get(&cust)
87
+	_, err := m.db.Where("customer_id=?", id).Get(&cust)
88 88
 	return &cust, err
89 89
 }
90 90
 

+ 4
- 3
models/constant.go View File

@@ -108,9 +108,10 @@ const (
108 108
 
109 109
 // 核销类型
110 110
 const (
111
-	VERIFY_USEABLE = "useable"
112
-	VERIFY_USED    = "used"
113
-	VERIFY_LATE    = "late"
111
+	VERIFY_USEABLE = "useable" // 未使用
112
+	VERIFY_USED    = "used"    // 已使用
113
+	VERIFY_LATE    = "late"    // 逾期核销
114
+	VERIFY_EXPIRE  = "expire"  // 已失效
114 115
 )
115 116
 
116 117
 // 卡券赠送类型

+ 1
- 1
models/course/order.go View File

@@ -43,7 +43,7 @@ func (m *CourseDAO) GetOrderByID(ordersid string) (*model.TaCourseOrders, error)
43 43
 func (m *CourseDAO) SaveCourseOrderDetail(details []model.TaCourseOrdersDetail) error {
44 44
 	for i, d := range details {
45 45
 		d.OrdersDetailId = guid.NewGUIDString()
46
-
46
+		d.CreateDate = time.Now()
47 47
 		details[i] = d
48 48
 	}
49 49
 

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

@@ -11,4 +11,5 @@ type CustWithWX struct {
11 11
 	UserTypeId          string
12 12
 	Points              int
13 13
 	MapUser             string
14
+	BelongCaseId        string
14 15
 }

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

@@ -61,6 +61,7 @@ func (m *GoodsDAO) SaveOrdersDetail(list []model.TaGoodsOrdersDetail, ordersID s
61 61
 	for inx := range list {
62 62
 		list[inx].DetailId = guid.NewGUIDString()
63 63
 		list[inx].OrdersId = ordersID
64
+		list[inx].CreateDate = time.Now()
64 65
 	}
65 66
 
66 67
 	if _, err := m.db.Insert(list); err != nil {

+ 445
- 0
models/luckdraw/luckdraw.go View File

@@ -0,0 +1,445 @@
1
+package luckdraw
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/model"
6
+	"spaceofcheng/services/utils"
7
+	"strconv"
8
+	"time"
9
+
10
+	"github.com/go-xorm/xorm"
11
+)
12
+
13
+const (
14
+	StatusNormal = 1
15
+)
16
+
17
+// DAO 当前数据库操作对象
18
+type DAO struct {
19
+	ctx *utils.Context
20
+	db  *xorm.Session
21
+}
22
+
23
+// NewDAO 初始化DAO
24
+func NewDAO(ctx *utils.Context) *DAO {
25
+	return &DAO{
26
+		ctx: ctx,
27
+		db:  ctx.DB,
28
+	}
29
+}
30
+
31
+const (
32
+	STATUS_NOWRITROFF = 0
33
+)
34
+
35
+// LuckDraw 抽奖记录
36
+type LuckDraw struct {
37
+	model.TaLuckdraw `xorm:"extends"`
38
+	Prizes           []model.TaLuckdrawPrize
39
+}
40
+
41
+// GetLuckDraw 获取抽奖信息
42
+func (m *DAO) GetLuckDraw(id int) (*LuckDraw, error) {
43
+	if id == 0 {
44
+		return nil, utils.LogError("不存在抽奖信息!")
45
+	}
46
+
47
+	luckdraw, err := m.GetLuckDrawByID(id)
48
+	if err != nil {
49
+		return nil, err
50
+	}
51
+	prizes, err := m.GetPrizes(id)
52
+	if err != nil {
53
+		return nil, err
54
+	}
55
+	luckdraw.Prizes = prizes
56
+	return luckdraw, nil
57
+}
58
+
59
+// LuckDraw 抽奖
60
+func (m *DAO) LuckDraw(id int, user *model.TaCustomer) (*model.TaLuckdrawPrize, *model.TaPrizeDetail, error) {
61
+	luckdraw, err := m.GetLuckDrawByID(id)
62
+	if err != nil {
63
+		return nil, nil, utils.LogError("获取抽奖信息失败!", err)
64
+	}
65
+	if luckdraw.Status != models.STATUS_NORMAL {
66
+		return nil, nil, utils.LogError("当前抽奖活动状态异常!")
67
+	}
68
+	if time.Now().Before(luckdraw.BeginDate) {
69
+		return nil, nil, utils.LogError("活动还未开始!")
70
+	}
71
+	if time.Now().After(luckdraw.EndDate) {
72
+		return nil, nil, utils.LogError("活动已结束!")
73
+	}
74
+	if user.Phone != "" {
75
+		sysuser, err := m.GetUserByTel(user.Phone)
76
+		if err != nil {
77
+			return nil, nil, utils.LogError("获取信息失败!", err)
78
+		}
79
+		if sysuser != nil {
80
+			return nil, nil, utils.LogError("内部人员不允许进行抽奖!")
81
+		}
82
+	}
83
+	userluckdraws, err := m.GetUserRecordByLuckDraw(user.CustomerId, id)
84
+	if err != nil {
85
+		return nil, nil, utils.LogError("获取用户抽奖信息失败!", err)
86
+	}
87
+	if len(userluckdraws) > 0 {
88
+		return nil, nil, utils.LogError("您已参与过此次抽奖,不允许重复抽奖!")
89
+	}
90
+	prizes, err := m.GetPrizeStock(id)
91
+	if err != nil {
92
+		return nil, nil, utils.LogError("获取奖项失败!", err)
93
+	}
94
+	if len(prizes) == 0 {
95
+		err = m.UpdateLuckDrawEndDate(luckdraw.Id)
96
+		if err != nil {
97
+			return nil, nil, utils.LogError("操作失败,请刷新后重试!", err)
98
+		}
99
+		return nil, nil, utils.LogError("活动已结束!")
100
+	}
101
+	prize, err := m.GetWinning(prizes)
102
+	if err != nil {
103
+		return nil, nil, utils.LogError("获取奖项失败!", err)
104
+	}
105
+
106
+	details, err := m.GetPrizeDetail(prize.Id)
107
+	if err != nil {
108
+		return nil, nil, utils.LogError("获取奖项详情失败!", err)
109
+	}
110
+
111
+	// 保存中奖记录
112
+	var record = model.TaLuckdrawRecord{}
113
+	record.OrgId = luckdraw.OrgId
114
+	record.CaseId = luckdraw.CaseId
115
+	record.PrizeId = prize.Id
116
+	record.PrizeName = prize.PrizeName
117
+	record.UserId = user.CustomerId
118
+	record.UserName = user.Name
119
+	record.UserHeadImg = user.Headimgurl
120
+	record.LuckdrawId = luckdraw.Id
121
+	newrecord, err := m.SaveRecord(record)
122
+	var detail = model.TaPrizeDetail{}
123
+	if len(details) > 0 {
124
+		// 更新中奖纪录明细
125
+		details[0].ReceiveId = newrecord.Id
126
+		err = m.UpdatePrizeDetail(details[0])
127
+		if err != nil {
128
+			return nil, nil, utils.LogError("操作失败!", err)
129
+		}
130
+		detail = details[0]
131
+		// 奖项自动核销,走卡券核销流程
132
+		err = m.PrizeWriteOff(newrecord.Id, user.CustomerId)
133
+		if err != nil {
134
+			return nil, nil, utils.LogError("操作失败!", err)
135
+		}
136
+	}
137
+	// 更新库存
138
+	if prize.IsReality == 1 {
139
+		prize.Remainder = prize.Remainder - 1
140
+		err = m.UpdateStock(prize)
141
+		if err != nil {
142
+			return nil, nil, err
143
+		}
144
+		stockprizes, err := m.GetPrizeStock(id)
145
+		if err != nil {
146
+			return nil, nil, utils.LogError("操作失败,请刷新后重试!", err)
147
+		}
148
+		if len(stockprizes) == 0 {
149
+			// 更新活动截止时间
150
+			err = m.UpdateLuckDrawEndDate(luckdraw.Id)
151
+		}
152
+	}
153
+
154
+	return prize, &detail, err
155
+}
156
+
157
+// PrizeWriteOff 奖品核销
158
+func (m *DAO) PrizeWriteOff(recordid int, userid string) error {
159
+	record, err := m.GetRecordByID(recordid)
160
+	if err != nil {
161
+		return err
162
+	}
163
+	var writeoff = model.TaLuckdrawWriteoff{}
164
+	writeoff.LuckdrawId = record.LuckdrawId
165
+	writeoff.CaseId = record.CaseId
166
+	writeoff.OrgId = record.OrgId
167
+	writeoff.RecordId = record.Id
168
+	writeoff.WriteoffUser = userid
169
+	_, err = m.SaveWirteOff(writeoff)
170
+	if err != nil {
171
+		return err
172
+	}
173
+	err = m.UpdateRecord(record)
174
+	return err
175
+}
176
+
177
+// GetWinning 获取中奖信息
178
+func (m *DAO) GetWinning(prizes []model.TaLuckdrawPrize) (*model.TaLuckdrawPrize, error) {
179
+	pList := make([]map[string]interface{}, 0)
180
+	now := time.Now().Local()
181
+
182
+	for _, prize := range prizes {
183
+		// 有剩余的 并且 未过期的
184
+		if prize.Remainder > 0 && now.Before(prize.VerificationEnd) {
185
+			p := map[string]interface{}{
186
+				"prize": prize,
187
+				"prob":  prize.Probability,
188
+			}
189
+
190
+			pList = append(pList, p)
191
+		}
192
+	}
193
+
194
+	if len(pList) == 0 {
195
+		return nil, utils.LogError("所有奖品已抽完")
196
+	}
197
+
198
+	thePrize := utils.LuckyDraw(pList).(model.TaLuckdrawPrize)
199
+
200
+	return &thePrize, nil
201
+}
202
+
203
+// GetLuckDrawByID 获取抽奖信息
204
+func (m *DAO) GetLuckDrawByID(id int) (*LuckDraw, error) {
205
+	var luckdraws []LuckDraw
206
+	sql := `select * from ta_luckdraw where id= ?`
207
+	err := m.db.SQL(sql, id).Find(&luckdraws)
208
+	if err != nil {
209
+		return nil, err
210
+	}
211
+	if len(luckdraws) > 0 {
212
+		return &luckdraws[0], nil
213
+	}
214
+	return nil, nil
215
+}
216
+
217
+// GetCaseAddressByLuckDarw 获取案场地址
218
+func (m *DAO) GetCaseAddressByLuckDarw(luckdraw int) (string, error) {
219
+	sql := `
220
+		SELECT
221
+			t.address
222
+		FROM
223
+			sys_case t
224
+		INNER JOIN ta_luckdraw s ON t.case_id = s.case_id
225
+		WHERE
226
+			s.id = ?
227
+	`
228
+
229
+	res, err := m.db.Query(sql, luckdraw)
230
+	if err != nil {
231
+		return "", err
232
+	}
233
+
234
+	if res == nil || len(res) == 0 {
235
+		return "", nil
236
+	}
237
+
238
+	return string(res[0]["address"]), nil
239
+}
240
+
241
+// UpdateLuckDrawEndDate 更新活动结束时间
242
+func (m *DAO) UpdateLuckDrawEndDate(id int) error {
243
+	var luckdraw = model.TaLuckdraw{
244
+		Id:      id,
245
+		EndDate: time.Now(),
246
+	}
247
+	cols := []string{
248
+		"end_date",
249
+	}
250
+	_, err := m.db.Update(luckdraw, cols, "id=?", id)
251
+	return err
252
+}
253
+
254
+// GetPrizes 获取奖品信息
255
+func (m *DAO) GetPrizes(luckdrawid int) ([]model.TaLuckdrawPrize, error) {
256
+	var prizes []model.TaLuckdrawPrize
257
+	err := m.db.Where("luckdraw_id=?", luckdrawid).And("status=?", models.STATUS_NORMAL).Find(&prizes)
258
+	return prizes, err
259
+}
260
+
261
+// UpdateStock 修改库存
262
+func (m *DAO) UpdateStock(prize *model.TaLuckdrawPrize) error {
263
+	cols := []string{
264
+		"remainder",
265
+	}
266
+	_, err := m.db.Update(prize, cols, "id=?", prize.Id)
267
+	return err
268
+}
269
+
270
+// GetPrizeStock 判断奖项库存
271
+func (m *DAO) GetPrizeStock(luckdrawid int) ([]model.TaLuckdrawPrize, error) {
272
+	var prizes []model.TaLuckdrawPrize
273
+	err := m.db.Where("luckdraw_id=?", luckdrawid).And("status=?", models.STATUS_NORMAL).And("(remainder>0 or is_reality=0)").Find(&prizes)
274
+	return prizes, err
275
+}
276
+
277
+// GetPrizeByID 根据id获取奖品信息
278
+func (m *DAO) GetPrizeByID(id int) (model.TaLuckdrawPrize, error) {
279
+	var prize = model.TaLuckdrawPrize{}
280
+	_, err := m.db.Where("id=?", id).Get(&prize)
281
+	return prize, err
282
+}
283
+
284
+// SaveRecord 保存抽奖记录
285
+func (m *DAO) SaveRecord(record model.TaLuckdrawRecord) (*model.TaLuckdrawRecord, error) {
286
+	record.CreateDate = time.Now()
287
+	record.Status = STATUS_NOWRITROFF
288
+	_, err := m.db.Insert(&record)
289
+	return &record, err
290
+}
291
+
292
+// GetPrizeDetail 获取未领取的奖品详情
293
+func (m *DAO) GetPrizeDetail(prizeid int) ([]model.TaPrizeDetail, error) {
294
+	var details []model.TaPrizeDetail
295
+	err := m.db.Where("prize_id=?", prizeid).And("status=?", STATUS_NOWRITROFF).Find(&details)
296
+	return details, err
297
+}
298
+
299
+// UpdatePrizeDetail 更新库存明细为已领取
300
+func (m *DAO) UpdatePrizeDetail(detail model.TaPrizeDetail) error {
301
+	detail.Status = models.STATUS_NORMAL
302
+	detail.ReceiveDate = time.Now()
303
+	cols := []string{
304
+		"status",
305
+		"receive_id",
306
+		"receive_date",
307
+	}
308
+	_, err := m.db.Update(detail, cols, "id=?", detail.Id)
309
+	return err
310
+}
311
+
312
+// UpdateRecord 核销更新抽奖记录表
313
+func (m *DAO) UpdateRecord(record *model.TaLuckdrawRecord) error {
314
+	record.Status = models.STATUS_NORMAL
315
+	record.WriteoffDate = time.Now()
316
+	cols := []string{
317
+		"status",
318
+		"writeoff_date",
319
+	}
320
+	_, err := m.db.Update(record, cols, "id=?", record.Id)
321
+	return err
322
+}
323
+
324
+// SaveWirteOff 保存核销信息
325
+func (m *DAO) SaveWirteOff(writeoff model.TaLuckdrawWriteoff) (*model.TaLuckdrawWriteoff, error) {
326
+	writeoff.Status = models.STATUS_NORMAL
327
+	writeoff.WriteoffDate = time.Now()
328
+	_, err := m.db.Insert(&writeoff)
329
+	return &writeoff, err
330
+}
331
+
332
+// GetUserRecordByLuckDraw 获取用户的抽奖信息
333
+func (m *DAO) GetUserRecordByLuckDraw(userid string, luckdrawid int) ([]model.TaLuckdrawRecord, error) {
334
+	var records []model.TaLuckdrawRecord
335
+	err := m.db.Where("user_id=?", userid).And("luckdraw_id=?", luckdrawid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&records)
336
+	return records, err
337
+}
338
+
339
+// GetUserLuckDrawByLuckDraw 获取用户的抽奖信息
340
+func (m *DAO) GetUserLuckDrawByLuckDraw(userid string, luckdrawid int) (*model.TaLuckdrawRecord, error) {
341
+	var records []model.TaLuckdrawRecord
342
+	err := m.db.Where("user_id=?", userid).And("luckdraw_id=?", luckdrawid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&records)
343
+	if err != nil {
344
+		return nil, err
345
+	}
346
+	if len(records) > 0 {
347
+		return &records[0], nil
348
+	}
349
+	return nil, nil
350
+}
351
+
352
+// GetDetailByRecord 获取detail
353
+func (m *DAO) GetDetailByRecord(recordid int) (*model.TaPrizeDetail, error) {
354
+	var details []model.TaPrizeDetail
355
+	err := m.db.Where("receive_id=?", recordid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&details)
356
+	if err != nil {
357
+		return nil, err
358
+	}
359
+	if len(details) > 0 {
360
+		return &details[0], nil
361
+	}
362
+	return nil, nil
363
+}
364
+
365
+// UserRecord 用户抽奖信息
366
+type UserRecord struct {
367
+	model.TaLuckdrawRecord `xorm:"extends"`
368
+	Url                    string
369
+}
370
+
371
+// GetUserLuckDraw 获取用户的抽奖信息
372
+func (m *DAO) GetUserLuckDraw(userid string) ([]UserRecord, error) {
373
+	var records []UserRecord
374
+	sql := `select a.*,b.url from ta_luckdraw_record a left join ta_prize_detail b on a.id=b.receive_id where a.user_id=? and a.status>` + strconv.Itoa(models.STATUS_DEL)
375
+	err := m.db.Sql(sql, userid).Find(&records)
376
+	return records, err
377
+}
378
+
379
+// GetRecordByLuckDraw 抽奖记录
380
+func (m *DAO) GetRecordByLuckDraw(luckdrawid int) ([]model.TaLuckdrawRecord, error) {
381
+	var records []model.TaLuckdrawRecord
382
+	err := m.db.Where("luckdraw_id=?", luckdrawid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Desc("create_date").Find(&records)
383
+	return records, err
384
+}
385
+
386
+// GetRecordByID 获取抽奖记录明细
387
+func (m *DAO) GetRecordByID(id int) (*model.TaLuckdrawRecord, error) {
388
+	var record model.TaLuckdrawRecord
389
+	_, err := m.db.Where("id=?", id).Get(&record)
390
+	return &record, err
391
+}
392
+
393
+// GetUserByOpenID 根据 openid 获取用户人员信息
394
+func (m *DAO) GetUserByOpenID(openid string) (*model.SysUser, error) {
395
+	var users []model.SysUser
396
+	err := m.db.Where("open_id=?", openid).Find(&users)
397
+	if err != nil {
398
+		return nil, err
399
+	}
400
+	if len(users) > 0 {
401
+		return &users[0], nil
402
+	}
403
+	return nil, nil
404
+}
405
+
406
+// GetUserByTel 根据 Tel 获取用户人员信息
407
+func (m *DAO) GetUserByTel(tel string) (*model.SysUser, error) {
408
+	var users = model.SysUser{}
409
+	has, err := m.db.Where("phone=?", tel).Get(&users)
410
+	if err != nil {
411
+		return nil, err
412
+	}
413
+	if !has {
414
+		return nil, nil
415
+	}
416
+	return &users, nil
417
+}
418
+
419
+// SaveLuckDrawShareData 保存用户分享信息
420
+func (m *DAO) SaveLuckDrawShareData(dt *model.TaShareLuckyRecord) error {
421
+	dt.CreateDate = time.Now().Local()
422
+	dt.Status = StatusNormal
423
+
424
+	if _, err := m.db.Insert(dt); err != nil {
425
+		return err
426
+	}
427
+
428
+	return nil
429
+}
430
+
431
+// GetLuckDrawShareData 获取用户分享内容
432
+func (m *DAO) GetLuckDrawShareData(luckID int, from, to, caseID string) ([]model.TaShareLuckyRecord, error) {
433
+	var dts []model.TaShareLuckyRecord
434
+
435
+	if err := m.db.Where("from_customer_id=?", from).
436
+		And("to_customer_id=?", to).
437
+		And("luckydraw_id=?", luckID).
438
+		And("case_id=?", caseID).
439
+		And("status=?", StatusNormal).
440
+		Find(&dts); err != nil {
441
+		return nil, err
442
+	}
443
+
444
+	return dts, nil
445
+}

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

@@ -6,7 +6,7 @@ import (
6 6
 
7 7
 type TaBodyCheck struct {
8 8
 	Id          int       `xorm:"not null pk autoincr INT(11)"`
9
-	UserId      int       `xorm:"not null INT(11)"`
9
+	UserId      string    `xorm:"not null INT(11)"`
10 10
 	EquipmentId string    `xorm:"not null VARCHAR(100)"`
11 11
 	CreateDate  time.Time `xorm:"not null DATETIME"`
12 12
 	Status      int       `xorm:"not null comment('1为正常') INT(11)"`

+ 11
- 8
models/model/ta_course_orders_coupon.go View File

@@ -5,12 +5,15 @@ import (
5 5
 )
6 6
 
7 7
 type TaCourseOrdersCoupon struct {
8
-	OrdersCouponId string    `xorm:"not null pk VARCHAR(64)"`
9
-	OrdersId       string    `xorm:"VARCHAR(64)"`
10
-	CouponId       string    `xorm:"VARCHAR(64)"`
11
-	CouponName     string    `xorm:"VARCHAR(50)"`
12
-	UsedAmount     string    `xorm:"DECIMAL(8,2)"`
13
-	Status         int       `xorm:"SMALLINT(6)"`
14
-	CreateDate     time.Time `xorm:"DATETIME"`
15
-	CouponType     string    `xorm:"VARCHAR(50)"`
8
+	OrdersCouponId   string    `xorm:"not null pk VARCHAR(64)"`
9
+	OrdersId         string    `xorm:"VARCHAR(64)"`
10
+	CouponId         string    `xorm:"VARCHAR(64)"`
11
+	CouponName       string    `xorm:"VARCHAR(50)"`
12
+	UsedAmount       string    `xorm:"DECIMAL(8,2)"`
13
+	Status           int       `xorm:"SMALLINT(6)"`
14
+	CreateDate       time.Time `xorm:"DATETIME"`
15
+	CouponType       string    `xorm:"VARCHAR(50)"`
16
+	CustomerCouponId string    `xorm:"VARCHAR(64)"`
17
+	CourseId         string    `xorm:"VARCHAR(64)"`
18
+	CourseName       string    `xorm:"VARCHAR(50)"`
16 19
 }

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

@@ -11,4 +11,5 @@ type TaCourseOrdersDetail struct {
11 11
 	CourseDetailId string    `xorm:"VARCHAR(64)"`
12 12
 	BeginDate      time.Time `xorm:"DATETIME"`
13 13
 	EndDate        time.Time `xorm:"DATETIME"`
14
+	CreateDate     time.Time `xorm:"DATETIME"`
14 15
 }

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

@@ -21,4 +21,5 @@ type TaCustomerCard struct {
21 21
 	VerifyStatus     string    `xorm:"VARCHAR(32)"`
22 22
 	SerialCode       string    `xorm:"VARCHAR(64)"`
23 23
 	ReceivingType    string    `xorm:"VARCHAR(20)"`
24
+	Price            string    `xorm:"DECIMAL(64)"`
24 25
 }

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

@@ -20,4 +20,5 @@ type TaCustomerCoupon struct {
20 20
 	OrgId              string    `xorm:"VARCHAR(64)"`
21 21
 	SerialCode         string    `xorm:"VARCHAR(64)"`
22 22
 	ReceivingType      string    `xorm:"VARCHAR(20)"`
23
+	Price              string    `xorm:"DECIMAL(64)"`
23 24
 }

+ 12
- 11
models/model/ta_goods_orders_coupon.go View File

@@ -5,15 +5,16 @@ import (
5 5
 )
6 6
 
7 7
 type TaGoodsOrdersCoupon struct {
8
-	OrdersCouponId string    `xorm:"not null pk VARCHAR(64)"`
9
-	OrdersId       string    `xorm:"VARCHAR(64)"`
10
-	OrdersNo       string    `xorm:"VARCHAR(100)"`
11
-	CouponId       string    `xorm:"VARCHAR(64)"`
12
-	CouponName     string    `xorm:"VARCHAR(50)"`
13
-	OrgId          string    `xorm:"VARCHAR(64)"`
14
-	GoodsId        string    `xorm:"VARCHAR(64)"`
15
-	GoodsName      string    `xorm:"VARCHAR(50)"`
16
-	UsedAmount     string    `xorm:"DECIMAL(8,2)"`
17
-	Status         int       `xorm:"SMALLINT(6)"`
18
-	CreateDate     time.Time `xorm:"DATETIME"`
8
+	OrdersCouponId   string    `xorm:"not null pk VARCHAR(64)"`
9
+	OrdersId         string    `xorm:"VARCHAR(64)"`
10
+	OrdersNo         string    `xorm:"VARCHAR(100)"`
11
+	CouponId         string    `xorm:"VARCHAR(64)"`
12
+	CouponName       string    `xorm:"VARCHAR(50)"`
13
+	OrgId            string    `xorm:"VARCHAR(64)"`
14
+	GoodsId          string    `xorm:"VARCHAR(64)"`
15
+	GoodsName        string    `xorm:"VARCHAR(50)"`
16
+	UsedAmount       string    `xorm:"DECIMAL(8,2)"`
17
+	Status           int       `xorm:"SMALLINT(6)"`
18
+	CreateDate       time.Time `xorm:"DATETIME"`
19
+	CustomerCouponId string    `xorm:"VARCHAR(64)"`
19 20
 }

+ 11
- 8
models/model/ta_goods_orders_detail.go View File

@@ -1,12 +1,15 @@
1 1
 package model
2 2
 
3
+import "time"
4
+
3 5
 type TaGoodsOrdersDetail struct {
4
-	DetailId  string `xorm:"not null pk VARCHAR(64)"`
5
-	OrdersId  string `xorm:"VARCHAR(64)"`
6
-	GoodsId   string `xorm:"VARCHAR(64)"`
7
-	GoodsName string `xorm:"VARCHAR(50)"`
8
-	SpecId    string `xorm:"VARCHAR(64)"`
9
-	SpecName  string `xorm:"VARCHAR(50)"`
10
-	Number    int    `xorm:"INT(11)"`
11
-	Price     string `xorm:"DECIMAL(8,2)"`
6
+	DetailId   string    `xorm:"not null pk VARCHAR(64)"`
7
+	OrdersId   string    `xorm:"VARCHAR(64)"`
8
+	GoodsId    string    `xorm:"VARCHAR(64)"`
9
+	GoodsName  string    `xorm:"VARCHAR(50)"`
10
+	SpecId     string    `xorm:"VARCHAR(64)"`
11
+	SpecName   string    `xorm:"VARCHAR(50)"`
12
+	Number     int       `xorm:"INT(11)"`
13
+	Price      string    `xorm:"DECIMAL(8,2)"`
14
+	CreateDate time.Time `xorm:"DATETIME"`
12 15
 }

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

@@ -12,7 +12,7 @@ type TaLuckdraw struct {
12 12
 	BeginDate    time.Time `xorm:"DATETIME"`
13 13
 	EndDate      time.Time `xorm:"DATETIME"`
14 14
 	OrgId        string    `xorm:"VARCHAR(64)"`
15
-	CaseId       int       `xorm:"INT(11)"`
15
+	CaseId       string    `xorm:"VARCHAR(64)"`
16 16
 	CreateDate   time.Time `xorm:"DATETIME"`
17 17
 	CreateUser   string    `xorm:"VARCHAR(64)"`
18 18
 	Remark       string    `xorm:"TEXT"`

+ 388
- 38
models/statistics/cardcoupon.go View File

@@ -59,20 +59,20 @@ func (m *StatisticsDAO) CardCouponStatistics(caseids, ctype, name string, page,
59 59
 	INNER JOIN sys_case b ON a.case_id = b.case_id
60 60
 	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
61 61
 
62
-	gymcardsql := `SELECT
63
-		b.case_name,
64
-		b.case_id,
65
-		a.gym_card_name,
66
-		'健身卡' AS type_name,
67
-		a.send_type,
68
-		a.price,
69
-		a.sent_count,
70
-		a.used_count,
71
-		a.create_date
72
-	FROM
73
-		ta_gym_card a
74
-	INNER JOIN sys_case b ON a.case_id = b.case_id
75
-	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
62
+	// gymcardsql := `SELECT
63
+	// 	b.case_name,
64
+	// 	b.case_id,
65
+	// 	a.gym_card_name,
66
+	// 	'健身卡' AS type_name,
67
+	// 	a.send_type,
68
+	// 	a.price,
69
+	// 	a.sent_count,
70
+	// 	a.used_count,
71
+	// 	a.create_date
72
+	// FROM
73
+	// 	ta_gym_card a
74
+	// INNER JOIN sys_case b ON a.case_id = b.case_id
75
+	// where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
76 76
 
77 77
 	sql := ""
78 78
 	if ctype != "" {
@@ -86,18 +86,18 @@ func (m *StatisticsDAO) CardCouponStatistics(caseids, ctype, name string, page,
86 86
 		case "coursecoupon":
87 87
 			sql = "select * from (" + couponsql + " and a.coupon_type='course') tab"
88 88
 			break
89
-		case "gym":
90
-			sql = "select * from (" + gymcardsql + ") tab"
91
-			break
89
+		// case "gym":
90
+		// 	sql = "select * from (" + gymcardsql + ") tab"
91
+		// 	break
92 92
 		default:
93 93
 			return nil, errors.New("类型不正确")
94 94
 		}
95 95
 	} else {
96
-		sql = "select * from (" + cardsql + " union " + couponsql + " union " + gymcardsql + ") tab"
96
+		sql = "select * from (" + cardsql + " union " + couponsql + ") tab"
97 97
 	}
98 98
 
99 99
 	if name != "" {
100
-		sql = sql + ` and c_name like '%` + name + `%'`
100
+		sql = sql + ` where c_name like '%` + name + `%'`
101 101
 	}
102 102
 	sql = sql + ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
103 103
 	err := m.db.Sql(sql).Find(&cardCoupons)
@@ -144,20 +144,20 @@ func (m *StatisticsDAO) CardCouponStatisticsCount(caseids, ctype, name string) (
144 144
 	INNER JOIN sys_case b ON a.case_id = b.case_id
145 145
 	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
146 146
 
147
-	gymcardsql := `SELECT
148
-		b.case_name,
149
-		b.case_id,
150
-		a.gym_card_name,
151
-		'健身卡' AS type_name,
152
-		a.send_type,
153
-		a.price,
154
-		a.sent_count,
155
-		a.used_count,
156
-		a.create_date
157
-	FROM
158
-		ta_gym_card a
159
-	INNER JOIN sys_case b ON a.case_id = b.case_id
160
-	where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
147
+	// gymcardsql := `SELECT
148
+	// 	b.case_name,
149
+	// 	b.case_id,
150
+	// 	a.gym_card_name,
151
+	// 	'健身卡' AS type_name,
152
+	// 	a.send_type,
153
+	// 	a.price,
154
+	// 	a.sent_count,
155
+	// 	a.used_count,
156
+	// 	a.create_date
157
+	// FROM
158
+	// 	ta_gym_card a
159
+	// INNER JOIN sys_case b ON a.case_id = b.case_id
160
+	// where b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
161 161
 
162 162
 	sql := ""
163 163
 	if ctype != "" {
@@ -171,18 +171,368 @@ func (m *StatisticsDAO) CardCouponStatisticsCount(caseids, ctype, name string) (
171 171
 		case "coursecoupon":
172 172
 			sql = "select * from (" + couponsql + " and a.coupon_type='course') tab"
173 173
 			break
174
-		case "gym":
175
-			sql = "select * from (" + gymcardsql + ") tab"
176
-			break
174
+		// case "gym":
175
+		// 	sql = "select * from (" + gymcardsql + ") tab"
176
+		// 	break
177 177
 		default:
178 178
 			return 0, errors.New("类型不正确")
179 179
 		}
180 180
 	} else {
181
-		sql = "select * from (" + cardsql + " union " + couponsql + " union " + gymcardsql + ") tab"
181
+		sql = "select * from (" + cardsql + " union " + couponsql + ") tab"
182
+	}
183
+
184
+	if name != "" {
185
+		sql = sql + ` where c_name like '%` + name + `%'`
186
+	}
187
+	err := m.db.Sql(sql).Find(&cardCoupons)
188
+	return len(cardCoupons), err
189
+}
190
+
191
+// CardCouponUsedStatistics 卡券使用情况
192
+type CardCouponUsedStatistics struct {
193
+	CaseId         string
194
+	CaseName       string
195
+	CardCouponName string
196
+	TargetName     string
197
+	ReceivingType  string
198
+	Name           string
199
+	CustomerName   string
200
+	Phone          string
201
+	SalesId        string
202
+	SalesName      string
203
+	StartDate      time.Time
204
+	EndDate        time.Time
205
+	ReceiveDate    time.Time
206
+	UsedDate       time.Time
207
+	VerifyStatus   string
208
+}
209
+
210
+// CardCouponUsedStatistics 获取卡券使用情况统计
211
+func (m *StatisticsDAO) CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status string, page, pageSize int) ([]CardCouponUsedStatistics, error) {
212
+	var cardCoupons []CardCouponUsedStatistics
213
+	cardsql := `SELECT
214
+							d.case_name,
215
+							d.case_id,
216
+							a.customer_card_name as card_coupon_name,
217
+							b.target_name,
218
+							a.receiving_type,
219
+							c.name,
220
+							c.customer_name,
221
+							c.phone,
222
+							a.sales_id,
223
+							a.sales_name,
224
+							a.start_date,
225
+							a.end_date,
226
+							a.receive_date,
227
+							a.receive_date as used_date,
228
+							a.verify_status
229
+						FROM
230
+							ta_customer_card a
231
+						INNER JOIN ta_coupon_card_target b ON b.card_id = a.card_id
232
+						INNER JOIN ta_customer c ON a.customer_id = c.customer_id
233
+						INNER JOIN sys_case d ON a.case_id = d.case_id
234
+						WHERE d.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
235
+
236
+	couponsql := `SELECT
237
+									b.case_name,
238
+									b.case_id,
239
+									a.customer_coupon_name as card_coupon_name,
240
+									(
241
+										CASE
242
+										WHEN cp.coupon_type = 'course' THEN
243
+											d.course_name
244
+										ELSE
245
+											c.coupon_name
246
+										END
247
+									) as target_name,
248
+									a.receiving_type,
249
+									cst.name,
250
+									cst.customer_name,
251
+									cst.phone,
252
+									a.sales_id,
253
+									a.sales_name,
254
+									a.start_date,
255
+									a.end_date,
256
+									a.receive_date,
257
+									(
258
+										CASE
259
+										WHEN cp.coupon_type = 'course' THEN
260
+											d.create_date
261
+										ELSE
262
+											c.create_date
263
+										END
264
+									) as used_date,
265
+									(
266
+										CASE
267
+										WHEN NOW() > a.end_date THEN
268
+											'expire'
269
+										WHEN use_date IS NULL THEN
270
+											'useable'
271
+										ELSE
272
+											'used'
273
+										END
274
+									) AS verify_status
275
+								FROM
276
+									ta_customer_coupon a
277
+								INNER JOIN sys_case b ON a.case_id = b.case_id
278
+								INNER JOIN ta_customer cst ON a.customer_id = cst.customer_id
279
+								INNER JOIN ta_coupon cp ON a.coupon_id = cp.coupon_id
280
+								LEFT JOIN ta_goods_orders_coupon c ON a.coupon_id = c.coupon_id
281
+								LEFT JOIN ta_course_orders_coupon d ON a.coupon_id = d.coupon_id
282
+								WHERE b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
283
+
284
+	sql := "select * from (" + cardsql + " union " + couponsql + ") tab where (1=1)"
285
+
286
+	if name != "" {
287
+		sql = sql + ` and tab.card_coupon_name like '%` + name + `%'`
288
+	}
289
+	if tel != "" {
290
+		sql = sql + ` and tab.phone like '%` + tel + `%'`
291
+	}
292
+	if receivetype != "" {
293
+		sql = sql + ` and tab.receiving_type = '` + receivetype + `'`
182 294
 	}
295
+	if status != "" {
296
+		sql = sql + ` and tab.verify_status = '` + receivetype + `'`
297
+	}
298
+	if begindate != "" {
299
+		sql = sql + ` and DATE_FORMAT(tab.receive_date, '%Y-%m-%d') >= '` + begindate + `'`
300
+	}
301
+	if enddate != "" {
302
+		sql = sql + ` and DATE_FORMAT(tab.receive_date, '%Y-%m-%d') <= '` + enddate + `'`
303
+	}
304
+	sql = sql + ` order by receive_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
305
+
306
+	err := m.db.Sql(sql).Find(&cardCoupons)
307
+	return cardCoupons, err
308
+}
309
+
310
+// CardCouponUsedCountStatistics 获取卡券使用情况统计
311
+func (m *StatisticsDAO) CardCouponUsedCountStatistics(caseids, tel, name, receivetype, begindate, enddate, status string) (int, error) {
312
+	var cardCoupons []CardCouponUsedStatistics
313
+	cardsql := `SELECT
314
+							d.case_name,
315
+							d.case_id,
316
+							a.customer_card_name as card_coupon_name,
317
+							b.target_name,
318
+							a.receiving_type,
319
+							c.name,
320
+							c.customer_name,
321
+							c.phone,
322
+							a.sales_id,
323
+							a.sales_name,
324
+							a.start_date,
325
+							a.end_date,
326
+							a.receive_date,
327
+							a.receive_date as used_date,
328
+							a.verify_status
329
+						FROM
330
+							ta_customer_card a
331
+						INNER JOIN ta_coupon_card_target b ON b.card_id = a.card_id
332
+						INNER JOIN ta_customer c ON a.customer_id = c.customer_id
333
+						INNER JOIN sys_case d ON a.case_id = d.case_id
334
+						WHERE d.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
335
+
336
+	couponsql := `SELECT
337
+									b.case_name,
338
+									b.case_id,
339
+									a.customer_coupon_name as card_coupon_name,
340
+									(
341
+										CASE
342
+										WHEN cp.coupon_type = 'course' THEN
343
+											d.course_name
344
+										ELSE
345
+											c.coupon_name
346
+										END
347
+									) as target_name,
348
+									a.receiving_type,
349
+									cst.name,
350
+									cst.customer_name,
351
+									cst.phone,
352
+									a.sales_id,
353
+									a.sales_name,
354
+									a.start_date,
355
+									a.end_date,
356
+									a.receive_date,
357
+									(
358
+										CASE
359
+										WHEN cp.coupon_type = 'course' THEN
360
+											d.create_date
361
+										ELSE
362
+											c.create_date
363
+										END
364
+									) as used_date,
365
+									(
366
+										CASE
367
+										WHEN NOW() > a.end_date THEN
368
+											'expire'
369
+										WHEN use_date IS NULL THEN
370
+											'useable'
371
+										ELSE
372
+											'used'
373
+										END
374
+									) AS verify_status
375
+								FROM
376
+									ta_customer_coupon a
377
+								INNER JOIN sys_case b ON a.case_id = b.case_id
378
+								INNER JOIN ta_customer cst ON a.customer_id = cst.customer_id
379
+								INNER JOIN ta_coupon cp ON a.coupon_id = cp.coupon_id
380
+								LEFT JOIN ta_goods_orders_coupon c ON a.coupon_id = c.coupon_id
381
+								LEFT JOIN ta_course_orders_coupon d ON a.coupon_id = d.coupon_id
382
+								WHERE b.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
383
+
384
+	sql := "select * from (" + cardsql + " union " + couponsql + ") tab where (1=1)"
385
+
386
+	if name != "" {
387
+		sql = sql + ` and tab.card_coupon_name like '%` + name + `%'`
388
+	}
389
+	if tel != "" {
390
+		sql = sql + ` and tab.phone like '%` + tel + `%'`
391
+	}
392
+	if receivetype != "" {
393
+		sql = sql + ` and tab.receiving_type = '` + receivetype + `'`
394
+	}
395
+	if status != "" {
396
+		sql = sql + ` and tab.verify_status = '` + receivetype + `'`
397
+	}
398
+	if begindate != "" {
399
+		sql = sql + ` and DATE_FORMAT(tab.receive_date, '%Y-%m-%d') >= '` + begindate + `'`
400
+	}
401
+	if enddate != "" {
402
+		sql = sql + ` and DATE_FORMAT(tab.receive_date, '%Y-%m-%d') <= '` + enddate + `'`
403
+	}
404
+	err := m.db.Sql(sql).Find(&cardCoupons)
405
+	return len(cardCoupons), err
406
+}
407
+
408
+// CardCouponVerifyStatistics 卡券使用情况
409
+type CardCouponVerifyStatistics struct {
410
+	CaseId       string
411
+	CaseName     string
412
+	CourseName   string
413
+	BeginDate    time.Time
414
+	EndDate      time.Time
415
+	Name         string
416
+	CustomerName string
417
+	Phone        string
418
+	CreateDate   time.Time
419
+	VerifyDate   time.Time
420
+	Status       string
421
+}
422
+
423
+// CardCouponVerifyStatistics 获取卡券核销情况统计
424
+func (m *StatisticsDAO) CardCouponVerifyStatistics(caseids, tel, name, status string, page, pageSize int) ([]CardCouponVerifyStatistics, error) {
425
+	var cardCoupons []CardCouponVerifyStatistics
426
+	sql := `SELECT
427
+							c.case_id,
428
+							c.case_name,
429
+							e.course_name,
430
+							e.begin_date,
431
+							e.end_date,
432
+							d.name,
433
+							d.customer_name,
434
+							d.phone,
435
+							d.recommend_name,
436
+							a.create_date,
437
+							b.verify_date,
438
+							(
439
+								CASE
440
+								WHEN b.verify_date IS NULL THEN
441
+									'useable'
442
+								ELSE
443
+									f.verify_status
444
+								END
445
+							) AS verify_status
446
+						FROM
447
+							ta_customer_course a
448
+						INNER JOIN (
449
+							SELECT
450
+								customer_course_id,
451
+								min(verify_date) AS verify_date
452
+							FROM
453
+								ta_customer_course_detail
454
+							GROUP BY
455
+								customer_course_id
456
+						) b ON a.customer_course_id = b.customer_course_id
457
+						INNER JOIN sys_case c ON a.case_id = c.case_id
458
+						INNER JOIN ta_customer d ON a.customer_id = d.customer_id
459
+						INNER JOIN ta_course e ON a.course_id = e.course_id
460
+						LEFT JOIN ta_customer_course_detail f ON b.customer_course_id = f.customer_course_id
461
+						AND b.verify_date = f.verify_date
462
+						WHERE c.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
463
+
464
+	if name != "" {
465
+		sql = sql + ` and e.course_name like '%` + name + `%'`
466
+	}
467
+	if tel != "" {
468
+		sql = sql + ` and d.phone like '%` + tel + `%'`
469
+	}
470
+	if status != "" {
471
+		if status == "useable" {
472
+			sql = sql + ` and b.verify_date is null`
473
+		} else {
474
+			sql = sql + ` and f.verify_status ='` + status + `'`
475
+		}
476
+	}
477
+	sql = sql + ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
478
+
479
+	err := m.db.Sql(sql).Find(&cardCoupons)
480
+	return cardCoupons, err
481
+}
482
+
483
+// CardCouponVerifyStatisticsCount 获取卡券核销情况数量统计
484
+func (m *StatisticsDAO) CardCouponVerifyStatisticsCount(caseids, tel, name, status string) (int, error) {
485
+	var cardCoupons []CardCouponVerifyStatistics
486
+	sql := `SELECT
487
+							c.case_id,
488
+							c.case_name,
489
+							e.course_name,
490
+							e.begin_date,
491
+							e.end_date,
492
+							d.name,
493
+							d.customer_name,
494
+							d.phone,
495
+							d.recommend_name,
496
+							a.create_date,
497
+							b.verify_date,
498
+							(
499
+								CASE
500
+								WHEN b.verify_date IS NULL THEN
501
+									'useable'
502
+								ELSE
503
+									f.verify_status
504
+								END
505
+							) AS verify_status
506
+						FROM
507
+							ta_customer_course a
508
+						INNER JOIN (
509
+							SELECT
510
+								customer_course_id,
511
+								min(verify_date) AS verify_date
512
+							FROM
513
+								ta_customer_course_detail
514
+							GROUP BY
515
+								customer_course_id
516
+						) b ON a.customer_course_id = b.customer_course_id
517
+						INNER JOIN sys_case c ON a.case_id = c.case_id
518
+						INNER JOIN ta_customer d ON a.customer_id = d.customer_id
519
+						INNER JOIN ta_course e ON a.course_id = e.course_id
520
+						LEFT JOIN ta_customer_course_detail f ON b.customer_course_id = f.customer_course_id
521
+						AND b.verify_date = f.verify_date
522
+						WHERE c.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `')`
183 523
 
184 524
 	if name != "" {
185
-		sql = sql + ` and c_name like '%` + name + `%'`
525
+		sql = sql + ` and e.course_name like '%` + name + `%'`
526
+	}
527
+	if tel != "" {
528
+		sql = sql + ` and d.phone like '%` + tel + `%'`
529
+	}
530
+	if status != "" {
531
+		if status == "useable" {
532
+			sql = sql + ` and b.verify_date is null`
533
+		} else {
534
+			sql = sql + ` and f.verify_status ='` + status + `'`
535
+		}
186 536
 	}
187 537
 	err := m.db.Sql(sql).Find(&cardCoupons)
188 538
 	return len(cardCoupons), err

+ 2
- 0
routers/common.go View File

@@ -288,5 +288,7 @@ func getCommonRoutes() beego.LinkNamespace {
288 288
 		beego.NSRouter("/statistics/courseorders", &statistics.StatisticsController{}, "get:GetCourseOrdersStatistics"),
289 289
 		beego.NSRouter("/statistics/courses", &statistics.StatisticsController{}, "get:GetCourseStatistics"),
290 290
 		beego.NSRouter("/statistics/cardcoupon", &statistics.StatisticsController{}, "get:CardCouponStatistics"),
291
+		beego.NSRouter("/statistics/cardcouponused", &statistics.StatisticsController{}, "get:CardCouponUsedStatistics"),
292
+		beego.NSRouter("/statistics/cardcouponverify", &statistics.StatisticsController{}, "get:CardCouponVerifyStatistics"),
291 293
 	)
292 294
 }

+ 16
- 0
routers/wechat.go View File

@@ -1,6 +1,7 @@
1 1
 package routers
2 2
 
3 3
 import (
4
+	"spaceofcheng/services/controllers/bodycheck"
4 5
 	"spaceofcheng/services/controllers/card"
5 6
 	"spaceofcheng/services/controllers/coupon"
6 7
 	"spaceofcheng/services/controllers/course"
@@ -45,6 +46,7 @@ func getWechatRoutes() beego.LinkNamespace {
45 46
 		beego.NSRouter("/gymcard", &gymcard.GymcardController{}, "get:GetGymcardListByCustomerId"),
46 47
 		beego.NSRouter("/gymcard/:customerGymId", &gymcard.GymcardController{}, "get:GetCustomerGymDetailById"),
47 48
 		beego.NSRouter("/gymcard/:gymcardId/:sysuserId", &gymcard.GymcardController{}, "post:SendGymToCustomer"),
49
+		beego.NSRouter("/gymcard/:gymcardId", &gymcard.GymcardController{}, "get:GetGymcardDetailbyId"),
48 50
 
49 51
 		// 禁止人员
50 52
 		beego.NSRouter("/user/forbid", &user.UserController{}, "get:GetForbidUsers"),
@@ -68,5 +70,19 @@ func getWechatRoutes() beego.LinkNamespace {
68 70
 		beego.NSRouter("/card/detail/:id", &card.CardController{}, "get:GetCardWithCustomer"),
69 71
 		beego.NSRouter("/card/:id", &card.CardController{}, "post:ReceiveCard"),
70 72
 		beego.NSRouter("/channel/card/:id", &card.CardController{}, "post:ChannelReceiveCard"),
73
+
74
+		// 体检
75
+		beego.NSRouter("/GetCheckByUser", &bodycheck.BodyCheckController{}, "get:GetCheckByUser"),
76
+		beego.NSRouter("/PostCheckResult", &bodycheck.BodyCheckController{}, "post:PostCheckResult"),
77
+		beego.NSRouter("/GetQrcodeURL", &bodycheck.BodyCheckController{}, "get:GetQrcodeURL"),
78
+
79
+		// 抽奖
80
+		beego.NSRouter("/user", &luckdraw.LuckDrawController{}, "get:GetUserByCode"),
81
+		beego.NSRouter("/luckdraw/:id", &luckdraw.LuckDrawController{}, "get:GetLuckDraw"),
82
+		beego.NSRouter("/luckdraw/:id", &luckdraw.LuckDrawController{}, "post:LuckDraw"),
83
+		beego.NSRouter("/luckdraw/:id/share", &luckdraw.LuckDrawController{}, "post:SaveShareRecord"),
84
+		beego.NSRouter("/record", &luckdraw.LuckDrawController{}, "get:GetRecordByLuckDraw"),
85
+		beego.NSRouter("/user/record", &luckdraw.LuckDrawController{}, "get:GetUserLuckDraw"),
86
+		beego.NSRouter("/user/record/:id", &luckdraw.LuckDrawController{}, "get:GetRecordByID"),
71 87
 	)
72 88
 }

+ 2
- 2
service/bodycheck/bodycheck.go View File

@@ -20,7 +20,7 @@ func NewBodycheckServ(ctx *utils.Context) *BodycheckServ {
20 20
 		dao: bodycheck.NewDAO(ctx),
21 21
 	}
22 22
 }
23
-func (s *BodycheckServ) GetBodyCheckByUser(userID int) ([]model.TaBodyCheck, error) {
23
+func (s *BodycheckServ) GetBodyCheckByUser(userID string) ([]model.TaBodyCheck, error) {
24 24
 	bodychecks, err := s.dao.GetBodyCheckByUser(userID)
25 25
 	if err != nil {
26 26
 		utils.LogError("查询用户体检信息失败: " + err.Error())
@@ -36,7 +36,7 @@ func (s *BodycheckServ) GetCheckSpecs() ([]model.TdCheckSpec, error) {
36 36
 	}
37 37
 	return specs, nil
38 38
 }
39
-func (s *BodycheckServ) GetCheckByUserAndEquipmentID(userID int, EquipmentID string) (*model.TaBodyCheck, error) {
39
+func (s *BodycheckServ) GetCheckByUserAndEquipmentID(userID string, EquipmentID string) (*model.TaBodyCheck, error) {
40 40
 	check, err := s.dao.GetCheckByUserAndEquipmentID(userID, EquipmentID)
41 41
 	if err != nil {
42 42
 		utils.LogError("根据用户与设备ID获取体检信息失败: " + err.Error())

+ 3
- 0
service/card/card.go View File

@@ -243,6 +243,7 @@ func (s *CardServ) GiveCardTo(from *model.SysUser, to *model.TaCustomer, card *c
243 243
 		CaseId:           card.CaseId,
244 244
 		OrgId:            card.OrgId,
245 245
 		ReceivingType:    models.RECEIVEING_TYPE_GIVE,
246
+		Price:            card.Price,
246 247
 	}
247 248
 
248 249
 	// 入库
@@ -447,6 +448,7 @@ func (s *CardServ) ReceiveCard(id, saleid, serialcode string) error {
447 448
 		OrgId:            card.OrgId,
448 449
 		SerialCode:       serialcode,
449 450
 		ReceivingType:    models.RECEIVEING_TYPE_SALES,
451
+		Price:            card.Price,
450 452
 	}
451 453
 
452 454
 	err = s.dao.SaveCustomerCard(&customerCard)
@@ -573,6 +575,7 @@ func (s *CardServ) ChannelReceiveCard(id string) error {
573 575
 		CaseId:           card.CaseId,
574 576
 		OrgId:            card.OrgId,
575 577
 		ReceivingType:    models.RECEIVEING_TYPE_CHANNEL,
578
+		Price:            card.Price,
576 579
 	}
577 580
 
578 581
 	err = s.dao.SaveCustomerCard(&customerCard)

+ 3
- 0
service/coupon/coupon.go View File

@@ -292,6 +292,7 @@ func (s *CouponServ) GiveCouponTo(from *model.SysUser, to *model.TaCustomer, cp
292 292
 		CaseId:             cp.CaseId,
293 293
 		OrgId:              cp.OrgId,
294 294
 		ReceivingType:      receivingType,
295
+		Price:              cp.Price,
295 296
 	}
296 297
 
297 298
 	// 放入赠送记录
@@ -528,6 +529,7 @@ func (s *CouponServ) ReceiveCoupon(id, saleid, serialcode string) error {
528 529
 		OrgId:              coupon.OrgId,
529 530
 		SerialCode:         serialcode,
530 531
 		ReceivingType:      models.RECEIVEING_TYPE_SALES,
532
+		Price:              coupon.Price,
531 533
 	}
532 534
 
533 535
 	err = s.dao.SaveCustomerCoupon(&customerCoupon)
@@ -591,6 +593,7 @@ func (s *CouponServ) ChannelReceiveCoupon(id string) error {
591 593
 		CaseId:             coupon.CaseId,
592 594
 		OrgId:              coupon.OrgId,
593 595
 		ReceivingType:      models.RECEIVEING_TYPE_CHANNEL,
596
+		Price:              coupon.Price,
594 597
 	}
595 598
 
596 599
 	err = s.dao.SaveCustomerCoupon(&customerCoupon)

+ 7
- 4
service/course/order.go View File

@@ -113,10 +113,13 @@ func (s *CourseServ) Orders(
113 113
 			return errors.New("优惠券不可抵用该课程")
114 114
 		}
115 115
 		var ordersCoupon = model.TaCourseOrdersCoupon{
116
-			OrdersId:   couseOrder.OrdersId,
117
-			CouponId:   coupon.CouponId,
118
-			CouponName: coupon.CouponName,
119
-			UsedAmount: couseOrder.CouponAmount,
116
+			OrdersId:         couseOrder.OrdersId,
117
+			CouponId:         coupon.CouponId,
118
+			CouponName:       coupon.CouponName,
119
+			UsedAmount:       couseOrder.CouponAmount,
120
+			CustomerCouponId: customerCoupon.CustomerCouponId,
121
+			CourseId:         course.CourseId,
122
+			CourseName:       course.CourseName,
120 123
 		}
121 124
 		if err := s.dao.SaveOrdersCoupon(&ordersCoupon, couseOrder); err != nil {
122 125
 			utils.LogError("保存优惠信息出错: " + err.Error())

+ 11
- 0
service/customer/customer.go View File

@@ -7,6 +7,7 @@ import (
7 7
 	"spaceofcheng/services/models/cases"
8 8
 	"spaceofcheng/services/models/customer"
9 9
 	"spaceofcheng/services/models/model"
10
+	"spaceofcheng/services/models/system"
10 11
 	"spaceofcheng/services/service/events"
11 12
 	"spaceofcheng/services/utils"
12 13
 	"strconv"
@@ -18,6 +19,7 @@ type CustomerServ struct {
18 19
 	ctx     *utils.Context
19 20
 	dao     *customer.CustomerDAO
20 21
 	casedao *cases.CaseDAO
22
+	userdao *system.UserDAO
21 23
 }
22 24
 
23 25
 // NewCustomerServ 初始化
@@ -26,6 +28,7 @@ func NewCustomerServ(ctx *utils.Context) *CustomerServ {
26 28
 		ctx:     ctx,
27 29
 		dao:     customer.NewCustomerDAO(ctx),
28 30
 		casedao: cases.NewCaseDAO(ctx),
31
+		userdao: system.NewUserDAO(ctx),
29 32
 	}
30 33
 }
31 34
 
@@ -56,6 +59,14 @@ func (s *CustomerServ) GetCustUserByOpenID(openid string) (*customer.CustWithWX,
56 59
 		utils.LogError(err.Error())
57 60
 		return nil, err
58 61
 	}
62
+	if cust != nil && cust.MapUser != "" {
63
+		caseinfo, err := s.userdao.GetUserBelongCase(cust.MapUser)
64
+		if err != nil {
65
+			utils.LogError(err.Error())
66
+			return nil, err
67
+		}
68
+		cust.BelongCaseId = caseinfo.CaseId
69
+	}
59 70
 
60 71
 	return cust, nil
61 72
 }

+ 9
- 8
service/goods/orders.go View File

@@ -104,14 +104,15 @@ func (s *GoodsServ) Orders(
104 104
 			if dyGoods.GoodsId != "" {
105 105
 				// 优惠券可以抵用商品
106 106
 				var ordersCoupon = model.TaGoodsOrdersCoupon{
107
-					OrdersId:   info.OrdersId,
108
-					OrdersNo:   info.OrdersNo,
109
-					CouponId:   coupon.CouponId,
110
-					CouponName: coupon.CouponName,
111
-					OrgId:      coupon.OrgId,
112
-					GoodsId:    dyGoods.GoodsId,
113
-					GoodsName:  dyGoods.GoodsName,
114
-					UsedAmount: dyGoods.Price,
107
+					OrdersId:         info.OrdersId,
108
+					OrdersNo:         info.OrdersNo,
109
+					CouponId:         coupon.CouponId,
110
+					CouponName:       coupon.CouponName,
111
+					OrgId:            coupon.OrgId,
112
+					GoodsId:          dyGoods.GoodsId,
113
+					GoodsName:        dyGoods.GoodsName,
114
+					UsedAmount:       dyGoods.Price,
115
+					CustomerCouponId: customerCoupon.CustomerCouponId,
115 116
 				}
116 117
 				if err := s.dao.SaveOrdersCoupon(&ordersCoupon, info); err != nil {
117 118
 					utils.LogError("保存优惠信息出错: " + err.Error())

+ 34
- 8
service/gymcard/gymcard.go View File

@@ -196,6 +196,31 @@ func (s *GymcardServ) SendGymCardToUser(gymcardId, sysuserId string) (*model.TaC
196 196
 	return customerGym, nil
197 197
 }
198 198
 
199
+<<<<<<< HEAD
200
+// // SendGymCardToUser 后台给客户发卡
201
+// func (s *GymcardServ) BackSendGymCardToUser(gymcardId, sysuserId, customerId string) (*model.TaCustomerGym, error) {
202
+// 	var customerGym *model.TaCustomerGym
203
+// 	var sysuser *model.SysUser
204
+// 	gymCard, err := s.dao.GetGymcardById(gymcardId)
205
+// 	if err != nil {
206
+// 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
207
+// 		return nil, errors.New("发送游泳健身卡给客户失败")
208
+// 	}
209
+// 	if gymCard.TotalCount-gymCard.SentCount < 1 {
210
+// 		return nil, errors.New("健身卡剩余数量不足!")
211
+// 	}
212
+// 	sysuser, err = s.cdao.GetUserByID(sysuserId)
213
+// 	if err != nil {
214
+// 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
215
+// 		return nil, errors.New("发送游泳健身卡给客户失败")
216
+// 	}
217
+// 	gymCard.SentCount = gymCard.SentCount + 1
218
+// 	customerGym, err = s.dao.SendGymcardToCustomer(&gymCard.TaGymCard, customerId, sysuserId, sysuser.RealName,)
219
+// 	if err != nil {
220
+// 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
221
+// 		return nil, errors.New("发送游泳健身卡给客户失败")
222
+// 	}
223
+=======
199 224
 // SendGymCardToUser 后台给客户发卡
200 225
 func (s *GymcardServ) BackSendGymCardToUser(gymcardId, sysuserId, customerId string) (*model.TaCustomerGym, error) {
201 226
 	var customerGym *model.TaCustomerGym
@@ -211,19 +236,20 @@ func (s *GymcardServ) BackSendGymCardToUser(gymcardId, sysuserId, customerId str
211 236
 		return nil, errors.New("发送游泳健身卡给客户失败")
212 237
 	}
213 238
 	gymCard.SentCount = gymCard.SentCount + 1
214
-	customerGym, err = s.dao.SendGymcardToCustomer(&gymCard.TaGymCard, customerId, sysuserId, sysuser.RealName)
239
+	customerGym, err = s.dao.SendGymcardToCustomer(&gymCard.TaGymCard, customerId, sysuserId, sysuser.RealName, models.RECEIVEING_TYPE_GIVE)
215 240
 	if err != nil {
216 241
 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
217 242
 		return nil, errors.New("发送游泳健身卡给客户失败")
218 243
 	}
244
+>>>>>>> d177ac04b0531069ae9e6b77160766bdfa94b51f
219 245
 
220
-	err = s.dao.EditGymcard(&gymCard.TaGymCard)
221
-	if err != nil {
222
-		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
223
-		return nil, errors.New("发送游泳健身卡给客户失败")
224
-	}
225
-	return customerGym, nil
226
-}
246
+// 	err = s.dao.EditGymcard(&gymCard.TaGymCard)
247
+// 	if err != nil {
248
+// 		utils.LogError("发送游泳健身卡给客户失败" + err.Error())
249
+// 		return nil, errors.New("发送游泳健身卡给客户失败")
250
+// 	}
251
+// 	return customerGym, nil
252
+// }
227 253
 
228 254
 // UpdateCustomerGym 核销游泳健身卡
229 255
 func (s *GymcardServ) UpdateCustomerGym(customerGymId, caseid string) error {

+ 237
- 0
service/luckdraw/luckdraw.go View File

@@ -0,0 +1,237 @@
1
+package luckdraw
2
+
3
+import (
4
+	"errors"
5
+	"spaceofcheng/services/models/luckdraw"
6
+	"spaceofcheng/services/models/model"
7
+	"spaceofcheng/services/utils"
8
+)
9
+
10
+// LuckdrawServ 系统处理
11
+type LuckdrawServ struct {
12
+	ctx *utils.Context
13
+	dao *luckdraw.DAO
14
+}
15
+
16
+// NewLuckdrawServ 初始化
17
+func NewLuckdrawServ(ctx *utils.Context) *LuckdrawServ {
18
+	return &LuckdrawServ{
19
+		ctx: ctx,
20
+		dao: luckdraw.NewDAO(ctx),
21
+	}
22
+}
23
+
24
+func (s *LuckdrawServ) GetLuckDraw(id int) (*luckdraw.LuckDraw, error) {
25
+	luck, err := s.dao.GetLuckDraw(id)
26
+	if err != nil {
27
+		return nil, err
28
+	}
29
+	return luck, nil
30
+}
31
+func (s *LuckdrawServ) LuckDraw(id int, user *model.TaCustomer) (*model.TaLuckdrawPrize, *model.TaPrizeDetail, error) {
32
+	prize, prizeDetail, err := s.dao.LuckDraw(id, user)
33
+	if err != nil {
34
+		return nil, nil, err
35
+	}
36
+	return prize, prizeDetail, nil
37
+}
38
+func (s *LuckdrawServ) PrizeWriteOff(recordid int, userid string) error {
39
+	err := s.dao.PrizeWriteOff(recordid, userid)
40
+	if err != nil {
41
+		utils.LogError("奖品核销失败: " + err.Error())
42
+		return errors.New("奖品核销失败")
43
+	}
44
+	return nil
45
+}
46
+func (s *LuckdrawServ) GetWinning(prizes []model.TaLuckdrawPrize) (*model.TaLuckdrawPrize, error) {
47
+	prize, err := s.dao.GetWinning(prizes)
48
+	if err != nil {
49
+		return nil, err
50
+	}
51
+	return prize, nil
52
+}
53
+func (s *LuckdrawServ) GetLuckDrawByID(id int) (*luckdraw.LuckDraw, error) {
54
+	luck, err := s.dao.GetLuckDrawByID(id)
55
+	if err != nil {
56
+		utils.LogError("获取抽奖信息失败: " + err.Error())
57
+		return nil, errors.New("获取抽奖信息失败")
58
+	}
59
+	return luck, nil
60
+}
61
+func (s *LuckdrawServ) GetCaseAddressByLuckDarw(luckdraw int) (string, error) {
62
+	address, err := s.dao.GetCaseAddressByLuckDarw(luckdraw)
63
+	if err != nil {
64
+		utils.LogError("获取案场地址失败: " + err.Error())
65
+		return "", errors.New("获取案场地址失败")
66
+	}
67
+	return address, nil
68
+}
69
+func (s *LuckdrawServ) UpdateLuckDrawEndDate(id int) error {
70
+	err := s.dao.UpdateLuckDrawEndDate(id)
71
+	if err != nil {
72
+		utils.LogError("更新活动结束时间失败: " + err.Error())
73
+		return errors.New("更新活动结束时间失败")
74
+	}
75
+	return nil
76
+}
77
+func (s *LuckdrawServ) GetPrizes(luckdrawid int) ([]model.TaLuckdrawPrize, error) {
78
+	prize, err := s.dao.GetPrizes(luckdrawid)
79
+	if err != nil {
80
+		utils.LogError("获取奖品信息失败: " + err.Error())
81
+		return nil, errors.New("获取奖品信息失败")
82
+	}
83
+	return prize, nil
84
+}
85
+func (s *LuckdrawServ) UpdateStock(prize *model.TaLuckdrawPrize) error {
86
+	err := s.dao.UpdateStock(prize)
87
+	if err != nil {
88
+		utils.LogError("修改库存失败: " + err.Error())
89
+		return errors.New("修改库存失败")
90
+	}
91
+	return nil
92
+}
93
+func (s *LuckdrawServ) GetPrizeStock(luckdrawid int) ([]model.TaLuckdrawPrize, error) {
94
+	prize, err := s.dao.GetPrizeStock(luckdrawid)
95
+	if err != nil {
96
+		utils.LogError("判断奖项库存失败: " + err.Error())
97
+		return nil, errors.New("判断奖项库存失败")
98
+	}
99
+	return prize, nil
100
+}
101
+func (s *LuckdrawServ) GetPrizeByID(id int) (model.TaLuckdrawPrize, error) {
102
+	prize, err := s.dao.GetPrizeByID(id)
103
+	if err != nil {
104
+		utils.LogError("根据id获取奖品信息失败: " + err.Error())
105
+		return prize, errors.New("根据id获取奖品信息失败")
106
+	}
107
+	return prize, nil
108
+}
109
+func (s *LuckdrawServ) SaveRecord(record model.TaLuckdrawRecord) (*model.TaLuckdrawRecord, error) {
110
+	newRecord, err := s.dao.SaveRecord(record)
111
+	if err != nil {
112
+		utils.LogError("保存抽奖记录失败: " + err.Error())
113
+		return nil, errors.New("保存抽奖记录失败")
114
+	}
115
+	return newRecord, nil
116
+
117
+}
118
+func (s *LuckdrawServ) GetPrizeDetail(prizeid int) ([]model.TaPrizeDetail, error) {
119
+	detail, err := s.dao.GetPrizeDetail(prizeid)
120
+	if err != nil {
121
+		utils.LogError("获取未领取的奖品详情失败: " + err.Error())
122
+		return nil, errors.New("获取未领取的奖品详情失败")
123
+	}
124
+	return detail, nil
125
+}
126
+
127
+func (s *LuckdrawServ) UpdatePrizeDetail(detail model.TaPrizeDetail) error {
128
+	err := s.dao.UpdatePrizeDetail(detail)
129
+	if err != nil {
130
+		utils.LogError("更新库存明细为已领取失败: " + err.Error())
131
+		return errors.New("更新库存明细为已领取失败")
132
+	}
133
+	return nil
134
+}
135
+func (s *LuckdrawServ) UpdateRecord(record *model.TaLuckdrawRecord) error {
136
+	err := s.dao.UpdateRecord(record)
137
+	if err != nil {
138
+		utils.LogError("核销更新抽奖记录表失败: " + err.Error())
139
+		return errors.New("核销更新抽奖记录表失败")
140
+	}
141
+	return nil
142
+}
143
+func (s *LuckdrawServ) SaveWirteOff(writeoff model.TaLuckdrawWriteoff) (*model.TaLuckdrawWriteoff, error) {
144
+	newWriteoff, err := s.dao.SaveWirteOff(writeoff)
145
+	if err != nil {
146
+		utils.LogError("保存核销信息失败: " + err.Error())
147
+		return nil, errors.New("保存核销信息失败")
148
+	}
149
+	return newWriteoff, nil
150
+}
151
+func (s *LuckdrawServ) GetUserRecordByLuckDraw(userid string, luckdrawid int) ([]model.TaLuckdrawRecord, error) {
152
+	record, err := s.dao.GetUserRecordByLuckDraw(userid, luckdrawid)
153
+	if err != nil {
154
+		utils.LogError("获取用户的抽奖信息失败: " + err.Error())
155
+		return nil, errors.New("获取用户的抽奖信息失败")
156
+	}
157
+	return record, nil
158
+}
159
+func (s *LuckdrawServ) GetUserLuckDrawByLuckDraw(userid string, luckdrawid int) (*model.TaLuckdrawRecord, error) {
160
+	record, err := s.dao.GetUserLuckDrawByLuckDraw(userid, luckdrawid)
161
+	if err != nil {
162
+		utils.LogError("获取用户的抽奖信息失败: " + err.Error())
163
+		return nil, errors.New("获取用户的抽奖信息失败")
164
+	}
165
+	return record, nil
166
+}
167
+func (s *LuckdrawServ) GetDetailByRecord(recordid int) (*model.TaPrizeDetail, error) {
168
+	detail, err := s.dao.GetDetailByRecord(recordid)
169
+	if err != nil {
170
+		utils.LogError("获取detail失败: " + err.Error())
171
+		return nil, errors.New("获取detail失败")
172
+	}
173
+	return detail, nil
174
+
175
+}
176
+func (s *LuckdrawServ) GetUserLuckDraw(userid string) ([]luckdraw.UserRecord, error) {
177
+	record, err := s.dao.GetUserLuckDraw(userid)
178
+	if err != nil {
179
+		utils.LogError("获取用户的抽奖信息失败: " + err.Error())
180
+		return nil, errors.New("获取用户的抽奖信息失败")
181
+	}
182
+	return record, nil
183
+
184
+}
185
+func (s *LuckdrawServ) GetRecordByLuckDraw(luckdrawid int) ([]model.TaLuckdrawRecord, error) {
186
+	record, err := s.dao.GetRecordByLuckDraw(luckdrawid)
187
+	if err != nil {
188
+		utils.LogError("获取抽奖记录失败: " + err.Error())
189
+		return nil, errors.New("获取抽奖记录失败")
190
+	}
191
+	return record, nil
192
+
193
+}
194
+func (s *LuckdrawServ) GetRecordByID(id int) (*model.TaLuckdrawRecord, error) {
195
+	record, err := s.dao.GetRecordByID(id)
196
+	if err != nil {
197
+		utils.LogError("获取抽奖记录明细失败: " + err.Error())
198
+		return nil, errors.New("获取抽奖记录明细失败")
199
+	}
200
+	return record, nil
201
+}
202
+func (s *LuckdrawServ) GetUserByOpenID(openid string) (*model.SysUser, error) {
203
+	user, err := s.dao.GetUserByOpenID(openid)
204
+	if err != nil {
205
+		utils.LogError("根据 openid 获取用户人员信息失败: " + err.Error())
206
+		return nil, errors.New("根据 openid 获取用户人员信息失败")
207
+	}
208
+	return user, nil
209
+
210
+}
211
+func (s *LuckdrawServ) GetUserByTel(tel string) (*model.SysUser, error) {
212
+	user, err := s.dao.GetUserByTel(tel)
213
+	if err != nil {
214
+		utils.LogError("根据 tel 获取用户人员信息失败: " + err.Error())
215
+		return nil, errors.New("根据 tel 获取用户人员信息失败")
216
+	}
217
+	return user, nil
218
+
219
+}
220
+
221
+func (s *LuckdrawServ) SaveLuckDrawShareData(dt *model.TaShareLuckyRecord) error {
222
+	err := s.dao.SaveLuckDrawShareData(dt)
223
+	if err != nil {
224
+		utils.LogError("保存用户分享信息失败: " + err.Error())
225
+		return errors.New("保存用户分享信息失败")
226
+	}
227
+	return nil
228
+
229
+}
230
+func (s *LuckdrawServ) GetLuckDrawShareData(luckID int, from, to, caseID string) ([]model.TaShareLuckyRecord, error) {
231
+	share, err := s.dao.GetLuckDrawShareData(luckID, from, to, caseID)
232
+	if err != nil {
233
+		utils.LogError("获取抽奖分享失败: " + err.Error())
234
+		return nil, errors.New("获取抽奖分享失败")
235
+	}
236
+	return share, nil
237
+}

+ 64
- 0
service/statistics/cardcoupon.go View File

@@ -37,3 +37,67 @@ func (s *StatisticsServ) CardCouponStatistics(caseids, ctype, name string, page,
37 37
 		"page":     page,
38 38
 	}, nil
39 39
 }
40
+
41
+// CardCouponUsedStatistics 获取卡券使用统计信息
42
+func (s *StatisticsServ) CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status string, page, pageSize int) (map[string]interface{}, error) {
43
+	if pageSize == 0 {
44
+		pageSize = service.PAGENUM
45
+	}
46
+	if page == 0 {
47
+		page = 1
48
+	}
49
+
50
+	if caseids == "" {
51
+		return nil, errors.New("请先选择案场信息")
52
+	}
53
+
54
+	list, err := s.dao.CardCouponUsedStatistics(caseids, tel, name, receivetype, begindate, enddate, status, page, pageSize)
55
+	if err != nil {
56
+		utils.LogError("获取卡券统计数据失败: " + err.Error())
57
+		return nil, errors.New("获取卡券统计数据失败")
58
+	}
59
+	total, err := s.dao.CardCouponUsedCountStatistics(caseids, tel, name, receivetype, begindate, enddate, status)
60
+	if err != nil {
61
+		utils.LogError("获取卡券统计数据失败: " + err.Error())
62
+		return nil, errors.New("获取卡券统计数据失败")
63
+	}
64
+
65
+	return map[string]interface{}{
66
+		"list":     list,
67
+		"pagesize": pageSize,
68
+		"pagenum":  total,
69
+		"page":     page,
70
+	}, nil
71
+}
72
+
73
+// CardCouponVerifyStatistics 获取卡券使用统计信息
74
+func (s *StatisticsServ) CardCouponVerifyStatistics(caseids, tel, name, status string, page, pageSize int) (map[string]interface{}, error) {
75
+	if pageSize == 0 {
76
+		pageSize = service.PAGENUM
77
+	}
78
+	if page == 0 {
79
+		page = 1
80
+	}
81
+
82
+	if caseids == "" {
83
+		return nil, errors.New("请先选择案场信息")
84
+	}
85
+
86
+	list, err := s.dao.CardCouponVerifyStatistics(caseids, tel, name, status, page, pageSize)
87
+	if err != nil {
88
+		utils.LogError("获取卡券统计数据失败: " + err.Error())
89
+		return nil, errors.New("获取卡券统计数据失败")
90
+	}
91
+	total, err := s.dao.CardCouponVerifyStatisticsCount(caseids, tel, name, status)
92
+	if err != nil {
93
+		utils.LogError("获取卡券统计数据失败: " + err.Error())
94
+		return nil, errors.New("获取卡券统计数据失败")
95
+	}
96
+
97
+	return map[string]interface{}{
98
+		"list":     list,
99
+		"pagesize": pageSize,
100
+		"pagenum":  total,
101
+		"page":     page,
102
+	}, nil
103
+}

+ 2
- 2
service/verify/verify.go View File

@@ -115,9 +115,9 @@ func (s *VerifyServ) UpdateCustomerCourseDetail(customerDetail *model.TaCustomer
115 115
 	customerDetail.VerifyDate = time.Now()
116 116
 	customerDetail.VerifyUser = userid
117 117
 	if time.Now().After(customerDetail.EndDate) {
118
-		customerDetail.VerifyStatus = "late"
118
+		customerDetail.VerifyStatus = models.VERIFY_LATE
119 119
 	} else {
120
-		customerDetail.VerifyStatus = "used"
120
+		customerDetail.VerifyStatus = models.VERIFY_USED
121 121
 	}
122 122
 	err = s.dao.UpdateCustomerCourseDetail(customerDetail)
123 123
 	if err != nil {

+ 64
- 0
utils/rand.go View File

@@ -0,0 +1,64 @@
1
+package utils
2
+
3
+import (
4
+	"math/rand"
5
+	"reflect"
6
+	"time"
7
+)
8
+
9
+var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
10
+
11
+// Shuffle 随机数组
12
+func Shuffle(arr interface{}) interface{} {
13
+	newSeed()
14
+
15
+	v := reflect.ValueOf(arr)
16
+
17
+	arrLen := v.Len()
18
+	res := reflect.MakeSlice(v.Type(), arrLen, arrLen)
19
+	reflect.Copy(res, v)
20
+
21
+	for i := 0; i < arrLen; i++ {
22
+		m := rnd.Intn(arrLen)
23
+		n := arrLen - m - 1
24
+
25
+		swp := res.Index(m)
26
+		res.Index(m).Set(res.Index(n))
27
+		res.Index(n).Set(swp)
28
+	}
29
+
30
+	return res.Interface()
31
+}
32
+
33
+// LuckyDraw 抽奖
34
+func LuckyDraw(pList []map[string]interface{}) interface{} {
35
+	// 奖池
36
+	pool := make([]interface{}, 0)
37
+
38
+	// 生成奖池
39
+	for _, it := range pList {
40
+		prize := it["prize"]
41
+		prob := it["prob"].(int)
42
+
43
+		for i := 0; i < prob; i++ {
44
+			pool = append(pool, prize)
45
+		}
46
+	}
47
+
48
+	poolLen := len(pool)
49
+	if poolLen == 0 {
50
+		return nil
51
+	}
52
+
53
+	// 打乱奖池 - 打乱两次, 以使其更混乱, 更随机
54
+	pool = Shuffle(pool).([]interface{})
55
+
56
+	newSeed()
57
+	inx := rnd.Intn(poolLen)
58
+	return pool[inx]
59
+}
60
+
61
+func newSeed() {
62
+	seed := time.Now().UnixNano() + int64(rnd.Intn(1000)*1000)
63
+	rnd.Seed(seed)
64
+}