Commit 8a882f01f6c1402b11033de14239d3089714d0cb

Authored by aarongao
1 parent c1e54074
Exists in v1.2 and in 2 other branches master, v1.1

1.0

.idea/inspectionProfiles/Project_Default.xml 0 → 100644
@@ -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
.idea/jsLinters/jshint.xml 0 → 100644
@@ -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
.idea/letu.iml 0 → 100644
@@ -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
.idea/misc.xml 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="JavaScriptSettings">
  4 + <option name="languageLevel" value="ES6" />
  5 + </component>
  6 +</project>
0 \ No newline at end of file 7 \ No newline at end of file
.idea/modules.xml 0 → 100644
@@ -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
.idea/vcs.xml 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="VcsDirectoryMappings">
  4 + <mapping directory="$PROJECT_DIR$" vcs="Git" />
  5 + </component>
  6 +</project>
0 \ No newline at end of file 7 \ No newline at end of file
.idea/workspace.xml 0 → 100644
@@ -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
@@ -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 })
@@ -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 +}
@@ -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
API/Operator.go 0 → 100644
@@ -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 +}
@@ -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
@@ -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
@@ -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{
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
Bin/TestiosMeg 0 → 100755
No preview for this file type
Bin/TestiosMeg.go 0 → 100644
@@ -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 }
@@ -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 {
Lib/Auth/Auth.go 0 → 100644
@@ -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)
Lib/JWT/jwt.go 0 → 100644
@@ -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
@@ -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 }
@@ -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 -}