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"` | |