Skip to content

Commit ae42da9

Browse files
committed
新增功能-api生成数据库并初始化回写配置
修改gva initdb 判断是否已经创建的一些小问题 新增api生成数据库并初始化回写配置 修改文件: server/cmd/gva/initdb.go server/cmd/information/data_authorities.go server/cmd/information/workflow.go server/initialize/gorm server/main.go 新增文件: server/api/v1/sys.initdb.go server/middleware/init.go server/model/sys_init.go server/service/sys_initdb.go servcer/utils/init_db.go 迁移文件 server/cmd/gva/mysql.go->server/utils/mysql.go
1 parent 1e9baff commit ae42da9

File tree

12 files changed

+219
-29
lines changed

12 files changed

+219
-29
lines changed

server/api/v1/sys_initdb.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package v1
2+
3+
import (
4+
"gin-vue-admin/global"
5+
"gin-vue-admin/model"
6+
"gin-vue-admin/model/response"
7+
"gin-vue-admin/service"
8+
9+
"go.uber.org/zap"
10+
11+
"github.com/gin-gonic/gin"
12+
)
13+
14+
// @Tags InitDB
15+
// @Summary 初始化用户数据库
16+
// @Security ApiKeyAuth
17+
// @Produce application/json
18+
// @Param data body request.Empty true "空"
19+
// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
20+
// @Router /init/db [post]
21+
func InitDB(c *gin.Context) {
22+
if global.GVA_DB != nil {
23+
global.GVA_LOG.Error("非法访问")
24+
response.FailWithMessage("非法访问", c)
25+
return
26+
}
27+
var dbInfo model.InitDB
28+
if err := c.ShouldBindJSON(&dbInfo); err != nil {
29+
global.GVA_LOG.Error("参数校验不通过", zap.Any("err", err))
30+
response.FailWithMessage("参数校验不通过", c)
31+
return
32+
}
33+
if err := service.InitDB(dbInfo); err != nil {
34+
global.GVA_LOG.Error("自动创建数据库失败", zap.Any("err", err))
35+
response.FailWithMessage("自动创建数据库失败", c)
36+
return
37+
}
38+
response.OkWithData("自动创建数据库成功", c)
39+
}

server/cmd/gva/initdb.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ package gva
1717

1818
import (
1919
"gin-vue-admin/core"
20+
"gin-vue-admin/utils"
21+
2022
"github.com/gookit/color"
2123

2224
_ "gin-vue-admin/core"
@@ -38,16 +40,16 @@ var initdbCmd = &cobra.Command{
3840
frame, _ := cmd.Flags().GetString("frame")
3941
path, _ := cmd.Flags().GetString("path")
4042
global.GVA_VP = core.Viper(path)
41-
global.GVA_LOG = core.Zap() // 初始化zap日志库
42-
Mysql.CheckDatabase()
43-
Mysql.CheckUtf8mb4()
44-
Mysql.Info()
45-
Mysql.Init()
43+
global.GVA_LOG = core.Zap() // 初始化zap日志库
44+
utils.Mysql.CheckDatabase()
45+
utils.Mysql.CheckUtf8mb4()
46+
utils.Mysql.Info()
47+
utils.Mysql.Init()
4648
switch frame {
4749
case "gin":
4850
if global.GVA_CONFIG.System.DbType == "mysql" {
49-
Mysql.AutoMigrateTables()
50-
Mysql.InitData()
51+
utils.Mysql.AutoMigrateTables()
52+
utils.Mysql.InitData()
5153
}
5254
case "gf":
5355
color.Info.Println("gf功能开发中")

server/cmd/information/system/data_authorities.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package information
22

33
import (
44
"gin-vue-admin/global"
5+
56
"github.com/gookit/color"
67
"gorm.io/gorm"
78
)
@@ -27,7 +28,7 @@ var infos = []DataAuthority{
2728
//@description: sys_data_authority_id 表数据初始化
2829
func (d *dataAuthorities) Init() error {
2930
return global.GVA_DB.Table("sys_data_authority_id").Transaction(func(tx *gorm.DB) error {
30-
if tx.Where("authority_id IN ('888', '9528') ").Find(&[]DataAuthority{}).RowsAffected == 5 {
31+
if tx.Where("sys_authority_authority_id IN ('888', '9528') ").Find(&[]DataAuthority{}).RowsAffected == 5 {
3132
color.Danger.Println("\n[Mysql] --> sys_data_authority_id 表初始数据已存在!")
3233
return nil
3334
}

server/cmd/information/system/workflow.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ package information
33
import (
44
"gin-vue-admin/global"
55
"gin-vue-admin/model"
6+
"time"
7+
68
"github.com/gookit/color"
79
"gorm.io/gorm"
8-
"time"
910
)
1011

1112
var Workflow = new(workflow)
@@ -43,19 +44,33 @@ var WorkflowEndPoint = []model.WorkflowEndPoint{
4344
//@description: 工作流相关 表数据初始化
4445
func (w *workflow) Init() error {
4546
return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
46-
if err := tx.Create(&WorkflowProcess).Error; err != nil { // 遇到错误时回滚事务
47+
if tx.Where("id IN ?", []string{"leaveFlow"}).Find(&[]model.WorkflowProcess{}).RowsAffected == 1 {
48+
// continue
49+
} else if err := tx.Create(&WorkflowProcess).Error; err != nil { // 遇到错误时回滚事务
4750
return err
4851
}
49-
if err := tx.Create(&WorkflowNodes).Error; err != nil { // 遇到错误时回滚事务
52+
53+
if tx.Where("id IN ?", []string{"end1603681358043", "end1603681360882", "start1603681292875", "userTask1603681299962"}).Find(&[]model.WorkflowNode{}).RowsAffected == 4 {
54+
// continue
55+
} else if err := tx.Create(&WorkflowNodes).Error; err != nil { // 遇到错误时回滚事务
5056
return err
5157
}
52-
if err := tx.Create(&WorkflowEdge).Error; err != nil { // 遇到错误时回滚事务
58+
59+
if tx.Where("id IN ?", []string{"flow1604985849039", "flow1604985879574", "flow1604985881207"}).Find(&[]model.WorkflowEdge{}).RowsAffected == 3 {
60+
61+
} else if err := tx.Create(&WorkflowEdge).Error; err != nil { // 遇到错误时回滚事务
5362
return err
5463
}
55-
if err := tx.Create(&WorkflowStartPoint).Error; err != nil { // 遇到错误时回滚事务
64+
65+
if tx.Where("workflow_edge_id IN ?", []string{"flow1604985849039", "flow1604985879574", "flow1604985881207"}).Find(&[]model.WorkflowStartPoint{}).RowsAffected == 3 {
66+
67+
} else if err := tx.Create(&WorkflowStartPoint).Error; err != nil { // 遇到错误时回滚事务
5668
return err
5769
}
58-
if err := tx.Create(&WorkflowEndPoint).Error; err != nil { // 遇到错误时回滚事务
70+
71+
if tx.Where("workflow_edge_id IN ?", []string{"flow1604985849039", "flow1604985879574", "flow1604985881207"}).Find(&[]model.WorkflowEndPoint{}).RowsAffected == 3 {
72+
73+
} else if err := tx.Create(&WorkflowEndPoint).Error; err != nil { // 遇到错误时回滚事务
5974
return err
6075
}
6176
color.Info.Println("\n[Mysql] --> 工作流相关 表初始数据成功!")

server/initialize/gorm.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ import (
44
"gin-vue-admin/global"
55
"gin-vue-admin/initialize/internal"
66
"gin-vue-admin/model"
7+
"os"
8+
79
"go.uber.org/zap"
810
"gorm.io/driver/mysql"
911
"gorm.io/gorm"
1012
"gorm.io/gorm/logger"
11-
"os"
1213
)
1314

1415
//@author: SliverHorn
@@ -70,6 +71,9 @@ func MysqlTables(db *gorm.DB) {
7071

7172
func GormMysql() *gorm.DB {
7273
m := global.GVA_CONFIG.Mysql
74+
if m.Dbname == "" {
75+
return nil
76+
}
7377
dsn := m.Username + ":" + m.Password + "@tcp(" + m.Path + ")/" + m.Dbname + "?" + m.Config
7478
mysqlConfig := mysql.Config{
7579
DSN: dsn, // DSN data source name
@@ -80,8 +84,9 @@ func GormMysql() *gorm.DB {
8084
SkipInitializeWithVersion: false, // 根据版本自动配置
8185
}
8286
if db, err := gorm.Open(mysql.New(mysqlConfig), gormConfig(m.LogMode)); err != nil {
83-
global.GVA_LOG.Error("MySQL启动异常", zap.Any("err", err))
84-
os.Exit(0)
87+
//global.GVA_LOG.Error("MySQL启动异常", zap.Any("err", err))
88+
//os.Exit(0)
89+
//return nil
8590
return nil
8691
} else {
8792
sqlDB, _ := db.DB()

server/initialize/router.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
package initialize
22

33
import (
4+
v1 "gin-vue-admin/api/v1"
45
_ "gin-vue-admin/docs"
56
"gin-vue-admin/global"
67
"gin-vue-admin/middleware"
78
"gin-vue-admin/router"
9+
"net/http"
10+
811
"github.com/gin-gonic/gin"
912
"github.com/swaggo/gin-swagger"
1013
"github.com/swaggo/gin-swagger/swaggerFiles"
11-
"net/http"
1214
)
1315

1416
// 初始化总路由
1517

1618
func Routers() *gin.Engine {
1719
var Router = gin.Default()
20+
Router.POST("initdb", v1.InitDB)
1821
Router.StaticFS(global.GVA_CONFIG.Local.Path, http.Dir(global.GVA_CONFIG.Local.Path)) // 为用户头像和文件提供静态地址
1922
// Router.Use(middleware.LoadTls()) // 打开就能玩https了
2023
global.GVA_LOG.Info("use middleware logger")

server/main.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@ import (
1414
// @name x-token
1515
// @BasePath /
1616
func main() {
17-
global.GVA_VP = core.Viper() // 初始化Viper
18-
global.GVA_LOG = core.Zap() // 初始化zap日志库
19-
global.GVA_DB = initialize.Gorm() // gorm连接数据库
20-
initialize.MysqlTables(global.GVA_DB) // 初始化表
21-
// 程序结束前关闭数据库链接
22-
db, _ := global.GVA_DB.DB()
23-
defer db.Close()
24-
17+
global.GVA_VP = core.Viper() // 初始化Viper
18+
global.GVA_LOG = core.Zap() // 初始化zap日志库
19+
global.GVA_DB = initialize.Gorm() // gorm连接数据库
20+
if global.GVA_DB != nil {
21+
initialize.MysqlTables(global.GVA_DB) // 初始化表
22+
// 程序结束前关闭数据库链接
23+
db, _ := global.GVA_DB.DB()
24+
defer db.Close()
25+
}
2526
core.RunWindowsServer()
2627
}

server/middleware/init.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package middleware
2+
3+
import (
4+
"gin-vue-admin/global"
5+
"gin-vue-admin/model/response"
6+
7+
"github.com/gin-gonic/gin"
8+
)
9+
10+
func InitCheck() gin.HandlerFunc {
11+
return func(c *gin.Context) {
12+
if global.GVA_DB == nil {
13+
// 未初始化
14+
response.FailWithDetailed(gin.H{"database": true}, "数据库未初始化", c)
15+
c.Abort()
16+
return
17+
}
18+
c.Next()
19+
}
20+
}

server/model/sys_init.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package model
2+
3+
type InitDB struct {
4+
Host string `json:"host"`
5+
Port string `json:"port"`
6+
UserName string `json:"user_name" binding:"required"`
7+
Password string `json:"password"`
8+
DBName string `json:"db_name" binding:"required"`
9+
}

server/service/sys_initdb.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package service
2+
3+
import (
4+
"fmt"
5+
"gin-vue-admin/global"
6+
"gin-vue-admin/model"
7+
"gin-vue-admin/utils"
8+
)
9+
10+
//@author: [songzhibin97](https://github.com/songzhibin97)
11+
//@function: InitDB
12+
//@description: 创建数据库并初始化
13+
//@param: authorityId string
14+
//@return: err error, treeMap map[string][]model.SysMenu
15+
16+
func InitDB(conf model.InitDB) error {
17+
if conf.Host == "" {
18+
conf.Host = "127.0.0.1"
19+
}
20+
if conf.Port == "" {
21+
conf.Port = "3306"
22+
}
23+
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/", conf.UserName, conf.Password, conf.Host, conf.Port)
24+
fmt.Println(dsn)
25+
createSql := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;", conf.DBName)
26+
if err := utils.CreateTable(dsn, "mysql", createSql); err != nil {
27+
return err
28+
}
29+
setting := map[string]interface{}{
30+
"mysql.path": fmt.Sprintf("%s:%s", conf.Host, conf.Port),
31+
"mysql.db-name": conf.DBName,
32+
"mysql.username": conf.UserName,
33+
"mysql.password": conf.Password,
34+
}
35+
if err := utils.WriteConfig(global.GVA_VP, setting); err != nil {
36+
return err
37+
}
38+
utils.InitDB()
39+
return nil
40+
}

server/utils/init_db.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package utils
2+
3+
import (
4+
"database/sql"
5+
6+
"github.com/spf13/viper"
7+
)
8+
9+
//@author: [songzhibin97](https://github.com/songzhibin97)
10+
//@function: CreateTable
11+
//@description: 创建数据库(mysql)
12+
//@param: dsn string, driver string, createSql
13+
//@return: error
14+
15+
func CreateTable(dsn string, driver string, createSql string) error {
16+
db, err := sql.Open(driver, dsn)
17+
if err != nil {
18+
return err
19+
}
20+
defer db.Close()
21+
if err = db.Ping(); err != nil {
22+
return err
23+
}
24+
_, err = db.Exec(createSql)
25+
return err
26+
}
27+
28+
//@author: [songzhibin97](https://github.com/songzhibin97)
29+
//@function: WriteConfig
30+
//@description: 回写配置
31+
//@param:
32+
//@return: error
33+
34+
func WriteConfig(viper *viper.Viper, conf map[string]interface{}) error {
35+
for k, v := range conf {
36+
viper.Set(k, v)
37+
}
38+
return viper.WriteConfig()
39+
}
40+
41+
//@author: [Songzhibin97](https://github.com/Songzhibin97)
42+
//@function: InitDB
43+
//@description: 初始化db
44+
//@param:
45+
//@return: error
46+
47+
func InitDB() {
48+
Mysql.CheckDatabase()
49+
Mysql.CheckUtf8mb4()
50+
Mysql.Info()
51+
Mysql.Init()
52+
Mysql.AutoMigrateTables()
53+
Mysql.InitData()
54+
}

server/cmd/gva/mysql.go renamed to server/utils/mysql.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
1-
package gva
1+
package utils
22

33
import (
44
"fmt"
55
information "gin-vue-admin/cmd/information/extra"
66
data "gin-vue-admin/cmd/information/system"
77
"gin-vue-admin/global"
88
"gin-vue-admin/model"
9+
"os"
10+
"strings"
11+
912
gormadapter "github.com/casbin/gorm-adapter/v3"
1013
"github.com/gookit/color"
1114
"gorm.io/driver/mysql"
1215
"gorm.io/gorm"
1316
"gorm.io/gorm/logger"
14-
"os"
15-
"strings"
1617
)
1718

1819
type DatabaseInfo struct {

0 commit comments

Comments
 (0)