question后台系统优化

This commit is contained in:
wyh 2021-08-10 11:11:28 +08:00
parent 5d22549de2
commit 0c1262df88
9 changed files with 190 additions and 64 deletions

View File

@ -1,13 +1,15 @@
# questionnaire_survey
### 概述
问卷调查实现token接口
问卷调查实现 token 接口
#### handler
```
POST /send/sendform --> 表单提交
POST /send/getform --> 所有提交表单列表
GET /send/query --> 根据表单id获取对应表单
POST /send/delete --> 根据表单id删除对应表单
POST /send/update --> 根据表单id修改对应表单
```

12
go.mod
View File

@ -3,20 +3,18 @@ module myschools.me/wyh/questionnaire_survey
go 1.16
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/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/mattn/go-isatty v0.0.13 // 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
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
golang.org/x/text v0.3.6 // indirect
google.golang.org/protobuf v1.27.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gorm.io/driver/mysql v1.1.1 // indirect
gorm.io/gorm v1.21.12 // indirect
gorm.io/driver/mysql v1.1.1
gorm.io/gorm v1.21.12
)

View File

@ -2,35 +2,49 @@ package handler
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"myschools.me/wyh/questionnaire_survey/model"
"myschools.me/wyh/questionnaire_survey/mysql"
mysql "myschools.me/wyh/questionnaire_survey/mysql1"
)
//SendForm 提交表单
func SendForm(c *gin.Context) {
db := mysql.Connect()
submit := model.Submit{Name: "zhangsan", Email: "573805736@qq.com", City: "NingBo", Sex: "男", Hobby: "cg", Desc: "暂无"}
if err := db.Create(&submit).Error; err != nil {
//QuestionSend 提交表单
func QuestionSend(c *gin.Context) {
db := mysql.New()
payload, err := ioutil.ReadAll(c.Request.Body)
if err != nil {
if err != gorm.ErrRecordNotFound {
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{
"flag": "success",
})
}
//GetForm 获取全部表单
func GetForm(c *gin.Context) {
db := mysql.Connect()
//QuestionList 获取全部表单
func QuestionList(c *gin.Context) {
db := mysql.New()
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 {
log.Fatal(err)
}
@ -39,9 +53,9 @@ func GetForm(c *gin.Context) {
// c.JSON(200, "ok")
}
// Query 查询id对应表单
func Query(c *gin.Context) {
db := mysql.Connect()
// QuestionQuery 查询id对应表单
func QuestionQuery(c *gin.Context) {
db := mysql.New()
var query = model.Submit{}
var id = c.Param("id")
if err := db.Where("formid=?", id).Find(&query).Error; err != nil {
@ -52,12 +66,12 @@ func Query(c *gin.Context) {
c.JSON(200, query)
}
// Delete 删除id对应表单
func Delete(c *gin.Context) {
db := mysql.Connect()
// QuestionDelete 删除id对应表单
func QuestionDelete(c *gin.Context) {
db := mysql.New()
var query = model.Submit{}
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 {
log.Fatal(err)
}
@ -67,9 +81,9 @@ func Delete(c *gin.Context) {
})
}
// Update 更新id对应表单
func Update(c *gin.Context) {
db := mysql.Connect()
// QuestionUpdate 更新id对应表单
func QuestionUpdate(c *gin.Context) {
db := mysql.New()
formid := c.Param("id")
payload, err := ioutil.ReadAll(c.Request.Body)
if err != nil {

View File

@ -4,12 +4,12 @@ import (
"fmt"
"myschools.me/wyh/questionnaire_survey/model"
"myschools.me/wyh/questionnaire_survey/mysql"
mysql "myschools.me/wyh/questionnaire_survey/mysql1"
)
//InitMysql 初始化mysql
func InitMysql() {
db := mysql.Connect()
db := mysql.New()
if err := db.AutoMigrate(&model.Submit{}); err != nil {
fmt.Println("迁移失败")
} else {

52
main.go
View File

@ -1,11 +1,61 @@
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() {
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()
// handler.SendForm()
router := gin.New()
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()
}
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)
}

View File

@ -4,16 +4,15 @@ import "time"
// Submit 表单提交
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"`
Email string `gorm:"type:varchar(50);not null;" json:"email"`
City string `gorm:"type:varchar(50);not null;" json:"city"`
Date *time.Time `gorm:"index;" json:"date"`
Time *time.Time `gorm:"index;" json:"time"`
DateTime string `gorm:"index" json:"date_time"`
Sex string `gorm:"type:varchar(50);not null;" json:"sex"`
Hobby string `gorm:"type:varchar(50);not null;" json:"hobby"`
Desc string `gorm:"type:varchar(50);not null;" json:"desc"`
CreatedAt time.Time `json:"create_at"`
UpdatedAt time.Time `json:"update_at"`
Serial int `gorm:"size:16" json:"serial"`
State int `gorm:"index" json:"state"`
}

53
mysql1/mysql.go Normal file
View File

@ -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
}

View File

@ -6,12 +6,13 @@ import (
)
func setupRouters(r *gin.Engine) {
send := r.Group(`send`)
question := r.Group(`question`)
{
send.GET(`/sendform`, handler.SendForm)
send.POST(`/getform`, handler.GetForm)
send.GET(`/query/:id`, handler.Query)
send.GET(`/delete/:id`, handler.Delete)
send.POST(`/update/:id`, handler.Update)
question.POST(`/questionsubmit`, handler.QuestionSend)
question.POST(`/questionlist`, handler.QuestionList)
question.GET(`/questionquery/:id`, handler.QuestionQuery)
question.GET(`/questiondelete/:id`, handler.QuestionDelete)
question.POST(`/questionupdate/:id`, handler.QuestionUpdate)
}
}

View File

@ -1,33 +1,42 @@
@url=http://localhost:8080
@url=http://localhost:8080/question
### 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
POST {{url}}/send/getform HTTP/1.1
POST {{url}}/questionlist HTTP/1.1
### form query
GET {{url}}/send/query/2 HTTP/1.1
GET {{url}}/questionquery/2 HTTP/1.1
### form delete
GET {{url}}/send/delete/4 HTTP/1.1
GET {{url}}/questiondelete/6 HTTP/1.1
### form update
POST {{url}}/send/update/2 HTTP/1.1
POST {{url}}/questionupdate/3 HTTP/1.1
{
"name":"lisi",
"email":"781542268@qq.com",
"city":"QuZou",
"data":null,
"time":null,
"sex":"男",
"hobby":"dyx",
"desc":"积极"
"name":"zhang",
"email":"573805736@qq.com",
"city":"BeiJin",
"date_time":"2021-07-27 15:03:41",
"sex":"Male",
"hobby":"Eat",
"desc":"暂无"
}