Commit 74de40c645cb8e31b4d04889d6ce48224b35c5df
0 parents
Exists in
v1.2
and in
2 other branches
init
Showing
15 changed files
with
1159 additions
and
0 deletions
Show diff stats
1 | +++ a/API/Complaint.go | |
... | ... | @@ -0,0 +1,43 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "encoding/json" | |
5 | + "github.com/aarongao/tools" | |
6 | + "github.com/gin-gonic/gin" | |
7 | + "letu/DB" | |
8 | +) | |
9 | + | |
10 | +// @Title 增加投诉 | |
11 | +// @Description 增加投诉 | |
12 | +// @Accept json | |
13 | +// @Produce json | |
14 | +// @Param mobile 18616619599 string true "联系电话" | |
15 | +// @Param type 1 string true "类型" | |
16 | +// @Param content 卫生不干净 string true "投诉内容" | |
17 | +// @Param image ["http://www.xx.com/123.jpg","http://www.xx.com/123.jpg"] string true "照片数组" | |
18 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" | |
19 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
20 | +// @Router /CreateComplaint? [post] | |
21 | +func CreateComplaint(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 | + | |
26 | + var images []string | |
27 | + | |
28 | + json.Unmarshal([]byte(c.PostForm("image")), &images) | |
29 | + | |
30 | + DB.CComplaint.Insert(DB.SComplaint{ | |
31 | + c.PostForm("type"), | |
32 | + c.PostForm("mobile"), | |
33 | + c.PostForm("content"), | |
34 | + images, | |
35 | + }) | |
36 | + | |
37 | + c.JSON(200, tools.ResponseSeccess{ | |
38 | + 0, | |
39 | + "ok", | |
40 | + }) | |
41 | + | |
42 | + | |
43 | +} | ... | ... |
1 | +++ a/API/Item.go | |
... | ... | @@ -0,0 +1,157 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "encoding/json" | |
5 | + "github.com/aarongao/tools" | |
6 | + "github.com/gin-gonic/gin" | |
7 | + "gopkg.in/mgo.v2/bson" | |
8 | + "letu/DB" | |
9 | +) | |
10 | + | |
11 | +// @Title 查询设备信息 | |
12 | +// @Description 查询设备信息 | |
13 | +// @Accept json | |
14 | +// @Produce json | |
15 | +// @Param id 5dfb03070a9ac17ac7a82054 string true "设备id" | |
16 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Name":"名称","Describe":"介绍","OpenHours":"开放时间","Mobile":"电话","Address":"地址","SLocation":{"Latitude":0,"Longitude":0},"Picture":["照片1","照片2"]}}" | |
17 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
18 | +// @Router /ScenicInfo? [get] | |
19 | +func ItemInfo(c *gin.Context) { | |
20 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
21 | + c.Header("Access-Control-Allow-Credentials", "true") | |
22 | + | |
23 | + if c.Query("id") == "" { | |
24 | + c.JSON(200, tools.ResponseError{ | |
25 | + 1, | |
26 | + "空", | |
27 | + }) | |
28 | + return | |
29 | + } | |
30 | + | |
31 | + var SItem *DB.SItem | |
32 | + DB.CItem.Find(bson.M{"_id": bson.ObjectIdHex(c.Query("id"))}).One(&SItem) | |
33 | + | |
34 | + if SItem == nil { | |
35 | + | |
36 | + c.JSON(200, tools.ResponseError{ | |
37 | + 1, | |
38 | + "空", | |
39 | + }) | |
40 | + } else { | |
41 | + | |
42 | + c.JSON(200, tools.ResponseSeccess{ | |
43 | + 0, | |
44 | + SItem, | |
45 | + }) | |
46 | + } | |
47 | + | |
48 | +} | |
49 | + | |
50 | +// @Title 查询所有游玩项目 | |
51 | +// @Description 查询所有游玩项目 | |
52 | +// @Accept json | |
53 | +// @Produce json | |
54 | +// @Success 200 {object} tools.ResponseSeccess "Tags所属标签,标签有分类;LimitHeight限高;PlayDuration游玩时长;SceneTime场次时间;Picture照片;Voice音频;AverageConsumption平均消费;Menu菜单" | |
55 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
56 | +// @Router /AllItems? [get] | |
57 | +func AllItems(c *gin.Context) { | |
58 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
59 | + c.Header("Access-Control-Allow-Credentials", "true") | |
60 | + | |
61 | + var aItems []DB.SItem | |
62 | + DB.CItem.Find(bson.M{}).All(&aItems) | |
63 | + | |
64 | + c.JSON(200, aItems) | |
65 | + | |
66 | +} | |
67 | + | |
68 | +// @Title 更新设施 | |
69 | +// @Description 更新设施 | |
70 | +// @Accept json | |
71 | +// @Produce json | |
72 | +// @Success 200 {object} tools.ResponseSeccess "Tags所属标签,标签有分类;LimitHeight限高;PlayDuration游玩时长;SceneTime场次时间;Picture照片;Voice音频;AverageConsumption平均消费;Menu菜单" | |
73 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
74 | +// @Router /UpdateItem? [post] | |
75 | +func UpdateItem(c *gin.Context) { | |
76 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
77 | + c.Header("Access-Control-Allow-Credentials", "true") | |
78 | + | |
79 | + var Location DB.SLocation | |
80 | + json.Unmarshal([]byte(c.PostForm("Location")), &Location) | |
81 | + | |
82 | + var Tags []DB.STag | |
83 | + json.Unmarshal([]byte(c.PostForm("Tags")), &Tags) | |
84 | + | |
85 | + var Picture []string | |
86 | + json.Unmarshal([]byte(c.PostForm("Picture")), &Picture) | |
87 | + | |
88 | + var id bson.ObjectId | |
89 | + if pid := c.PostForm("id"); pid == "null" { | |
90 | + id = bson.NewObjectId() | |
91 | + } else { | |
92 | + id = bson.ObjectIdHex(pid) | |
93 | + } | |
94 | + | |
95 | + DB.CItem.UpsertId( | |
96 | + id, | |
97 | + bson.M{"$set": bson.M{ | |
98 | + "Name": c.PostForm("Name"), | |
99 | + "SubName": c.PostForm("SubName"), | |
100 | + "Location": Location, | |
101 | + "Icon": c.PostForm("Icon"), | |
102 | + "LimitHeight": c.PostForm("LimitHeight"), | |
103 | + "PlayDuration": c.PostForm("PlayDuration"), | |
104 | + "SceneTime": c.PostForm("SceneTime"), | |
105 | + "Picture": Picture, | |
106 | + "Voice": c.PostForm("Voice"), | |
107 | + "Tel": c.PostForm("Tel"), | |
108 | + "AverageConsumption": c.PostForm("AverageConsumption"), | |
109 | + "Menu": c.PostForm("Menu"), | |
110 | + "Tags": Tags, | |
111 | + }}, | |
112 | + ) | |
113 | + | |
114 | + c.JSON(200, tools.ResponseSeccess{ | |
115 | + 0, | |
116 | + "ok", | |
117 | + }) | |
118 | + | |
119 | +} | |
120 | + | |
121 | +type ItemTime struct { | |
122 | + Id string `json:"id"` | |
123 | + Time string `json:"time"` | |
124 | +} | |
125 | + | |
126 | + | |
127 | +// @Title 更新等待时间 | |
128 | +// @Description 更新等待时间 | |
129 | +// @Accept json | |
130 | +// @Produce json | |
131 | +// @Param item [{"id":"5df864740a9ac17ac7a7feb8","time":"20"},{"id":"5df8660924e03417008b4567","time":"33"}] string true "设备列表" | |
132 | +// @Success 200 {object} tools.ResponseSeccess "{errcode: 0, result: "ok"}" | |
133 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
134 | +// @Router /UpdateItemTime? [post] | |
135 | +func UpdateItemTime(c *gin.Context) { | |
136 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
137 | + c.Header("Access-Control-Allow-Credentials", "true") | |
138 | + | |
139 | + var ItemTime []ItemTime | |
140 | + json.Unmarshal([]byte(c.PostForm("items")), &ItemTime) | |
141 | + | |
142 | + for _, v := range ItemTime { | |
143 | + | |
144 | + DB.CItem.Update( | |
145 | + bson.M{"_id": bson.ObjectIdHex(v.Id)}, | |
146 | + bson.M{"$set": bson.M{ | |
147 | + "Time": v.Time, | |
148 | + }}, | |
149 | + ) | |
150 | + } | |
151 | + | |
152 | + c.JSON(200, tools.ResponseSeccess{ | |
153 | + 0, | |
154 | + "ok", | |
155 | + }) | |
156 | + | |
157 | +} | ... | ... |
1 | +++ a/API/Line.go | |
... | ... | @@ -0,0 +1,110 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "encoding/json" | |
5 | + "github.com/aarongao/tools" | |
6 | + "github.com/gin-gonic/gin" | |
7 | + "gopkg.in/mgo.v2/bson" | |
8 | + "letu/DB" | |
9 | +) | |
10 | + | |
11 | +// @Title 查询线路信息 | |
12 | +// @Description 查询线路信息 | |
13 | +// @Accept json | |
14 | +// @Produce json | |
15 | +// @Param id 5dfb03070a9ac17ac7a82054 string true "id" | |
16 | +// @Success 200 {object} tools.ResponseSeccess "Name名称;SubName副标题;PlayDuration游玩时长;Suitable适合人群;Location线路点坐标;Annotations需要点亮的设施id" | |
17 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
18 | +// @Router /LineInfo? [get] | |
19 | +func LineInfo(c *gin.Context) { | |
20 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
21 | + c.Header("Access-Control-Allow-Credentials", "true") | |
22 | + | |
23 | + if c.Query("id") == "" { | |
24 | + c.JSON(200, tools.ResponseError{ | |
25 | + 1, | |
26 | + "空", | |
27 | + }) | |
28 | + return | |
29 | + } | |
30 | + | |
31 | + var SLine *DB.SLine | |
32 | + DB.CLine.Find(bson.M{"_id": bson.ObjectIdHex(c.Query("id"))}).One(&SLine) | |
33 | + | |
34 | + if SLine == nil { | |
35 | + | |
36 | + c.JSON(200, tools.ResponseError{ | |
37 | + 1, | |
38 | + "空", | |
39 | + }) | |
40 | + } else { | |
41 | + | |
42 | + c.JSON(200, tools.ResponseSeccess{ | |
43 | + 0, | |
44 | + SLine, | |
45 | + }) | |
46 | + } | |
47 | + | |
48 | +} | |
49 | + | |
50 | +// @Title 查询所有线路 | |
51 | +// @Description 查询所有线路 | |
52 | +// @Accept json | |
53 | +// @Produce json | |
54 | +// @Success 200 {object} tools.ResponseSeccess "Name名称;SubName副标题;PlayDuration游玩时长;Suitable适合人群;Location线路点坐标;Annotations需要点亮的设施id" | |
55 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
56 | +// @Router /AllLine? [get] | |
57 | +func AllLine(c *gin.Context) { | |
58 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
59 | + c.Header("Access-Control-Allow-Credentials", "true") | |
60 | + | |
61 | + var aLine []DB.SLine | |
62 | + DB.CLine.Find(bson.M{}).All(&aLine) | |
63 | + | |
64 | + c.JSON(200, aLine) | |
65 | + | |
66 | +} | |
67 | + | |
68 | +// @Title 更新线路 | |
69 | +// @Description 更新线路 | |
70 | +// @Accept json | |
71 | +// @Produce json | |
72 | +// @Success 200 {object} tools.ResponseSeccess "" | |
73 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
74 | +// @Router /UpdateLine? [post] | |
75 | +func UpdateLine(c *gin.Context) { | |
76 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
77 | + c.Header("Access-Control-Allow-Credentials", "true") | |
78 | + | |
79 | + var Location []DB.SLocation | |
80 | + json.Unmarshal([]byte(c.PostForm("Location")), &Location) | |
81 | + | |
82 | + var Annotations []string | |
83 | + json.Unmarshal([]byte(c.PostForm("Annotations")), &Annotations) | |
84 | + | |
85 | + var id bson.ObjectId | |
86 | + if pid := c.PostForm("id"); pid == "null" { | |
87 | + id = bson.NewObjectId() | |
88 | + } else { | |
89 | + id = bson.ObjectIdHex(pid) | |
90 | + } | |
91 | + | |
92 | + DB.CLine.UpsertId( | |
93 | + id, | |
94 | + bson.M{"$set": bson.M{ | |
95 | + "Name": c.PostForm("Name"), | |
96 | + "SubName": c.PostForm("SubName"), | |
97 | + "PlayDuration": c.PostForm("PlayDuration"), | |
98 | + "Suitable": c.PostForm("Suitable"), | |
99 | + "Content": c.PostForm("Content"), | |
100 | + "Annotations": Annotations, | |
101 | + "Location": Location, | |
102 | + }}, | |
103 | + ) | |
104 | + | |
105 | + c.JSON(200, tools.ResponseSeccess{ | |
106 | + 0, | |
107 | + "ok", | |
108 | + }) | |
109 | + | |
110 | +} | ... | ... |
1 | +++ a/API/Scenic.go | |
... | ... | @@ -0,0 +1,123 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "encoding/json" | |
5 | + "github.com/aarongao/tools" | |
6 | + "github.com/gin-gonic/gin" | |
7 | + "gopkg.in/mgo.v2/bson" | |
8 | + "letu/DB" | |
9 | +) | |
10 | + | |
11 | +// @Title 返回景区基础信息 | |
12 | +// @Description 基础信息 | |
13 | +// @Accept json | |
14 | +// @Produce json | |
15 | +// @Param id 5dfb03070a9ac17ac7a82054 string true "景区id" | |
16 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Name":"名称","Describe":"介绍","OpenHours":"开放时间","Mobile":"电话","Address":"地址","SLocation":{"Latitude":0,"Longitude":0},"Picture":["照片1","照片2"]}}" | |
17 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
18 | +// @Router /ScenicInfo? [get] | |
19 | +func ScenicInfo(c *gin.Context) { | |
20 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
21 | + c.Header("Access-Control-Allow-Credentials", "true") | |
22 | + | |
23 | + if c.Query("id") == "" { | |
24 | + c.JSON(200, tools.ResponseError{ | |
25 | + 1, | |
26 | + "空", | |
27 | + }) | |
28 | + return | |
29 | + } | |
30 | + | |
31 | + var Scenic *DB.SScenic | |
32 | + DB.CScenic.Find(bson.M{"_id": bson.ObjectIdHex(c.Query("id"))}).One(&Scenic) | |
33 | + | |
34 | + if Scenic == nil { | |
35 | + | |
36 | + c.JSON(200, tools.ResponseError{ | |
37 | + 1, | |
38 | + "空", | |
39 | + }) | |
40 | + } else { | |
41 | + | |
42 | + c.JSON(200, tools.ResponseSeccess{ | |
43 | + 0, | |
44 | + Scenic, | |
45 | + }) | |
46 | + } | |
47 | + | |
48 | +} | |
49 | + | |
50 | +// @Title 更新景区基础信息 | |
51 | +// @Description 更新景区基础信息 | |
52 | +// @Accept json | |
53 | +// @Produce json | |
54 | +// @Param id 5dfb03070a9ac17ac7a82054 string true "景区id" | |
55 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Name":"名称","Describe":"介绍","OpenHours":"开放时间","Mobile":"电话","Address":"地址","SLocation":{"Latitude":0,"Longitude":0},"Picture":["照片1","照片2"]}}" | |
56 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
57 | +// @Router /UpdateScenic? [post] | |
58 | +func UpdateScenic(c *gin.Context) { | |
59 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
60 | + c.Header("Access-Control-Allow-Credentials", "true") | |
61 | + | |
62 | + var Location DB.SLocation | |
63 | + json.Unmarshal([]byte(c.PostForm("Location")), &Location) | |
64 | + | |
65 | + var Picture []string | |
66 | + json.Unmarshal([]byte(c.PostForm("Picture")), &Picture) | |
67 | + | |
68 | + var id bson.ObjectId | |
69 | + if pid := c.PostForm("id"); pid == "null" { | |
70 | + id = bson.NewObjectId() | |
71 | + } else { | |
72 | + id = bson.ObjectIdHex(pid) | |
73 | + } | |
74 | + | |
75 | + DB.CScenic.UpsertId( | |
76 | + id, | |
77 | + bson.M{"$set": bson.M{ | |
78 | + "Name": c.PostForm("Name"), | |
79 | + "Describe": c.PostForm("Describe"), | |
80 | + "Location": Location, | |
81 | + "OpenHours": c.PostForm("OpenHours"), | |
82 | + "Mobile": c.PostForm("Mobile"), | |
83 | + "Address": c.PostForm("Address"), | |
84 | + "Picture": Picture, | |
85 | + }}, | |
86 | + ) | |
87 | + | |
88 | + c.JSON(200, tools.ResponseSeccess{ | |
89 | + 0, | |
90 | + "ok", | |
91 | + }) | |
92 | + | |
93 | +} | |
94 | + | |
95 | +// @Title 所有景区基础信息 | |
96 | +// @Description 所有景区基础信息 | |
97 | +// @Accept json | |
98 | +// @Produce json | |
99 | +// @Success 200 {object} tools.ResponseSeccess "" | |
100 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
101 | +// @Router /AllScenic? [get] | |
102 | +func AllScenic(c *gin.Context) { | |
103 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
104 | + c.Header("Access-Control-Allow-Credentials", "true") | |
105 | + | |
106 | + var Scenic []*DB.SScenic | |
107 | + DB.CScenic.Find(bson.M{}).All(&Scenic) | |
108 | + | |
109 | + if Scenic == nil { | |
110 | + | |
111 | + c.JSON(200, tools.ResponseError{ | |
112 | + 1, | |
113 | + "空", | |
114 | + }) | |
115 | + } else { | |
116 | + | |
117 | + c.JSON(200, tools.ResponseSeccess{ | |
118 | + 0, | |
119 | + Scenic, | |
120 | + }) | |
121 | + } | |
122 | + | |
123 | +} | ... | ... |
1 | +++ a/API/Shop.go | |
... | ... | @@ -0,0 +1,113 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "encoding/json" | |
5 | + "github.com/aarongao/tools" | |
6 | + "github.com/gin-gonic/gin" | |
7 | + "gopkg.in/mgo.v2/bson" | |
8 | + "letu/DB" | |
9 | +) | |
10 | + | |
11 | +// @Title 查询商品信息 | |
12 | +// @Description 查询商品信息 | |
13 | +// @Accept json | |
14 | +// @Produce json | |
15 | +// @Param id 5dfb03070a9ac17ac7a82054 string true "id" | |
16 | +// @Success 200 {object} tools.ResponseSeccess "Price=价格;ShopName=店铺名称;KvPhoto用于列表页的图片;TopPhoto详情页最上面的轮播图;Images详情页下面的产品详细图" | |
17 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
18 | +// @Router /CommodityInfo? [get] | |
19 | +func CommodityInfo(c *gin.Context) { | |
20 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
21 | + c.Header("Access-Control-Allow-Credentials", "true") | |
22 | + | |
23 | + if c.Query("id") == "" { | |
24 | + c.JSON(200, tools.ResponseError{ | |
25 | + 1, | |
26 | + "空", | |
27 | + }) | |
28 | + return | |
29 | + } | |
30 | + | |
31 | + var SCommodity *DB.SCommodity | |
32 | + DB.CCommodity.Find(bson.M{"_id": bson.ObjectIdHex(c.Query("id"))}).One(&SCommodity) | |
33 | + | |
34 | + if SCommodity == nil { | |
35 | + | |
36 | + c.JSON(200, tools.ResponseError{ | |
37 | + 1, | |
38 | + "空", | |
39 | + }) | |
40 | + } else { | |
41 | + | |
42 | + c.JSON(200, tools.ResponseSeccess{ | |
43 | + 0, | |
44 | + SCommodity, | |
45 | + }) | |
46 | + } | |
47 | + | |
48 | +} | |
49 | + | |
50 | +// @Title 查询所有商品 | |
51 | +// @Description 查询所有商品 | |
52 | +// @Accept json | |
53 | +// @Produce json | |
54 | +// @Success 200 {object} tools.ResponseSeccess "Price=价格;ShopName=店铺名称;KvPhoto用于列表页的图片;TopPhoto详情页最上面的轮播图;Images详情页下面的产品详细图" | |
55 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
56 | +// @Router /AllCommodity? [get] | |
57 | +func AllCommodity(c *gin.Context) { | |
58 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
59 | + c.Header("Access-Control-Allow-Credentials", "true") | |
60 | + | |
61 | + var aCommoditys []DB.SCommodity | |
62 | + DB.CCommodity.Find(bson.M{}).All(&aCommoditys) | |
63 | + | |
64 | + c.JSON(200, aCommoditys) | |
65 | + | |
66 | +} | |
67 | + | |
68 | +// @Title 更新商品 | |
69 | +// @Description 更新商品 | |
70 | +// @Accept json | |
71 | +// @Produce json | |
72 | +// @Success 200 {object} tools.ResponseSeccess "" | |
73 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
74 | +// @Router /UpdateCommodity? [post] | |
75 | +func UpdateCommodity(c *gin.Context) { | |
76 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
77 | + c.Header("Access-Control-Allow-Credentials", "true") | |
78 | + | |
79 | + var Picture []string | |
80 | + json.Unmarshal([]byte(c.PostForm("Images")), &Picture) | |
81 | + | |
82 | + var TopPhoto []string | |
83 | + json.Unmarshal([]byte(c.PostForm("TopPhoto")), &TopPhoto) | |
84 | + | |
85 | + var Location DB.SLocation | |
86 | + json.Unmarshal([]byte(c.PostForm("Location")), &Location) | |
87 | + | |
88 | + var id bson.ObjectId | |
89 | + if pid := c.PostForm("id"); pid == "null" { | |
90 | + id = bson.NewObjectId() | |
91 | + } else { | |
92 | + id = bson.ObjectIdHex(pid) | |
93 | + } | |
94 | + | |
95 | + DB.CCommodity.UpsertId( | |
96 | + id, | |
97 | + bson.M{"$set": bson.M{ | |
98 | + "Name": c.PostForm("Name"), | |
99 | + "Price": c.PostForm("Price"), | |
100 | + "ShopName": c.PostForm("ShopName"), | |
101 | + "KvPhoto": c.PostForm("KvPhoto"), | |
102 | + "TopPhoto": TopPhoto, | |
103 | + "Location": Location, | |
104 | + "Images": Picture, | |
105 | + }}, | |
106 | + ) | |
107 | + | |
108 | + c.JSON(200, tools.ResponseSeccess{ | |
109 | + 0, | |
110 | + "ok", | |
111 | + }) | |
112 | + | |
113 | +} | ... | ... |
1 | +++ a/API/Tag.go | |
... | ... | @@ -0,0 +1,105 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "github.com/aarongao/tools" | |
5 | + "github.com/gin-gonic/gin" | |
6 | + "gopkg.in/mgo.v2/bson" | |
7 | + "letu/DB" | |
8 | +) | |
9 | + | |
10 | +// @Title 标签列表 | |
11 | +// @Description 标签列表 | |
12 | +// @Accept json | |
13 | +// @Produce json | |
14 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":[{"Type":"menu","Name":"服务设施"},{"Type":"normal","Name":"不错"},{"Type":"thrilling","Name":"刺激"},{"Type":"recommend","Name":"必玩"}]}" | |
15 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
16 | +// @Router /Tags? [get] | |
17 | +func AllTag(c *gin.Context) { | |
18 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
19 | + c.Header("Access-Control-Allow-Credentials", "true") | |
20 | + | |
21 | + | |
22 | + var Stags []*DB.STag | |
23 | + DB.CTags.Find(bson.M{}).All(&Stags) | |
24 | + | |
25 | + if Stags == nil { | |
26 | + | |
27 | + c.JSON(200, tools.ResponseError{ | |
28 | + 1, | |
29 | + "空", | |
30 | + }) | |
31 | + } else { | |
32 | + | |
33 | + | |
34 | + c.JSON(200, tools.ResponseSeccess{ | |
35 | + 0, | |
36 | + Stags, | |
37 | + }) | |
38 | + } | |
39 | + | |
40 | +} | |
41 | + | |
42 | +// @Title 创建标签 | |
43 | +// @Description 创建标签 | |
44 | +// @Accept json | |
45 | +// @Produce json | |
46 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":[{"Type":"menu","Name":"服务设施"},{"Type":"normal","Name":"不错"},{"Type":"thrilling","Name":"刺激"},{"Type":"recommend","Name":"必玩"}]}" | |
47 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
48 | +// @Router /CreateTag? [post] | |
49 | +func CreateTag(c *gin.Context) { | |
50 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
51 | + c.Header("Access-Control-Allow-Credentials", "true") | |
52 | + | |
53 | + | |
54 | + var Stags []*DB.STag | |
55 | + DB.CTags.Find(bson.M{}).All(&Stags) | |
56 | + | |
57 | + if Stags == nil { | |
58 | + | |
59 | + c.JSON(200, tools.ResponseError{ | |
60 | + 1, | |
61 | + "空", | |
62 | + }) | |
63 | + } else { | |
64 | + | |
65 | + | |
66 | + c.JSON(200, tools.ResponseSeccess{ | |
67 | + 0, | |
68 | + Stags, | |
69 | + }) | |
70 | + } | |
71 | + | |
72 | +} | |
73 | + | |
74 | + | |
75 | +// @Title 更新标签 | |
76 | +// @Description 更新标签 | |
77 | +// @Accept json | |
78 | +// @Produce json | |
79 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":[{"Type":"menu","Name":"服务设施"},{"Type":"normal","Name":"不错"},{"Type":"thrilling","Name":"刺激"},{"Type":"recommend","Name":"必玩"}]}" | |
80 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
81 | +// @Router /UpdateTag? [post] | |
82 | +func UpdateTag(c *gin.Context) { | |
83 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
84 | + c.Header("Access-Control-Allow-Credentials", "true") | |
85 | + | |
86 | + | |
87 | + var Stags []*DB.STag | |
88 | + DB.CTags.Find(bson.M{}).All(&Stags) | |
89 | + | |
90 | + if Stags == nil { | |
91 | + | |
92 | + c.JSON(200, tools.ResponseError{ | |
93 | + 1, | |
94 | + "空", | |
95 | + }) | |
96 | + } else { | |
97 | + | |
98 | + | |
99 | + c.JSON(200, tools.ResponseSeccess{ | |
100 | + 0, | |
101 | + Stags, | |
102 | + }) | |
103 | + } | |
104 | + | |
105 | +} | ... | ... |
1 | +++ a/API/Upload.go | |
... | ... | @@ -0,0 +1,49 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "fmt" | |
5 | + "github.com/aarongao/tools" | |
6 | + "github.com/gin-gonic/gin" | |
7 | + "path" | |
8 | + "strconv" | |
9 | + "time" | |
10 | +) | |
11 | + | |
12 | +// @Title 上传文件 | |
13 | +// @Description 上传 | |
14 | +// @Accept json | |
15 | +// @Produce json | |
16 | +// @Param file 1 file true "文件" | |
17 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"图片地址"}" | |
18 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
19 | +// @Router /Upload? [post] | |
20 | +func Upload(c *gin.Context) { | |
21 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
22 | + c.Header("Access-Control-Allow-Credentials", "true") | |
23 | + | |
24 | + file, err := c.FormFile("file") | |
25 | + if err != nil { | |
26 | + c.JSON(200, tools.ResponseError{ | |
27 | + 1, | |
28 | + "a Bad request", | |
29 | + }) | |
30 | + return | |
31 | + } | |
32 | + | |
33 | + fileName := file.Filename | |
34 | + fileExt := path.Ext(fileName) | |
35 | + filePath := "Upload/" + strconv.Itoa(int(time.Now().UnixNano())) + fileExt | |
36 | + | |
37 | + if err := c.SaveUploadedFile(file, filePath); err != nil { | |
38 | + fmt.Println(err) | |
39 | + c.JSON(200, tools.ResponseError{ | |
40 | + 1, | |
41 | + "upload file err", | |
42 | + }) | |
43 | + return | |
44 | + } | |
45 | + c.JSON(200, tools.ResponseSeccess{ | |
46 | + 0, | |
47 | + "/" + filePath, | |
48 | + }) | |
49 | +} | ... | ... |
1 | +++ a/API/User.go | |
... | ... | @@ -0,0 +1,147 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "crypto/sha256" | |
5 | + "encoding/hex" | |
6 | + "github.com/aarongao/tools" | |
7 | + "github.com/gin-gonic/gin" | |
8 | + "gopkg.in/mgo.v2/bson" | |
9 | + "letu/DB" | |
10 | + "strconv" | |
11 | + "time" | |
12 | +) | |
13 | + | |
14 | +// @Title 创建用户 | |
15 | +// @Description 用户注册 | |
16 | +// @Accept json | |
17 | +// @Produce json | |
18 | +// @Param password 1 string true "密码" | |
19 | +// @Param confirmpassword 1 string true "确认密码" | |
20 | +// @Param birthday 2010.10.10 string true "生日" | |
21 | +// @Param fullname aarongao string true "全名" | |
22 | +// @Param mobile 18616619599 string true "手机,同用户名" | |
23 | +// @Param openid 12345 string true "微信id" | |
24 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":"ok"}" | |
25 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
26 | +// @Router /CreateUser? [post] | |
27 | +func CreateUser(c *gin.Context) { | |
28 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
29 | + c.Header("Access-Control-Allow-Credentials", "true") | |
30 | + | |
31 | + if c.PostForm("mobile") == "" || c.PostForm("password") != c.PostForm("confirmpassword") { | |
32 | + c.JSON(200, tools.ResponseError{ | |
33 | + 1, | |
34 | + "密码错误", | |
35 | + }) | |
36 | + return | |
37 | + } | |
38 | + | |
39 | + objectID := bson.NewObjectId() | |
40 | + DB.CMember.Insert(DB.SMember{ | |
41 | + &objectID, | |
42 | + c.PostForm("password"), | |
43 | + c.PostForm("birthday"), | |
44 | + c.PostForm("fullname"), | |
45 | + c.PostForm("mobile"), | |
46 | + c.PostForm("openid"), | |
47 | + "", | |
48 | + }) | |
49 | + | |
50 | + c.JSON(200, tools.ResponseSeccess{ | |
51 | + 0, | |
52 | + "ok", | |
53 | + }) | |
54 | + | |
55 | +} | |
56 | + | |
57 | +// @Title 登录 | |
58 | +// @Description 用户登录 | |
59 | +// @Accept json | |
60 | +// @Produce json | |
61 | +// @Param mobile aaron string true "用户名" | |
62 | +// @Param password 1 string true "密码" | |
63 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Id":"5e09c64c1c09c6f0f7ca2fa9","Username":"admin","Password":"123","Birthday":"","FullName":"","Mobile":"","Openid":"","Token":"640bf934e425aba5d3c90998b2641f2f0ca07261d334d9615d1cd4790b5f34e7"}} 调用其它需要登陆的接口时携带token,有过期时间" | |
64 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
65 | +// @Router /LoginUser? [post] | |
66 | +func LoginUser(c *gin.Context) { | |
67 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
68 | + c.Header("Access-Control-Allow-Credentials", "true") | |
69 | + | |
70 | + if c.PostForm("mobile") == "" || c.PostForm("password") == "" { | |
71 | + c.JSON(200, tools.ResponseError{ | |
72 | + 1, | |
73 | + "空", | |
74 | + }) | |
75 | + return | |
76 | + } | |
77 | + | |
78 | + var User *DB.SMember | |
79 | + DB.CMember.Find(bson.M{"Mobile": c.PostForm("mobile"), "Password": c.PostForm("password")}).One(&User) | |
80 | + | |
81 | + if User == nil { | |
82 | + | |
83 | + c.JSON(200, tools.ResponseError{ | |
84 | + 1, | |
85 | + "空", | |
86 | + }) | |
87 | + } else { | |
88 | + | |
89 | + // 生成token | |
90 | + tokenunit8 := sha256.Sum256([]byte(c.PostForm("mobile") + c.PostForm("password") + strconv.FormatInt(time.Now().UnixNano(), 10))) | |
91 | + token := hex.EncodeToString(tokenunit8[:32]) | |
92 | + // 更新用户信息 | |
93 | + DB.CMember.Update( | |
94 | + bson.M{"_id": User.Id}, | |
95 | + bson.M{"$set": bson.M{"Token": token}}, | |
96 | + ) | |
97 | + | |
98 | + User.Token = token | |
99 | + c.JSON(200, tools.ResponseSeccess{ | |
100 | + 0, | |
101 | + User, | |
102 | + }) | |
103 | + } | |
104 | + | |
105 | +} | |
106 | + | |
107 | + | |
108 | + | |
109 | +// @Title 用户信息 | |
110 | +// @Description 获取用户信息 | |
111 | +// @Accept json | |
112 | +// @Produce json | |
113 | +// @Param id aaron string true "用户id" | |
114 | +// @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Id":"5e09c64c1c09c6f0f7ca2fa9","Username":"admin","Password":"123","Birthday":"","FullName":"","Mobile":"","Openid":"","Token":"640bf934e425aba5d3c90998b2641f2f0ca07261d334d9615d1cd4790b5f34e7"}}" | |
115 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
116 | +// @Router /UserInfo? [get] | |
117 | +func UserInfo(c *gin.Context) { | |
118 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
119 | + c.Header("Access-Control-Allow-Credentials", "true") | |
120 | + | |
121 | + if c.Query("id") == ""{ | |
122 | + c.JSON(200, tools.ResponseError{ | |
123 | + 1, | |
124 | + "空", | |
125 | + }) | |
126 | + return | |
127 | + } | |
128 | + | |
129 | + var User *DB.SMember | |
130 | + DB.CMember.Find(bson.M{"_id": bson.ObjectIdHex(c.Query("id"))}).One(&User) | |
131 | + | |
132 | + if User == nil { | |
133 | + | |
134 | + c.JSON(200, tools.ResponseError{ | |
135 | + 1, | |
136 | + "空", | |
137 | + }) | |
138 | + } else { | |
139 | + | |
140 | + | |
141 | + c.JSON(200, tools.ResponseSeccess{ | |
142 | + 0, | |
143 | + User, | |
144 | + }) | |
145 | + } | |
146 | + | |
147 | +} | ... | ... |
1 | +++ a/API/Ws.go | |
... | ... | @@ -0,0 +1,58 @@ |
1 | +package Api | |
2 | + | |
3 | +import ( | |
4 | + "fmt" | |
5 | + "github.com/gin-gonic/gin" | |
6 | + "github.com/gorilla/websocket" | |
7 | + uuid "github.com/satori/go.uuid" | |
8 | + "letu/Lib/Ws" | |
9 | +) | |
10 | + | |
11 | +var wsupgrader = websocket.Upgrader{ | |
12 | + ReadBufferSize: 1024, | |
13 | + WriteBufferSize: 1024, | |
14 | +} | |
15 | + | |
16 | +func WsPage(c *gin.Context) { | |
17 | + | |
18 | + conn, err := wsupgrader.Upgrade(c.Writer, c.Request, nil) | |
19 | + if err != nil { | |
20 | + fmt.Println("Failed to set websocket upgrade: %+v", err) | |
21 | + return | |
22 | + } | |
23 | + | |
24 | + // websocket connect | |
25 | + _uuid, _ := uuid.NewV4() | |
26 | + client := &Ws.Client{ | |
27 | + _uuid.String(), | |
28 | + conn, | |
29 | + } | |
30 | + | |
31 | + Ws.Manager.Register <- client | |
32 | + | |
33 | + for { | |
34 | + _, msg, err := conn.ReadMessage() | |
35 | + if err != nil { | |
36 | + println(err.Error()) | |
37 | + Ws.Manager.Unregister <- client | |
38 | + client.Socket.Close() | |
39 | + break | |
40 | + } | |
41 | + | |
42 | + sMsg := string(msg) | |
43 | + println("收到消息:", sMsg) | |
44 | + | |
45 | + switch sMsg { | |
46 | + case "test": | |
47 | + client.Send([]byte("hahaha")) | |
48 | + case "test2": | |
49 | + client.Send([]byte("hahaha2")) | |
50 | + | |
51 | + | |
52 | + } | |
53 | + | |
54 | + | |
55 | + | |
56 | + } | |
57 | + | |
58 | +} | ... | ... |
1 | +++ a/DB/db.go | |
... | ... | @@ -0,0 +1,93 @@ |
1 | +package DB | |
2 | + | |
3 | +import ( | |
4 | + "gopkg.in/mgo.v2" | |
5 | + "gopkg.in/mgo.v2/bson" | |
6 | +) | |
7 | + | |
8 | +var DBSession *mgo.Session | |
9 | +var CItem *mgo.Collection //所有游玩项目内容 | |
10 | +var CComplaint *mgo.Collection //投诉 | |
11 | +var CInvestigation *mgo.Collection //调查 | |
12 | +var CMember *mgo.Collection //会员 | |
13 | +var CCommodity *mgo.Collection //商城 | |
14 | +var CTags *mgo.Collection //标签 | |
15 | +var CScenic *mgo.Collection //景区 | |
16 | +var CLine *mgo.Collection //推荐线路 | |
17 | +var DB *mgo.Database | |
18 | + | |
19 | +type SItem struct { | |
20 | + Id *bson.ObjectId `bson:"_id" json:"Id" valid:"required"` | |
21 | + Name string `bson:"Name" json:"Name"` | |
22 | + SubName string `bson:"SubName" json:"SubName"` | |
23 | + Location SLocation `bson:"Location" json:"Location"` | |
24 | + Tags []STag `bson:"Tags" json:"Tags"` | |
25 | + Icon string `bson:"Icon" json:"Icon"` | |
26 | + LimitHeight string `bson:"LimitHeight" json:"LimitHeight"` | |
27 | + PlayDuration string `bson:"PlayDuration" json:"PlayDuration"` | |
28 | + SceneTime string `bson:"SceneTime" json:"SceneTime"` | |
29 | + Picture []string `bson:"Picture" json:"Picture"` | |
30 | + Voice string `bson:"Voice" json:"Voice"` | |
31 | + Tel string `bson:"Tel" json:"Tel"` | |
32 | + AverageConsumption string `bson:"AverageConsumption" json:"AverageConsumption"` | |
33 | + Menu string `bson:"Menu" json:"Menu"` | |
34 | + Time string `bson:"Time" json:"Time"` | |
35 | +} | |
36 | +type SLocation struct { | |
37 | + Latitude float64 `bson:"Latitude" json:"Latitude"` | |
38 | + Longitude float64 `bson:"Longitude" json:"Longitude"` | |
39 | +} | |
40 | +type SCommodity struct { | |
41 | + Id *bson.ObjectId `bson:"_id" json:"Id" valid:"required"` | |
42 | + Name string `bson:"Name" json:"Name"` | |
43 | + Price string `bson:"Price" json:"Price"` | |
44 | + ShopName string `bson:"ShopName" json:"ShopName"` | |
45 | + Location SLocation `bson:"Location" json:"Location"` | |
46 | + KvPhoto string `bson:"KvPhoto" json:"KvPhoto"` | |
47 | + TopPhoto []string `bson:"TopPhoto" json:"TopPhoto"` | |
48 | + Images []string `bson:"Images" json:"Images"` | |
49 | +} | |
50 | +type SLine struct { | |
51 | + Id *bson.ObjectId `bson:"_id" json:"Id" valid:"required"` | |
52 | + Name string `bson:"Name" json:"Name"` | |
53 | + SubName string `bson:"SubName" json:"SubName"` | |
54 | + Location []SLocation `bson:"Location" json:"Location"` | |
55 | + PlayDuration string `bson:"PlayDuration" json:"PlayDuration"` | |
56 | + Suitable string `bson:"Suitable" json:"Suitable"` | |
57 | + Content string `bson:"Content" json:"Content"` | |
58 | + Annotations []string `bson:"Annotations" json:"Annotations"` | |
59 | +} | |
60 | + | |
61 | +type SComplaint struct { | |
62 | + Type string `bson:"Type" json:"Type"` | |
63 | + Mobile string `bson:"Mobile" json:"Mobile"` | |
64 | + Content string `bson:"Content" json:"Content"` | |
65 | + Image []string `bson:"Image" json:"Image"` | |
66 | +} | |
67 | + | |
68 | +type SInvestigation struct { | |
69 | +} | |
70 | +type SMember struct { | |
71 | + Id *bson.ObjectId `bson:"_id" json:"Id" valid:"required"` | |
72 | + Password string `bson:"Password" json:"Password"` | |
73 | + Birthday string `bson:"Birthday" json:"Birthday"` | |
74 | + FullName string `bson:"FullName" json:"FullName"` | |
75 | + Mobile string `bson:"Mobile" json:"Mobile"` | |
76 | + Openid string `bson:"Openid" json:"Openid"` | |
77 | + Token string `bson:"Token" json:"Token"` | |
78 | +} | |
79 | + | |
80 | +type STag struct { | |
81 | + Type string `bson:"Type" json:"Type"` | |
82 | + Name string `bson:"Name" json:"Name"` | |
83 | +} | |
84 | +type SScenic struct { | |
85 | + Id *bson.ObjectId `bson:"_id" json:"Id" valid:"required"` | |
86 | + Name string `bson:"Name" json:"Name"` | |
87 | + Describe string `bson:"Describe" json:"Describe"` | |
88 | + OpenHours string `bson:"OpenHours" json:"OpenHours"` | |
89 | + Mobile string `bson:"Mobile" json:"Mobile"` | |
90 | + Address string `bson:"Address" json:"Address"` | |
91 | + Location SLocation `bson:"Location" json:"Location"` | |
92 | + Picture []string `bson:"Picture" json:"Picture"` | |
93 | +} | ... | ... |
1 | +++ a/Lib/Ws/Ws.go | |
... | ... | @@ -0,0 +1,71 @@ |
1 | +package Ws | |
2 | + | |
3 | +import ( | |
4 | + "encoding/json" | |
5 | + "github.com/gorilla/websocket" | |
6 | +) | |
7 | + | |
8 | +// ClientManager is a websocket manager | |
9 | +type ClientManager struct { | |
10 | + Clients map[*Client]bool | |
11 | + Broadcast chan []byte | |
12 | + Register chan *Client | |
13 | + Unregister chan *Client | |
14 | +} | |
15 | + | |
16 | +// Client is a websocket client | |
17 | +type Client struct { | |
18 | + ID string | |
19 | + Socket *websocket.Conn | |
20 | +} | |
21 | + | |
22 | +// Message is an object for websocket message which is mapped to json type | |
23 | +type Message struct { | |
24 | + Sender string `json:"sender,omitempty"` | |
25 | + Recipient string `json:"recipient,omitempty"` | |
26 | + Content string `json:"content,omitempty"` | |
27 | +} | |
28 | + | |
29 | +// Manager define a ws server manager | |
30 | +var Manager = ClientManager{ | |
31 | + Broadcast: make(chan []byte), | |
32 | + Register: make(chan *Client), | |
33 | + Unregister: make(chan *Client), | |
34 | + Clients: make(map[*Client]bool), | |
35 | +} | |
36 | + | |
37 | +// Start is to start a ws server | |
38 | +func (manager *ClientManager) Start() { | |
39 | + for { | |
40 | + select { | |
41 | + case conn := <-manager.Register: | |
42 | + manager.Clients[conn] = true | |
43 | + jsonMessage, _ := json.Marshal(&Message{Content: "/A new socket has connected."}) | |
44 | + manager.Send(jsonMessage, conn) | |
45 | + case conn := <-manager.Unregister: | |
46 | + if _, ok := manager.Clients[conn]; ok { | |
47 | + delete(manager.Clients, conn) | |
48 | + jsonMessage, _ := json.Marshal(&Message{Content: "/A socket has disconnected."}) | |
49 | + manager.Send(jsonMessage, conn) | |
50 | + } | |
51 | + case message := <-manager.Broadcast: | |
52 | + for conn := range manager.Clients { | |
53 | + conn.Socket.WriteMessage(1, message) | |
54 | + } | |
55 | + } | |
56 | + } | |
57 | +} | |
58 | + | |
59 | +// Send is to send ws message to ws client | |
60 | +func (manager *ClientManager) Send(message []byte, ignore *Client) { | |
61 | + for conn := range manager.Clients { | |
62 | + if conn != ignore { | |
63 | + conn.Socket.WriteMessage(1, message) | |
64 | + } | |
65 | + } | |
66 | +} | |
67 | + | |
68 | + | |
69 | +func (c *Client) Send(message []byte) { | |
70 | + c.Socket.WriteMessage(websocket.TextMessage, message) | |
71 | +} | |
0 | 72 | \ No newline at end of file | ... | ... |
1 | +++ a/main.go | |
... | ... | @@ -0,0 +1,76 @@ |
1 | +package main | |
2 | + | |
3 | +import ( | |
4 | + "encoding/json" | |
5 | + "github.com/aarongao/tools" | |
6 | + "github.com/gin-gonic/gin" | |
7 | + "gopkg.in/mgo.v2" | |
8 | + "letu/Api" | |
9 | + "letu/Config" | |
10 | + "letu/DB" | |
11 | + "letu/Lib/Ws" | |
12 | + "os" | |
13 | +) | |
14 | + | |
15 | +// @APIVersion 1.0.0 | |
16 | +// @APITitle 乐游图后端接口文档 | |
17 | +// @BasePath https://letu.api.imagchina.com | |
18 | +func main() { | |
19 | + | |
20 | + // 读取配置文件 | |
21 | + dir, _ := os.Getwd() | |
22 | + //println(dir) | |
23 | + file, _ := os.Open(dir + "/Config/config.json") | |
24 | + defer file.Close() | |
25 | + decoder := json.NewDecoder(file) | |
26 | + conf := Config.Config{} | |
27 | + err := decoder.Decode(&conf) | |
28 | + tools.CheckError(err) | |
29 | + | |
30 | + // 连接数据库 | |
31 | + DB.DBSession, err = mgo.Dial(conf.DbPath) | |
32 | + defer DB.DBSession.Close() | |
33 | + //设置模式 | |
34 | + DB.DBSession.SetMode(mgo.Monotonic, true) | |
35 | + //获取文档集 | |
36 | + DB.DB = DB.DBSession.DB("LeYouTu") | |
37 | + DB.CItem = DB.DB.C("Item") | |
38 | + DB.CComplaint = DB.DB.C("Complaint") | |
39 | + DB.CInvestigation = DB.DB.C("Investigation") | |
40 | + DB.CMember = DB.DB.C("Member") | |
41 | + DB.CCommodity = DB.DB.C("Commodity") | |
42 | + DB.CTags = DB.DB.C("Tags") | |
43 | + DB.CScenic = DB.DB.C("Scenic") | |
44 | + DB.CLine = DB.DB.C("Line") | |
45 | + | |
46 | + r := gin.Default() | |
47 | + //r.Static("/.well-known", "./.well-known/") | |
48 | + r.Static("/tiles", dir+"/tiles") | |
49 | + r.GET("/AllItems", Api.AllItems) | |
50 | + r.GET("/AllCommodity", Api.AllCommodity) | |
51 | + r.GET("/AllLine", Api.AllLine) | |
52 | + r.GET("/ItemInfo", Api.ItemInfo) | |
53 | + r.GET("/CommodityInfo", Api.CommodityInfo) | |
54 | + r.POST("/CreateComplaint", Api.CreateComplaint) | |
55 | + r.POST("/CreateUser", Api.CreateUser) | |
56 | + r.POST("/LoginUser", Api.LoginUser) | |
57 | + r.GET("/UserInfo", Api.UserInfo) | |
58 | + r.GET("/ScenicInfo", Api.ScenicInfo) | |
59 | + r.GET("/LineInfo", Api.LineInfo) | |
60 | + r.GET("/AllTag", Api.AllTag) | |
61 | + r.POST("/CreateTag", Api.CreateTag) | |
62 | + r.POST("/UpdateTag", Api.UpdateTag) | |
63 | + r.POST("/Upload", Api.Upload) | |
64 | + r.POST("/UpdateItem", Api.UpdateItem) | |
65 | + r.POST("/UpdateCommodity", Api.UpdateCommodity) | |
66 | + r.POST("/UpdateLine", Api.UpdateLine) | |
67 | + r.POST("/UpdateScenic", Api.UpdateScenic) | |
68 | + r.POST("/UpdateItemTime", Api.UpdateItemTime) | |
69 | + r.GET("/AllScenic", Api.AllScenic) | |
70 | + //r.GET("/ws", Api.WsPage) | |
71 | + | |
72 | + r.Static("/Upload", "./Upload") | |
73 | + r.Static("/Console", "./Console") | |
74 | + go Ws.Manager.Start() | |
75 | + r.Run(":8080") | |
76 | +} | ... | ... |