keyman1995 6 年 前
コミット
4c1b86ca40
共有9 個のファイルを変更した1142 個の追加564 個の削除を含む
  1. 124
    0
      controllers/marketing/marketing.go
  2. 76
    74
      log/common.log
  3. 153
    0
      models/marketing/marketing.go
  4. 52
    0
      models/marketing/work.go
  5. 12
    0
      routers/common.go
  6. 56
    47
      routers/guest.go
  7. 446
    443
      service/course/course.go
  8. 177
    0
      service/marketing/marketing.go
  9. 46
    0
      service/marketing/work.go

+ 124
- 0
controllers/marketing/marketing.go ファイルの表示

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

+ 76
- 74
log/common.log ファイルの表示

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

+ 153
- 0
models/marketing/marketing.go ファイルの表示

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

+ 52
- 0
models/marketing/work.go ファイルの表示

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

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

@@ -11,6 +11,7 @@ import (
11 11
 	"spaceofcheng/services/controllers/system"
12 12
 	"spaceofcheng/services/controllers/user"
13 13
 	"spaceofcheng/services/controllers/vipcard"
14
+	"spaceofcheng/services/controllers/marketing"
14 15
 
15 16
 	"github.com/astaxie/beego"
16 17
 )
@@ -202,5 +203,16 @@ func getCommonRoutes() beego.LinkNamespace {
202 203
 
203 204
 		// 系统相关
204 205
 		beego.NSRouter("/system/init", &user.UserController{}, "get:GetEnvVars"),
206
+
207
+
208
+		// 营销活动
209
+		beego.NSRouter("/marketing/list",&marketing.MarketingController{},"get:GetMarketingList"),
210
+		beego.NSRouter("/marketing/add",&marketing.MarketingController{},"get:SaveMarketing"),
211
+		beego.NSRouter("/marketing/:activityId",&marketing.MarketingController{},"get:GetMarketingById"),
212
+		beego.NSRouter("/marketing/update",&marketing.MarketingController{},"get:UpdateMarketing"),
213
+		beego.NSRouter("/marketing/normal/:activityId",&marketing.MarketingController{},"get:DelMarketingNormal"),
214
+		beego.NSRouter("/marketing/disable/:activityId",&marketing.MarketingController{},"get:DelMarketingDisable"),
215
+		beego.NSRouter("/marketing/delete/:activityId",&marketing.MarketingController{},"get:DelMarketing"),
216
+
205 217
 	)
206 218
 }

+ 56
- 47
routers/guest.go ファイルの表示

@@ -1,47 +1,56 @@
1
-package routers
2
-
3
-import (
4
-	"spaceofcheng/services/controllers"
5
-	"spaceofcheng/services/controllers/cases"
6
-	"spaceofcheng/services/controllers/course"
7
-	"spaceofcheng/services/controllers/customer"
8
-	"spaceofcheng/services/controllers/goods"
9
-	"spaceofcheng/services/controllers/message"
10
-	"spaceofcheng/services/controllers/user"
11
-
12
-	"github.com/astaxie/beego"
13
-)
14
-
15
-func getGuestRoutes() beego.LinkNamespace {
16
-	prefix := beego.AppConfig.String("api::guest")
17
-
18
-	return beego.NSNamespace(prefix,
19
-		// cms
20
-		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoByLocation"),
21
-		beego.NSRouter("/cms/img", &message.MessageController{}, "get:GetImgByLocation"),
22
-		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
23
-		beego.NSRouter("/cms/case", &message.MessageController{}, "get:GetCmsCaseList"),
24
-		beego.NSRouter("/cms/location", &message.MessageController{}, "get:GetLocations"),
25
-		beego.NSRouter("/cms/course", &course.CourseController{}, "get:GetCourseByLocation"),
26
-
27
-		// 案场
28
-		beego.NSRouter("/case", &cases.CaseController{}, "get:GetOrgCases"),
29
-
30
-		// 商品制作状态
31
-		beego.NSRouter("/dict/order/makestatus", &goods.GoodsController{}, "get:GetMakeStatus"),
32
-
33
-		// 商品
34
-		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListForWechat"),
35
-
36
-		// 验证码 获取, 校验
37
-		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),
38
-		beego.NSRouter("/captcha", &controllers.BaseController{}, "post:ValidCaptcha"),
39
-
40
-		// 微信 登录, 注册
41
-		beego.NSRouter("/wxsignin", &customer.CustomerController{}, "post:SignIn"),
42
-		beego.NSRouter("/wxsignup", &customer.CustomerController{}, "post:SignUp"),
43
-
44
-		// 登录
45
-		beego.NSRouter("/signin", &user.UserController{}, "post:SignIn"),
46
-	)
47
-}
1
+package routers
2
+
3
+import (
4
+	"spaceofcheng/services/controllers"
5
+	"spaceofcheng/services/controllers/cases"
6
+	"spaceofcheng/services/controllers/course"
7
+	"spaceofcheng/services/controllers/customer"
8
+	"spaceofcheng/services/controllers/goods"
9
+	"spaceofcheng/services/controllers/message"
10
+	"spaceofcheng/services/controllers/user"
11
+	"spaceofcheng/services/controllers/marketing"
12
+
13
+	"github.com/astaxie/beego"
14
+)
15
+
16
+func getGuestRoutes() beego.LinkNamespace {
17
+	prefix := beego.AppConfig.String("api::guest")
18
+
19
+	return beego.NSNamespace(prefix,
20
+		// cms
21
+		beego.NSRouter("/cms/info", &message.MessageController{}, "get:GetCmsInfoByLocation"),
22
+		beego.NSRouter("/cms/img", &message.MessageController{}, "get:GetImgByLocation"),
23
+		beego.NSRouter("/cms/news", &message.MessageController{}, "get:GetNewsByLocation"),
24
+		beego.NSRouter("/cms/case", &message.MessageController{}, "get:GetCmsCaseList"),
25
+		beego.NSRouter("/cms/location", &message.MessageController{}, "get:GetLocations"),
26
+		beego.NSRouter("/cms/course", &course.CourseController{}, "get:GetCourseByLocation"),
27
+
28
+		// 案场
29
+		beego.NSRouter("/case", &cases.CaseController{}, "get:GetOrgCases"),
30
+
31
+		// 商品制作状态
32
+		beego.NSRouter("/dict/order/makestatus", &goods.GoodsController{}, "get:GetMakeStatus"),
33
+
34
+		// 商品
35
+		beego.NSRouter("/goods", &goods.GoodsController{}, "get:GetListForWechat"),
36
+
37
+		// 验证码 获取, 校验
38
+		beego.NSRouter("/captcha", &controllers.BaseController{}, "get:SendCaptcha"),
39
+		beego.NSRouter("/captcha", &controllers.BaseController{}, "post:ValidCaptcha"),
40
+
41
+		// 微信 登录, 注册
42
+		beego.NSRouter("/wxsignin", &customer.CustomerController{}, "post:SignIn"),
43
+		beego.NSRouter("/wxsignup", &customer.CustomerController{}, "post:SignUp"),
44
+
45
+		// 登录
46
+		beego.NSRouter("/signin", &user.UserController{}, "post:SignIn"),
47
+
48
+		// 营销活动 (测试,测试完可删除)
49
+		beego.NSRouter("/marketing/list",&marketing.MarketingController{},"get:GetMarketingList"),
50
+		beego.NSRouter("/marketing/add",&marketing.MarketingController{},"get:SaveMarketing"),
51
+		beego.NSRouter("/marketing/:activityId",&marketing.MarketingController{},"get:GetMarketingById"),
52
+		beego.NSRouter("/marketing/update",&marketing.MarketingController{},"get:UpdateMarketing"),
53
+		beego.NSRouter("/marketing/normal/:activityId",&marketing.MarketingController{},"get:DelMarketingNormal"),
54
+		beego.NSRouter("/marketing/disable/:activityId",&marketing.MarketingController{},"get:DelMarketingDisable"),
55
+		beego.NSRouter("/marketing/delete/:activityId",&marketing.MarketingController{},"get:DelMarketing"))
56
+}

+ 446
- 443
service/course/course.go ファイルの表示

@@ -1,443 +1,446 @@
1
-package course
2
-
3
-import (
4
-	"spaceofcheng/services/models"
5
-	"spaceofcheng/services/models/cases"
6
-	"spaceofcheng/services/models/course"
7
-	"spaceofcheng/services/models/customer"
8
-	"spaceofcheng/services/models/model"
9
-	"spaceofcheng/services/models/system"
10
-	"spaceofcheng/services/service"
11
-	"spaceofcheng/services/utils"
12
-	"strings"
13
-
14
-	"github.com/astaxie/beego"
15
-)
16
-
17
-// CourseServ 系统处理
18
-type CourseServ struct {
19
-	ctx     *utils.Context
20
-	dao     *course.CourseDAO
21
-	casedao *cases.CaseDAO
22
-	custDAO *customer.CustomerDAO
23
-	userDAO *system.UserDAO
24
-}
25
-
26
-// NewCourseServ 初始化
27
-func NewCourseServ(ctx *utils.Context) *CourseServ {
28
-	return &CourseServ{
29
-		ctx:     ctx,
30
-		dao:     course.NewCourseDAO(ctx),
31
-		casedao: cases.NewCaseDAO(ctx),
32
-		custDAO: customer.NewCustomerDAO(ctx),
33
-		userDAO: system.NewUserDAO(ctx),
34
-	}
35
-}
36
-
37
-// GetCourseList 获取课程列表
38
-func (s *CourseServ) GetCourseList(caseids, name, typeid string, page, pageSize int) (map[string]interface{}, error) {
39
-	if pageSize == 0 {
40
-		pageSize = service.PAGENUM
41
-	}
42
-	if page == 0 {
43
-		page = 1
44
-	}
45
-	list, err := s.dao.GetCourseList(caseids, name, typeid, page, pageSize)
46
-	if err != nil {
47
-		beego.Error(err)
48
-		return nil, err
49
-	}
50
-	total, err := s.dao.GetCourseCount(caseids, name, typeid)
51
-	if err != nil {
52
-		beego.Error(err)
53
-		return nil, err
54
-	}
55
-
56
-	return map[string]interface{}{
57
-		"list":     list,
58
-		"pagesize": pageSize,
59
-		"pagenum":  total,
60
-		"page":     page,
61
-	}, err
62
-}
63
-
64
-// GetCourseByID 获取课程明细
65
-func (s *CourseServ) GetCourseByID(courseid string) (*course.CourseDetail, error) {
66
-	if courseid == "" {
67
-		return nil, utils.LogError("不存在课程信息!")
68
-	}
69
-	info, err := s.dao.GetCourseInfo(courseid)
70
-	if err != nil {
71
-		return nil, err
72
-	}
73
-	if info == nil {
74
-		return nil, utils.LogError("不存在课程信息!")
75
-	}
76
-	if info.Status == models.STATUS_DEL {
77
-		return nil, utils.LogError("课程已被删除!")
78
-	}
79
-
80
-	tags, err := s.dao.GetCourseTag(courseid)
81
-	if err != nil {
82
-		return nil, err
83
-	}
84
-	info.CourseTags = tags
85
-	details, err := s.dao.GetCourseDetail(courseid)
86
-	if err != nil {
87
-		return nil, err
88
-	}
89
-	info.CourseDetail = details
90
-	imgs, err := s.dao.GetCourseImgs(courseid)
91
-	if err != nil {
92
-		return nil, err
93
-	}
94
-	info.CourseImgs = imgs
95
-	caseinfo, err := s.casedao.GetCaseByID(info.CaseId)
96
-	if err != nil {
97
-		return nil, err
98
-	}
99
-	info.CaseInfo = caseinfo
100
-	return info, nil
101
-}
102
-
103
-// SaveCourse 保存课程信息
104
-func (s *CourseServ) SaveCourse(course model.TaCourse, tagids string) (*model.TaCourse, error) {
105
-	var newInfo *model.TaCourse
106
-	var err error
107
-	if course.CourseName == "" {
108
-		return nil, utils.LogError("课程名称不允许为空!")
109
-	}
110
-	if course.CourseImg == "" {
111
-		return nil, utils.LogError("课程主图不允许为空!")
112
-	}
113
-	if course.LocationId == "" {
114
-		return nil, utils.LogError("课程类型不允许为空!")
115
-	}
116
-	if course.CaseId == "" {
117
-		return nil, utils.LogError("课程案场不允许为空!")
118
-	}
119
-	if course.Price == "" || course.Price == "0" {
120
-		return nil, utils.LogError("课程价格不允许为0!")
121
-	}
122
-	if course.MinNum == 0 {
123
-		return nil, utils.LogError("最小开课人数不允许为0!")
124
-	}
125
-	if course.MaxNum == 0 {
126
-		return nil, utils.LogError("上课人数不允许为0!")
127
-	}
128
-	if course.MaxNum < course.MinNum {
129
-		return nil, utils.LogError("上课人数不允许小于最小开课人数!")
130
-	}
131
-	if course.CourseNum == 0 {
132
-		return nil, utils.LogError("课时数不允许为0!")
133
-	}
134
-	if course.BeginDate.IsZero() || course.EndDate.IsZero() {
135
-		return nil, utils.LogError("课程时间不允许为空!")
136
-	}
137
-	if course.EndDate.After(course.BeginDate) {
138
-		return nil, utils.LogError("截止时间必须大于开始时间!")
139
-	}
140
-	if tagids == "" {
141
-		return nil, utils.LogError("请选择课程标签!")
142
-	}
143
-	if course.CourseId == "" {
144
-		newInfo, err = s.dao.AddCourse(course)
145
-		if err != nil {
146
-			return nil, err
147
-		}
148
-	} else {
149
-		err = s.dao.UpdateCourse(course)
150
-		if err != nil {
151
-			return nil, err
152
-		}
153
-		newInfo = &course
154
-		err = s.dao.DelCourseTag(course.CourseId)
155
-		if err != nil {
156
-			return nil, err
157
-		}
158
-	}
159
-
160
-	tags := strings.Split(tagids, ",")
161
-	var courseTags []model.TaCourseTag
162
-	for _, tag := range tags {
163
-		arr := strings.Split(tag, ":")
164
-		var tagid = ""
165
-		if len(arr) > 1 {
166
-			tagid = arr[1]
167
-		} else {
168
-			var taginfo = model.TdCourseTag{
169
-				TagName: arr[0],
170
-				OrgId:   course.OrgId,
171
-			}
172
-			newtag, err := s.dao.AddCourseTag(taginfo)
173
-			if err != nil {
174
-				return nil, err
175
-			}
176
-			tagid = newtag.TagId
177
-		}
178
-		var coursetag = model.TaCourseTag{
179
-			CourseId: course.CourseId,
180
-			TagId:    tagid,
181
-		}
182
-		courseTags = append(courseTags, coursetag)
183
-	}
184
-
185
-	if len(courseTags) > 0 {
186
-		err = s.dao.SaveCourseTag(courseTags)
187
-		return nil, err
188
-	}
189
-	return newInfo, nil
190
-}
191
-
192
-// DelCourse 刪除课程信息
193
-func (s *CourseServ) DelCourse(courseid string) error {
194
-	if courseid == "" {
195
-		return utils.LogError("没有对应的课程!")
196
-	}
197
-	courseinfo, err := s.dao.GetCourseByID(courseid)
198
-	if err != nil {
199
-		return err
200
-	}
201
-	if courseinfo.Status != course.STATUS_UNPUBLISH {
202
-		return utils.LogError("课程状态异常!不允许删除!")
203
-	}
204
-	err = s.dao.DelCourse(courseid)
205
-	if err != nil {
206
-		return err
207
-	}
208
-	err = s.dao.DeleteScheduleByCourse(courseid)
209
-	return err
210
-}
211
-
212
-// CoursePublic 课程发布
213
-func (s *CourseServ) CoursePublic(courseid string) error {
214
-	if courseid == "" {
215
-		return utils.LogError("没有对应的课程!")
216
-	}
217
-	info, err := s.dao.GetCourseByID(courseid)
218
-	if err != nil {
219
-		return err
220
-	}
221
-	if info.Status != course.STATUS_UNPUBLISH {
222
-		return utils.LogError("当前课程状态异常!请刷新后重试!")
223
-	}
224
-	err = s.dao.CoursePublic(courseid)
225
-	return err
226
-}
227
-
228
-// CourseUnPublic 课程取消发布
229
-func (s *CourseServ) CourseUnPublic(courseid string) error {
230
-	if courseid == "" {
231
-		return utils.LogError("没有对应的课程!")
232
-	}
233
-	info, err := s.dao.GetCourseByID(courseid)
234
-	if err != nil {
235
-		return err
236
-	}
237
-	if info.Status != models.STATUS_NORMAL {
238
-		return utils.LogError("当前课程状态异常!请刷新后重试!")
239
-	}
240
-	err = s.dao.CourseUnPublic(courseid)
241
-	return err
242
-}
243
-
244
-// GetCourseImgs 获取课程图片
245
-func (s *CourseServ) GetCourseImgs(courseid string) ([]model.TaCourseImg, error) {
246
-	if courseid == "" {
247
-		return nil, utils.LogError("没有对应的课程!")
248
-	}
249
-	imgs, err := s.dao.GetCourseImgs(courseid)
250
-	return imgs, err
251
-}
252
-
253
-// SaveCourseImg 保存课程图片
254
-func (s *CourseServ) SaveCourseImg(img model.TaCourseImg) (*model.TaCourseImg, error) {
255
-	var newinfo *model.TaCourseImg
256
-	var err error
257
-	if img.ImgUrl == "" {
258
-		return nil, utils.LogError("请先上传图片!")
259
-	}
260
-	if img.ImgId == "" {
261
-		newinfo, err = s.dao.AddCourseImg(img)
262
-	} else {
263
-		newinfo = &img
264
-		err = s.dao.UpdateCourseImg(img)
265
-	}
266
-	return newinfo, err
267
-}
268
-
269
-// DelCourseImg 刪除课程图片
270
-func (s *CourseServ) DelCourseImg(imgid string) error {
271
-	if imgid == "" {
272
-		return utils.LogError("没有需要删除的内容!")
273
-	}
274
-	err := s.dao.DelCourseImg(imgid)
275
-	return err
276
-}
277
-
278
-// GetCourseSchedule 获取课程排期
279
-func (s *CourseServ) GetCourseSchedule(name, caseids, date string, page, pageSize int) (map[string]interface{}, error) {
280
-	if pageSize == 0 {
281
-		pageSize = service.PAGENUM
282
-	}
283
-	if page == 0 {
284
-		page = 1
285
-	}
286
-	if date == "" {
287
-		return nil, utils.LogError("请先选择需要排课的日期!")
288
-	}
289
-	list, err := s.dao.GetCourseSchedule(name, caseids, date, page, pageSize)
290
-	if err != nil {
291
-		beego.Error(err)
292
-		return nil, err
293
-	}
294
-	total, err := s.dao.GetCourseScheduleCount(name, caseids, date)
295
-	if err != nil {
296
-		beego.Error(err)
297
-		return nil, err
298
-	}
299
-
300
-	return map[string]interface{}{
301
-		"list":     list,
302
-		"pagesize": pageSize,
303
-		"pagenum":  total,
304
-		"page":     page,
305
-	}, err
306
-}
307
-
308
-// GetDetails 获取所有排课
309
-func (s *CourseServ) GetDetails(caseid, date string) ([]model.TaCourseDetail, error) {
310
-	if caseid == "" {
311
-		return nil, utils.LogError("请先选择案场!")
312
-	}
313
-	if date == "" {
314
-		return nil, utils.LogError("请选择需要查看的月份!")
315
-	}
316
-	details, err := s.dao.GetDetails(caseid, date)
317
-	return details, err
318
-}
319
-
320
-// GetDetailByID 获取单个排课信息
321
-func (s *CourseServ) GetDetailByID(detailid string) (*model.TaCourseDetail, error) {
322
-	if detailid == "" {
323
-		return nil, utils.LogError("没有对应的排课信息!")
324
-	}
325
-	detail, err := s.dao.GetDetailByID(detailid)
326
-	return detail, err
327
-}
328
-
329
-// SaveDetail 保存排课信息
330
-func (s *CourseServ) SaveDetail(detail model.TaCourseDetail) (*model.TaCourseDetail, error) {
331
-	var newinfo *model.TaCourseDetail
332
-	if detail.CourseId == "" {
333
-		return nil, utils.LogError("没有对应的课程信息!")
334
-	}
335
-	if detail.DetailName == "" {
336
-		return nil, utils.LogError("课程名称不能为空!")
337
-	}
338
-	if detail.BeginDate.IsZero() || detail.EndDate.IsZero() {
339
-		return nil, utils.LogError("课程时间不能为空!")
340
-	}
341
-	if detail.BeginDate.After(detail.EndDate) {
342
-		return nil, utils.LogError("课程截止时间必须大于开始时间!")
343
-	}
344
-	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
345
-	if err != nil {
346
-		return nil, err
347
-	}
348
-	if courseinfo.Status != course.STATUS_UNPUBLISH {
349
-		return nil, utils.LogError("课程状态异常!不允许排课!请刷新后重试!")
350
-	}
351
-	if detail.DetailId == "" {
352
-		detail.OrgId = courseinfo.OrgId
353
-		detail.CaseId = courseinfo.CaseId
354
-		newinfo, err = s.dao.AddCourseDetail(detail)
355
-		if err != nil {
356
-			return nil, err
357
-		}
358
-		num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
359
-		if err != nil {
360
-			return nil, err
361
-		}
362
-		err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
363
-		if err != nil {
364
-			return nil, err
365
-		}
366
-	} else {
367
-		err := s.dao.UpdateCourseDetail(detail)
368
-		if err != nil {
369
-			return nil, err
370
-		}
371
-		newinfo = &detail
372
-	}
373
-	return newinfo, nil
374
-}
375
-
376
-// DelCourseDetail 删除课程明细
377
-func (s *CourseServ) DelCourseDetail(detailid string) error {
378
-	if detailid == "" {
379
-		return utils.LogError("没有对应的排课信息!")
380
-	}
381
-	detail, err := s.dao.GetDetailByID(detailid)
382
-	if err != nil {
383
-		return err
384
-	}
385
-	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
386
-	if err != nil {
387
-		return err
388
-	}
389
-	if courseinfo.Status != course.STATUS_UNPUBLISH {
390
-		return utils.LogError("课程状态异常!不允许删除!")
391
-	}
392
-	err = s.dao.DelCourseDetail(detailid)
393
-	if err != nil {
394
-		return err
395
-	}
396
-	num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
397
-	if err != nil {
398
-		return err
399
-	}
400
-	err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
401
-	if err != nil {
402
-		return err
403
-	}
404
-	return nil
405
-}
406
-
407
-// GetCourseBySelect 获取精选课程
408
-func (s *CourseServ) GetSelectCourseList(orgid string) ([]course.CourseDetail, error) {
409
-	if orgid == "" {
410
-		return nil, utils.LogError("参数错误!")
411
-	}
412
-	list, err := s.dao.GetSelectCourseList(orgid)
413
-	if err != nil {
414
-		return nil, err
415
-	}
416
-	for i, v := range list {
417
-		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
418
-		if err != nil {
419
-			return nil, err
420
-		}
421
-		list[i].CaseInfo = caseinfo
422
-	}
423
-	return list, err
424
-}
425
-
426
-// GetCourseByLocation 根据位置获取课程
427
-func (s *CourseServ) GetCourseByLocation(orgid, locationid string) ([]course.CourseDetail, error) {
428
-	if orgid == "" || locationid == "" {
429
-		return nil, utils.LogError("参数错误!")
430
-	}
431
-	list, err := s.dao.GetCourseByLocation(orgid, locationid)
432
-	if err != nil {
433
-		return nil, err
434
-	}
435
-	for i, v := range list {
436
-		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
437
-		if err != nil {
438
-			return nil, err
439
-		}
440
-		list[i].CaseInfo = caseinfo
441
-	}
442
-	return list, err
443
-}
1
+package course
2
+
3
+import (
4
+	"spaceofcheng/services/models"
5
+	"spaceofcheng/services/models/cases"
6
+	"spaceofcheng/services/models/course"
7
+	"spaceofcheng/services/models/customer"
8
+	"spaceofcheng/services/models/model"
9
+	"spaceofcheng/services/models/system"
10
+	"spaceofcheng/services/service"
11
+	"spaceofcheng/services/utils"
12
+	"strings"
13
+
14
+	"github.com/astaxie/beego"
15
+)
16
+
17
+// CourseServ 系统处理
18
+type CourseServ struct {
19
+	ctx     *utils.Context
20
+	dao     *course.CourseDAO
21
+	casedao *cases.CaseDAO
22
+	custDAO *customer.CustomerDAO
23
+	userDAO *system.UserDAO
24
+}
25
+
26
+// NewCourseServ 初始化
27
+func NewCourseServ(ctx *utils.Context) *CourseServ {
28
+	return &CourseServ{
29
+		ctx:     ctx,
30
+		dao:     course.NewCourseDAO(ctx),
31
+		casedao: cases.NewCaseDAO(ctx),
32
+		custDAO: customer.NewCustomerDAO(ctx),
33
+		userDAO: system.NewUserDAO(ctx),
34
+	}
35
+}
36
+
37
+// GetCourseList 获取课程列表
38
+func (s *CourseServ) GetCourseList(caseids, name, typeid string, page, pageSize int) (map[string]interface{}, error) {
39
+	if pageSize == 0 {
40
+		pageSize = service.PAGENUM
41
+	}
42
+	if page == 0 {
43
+		page = 1
44
+	}
45
+	list, err := s.dao.GetCourseList(caseids, name, typeid, page, pageSize)
46
+	if err != nil {
47
+		beego.Error(err)
48
+		return nil, err
49
+	}
50
+	total, err := s.dao.GetCourseCount(caseids, name, typeid)
51
+	if err != nil {
52
+		beego.Error(err)
53
+		return nil, err
54
+	}
55
+
56
+	return map[string]interface{}{
57
+		"list":     list,
58
+		"pagesize": pageSize,
59
+		"pagenum":  total,
60
+		"page":     page,
61
+	}, err
62
+}
63
+
64
+// GetCourseByID 获取课程明细
65
+func (s *CourseServ) GetCourseByID(courseid string) (*course.CourseDetail, error) {
66
+	if courseid == "" {
67
+		return nil, utils.LogError("不存在课程信息!")
68
+	}
69
+	info, err := s.dao.GetCourseInfo(courseid)
70
+	if err != nil {
71
+		return nil, err
72
+	}
73
+	if info == nil {
74
+		return nil, utils.LogError("不存在课程信息!")
75
+	}
76
+	if info.Status == models.STATUS_DEL {
77
+		return nil, utils.LogError("课程已被删除!")
78
+	}
79
+
80
+	tags, err := s.dao.GetCourseTag(courseid)
81
+	if err != nil {
82
+		return nil, err
83
+	}
84
+	info.CourseTags = tags
85
+	details, err := s.dao.GetCourseDetail(courseid)
86
+	if err != nil {
87
+		return nil, err
88
+	}
89
+	info.CourseDetail = details
90
+	imgs, err := s.dao.GetCourseImgs(courseid)
91
+	if err != nil {
92
+		return nil, err
93
+	}
94
+	info.CourseImgs = imgs
95
+	caseinfo, err := s.casedao.GetCaseByID(info.CaseId)
96
+	if err != nil {
97
+		return nil, err
98
+	}
99
+	info.CaseInfo = caseinfo
100
+	return info, nil
101
+}
102
+
103
+// SaveCourse 保存课程信息
104
+func (s *CourseServ) SaveCourse(course model.TaCourse, tagids string) (*model.TaCourse, error) {
105
+	var newInfo *model.TaCourse
106
+	var err error
107
+	if course.CourseName == "" {
108
+		return nil, utils.LogError("课程名称不允许为空!")
109
+	}
110
+	if course.CourseImg == "" {
111
+		return nil, utils.LogError("课程主图不允许为空!")
112
+	}
113
+	if course.LocationId == "" {
114
+		return nil, utils.LogError("课程类型不允许为空!")
115
+	}
116
+	if course.CaseId == "" {
117
+		return nil, utils.LogError("课程案场不允许为空!")
118
+	}
119
+	if course.Price == "" || course.Price == "0" {
120
+		return nil, utils.LogError("课程价格不允许为0!")
121
+	}
122
+	if course.MinNum == 0 {
123
+		return nil, utils.LogError("最小开课人数不允许为0!")
124
+	}
125
+	if course.MaxNum == 0 {
126
+		return nil, utils.LogError("上课人数不允许为0!")
127
+	}
128
+	if course.MaxNum < course.MinNum {
129
+		return nil, utils.LogError("上课人数不允许小于最小开课人数!")
130
+	}
131
+	if course.CourseNum == 0 {
132
+		return nil, utils.LogError("课时数不允许为0!")
133
+	}
134
+	if course.BeginDate.IsZero() || course.EndDate.IsZero() {
135
+		return nil, utils.LogError("课程时间不允许为空!")
136
+	}
137
+	if course.EndDate.After(course.BeginDate) {
138
+		return nil, utils.LogError("截止时间必须大于开始时间!")
139
+	}
140
+	if tagids == "" {
141
+		return nil, utils.LogError("请选择课程标签!")
142
+	}
143
+	if course.CourseId == "" {
144
+		newInfo, err = s.dao.AddCourse(course)
145
+		if err != nil {
146
+			return nil, err
147
+		}
148
+	} else {
149
+		err = s.dao.UpdateCourse(course)
150
+		if err != nil {
151
+			return nil, err
152
+		}
153
+		newInfo = &course
154
+		err = s.dao.DelCourseTag(course.CourseId)
155
+		if err != nil {
156
+			return nil, err
157
+		}
158
+	}
159
+
160
+	tags := strings.Split(tagids, ",")
161
+	var courseTags []model.TaCourseTag
162
+	for _, tag := range tags {
163
+		arr := strings.Split(tag, ":")
164
+		var tagid = ""
165
+		if len(arr) > 1 {
166
+			tagid = arr[1]
167
+		} else {
168
+			var taginfo = model.TdCourseTag{
169
+				TagName: arr[0],
170
+				OrgId:   course.OrgId,
171
+			}
172
+			newtag, err := s.dao.AddCourseTag(taginfo)
173
+			if err != nil {
174
+				return nil, err
175
+			}
176
+			tagid = newtag.TagId
177
+		}
178
+		var coursetag = model.TaCourseTag{
179
+			CourseId: course.CourseId,
180
+			TagId:    tagid,
181
+		}
182
+		courseTags = append(courseTags, coursetag)
183
+	}
184
+
185
+	if len(courseTags) > 0 {
186
+		err = s.dao.SaveCourseTag(courseTags)
187
+		return nil, err
188
+	}
189
+	return newInfo, nil
190
+}
191
+
192
+// DelCourse 刪除课程信息
193
+func (s *CourseServ) DelCourse(courseid string) error {
194
+	if courseid == "" {
195
+		return utils.LogError("没有对应的课程!")
196
+	}
197
+	courseinfo, err := s.dao.GetCourseByID(courseid)
198
+	if err != nil {
199
+		return err
200
+	}
201
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
202
+		return utils.LogError("课程状态异常!不允许删除!")
203
+	}
204
+	err = s.dao.DelCourse(courseid)
205
+	if err != nil {
206
+		return err
207
+	}
208
+	err = s.dao.DeleteScheduleByCourse(courseid)
209
+	return err
210
+}
211
+
212
+// CoursePublic 课程发布
213
+func (s *CourseServ) CoursePublic(courseid string) error {
214
+	if courseid == "" {
215
+		return utils.LogError("没有对应的课程!")
216
+	}
217
+	info, err := s.dao.GetCourseByID(courseid)
218
+	if err != nil {
219
+		return err
220
+	}
221
+	if info.Status != course.STATUS_UNPUBLISH {
222
+		return utils.LogError("当前课程状态异常!请刷新后重试!")
223
+	}
224
+	err = s.dao.CoursePublic(courseid)
225
+	return err
226
+}
227
+
228
+// CourseUnPublic 课程取消发布
229
+func (s *CourseServ) CourseUnPublic(courseid string) error {
230
+	if courseid == "" {
231
+		return utils.LogError("没有对应的课程!")
232
+	}
233
+	info, err := s.dao.GetCourseByID(courseid)
234
+	if err != nil {
235
+		return err
236
+	}
237
+	if info.Status != models.STATUS_NORMAL {
238
+		return utils.LogError("当前课程状态异常!请刷新后重试!")
239
+	}
240
+	err = s.dao.CourseUnPublic(courseid)
241
+	return err
242
+}
243
+
244
+// GetCourseImgs 获取课程图片
245
+func (s *CourseServ) GetCourseImgs(courseid string) ([]model.TaCourseImg, error) {
246
+	if courseid == "" {
247
+		return nil, utils.LogError("没有对应的课程!")
248
+	}
249
+	imgs, err := s.dao.GetCourseImgs(courseid)
250
+	return imgs, err
251
+}
252
+
253
+// SaveCourseImg 保存课程图片
254
+func (s *CourseServ) SaveCourseImg(img model.TaCourseImg) (*model.TaCourseImg, error) {
255
+	var newinfo *model.TaCourseImg
256
+	var err error
257
+	if img.ImgUrl == "" {
258
+		return nil, utils.LogError("请先上传图片!")
259
+	}
260
+	if img.ImgId == "" {
261
+		newinfo, err = s.dao.AddCourseImg(img)
262
+	} else {
263
+		newinfo = &img
264
+		err = s.dao.UpdateCourseImg(img)
265
+	}
266
+	return newinfo, err
267
+}
268
+
269
+// DelCourseImg 刪除课程图片
270
+func (s *CourseServ) DelCourseImg(imgid string) error {
271
+	if imgid == "" {
272
+		return utils.LogError("没有需要删除的内容!")
273
+	}
274
+	err := s.dao.DelCourseImg(imgid)
275
+	return err
276
+}
277
+
278
+// GetCourseSchedule 获取课程排期
279
+func (s *CourseServ) GetCourseSchedule(name, caseids, date string, page, pageSize int) (map[string]interface{}, error) {
280
+	if pageSize == 0 {
281
+		pageSize = service.PAGENUM
282
+	}
283
+	if page == 0 {
284
+		page = 1
285
+	}
286
+	if date == "" {
287
+		return nil, utils.LogError("请先选择需要排课的日期!")
288
+	}
289
+	list, err := s.dao.GetCourseSchedule(name, caseids, date, page, pageSize)
290
+	if err != nil {
291
+		beego.Error(err)
292
+		return nil, err
293
+	}
294
+	total, err := s.dao.GetCourseScheduleCount(name, caseids, date)
295
+	if err != nil {
296
+		beego.Error(err)
297
+		return nil, err
298
+	}
299
+
300
+	return map[string]interface{}{
301
+		"list":     list,
302
+		"pagesize": pageSize,
303
+		"pagenum":  total,
304
+		"page":     page,
305
+	}, err
306
+}
307
+
308
+// GetDetails 获取所有排课
309
+func (s *CourseServ) GetDetails(caseid, date string) ([]model.TaCourseDetail, error) {
310
+	if caseid == "" {
311
+		return nil, utils.LogError("请先选择案场!")
312
+	}
313
+	if date == "" {
314
+		return nil, utils.LogError("请选择需要查看的月份!")
315
+	}
316
+	details, err := s.dao.GetDetails(caseid, date)
317
+	return details, err
318
+}
319
+
320
+// GetDetailByID 获取单个排课信息
321
+func (s *CourseServ) GetDetailByID(detailid string) (*model.TaCourseDetail, error) {
322
+	if detailid == "" {
323
+		return nil, utils.LogError("没有对应的排课信息!")
324
+	}
325
+	detail, err := s.dao.GetDetailByID(detailid)
326
+	return detail, err
327
+}
328
+
329
+// SaveDetail 保存排课信息
330
+func (s *CourseServ) SaveDetail(detail model.TaCourseDetail) (*model.TaCourseDetail, error) {
331
+	var newinfo *model.TaCourseDetail
332
+	if detail.CourseId == "" {
333
+		return nil, utils.LogError("没有对应的课程信息!")
334
+	}
335
+	if detail.DetailName == "" {
336
+		return nil, utils.LogError("课程名称不能为空!")
337
+	}
338
+	if detail.BeginDate.IsZero() || detail.EndDate.IsZero() {
339
+		return nil, utils.LogError("课程时间不能为空!")
340
+	}
341
+	if detail.BeginDate.After(detail.EndDate) {
342
+		return nil, utils.LogError("课程截止时间必须大于开始时间!")
343
+	}
344
+	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
345
+	if err != nil {
346
+		return nil, err
347
+	}
348
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
349
+		return nil, utils.LogError("课程状态异常!不允许排课!请刷新后重试!")
350
+	}
351
+	if detail.DetailId == "" {
352
+		detail.OrgId = courseinfo.OrgId
353
+		detail.CaseId = courseinfo.CaseId
354
+		newinfo, err = s.dao.AddCourseDetail(detail)
355
+		if err != nil {
356
+			return nil, err
357
+		}
358
+		num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
359
+		if err != nil {
360
+			return nil, err
361
+		}
362
+		err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
363
+		if err != nil {
364
+			return nil, err
365
+		}
366
+	} else {
367
+		err := s.dao.UpdateCourseDetail(detail)
368
+		if err != nil {
369
+			return nil, err
370
+		}
371
+		newinfo = &detail
372
+	}
373
+	return newinfo, nil
374
+}
375
+
376
+// DelCourseDetail 删除课程明细
377
+func (s *CourseServ) DelCourseDetail(detailid string) error {
378
+	if detailid == "" {
379
+		return utils.LogError("没有对应的排课信息!")
380
+	}
381
+	detail, err := s.dao.GetDetailByID(detailid)
382
+	if err != nil {
383
+		return err
384
+	}
385
+	courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
386
+	if err != nil {
387
+		return err
388
+	}
389
+	if courseinfo.Status != course.STATUS_UNPUBLISH {
390
+		return utils.LogError("课程状态异常!不允许删除!")
391
+	}
392
+	err = s.dao.DelCourseDetail(detailid)
393
+	if err != nil {
394
+		return err
395
+	}
396
+	num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
397
+	if err != nil {
398
+		return err
399
+	}
400
+	err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
401
+	if err != nil {
402
+		return err
403
+	}
404
+	return nil
405
+}
406
+
407
+// GetCourseBySelect 获取精选课程
408
+func (s *CourseServ) GetSelectCourseList(orgid string) ([]course.CourseDetail, error) {
409
+	if orgid == "" {
410
+		return nil, utils.LogError("参数错误!")
411
+	}
412
+	list, err := s.dao.GetSelectCourseList(orgid)
413
+	if err != nil {
414
+		return nil, err
415
+	}
416
+	for i, v := range list {
417
+		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
418
+		if err != nil {
419
+			return nil, err
420
+		}
421
+		list[i].CaseInfo = caseinfo
422
+	}
423
+	return list, err
424
+}
425
+
426
+// GetCourseByLocation 根据位置获取课程
427
+func (s *CourseServ) GetCourseByLocation(orgid, locationid string) ([]course.CourseDetail, error) {
428
+	if orgid == "" || locationid == "" {
429
+		return nil, utils.LogError("参数错误!")
430
+	}
431
+	list, err := s.dao.GetCourseByLocation(orgid, locationid)
432
+	if err != nil {
433
+		return nil, err
434
+	}
435
+	for i, v := range list {
436
+		caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
437
+		if err != nil {
438
+			return nil, err
439
+		}
440
+		list[i].CaseInfo = caseinfo
441
+	}
442
+	return list, err
443
+}
444
+
445
+
446
+

+ 177
- 0
service/marketing/marketing.go ファイルの表示

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

+ 46
- 0
service/marketing/work.go ファイルの表示

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