question后台系统优化
This commit is contained in:
parent
5d22549de2
commit
0c1262df88
|
|
@ -1,13 +1,15 @@
|
||||||
# questionnaire_survey
|
# questionnaire_survey
|
||||||
|
|
||||||
|
|
||||||
### 概述
|
### 概述
|
||||||
问卷调查实现token接口
|
|
||||||
|
|
||||||
|
问卷调查实现 token 接口
|
||||||
|
|
||||||
#### handler
|
#### handler
|
||||||
|
|
||||||
|
```
|
||||||
POST /send/sendform --> 表单提交
|
POST /send/sendform --> 表单提交
|
||||||
POST /send/getform --> 所有提交表单列表
|
POST /send/getform --> 所有提交表单列表
|
||||||
GET /send/query --> 根据表单id获取对应表单
|
GET /send/query --> 根据表单id获取对应表单
|
||||||
POST /send/delete --> 根据表单id删除对应表单
|
POST /send/delete --> 根据表单id删除对应表单
|
||||||
POST /send/update --> 根据表单id修改对应表单
|
POST /send/update --> 根据表单id修改对应表单
|
||||||
|
```
|
||||||
|
|
|
||||||
12
go.mod
12
go.mod
|
|
@ -3,20 +3,18 @@ module myschools.me/wyh/questionnaire_survey
|
||||||
go 1.16
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gin-gonic/gin v1.7.2 // indirect
|
github.com/gin-gonic/gin v1.7.2
|
||||||
github.com/go-playground/validator/v10 v10.7.0 // indirect
|
github.com/go-playground/validator/v10 v10.7.0 // indirect
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
|
||||||
github.com/json-iterator/go v1.1.11 // indirect
|
|
||||||
github.com/leodido/go-urn v1.2.1 // indirect
|
github.com/leodido/go-urn v1.2.1 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.13 // indirect
|
github.com/mattn/go-isatty v0.0.13 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.1 // indirect
|
github.com/sirupsen/logrus v1.8.1
|
||||||
|
github.com/spf13/viper v1.8.1
|
||||||
github.com/ugorji/go v1.2.6 // indirect
|
github.com/ugorji/go v1.2.6 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
|
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
|
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
|
||||||
golang.org/x/text v0.3.6 // indirect
|
golang.org/x/text v0.3.6 // indirect
|
||||||
google.golang.org/protobuf v1.27.1 // indirect
|
google.golang.org/protobuf v1.27.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gorm.io/driver/mysql v1.1.1
|
||||||
gorm.io/driver/mysql v1.1.1 // indirect
|
gorm.io/gorm v1.21.12
|
||||||
gorm.io/gorm v1.21.12 // indirect
|
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -2,35 +2,49 @@ package handler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"myschools.me/wyh/questionnaire_survey/model"
|
"myschools.me/wyh/questionnaire_survey/model"
|
||||||
"myschools.me/wyh/questionnaire_survey/mysql"
|
mysql "myschools.me/wyh/questionnaire_survey/mysql1"
|
||||||
)
|
)
|
||||||
|
|
||||||
//SendForm 提交表单
|
//QuestionSend 提交表单
|
||||||
func SendForm(c *gin.Context) {
|
func QuestionSend(c *gin.Context) {
|
||||||
db := mysql.Connect()
|
db := mysql.New()
|
||||||
submit := model.Submit{Name: "zhangsan", Email: "573805736@qq.com", City: "NingBo", Sex: "男", Hobby: "cg", Desc: "暂无"}
|
payload, err := ioutil.ReadAll(c.Request.Body)
|
||||||
if err := db.Create(&submit).Error; err != nil {
|
if err != nil {
|
||||||
if err != gorm.ErrRecordNotFound {
|
if err != gorm.ErrRecordNotFound {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var up = &model.Submit{}
|
||||||
|
if err := json.Unmarshal(payload, up); err != nil {
|
||||||
|
if err != gorm.ErrRecordNotFound {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(up.DateTime)
|
||||||
|
fmt.Println(up)
|
||||||
|
if err := db.Create(up).Error; err != nil {
|
||||||
|
if err != gorm.ErrRecordNotFound {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
c.JSON(200, gin.H{
|
c.JSON(200, gin.H{
|
||||||
"flag": "success",
|
"flag": "success",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//GetForm 获取全部表单
|
//QuestionList 获取全部表单
|
||||||
func GetForm(c *gin.Context) {
|
func QuestionList(c *gin.Context) {
|
||||||
db := mysql.Connect()
|
db := mysql.New()
|
||||||
var forms []model.Submit
|
var forms []model.Submit
|
||||||
if err := db.Find(&forms).Error; err != nil {
|
if err := db.Where("state=?", 0).Find(&forms).Error; err != nil {
|
||||||
if err != gorm.ErrRecordNotFound {
|
if err != gorm.ErrRecordNotFound {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
@ -39,9 +53,9 @@ func GetForm(c *gin.Context) {
|
||||||
// c.JSON(200, "ok")
|
// c.JSON(200, "ok")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Query 查询id对应表单
|
// QuestionQuery 查询id对应表单
|
||||||
func Query(c *gin.Context) {
|
func QuestionQuery(c *gin.Context) {
|
||||||
db := mysql.Connect()
|
db := mysql.New()
|
||||||
var query = model.Submit{}
|
var query = model.Submit{}
|
||||||
var id = c.Param("id")
|
var id = c.Param("id")
|
||||||
if err := db.Where("formid=?", id).Find(&query).Error; err != nil {
|
if err := db.Where("formid=?", id).Find(&query).Error; err != nil {
|
||||||
|
|
@ -52,12 +66,12 @@ func Query(c *gin.Context) {
|
||||||
c.JSON(200, query)
|
c.JSON(200, query)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete 删除id对应表单
|
// QuestionDelete 删除id对应表单
|
||||||
func Delete(c *gin.Context) {
|
func QuestionDelete(c *gin.Context) {
|
||||||
db := mysql.Connect()
|
db := mysql.New()
|
||||||
var query = model.Submit{}
|
var query = model.Submit{}
|
||||||
var id = c.Param("id")
|
var id = c.Param("id")
|
||||||
if err := db.Where("formid=?", id).Delete(&query).Error; err != nil {
|
if err := db.Model(&query).Where("formid=?", id).Update("state", 1).Error; err != nil {
|
||||||
if err != gorm.ErrRecordNotFound {
|
if err != gorm.ErrRecordNotFound {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
@ -67,9 +81,9 @@ func Delete(c *gin.Context) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update 更新id对应表单
|
// QuestionUpdate 更新id对应表单
|
||||||
func Update(c *gin.Context) {
|
func QuestionUpdate(c *gin.Context) {
|
||||||
db := mysql.Connect()
|
db := mysql.New()
|
||||||
formid := c.Param("id")
|
formid := c.Param("id")
|
||||||
payload, err := ioutil.ReadAll(c.Request.Body)
|
payload, err := ioutil.ReadAll(c.Request.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -4,12 +4,12 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"myschools.me/wyh/questionnaire_survey/model"
|
"myschools.me/wyh/questionnaire_survey/model"
|
||||||
"myschools.me/wyh/questionnaire_survey/mysql"
|
mysql "myschools.me/wyh/questionnaire_survey/mysql1"
|
||||||
)
|
)
|
||||||
|
|
||||||
//InitMysql 初始化mysql
|
//InitMysql 初始化mysql
|
||||||
func InitMysql() {
|
func InitMysql() {
|
||||||
db := mysql.Connect()
|
db := mysql.New()
|
||||||
if err := db.AutoMigrate(&model.Submit{}); err != nil {
|
if err := db.AutoMigrate(&model.Submit{}); err != nil {
|
||||||
fmt.Println("迁移失败")
|
fmt.Println("迁移失败")
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
52
main.go
52
main.go
|
|
@ -1,11 +1,61 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import "github.com/gin-gonic/gin"
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
APPNAME = "Question"
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
cf := flag.String("config", "config.yaml", "file of config")
|
||||||
|
flag.Parse()
|
||||||
|
viper.SetConfigFile(*cf)
|
||||||
|
if err := viper.ReadInConfig(); err != nil {
|
||||||
|
log.WithFields(log.Fields{
|
||||||
|
"func": "main",
|
||||||
|
}).Errorf("%s", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
//返回数据格式是json
|
||||||
|
http.HandleFunc("/", receiveClientRequest)
|
||||||
|
|
||||||
InitMysql()
|
InitMysql()
|
||||||
// handler.SendForm()
|
// handler.SendForm()
|
||||||
router := gin.New()
|
router := gin.New()
|
||||||
setupRouters(router)
|
setupRouters(router)
|
||||||
|
// s := &http.Server{
|
||||||
|
// Addr: viper.GetString("api.host"),
|
||||||
|
// Handler: router,
|
||||||
|
// ReadTimeout: 10 * time.Second,
|
||||||
|
// WriteTimeout: 10 * time.Second,
|
||||||
|
// MaxHeaderBytes: 1 << 20,
|
||||||
|
// }
|
||||||
|
// fmt.Println(viper.GetString("api.host"))
|
||||||
|
// log.WithFields(log.Fields{
|
||||||
|
// "func": "main",
|
||||||
|
// }).Infof("%s on %s", APPNAME, viper.GetString("api.host"))
|
||||||
|
|
||||||
|
// if err := s.ListenAndServe(); err != nil {
|
||||||
|
// log.WithFields(log.Fields{
|
||||||
|
// "func": "main",
|
||||||
|
// }).Errorf("%s", err.Error())
|
||||||
|
// }
|
||||||
router.Run()
|
router.Run()
|
||||||
}
|
}
|
||||||
|
func receiveClientRequest(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
|
w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域
|
||||||
|
w.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的类型
|
||||||
|
w.Header().Set("content-type", "application/json") //返回数据格式是json
|
||||||
|
|
||||||
|
r.ParseForm()
|
||||||
|
fmt.Println("收到客户端请求: ", r.Form)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,16 +4,15 @@ import "time"
|
||||||
|
|
||||||
// Submit 表单提交
|
// Submit 表单提交
|
||||||
type Submit struct {
|
type Submit struct {
|
||||||
Formid uint `gorm:"primary_key;auto-increment" json:"-"`
|
Formid uint `gorm:"primary_key;auto-increment" json:"formid"`
|
||||||
Name string `gorm:"type:varchar(50);not null;" json:"name"`
|
Name string `gorm:"type:varchar(50);not null;" json:"name"`
|
||||||
Email string `gorm:"type:varchar(50);not null;" json:"email"`
|
Email string `gorm:"type:varchar(50);not null;" json:"email"`
|
||||||
City string `gorm:"type:varchar(50);not null;" json:"city"`
|
City string `gorm:"type:varchar(50);not null;" json:"city"`
|
||||||
Date *time.Time `gorm:"index;" json:"date"`
|
DateTime string `gorm:"index" json:"date_time"`
|
||||||
Time *time.Time `gorm:"index;" json:"time"`
|
Sex string `gorm:"type:varchar(50);not null;" json:"sex"`
|
||||||
Sex string `gorm:"type:varchar(50);not null;" json:"sex"`
|
Hobby string `gorm:"type:varchar(50);not null;" json:"hobby"`
|
||||||
Hobby string `gorm:"type:varchar(50);not null;" json:"hobby"`
|
Desc string `gorm:"type:varchar(50);not null;" json:"desc"`
|
||||||
Desc string `gorm:"type:varchar(50);not null;" json:"desc"`
|
CreatedAt time.Time `json:"create_at"`
|
||||||
CreatedAt time.Time `json:"create_at"`
|
UpdatedAt time.Time `json:"update_at"`
|
||||||
UpdatedAt time.Time `json:"update_at"`
|
State int `gorm:"index" json:"state"`
|
||||||
Serial int `gorm:"size:16" json:"serial"`
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
package mysql
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
"gorm.io/driver/mysql"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
_db *gorm.DB
|
||||||
|
)
|
||||||
|
|
||||||
|
//New mysql instance
|
||||||
|
func New() *gorm.DB {
|
||||||
|
if _db != nil {
|
||||||
|
mysqlDB, err := _db.DB()
|
||||||
|
if err != nil {
|
||||||
|
log.WithFields(log.Fields{
|
||||||
|
"func": "New",
|
||||||
|
}).Errorf("%v", err)
|
||||||
|
goto RENEW
|
||||||
|
}
|
||||||
|
if err := mysqlDB.Ping(); err != nil {
|
||||||
|
mysqlDB.Close()
|
||||||
|
log.WithFields(log.Fields{
|
||||||
|
"func": "New",
|
||||||
|
}).Errorf("%v", err)
|
||||||
|
goto RENEW
|
||||||
|
}
|
||||||
|
return _db
|
||||||
|
}
|
||||||
|
|
||||||
|
RENEW:
|
||||||
|
db, err := gorm.Open(mysql.Open(viper.GetString("mysql.addr")), &gorm.Config{
|
||||||
|
SkipDefaultTransaction: true,
|
||||||
|
Logger: logger.Default.LogMode(logger.Silent),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.WithFields(log.Fields{
|
||||||
|
"func": "New",
|
||||||
|
}).Errorf("%v", err)
|
||||||
|
}
|
||||||
|
sdb, _ := db.DB()
|
||||||
|
sdb.SetConnMaxLifetime(time.Hour)
|
||||||
|
sdb.SetMaxIdleConns(viper.GetInt("mysql.maxidle"))
|
||||||
|
sdb.SetMaxOpenConns(viper.GetInt("mysql.maxopen"))
|
||||||
|
_db = db
|
||||||
|
return _db
|
||||||
|
}
|
||||||
13
routers.go
13
routers.go
|
|
@ -6,12 +6,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupRouters(r *gin.Engine) {
|
func setupRouters(r *gin.Engine) {
|
||||||
send := r.Group(`send`)
|
question := r.Group(`question`)
|
||||||
{
|
{
|
||||||
send.GET(`/sendform`, handler.SendForm)
|
|
||||||
send.POST(`/getform`, handler.GetForm)
|
question.POST(`/questionsubmit`, handler.QuestionSend)
|
||||||
send.GET(`/query/:id`, handler.Query)
|
question.POST(`/questionlist`, handler.QuestionList)
|
||||||
send.GET(`/delete/:id`, handler.Delete)
|
question.GET(`/questionquery/:id`, handler.QuestionQuery)
|
||||||
send.POST(`/update/:id`, handler.Update)
|
question.GET(`/questiondelete/:id`, handler.QuestionDelete)
|
||||||
|
question.POST(`/questionupdate/:id`, handler.QuestionUpdate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
37
test.http
37
test.http
|
|
@ -1,33 +1,42 @@
|
||||||
@url=http://localhost:8080
|
@url=http://localhost:8080/question
|
||||||
|
|
||||||
|
|
||||||
### form create
|
### form create
|
||||||
GET {{url}}/send/sendform HTTP/1.1
|
POST {{url}}/questionsubmit HTTP/1.1
|
||||||
|
|
||||||
|
{
|
||||||
|
"name":"zhangsan",
|
||||||
|
"email":"573805736@qq.com",
|
||||||
|
"city":"NingBo",
|
||||||
|
"date_time":"2021-07-27 15:03:41",
|
||||||
|
"sex":"Male",
|
||||||
|
"hobby":"Eat",
|
||||||
|
"desc":"暂无"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
### form search
|
### form search
|
||||||
POST {{url}}/send/getform HTTP/1.1
|
POST {{url}}/questionlist HTTP/1.1
|
||||||
|
|
||||||
|
|
||||||
### form query
|
### form query
|
||||||
GET {{url}}/send/query/2 HTTP/1.1
|
GET {{url}}/questionquery/2 HTTP/1.1
|
||||||
|
|
||||||
|
|
||||||
### form delete
|
### form delete
|
||||||
GET {{url}}/send/delete/4 HTTP/1.1
|
GET {{url}}/questiondelete/6 HTTP/1.1
|
||||||
|
|
||||||
|
|
||||||
### form update
|
### form update
|
||||||
POST {{url}}/send/update/2 HTTP/1.1
|
POST {{url}}/questionupdate/3 HTTP/1.1
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
"name":"lisi",
|
"name":"zhang",
|
||||||
"email":"781542268@qq.com",
|
"email":"573805736@qq.com",
|
||||||
"city":"QuZou",
|
"city":"BeiJin",
|
||||||
"data":null,
|
"date_time":"2021-07-27 15:03:41",
|
||||||
"time":null,
|
"sex":"Male",
|
||||||
"sex":"男",
|
"hobby":"Eat",
|
||||||
"hobby":"dyx",
|
"desc":"暂无"
|
||||||
"desc":"积极"
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue