diff --git a/doc/03_软件需求规格说明书.docx b/doc/03_软件需求规格说明书.docx
new file mode 100644
index 0000000..435bed6
Binary files /dev/null and b/doc/03_软件需求规格说明书.docx differ
diff --git a/doc/04_软件设计规格说明书.docx b/doc/04_软件设计规格说明书.docx
new file mode 100644
index 0000000..27d4789
Binary files /dev/null and b/doc/04_软件设计规格说明书.docx differ
diff --git a/other/05_开发软件系统实践的汇报PPT.pptx b/other/05_开发软件系统实践的汇报PPT.pptx
new file mode 100644
index 0000000..dab034a
Binary files /dev/null and b/other/05_开发软件系统实践的汇报PPT.pptx differ
diff --git a/other/06_软件开发项目的个人自评报告.xlsx b/other/06_软件开发项目的个人自评报告.xlsx
new file mode 100644
index 0000000..259c845
Binary files /dev/null and b/other/06_软件开发项目的个人自评报告.xlsx differ
diff --git a/other/07_软件开发项目的团队自评报告.xlsx b/other/07_软件开发项目的团队自评报告.xlsx
new file mode 100644
index 0000000..e6fc63a
Binary files /dev/null and b/other/07_软件开发项目的团队自评报告.xlsx differ
diff --git a/other/08_210340092陈冠京-实践总结报告.docx b/other/08_210340092陈冠京-实践总结报告.docx
new file mode 100644
index 0000000..4659384
Binary files /dev/null and b/other/08_210340092陈冠京-实践总结报告.docx differ
diff --git a/other/08_210340092陈庆豪-实践总结报告.docx b/other/08_210340092陈庆豪-实践总结报告.docx
new file mode 100644
index 0000000..d0f8dbb
Binary files /dev/null and b/other/08_210340092陈庆豪-实践总结报告.docx differ
diff --git a/other/08_210340093陈秀川-实践总结报告.docx b/other/08_210340093陈秀川-实践总结报告.docx
new file mode 100644
index 0000000..e9a7ac4
Binary files /dev/null and b/other/08_210340093陈秀川-实践总结报告.docx differ
diff --git a/other/08_210340094陈致锟-实践总结报告.docx b/other/08_210340094陈致锟-实践总结报告.docx
new file mode 100644
index 0000000..84cc588
Binary files /dev/null and b/other/08_210340094陈致锟-实践总结报告.docx differ
diff --git a/other/08_210340095程亮杰-实践总结报告.docx b/other/08_210340095程亮杰-实践总结报告.docx
new file mode 100644
index 0000000..7d438a1
Binary files /dev/null and b/other/08_210340095程亮杰-实践总结报告.docx differ
diff --git a/other/09_系统演示视频.mp4 b/other/09_系统演示视频.mp4
new file mode 100644
index 0000000..bc45d0d
Binary files /dev/null and b/other/09_系统演示视频.mp4 differ
diff --git a/other/10_系统宣传海报.png b/other/10_系统宣传海报.png
new file mode 100644
index 0000000..ea9ef50
Binary files /dev/null and b/other/10_系统宣传海报.png differ
diff --git a/other/新建文本文档.txt b/other/新建文本文档.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/.idea/.gitignore b/src/.idea/.gitignore
new file mode 100644
index 0000000..35410ca
--- /dev/null
+++ b/src/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/src/.idea/.name b/src/.idea/.name
new file mode 100644
index 0000000..553e87d
--- /dev/null
+++ b/src/.idea/.name
@@ -0,0 +1 @@
+asset.html
\ No newline at end of file
diff --git a/src/.idea/dataSources.xml b/src/.idea/dataSources.xml
new file mode 100644
index 0000000..f716c10
--- /dev/null
+++ b/src/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ mysql.8
+ true
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://localhost:3306
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/src/.idea/libraries/lib.xml b/src/.idea/libraries/lib.xml
new file mode 100644
index 0000000..88fdf79
--- /dev/null
+++ b/src/.idea/libraries/lib.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/misc.xml b/src/.idea/misc.xml
new file mode 100644
index 0000000..6e86672
--- /dev/null
+++ b/src/.idea/misc.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/modules.xml b/src/.idea/modules.xml
new file mode 100644
index 0000000..d51d2bf
--- /dev/null
+++ b/src/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/.idea/sqldialects.xml b/src/.idea/sqldialects.xml
new file mode 100644
index 0000000..0fabb4c
--- /dev/null
+++ b/src/.idea/sqldialects.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Go/.idea/.gitignore b/src/Go/.idea/.gitignore
new file mode 100644
index 0000000..8bf4d45
--- /dev/null
+++ b/src/Go/.idea/.gitignore
@@ -0,0 +1,6 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/src/Go/.idea/.name b/src/Go/.idea/.name
new file mode 100644
index 0000000..9b16255
--- /dev/null
+++ b/src/Go/.idea/.name
@@ -0,0 +1 @@
+wenchuang.sql
\ No newline at end of file
diff --git a/src/Go/.idea/Go.iml b/src/Go/.idea/Go.iml
new file mode 100644
index 0000000..25ed3f6
--- /dev/null
+++ b/src/Go/.idea/Go.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Go/.idea/dataSources.xml b/src/Go/.idea/dataSources.xml
new file mode 100644
index 0000000..47eca91
--- /dev/null
+++ b/src/Go/.idea/dataSources.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ mysql.8
+ true
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://localhost:3306/wenchuang
+ $ProjectFileDir$
+
+
+ mysql.8
+ true
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://localhost:3306
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/src/Go/.idea/modules.xml b/src/Go/.idea/modules.xml
new file mode 100644
index 0000000..39d35e2
--- /dev/null
+++ b/src/Go/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Go/.idea/sqldialects.xml b/src/Go/.idea/sqldialects.xml
new file mode 100644
index 0000000..8eb610f
--- /dev/null
+++ b/src/Go/.idea/sqldialects.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Go/go.mod b/src/Go/go.mod
new file mode 100644
index 0000000..a975538
--- /dev/null
+++ b/src/Go/go.mod
@@ -0,0 +1,56 @@
+module wechuang
+
+go 1.21.1
+
+require github.com/qiniu/go-sdk/v7 v7.18.2
+
+require (
+ github.com/gin-contrib/cors v1.4.0
+ github.com/gin-gonic/gin v1.9.1
+ github.com/go-sql-driver/mysql v1.7.1
+ github.com/jinzhu/gorm v1.9.16
+ github.com/minio/minio-go/v7 v7.0.63
+ github.com/qwxingzhe/go-object-storage v0.0.0-20211008003114-a2b816ceeacf
+ gorm.io/driver/mysql v1.5.2
+)
+
+require (
+ github.com/bytedance/sonic v1.10.1 // indirect
+ github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
+ github.com/chenzhuoyu/iasm v0.9.0 // indirect
+ github.com/dustin/go-humanize v1.0.1 // indirect
+ github.com/gabriel-vasile/mimetype v1.4.2 // indirect
+ github.com/gin-contrib/sse v0.1.0 // indirect
+ github.com/go-playground/locales v0.14.1 // indirect
+ github.com/go-playground/universal-translator v0.18.1 // indirect
+ github.com/go-playground/validator/v10 v10.15.4 // indirect
+ github.com/goccy/go-json v0.10.2 // indirect
+ github.com/google/uuid v1.3.1 // indirect
+ github.com/jinzhu/inflection v1.0.0 // indirect
+ github.com/jinzhu/now v1.1.5 // indirect
+ github.com/json-iterator/go v1.1.12 // indirect
+ github.com/klauspost/compress v1.16.7 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.5 // indirect
+ github.com/leodido/go-urn v1.2.4 // indirect
+ github.com/mattn/go-isatty v0.0.19 // indirect
+ github.com/minio/md5-simd v1.1.2 // indirect
+ github.com/minio/sha256-simd v1.0.1 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.2 // indirect
+ github.com/pelletier/go-toml/v2 v2.1.0 // indirect
+ github.com/qwxingzhe/go-file-type v0.0.0-20210904033909-9eb7f61e24f1 // indirect
+ github.com/rs/xid v1.5.0 // indirect
+ github.com/sirupsen/logrus v1.9.3 // indirect
+ github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
+ github.com/ugorji/go/codec v1.2.11 // indirect
+ golang.org/x/arch v0.5.0 // indirect
+ golang.org/x/crypto v0.13.0 // indirect
+ golang.org/x/net v0.15.0 // indirect
+ golang.org/x/sync v0.4.0 // indirect
+ golang.org/x/sys v0.12.0 // indirect
+ golang.org/x/text v0.13.0 // indirect
+ google.golang.org/protobuf v1.31.0 // indirect
+ gopkg.in/ini.v1 v1.67.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+ gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55 // indirect
+)
diff --git a/src/Go/go.sum b/src/Go/go.sum
new file mode 100644
index 0000000..dd770dc
--- /dev/null
+++ b/src/Go/go.sum
@@ -0,0 +1,226 @@
+github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
+github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
+github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
+github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
+github.com/bytedance/sonic v1.10.1 h1:7a1wuFXL1cMy7a3f7/VFcEtriuXQnUBhtoVfOZiaysc=
+github.com/bytedance/sonic v1.10.1/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4=
+github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
+github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
+github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
+github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA=
+github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo=
+github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM=
+github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
+github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
+github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
+github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
+github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
+github.com/gin-contrib/cors v1.4.0 h1:oJ6gwtUl3lqV0WEIwM/LxPF1QZ5qe2lGWdY2+bz7y0g=
+github.com/gin-contrib/cors v1.4.0/go.mod h1:bs9pNM0x/UsmHPBWT2xZz9ROh8xYjYkiURUfmBoMlcs=
+github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
+github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
+github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
+github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
+github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
+github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
+github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
+github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
+github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
+github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
+github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
+github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
+github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk=
+github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
+github.com/go-playground/validator/v10 v10.15.4 h1:zMXza4EpOdooxPel5xDqXEdXG5r+WggpvnAKMsalBjs=
+github.com/go-playground/validator/v10 v10.15.4/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
+github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
+github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
+github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
+github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
+github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
+github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
+github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o=
+github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
+github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
+github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
+github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
+github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
+github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
+github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
+github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
+github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
+github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA=
+github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
+github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
+github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
+github.com/minio/minio-go/v7 v7.0.63 h1:GbZ2oCvaUdgT5640WJOpyDhhDxvknAJU2/T3yurwcbQ=
+github.com/minio/minio-go/v7 v7.0.63/go.mod h1:Q6X7Qjb7WMhvG65qKf4gUgA5XaiSox74kR1uAEjxRS4=
+github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
+github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
+github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
+github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/qiniu/dyn v1.3.0/go.mod h1:E8oERcm8TtwJiZvkQPbcAh0RL8jO1G0VXJMW3FAWdkk=
+github.com/qiniu/go-sdk/v7 v7.18.2 h1:vk9eo5OO7aqgAOPF0Ytik/gt7CMKuNgzC/IPkhda6rk=
+github.com/qiniu/go-sdk/v7 v7.18.2/go.mod h1:nqoYCNo53ZlGA521RvRethvxUDvXKt4gtYXOwye868w=
+github.com/qiniu/x v1.10.5/go.mod h1:03Ni9tj+N2h2aKnAz+6N0Xfl8FwMEDRC2PAlxekASDs=
+github.com/qwxingzhe/go-file-type v0.0.0-20210904033909-9eb7f61e24f1 h1:Y1q/Kv60666A8DGWBlUIUjwlXmu1dgypH4PVwSf3tUE=
+github.com/qwxingzhe/go-file-type v0.0.0-20210904033909-9eb7f61e24f1/go.mod h1:Bpduqz+NKm2imxr5InLA61iSgVvXwIbB3WIk0+gYXHY=
+github.com/qwxingzhe/go-object-storage v0.0.0-20211008003114-a2b816ceeacf h1:O83ZO3ZTJp8RI/AwQnRLAPOfPZsQg45r0w3cROKEIhU=
+github.com/qwxingzhe/go-object-storage v0.0.0-20211008003114-a2b816ceeacf/go.mod h1:VHniFqA9a4TNxS5htWLLkwuXgUMAsRqNC6WNrm6wfMU=
+github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
+github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
+github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
+github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
+github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
+github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
+github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
+github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
+github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/arch v0.5.0 h1:jpGode6huXQxcskEIpOCvrU+tzo81b6+oFLUYXWtH/Y=
+golang.org/x/arch v0.5.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
+golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck=
+golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
+golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8=
+golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
+golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
+golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
+golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
+google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
+gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs=
+gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb8=
+gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55 h1:sC1Xj4TYrLqg1n3AN10w871An7wJM0gzgcm8jkIkECQ=
+gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
+nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
+rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
diff --git a/src/Go/main.go b/src/Go/main.go
new file mode 100644
index 0000000..56f081e
--- /dev/null
+++ b/src/Go/main.go
@@ -0,0 +1,751 @@
+package main
+
+import (
+ "fmt"
+ "github.com/qiniu/go-sdk/v7/auth/qbox"
+ "github.com/qiniu/go-sdk/v7/storage"
+ "golang.org/x/net/context"
+ "strconv"
+
+ //"golang.org/x/crypto/openpgp/packet"
+ "net/http"
+
+ _ "database/sql"
+
+ _ "gorm.io/driver/mysql"
+ _ "os"
+
+ _ "github.com/qwxingzhe/go-object-storage"
+ _ "github.com/qwxingzhe/go-object-storage/drives"
+
+ "github.com/gin-contrib/cors"
+ "github.com/gin-gonic/gin"
+ _ "github.com/go-sql-driver/mysql"
+ "github.com/jinzhu/gorm"
+
+ _ "github.com/qiniu/go-sdk/v7/auth"
+ _ "github.com/qiniu/go-sdk/v7/storage"
+)
+
+type User struct {
+ gorm.Model
+ Name string `gorm:"varchar(255);not null"`
+ Password string `gorm:"size:255;not null"`
+ //status string `gorm:"size:255"`
+ //set_passage_number string `gorm:"size:255"`
+ //look_passage_number string `gorm:"size:255"`
+ //_level string `gorm:"size:255"`
+ Profilepicture string `gorm:"varchar(255);not null"`
+ Phone string `gorm:"size:255;not null"`
+ Type string `gorm:"size:255;not null"`
+ Mail string `gorm:"size:255;not null"`
+}
+
+type Passages struct {
+ gorm.Model
+ Name string `gorm:"varchar(255);not null"`
+ Title string `gorm:"varchar(255);not null"`
+ Passage string `gorm:"varchar(15000);not null"`
+ Type string `gorm:"varchar(255);not null"`
+ User_id int `gorm:" int ;not null"`
+ Cover string `gorm:"varchar(255);not null"`
+}
+
+type Managers struct {
+ gorm.Model
+ Name string `gorm:"varchar(255);not null"`
+ Password string `gorm:"size:255;not null"`
+ Phone string `gorm:"size:255;not null"`
+ Type string `gorm:"size:255;not null"`
+}
+
+type Advertisements struct {
+ gorm.Model
+ Title string `gorm:"varchar(255);not null"`
+ Cover string `gorm:"varchar(255);not null"`
+ Targetadd string `gorm:"varchar(255);not null"`
+}
+
+type Pictures struct {
+ gorm.Model
+ Userid string `gorm:"varchar(255);not null"`
+ Username string `gorm:"varchar(255);not null"`
+ Title string `gorm:"varchar(255);not null"`
+ Plocation string `gorm:"varchar(255);not null"`
+}
+
+type Passage struct {
+ gorm.Model
+ Name string `gorm:"varchar(255);not null"`
+ Title string `gorm:"varchar(255);not null"`
+ Type string `gorm:"varchar(255);not null"`
+ User_id int `gorm:" int ;not null"`
+ Cover string `gorm:"varchar(255);not null"`
+}
+
+// var db1 *sql.DB //连接池对象
+//func GetObjectStorage(isAutomaticProductionPath bool) *objectstorage.ObjectStorage {
+// return &objectstorage.ObjectStorage{
+// Drive: objectstoragedrives.Kodo{
+// AccessKey: "GURPB1jK8_mxGBSgUlnWJUKERNMBmOX07iu23MmK",
+// SecretKey: "vjWUkGFrKvuhuUj_ep8D-kgF9PBw0dC7pmIhDzvc",
+// Bucket: "wenchuangbucket",
+// },
+// IsAutomaticProductionPath: isAutomaticProductionPath,
+// FilePathPrefix: "image/",
+// IsAppendExt: false,
+// BaseUrl: "http://qynr9haq9.hd-bkt.clouddn.com/",
+// }
+//}
+
+func main() {
+
+ //获取初始化的数据库
+ db := InitDB()
+ //延迟关闭数据库
+ defer db.Close()
+
+ //创建一个默认的路由引擎
+ r := gin.Default()
+
+ config := cors.DefaultConfig()
+ config.AllowOrigins = []string{"*"}
+ r.Use(cors.New(config))
+
+ // 上传图片到七牛云存储
+ accessKey := "GURPB1jK8_mxGBSgUlnWJUKERNMBmOX07iu23MmK"
+ secretKey := "vjWUkGFrKvuhuUj_ep8D-kgF9PBw0dC7pmIhDzvc"
+ bucket := "wenchuangbucket"
+
+ putPolicy := storage.PutPolicy{
+ Scope: bucket,
+ ReturnBody: `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
+ }
+
+ putPolicy.Expires = 2592000
+ mac := qbox.NewMac(accessKey, secretKey)
+ upToken := putPolicy.UploadToken(mac)
+ cfg := storage.Config{}
+ cfg.Region = &storage.ZoneHuabei
+ // 是否使用https域名
+ cfg.UseHTTPS = true
+ // 上传是否使用CDN上传加速
+ cfg.UseCdnDomains = false
+ formUploader := storage.NewFormUploader(&cfg)
+ putExtra := storage.PutExtra{}
+ ret := storage.PutRet{}
+ ImgUrl := "http://s3qgokzi8.hb-bkt.clouddn.com/"
+
+ //注册
+ r.POST("/register", func(ctx *gin.Context) {
+
+ //获取参数
+ name := ctx.PostForm("name")
+ password := ctx.PostForm("password")
+ picture, _ := ctx.FormFile("profilepicture")
+ phone := ctx.PostForm("phone")
+ type1 := ctx.PostForm("type")
+ mail := ctx.PostForm("mail")
+
+ //数据验证
+ if len(name) == 0 {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "用户名不能为空",
+ })
+ return
+ }
+
+ if len(password) < 6 {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "密码不能少于6位",
+ "password": password,
+ })
+ return
+ }
+
+ if len(phone) < 11 {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "电话不能少于11位",
+ "phone": phone,
+ })
+ return
+ }
+
+ src, err1 := picture.Open()
+ if err1 != nil {
+ ctx.JSON(http.StatusInternalServerError, gin.H{"error2": "result.Error.Error()"})
+ }
+ key := "profilepicture/" + phone
+ err := formUploader.Put(context.Background(), &ret, upToken, key, src, picture.Size, &putExtra)
+ if err != nil {
+ ctx.JSON(500, gin.H{"error1": err.Error()})
+ return
+ }
+ var profilepicture = ImgUrl + ret.Key
+
+ //创建用户
+
+ newUser := User{
+ Name: name,
+ Password: password,
+ Profilepicture: profilepicture,
+ Phone: phone,
+ Type: type1,
+ Mail: mail,
+ }
+ db.Create(&newUser)
+
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "注册成功",
+ "newUser": newUser,
+ })
+ })
+
+ //用户登录
+ r.POST("/login", func(ctx *gin.Context) {
+
+ //获取参数
+ phone := ctx.PostForm("phone")
+ password := ctx.PostForm("password")
+
+ //数据验证
+ if len(password) < 6 {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "密码不能少于6位",
+ })
+ return
+ }
+
+ var user User
+ db.Where("phone = ?", phone).First(&user)
+ if password != user.Password {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "密码错误",
+ })
+ return
+ }
+ if err := ctx.ShouldBind(&user); err == nil {
+ ctx.JSON(http.StatusOK, gin.H{
+ "message": "登录成功",
+ "user": user,
+ })
+ } else {
+ ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
+ }
+ })
+
+ //管理员注册
+ r.POST("/manageregister", func(ctx *gin.Context) {
+
+ //获取参数
+ name := ctx.PostForm("name")
+ password := ctx.PostForm("password")
+ phone := ctx.PostForm("phone")
+ type1 := ctx.PostForm("type")
+
+ //数据验证
+ if len(name) == 0 {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "用户名不能为空",
+ })
+ return
+ }
+
+ if len(password) < 6 {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "密码不能少于6位",
+ "password": password,
+ })
+ return
+ }
+
+ //创建用户
+
+ newUser := Managers{
+ Name: name,
+ Password: password,
+ Phone: phone,
+ Type: type1,
+ }
+ db.Create(&newUser)
+
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "注册成功",
+ "manager": newUser,
+ })
+ })
+
+ //管理员登陆
+ r.POST("/managerlogin", func(ctx *gin.Context) {
+
+ //获取参数
+ phone := ctx.PostForm("phone")
+ password := ctx.PostForm("password")
+
+ //数据验证
+ if len(password) < 6 {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "密码不能少于6位",
+ })
+ return
+ }
+
+ var user Managers
+ db.Where("phone = ?", phone).First(&user)
+ if password != user.Password {
+ ctx.JSON(http.StatusUnprocessableEntity, gin.H{
+ "code": 422,
+ "message": "密码错误",
+ })
+ return
+ }
+ if err := ctx.ShouldBind(&user); err == nil {
+ ctx.JSON(http.StatusOK, gin.H{
+ "manger": user,
+ })
+ } else {
+ ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
+ }
+ })
+
+ //删除用户
+ r.POST("/delete1", func(ctx *gin.Context) {
+
+ /////改成查询password
+ id := ctx.PostForm("id")
+ sqlStr := `delete from users where id=?`
+ err := db.Exec(sqlStr, id)
+ if err != nil {
+ fmt.Printf("delete faild,err:%v\n", err)
+ return
+ }
+
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "删除成功",
+ })
+ })
+
+ /////返回个人信息
+ r.GET("/information", func(ctx *gin.Context) {
+ phone := ctx.PostForm("phone")
+ var user User
+ db.Where("phone = ?", phone).First(&user)
+ ctx.JSON(http.StatusOK, gin.H{
+ "user": user,
+ })
+ })
+
+ //更新个人信息
+ r.POST("/upload", func(ctx *gin.Context) {
+
+ /////改成查询password
+ id := ctx.PostForm("id")
+ name := ctx.PostForm("name")
+ phone := ctx.PostForm("phone")
+ //true_name := ctx.PostForm("true_name")
+ mail := ctx.PostForm("mail")
+ picture, _ := ctx.FormFile("profilepicture")
+
+ src, err1 := picture.Open()
+ if err1 != nil {
+ ctx.JSON(http.StatusInternalServerError, gin.H{"error2": "result.Error.Error()"})
+ }
+ key := "profilepicture/" + phone
+ err := formUploader.Put(context.Background(), &ret, upToken, key, src, picture.Size, &putExtra)
+ if err != nil {
+ ctx.JSON(500, gin.H{"error1": err.Error()})
+ return
+ }
+ var profilepicture = ImgUrl + ret.Key
+ var users User
+ db.First(&users, "id = ?", id)
+ db.Model(&users).Updates(
+ User{
+ Name: name,
+ Phone: phone,
+ Profilepicture: profilepicture,
+ Mail: mail,
+ })
+
+ var user User
+ db.First(&user, "id = ?", id)
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "更新成功",
+ "user": user,
+ })
+ })
+
+ //(管理员查找全部用户)
+ r.POST("/allinformation", func(ctx *gin.Context) {
+ var user []User
+ db.Find(&user)
+ ctx.JSON(http.StatusOK, gin.H{
+ "user": user,
+ })
+ })
+
+ //所有管理员
+ r.GET("/allmanager", func(ctx *gin.Context) {
+ var manager []Managers
+ db.Find(&manager)
+ ctx.JSON(http.StatusOK, gin.H{
+ "manager": manager,
+ "number": len(manager),
+ })
+ })
+
+ /////上传文章(*****)
+ r.POST("/passage", func(ctx *gin.Context) {
+
+ //获取参数
+ user_id := ctx.PostForm("user_id")
+ passage := ctx.PostForm("passage")
+ title := ctx.PostForm("title")
+ types := ctx.PostForm("type")
+ name := ctx.PostForm("name")
+ picture, _ := ctx.FormFile("cover")
+
+ //file := map[string]string{
+ // "passage": passage,
+ //}
+ //bytes, _ := json.Marshal(file)
+
+ src, err1 := picture.Open()
+ if err1 != nil {
+ ctx.JSON(http.StatusInternalServerError, gin.H{"error2": "result.Error.Error()"})
+ }
+
+ key := "cover/" + title
+ err := formUploader.Put(context.Background(), &ret, upToken, key, src, picture.Size, &putExtra)
+ if err != nil {
+ ctx.JSON(500, gin.H{"error1": err.Error()})
+ return
+ }
+
+ cover := ImgUrl + ret.Key
+ //创建文章
+
+ l, _ := strconv.Atoi(user_id)
+ newUser := Passages{
+ User_id: l,
+ Passage: passage,
+ Title: title,
+ Type: types,
+ Name: name,
+ Cover: cover,
+ }
+ db.Create(&newUser)
+
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "passage": newUser,
+ "code": 200,
+ "message": "保存成功",
+ })
+ })
+
+ //打开指定文章
+ r.POST("/passageinformation", func(ctx *gin.Context) {
+ id := ctx.PostForm("id")
+ var passage Passages
+
+ db.Where("id = ?", id).First(&passage)
+ ctx.JSON(http.StatusOK, gin.H{
+ "passage": passage,
+ })
+ })
+
+ //用户文章
+ r.POST("/userpassageinformation", func(ctx *gin.Context) {
+
+ var passage []Passages
+ user_id := ctx.PostForm("user_id")
+
+ db.Where("User_id = ?", user_id).Find(&passage)
+ //user_id := ctx.PostForm("user_id ")
+ //db.Find(&passage, "user_id = ?", user_id)
+ ctx.JSON(http.StatusOK, gin.H{
+ "passage": passage,
+ })
+ })
+
+ //文章编辑
+ r.POST("/uploadpassage", func(ctx *gin.Context) {
+
+ /////改成查询password
+ id := ctx.PostForm("id")
+ user_id := ctx.GetInt("user_id")
+ passage := ctx.PostForm("passage")
+ title := ctx.PostForm("title")
+ types := ctx.PostForm("type")
+ picture, _ := ctx.FormFile("cover")
+
+ var user Passages
+ db.First(&user, "id = ?", id)
+
+ src, err1 := picture.Open()
+ if err1 != nil {
+ ctx.JSON(http.StatusInternalServerError, gin.H{"error2": "result.Error.Error()"})
+ }
+
+ key := "cover/" + title
+ err := formUploader.Put(context.Background(), &ret, upToken, key, src, picture.Size, &putExtra)
+ if err != nil {
+ ctx.JSON(500, gin.H{"error1": err.Error()})
+ return
+ }
+ cover := ImgUrl + ret.Key
+
+ db.Model(&user).Updates(
+ Passages{
+ User_id: user_id,
+ Passage: passage,
+ Title: title,
+ Type: types,
+ Cover: cover,
+ })
+
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "更新成功",
+ })
+ })
+
+ //删除文章
+ r.POST("/delete", func(ctx *gin.Context) {
+ id := ctx.PostForm("id")
+ sqlStr := `delete from passages where id=?`
+ err := db.Exec(sqlStr, id)
+ if err != nil {
+ fmt.Printf("delete faild,err:%v\n", err)
+ return
+ }
+
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "删除成功",
+ })
+ })
+
+ //文章查询()查全部////////////////////////
+ r.GET("/allpassageinformation", func(ctx *gin.Context) {
+ var passage []Passage
+ db.Table("passages").Find(&passage)
+ ctx.JSON(http.StatusOK, gin.H{
+ "passage": passage,
+ })
+ })
+
+ //上传图片
+ r.POST("/picture", func(ctx *gin.Context) {
+ username := ctx.PostForm("username")
+ userid := ctx.PostForm("userid")
+ picture, _ := ctx.FormFile("plocation")
+ title := ctx.PostForm("title")
+
+ src, err1 := picture.Open()
+ if err1 != nil {
+ ctx.JSON(http.StatusInternalServerError, gin.H{"error2": "result.Error.Error()"})
+ }
+
+ key := "image/" + title
+ err := formUploader.Put(context.Background(), &ret, upToken, key, src, picture.Size, &putExtra)
+ if err != nil {
+ ctx.JSON(500, gin.H{"error1": err.Error()})
+ return
+ }
+ plocation := ImgUrl + ret.Key
+ // 存储图片路径到数据库
+ pictures := Pictures{
+ Userid: userid,
+ Username: username,
+ Plocation: plocation,
+ Title: title,
+ }
+ result := db.Create(&pictures)
+ if result.Error != nil {
+ ctx.JSON(http.StatusInternalServerError, gin.H{"error3": "result.Error.Error()"})
+ return
+ }
+ if err := ctx.ShouldBind(&pictures); err == nil {
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "picture": pictures,
+ })
+ } else {
+ ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
+ }
+ })
+
+ //用户图片
+ r.POST("/userpicture", func(ctx *gin.Context) {
+ userid := ctx.PostForm("userid")
+
+ var picture []Pictures
+
+ db.Where("userid = ?", userid).Find(&picture)
+
+ ctx.JSON(http.StatusOK, gin.H{
+ "picture": picture,
+ })
+
+ })
+
+ //指定图片信息
+ r.POST("/pictureinformation", func(ctx *gin.Context) {
+ id := ctx.PostForm("id")
+
+ var picture Pictures
+
+ db.Where("id = ?", id).Find(&picture)
+
+ ctx.JSON(http.StatusOK, gin.H{
+ "picture": picture,
+ })
+
+ })
+
+ //删除图片
+ r.POST("/deletepicture", func(ctx *gin.Context) {
+
+ id := ctx.PostForm("id")
+ sqlStr := `delete from pictures where id=?`
+ err := db.Exec(sqlStr, id)
+ if err != nil {
+
+ return
+ }
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "删除成功",
+ })
+ })
+
+ //所有图片
+ r.POST("/allpicture", func(ctx *gin.Context) {
+ var picture []Pictures
+ db.Find(&picture)
+ ctx.JSON(http.StatusOK, gin.H{
+ "pictures": picture,
+ })
+ })
+
+ //上传广告
+ r.POST("/advertisements", func(ctx *gin.Context) {
+ title := ctx.PostForm("title")
+ picture, _ := ctx.FormFile("cover")
+ targetadd := ctx.PostForm("targetadd")
+
+ src, err1 := picture.Open()
+ if err1 != nil {
+ ctx.JSON(http.StatusInternalServerError, gin.H{"error2": "result.Error.Error()"})
+ }
+
+ key := "acvertise/" + title
+ err := formUploader.Put(context.Background(), &ret, upToken, key, src, picture.Size, &putExtra)
+ if err != nil {
+ ctx.JSON(500, gin.H{"error1": err.Error()})
+ return
+ }
+ cover := ImgUrl + ret.Key
+ // 存储图片路径到数据库
+ advertises := Advertisements{
+ Title: title,
+ Cover: cover,
+ Targetadd: targetadd,
+ }
+ result := db.Create(&advertises)
+ if result.Error != nil {
+ ctx.JSON(http.StatusInternalServerError, gin.H{"error3": "result.Error.Error()"})
+ return
+ }
+ if err := ctx.ShouldBind(&advertises); err == nil {
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "picture": advertises,
+ })
+ } else {
+ ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
+ }
+ })
+
+ //删除广告
+ r.POST("/deleteadvertise", func(ctx *gin.Context) {
+ id := ctx.PostForm("id")
+ sqlStr := `delete from advertisements where id=?`
+ err := db.Exec(sqlStr, id)
+ if err != nil {
+ fmt.Printf("delete faild,err:%v\n", err)
+ return
+ }
+ //返回结果
+ ctx.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "删除成功",
+ })
+
+ })
+
+ r.POST("/alladvertisements", func(ctx *gin.Context) {
+ var advertise []Advertisements
+ db.Find(&advertise)
+ ctx.JSON(http.StatusOK, gin.H{
+ "Code": 200,
+ "advertisements": advertise,
+ })
+ })
+ //在88800端口启动服务
+ panic(r.Run(":8880"))
+}
+
+func InitDB() *gorm.DB {
+ driverName := "mysql"
+ host := "127.0.0.1"
+ port := "3306"
+ database := "wenchuang"
+ username := "root"
+ password := "098poi..."
+ charset := "utf8"
+ args := fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=%s&parseTime=true",
+ username,
+ password,
+ host,
+ port,
+ database,
+ charset)
+
+ db, _ := gorm.Open(driverName, args)
+ // if err != nil {
+ // // if strings.Split(err.Error(), " ")=="" {
+
+ // // }
+ // // dsn := "root:Wozai3ban@tcp(127.0.0.1:3306)/wenchuang"
+ // // db1, err = sql.Open("mysql", dsn) //open不会检验用户名和密码
+ // panic("failed to connect database, err:" + err.Error())
+ // }
+
+ //迁移
+ db.AutoMigrate(&User{}, &Passages{}, &Managers{})
+
+ return db
+
+}
diff --git a/src/Go/wenchuang.sql b/src/Go/wenchuang.sql
new file mode 100644
index 0000000..f0242d1
--- /dev/null
+++ b/src/Go/wenchuang.sql
@@ -0,0 +1,39 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server : cxc_wc
+ Source Server Type : MySQL
+ Source Server Version : 80034
+ Source Host : localhost:3306
+ Source Schema : wenchuang
+
+ Target Server Type : MySQL
+ Target Server Version : 80034
+ File Encoding : 65001
+
+ Date: 24/09/2023 21:07:33
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for user
+-- ----------------------------
+DROP TABLE IF EXISTS `user`;
+CREATE TABLE `user` (
+ `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
+ `password` int NOT NULL,
+ PRIMARY KEY (`username`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of user
+-- ----------------------------
+INSERT INTO `user` VALUES ('cgj', 123456);
+INSERT INTO `user` VALUES ('clj', 123456);
+INSERT INTO `user` VALUES ('cqh', 123456);
+INSERT INTO `user` VALUES ('cxc', 123456);
+INSERT INTO `user` VALUES ('czk', 123456);
+
+SET FOREIGN_KEY_CHECKS = 1;
diff --git a/src/culture v1.0 (2)/.hintrc b/src/culture v1.0 (2)/.hintrc
new file mode 100644
index 0000000..d8e1fa9
--- /dev/null
+++ b/src/culture v1.0 (2)/.hintrc
@@ -0,0 +1,30 @@
+{
+ "extends": [
+ "development"
+ ],
+ "hints": {
+ "meta-viewport": "off",
+ "axe/forms": [
+ "default",
+ {
+ "label": "off",
+ "select-name": "off"
+ }
+ ],
+ "no-inline-styles": "off",
+ "axe/text-alternatives": [
+ "default",
+ {
+ "image-alt": "off"
+ }
+ ],
+ "axe/language": [
+ "default",
+ {
+ "html-has-lang": "off"
+ }
+ ],
+ "apple-touch-icons": "off",
+ "button-type": "off"
+ }
+}
\ No newline at end of file
diff --git a/src/culture v1.0 (2)/.vscode/launch.json b/src/culture v1.0 (2)/.vscode/launch.json
new file mode 100644
index 0000000..6a69263
--- /dev/null
+++ b/src/culture v1.0 (2)/.vscode/launch.json
@@ -0,0 +1,14 @@
+{
+ // 使用 IntelliSense 了解相关属性。
+ // 悬停以查看现有属性的描述。
+ // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "msedge",
+ "request": "launch",
+ "name": "Open page.html",
+ "file": "c:\\Users\\toutiexian\\Desktop\\wenchaung\\culture v1.0 (2)\\culture\\page.html"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/culture v1.0 (2)/Back-office management/Category_Manage.html b/src/culture v1.0 (2)/Back-office management/Category_Manage.html
new file mode 100644
index 0000000..9b811f5
--- /dev/null
+++ b/src/culture v1.0 (2)/Back-office management/Category_Manage.html
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 分类管理
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/culture v1.0 (2)/Back-office management/Cover_management.html b/src/culture v1.0 (2)/Back-office management/Cover_management.html
new file mode 100644
index 0000000..b325643
--- /dev/null
+++ b/src/culture v1.0 (2)/Back-office management/Cover_management.html
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+个人账户
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/culture v1.0 (2)/Back-office management/Order_handling.html b/src/culture v1.0 (2)/Back-office management/Order_handling.html
new file mode 100644
index 0000000..3899948
--- /dev/null
+++ b/src/culture v1.0 (2)/Back-office management/Order_handling.html
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 订单处理
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/culture v1.0 (2)/Back-office management/Orderform.html b/src/culture v1.0 (2)/Back-office management/Orderform.html
new file mode 100644
index 0000000..97e2a43
--- /dev/null
+++ b/src/culture v1.0 (2)/Back-office management/Orderform.html
@@ -0,0 +1,418 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 订单管理
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/culture v1.0 (2)/Back-office management/Products_List.html b/src/culture v1.0 (2)/Back-office management/Products_List.html
new file mode 100644
index 0000000..ab25c2b
--- /dev/null
+++ b/src/culture v1.0 (2)/Back-office management/Products_List.html
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产品列表
+
+
+
+
+
+
+
+
+
+ 批量删除
+
+
共:2334件商品
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/culture v1.0 (2)/Back-office management/System_Logs.html b/src/culture v1.0 (2)/Back-office management/System_Logs.html
new file mode 100644
index 0000000..a769176
--- /dev/null
+++ b/src/culture v1.0 (2)/Back-office management/System_Logs.html
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+系统日志
+
+
+
+
+
+
+
+
+
+
+
+ ID |
+ 登录用户 |
+ 角色 |
+ 操作内容 |
+ 操作时间 |
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/culture v1.0 (2)/Back-office management/Widget/My97DatePicker/WdatePicker.js b/src/culture v1.0 (2)/Back-office management/Widget/My97DatePicker/WdatePicker.js
new file mode 100644
index 0000000..851604a
--- /dev/null
+++ b/src/culture v1.0 (2)/Back-office management/Widget/My97DatePicker/WdatePicker.js
@@ -0,0 +1,57 @@
+/*
+ * My97 DatePicker 4.8 Beta4
+ * License: http://www.my97.net/dp/license.asp
+ */
+var $dp,WdatePicker;(function(){var $={
+$langList:[
+ {name:"en",charset:"UTF-8"},
+ {name:"zh-cn",charset:"gb2312"},
+ {name:"zh-tw",charset:"GBK"}],
+$skinList:[
+ {name:"default",charset:"gb2312"},
+ {name:"whyGreen",charset:"gb2312"},
+ {name:"blue",charset:"gb2312"},
+ {name:"green",charset:"gb2312"},
+ {name:"simple",charset:"gb2312"},
+ {name:"ext",charset:"gb2312"},
+ {name:"blueFresh",charset:"gb2312"},
+ {name:"twoer",charset:"gb2312"},
+ {name:"YcloudRed",charset:"gb2312"}],
+$wdate:true,
+$crossFrame:true,
+$preLoad:false,
+$dpPath:"",
+doubleCalendar:false,
+enableKeyboard:true,
+enableInputMask:true,
+autoUpdateOnChanged:null,
+weekMethod:"ISO8601",
+position:{},
+lang:"auto",
+skin:"default",
+dateFmt:"yyyy-MM-dd",
+realDateFmt:"yyyy-MM-dd",
+realTimeFmt:"HH:mm:ss",
+realFullFmt:"%Date %Time",
+minDate:"1900-01-01 00:00:00",
+maxDate:"2099-12-31 23:59:59",
+startDate:"",
+alwaysUseStartDate:false,
+yearOffset:1911,
+firstDayOfWeek:0,
+isShowWeek:false,
+highLineWeekDay:true,
+isShowClear:true,
+isShowToday:true,
+isShowOK:true,
+isShowOthers:true,
+readOnly:false,
+errDealMode:0,
+autoPickDate:null,
+qsEnabled:true,
+autoShowQS:false,
+opposite:false,
+hmsMenuCfg:{H:[1,6],m:[5,6],s:[15,4]},
+opposite:false,
+
+specialDates:null,specialDays:null,disabledDates:null,disabledDays:null,onpicking:null,onpicked:null,onclearing:null,oncleared:null,ychanging:null,ychanged:null,Mchanging:null,Mchanged:null,dchanging:null,dchanged:null,Hchanging:null,Hchanged:null,mchanging:null,mchanged:null,schanging:null,schanged:null,eCont:null,vel:null,elProp:"",errMsg:"",quickSel:[],has:{},getRealLang:function(){var _=$.$langList;for(var A=0;A<_.length;A++)if(_[A].name==this.lang)return _[A];return _[0]}};WdatePicker=U;var Y=window,T={innerHTML:""},N="document",H="documentElement",C="getElementsByTagName",V,A,S,G,c,X=navigator.appName;if(X=="Microsoft Internet Explorer")S=true;else if(X=="Opera")c=true;else G=true;A=$.$dpPath||J();if($.$wdate)K(A+"skin/WdatePicker.css");V=Y;if($.$crossFrame){try{while(V.parent!=V&&V.parent[N][C]("frameset").length==0)V=V.parent}catch(O){}}if(!V.$dp)V.$dp={ff:G,ie:S,opera:c,status:0,defMinDate:$.minDate,defMaxDate:$.maxDate};B();if($.$preLoad&&$dp.status==0)E(Y,"onload",function(){U(null,true)});if(!Y[N].docMD){E(Y[N],"onmousedown",D,true);Y[N].docMD=true}if(!V[N].docMD){E(V[N],"onmousedown",D,true);V[N].docMD=true}E(Y,"onunload",function(){if($dp.dd)P($dp.dd,"none")});function B(){try{V[N],V.$dp=V.$dp||{}}catch($){V=Y;$dp=$dp||{}}var A={win:Y,$:function($){return(typeof $=="string")?Y[N].getElementById($):$},$D:function($,_){return this.$DV(this.$($).value,_)},$DV:function(_,$){if(_!=""){this.dt=$dp.cal.splitDate(_,$dp.cal.dateFmt);if($)for(var B in $)if(this.dt[B]===undefined)this.errMsg="invalid property:"+B;else{this.dt[B]+=$[B];if(B=="M"){var C=$["M"]>0?1:0,A=new Date(this.dt["y"],this.dt["M"],0).getDate();this.dt["d"]=Math.min(A+C,this.dt["d"])}}if(this.dt.refresh())return this.dt}return""},show:function(){var A=V[N].getElementsByTagName("div"),$=100000;for(var B=0;B$)$=_}this.dd.style.zIndex=$+2;P(this.dd,"block");P(this.dd.firstChild,"")},unbind:function($){$=this.$($);if($.initcfg){L($,"onclick",function(){U($.initcfg)});L($,"onfocus",function(){U($.initcfg)})}},hide:function(){P(this.dd,"none")},attachEvent:E};for(var _ in A)V.$dp[_]=A[_];$dp=V.$dp}function E(B,_,A,$){if(B.addEventListener){var C=_.replace(/on/,"");A._ieEmuEventHandler=function($){return A($)};B.addEventListener(C,A._ieEmuEventHandler,$)}else B.attachEvent(_,A)}function L(A,$,_){if(A.removeEventListener){var B=$.replace(/on/,"");_._ieEmuEventHandler=function($){return _($)};A.removeEventListener(B,_._ieEmuEventHandler,false)}else A.detachEvent($,_)}function a(_,$,A){if(typeof _!=typeof $)return false;if(typeof _=="object"){if(!A)for(var B in _){if(typeof $[B]=="undefined")return false;if(!a(_[B],$[B],true))return false}return true}else if(typeof _=="function"&&typeof $=="function")return _.toString()==$.toString();else return _==$}function J(){var _,A,$=Y[N][C]("script");for(var B=0;B<$.length;B++){_=$[B].getAttribute("src")||"";_=_.substr(0,_.toLowerCase().indexOf("wdatepicker.js"));A=_.lastIndexOf("/");if(A>0)_=_.substring(0,A+1);if(_)break}return _}function K(A,$,B){var D=Y[N][C]("HEAD").item(0),_=Y[N].createElement("link");if(D){_.href=A;_.rel="stylesheet";_.type="text/css";if($)_.title=$;if(B)_.charset=B;D.appendChild(_)}}function F($){$=$||V;var A=0,_=0;while($!=V){var D=$.parent[N][C]("iframe");for(var F=0;F_.scrollTop||A.scrollLeft>_.scrollLeft))?A:_;return{"top":B.scrollTop,"left":B.scrollLeft}}function D($){try{var _=$?($.srcElement||$.target):null;if($dp.cal&&!$dp.eCont&&$dp.dd&&_!=$dp.el&&$dp.dd.style.display=="block")$dp.cal.close()}catch($){}}function Z(){$dp.status=2}var Q,_;function U(K,C){if(!$dp)return;B();var L={};for(var H in K)L[H]=K[H];for(H in $)if(H.substring(0,1)!="$"&&L[H]===undefined)L[H]=$[H];if(C){if(!J()){_=_||setInterval(function(){if(V[N].readyState=="complete")clearInterval(_);U(null,true)},50);return}if($dp.status==0){$dp.status=1;L.el=T;I(L,true)}else return}else if(L.eCont){L.eCont=$dp.$(L.eCont);L.el=T;L.autoPickDate=true;L.qsEnabled=false;I(L)}else{if($.$preLoad&&$dp.status!=2)return;var F=D();if(Y.event===F||F){L.srcEl=F.srcElement||F.target;F.cancelBubble=true}L.el=L.el=$dp.$(L.el||L.srcEl);if(!L.el||L.el["My97Mark"]===true||L.el.disabled||($dp.dd&&P($dp.dd)!="none"&&$dp.dd.style.left!="-970px")){try{if(L.el["My97Mark"])L.el["My97Mark"]=false}catch(A){}return}if(F&&L.el.nodeType==1&&!a(L.el.initcfg,K)){$dp.unbind(L.el);E(L.el,F.type=="focus"?"onclick":"onfocus",function(){U(K)});L.el.initcfg=K}I(L)}function J(){if(S&&V!=Y&&V[N].readyState!="complete")return false;return true}function D(){if(G){func=D.caller;while(func!=null){var $=func.arguments[0];if($&&($+"").indexOf("Event")>=0)return $;func=func.caller}return null}return event}}function R(_,$){return _.currentStyle?_.currentStyle[$]:document.defaultView.getComputedStyle(_,false)[$]}function P(_,$){if(_)if($!=null)_.style.display=$;else return R(_,"display")}function I(G,_){var D=G.el?G.el.nodeName:"INPUT";if(_||G.eCont||new RegExp(/input|textarea|div|span|p|a/ig).test(D))G.elProp=D=="INPUT"?"value":"innerHTML";else return;if(G.lang=="auto")G.lang=S?navigator.browserLanguage.toLowerCase():navigator.language.toLowerCase();if(!G.eCont)for(var C in G)$dp[C]=G[C];if(!$dp.dd||G.eCont||($dp.dd&&(G.getRealLang().name!=$dp.dd.lang||G.skin!=$dp.dd.skin))){if(G.eCont)E(G.eCont,G);else{$dp.dd=V[N].createElement("DIV");$dp.dd.style.cssText="position:absolute";V[N].body.appendChild($dp.dd);E($dp.dd,G);if(_)$dp.dd.style.left=$dp.dd.style.top="-970px";else{$dp.show();B($dp)}}}else if($dp.cal){$dp.show();$dp.cal.init();if(!$dp.eCont)B($dp)}function E(K,J){var I=V[N].domain,F=false,G="";K.innerHTML=G;var _=$.$langList,D=$.$skinList,H;try{H=K.lastChild.contentWindow[N]}catch(E){F=true;K.removeChild(K.lastChild);var L=V[N].createElement("iframe");L.hideFocus=true;L.frameBorder=0;L.scrolling="no";L.src="javascript:(function(){var d=document;d.open();d.domain='"+I+"';})()";K.appendChild(L);setTimeout(function(){H=K.lastChild.contentWindow[N];C()},97);return}C();function C(){var _=J.getRealLang();K.lang=_.name;K.skin=J.skin;var $=[""];if(F)$[1]="document.domain=\""+I+"\";";for(var C=0;C");$.push("");$.push("