Commit 8a882f01f6c1402b11033de14239d3089714d0cb
1 parent
c1e54074
Exists in
v1.2
and in
2 other branches
1.0
Showing
33 changed files
with
1024 additions
and
378 deletions
Show diff stats
@@ -0,0 +1,6 @@ | @@ -0,0 +1,6 @@ | ||
1 | +<component name="InspectionProjectProfileManager"> | ||
2 | + <profile version="1.0"> | ||
3 | + <option name="myName" value="Project Default" /> | ||
4 | + <inspection_tool class="JSHint" enabled="true" level="ERROR" enabled_by_default="true" /> | ||
5 | + </profile> | ||
6 | +</component> | ||
0 | \ No newline at end of file | 7 | \ No newline at end of file |
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project version="4"> | ||
3 | + <component name="JSHintConfiguration" version="2.10.2" use-config-file="true" use-custom-config-file="true" custom-config-file-path="$PROJECT_DIR$/Console/html/bootstrap/grunt/.jshintrc"> | ||
4 | + <option bitwise="true" /> | ||
5 | + <option browser="true" /> | ||
6 | + <option curly="true" /> | ||
7 | + <option eqeqeq="true" /> | ||
8 | + <option forin="true" /> | ||
9 | + <option maxerr="50" /> | ||
10 | + <option noarg="true" /> | ||
11 | + <option noempty="true" /> | ||
12 | + <option nonew="true" /> | ||
13 | + <option strict="true" /> | ||
14 | + <option undef="true" /> | ||
15 | + </component> | ||
16 | +</project> | ||
0 | \ No newline at end of file | 17 | \ No newline at end of file |
@@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<module type="WEB_MODULE" version="4"> | ||
3 | + <component name="NewModuleRootManager"> | ||
4 | + <content url="file://$MODULE_DIR$" /> | ||
5 | + <orderEntry type="inheritedJdk" /> | ||
6 | + <orderEntry type="sourceFolder" forTests="false" /> | ||
7 | + </component> | ||
8 | +</module> | ||
0 | \ No newline at end of file | 9 | \ No newline at end of file |
@@ -0,0 +1,8 @@ | @@ -0,0 +1,8 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project version="4"> | ||
3 | + <component name="ProjectModuleManager"> | ||
4 | + <modules> | ||
5 | + <module fileurl="file://$PROJECT_DIR$/.idea/letu.iml" filepath="$PROJECT_DIR$/.idea/letu.iml" /> | ||
6 | + </modules> | ||
7 | + </component> | ||
8 | +</project> | ||
0 | \ No newline at end of file | 9 | \ No newline at end of file |
@@ -0,0 +1,128 @@ | @@ -0,0 +1,128 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<project version="4"> | ||
3 | + <component name="ChangeListManager"> | ||
4 | + <list default="true" id="4fc60b58-eb6b-4763-99c5-b2201813bdc2" name="Default Changelist" comment=""> | ||
5 | + <change beforePath="$PROJECT_DIR$/API/Complaint.go" beforeDir="false" afterPath="$PROJECT_DIR$/API/Complaint.go" afterDir="false" /> | ||
6 | + <change beforePath="$PROJECT_DIR$/API/DealyMessage.go" beforeDir="false" afterPath="$PROJECT_DIR$/API/DealyMessage.go" afterDir="false" /> | ||
7 | + <change beforePath="$PROJECT_DIR$/API/Investigation.go" beforeDir="false" afterPath="$PROJECT_DIR$/API/Investigation.go" afterDir="false" /> | ||
8 | + <change beforePath="$PROJECT_DIR$/API/UserLog.go" beforeDir="false" afterPath="$PROJECT_DIR$/API/UserLog.go" afterDir="false" /> | ||
9 | + <change beforePath="$PROJECT_DIR$/Bin/Monitor.go" beforeDir="false" afterPath="$PROJECT_DIR$/Bin/Monitor.go" afterDir="false" /> | ||
10 | + <change beforePath="$PROJECT_DIR$/Config/config.go" beforeDir="false" afterPath="$PROJECT_DIR$/Config/config.go" afterDir="false" /> | ||
11 | + <change beforePath="$PROJECT_DIR$/Config/config.json" beforeDir="false" afterPath="$PROJECT_DIR$/Config/config.json" afterDir="false" /> | ||
12 | + <change beforePath="$PROJECT_DIR$/Lib/DelayMessage/delaymessage.go" beforeDir="false" afterPath="$PROJECT_DIR$/Lib/DelayMessage/delaymessage.go" afterDir="false" /> | ||
13 | + <change beforePath="$PROJECT_DIR$/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/main.go" afterDir="false" /> | ||
14 | + <change beforePath="$PROJECT_DIR$/main2.go" beforeDir="false" /> | ||
15 | + </list> | ||
16 | + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> | ||
17 | + <option name="SHOW_DIALOG" value="false" /> | ||
18 | + <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||
19 | + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | ||
20 | + <option name="LAST_RESOLUTION" value="IGNORE" /> | ||
21 | + </component> | ||
22 | + <component name="FileEditorManager"> | ||
23 | + <leaf /> | ||
24 | + </component> | ||
25 | + <component name="GOROOT" path="/usr/local/go" /> | ||
26 | + <component name="Git.Settings"> | ||
27 | + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> | ||
28 | + </component> | ||
29 | + <component name="ProjectConfigurationFiles"> | ||
30 | + <option name="files"> | ||
31 | + <list> | ||
32 | + <option value="$PROJECT_DIR$/.idea/letu.iml" /> | ||
33 | + <option value="$PROJECT_DIR$/.idea/misc.xml" /> | ||
34 | + <option value="$PROJECT_DIR$/.idea/modules.xml" /> | ||
35 | + <option value="$PROJECT_DIR$/.idea/vcs.xml" /> | ||
36 | + <option value="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" /> | ||
37 | + <option value="$PROJECT_DIR$/.idea/jsLinters/jshint.xml" /> | ||
38 | + </list> | ||
39 | + </option> | ||
40 | + </component> | ||
41 | + <component name="ProjectFrameBounds"> | ||
42 | + <option name="x" value="315" /> | ||
43 | + <option name="y" value="73" /> | ||
44 | + <option name="width" value="1454" /> | ||
45 | + <option name="height" value="1010" /> | ||
46 | + </component> | ||
47 | + <component name="ProjectView"> | ||
48 | + <navigator proportions="" version="1"> | ||
49 | + <foldersAlwaysOnTop value="true" /> | ||
50 | + </navigator> | ||
51 | + <panes> | ||
52 | + <pane id="ProjectPane"> | ||
53 | + <subPane> | ||
54 | + <expand> | ||
55 | + <path> | ||
56 | + <item name="letu" type="b2602c69:ProjectViewProjectNode" /> | ||
57 | + <item name="letu" type="462c0819:PsiDirectoryNode" /> | ||
58 | + </path> | ||
59 | + <path> | ||
60 | + <item name="letu" type="b2602c69:ProjectViewProjectNode" /> | ||
61 | + <item name="letu" type="462c0819:PsiDirectoryNode" /> | ||
62 | + <item name="DB" type="462c0819:PsiDirectoryNode" /> | ||
63 | + </path> | ||
64 | + </expand> | ||
65 | + <select /> | ||
66 | + </subPane> | ||
67 | + </pane> | ||
68 | + <pane id="Scope" /> | ||
69 | + </panes> | ||
70 | + </component> | ||
71 | + <component name="PropertiesComponent"> | ||
72 | + <property name="WebServerToolWindowFactoryState" value="false" /> | ||
73 | + <property name="go.gopath.indexing.explicitly.defined" value="true" /> | ||
74 | + <property name="go.import.settings.migrated" value="true" /> | ||
75 | + <property name="go.sdk.automatically.set" value="true" /> | ||
76 | + <property name="last_opened_file_path" value="$PROJECT_DIR$" /> | ||
77 | + <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> | ||
78 | + <property name="nodejs_npm_path_reset_for_default_project" value="true" /> | ||
79 | + </component> | ||
80 | + <component name="RunDashboard"> | ||
81 | + <option name="ruleStates"> | ||
82 | + <list> | ||
83 | + <RuleState> | ||
84 | + <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> | ||
85 | + </RuleState> | ||
86 | + <RuleState> | ||
87 | + <option name="name" value="StatusDashboardGroupingRule" /> | ||
88 | + </RuleState> | ||
89 | + </list> | ||
90 | + </option> | ||
91 | + </component> | ||
92 | + <component name="ToolWindowManager"> | ||
93 | + <frame x="315" y="73" width="1454" height="1010" extended-state="0" /> | ||
94 | + <layout> | ||
95 | + <window_info id="Favorites" side_tool="true" /> | ||
96 | + <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.25" /> | ||
97 | + <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> | ||
98 | + <window_info anchor="bottom" id="Docker" show_stripe_button="false" /> | ||
99 | + <window_info anchor="bottom" id="Database Changes" /> | ||
100 | + <window_info anchor="bottom" id="Version Control" /> | ||
101 | + <window_info anchor="bottom" id="Terminal" /> | ||
102 | + <window_info anchor="bottom" id="Event Log" side_tool="true" /> | ||
103 | + <window_info anchor="bottom" id="Message" order="0" /> | ||
104 | + <window_info anchor="bottom" id="Find" order="1" /> | ||
105 | + <window_info anchor="bottom" id="Run" order="2" /> | ||
106 | + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> | ||
107 | + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> | ||
108 | + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> | ||
109 | + <window_info anchor="bottom" id="TODO" order="6" /> | ||
110 | + <window_info anchor="right" id="Database" /> | ||
111 | + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> | ||
112 | + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> | ||
113 | + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> | ||
114 | + </layout> | ||
115 | + </component> | ||
116 | + <component name="TypeScriptGeneratedFilesManager"> | ||
117 | + <option name="version" value="1" /> | ||
118 | + </component> | ||
119 | + <component name="editorHistoryManager"> | ||
120 | + <entry file="file://$PROJECT_DIR$/DB/db.go"> | ||
121 | + <provider selected="true" editor-type-id="text-editor"> | ||
122 | + <state relative-caret-position="270"> | ||
123 | + <caret line="22" column="41" lean-forward="true" selection-start-line="22" selection-start-column="41" selection-end-line="22" selection-end-column="41" /> | ||
124 | + </state> | ||
125 | + </provider> | ||
126 | + </entry> | ||
127 | + </component> | ||
128 | +</project> | ||
0 | \ No newline at end of file | 129 | \ No newline at end of file |
API/Complaint.go
@@ -59,7 +59,6 @@ func CreateComplaint(c *gin.Context) { | @@ -59,7 +59,6 @@ func CreateComplaint(c *gin.Context) { | ||
59 | "验证码不正确", | 59 | "验证码不正确", |
60 | }) | 60 | }) |
61 | return | 61 | return |
62 | - | ||
63 | } | 62 | } |
64 | 63 | ||
65 | var images []string | 64 | var images []string |
@@ -74,7 +73,7 @@ func CreateComplaint(c *gin.Context) { | @@ -74,7 +73,7 @@ func CreateComplaint(c *gin.Context) { | ||
74 | c.PostForm("Sex"), | 73 | c.PostForm("Sex"), |
75 | c.PostForm("Content"), | 74 | c.PostForm("Content"), |
76 | images, | 75 | images, |
77 | - "", | 76 | + "未处理", |
78 | time.Now().Unix(), | 77 | time.Now().Unix(), |
79 | }) | 78 | }) |
80 | 79 | ||
@@ -124,7 +123,7 @@ func AllComplaint(c *gin.Context) { | @@ -124,7 +123,7 @@ func AllComplaint(c *gin.Context) { | ||
124 | 0, | 123 | 0, |
125 | total, | 124 | total, |
126 | currPage, | 125 | currPage, |
127 | - int(math.Ceil(float64(total) / float64(limit))), | 126 | + int64(math.Ceil(float64(total) / float64(limit))), |
128 | limit, | 127 | limit, |
129 | aComplaint, | 128 | aComplaint, |
130 | }) | 129 | }) |
API/DealyMessage.go
@@ -2,11 +2,13 @@ package Api | @@ -2,11 +2,13 @@ package Api | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "github.com/aarongao/tools" | 4 | "github.com/aarongao/tools" |
5 | + "github.com/aliyun/alibaba-cloud-sdk-go/services/push" | ||
5 | "github.com/gin-gonic/gin" | 6 | "github.com/gin-gonic/gin" |
6 | "go.mongodb.org/mongo-driver/bson" | 7 | "go.mongodb.org/mongo-driver/bson" |
7 | "go.mongodb.org/mongo-driver/bson/primitive" | 8 | "go.mongodb.org/mongo-driver/bson/primitive" |
9 | + "letu/Config" | ||
10 | + "letu/DB" | ||
8 | "letu/Lib/DelayMessage" | 11 | "letu/Lib/DelayMessage" |
9 | - "letu/Lib/Token" | ||
10 | ) | 12 | ) |
11 | 13 | ||
12 | // @Title 查询用户的定时提醒 | 14 | // @Title 查询用户的定时提醒 |
@@ -15,26 +17,19 @@ import ( | @@ -15,26 +17,19 @@ import ( | ||
15 | // @Produce json | 17 | // @Produce json |
16 | // @Param UserId 5dfb03070a9ac17ac7a82054 string true "用户id" | 18 | // @Param UserId 5dfb03070a9ac17ac7a82054 string true "用户id" |
17 | // @Param Token wgergejfwe string true "用户token" | 19 | // @Param Token wgergejfwe string true "用户token" |
18 | -// @Success 200 {object} tools.ResponseSeccess "DelayTime=执行时间;Type=类型(0请求url地址1发送app通知);Fail失败次数;Title=通知标题;Content=通知内容;UDID=设备id" | 20 | +// @Success 200 {object} tools.ResponseSeccess "DelayTime=执行时间;Type=类型(0请求url地址1发送app通知);Fail失败次数;Title=通知标题;Content=通知内容;DeviceToken=设备id" |
19 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 21 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
20 | // @Router /DealyMessage/Info? [get] | 22 | // @Router /DealyMessage/Info? [get] |
21 | func DealyMessageInfo(c *gin.Context) { | 23 | func DealyMessageInfo(c *gin.Context) { |
22 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 24 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
23 | c.Header("Access-Control-Allow-Credentials", "true") | 25 | c.Header("Access-Control-Allow-Credentials", "true") |
24 | 26 | ||
25 | - _, err := primitive.ObjectIDFromHex(c.Query("UserId")) | ||
26 | - if c.Query("Token") == "" || err != nil { | ||
27 | - c.JSON(200, tools.ResponseError{ | ||
28 | - 1, | ||
29 | - "Token或者用户id不正确", | ||
30 | - }) | ||
31 | - return | ||
32 | - } | ||
33 | - | ||
34 | - if Token.GetToken(c.Query("UserId")) != c.Query("Token") { | 27 | + _user, _ := c.Get("UserInfo") |
28 | + user := _user.(*DB.SMember) | ||
29 | + if c.Query("UserId") != user.Id.Hex() { | ||
35 | c.JSON(200, tools.ResponseError{ | 30 | c.JSON(200, tools.ResponseError{ |
36 | 401, | 31 | 401, |
37 | - "token过期", | 32 | + "没有权限", |
38 | }) | 33 | }) |
39 | return | 34 | return |
40 | } | 35 | } |
@@ -46,7 +41,7 @@ func DealyMessageInfo(c *gin.Context) { | @@ -46,7 +41,7 @@ func DealyMessageInfo(c *gin.Context) { | ||
46 | for cur.Next(tools.GetContext()) { | 41 | for cur.Next(tools.GetContext()) { |
47 | var e DelayMessage.Message | 42 | var e DelayMessage.Message |
48 | cur.Decode(&e) | 43 | cur.Decode(&e) |
49 | - aDelayMessage = append(aDelayMessage,e) | 44 | + aDelayMessage = append(aDelayMessage, e) |
50 | } | 45 | } |
51 | } | 46 | } |
52 | 47 | ||
@@ -65,7 +60,7 @@ func DealyMessageInfo(c *gin.Context) { | @@ -65,7 +60,7 @@ func DealyMessageInfo(c *gin.Context) { | ||
65 | // @Produce json | 60 | // @Produce json |
66 | // @Param UserId 5dfb03070a9ac17ac7a82054 string true "用户id" | 61 | // @Param UserId 5dfb03070a9ac17ac7a82054 string true "用户id" |
67 | // @Param Token wgergejfwe string true "用户token" | 62 | // @Param Token wgergejfwe string true "用户token" |
68 | -// @Param UDID 5dfb03070a9ac17ac7a82054 string true "设备id" | 63 | +// @Param DeviceToken 5dfb03070a9ac17ac7a82054 string true "设备id" |
69 | // @Param Title 表演时间提醒 string true "标题" | 64 | // @Param Title 表演时间提醒 string true "标题" |
70 | // @Param Content 5分钟后有表演 string true "内容" | 65 | // @Param Content 5分钟后有表演 string true "内容" |
71 | // @Param DelayTime 1579066863 string true "到达这个时间戳就执行" | 66 | // @Param DelayTime 1579066863 string true "到达这个时间戳就执行" |
@@ -76,24 +71,27 @@ func CreateDealyMessage(c *gin.Context) { | @@ -76,24 +71,27 @@ func CreateDealyMessage(c *gin.Context) { | ||
76 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 71 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
77 | c.Header("Access-Control-Allow-Credentials", "true") | 72 | c.Header("Access-Control-Allow-Credentials", "true") |
78 | 73 | ||
79 | - _,err := primitive.ObjectIDFromHex(c.PostForm("UserId")) | ||
80 | - if c.PostForm("Token") == "" || err != nil { | 74 | + |
75 | + _user, _ := c.Get("UserInfo") | ||
76 | + userToken := _user.(*DB.SMember) | ||
77 | + if c.PostForm("UserId") != userToken.Id.Hex(){ | ||
81 | c.JSON(200, tools.ResponseError{ | 78 | c.JSON(200, tools.ResponseError{ |
82 | - 1, | ||
83 | - "Token或者用户id不正确", | 79 | + 401, |
80 | + "没有权限", | ||
84 | }) | 81 | }) |
85 | return | 82 | return |
86 | } | 83 | } |
87 | 84 | ||
88 | - if Token.GetToken(c.PostForm("UserId")) != c.PostForm("Token") { | 85 | + _, err := primitive.ObjectIDFromHex(c.PostForm("UserId")) |
86 | + if err != nil { | ||
89 | c.JSON(200, tools.ResponseError{ | 87 | c.JSON(200, tools.ResponseError{ |
90 | - 401, | ||
91 | - "token过期", | 88 | + 1, |
89 | + "id不正确", | ||
92 | }) | 90 | }) |
93 | return | 91 | return |
94 | } | 92 | } |
95 | 93 | ||
96 | - err = DelayMessage.GlobalDM.AddTaskForAppMessage(c.PostForm("DelayTime"), c.PostForm("UDID"), c.PostForm("Title"), c.PostForm("Content"), c.PostForm("UserId")) | 94 | + err = DelayMessage.GlobalDM.AddTaskForAppMessage(c.PostForm("DelayTime"), c.PostForm("DeviceToken"), c.PostForm("Title"), c.PostForm("Content"), c.PostForm("UserId")) |
97 | 95 | ||
98 | if err == nil { | 96 | if err == nil { |
99 | 97 | ||
@@ -125,20 +123,21 @@ func RemoveDealyMessage(c *gin.Context) { | @@ -125,20 +123,21 @@ func RemoveDealyMessage(c *gin.Context) { | ||
125 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 123 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
126 | c.Header("Access-Control-Allow-Credentials", "true") | 124 | c.Header("Access-Control-Allow-Credentials", "true") |
127 | 125 | ||
128 | - | ||
129 | - _,err := primitive.ObjectIDFromHex(c.PostForm("UserId")) | ||
130 | - if c.PostForm("Token") == "" || err != nil { | 126 | + _user, _ := c.Get("UserInfo") |
127 | + userToken := _user.(*DB.SMember) | ||
128 | + if c.PostForm("UserId") != userToken.Id.Hex(){ | ||
131 | c.JSON(200, tools.ResponseError{ | 129 | c.JSON(200, tools.ResponseError{ |
132 | - 1, | ||
133 | - "Token或者用户id不正确", | 130 | + 401, |
131 | + "没有权限", | ||
134 | }) | 132 | }) |
135 | return | 133 | return |
136 | } | 134 | } |
137 | 135 | ||
138 | - if Token.GetToken(c.PostForm("UserId")) != c.PostForm("Token") { | 136 | + _, err := primitive.ObjectIDFromHex(c.PostForm("UserId")) |
137 | + if err != nil { | ||
139 | c.JSON(200, tools.ResponseError{ | 138 | c.JSON(200, tools.ResponseError{ |
140 | - 401, | ||
141 | - "token过期", | 139 | + 1, |
140 | + "用户id不正确", | ||
142 | }) | 141 | }) |
143 | return | 142 | return |
144 | } | 143 | } |
@@ -151,3 +150,34 @@ func RemoveDealyMessage(c *gin.Context) { | @@ -151,3 +150,34 @@ func RemoveDealyMessage(c *gin.Context) { | ||
151 | }) | 150 | }) |
152 | 151 | ||
153 | } | 152 | } |
153 | + | ||
154 | + | ||
155 | +func PushNoticeToiOS(c *gin.Context) { | ||
156 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | ||
157 | + c.Header("Access-Control-Allow-Credentials", "true") | ||
158 | + | ||
159 | + // 推送app消息 | ||
160 | + client, err := push.NewClientWithAccessKey("cn-hangzhou", "LTAI4FdQeNMQXRU6u5J3EFQc", "PwvyF5rRNBWLDya41WrCpvENevYZGi") | ||
161 | + | ||
162 | + request := push.CreatePushNoticeToiOSRequest() | ||
163 | + request.ApnsEnv = Config.Info.Env | ||
164 | + request.AppKey = "28332889" | ||
165 | + request.Scheme = "https" | ||
166 | + request.Target = "DEVICE" | ||
167 | + request.TargetValue = "30076ed6fdb740e49d882433931bc34a" | ||
168 | + request.Title = c.Query("title") | ||
169 | + request.Body = c.Query("body") | ||
170 | + | ||
171 | + response, err := client.PushNoticeToiOS(request) | ||
172 | + if err != nil { | ||
173 | + c.JSON(200, tools.ResponseError{ | ||
174 | + 1, | ||
175 | + err.Error(), | ||
176 | + }) | ||
177 | + return | ||
178 | + } | ||
179 | + c.JSON(200, tools.ResponseSeccess{ | ||
180 | + 0, | ||
181 | + response, | ||
182 | + }) | ||
183 | +} | ||
154 | \ No newline at end of file | 184 | \ No newline at end of file |
API/Icon.go
@@ -7,6 +7,7 @@ import ( | @@ -7,6 +7,7 @@ import ( | ||
7 | "go.mongodb.org/mongo-driver/bson/primitive" | 7 | "go.mongodb.org/mongo-driver/bson/primitive" |
8 | "go.mongodb.org/mongo-driver/mongo/options" | 8 | "go.mongodb.org/mongo-driver/mongo/options" |
9 | "letu/DB" | 9 | "letu/DB" |
10 | + "letu/Lib/Auth" | ||
10 | ) | 11 | ) |
11 | 12 | ||
12 | // @Title 返回图标基础信息 | 13 | // @Title 返回图标基础信息 |
@@ -45,6 +46,8 @@ func IconInfo(c *gin.Context) { | @@ -45,6 +46,8 @@ func IconInfo(c *gin.Context) { | ||
45 | // @Accept json | 46 | // @Accept json |
46 | // @Produce json | 47 | // @Produce json |
47 | // @Param id 5dfb03070a9ac17ac7a82054 string true "图标id" | 48 | // @Param id 5dfb03070a9ac17ac7a82054 string true "图标id" |
49 | +// @Param ScenicId 5e0d504e24e03431008b4567 string true "景区id" | ||
50 | +// @Param Token wgergejfwe string true "用户token" | ||
48 | // @Success 200 {object} tools.ResponseSeccess "Name名称:Picture图片地址:id图标id:ScenicId景区id" | 51 | // @Success 200 {object} tools.ResponseSeccess "Name名称:Picture图片地址:id图标id:ScenicId景区id" |
49 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 52 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
50 | // @Router /Icon/Update? [post] | 53 | // @Router /Icon/Update? [post] |
@@ -52,11 +55,13 @@ func UpdateIcon(c *gin.Context) { | @@ -52,11 +55,13 @@ func UpdateIcon(c *gin.Context) { | ||
52 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 55 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
53 | c.Header("Access-Control-Allow-Credentials", "true") | 56 | c.Header("Access-Control-Allow-Credentials", "true") |
54 | 57 | ||
55 | - ScenicId := c.PostForm("ScenicId") | ||
56 | - if ScenicId == "" || ScenicId == "undefined" { | 58 | + _user, _ := c.Get("UserInfo") |
59 | + user := _user.(*DB.SMember) | ||
60 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
61 | + if err != nil { | ||
57 | c.JSON(200, tools.ResponseError{ | 62 | c.JSON(200, tools.ResponseError{ |
58 | - 1, | ||
59 | - "缺少ScenicId(景区id)", | 63 | + 401, |
64 | + "没有权限", | ||
60 | }) | 65 | }) |
61 | return | 66 | return |
62 | } | 67 | } |
@@ -74,7 +79,7 @@ func UpdateIcon(c *gin.Context) { | @@ -74,7 +79,7 @@ func UpdateIcon(c *gin.Context) { | ||
74 | bson.M{"$set": bson.M{ | 79 | bson.M{"$set": bson.M{ |
75 | "Name": c.PostForm("Name"), | 80 | "Name": c.PostForm("Name"), |
76 | "Picture": c.PostForm("Picture"), | 81 | "Picture": c.PostForm("Picture"), |
77 | - "ScenicId": ScenicId, | 82 | + "ScenicId": c.PostForm("ScenicId"), |
78 | }}, &options.FindOneAndUpdateOptions{ | 83 | }}, &options.FindOneAndUpdateOptions{ |
79 | Upsert: &upsert, | 84 | Upsert: &upsert, |
80 | }, | 85 | }, |
@@ -99,13 +104,9 @@ func AllIcons(c *gin.Context) { | @@ -99,13 +104,9 @@ func AllIcons(c *gin.Context) { | ||
99 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 104 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
100 | c.Header("Access-Control-Allow-Credentials", "true") | 105 | c.Header("Access-Control-Allow-Credentials", "true") |
101 | 106 | ||
102 | - ScenicId := c.Query("ScenicId") | ||
103 | - if ScenicId == "" || ScenicId == "undefined" { | ||
104 | - c.JSON(200, tools.ResponseError{ | ||
105 | - 1, | ||
106 | - "缺少ScenicId(景区id)", | ||
107 | - }) | ||
108 | - return | 107 | + var ScenicId string |
108 | + if ScenicId = c.Query("ScenicId"); ScenicId == "" { | ||
109 | + ScenicId = "5e0d504e24e03431008b4567" // 乐岛 | ||
109 | } | 110 | } |
110 | 111 | ||
111 | var SIcons = []DB.SIcons{} | 112 | var SIcons = []DB.SIcons{} |
@@ -115,11 +116,10 @@ func AllIcons(c *gin.Context) { | @@ -115,11 +116,10 @@ func AllIcons(c *gin.Context) { | ||
115 | for cur.Next(tools.GetContext()) { | 116 | for cur.Next(tools.GetContext()) { |
116 | var e DB.SIcons | 117 | var e DB.SIcons |
117 | cur.Decode(&e) | 118 | cur.Decode(&e) |
118 | - SIcons = append(SIcons,e) | 119 | + SIcons = append(SIcons, e) |
119 | } | 120 | } |
120 | } | 121 | } |
121 | 122 | ||
122 | - | ||
123 | c.JSON(200, tools.ResponseSeccess{ | 123 | c.JSON(200, tools.ResponseSeccess{ |
124 | 0, | 124 | 0, |
125 | SIcons, | 125 | SIcons, |
API/Investigation.go
@@ -80,7 +80,7 @@ func AllInvestigation(c *gin.Context) { | @@ -80,7 +80,7 @@ func AllInvestigation(c *gin.Context) { | ||
80 | 0, | 80 | 0, |
81 | total, | 81 | total, |
82 | currPage, | 82 | currPage, |
83 | - int(math.Ceil(float64(total) / float64(limit))), | 83 | + int64(math.Ceil(float64(total) / float64(limit))), |
84 | limit, | 84 | limit, |
85 | aInvestigation, | 85 | aInvestigation, |
86 | }) | 86 | }) |
API/Item.go
@@ -8,6 +8,7 @@ import ( | @@ -8,6 +8,7 @@ import ( | ||
8 | "go.mongodb.org/mongo-driver/bson/primitive" | 8 | "go.mongodb.org/mongo-driver/bson/primitive" |
9 | "go.mongodb.org/mongo-driver/mongo/options" | 9 | "go.mongodb.org/mongo-driver/mongo/options" |
10 | "letu/DB" | 10 | "letu/DB" |
11 | + "letu/Lib/Auth" | ||
11 | "strconv" | 12 | "strconv" |
12 | "time" | 13 | "time" |
13 | ) | 14 | ) |
@@ -33,8 +34,8 @@ func ItemInfo(c *gin.Context) { | @@ -33,8 +34,8 @@ func ItemInfo(c *gin.Context) { | ||
33 | } | 34 | } |
34 | 35 | ||
35 | var SItem DB.SItem | 36 | var SItem DB.SItem |
36 | - objID,_ := primitive.ObjectIDFromHex(c.Query("id")) | ||
37 | - DB.CItem.FindOne(tools.GetContext(),bson.M{"_id": objID}).Decode(&SItem) | 37 | + objID, _ := primitive.ObjectIDFromHex(c.Query("id")) |
38 | + DB.CItem.FindOne(tools.GetContext(), bson.M{"_id": objID}).Decode(&SItem) | ||
38 | 39 | ||
39 | c.JSON(200, tools.ResponseSeccess{ | 40 | c.JSON(200, tools.ResponseSeccess{ |
40 | 0, | 41 | 0, |
@@ -47,6 +48,7 @@ func ItemInfo(c *gin.Context) { | @@ -47,6 +48,7 @@ func ItemInfo(c *gin.Context) { | ||
47 | // @Description 设备管理 - 查询所有游玩项目 | 48 | // @Description 设备管理 - 查询所有游玩项目 |
48 | // @Accept json | 49 | // @Accept json |
49 | // @Produce json | 50 | // @Produce json |
51 | +// @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | ||
50 | // @Success 200 {object} tools.ResponseSeccess "Tags所属标签,标签有分类;LimitHeight限高;PlayDuration游玩时长;SceneTime场次时间;Picture照片;Voice音频;AverageConsumption平均消费;Menu菜单, OpenHours开放时间: LocationDescription位置描述; Reminder温馨提示; State运行状态0=正常1=停运" | 52 | // @Success 200 {object} tools.ResponseSeccess "Tags所属标签,标签有分类;LimitHeight限高;PlayDuration游玩时长;SceneTime场次时间;Picture照片;Voice音频;AverageConsumption平均消费;Menu菜单, OpenHours开放时间: LocationDescription位置描述; Reminder温馨提示; State运行状态0=正常1=停运" |
51 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 53 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
52 | // @Router /AllItems? [get] | 54 | // @Router /AllItems? [get] |
@@ -54,14 +56,19 @@ func AllItems(c *gin.Context) { | @@ -54,14 +56,19 @@ func AllItems(c *gin.Context) { | ||
54 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 56 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
55 | c.Header("Access-Control-Allow-Credentials", "true") | 57 | c.Header("Access-Control-Allow-Credentials", "true") |
56 | 58 | ||
59 | + var ScenicId string | ||
60 | + if ScenicId = c.Query("ScenicId");ScenicId == ""{ | ||
61 | + ScenicId = "5e0d504e24e03431008b4567" // 乐岛 | ||
62 | + } | ||
63 | + | ||
57 | var aItems = []DB.SItem{} | 64 | var aItems = []DB.SItem{} |
58 | - cur, err := DB.CItem.Find(tools.GetContext(), bson.M{}) | 65 | + cur, err := DB.CItem.Find(tools.GetContext(), bson.M{"ScenicId": ScenicId}) |
59 | defer cur.Close(tools.GetContext()) | 66 | defer cur.Close(tools.GetContext()) |
60 | if err == nil { | 67 | if err == nil { |
61 | for cur.Next(tools.GetContext()) { | 68 | for cur.Next(tools.GetContext()) { |
62 | var e DB.SItem | 69 | var e DB.SItem |
63 | cur.Decode(&e) | 70 | cur.Decode(&e) |
64 | - aItems = append(aItems,e) | 71 | + aItems = append(aItems, e) |
65 | } | 72 | } |
66 | } | 73 | } |
67 | 74 | ||
@@ -73,6 +80,9 @@ func AllItems(c *gin.Context) { | @@ -73,6 +80,9 @@ func AllItems(c *gin.Context) { | ||
73 | // @Description 设备管理 - 更新设施 | 80 | // @Description 设备管理 - 更新设施 |
74 | // @Accept json | 81 | // @Accept json |
75 | // @Produce json | 82 | // @Produce json |
83 | +// @Param id 5dfb03070a9ac17ac7a82054 string true "设备id" | ||
84 | +// @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | ||
85 | +// @Param Token wgergejfwe string true "用户token" | ||
76 | // @Success 200 {object} tools.ResponseSeccess "Tags所属标签,标签有分类;LimitHeight限高;PlayDuration游玩时长;SceneTime场次时间;Picture照片;Voice音频;AverageConsumption平均消费;Menu菜单, OpenHours开放时间: LocationDescription位置描述; Reminder温馨提示; State运行状态0=正常1=停运" | 86 | // @Success 200 {object} tools.ResponseSeccess "Tags所属标签,标签有分类;LimitHeight限高;PlayDuration游玩时长;SceneTime场次时间;Picture照片;Voice音频;AverageConsumption平均消费;Menu菜单, OpenHours开放时间: LocationDescription位置描述; Reminder温馨提示; State运行状态0=正常1=停运" |
77 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 87 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
78 | // @Router /UpdateItem? [post] | 88 | // @Router /UpdateItem? [post] |
@@ -80,6 +90,17 @@ func UpdateItem(c *gin.Context) { | @@ -80,6 +90,17 @@ func UpdateItem(c *gin.Context) { | ||
80 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 90 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
81 | c.Header("Access-Control-Allow-Credentials", "true") | 91 | c.Header("Access-Control-Allow-Credentials", "true") |
82 | 92 | ||
93 | + _user, _ := c.Get("UserInfo") | ||
94 | + user := _user.(*DB.SMember) | ||
95 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
96 | + if err != nil { | ||
97 | + c.JSON(200, tools.ResponseError{ | ||
98 | + 401, | ||
99 | + "没有权限", | ||
100 | + }) | ||
101 | + return | ||
102 | + } | ||
103 | + | ||
83 | var Location DB.SLocation | 104 | var Location DB.SLocation |
84 | json.Unmarshal([]byte(c.PostForm("Location")), &Location) | 105 | json.Unmarshal([]byte(c.PostForm("Location")), &Location) |
85 | 106 | ||
@@ -93,7 +114,7 @@ func UpdateItem(c *gin.Context) { | @@ -93,7 +114,7 @@ func UpdateItem(c *gin.Context) { | ||
93 | if pid := c.PostForm("id"); pid == "null" { | 114 | if pid := c.PostForm("id"); pid == "null" { |
94 | id = primitive.NewObjectID() | 115 | id = primitive.NewObjectID() |
95 | } else { | 116 | } else { |
96 | - id,_ = primitive.ObjectIDFromHex(pid) | 117 | + id, _ = primitive.ObjectIDFromHex(pid) |
97 | } | 118 | } |
98 | 119 | ||
99 | poststate, _ := strconv.Atoi(c.PostForm("State")) | 120 | poststate, _ := strconv.Atoi(c.PostForm("State")) |
@@ -104,6 +125,7 @@ func UpdateItem(c *gin.Context) { | @@ -104,6 +125,7 @@ func UpdateItem(c *gin.Context) { | ||
104 | bson.M{"$set": bson.M{ | 125 | bson.M{"$set": bson.M{ |
105 | "Name": c.PostForm("Name"), | 126 | "Name": c.PostForm("Name"), |
106 | "SubName": c.PostForm("SubName"), | 127 | "SubName": c.PostForm("SubName"), |
128 | + "ScenicId": c.PostForm("ScenicId"), | ||
107 | "Location": Location, | 129 | "Location": Location, |
108 | "Icon": c.PostForm("Icon"), | 130 | "Icon": c.PostForm("Icon"), |
109 | "LimitHeight": c.PostForm("LimitHeight"), | 131 | "LimitHeight": c.PostForm("LimitHeight"), |
@@ -124,24 +146,21 @@ func UpdateItem(c *gin.Context) { | @@ -124,24 +146,21 @@ func UpdateItem(c *gin.Context) { | ||
124 | }, | 146 | }, |
125 | ) | 147 | ) |
126 | 148 | ||
127 | - | ||
128 | - | ||
129 | // 更新等待时间 | 149 | // 更新等待时间 |
130 | allteim := DB.Redis.Get("AllItemTime") | 150 | allteim := DB.Redis.Get("AllItemTime") |
131 | - jsond,_ := json.Marshal(allteim) | 151 | + jsond, _ := json.Marshal(allteim) |
132 | 152 | ||
133 | var ItemTime map[string]string | 153 | var ItemTime map[string]string |
134 | json.Unmarshal([]byte(jsond), &ItemTime) | 154 | json.Unmarshal([]byte(jsond), &ItemTime) |
135 | 155 | ||
136 | - if poststate == 1{ | 156 | + if poststate == 1 { |
137 | ItemTime[c.PostForm("id")] = "--" | 157 | ItemTime[c.PostForm("id")] = "--" |
138 | } | 158 | } |
139 | - if poststate == 0{ | 159 | + if poststate == 0 { |
140 | ItemTime[c.PostForm("id")] = "0" | 160 | ItemTime[c.PostForm("id")] = "0" |
141 | } | 161 | } |
142 | DB.Redis.Set("AllItemTime", ItemTime, time.Second*60*60*24*30) | 162 | DB.Redis.Set("AllItemTime", ItemTime, time.Second*60*60*24*30) |
143 | 163 | ||
144 | - | ||
145 | c.JSON(200, tools.ResponseSeccess{ | 164 | c.JSON(200, tools.ResponseSeccess{ |
146 | 0, | 165 | 0, |
147 | "ok", | 166 | "ok", |
@@ -158,6 +177,8 @@ type ItemTime struct { | @@ -158,6 +177,8 @@ type ItemTime struct { | ||
158 | // @Description 设备管理 - 更新等待时间 | 177 | // @Description 设备管理 - 更新等待时间 |
159 | // @Accept json | 178 | // @Accept json |
160 | // @Produce json | 179 | // @Produce json |
180 | +// @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | ||
181 | +// @Param Token wgergejfwe string true "用户token" | ||
161 | // @Param item [{"id":"5df864740a9ac17ac7a7feb8","time":"20"},{"id":"5df8660924e03417008b4567","time":"33"}] string true "设备列表" | 182 | // @Param item [{"id":"5df864740a9ac17ac7a7feb8","time":"20"},{"id":"5df8660924e03417008b4567","time":"33"}] string true "设备列表" |
162 | // @Success 200 {object} tools.ResponseSeccess "{errcode: 0, result: "ok"}" | 183 | // @Success 200 {object} tools.ResponseSeccess "{errcode: 0, result: "ok"}" |
163 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 184 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
@@ -166,6 +187,17 @@ func UpdateItemTime(c *gin.Context) { | @@ -166,6 +187,17 @@ func UpdateItemTime(c *gin.Context) { | ||
166 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 187 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
167 | c.Header("Access-Control-Allow-Credentials", "true") | 188 | c.Header("Access-Control-Allow-Credentials", "true") |
168 | 189 | ||
190 | + _user, _ := c.Get("UserInfo") | ||
191 | + user := _user.(*DB.SMember) | ||
192 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
193 | + if err != nil { | ||
194 | + c.JSON(200, tools.ResponseError{ | ||
195 | + 401, | ||
196 | + "没有权限", | ||
197 | + }) | ||
198 | + return | ||
199 | + } | ||
200 | + | ||
169 | var ItemTime []ItemTime | 201 | var ItemTime []ItemTime |
170 | json.Unmarshal([]byte(c.PostForm("items")), &ItemTime) | 202 | json.Unmarshal([]byte(c.PostForm("items")), &ItemTime) |
171 | 203 | ||
@@ -174,7 +206,7 @@ func UpdateItemTime(c *gin.Context) { | @@ -174,7 +206,7 @@ func UpdateItemTime(c *gin.Context) { | ||
174 | RedisData[v.Id] = v.Time | 206 | RedisData[v.Id] = v.Time |
175 | } | 207 | } |
176 | 208 | ||
177 | - DB.Redis.Set("AllItemTime", RedisData, time.Second*60*60*24*30) | 209 | + DB.Redis.Set("AllItemTime_"+c.PostForm("ScenicId"), RedisData, time.Second*60*60*24*30) |
178 | c.JSON(200, tools.ResponseSeccess{ | 210 | c.JSON(200, tools.ResponseSeccess{ |
179 | 0, | 211 | 0, |
180 | "ok", | 212 | "ok", |
@@ -185,6 +217,7 @@ func UpdateItemTime(c *gin.Context) { | @@ -185,6 +217,7 @@ func UpdateItemTime(c *gin.Context) { | ||
185 | // @Description 设备管理 - 获得所有设备的等待时间 | 217 | // @Description 设备管理 - 获得所有设备的等待时间 |
186 | // @Accept json | 218 | // @Accept json |
187 | // @Produce json | 219 | // @Produce json |
220 | +// @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | ||
188 | // @Success 200 {object} tools.ResponseSeccess "{5df864740a9ac17ac7a7feb8: '20',.....}" | 221 | // @Success 200 {object} tools.ResponseSeccess "{5df864740a9ac17ac7a7feb8: '20',.....}" |
189 | // @Failure 500 {object} tools.ResponseError "{}" | 222 | // @Failure 500 {object} tools.ResponseError "{}" |
190 | // @Router /AllItemTime? [get] | 223 | // @Router /AllItemTime? [get] |
@@ -192,25 +225,16 @@ func AllItemTime(c *gin.Context) { | @@ -192,25 +225,16 @@ func AllItemTime(c *gin.Context) { | ||
192 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 225 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
193 | c.Header("Access-Control-Allow-Credentials", "true") | 226 | c.Header("Access-Control-Allow-Credentials", "true") |
194 | 227 | ||
228 | + var ScenicId string | ||
229 | + if ScenicId = c.Query("ScenicId");ScenicId == ""{ | ||
230 | + ScenicId = "5e0d504e24e03431008b4567" // 乐岛 | ||
231 | + } | ||
195 | 232 | ||
196 | - //Device := DB.SDevice{ | ||
197 | - // c.Request.Header.Get("DeviceId"), | ||
198 | - // c.Request.Header.Get("Mac"), | ||
199 | - // c.Request.Header.Get("UDID"), | ||
200 | - // c.Request.Header.Get("SystemVersion"), | ||
201 | - // c.Request.Header.Get("SystemModel"), | ||
202 | - // c.Request.Header.Get("AppVersion"), | ||
203 | - // c.Request.Header.Get("AppVersion"), | ||
204 | - // c.Request.Header.Get("DeviceToken"), | ||
205 | - //} | ||
206 | - //spew.Dump(Device) | ||
207 | - | ||
208 | - | ||
209 | - allteim := DB.Redis.Get("AllItemTime") | 233 | + allteim := DB.Redis.Get("AllItemTime_" + ScenicId) |
210 | if allteim != nil { | 234 | if allteim != nil { |
211 | c.JSON(200, allteim) | 235 | c.JSON(200, allteim) |
212 | } else { | 236 | } else { |
213 | c.String(200, "{}") | 237 | c.String(200, "{}") |
214 | } | 238 | } |
215 | 239 | ||
216 | -} | ||
217 | \ No newline at end of file | 240 | \ No newline at end of file |
241 | +} |
API/Line.go
@@ -8,6 +8,7 @@ import ( | @@ -8,6 +8,7 @@ import ( | ||
8 | "go.mongodb.org/mongo-driver/bson/primitive" | 8 | "go.mongodb.org/mongo-driver/bson/primitive" |
9 | "go.mongodb.org/mongo-driver/mongo/options" | 9 | "go.mongodb.org/mongo-driver/mongo/options" |
10 | "letu/DB" | 10 | "letu/DB" |
11 | + "letu/Lib/Auth" | ||
11 | ) | 12 | ) |
12 | 13 | ||
13 | // @Title 查询线路信息 | 14 | // @Title 查询线路信息 |
@@ -52,14 +53,19 @@ func AllLine(c *gin.Context) { | @@ -52,14 +53,19 @@ func AllLine(c *gin.Context) { | ||
52 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 53 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
53 | c.Header("Access-Control-Allow-Credentials", "true") | 54 | c.Header("Access-Control-Allow-Credentials", "true") |
54 | 55 | ||
56 | + var ScenicId string | ||
57 | + if ScenicId = c.Query("ScenicId");ScenicId == ""{ | ||
58 | + ScenicId = "5e0d504e24e03431008b4567" // 乐岛 | ||
59 | + } | ||
60 | + | ||
55 | var aLine []DB.SLine | 61 | var aLine []DB.SLine |
56 | - cur, err := DB.CLine.Find(tools.GetContext(), bson.M{}) | 62 | + cur, err := DB.CLine.Find(tools.GetContext(), bson.M{"ScenicId": ScenicId}) |
57 | defer cur.Close(tools.GetContext()) | 63 | defer cur.Close(tools.GetContext()) |
58 | if err == nil { | 64 | if err == nil { |
59 | for cur.Next(tools.GetContext()) { | 65 | for cur.Next(tools.GetContext()) { |
60 | var e DB.SLine | 66 | var e DB.SLine |
61 | cur.Decode(&e) | 67 | cur.Decode(&e) |
62 | - aLine = append(aLine,e) | 68 | + aLine = append(aLine, e) |
63 | } | 69 | } |
64 | } | 70 | } |
65 | 71 | ||
@@ -71,13 +77,29 @@ func AllLine(c *gin.Context) { | @@ -71,13 +77,29 @@ func AllLine(c *gin.Context) { | ||
71 | // @Description 更新线路 | 77 | // @Description 更新线路 |
72 | // @Accept json | 78 | // @Accept json |
73 | // @Produce json | 79 | // @Produce json |
80 | +// @Param id 5dfb03070a9ac17ac7a82054 string true "线路id" | ||
81 | +// @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | ||
82 | +// @Param Token wgergejfwe string true "用户token" | ||
74 | // @Success 200 {object} tools.ResponseSeccess "" | 83 | // @Success 200 {object} tools.ResponseSeccess "" |
75 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 84 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
76 | // @Router /UpdateLine? [post] | 85 | // @Router /UpdateLine? [post] |
77 | func UpdateLine(c *gin.Context) { | 86 | func UpdateLine(c *gin.Context) { |
87 | + | ||
78 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 88 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
79 | c.Header("Access-Control-Allow-Credentials", "true") | 89 | c.Header("Access-Control-Allow-Credentials", "true") |
80 | 90 | ||
91 | + _user, _ := c.Get("UserInfo") | ||
92 | + user := _user.(*DB.SMember) | ||
93 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
94 | + if err != nil { | ||
95 | + c.JSON(200, tools.ResponseError{ | ||
96 | + 401, | ||
97 | + "没有权限", | ||
98 | + }) | ||
99 | + return | ||
100 | + } | ||
101 | + | ||
102 | + | ||
81 | var Location []DB.SLocation | 103 | var Location []DB.SLocation |
82 | json.Unmarshal([]byte(c.PostForm("Location")), &Location) | 104 | json.Unmarshal([]byte(c.PostForm("Location")), &Location) |
83 | 105 | ||
@@ -88,7 +110,7 @@ func UpdateLine(c *gin.Context) { | @@ -88,7 +110,7 @@ func UpdateLine(c *gin.Context) { | ||
88 | if pid := c.PostForm("id"); pid == "null" { | 110 | if pid := c.PostForm("id"); pid == "null" { |
89 | id = primitive.NewObjectID() | 111 | id = primitive.NewObjectID() |
90 | } else { | 112 | } else { |
91 | - id,_ = primitive.ObjectIDFromHex(pid) | 113 | + id, _ = primitive.ObjectIDFromHex(pid) |
92 | } | 114 | } |
93 | 115 | ||
94 | upsert := true | 116 | upsert := true |
@@ -0,0 +1,188 @@ | @@ -0,0 +1,188 @@ | ||
1 | +package Api | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "github.com/aarongao/tools" | ||
6 | + "github.com/gin-gonic/gin" | ||
7 | + "go.mongodb.org/mongo-driver/bson" | ||
8 | + "go.mongodb.org/mongo-driver/bson/primitive" | ||
9 | + "letu/DB" | ||
10 | + "letu/Lib/Auth" | ||
11 | + "letu/Lib/JWT" | ||
12 | + "time" | ||
13 | +) | ||
14 | + | ||
15 | +// @Title 登录 | ||
16 | +// @Description 操作员管理 - 操作员登录 | ||
17 | +// @Accept json | ||
18 | +// @Produce json | ||
19 | +// @Param Username aaron string true "用户名" | ||
20 | +// @Param Password 123 string true "密码" | ||
21 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Id":"5e09c64c1c09c6f0f7ca2fa9","Token":"640bf934e425aba5d3c90998b2641f2f0ca07261d334d9615d1cd4790b5f34e7"}} 调用其它需要登陆的接口时携带token,有过期时间" | ||
22 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | ||
23 | +// @Router /LoginOperator? [post] | ||
24 | +func LoginOperator(c *gin.Context) { | ||
25 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | ||
26 | + c.Header("Access-Control-Allow-Credentials", "true") | ||
27 | + | ||
28 | + selected := bson.M{} | ||
29 | + var User *DB.SMember | ||
30 | + if c.PostForm("Username") != "" && c.PostForm("Password") != "" { | ||
31 | + selected["Username"] = c.PostForm("Username") | ||
32 | + selected["Password"] = c.PostForm("Password") | ||
33 | + DB.CMember.FindOne(tools.GetContext(), selected).Decode(&User) | ||
34 | + | ||
35 | + if User == nil { | ||
36 | + c.JSON(200, tools.ResponseError{ | ||
37 | + 1, | ||
38 | + "用户不存在", | ||
39 | + }) | ||
40 | + return | ||
41 | + } | ||
42 | + | ||
43 | + } else { | ||
44 | + c.JSON(200, tools.ResponseError{ | ||
45 | + 1, | ||
46 | + "不能为空", | ||
47 | + }) | ||
48 | + return | ||
49 | + } | ||
50 | + | ||
51 | + // 生成token | ||
52 | + dd, _ := time.ParseDuration("8760h") | ||
53 | + User.Token, _ = JWT.CreateToken(User, time.Now().Add(dd).Unix()) | ||
54 | + c.JSON(200, tools.ResponseSeccess{ | ||
55 | + 0, | ||
56 | + User, | ||
57 | + }) | ||
58 | + | ||
59 | +} | ||
60 | + | ||
61 | +// @Title 操作员管理 | ||
62 | +// @Description 操作员管理 - 修改用户信息 | ||
63 | +// @Accept json | ||
64 | +// @Produce json | ||
65 | +// @Param id aaron string true "用户id"" | ||
66 | +// @Param ScenicId 5e0d504e24e03431008b4567 string true "景区id" | ||
67 | +// @Param Token wgergejfwe string true "用户token" | ||
68 | +// @Param Username aarongao string true "用户名" | ||
69 | +// @Param Remarks 18616619599 string true "备注" | ||
70 | +// @Param Password 12345 string true "密码" | ||
71 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" | ||
72 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | ||
73 | +// @Router /UpdateOperator? [post] | ||
74 | +func UpdateOperator(c *gin.Context) { | ||
75 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | ||
76 | + c.Header("Access-Control-Allow-Credentials", "true") | ||
77 | + | ||
78 | + _user, _ := c.Get("UserInfo") | ||
79 | + user := _user.(*DB.SMember) | ||
80 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
81 | + if err != nil { | ||
82 | + c.JSON(200, tools.ResponseError{ | ||
83 | + 401, | ||
84 | + "没有权限", | ||
85 | + }) | ||
86 | + return | ||
87 | + } | ||
88 | + | ||
89 | + var _auth []string | ||
90 | + json.Unmarshal([]byte(c.PostForm("Auth")), &_auth) | ||
91 | + | ||
92 | + objID, err := primitive.ObjectIDFromHex(c.PostForm("id")) | ||
93 | + if err == nil { | ||
94 | + | ||
95 | + _, err = DB.CMember.UpdateOne(tools.GetContext(), | ||
96 | + bson.M{"_id": objID}, | ||
97 | + bson.M{"$set": bson.M{ | ||
98 | + "Auth": _auth, | ||
99 | + "Username": c.PostForm("Username"), | ||
100 | + "Password": c.PostForm("Password"), | ||
101 | + "Remarks": c.PostForm("Remarks"), | ||
102 | + }}, | ||
103 | + ) | ||
104 | + } else { | ||
105 | + | ||
106 | + objectID := primitive.NewObjectID() | ||
107 | + User := &DB.SMember{ | ||
108 | + &objectID, | ||
109 | + "operator", | ||
110 | + c.PostForm("ScenicId"), | ||
111 | + c.PostForm("Username"), | ||
112 | + c.PostForm("Password"), | ||
113 | + "", | ||
114 | + "", | ||
115 | + "", | ||
116 | + "", | ||
117 | + "", | ||
118 | + "", | ||
119 | + &DB.SDevice{}, | ||
120 | + _auth, | ||
121 | + c.PostForm("Remarks"), | ||
122 | + } | ||
123 | + | ||
124 | + // 生成token | ||
125 | + var dd time.Duration | ||
126 | + dd, err = time.ParseDuration("20m") | ||
127 | + User.Token, _ = JWT.CreateToken(User, time.Now().Add(dd).Unix()) | ||
128 | + | ||
129 | + DB.CMember.InsertOne(tools.GetContext(), User) | ||
130 | + | ||
131 | + } | ||
132 | + | ||
133 | + if err == nil { | ||
134 | + c.JSON(200, tools.ResponseSeccess{ | ||
135 | + 0, | ||
136 | + "ok", | ||
137 | + }) | ||
138 | + } else { | ||
139 | + c.JSON(200, tools.ResponseError{ | ||
140 | + 1, | ||
141 | + err.Error(), | ||
142 | + }) | ||
143 | + } | ||
144 | + | ||
145 | +} | ||
146 | + | ||
147 | +// @Title 操作员管理 | ||
148 | +// @Description 操作员管理 - 所有操作员 | ||
149 | +// @Accept json | ||
150 | +// @Produce json | ||
151 | +// @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | ||
152 | +// @Param Token 5dfb03070a9ac17ac7a82054 string true "用户token" | ||
153 | +// @Success 200 {object} tools.ResponseSeccess "" | ||
154 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | ||
155 | +// @Router /AllOperator? [get] | ||
156 | +func AllOperator(c *gin.Context) { | ||
157 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | ||
158 | + c.Header("Access-Control-Allow-Credentials", "true") | ||
159 | + _user, _ := c.Get("UserInfo") | ||
160 | + user := _user.(*DB.SMember) | ||
161 | + err := Auth.CheckScenicAuth(c.Query("ScenicId"), user) | ||
162 | + if err != nil { | ||
163 | + c.JSON(200, tools.ResponseError{ | ||
164 | + 401, | ||
165 | + "没有权限", | ||
166 | + }) | ||
167 | + return | ||
168 | + } | ||
169 | + | ||
170 | + var aMember []*DB.SMember | ||
171 | + cur, err := DB.CMember.Find(tools.GetContext(), bson.M{"ScenicId": c.Query("ScenicId"), "UserType": "operator"}) | ||
172 | + defer cur.Close(tools.GetContext()) | ||
173 | + if err == nil { | ||
174 | + for cur.Next(tools.GetContext()) { | ||
175 | + var e *DB.SMember | ||
176 | + cur.Decode(&e) | ||
177 | + aMember = append(aMember, e) | ||
178 | + } | ||
179 | + } | ||
180 | + | ||
181 | + if aMember == nil { | ||
182 | + aMember = []*DB.SMember{} | ||
183 | + } | ||
184 | + c.JSON(200, tools.ResponseSeccess{ | ||
185 | + 0, | ||
186 | + aMember, | ||
187 | + }) | ||
188 | +} |
API/Scenic.go
@@ -8,6 +8,7 @@ import ( | @@ -8,6 +8,7 @@ import ( | ||
8 | "go.mongodb.org/mongo-driver/bson/primitive" | 8 | "go.mongodb.org/mongo-driver/bson/primitive" |
9 | "go.mongodb.org/mongo-driver/mongo/options" | 9 | "go.mongodb.org/mongo-driver/mongo/options" |
10 | "letu/DB" | 10 | "letu/DB" |
11 | + "letu/Lib/Auth" | ||
11 | ) | 12 | ) |
12 | 13 | ||
13 | // @Title 返回景区基础信息 | 14 | // @Title 返回景区基础信息 |
@@ -46,6 +47,7 @@ func ScenicInfo(c *gin.Context) { | @@ -46,6 +47,7 @@ func ScenicInfo(c *gin.Context) { | ||
46 | // @Accept json | 47 | // @Accept json |
47 | // @Produce json | 48 | // @Produce json |
48 | // @Param id 5dfb03070a9ac17ac7a82054 string true "景区id" | 49 | // @Param id 5dfb03070a9ac17ac7a82054 string true "景区id" |
50 | +// @Param Token wgergejfwe string true "用户token" | ||
49 | // @Success 200 {object} tools.ResponseSeccess "Name名称;Describe介绍;OpenHours营业时间;Picture最上面图片;ShopAdPicture商城列表页图片;ItemScenicPicture项目场次照片;ActivityPicture活动照片;VideoList视频(VideoPicture=首桢图片);InvestigationUrl问券调查的url;RangeLocation景区范围(多个坐标点)" | 51 | // @Success 200 {object} tools.ResponseSeccess "Name名称;Describe介绍;OpenHours营业时间;Picture最上面图片;ShopAdPicture商城列表页图片;ItemScenicPicture项目场次照片;ActivityPicture活动照片;VideoList视频(VideoPicture=首桢图片);InvestigationUrl问券调查的url;RangeLocation景区范围(多个坐标点)" |
50 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 52 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
51 | // @Router /UpdateScenic? [post] | 53 | // @Router /UpdateScenic? [post] |
@@ -53,6 +55,18 @@ func UpdateScenic(c *gin.Context) { | @@ -53,6 +55,18 @@ func UpdateScenic(c *gin.Context) { | ||
53 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 55 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
54 | c.Header("Access-Control-Allow-Credentials", "true") | 56 | c.Header("Access-Control-Allow-Credentials", "true") |
55 | 57 | ||
58 | + _user, _ := c.Get("UserInfo") | ||
59 | + user := _user.(*DB.SMember) | ||
60 | + err := Auth.CheckScenicAuth(c.PostForm("id"), user) | ||
61 | + if err != nil { | ||
62 | + c.JSON(200, tools.ResponseError{ | ||
63 | + 401, | ||
64 | + "没有权限", | ||
65 | + }) | ||
66 | + return | ||
67 | + } | ||
68 | + | ||
69 | + | ||
56 | var Location DB.SLocation | 70 | var Location DB.SLocation |
57 | json.Unmarshal([]byte(c.PostForm("Location")), &Location) | 71 | json.Unmarshal([]byte(c.PostForm("Location")), &Location) |
58 | 72 |
API/Shop.go
@@ -8,6 +8,7 @@ import ( | @@ -8,6 +8,7 @@ import ( | ||
8 | "go.mongodb.org/mongo-driver/bson/primitive" | 8 | "go.mongodb.org/mongo-driver/bson/primitive" |
9 | "go.mongodb.org/mongo-driver/mongo/options" | 9 | "go.mongodb.org/mongo-driver/mongo/options" |
10 | "letu/DB" | 10 | "letu/DB" |
11 | + "letu/Lib/Auth" | ||
11 | ) | 12 | ) |
12 | 13 | ||
13 | // @Title 查询商品信息 | 14 | // @Title 查询商品信息 |
@@ -45,6 +46,7 @@ func CommodityInfo(c *gin.Context) { | @@ -45,6 +46,7 @@ func CommodityInfo(c *gin.Context) { | ||
45 | // @Description 查询所有商品 | 46 | // @Description 查询所有商品 |
46 | // @Accept json | 47 | // @Accept json |
47 | // @Produce json | 48 | // @Produce json |
49 | +// @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | ||
48 | // @Success 200 {object} tools.ResponseSeccess "Price=价格;ShopName=店铺名称;KvPhoto用于列表页的图片;TopPhoto详情页最上面的轮播图;Images详情页下面的产品详细图" | 50 | // @Success 200 {object} tools.ResponseSeccess "Price=价格;ShopName=店铺名称;KvPhoto用于列表页的图片;TopPhoto详情页最上面的轮播图;Images详情页下面的产品详细图" |
49 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 51 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
50 | // @Router /AllCommodity? [get] | 52 | // @Router /AllCommodity? [get] |
@@ -52,14 +54,19 @@ func AllCommodity(c *gin.Context) { | @@ -52,14 +54,19 @@ func AllCommodity(c *gin.Context) { | ||
52 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 54 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
53 | c.Header("Access-Control-Allow-Credentials", "true") | 55 | c.Header("Access-Control-Allow-Credentials", "true") |
54 | 56 | ||
57 | + var ScenicId string | ||
58 | + if ScenicId = c.Query("ScenicId");ScenicId == ""{ | ||
59 | + ScenicId = "5e0d504e24e03431008b4567" // 乐岛 | ||
60 | + } | ||
61 | + | ||
55 | var aCommoditys []DB.SCommodity | 62 | var aCommoditys []DB.SCommodity |
56 | - cur, err := DB.CCommodity.Find(tools.GetContext(), bson.M{}) | 63 | + cur, err := DB.CCommodity.Find(tools.GetContext(), bson.M{"ScenicId": ScenicId}) |
57 | defer cur.Close(tools.GetContext()) | 64 | defer cur.Close(tools.GetContext()) |
58 | if err == nil { | 65 | if err == nil { |
59 | for cur.Next(tools.GetContext()) { | 66 | for cur.Next(tools.GetContext()) { |
60 | var e DB.SCommodity | 67 | var e DB.SCommodity |
61 | cur.Decode(&e) | 68 | cur.Decode(&e) |
62 | - aCommoditys = append(aCommoditys,e) | 69 | + aCommoditys = append(aCommoditys, e) |
63 | } | 70 | } |
64 | } | 71 | } |
65 | 72 | ||
@@ -71,6 +78,8 @@ func AllCommodity(c *gin.Context) { | @@ -71,6 +78,8 @@ func AllCommodity(c *gin.Context) { | ||
71 | // @Description 更新商品 | 78 | // @Description 更新商品 |
72 | // @Accept json | 79 | // @Accept json |
73 | // @Produce json | 80 | // @Produce json |
81 | +// @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | ||
82 | +// @Param Token wgergejfwe string true "用户token" | ||
74 | // @Success 200 {object} tools.ResponseSeccess "" | 83 | // @Success 200 {object} tools.ResponseSeccess "" |
75 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 84 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
76 | // @Router /UpdateCommodity? [post] | 85 | // @Router /UpdateCommodity? [post] |
@@ -78,6 +87,17 @@ func UpdateCommodity(c *gin.Context) { | @@ -78,6 +87,17 @@ func UpdateCommodity(c *gin.Context) { | ||
78 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 87 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
79 | c.Header("Access-Control-Allow-Credentials", "true") | 88 | c.Header("Access-Control-Allow-Credentials", "true") |
80 | 89 | ||
90 | + _user, _ := c.Get("UserInfo") | ||
91 | + user := _user.(*DB.SMember) | ||
92 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
93 | + if err != nil { | ||
94 | + c.JSON(200, tools.ResponseError{ | ||
95 | + 401, | ||
96 | + "没有权限", | ||
97 | + }) | ||
98 | + return | ||
99 | + } | ||
100 | + | ||
81 | var Picture []string | 101 | var Picture []string |
82 | json.Unmarshal([]byte(c.PostForm("Images")), &Picture) | 102 | json.Unmarshal([]byte(c.PostForm("Images")), &Picture) |
83 | 103 | ||
@@ -87,12 +107,11 @@ func UpdateCommodity(c *gin.Context) { | @@ -87,12 +107,11 @@ func UpdateCommodity(c *gin.Context) { | ||
87 | //var Location DB.SLocation | 107 | //var Location DB.SLocation |
88 | //json.Unmarshal([]byte(c.PostForm("Location")), &Location) | 108 | //json.Unmarshal([]byte(c.PostForm("Location")), &Location) |
89 | 109 | ||
90 | - | ||
91 | var id primitive.ObjectID | 110 | var id primitive.ObjectID |
92 | if pid := c.PostForm("id"); pid == "null" { | 111 | if pid := c.PostForm("id"); pid == "null" { |
93 | id = primitive.NewObjectID() | 112 | id = primitive.NewObjectID() |
94 | } else { | 113 | } else { |
95 | - id,_ = primitive.ObjectIDFromHex(pid) | 114 | + id, _ = primitive.ObjectIDFromHex(pid) |
96 | } | 115 | } |
97 | 116 | ||
98 | upsert := true | 117 | upsert := true |
API/Tag.go
@@ -5,6 +5,7 @@ import ( | @@ -5,6 +5,7 @@ import ( | ||
5 | "github.com/gin-gonic/gin" | 5 | "github.com/gin-gonic/gin" |
6 | "go.mongodb.org/mongo-driver/bson" | 6 | "go.mongodb.org/mongo-driver/bson" |
7 | "letu/DB" | 7 | "letu/DB" |
8 | + "letu/Lib/Auth" | ||
8 | "letu/Lib/LeYouTu" | 9 | "letu/Lib/LeYouTu" |
9 | "time" | 10 | "time" |
10 | ) | 11 | ) |
@@ -23,6 +24,11 @@ func AllTag(c *gin.Context) { | @@ -23,6 +24,11 @@ func AllTag(c *gin.Context) { | ||
23 | 24 | ||
24 | ScenicId, err := LeYouTu.GetScenicId(c) | 25 | ScenicId, err := LeYouTu.GetScenicId(c) |
25 | if err != nil { | 26 | if err != nil { |
27 | + | ||
28 | + c.JSON(200, tools.ResponseError{ | ||
29 | + 1, | ||
30 | + "景区id不能为空", | ||
31 | + }) | ||
26 | return | 32 | return |
27 | } | 33 | } |
28 | 34 | ||
@@ -63,6 +69,10 @@ func AllTagGroup(c *gin.Context) { | @@ -63,6 +69,10 @@ func AllTagGroup(c *gin.Context) { | ||
63 | 69 | ||
64 | ScenicId, err := LeYouTu.GetScenicId(c) | 70 | ScenicId, err := LeYouTu.GetScenicId(c) |
65 | if err != nil { | 71 | if err != nil { |
72 | + c.JSON(200, tools.ResponseError{ | ||
73 | + 1, | ||
74 | + "景区id不能为空", | ||
75 | + }) | ||
66 | return | 76 | return |
67 | } | 77 | } |
68 | 78 | ||
@@ -119,6 +129,7 @@ func AllTagGroup(c *gin.Context) { | @@ -119,6 +129,7 @@ func AllTagGroup(c *gin.Context) { | ||
119 | // @Accept json | 129 | // @Accept json |
120 | // @Produce json | 130 | // @Produce json |
121 | // @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | 131 | // @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" |
132 | +// @Param Token wgergejfwe string true "用户token" | ||
122 | // @Param TagName 广场 string true "标签名称" | 133 | // @Param TagName 广场 string true "标签名称" |
123 | // @Param TagGroup location string true "群组名称" | 134 | // @Param TagGroup location string true "群组名称" |
124 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" | 135 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" |
@@ -128,8 +139,14 @@ func CreateTag(c *gin.Context) { | @@ -128,8 +139,14 @@ func CreateTag(c *gin.Context) { | ||
128 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 139 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
129 | c.Header("Access-Control-Allow-Credentials", "true") | 140 | c.Header("Access-Control-Allow-Credentials", "true") |
130 | 141 | ||
131 | - ScenicId, err := LeYouTu.GetScenicId(c) | 142 | + _user, _ := c.Get("UserInfo") |
143 | + user := _user.(*DB.SMember) | ||
144 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
132 | if err != nil { | 145 | if err != nil { |
146 | + c.JSON(200, tools.ResponseError{ | ||
147 | + 401, | ||
148 | + "没有权限", | ||
149 | + }) | ||
133 | return | 150 | return |
134 | } | 151 | } |
135 | 152 | ||
@@ -160,12 +177,12 @@ func CreateTag(c *gin.Context) { | @@ -160,12 +177,12 @@ func CreateTag(c *gin.Context) { | ||
160 | } | 177 | } |
161 | 178 | ||
162 | DB.CTags.InsertOne(tools.GetContext(),DB.STag{ | 179 | DB.CTags.InsertOne(tools.GetContext(),DB.STag{ |
163 | - ScenicId, | 180 | + c.PostForm("ScenicId"), |
164 | c.PostForm("TagGroup"), | 181 | c.PostForm("TagGroup"), |
165 | c.PostForm("TagName"), | 182 | c.PostForm("TagName"), |
166 | }) | 183 | }) |
167 | 184 | ||
168 | - DB.Redis.Delete("Tags_" + ScenicId) | 185 | + DB.Redis.Delete("Tags_" + c.PostForm("ScenicId")) |
169 | println("清楚缓存Tags") | 186 | println("清楚缓存Tags") |
170 | 187 | ||
171 | c.JSON(200, tools.ResponseSeccess{ | 188 | c.JSON(200, tools.ResponseSeccess{ |
@@ -182,6 +199,7 @@ func CreateTag(c *gin.Context) { | @@ -182,6 +199,7 @@ func CreateTag(c *gin.Context) { | ||
182 | // @Accept json | 199 | // @Accept json |
183 | // @Produce json | 200 | // @Produce json |
184 | // @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" | 201 | // @Param ScenicId 5dfb03070a9ac17ac7a82054 string true "景区id" |
202 | +// @Param Token wgergejfwe string true "用户token" | ||
185 | // @Param TagName 广场 string true "标签名称" | 203 | // @Param TagName 广场 string true "标签名称" |
186 | // @Param TagGroup location string true "群组名称" | 204 | // @Param TagGroup location string true "群组名称" |
187 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" | 205 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" |
@@ -191,8 +209,14 @@ func RemoveTag(c *gin.Context) { | @@ -191,8 +209,14 @@ func RemoveTag(c *gin.Context) { | ||
191 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 209 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
192 | c.Header("Access-Control-Allow-Credentials", "true") | 210 | c.Header("Access-Control-Allow-Credentials", "true") |
193 | 211 | ||
194 | - ScenicId, err := LeYouTu.GetScenicId(c) | 212 | + _user, _ := c.Get("UserInfo") |
213 | + user := _user.(*DB.SMember) | ||
214 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
195 | if err != nil { | 215 | if err != nil { |
216 | + c.JSON(200, tools.ResponseError{ | ||
217 | + 401, | ||
218 | + "没有权限", | ||
219 | + }) | ||
196 | return | 220 | return |
197 | } | 221 | } |
198 | 222 | ||
@@ -222,9 +246,9 @@ func RemoveTag(c *gin.Context) { | @@ -222,9 +246,9 @@ func RemoveTag(c *gin.Context) { | ||
222 | return | 246 | return |
223 | } | 247 | } |
224 | 248 | ||
225 | - DB.CTags.DeleteOne(tools.GetContext(), bson.M{"ScenicId": ScenicId,"Name":c.PostForm("TagName"),"Type":c.PostForm("TagGroup")}) | 249 | + DB.CTags.DeleteOne(tools.GetContext(), bson.M{"ScenicId": c.PostForm("ScenicId"),"Name":c.PostForm("TagName"),"Type":c.PostForm("TagGroup")}) |
226 | 250 | ||
227 | - DB.Redis.Delete("Tags_" + ScenicId) | 251 | + DB.Redis.Delete("Tags_" + c.PostForm("ScenicId")) |
228 | println("清楚缓存Tags") | 252 | println("清楚缓存Tags") |
229 | 253 | ||
230 | c.JSON(200, tools.ResponseSeccess{ | 254 | c.JSON(200, tools.ResponseSeccess{ |
API/TopMenus.go
@@ -8,13 +8,15 @@ import ( | @@ -8,13 +8,15 @@ import ( | ||
8 | "go.mongodb.org/mongo-driver/bson/primitive" | 8 | "go.mongodb.org/mongo-driver/bson/primitive" |
9 | "go.mongodb.org/mongo-driver/mongo/options" | 9 | "go.mongodb.org/mongo-driver/mongo/options" |
10 | "letu/DB" | 10 | "letu/DB" |
11 | - "letu/Lib/LeYouTu" | 11 | + "letu/Lib/Auth" |
12 | ) | 12 | ) |
13 | 13 | ||
14 | // @Title 查询所有菜单 | 14 | // @Title 查询所有菜单 |
15 | // @Description 菜单管理 - 查询所有菜单 | 15 | // @Description 菜单管理 - 查询所有菜单 |
16 | // @Accept json | 16 | // @Accept json |
17 | // @Produce json | 17 | // @Produce json |
18 | +// @Param ScenicId 5e0d504e24e03431008b4567 string true "景区id" | ||
19 | +// @Param Token wgergejfwe string true "用户token" | ||
18 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":[{"Id":"","ScenicId":"","Title":"玩水","Tags":["玩水"]},{"Id":"","ScenicId":"","Title":"设施","Tags":["服务设施","游玩项目"]}]}" | 20 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":[{"Id":"","ScenicId":"","Title":"玩水","Tags":["玩水"]},{"Id":"","ScenicId":"","Title":"设施","Tags":["服务设施","游玩项目"]}]}" |
19 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 21 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
20 | // @Router /TopMenus/All? [get] | 22 | // @Router /TopMenus/All? [get] |
@@ -22,13 +24,19 @@ func AllTopMenus(c *gin.Context) { | @@ -22,13 +24,19 @@ func AllTopMenus(c *gin.Context) { | ||
22 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 24 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
23 | c.Header("Access-Control-Allow-Credentials", "true") | 25 | c.Header("Access-Control-Allow-Credentials", "true") |
24 | 26 | ||
25 | - ScenicId, err := LeYouTu.GetScenicId(c) | 27 | + _user, _ := c.Get("UserInfo") |
28 | + user := _user.(*DB.SMember) | ||
29 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
26 | if err != nil { | 30 | if err != nil { |
31 | + c.JSON(200, tools.ResponseError{ | ||
32 | + 401, | ||
33 | + "没有权限", | ||
34 | + }) | ||
27 | return | 35 | return |
28 | } | 36 | } |
29 | 37 | ||
30 | var STopMenus []DB.STopMenus | 38 | var STopMenus []DB.STopMenus |
31 | - cur, err := DB.CTopMenus.Find(tools.GetContext(), bson.M{"ScenicId": ScenicId}) | 39 | + cur, err := DB.CTopMenus.Find(tools.GetContext(), bson.M{"ScenicId": c.PostForm("ScenicId")}) |
32 | defer cur.Close(tools.GetContext()) | 40 | defer cur.Close(tools.GetContext()) |
33 | if err == nil { | 41 | if err == nil { |
34 | for cur.Next(tools.GetContext()) { | 42 | for cur.Next(tools.GetContext()) { |
@@ -53,6 +61,8 @@ func AllTopMenus(c *gin.Context) { | @@ -53,6 +61,8 @@ func AllTopMenus(c *gin.Context) { | ||
53 | // @Description 菜单管理 - 更新菜单 | 61 | // @Description 菜单管理 - 更新菜单 |
54 | // @Accept json | 62 | // @Accept json |
55 | // @Produce json | 63 | // @Produce json |
64 | +// @Param ScenicId 5e0d504e24e03431008b4567 string true "景区id" | ||
65 | +// @Param Token wgergejfwe string true "用户token" | ||
56 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":[{"Id":"","ScenicId":"","Title":"玩水","Tags":["玩水"]},{"Id":"","ScenicId":"","Title":"设施","Tags":["服务设施","游玩项目"]}]}" | 66 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":[{"Id":"","ScenicId":"","Title":"玩水","Tags":["玩水"]},{"Id":"","ScenicId":"","Title":"设施","Tags":["服务设施","游玩项目"]}]}" |
57 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 67 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
58 | // @Router /TopMenus/Update? [post] | 68 | // @Router /TopMenus/Update? [post] |
@@ -60,8 +70,15 @@ func UpdateTopMenus(c *gin.Context) { | @@ -60,8 +70,15 @@ func UpdateTopMenus(c *gin.Context) { | ||
60 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 70 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
61 | c.Header("Access-Control-Allow-Credentials", "true") | 71 | c.Header("Access-Control-Allow-Credentials", "true") |
62 | 72 | ||
63 | - ScenicId, err := LeYouTu.GetScenicId(c) | 73 | + |
74 | + _user, _ := c.Get("UserInfo") | ||
75 | + user := _user.(*DB.SMember) | ||
76 | + err := Auth.CheckScenicAuth(c.PostForm("ScenicId"), user) | ||
64 | if err != nil { | 77 | if err != nil { |
78 | + c.JSON(200, tools.ResponseError{ | ||
79 | + 401, | ||
80 | + "没有权限", | ||
81 | + }) | ||
65 | return | 82 | return |
66 | } | 83 | } |
67 | 84 | ||
@@ -87,7 +104,7 @@ func UpdateTopMenus(c *gin.Context) { | @@ -87,7 +104,7 @@ func UpdateTopMenus(c *gin.Context) { | ||
87 | DB.CTopMenus.FindOneAndUpdate(tools.GetContext(), | 104 | DB.CTopMenus.FindOneAndUpdate(tools.GetContext(), |
88 | bson.M{"_id": id}, | 105 | bson.M{"_id": id}, |
89 | bson.M{"$set": bson.M{ | 106 | bson.M{"$set": bson.M{ |
90 | - "ScenicId": ScenicId, | 107 | + "ScenicId": c.PostForm("ScenicId"), |
91 | "Title": c.PostForm("Title"), | 108 | "Title": c.PostForm("Title"), |
92 | "Tags": Tags, | 109 | "Tags": Tags, |
93 | }}, &options.FindOneAndUpdateOptions{ | 110 | }}, &options.FindOneAndUpdateOptions{ |
API/User.go
1 | package Api | 1 | package Api |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | - "crypto/sha256" | ||
5 | - "encoding/hex" | ||
6 | "github.com/aarongao/tools" | 4 | "github.com/aarongao/tools" |
7 | "github.com/gin-gonic/gin" | 5 | "github.com/gin-gonic/gin" |
8 | "go.mongodb.org/mongo-driver/bson" | 6 | "go.mongodb.org/mongo-driver/bson" |
9 | "go.mongodb.org/mongo-driver/bson/primitive" | 7 | "go.mongodb.org/mongo-driver/bson/primitive" |
10 | "go.mongodb.org/mongo-driver/mongo/options" | 8 | "go.mongodb.org/mongo-driver/mongo/options" |
11 | "letu/DB" | 9 | "letu/DB" |
12 | - "letu/Lib/Token" | 10 | + "letu/Lib/JWT" |
13 | "regexp" | 11 | "regexp" |
14 | - "strconv" | ||
15 | "time" | 12 | "time" |
16 | ) | 13 | ) |
17 | 14 | ||
@@ -55,10 +52,6 @@ func LoginUser(c *gin.Context) { | @@ -55,10 +52,6 @@ func LoginUser(c *gin.Context) { | ||
55 | return | 52 | return |
56 | } | 53 | } |
57 | 54 | ||
58 | - // 生成token | ||
59 | - tokenunit8 := sha256.Sum256([]byte(c.PostForm("Mobile") + c.PostForm("Code") + strconv.FormatInt(time.Now().UnixNano(), 10))) | ||
60 | - token := hex.EncodeToString(tokenunit8[:32]) | ||
61 | - | ||
62 | // 检查验证码 | 55 | // 检查验证码 |
63 | cacheCode := DB.Redis.Get("code_" + c.PostForm("Mobile")) | 56 | cacheCode := DB.Redis.Get("code_" + c.PostForm("Mobile")) |
64 | selected := bson.M{} | 57 | selected := bson.M{} |
@@ -69,9 +62,13 @@ func LoginUser(c *gin.Context) { | @@ -69,9 +62,13 @@ func LoginUser(c *gin.Context) { | ||
69 | 62 | ||
70 | // 验证码匹配,但手机号不存在 | 63 | // 验证码匹配,但手机号不存在 |
71 | if User == nil { | 64 | if User == nil { |
65 | + var auth = []string{"用户管理", "通知管理"} | ||
72 | objectID := primitive.NewObjectID() | 66 | objectID := primitive.NewObjectID() |
73 | - User := DB.SMember{ | 67 | + User = &DB.SMember{ |
74 | &objectID, | 68 | &objectID, |
69 | + "visitor", | ||
70 | + "", | ||
71 | + "", | ||
75 | "", | 72 | "", |
76 | "", | 73 | "", |
77 | "", | 74 | "", |
@@ -79,7 +76,7 @@ func LoginUser(c *gin.Context) { | @@ -79,7 +76,7 @@ func LoginUser(c *gin.Context) { | ||
79 | "", | 76 | "", |
80 | "", | 77 | "", |
81 | "", | 78 | "", |
82 | - DB.SDevice{ | 79 | + &DB.SDevice{ |
83 | c.Request.Header.Get("DeviceId"), | 80 | c.Request.Header.Get("DeviceId"), |
84 | c.Request.Header.Get("Mac"), | 81 | c.Request.Header.Get("Mac"), |
85 | c.Request.Header.Get("UDID"), | 82 | c.Request.Header.Get("UDID"), |
@@ -89,8 +86,10 @@ func LoginUser(c *gin.Context) { | @@ -89,8 +86,10 @@ func LoginUser(c *gin.Context) { | ||
89 | c.Request.Header.Get("AppVersion"), | 86 | c.Request.Header.Get("AppVersion"), |
90 | c.Request.Header.Get("DeviceToken"), | 87 | c.Request.Header.Get("DeviceToken"), |
91 | }, | 88 | }, |
89 | + auth, | ||
90 | + "", | ||
92 | } | 91 | } |
93 | - DB.CMember.InsertOne(tools.GetContext(),User) | 92 | + DB.CMember.InsertOne(tools.GetContext(), User) |
94 | } | 93 | } |
95 | 94 | ||
96 | } else { | 95 | } else { |
@@ -101,16 +100,9 @@ func LoginUser(c *gin.Context) { | @@ -101,16 +100,9 @@ func LoginUser(c *gin.Context) { | ||
101 | return | 100 | return |
102 | } | 101 | } |
103 | 102 | ||
104 | - // 更新用户信息 | ||
105 | - //DB.CMember.Update( | ||
106 | - // bson.M{"_id": User.Id}, | ||
107 | - // bson.M{"$set": bson.M{"Token": token}}, | ||
108 | - //) | ||
109 | - | ||
110 | - // 更新token | ||
111 | - Token.SaveToken(User.Id.Hex(), token) | ||
112 | - | ||
113 | - User.Token = token | 103 | + // 生成token |
104 | + dd, _ := time.ParseDuration("8760h") | ||
105 | + User.Token, _ = JWT.CreateToken(User, time.Now().Add(dd).Unix()) | ||
114 | c.JSON(200, tools.ResponseSeccess{ | 106 | c.JSON(200, tools.ResponseSeccess{ |
115 | 0, | 107 | 0, |
116 | User, | 108 | User, |
@@ -146,15 +138,15 @@ func RegisterDevice(c *gin.Context) { | @@ -146,15 +138,15 @@ func RegisterDevice(c *gin.Context) { | ||
146 | 138 | ||
147 | upsert := true | 139 | upsert := true |
148 | DB.CDevice.FindOneAndUpdate(tools.GetContext(), | 140 | DB.CDevice.FindOneAndUpdate(tools.GetContext(), |
149 | - bson.M{"DeviceId":c.Request.Header.Get("DeviceId")}, | 141 | + bson.M{"DeviceId": c.Request.Header.Get("DeviceId")}, |
150 | bson.M{"$set": bson.M{ | 142 | bson.M{"$set": bson.M{ |
151 | - "Mac":c.Request.Header.Get("Mac"), | ||
152 | - "UDID":c.Request.Header.Get("UDID"), | ||
153 | - "SystemType":c.Request.Header.Get("SystemType"), | ||
154 | - "SystemVersion":c.Request.Header.Get("SystemVersion"), | ||
155 | - "SystemModel":c.Request.Header.Get("SystemModel"), | ||
156 | - "AppVersion":c.Request.Header.Get("AppVersion"), | ||
157 | - "DeviceToken":c.Request.Header.Get("DeviceToken"), | 143 | + "Mac": c.Request.Header.Get("Mac"), |
144 | + "UDID": c.Request.Header.Get("UDID"), | ||
145 | + "SystemType": c.Request.Header.Get("SystemType"), | ||
146 | + "SystemVersion": c.Request.Header.Get("SystemVersion"), | ||
147 | + "SystemModel": c.Request.Header.Get("SystemModel"), | ||
148 | + "AppVersion": c.Request.Header.Get("AppVersion"), | ||
149 | + "DeviceToken": c.Request.Header.Get("DeviceToken"), | ||
158 | }}, &options.FindOneAndUpdateOptions{ | 150 | }}, &options.FindOneAndUpdateOptions{ |
159 | Upsert: &upsert, | 151 | Upsert: &upsert, |
160 | }, | 152 | }, |
@@ -172,7 +164,6 @@ func RegisterDevice(c *gin.Context) { | @@ -172,7 +164,6 @@ func RegisterDevice(c *gin.Context) { | ||
172 | // @Accept json | 164 | // @Accept json |
173 | // @Produce json | 165 | // @Produce json |
174 | // @Param id aaron string true "用户id" | 166 | // @Param id aaron string true "用户id" |
175 | -// @Param Token wgergejfwe string true "用户token" | ||
176 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Id":"5e09c64c1c09c6f0f7ca2fa9","Token":"640bf934e425aba5d3c90998b2641f2f0ca07261d334d9615d1cd4790b5f34e7"}}" | 167 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Id":"5e09c64c1c09c6f0f7ca2fa9","Token":"640bf934e425aba5d3c90998b2641f2f0ca07261d334d9615d1cd4790b5f34e7"}}" |
177 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | 168 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
178 | // @Router /UserInfo? [get] | 169 | // @Router /UserInfo? [get] |
@@ -180,19 +171,11 @@ func UserInfo(c *gin.Context) { | @@ -180,19 +171,11 @@ func UserInfo(c *gin.Context) { | ||
180 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 171 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
181 | c.Header("Access-Control-Allow-Credentials", "true") | 172 | c.Header("Access-Control-Allow-Credentials", "true") |
182 | 173 | ||
183 | - objID,err := primitive.ObjectIDFromHex(c.Query("id")) | ||
184 | - if c.Query("Token") == "" || err!=nil { | 174 | + objID, err := primitive.ObjectIDFromHex(c.Query("id")) |
175 | + if err != nil { | ||
185 | c.JSON(200, tools.ResponseError{ | 176 | c.JSON(200, tools.ResponseError{ |
186 | 1, | 177 | 1, |
187 | - "Token或者用户id不正确", | ||
188 | - }) | ||
189 | - return | ||
190 | - } | ||
191 | - | ||
192 | - if Token.GetToken(c.Query("id")) != c.Query("Token") { | ||
193 | - c.JSON(200, tools.ResponseError{ | ||
194 | - 401, | ||
195 | - "token过期", | 178 | + "用户id不正确", |
196 | }) | 179 | }) |
197 | return | 180 | return |
198 | } | 181 | } |
@@ -200,7 +183,7 @@ func UserInfo(c *gin.Context) { | @@ -200,7 +183,7 @@ func UserInfo(c *gin.Context) { | ||
200 | var User DB.SMember | 183 | var User DB.SMember |
201 | DB.CMember.FindOne(tools.GetContext(), bson.M{"_id": objID}).Decode(&User) | 184 | DB.CMember.FindOne(tools.GetContext(), bson.M{"_id": objID}).Decode(&User) |
202 | 185 | ||
203 | - User.Device = DB.SDevice{} | 186 | + User.Device = &DB.SDevice{} |
204 | c.JSON(200, tools.ResponseSeccess{ | 187 | c.JSON(200, tools.ResponseSeccess{ |
205 | 0, | 188 | 0, |
206 | User, | 189 | User, |
@@ -212,7 +195,6 @@ func UserInfo(c *gin.Context) { | @@ -212,7 +195,6 @@ func UserInfo(c *gin.Context) { | ||
212 | // @Description 用户管理 - 检查Token是否过期 | 195 | // @Description 用户管理 - 检查Token是否过期 |
213 | // @Accept json | 196 | // @Accept json |
214 | // @Produce json | 197 | // @Produce json |
215 | -// @Param id aaron string true "用户id" | ||
216 | // @Param Token wgergejfwe string true "用户token" | 198 | // @Param Token wgergejfwe string true "用户token" |
217 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" | 199 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" |
218 | // @Failure 500 {object} tools.ResponseError "{"errcode":401,"errmsg":"token过期"}" | 200 | // @Failure 500 {object} tools.ResponseError "{"errcode":401,"errmsg":"token过期"}" |
@@ -221,26 +203,27 @@ func CheckToken(c *gin.Context) { | @@ -221,26 +203,27 @@ func CheckToken(c *gin.Context) { | ||
221 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 203 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
222 | c.Header("Access-Control-Allow-Credentials", "true") | 204 | c.Header("Access-Control-Allow-Credentials", "true") |
223 | 205 | ||
224 | - _,err := primitive.ObjectIDFromHex(c.PostForm("id")) | ||
225 | - if c.PostForm("Token") == "" || err != nil { | 206 | + if c.PostForm("Token") == "" { |
226 | c.JSON(200, tools.ResponseError{ | 207 | c.JSON(200, tools.ResponseError{ |
227 | 1, | 208 | 1, |
228 | - "Token或者用户id不正确", | 209 | + "Token不正确", |
229 | }) | 210 | }) |
230 | return | 211 | return |
231 | } | 212 | } |
232 | 213 | ||
233 | - if Token.GetToken(c.PostForm("id")) != c.PostForm("Token") { | 214 | + user, err := JWT.ParseToken(c.PostForm("Token")) |
215 | + | ||
216 | + if err != nil { | ||
234 | c.JSON(200, tools.ResponseError{ | 217 | c.JSON(200, tools.ResponseError{ |
235 | 401, | 218 | 401, |
236 | - "token过期", | 219 | + err.Error(), |
237 | }) | 220 | }) |
238 | return | 221 | return |
239 | } | 222 | } |
240 | 223 | ||
241 | c.JSON(200, tools.ResponseSeccess{ | 224 | c.JSON(200, tools.ResponseSeccess{ |
242 | 0, | 225 | 0, |
243 | - "ok", | 226 | + user, |
244 | }) | 227 | }) |
245 | 228 | ||
246 | } | 229 | } |
@@ -264,19 +247,13 @@ func UpdateUser(c *gin.Context) { | @@ -264,19 +247,13 @@ func UpdateUser(c *gin.Context) { | ||
264 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 247 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
265 | c.Header("Access-Control-Allow-Credentials", "true") | 248 | c.Header("Access-Control-Allow-Credentials", "true") |
266 | 249 | ||
267 | - _,err := primitive.ObjectIDFromHex(c.PostForm("id")) | ||
268 | - if c.PostForm("Token") == "" || err != nil { | ||
269 | - c.JSON(200, tools.ResponseError{ | ||
270 | - 1, | ||
271 | - "Token或者用户id不正确", | ||
272 | - }) | ||
273 | - return | ||
274 | - } | 250 | + _user, _ := c.Get("UserInfo") |
251 | + user := _user.(*DB.SMember) | ||
275 | 252 | ||
276 | - if Token.GetToken(c.PostForm("id")) != c.PostForm("Token") { | 253 | + if c.PostForm("id") != user.Id.Hex() { |
277 | c.JSON(200, tools.ResponseError{ | 254 | c.JSON(200, tools.ResponseError{ |
278 | 401, | 255 | 401, |
279 | - "token过期", | 256 | + "没有权限", |
280 | }) | 257 | }) |
281 | return | 258 | return |
282 | } | 259 | } |
@@ -299,14 +276,6 @@ func UpdateUser(c *gin.Context) { | @@ -299,14 +276,6 @@ func UpdateUser(c *gin.Context) { | ||
299 | return | 276 | return |
300 | } | 277 | } |
301 | 278 | ||
302 | - //if c.PostForm("Password") != c.PostForm("ConfirmPassword") { | ||
303 | - // c.JSON(200, tools.ResponseError{ | ||
304 | - // 1, | ||
305 | - // "2次密码不一致", | ||
306 | - // }) | ||
307 | - // return | ||
308 | - //} | ||
309 | - | ||
310 | // 检查验证码 | 279 | // 检查验证码 |
311 | code := DB.Redis.Get("code_" + c.PostForm("Mobile")) | 280 | code := DB.Redis.Get("code_" + c.PostForm("Mobile")) |
312 | if code == "" || code != c.PostForm("Code") { | 281 | if code == "" || code != c.PostForm("Code") { |
@@ -317,8 +286,8 @@ func UpdateUser(c *gin.Context) { | @@ -317,8 +286,8 @@ func UpdateUser(c *gin.Context) { | ||
317 | return | 286 | return |
318 | } | 287 | } |
319 | 288 | ||
320 | - objID,_ := primitive.ObjectIDFromHex(c.PostForm("id")) | ||
321 | - _, err = DB.CMember.UpdateOne(tools.GetContext(), | 289 | + objID, _ := primitive.ObjectIDFromHex(c.PostForm("id")) |
290 | + _, err := DB.CMember.UpdateOne(tools.GetContext(), | ||
322 | bson.M{"_id": objID}, | 291 | bson.M{"_id": objID}, |
323 | bson.M{"$set": bson.M{ | 292 | bson.M{"$set": bson.M{ |
324 | "Birthday": c.PostForm("Birthday"), | 293 | "Birthday": c.PostForm("Birthday"), |
@@ -330,9 +299,9 @@ func UpdateUser(c *gin.Context) { | @@ -330,9 +299,9 @@ func UpdateUser(c *gin.Context) { | ||
330 | 299 | ||
331 | if err == nil { | 300 | if err == nil { |
332 | var User *DB.SMember | 301 | var User *DB.SMember |
333 | - objID,_ := primitive.ObjectIDFromHex(c.PostForm("id")) | 302 | + objID, _ := primitive.ObjectIDFromHex(c.PostForm("id")) |
334 | DB.CMember.FindOne(tools.GetContext(), bson.M{"_id": objID}).Decode(&User) | 303 | DB.CMember.FindOne(tools.GetContext(), bson.M{"_id": objID}).Decode(&User) |
335 | - | 304 | + User.Token = "" |
336 | c.JSON(200, tools.ResponseSeccess{ | 305 | c.JSON(200, tools.ResponseSeccess{ |
337 | 0, | 306 | 0, |
338 | User, | 307 | User, |
@@ -346,7 +315,6 @@ func UpdateUser(c *gin.Context) { | @@ -346,7 +315,6 @@ func UpdateUser(c *gin.Context) { | ||
346 | 315 | ||
347 | } | 316 | } |
348 | 317 | ||
349 | - | ||
350 | // @Title 删除用户 | 318 | // @Title 删除用户 |
351 | // @Description 用户管理 - 删除用户(注销) | 319 | // @Description 用户管理 - 删除用户(注销) |
352 | // @Accept json | 320 | // @Accept json |
@@ -360,19 +328,21 @@ func RemoveUser(c *gin.Context) { | @@ -360,19 +328,21 @@ func RemoveUser(c *gin.Context) { | ||
360 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | 328 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
361 | c.Header("Access-Control-Allow-Credentials", "true") | 329 | c.Header("Access-Control-Allow-Credentials", "true") |
362 | 330 | ||
363 | - objID,err := primitive.ObjectIDFromHex(c.PostForm("id")) | ||
364 | - if c.PostForm("Token") == "" || err != nil { | 331 | + _user, _ := c.Get("UserInfo") |
332 | + user := _user.(*DB.SMember) | ||
333 | + if c.PostForm("id") != user.Id.Hex() { | ||
365 | c.JSON(200, tools.ResponseError{ | 334 | c.JSON(200, tools.ResponseError{ |
366 | - 1, | ||
367 | - "Token或者用户id不正确", | 335 | + 401, |
336 | + "没有权限", | ||
368 | }) | 337 | }) |
369 | return | 338 | return |
370 | } | 339 | } |
371 | 340 | ||
372 | - if Token.GetToken(c.PostForm("id")) != c.PostForm("Token") { | 341 | + objID, err := primitive.ObjectIDFromHex(c.PostForm("id")) |
342 | + if err != nil { | ||
373 | c.JSON(200, tools.ResponseError{ | 343 | c.JSON(200, tools.ResponseError{ |
374 | - 401, | ||
375 | - "token过期", | 344 | + 1, |
345 | + "用户id不正确", | ||
376 | }) | 346 | }) |
377 | return | 347 | return |
378 | } | 348 | } |
API/UserLog.go
@@ -131,12 +131,11 @@ func AllUserLog(c *gin.Context) { | @@ -131,12 +131,11 @@ func AllUserLog(c *gin.Context) { | ||
131 | } | 131 | } |
132 | } | 132 | } |
133 | 133 | ||
134 | - | ||
135 | c.JSON(200, tools.Page{ | 134 | c.JSON(200, tools.Page{ |
136 | 0, | 135 | 0, |
137 | total, | 136 | total, |
138 | currPage, | 137 | currPage, |
139 | - int(math.Ceil(float64(total) / float64(limit))), | 138 | + int64(math.Ceil(float64(total) / float64(limit))), |
140 | limit, | 139 | limit, |
141 | aUserLog, | 140 | aUserLog, |
142 | }) | 141 | }) |
Bin/Monitor.go
@@ -12,7 +12,7 @@ var lastState = 0 | @@ -12,7 +12,7 @@ var lastState = 0 | ||
12 | func main() { | 12 | func main() { |
13 | 13 | ||
14 | for { | 14 | for { |
15 | - time.Sleep(30 * time.Second) | 15 | + time.Sleep(180 * time.Second) |
16 | httpState, body, error := tools.GET("http://leyoutu.st-i.com.cn/AllScenic") | 16 | httpState, body, error := tools.GET("http://leyoutu.st-i.com.cn/AllScenic") |
17 | if httpState == 200 && error == nil { | 17 | if httpState == 200 && error == nil { |
18 | 18 |
No preview for this file type
@@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
1 | +package main | ||
2 | + | ||
3 | +import ( | ||
4 | + "fmt" | ||
5 | + "github.com/aliyun/alibaba-cloud-sdk-go/services/push" | ||
6 | +) | ||
7 | + | ||
8 | +func main() { | ||
9 | + | ||
10 | + // 推送app消息 | ||
11 | + client, err := push.NewClientWithAccessKey("cn-hangzhou", "LTAI4FdQeNMQXRU6u5J3EFQc", "PwvyF5rRNBWLDya41WrCpvENevYZGi") | ||
12 | + | ||
13 | + | ||
14 | + request := push.CreatePushNoticeToiOSRequest() | ||
15 | + request.ApnsEnv = "DEV" | ||
16 | + request.AppKey = "28332889" | ||
17 | + request.Scheme = "https" | ||
18 | + request.Target = "DEVICE" | ||
19 | + request.TargetValue = "30076ed6fdb740e49d882433931bc34a" | ||
20 | + request.Title = "消息测试1" | ||
21 | + request.Body = "消息测试2" | ||
22 | + | ||
23 | + response, err := client.PushNoticeToiOS(request) | ||
24 | + if err != nil { | ||
25 | + fmt.Print(err.Error()) | ||
26 | + } | ||
27 | + fmt.Printf("response is %#v\n", response) | ||
28 | + | ||
29 | +} |
Config/config.go
1 | package Config | 1 | package Config |
2 | 2 | ||
3 | type Config struct { | 3 | type Config struct { |
4 | - TagType []string | ||
5 | - DbPath string | ||
6 | - DbName string | ||
7 | - DbUser string | ||
8 | - DbPassword string | ||
9 | - RedisPath string | 4 | + TagType []string |
5 | + DbPath string | ||
6 | + DbName string | ||
7 | + DbUser string | ||
8 | + DbPassword string | ||
9 | + RedisPath string | ||
10 | + Env string | ||
11 | + TokenSecret string | ||
10 | } | 12 | } |
13 | + | ||
14 | +var Info = Config{} |
Config/config.json
@@ -4,5 +4,7 @@ | @@ -4,5 +4,7 @@ | ||
4 | "dbName": "LeYouTu", | 4 | "dbName": "LeYouTu", |
5 | "dbUser": "leyoutu", | 5 | "dbUser": "leyoutu", |
6 | "dbPassword": "leyoutu123456", | 6 | "dbPassword": "leyoutu123456", |
7 | - "redisPath": "127.0.0.1:6379" | 7 | + "redisPath": "127.0.0.1:6379", |
8 | + "Env": "DEV", | ||
9 | + "tokenSecret": "token.secret" | ||
8 | } | 10 | } |
DB/db.go
@@ -26,6 +26,7 @@ var DB *mongo.Database | @@ -26,6 +26,7 @@ var DB *mongo.Database | ||
26 | 26 | ||
27 | type SItem struct { | 27 | type SItem struct { |
28 | Id *primitive.ObjectID `bson:"_id" json:"Id" valid:"required"` | 28 | Id *primitive.ObjectID `bson:"_id" json:"Id" valid:"required"` |
29 | + ScenicId string `bson:"ScenicId" json:"ScenicId"` // 景区id | ||
29 | Name string `bson:"Name" json:"Name"` | 30 | Name string `bson:"Name" json:"Name"` |
30 | SubName string `bson:"SubName" json:"SubName"` | 31 | SubName string `bson:"SubName" json:"SubName"` |
31 | Location SLocation `bson:"Location" json:"Location"` | 32 | Location SLocation `bson:"Location" json:"Location"` |
@@ -45,6 +46,11 @@ type SItem struct { | @@ -45,6 +46,11 @@ type SItem struct { | ||
45 | Reminder string `bson:"Reminder" json:"Reminder"` //温馨提示 | 46 | Reminder string `bson:"Reminder" json:"Reminder"` //温馨提示 |
46 | State int `bson:"State" json:"State"` // 运行状态0=正常1=停运 | 47 | State int `bson:"State" json:"State"` // 运行状态0=正常1=停运 |
47 | } | 48 | } |
49 | + | ||
50 | +type SModel struct { | ||
51 | + Model string `bson:"Model" json:"Model"` | ||
52 | + Action string `bson:"Action" json:"Action"` | ||
53 | +} | ||
48 | type SIcons struct { | 54 | type SIcons struct { |
49 | Id *primitive.ObjectID `bson:"_id" json:"Id" valid:"required"` | 55 | Id *primitive.ObjectID `bson:"_id" json:"Id" valid:"required"` |
50 | ScenicId string `bson:"ScenicId" json:"ScenicId"` | 56 | ScenicId string `bson:"ScenicId" json:"ScenicId"` |
@@ -143,6 +149,9 @@ type SInvestigation struct { | @@ -143,6 +149,9 @@ type SInvestigation struct { | ||
143 | } | 149 | } |
144 | type SMember struct { | 150 | type SMember struct { |
145 | Id *primitive.ObjectID `bson:"_id" json:"Id" valid:"required"` | 151 | Id *primitive.ObjectID `bson:"_id" json:"Id" valid:"required"` |
152 | + UserType string `bson:"UserType" json:"UserType"` // "root" or "operator" or "visitor" | ||
153 | + ScenicId string `bson:"ScenicId" json:"ScenicId"` | ||
154 | + Username string `bson:"Username" json:"Username"` | ||
146 | Password string `bson:"Password" json:"Password"` | 155 | Password string `bson:"Password" json:"Password"` |
147 | Birthday string `bson:"Birthday" json:"Birthday"` | 156 | Birthday string `bson:"Birthday" json:"Birthday"` |
148 | FullName string `bson:"FullName" json:"FullName"` | 157 | FullName string `bson:"FullName" json:"FullName"` |
@@ -150,7 +159,9 @@ type SMember struct { | @@ -150,7 +159,9 @@ type SMember struct { | ||
150 | Openid string `bson:"Openid" json:"Openid"` | 159 | Openid string `bson:"Openid" json:"Openid"` |
151 | Token string `bson:"Token" json:"Token"` | 160 | Token string `bson:"Token" json:"Token"` |
152 | Sex string `bson:"Sex" json:"Sex"` | 161 | Sex string `bson:"Sex" json:"Sex"` |
153 | - Device SDevice `bson:"Device" json:"Device"` //设备信息 | 162 | + Device *SDevice `bson:"Device" json:"Device"` //设备信息 |
163 | + Auth []string `bson:"Auth" json:"Auth"` //权限信息 | ||
164 | + Remarks string `bson:"Remarks" json:"Remarks"` //说明 | ||
154 | } | 165 | } |
155 | 166 | ||
156 | type STag struct { | 167 | type STag struct { |
@@ -0,0 +1,98 @@ | @@ -0,0 +1,98 @@ | ||
1 | +package Auth | ||
2 | + | ||
3 | +import ( | ||
4 | + "github.com/aarongao/tools" | ||
5 | + "github.com/gin-gonic/gin" | ||
6 | + "github.com/pkg/errors" | ||
7 | + "letu/DB" | ||
8 | + "letu/Lib/JWT" | ||
9 | +) | ||
10 | + | ||
11 | +// 系统中所有模块 | ||
12 | +var Models = make(map[string][]string) | ||
13 | + | ||
14 | +// @Title 所有模块信息 | ||
15 | +// @Description 模块管理 - 所有模块信息 | ||
16 | +// @Accept json | ||
17 | +// @Produce json | ||
18 | +// @Success 200 {object} tools.ResponseSeccess "" | ||
19 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | ||
20 | +// @Router /AllModules? [get] | ||
21 | +func Modules(c *gin.Context) { | ||
22 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | ||
23 | + c.Header("Access-Control-Allow-Credentials", "true") | ||
24 | + | ||
25 | + rs := []string{} | ||
26 | + for k, _ := range Models { | ||
27 | + rs = append(rs, k) | ||
28 | + } | ||
29 | + | ||
30 | + c.JSON(200, tools.ResponseSeccess{ | ||
31 | + 0, | ||
32 | + rs, | ||
33 | + }) | ||
34 | + | ||
35 | +} | ||
36 | + | ||
37 | +// 检查基础权限 | ||
38 | +func CheckAuthFunc(handFunc func(c *gin.Context), auth *DB.SModel) func(c *gin.Context) { | ||
39 | + return func(c *gin.Context) { | ||
40 | + | ||
41 | + if auth.Model == "" { | ||
42 | + handFunc(c) | ||
43 | + return | ||
44 | + } | ||
45 | + | ||
46 | + token := "" | ||
47 | + if c.Request.Method == "GET" { | ||
48 | + token = c.Query("Token") | ||
49 | + } | ||
50 | + if c.Request.Method == "POST" { | ||
51 | + token = c.PostForm("Token") | ||
52 | + } | ||
53 | + if token == "" { | ||
54 | + token = c.Request.Header.Get("Token") | ||
55 | + } | ||
56 | + | ||
57 | + // 解析token | ||
58 | + user, err := JWT.ParseToken(token) | ||
59 | + if user.UserType == "root" { | ||
60 | + c.Set("UserInfo", user) | ||
61 | + handFunc(c) | ||
62 | + return | ||
63 | + } | ||
64 | + | ||
65 | + // 检查权限 | ||
66 | + checkAuth := false | ||
67 | + for _, v := range user.Auth { | ||
68 | + if v == auth.Model { | ||
69 | + checkAuth = true | ||
70 | + break | ||
71 | + } | ||
72 | + } | ||
73 | + | ||
74 | + if err != nil || checkAuth == false { | ||
75 | + c.JSON(200, tools.ResponseError{ | ||
76 | + 401, | ||
77 | + "没有权限", | ||
78 | + }) | ||
79 | + } else { | ||
80 | + c.Set("UserInfo", user) | ||
81 | + handFunc(c) | ||
82 | + } | ||
83 | + } | ||
84 | +} | ||
85 | + | ||
86 | +func CheckScenicAuth(ScenicId string, user *DB.SMember) error { | ||
87 | + | ||
88 | + if ScenicId == "" { | ||
89 | + return errors.New("景区id不能为空") | ||
90 | + } | ||
91 | + | ||
92 | + if user.UserType == "operator" { | ||
93 | + if user.ScenicId != ScenicId { | ||
94 | + return errors.New("权限不正确(需要正确的Token和ScenicId)") | ||
95 | + } | ||
96 | + } | ||
97 | + return nil | ||
98 | +} |
Lib/DelayMessage/delaymessage.go
@@ -5,11 +5,13 @@ import ( | @@ -5,11 +5,13 @@ import ( | ||
5 | "encoding/json" | 5 | "encoding/json" |
6 | "fmt" | 6 | "fmt" |
7 | "github.com/aarongao/tools" | 7 | "github.com/aarongao/tools" |
8 | + "github.com/aliyun/alibaba-cloud-sdk-go/services/push" | ||
8 | "github.com/pkg/errors" | 9 | "github.com/pkg/errors" |
10 | + "go.mongodb.org/mongo-driver/bson" | ||
9 | "go.mongodb.org/mongo-driver/bson/primitive" | 11 | "go.mongodb.org/mongo-driver/bson/primitive" |
10 | "go.mongodb.org/mongo-driver/mongo" | 12 | "go.mongodb.org/mongo-driver/mongo" |
11 | - "go.mongodb.org/mongo-driver/bson" | ||
12 | "io/ioutil" | 13 | "io/ioutil" |
14 | + "letu/DB" | ||
13 | "net/http" | 15 | "net/http" |
14 | "strconv" | 16 | "strconv" |
15 | "sync" | 17 | "sync" |
@@ -31,11 +33,11 @@ type Message struct { | @@ -31,11 +33,11 @@ type Message struct { | ||
31 | Fail int | 33 | Fail int |
32 | 34 | ||
33 | // 类型0=geturl;1=发送app消息 | 35 | // 类型0=geturl;1=发送app消息 |
34 | - Type int8 `bson:"Type" json:"Type"` | ||
35 | - Title string `bson:"Title" json:"Title"` | ||
36 | - Content string `bson:"Content" json:"Content"` | ||
37 | - UDID string `bson:"UDID" json:"UDID"` | ||
38 | - UserId string `bson:"UserId" json:"UserId"` | 36 | + Type int8 `bson:"Type" json:"Type"` |
37 | + Title string `bson:"Title" json:"Title"` | ||
38 | + Content string `bson:"Content" json:"Content"` | ||
39 | + DeviceToken string `bson:"DeviceToken" json:"DeviceToken"` | ||
40 | + UserId string `bson:"UserId" json:"UserId"` | ||
39 | } | 41 | } |
40 | 42 | ||
41 | // addTask | 43 | // addTask |
@@ -68,7 +70,7 @@ func (dm *DelayMessage) AddTaskForGetUrl(delayTime string, userid string, callba | @@ -68,7 +70,7 @@ func (dm *DelayMessage) AddTaskForGetUrl(delayTime string, userid string, callba | ||
68 | return nil | 70 | return nil |
69 | } | 71 | } |
70 | 72 | ||
71 | -func (dm *DelayMessage) AddTaskForAppMessage(delayTime string, udid string, title string, content string, userid string) error { | 73 | +func (dm *DelayMessage) AddTaskForAppMessage(delayTime string, deviceToken string, title string, content string, userid string) error { |
72 | 74 | ||
73 | iTIme, _ := strconv.Atoi(delayTime) | 75 | iTIme, _ := strconv.Atoi(delayTime) |
74 | i64Time := int64(iTIme) | 76 | i64Time := int64(iTIme) |
@@ -78,8 +80,8 @@ func (dm *DelayMessage) AddTaskForAppMessage(delayTime string, udid string, titl | @@ -78,8 +80,8 @@ func (dm *DelayMessage) AddTaskForAppMessage(delayTime string, udid string, titl | ||
78 | if i64Time <= nowTimeU { | 80 | if i64Time <= nowTimeU { |
79 | return errors.New("delayTime error...") | 81 | return errors.New("delayTime error...") |
80 | } | 82 | } |
81 | - if udid == "" { | ||
82 | - return errors.New("udid error...") | 83 | + if deviceToken == "" { |
84 | + return errors.New("deviceToken error...") | ||
83 | } | 85 | } |
84 | if title == "" { | 86 | if title == "" { |
85 | return errors.New("title error...") | 87 | return errors.New("title error...") |
@@ -92,7 +94,7 @@ func (dm *DelayMessage) AddTaskForAppMessage(delayTime string, udid string, titl | @@ -92,7 +94,7 @@ func (dm *DelayMessage) AddTaskForAppMessage(delayTime string, udid string, titl | ||
92 | } | 94 | } |
93 | 95 | ||
94 | objectID := primitive.NewObjectID() | 96 | objectID := primitive.NewObjectID() |
95 | - _Message := &Message{&objectID, i64Time, "", 0, 1, title, content, udid, userid} | 97 | + _Message := &Message{&objectID, i64Time, "", 0, 1, title, content, deviceToken, userid} |
96 | 98 | ||
97 | CDelayMessage.InsertOne(tools.GetContext(), _Message) | 99 | CDelayMessage.InsertOne(tools.GetContext(), _Message) |
98 | 100 | ||
@@ -147,16 +149,35 @@ func Callback(key *primitive.ObjectID, message *Message) { | @@ -147,16 +149,35 @@ func Callback(key *primitive.ObjectID, message *Message) { | ||
147 | } else if message.Type == 1 { | 149 | } else if message.Type == 1 { |
148 | 150 | ||
149 | // 推送app消息 | 151 | // 推送app消息 |
150 | - //client, err := push.NewClientWithAccessKey("cn-hangzhou", "28332889", "4c0b32d5fd0822a9de703e177798e8ca") | ||
151 | - // | ||
152 | - //request := push.CreatePushMessageToiOSRequest() | ||
153 | - //request.Scheme = "https" | ||
154 | - // | ||
155 | - //response, err := client.PushMessageToiOS(request) | ||
156 | - //if err != nil { | ||
157 | - // fmt.Print(err.Error()) | ||
158 | - //} | ||
159 | - //fmt.Printf("response is %#v\n", response) | 152 | + client, err := push.NewClientWithAccessKey("cn-hangzhou", "LTAI4FdQeNMQXRU6u5J3EFQc", "PwvyF5rRNBWLDya41WrCpvENevYZGi") |
153 | + | ||
154 | + request := push.CreatePushNoticeToiOSRequest() | ||
155 | + request.ApnsEnv = "DEV" | ||
156 | + request.AppKey = "28332889" | ||
157 | + request.Scheme = "https" | ||
158 | + request.Target = "DEVICE" | ||
159 | + request.TargetValue = message.DeviceToken | ||
160 | + request.Title = message.Title | ||
161 | + request.Body = message.Content | ||
162 | + | ||
163 | + response, err := client.PushNoticeToiOS(request) | ||
164 | + if err != nil { | ||
165 | + fmt.Print(err.Error()) | ||
166 | + } | ||
167 | + | ||
168 | + res,_ := json.Marshal(response) | ||
169 | + DB.CSystemLog.InsertOne(tools.GetContext(),DB.SSystemLog{ | ||
170 | + message.UserId, | ||
171 | + "", | ||
172 | + "", | ||
173 | + 6002, | ||
174 | + "调用阿里接口发送app通知", | ||
175 | + time.Now().Unix(), | ||
176 | + DB.SLocation{}, | ||
177 | + string(res), | ||
178 | + err, | ||
179 | + }) | ||
180 | + | ||
160 | } | 181 | } |
161 | 182 | ||
162 | json, _ := json.Marshal(message) | 183 | json, _ := json.Marshal(message) |
@@ -0,0 +1,72 @@ | @@ -0,0 +1,72 @@ | ||
1 | +package JWT | ||
2 | + | ||
3 | +import ( | ||
4 | + "encoding/json" | ||
5 | + "errors" | ||
6 | + "github.com/dgrijalva/jwt-go" | ||
7 | + "go.mongodb.org/mongo-driver/bson/primitive" | ||
8 | + "letu/Config" | ||
9 | + "letu/DB" | ||
10 | + "time" | ||
11 | +) | ||
12 | + | ||
13 | +func CreateToken(user *DB.SMember, exp int64) (tokenss string, err error) { | ||
14 | + //自定义claim | ||
15 | + | ||
16 | + | ||
17 | + auth, _ := json.Marshal(user.Auth) | ||
18 | + claim := jwt.MapClaims{ | ||
19 | + "id": user.Id, | ||
20 | + //"mobile": user.Mobile, | ||
21 | + "userType": user.UserType, | ||
22 | + "scenicId": user.ScenicId, | ||
23 | + "auth": string(auth), | ||
24 | + "nbf": time.Now().Unix(), | ||
25 | + "iat": time.Now().Unix(), | ||
26 | + "exp": exp, | ||
27 | + } | ||
28 | + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim) | ||
29 | + tokenss, err = token.SignedString([]byte(Config.Info.TokenSecret)) | ||
30 | + return | ||
31 | +} | ||
32 | + | ||
33 | +func secret() jwt.Keyfunc { | ||
34 | + return func(token *jwt.Token) (interface{}, error) { | ||
35 | + return []byte(Config.Info.TokenSecret), nil | ||
36 | + } | ||
37 | +} | ||
38 | + | ||
39 | +func CheckToken(tokenss string) (err error) { | ||
40 | + | ||
41 | + _, err = jwt.Parse(tokenss, secret()) | ||
42 | + return err | ||
43 | +} | ||
44 | + | ||
45 | +func ParseToken(tokenss string) (user *DB.SMember, err error) { | ||
46 | + user = &DB.SMember{} | ||
47 | + token, err := jwt.Parse(tokenss, secret()) | ||
48 | + if err != nil { | ||
49 | + return | ||
50 | + } | ||
51 | + claim, ok := token.Claims.(jwt.MapClaims) | ||
52 | + if !ok { | ||
53 | + err = errors.New("cannot convert claim to mapclaim") | ||
54 | + return | ||
55 | + } | ||
56 | + //验证token,如果token被修改过则为false | ||
57 | + if !token.Valid { | ||
58 | + err = errors.New("token is invalid") | ||
59 | + return | ||
60 | + } | ||
61 | + | ||
62 | + id, _ := primitive.ObjectIDFromHex(claim["id"].(string)) | ||
63 | + user.Id = &id | ||
64 | + //user.Mobile = claim["mobile"].(string) | ||
65 | + user.UserType = claim["userType"].(string) | ||
66 | + user.ScenicId = claim["scenicId"].(string) | ||
67 | + | ||
68 | + var jsons []string | ||
69 | + json.Unmarshal([]byte(claim["auth"].(string)),&jsons) | ||
70 | + user.Auth = jsons | ||
71 | + return | ||
72 | +} |
Lib/LeYouTu/Controllers.go
@@ -1,26 +0,0 @@ | @@ -1,26 +0,0 @@ | ||
1 | -package LeYouTu | ||
2 | - | ||
3 | -import ( | ||
4 | - "github.com/gin-gonic/gin" | ||
5 | -) | ||
6 | - | ||
7 | -type Controllers struct { | ||
8 | - Layout func(c *gin.Context) bool | ||
9 | -} | ||
10 | - | ||
11 | -func (this *Controllers) POST(handFunc func(c *gin.Context)) func(c *gin.Context) { | ||
12 | - return this.HandleFunc(handFunc, "POST") | ||
13 | -} | ||
14 | -func (this *Controllers) GET(handFunc func(c *gin.Context)) func(c *gin.Context) { | ||
15 | - return this.HandleFunc(handFunc, "GET") | ||
16 | -} | ||
17 | -func (this *Controllers) HandleFunc(handFunc func(c *gin.Context), httpMethod string) func(c *gin.Context) { | ||
18 | - return func(c *gin.Context) { | ||
19 | - | ||
20 | - if c.Request.Method != httpMethod { | ||
21 | - //res.Write([]byte(http.StatusText(http.StatusMethodNotAllowed))) | ||
22 | - return | ||
23 | - } | ||
24 | - | ||
25 | - } | ||
26 | -} | ||
27 | \ No newline at end of file | 0 | \ No newline at end of file |
Lib/LeYouTu/tools.go
1 | package LeYouTu | 1 | package LeYouTu |
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | - "github.com/aarongao/tools" | ||
5 | "github.com/gin-gonic/gin" | 4 | "github.com/gin-gonic/gin" |
6 | "github.com/pkg/errors" | 5 | "github.com/pkg/errors" |
7 | ) | 6 | ) |
@@ -16,10 +15,6 @@ func GetScenicId(c *gin.Context) (ScenicId string, error error) { | @@ -16,10 +15,6 @@ func GetScenicId(c *gin.Context) (ScenicId string, error error) { | ||
16 | } | 15 | } |
17 | 16 | ||
18 | if ScenicId == "" || ScenicId == "undefined" { | 17 | if ScenicId == "" || ScenicId == "undefined" { |
19 | - c.JSON(200, tools.ResponseError{ | ||
20 | - 1, | ||
21 | - "缺少ScenicId(景区id)", | ||
22 | - }) | ||
23 | return "", errors.New("缺少ScenicId(景区id)") | 18 | return "", errors.New("缺少ScenicId(景区id)") |
24 | } else { | 19 | } else { |
25 | return ScenicId, nil | 20 | return ScenicId, nil |
main.go
@@ -11,6 +11,7 @@ import ( | @@ -11,6 +11,7 @@ import ( | ||
11 | "letu/Api" | 11 | "letu/Api" |
12 | "letu/Config" | 12 | "letu/Config" |
13 | "letu/DB" | 13 | "letu/DB" |
14 | + "letu/Lib/Auth" | ||
14 | "letu/Lib/Cache" | 15 | "letu/Lib/Cache" |
15 | "letu/Lib/DelayMessage" | 16 | "letu/Lib/DelayMessage" |
16 | "log" | 17 | "log" |
@@ -21,6 +22,8 @@ import ( | @@ -21,6 +22,8 @@ import ( | ||
21 | // @APIVersion 1.0.0 | 22 | // @APIVersion 1.0.0 |
22 | // @APITitle 乐游图后端接口文档 | 23 | // @APITitle 乐游图后端接口文档 |
23 | // @BasePath 正式 leyoutu.st-i.com.cn; 测试 letu.api.imagchina.com | 24 | // @BasePath 正式 leyoutu.st-i.com.cn; 测试 letu.api.imagchina.com |
25 | +var Gin *gin.Engine | ||
26 | + | ||
24 | func main() { | 27 | func main() { |
25 | 28 | ||
26 | // 读取配置文件 | 29 | // 读取配置文件 |
@@ -28,13 +31,27 @@ func main() { | @@ -28,13 +31,27 @@ func main() { | ||
28 | file, _ := os.Open(dir + "/Config/config.json") | 31 | file, _ := os.Open(dir + "/Config/config.json") |
29 | defer file.Close() | 32 | defer file.Close() |
30 | decoder := json.NewDecoder(file) | 33 | decoder := json.NewDecoder(file) |
31 | - conf := Config.Config{} | ||
32 | - err := decoder.Decode(&conf) | 34 | + err := decoder.Decode(&Config.Info) |
33 | tools.CheckError(err) | 35 | tools.CheckError(err) |
34 | 36 | ||
35 | // 连接数据库 | 37 | // 连接数据库 |
36 | // Set client options | 38 | // Set client options |
37 | - clientOptions := options.Client().ApplyURI("mongodb://" + conf.DbPath) | 39 | + clientOptions := options.Client() |
40 | + if Config.Info.Env == "DEV" { | ||
41 | + clientOptions.ApplyURI("mongodb://" + Config.Info.DbPath) | ||
42 | + } else if Config.Info.Env == "PRODUCT" { | ||
43 | + credential := options.Credential{ | ||
44 | + AuthMechanism: "SCRAM-SHA-1", | ||
45 | + AuthSource: Config.Info.DbName, | ||
46 | + Username: Config.Info.DbUser, | ||
47 | + Password: Config.Info.DbPassword, | ||
48 | + } | ||
49 | + clientOptions.ApplyURI("mongodb://" + Config.Info.DbPath).SetAuth(credential) | ||
50 | + } else { | ||
51 | + log.Fatal("未知的运行环境 DEV or PRODUCT") | ||
52 | + return | ||
53 | + } | ||
54 | + | ||
38 | clientOptions.SetLocalThreshold(3 * time.Second) //只使用与mongo操作耗时小于3秒的 | 55 | clientOptions.SetLocalThreshold(3 * time.Second) //只使用与mongo操作耗时小于3秒的 |
39 | clientOptions.SetMaxConnIdleTime(5 * time.Second) //指定连接可以保持空闲的最大毫秒数 | 56 | clientOptions.SetMaxConnIdleTime(5 * time.Second) //指定连接可以保持空闲的最大毫秒数 |
40 | clientOptions.SetMaxPoolSize(4096) //使用最大的连接数 | 57 | clientOptions.SetMaxPoolSize(4096) //使用最大的连接数 |
@@ -53,8 +70,7 @@ func main() { | @@ -53,8 +70,7 @@ func main() { | ||
53 | log.Println("Connected to MongoDB!") | 70 | log.Println("Connected to MongoDB!") |
54 | 71 | ||
55 | //获取文档集 | 72 | //获取文档集 |
56 | - DB.DB = client.Database("LeYouTu") | ||
57 | - //DB.DB.Login(conf.DbUser, conf.DbPassword) | 73 | + DB.DB = client.Database(Config.Info.DbName) |
58 | 74 | ||
59 | DB.CItem = DB.DB.Collection("Item") | 75 | DB.CItem = DB.DB.Collection("Item") |
60 | DB.CComplaint = DB.DB.Collection("Complaint") | 76 | DB.CComplaint = DB.DB.Collection("Complaint") |
@@ -76,7 +92,7 @@ func main() { | @@ -76,7 +92,7 @@ func main() { | ||
76 | 92 | ||
77 | // 连接redis | 93 | // 连接redis |
78 | DB.Redis = Cache.NewRedis(&Cache.RedisOpts{ | 94 | DB.Redis = Cache.NewRedis(&Cache.RedisOpts{ |
79 | - conf.RedisPath, | 95 | + Config.Info.RedisPath, |
80 | "", | 96 | "", |
81 | 0, | 97 | 0, |
82 | 200, | 98 | 200, |
@@ -84,59 +100,68 @@ func main() { | @@ -84,59 +100,68 @@ func main() { | ||
84 | 0, | 100 | 0, |
85 | }) | 101 | }) |
86 | 102 | ||
87 | - r := gin.Default() | 103 | + Gin = gin.Default() |
88 | //r.Static("/.well-known", "./.well-known/") | 104 | //r.Static("/.well-known", "./.well-known/") |
89 | - r.GET("/AllItems", Api.AllItems) | ||
90 | - r.GET("/AllItemTime", Api.AllItemTime) | ||
91 | - r.GET("/AllCommodity", Api.AllCommodity) | ||
92 | - r.GET("/AllLine", Api.AllLine) | ||
93 | - r.GET("/ItemInfo", Api.ItemInfo) | ||
94 | - r.GET("/CommodityInfo", Api.CommodityInfo) | ||
95 | - r.POST("/CreateComplaint", Api.CreateComplaint) | ||
96 | - r.GET("/AllComplaint", Api.AllComplaint) | ||
97 | - //r.POST("/CreateUser", Api.CreateUser) | ||
98 | - r.POST("/LoginUser", Api.LoginUser) | ||
99 | - r.POST("/UpdateUser", Api.UpdateUser) | ||
100 | - r.GET("/UserInfo", Api.UserInfo) | ||
101 | - r.GET("/ScenicInfo", Api.ScenicInfo) | ||
102 | - r.GET("/LineInfo", Api.LineInfo) | ||
103 | - r.GET("/AllTag", Api.AllTag) | ||
104 | - r.GET("/AllTagGroup", Api.AllTagGroup) | ||
105 | - r.POST("/Tag/Create", Api.CreateTag) | ||
106 | - r.POST("/Tag/Remove", Api.RemoveTag) | ||
107 | - | ||
108 | - r.POST("/Upload", Api.Upload) | ||
109 | - r.POST("/UpdateItem", Api.UpdateItem) | ||
110 | - r.POST("/UpdateCommodity", Api.UpdateCommodity) | ||
111 | - r.POST("/UpdateLine", Api.UpdateLine) | ||
112 | - r.POST("/UpdateScenic", Api.UpdateScenic) | ||
113 | - r.POST("/UpdateItemTime", Api.UpdateItemTime) | ||
114 | - r.GET("/AllScenic", Api.AllScenic) | ||
115 | - r.POST("/UserLog", Api.UserLog) | ||
116 | - r.GET("/AllUserLog", Api.AllUserLog) | ||
117 | - r.POST("/Sms/Send", Api.Send) | ||
118 | - r.POST("/Investigation/Save", Api.SaveInvestigation) | ||
119 | - r.GET("/Investigation/List", Api.AllInvestigation) | ||
120 | - r.POST("/Trajectory/Save", Api.SaveTrajectory) | ||
121 | - r.POST("/DealyMessage/Create", Api.CreateDealyMessage) | ||
122 | - r.GET("/DealyMessage/Info", Api.DealyMessageInfo) | ||
123 | - r.POST("/DealyMessage/Remove", Api.RemoveDealyMessage) | ||
124 | - r.POST("/Icon/Update", Api.UpdateIcon) | ||
125 | - r.GET("/Icon/All", Api.AllIcons) | ||
126 | - r.GET("/Icon/Info", Api.IconInfo) | ||
127 | - r.POST("/CheckToken", Api.CheckToken) | ||
128 | - //r.GET("/Tiles", Api.Tiles) | ||
129 | - r.POST("/TopMenus/Update", Api.UpdateTopMenus) | ||
130 | - r.GET("/TopMenus/All", Api.AllTopMenus) | ||
131 | - r.POST("/RegisterDevice", Api.RegisterDevice) | ||
132 | - r.POST("/RemoveUser", Api.RemoveUser) | ||
133 | - //r.GET("/ws", Api.WsPage) | ||
134 | - | ||
135 | - r.Static("/Upload", "./Upload") | ||
136 | - r.Static("/Console", "./Console") | ||
137 | - r.Static("/Policy", dir+"/Policy") | ||
138 | - | ||
139 | - r.GET("MP_verify_R9xuhLXYcVbdDDNk.txt", func(c *gin.Context) { | 105 | + |
106 | + InitController("GET", "/AllItems", Api.AllItems, &DB.SModel{}) | ||
107 | + InitController("GET", "/AllItemTime", Api.AllItemTime, &DB.SModel{}) | ||
108 | + InitController("GET", "/AllCommodity", Api.AllCommodity, &DB.SModel{}) | ||
109 | + InitController("GET", "/AllLine", Api.AllLine, &DB.SModel{}) | ||
110 | + InitController("GET", "/ItemInfo", Api.ItemInfo, &DB.SModel{}) | ||
111 | + InitController("GET", "/CommodityInfo", Api.CommodityInfo, &DB.SModel{}) | ||
112 | + InitController("POST", "/CreateComplaint", Api.CreateComplaint, &DB.SModel{}) | ||
113 | + InitController("GET", "/AllComplaint", Api.AllComplaint, &DB.SModel{"投诉建议", "查看所有"}) | ||
114 | + //InitController("/CreateUser", Api.CreateUser) | ||
115 | + InitController("POST", "/LoginUser", Api.LoginUser, &DB.SModel{}) | ||
116 | + InitController("POST", "/UpdateUser", Api.UpdateUser, &DB.SModel{"用户管理", "修改"}) | ||
117 | + InitController("GET", "/UserInfo", Api.UserInfo, &DB.SModel{}) | ||
118 | + InitController("GET", "/ScenicInfo", Api.ScenicInfo, &DB.SModel{}) | ||
119 | + InitController("GET", "/LineInfo", Api.LineInfo, &DB.SModel{}) | ||
120 | + InitController("GET", "/AllTag", Api.AllTag, &DB.SModel{}) | ||
121 | + InitController("GET", "/AllTagGroup", Api.AllTagGroup, &DB.SModel{}) | ||
122 | + InitController("POST", "/Tag/Create", Api.CreateTag, &DB.SModel{"标签管理", "增加"}) | ||
123 | + InitController("POST", "/Tag/Remove", Api.RemoveTag, &DB.SModel{"标签管理", "删除"}) | ||
124 | + | ||
125 | + InitController("POST", "/Upload", Api.Upload, &DB.SModel{}) | ||
126 | + InitController("POST", "/UpdateItem", Api.UpdateItem, &DB.SModel{"项目管理", "修改"}) | ||
127 | + InitController("POST", "/UpdateCommodity", Api.UpdateCommodity, &DB.SModel{"商品管理", "修改"}) | ||
128 | + InitController("POST", "/UpdateLine", Api.UpdateLine, &DB.SModel{"线路管理", "修改"}) | ||
129 | + InitController("POST", "/UpdateScenic", Api.UpdateScenic, &DB.SModel{"景区管理", "修改"}) | ||
130 | + InitController("POST", "/UpdateItemTime", Api.UpdateItemTime, &DB.SModel{"项目管理", "修改等候时间"}) | ||
131 | + InitController("GET", "/AllScenic", Api.AllScenic, &DB.SModel{}) | ||
132 | + InitController("POST", "/UserLog", Api.UserLog, &DB.SModel{}) | ||
133 | + InitController("GET", "/AllUserLog", Api.AllUserLog, &DB.SModel{}) | ||
134 | + InitController("POST", "/Sms/Send", Api.Send, &DB.SModel{}) | ||
135 | + InitController("POST", "/Investigation/Save", Api.SaveInvestigation, &DB.SModel{}) | ||
136 | + InitController("GET", "/Investigation/List", Api.AllInvestigation, &DB.SModel{}) | ||
137 | + InitController("POST", "/Trajectory/Save", Api.SaveTrajectory, &DB.SModel{}) | ||
138 | + InitController("POST", "/DealyMessage/Create", Api.CreateDealyMessage, &DB.SModel{"通知管理", "增加"}) | ||
139 | + InitController("GET", "/DealyMessage/Info", Api.DealyMessageInfo, &DB.SModel{"通知管理", "查看所有"}) | ||
140 | + InitController("POST", "/DealyMessage/Remove", Api.RemoveDealyMessage, &DB.SModel{"通知管理", "删除"}) | ||
141 | + InitController("POST", "/Icon/Update", Api.UpdateIcon, &DB.SModel{"图标管理", "修改管理"}) | ||
142 | + InitController("GET", "/Icon/All", Api.AllIcons, &DB.SModel{}) | ||
143 | + InitController("GET", "/Icon/Info", Api.IconInfo, &DB.SModel{}) | ||
144 | + InitController("POST", "/CheckToken", Api.CheckToken, &DB.SModel{}) | ||
145 | + //InitController("/Tiles", Api.Tiles) | ||
146 | + InitController("POST", "/TopMenus/Update", Api.UpdateTopMenus, &DB.SModel{}) | ||
147 | + InitController("GET", "/TopMenus/All", Api.AllTopMenus, &DB.SModel{}) | ||
148 | + InitController("GET", "/RegisterDevice", Api.RegisterDevice, &DB.SModel{}) | ||
149 | + InitController("POST", "/RemoveUser", Api.RemoveUser, &DB.SModel{"用户管理", "删除"}) | ||
150 | + | ||
151 | + InitController("POST", "/LoginOperator", Api.LoginOperator, &DB.SModel{}) | ||
152 | + InitController("POST", "/UpdateOperator", Api.UpdateOperator, &DB.SModel{"操作员管理", "增加和修改"}) | ||
153 | + InitController("GET", "/AllOperator", Api.AllOperator, &DB.SModel{"操作员管理", "查看所有"}) | ||
154 | + Gin.GET("/AllModules", Auth.Modules) | ||
155 | + //InitController("/ws", Api.WsPage) | ||
156 | + | ||
157 | + // 用于给赵翔测试通知效果 | ||
158 | + Gin.GET("/PushNoticeToiOS", Api.PushNoticeToiOS) | ||
159 | + | ||
160 | + Gin.Static("/Upload", "./Upload") | ||
161 | + Gin.Static("/Console", "./Console") | ||
162 | + Gin.Static("/Policy", dir+"/Policy") | ||
163 | + | ||
164 | + Gin.GET("MP_verify_R9xuhLXYcVbdDDNk.txt", func(c *gin.Context) { | ||
140 | c.String(200, "R9xuhLXYcVbdDDNk") | 165 | c.String(200, "R9xuhLXYcVbdDDNk") |
141 | }) | 166 | }) |
142 | //r.Static("/tiles2", dir+"/tiles") | 167 | //r.Static("/tiles2", dir+"/tiles") |
@@ -149,7 +174,7 @@ func main() { | @@ -149,7 +174,7 @@ func main() { | ||
149 | DelayMessage.GlobalDM.Start() | 174 | DelayMessage.GlobalDM.Start() |
150 | }() | 175 | }() |
151 | 176 | ||
152 | - // -初始化数据 | 177 | + // -初始化延迟数据 |
153 | if cur, err := DelayMessage.CDelayMessage.Find(tools.GetContext(), bson.M{}); err == nil { | 178 | if cur, err := DelayMessage.CDelayMessage.Find(tools.GetContext(), bson.M{}); err == nil { |
154 | defer cur.Close(tools.GetContext()) | 179 | defer cur.Close(tools.GetContext()) |
155 | for cur.Next(tools.GetContext()) { | 180 | for cur.Next(tools.GetContext()) { |
@@ -170,5 +195,19 @@ func main() { | @@ -170,5 +195,19 @@ func main() { | ||
170 | spew.Dump(err) | 195 | spew.Dump(err) |
171 | } | 196 | } |
172 | 197 | ||
173 | - r.Run(":8080") | 198 | + Gin.Run(":8080") |
199 | +} | ||
200 | + | ||
201 | +func InitController(method string, uri string, handFunc func(c *gin.Context), auth *DB.SModel) { | ||
202 | + | ||
203 | + if auth.Model != "" { | ||
204 | + Auth.Models[auth.Model] = append(Auth.Models[auth.Model], auth.Action) | ||
205 | + } | ||
206 | + | ||
207 | + if method == "GET" { | ||
208 | + Gin.GET(uri, Auth.CheckAuthFunc(handFunc, auth)) | ||
209 | + } | ||
210 | + if method == "POST" { | ||
211 | + Gin.POST(uri, Auth.CheckAuthFunc(handFunc, auth)) | ||
212 | + } | ||
174 | } | 213 | } |
main2.go
@@ -1,83 +0,0 @@ | @@ -1,83 +0,0 @@ | ||
1 | -package main | ||
2 | - | ||
3 | -import ( | ||
4 | - "context" | ||
5 | - "fmt" | ||
6 | - "github.com/gin-gonic/gin" | ||
7 | - "go.mongodb.org/mongo-driver/mongo" | ||
8 | - "go.mongodb.org/mongo-driver/mongo/options" | ||
9 | - "log" | ||
10 | - "time" | ||
11 | -) | ||
12 | - | ||
13 | -var ( | ||
14 | - client *mongo.Client | ||
15 | - err error | ||
16 | - result *mongo.InsertOneResult | ||
17 | - collection *mongo.Collection | ||
18 | -) | ||
19 | - | ||
20 | -// @APIVersion 1.0.0 | ||
21 | -// @APITitle 乐游图后端接口文档 | ||
22 | -// @BasePath 正式 leyoutu.st-i.com.cn; 测试 letu.api.imagchina.com | ||
23 | -func main() { | ||
24 | - | ||
25 | - // Set client options | ||
26 | - clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") | ||
27 | - clientOptions.SetLocalThreshold(3 * time.Second) //只使用与mongo操作耗时小于3秒的 | ||
28 | - clientOptions.SetMaxConnIdleTime(5 * time.Second) //指定连接可以保持空闲的最大毫秒数 | ||
29 | - clientOptions.SetMaxPoolSize(4096) //使用最大的连接数 | ||
30 | - | ||
31 | - // Connect to MongoDB | ||
32 | - client, err = mongo.Connect(context.TODO(), clientOptions) | ||
33 | - | ||
34 | - if err != nil { | ||
35 | - log.Fatal(err) | ||
36 | - } | ||
37 | - | ||
38 | - // Check the connection | ||
39 | - err = client.Ping(context.TODO(), nil) | ||
40 | - | ||
41 | - if err != nil { | ||
42 | - log.Fatal(err) | ||
43 | - } | ||
44 | - | ||
45 | - fmt.Println("Connected to MongoDB!") | ||
46 | - | ||
47 | - collection = client.Database("LeYouTu").Collection("LogRecord") | ||
48 | - | ||
49 | - r := gin.Default() | ||
50 | - r.GET("/AllScenic", func(c *gin.Context) { | ||
51 | - c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | ||
52 | - c.Header("Access-Control-Allow-Credentials", "true") | ||
53 | - | ||
54 | - //var aItems = DB.SItem{} | ||
55 | - //if err = collection.FindOne(context.TODO(), bson.D{{}}).Decode(&aItems); err != nil { | ||
56 | - // println(err) | ||
57 | - //} | ||
58 | - | ||
59 | - record := &LogRecord{ | ||
60 | - JobName: "job10", | ||
61 | - Command: "echo hello", | ||
62 | - Err: "", | ||
63 | - Content: "hello", | ||
64 | - } | ||
65 | - | ||
66 | - if result, err = collection.InsertOne(context.TODO(), record); err != nil { | ||
67 | - fmt.Println(err) | ||
68 | - return | ||
69 | - } | ||
70 | - | ||
71 | - c.JSON(200, "ok") | ||
72 | - | ||
73 | - }) | ||
74 | - | ||
75 | - r.Run(":8080") | ||
76 | -} | ||
77 | - | ||
78 | -type LogRecord struct { | ||
79 | - JobName string `bson:"jobName"` // 任务名 | ||
80 | - Command string `bson:"command"` // shell命令 | ||
81 | - Err string `bson:"err"` // 脚本错误 | ||
82 | - Content string `bson:"content"` // 脚本输出 | ||
83 | -} |