Просмотр исходного кода

新增vue对象,vueapi,go路由api

Administrator 2 лет назад
Родитель
Сommit
159e76a5bd
6 измененных файлов с 561 добавлено и 269 удалено
  1. 9 7
      main.go
  2. 88 0
      text/TextFile
  3. 111 0
      util/MysqlBaseData.go
  4. 275 0
      util/MysqlCreateGo.go
  5. 78 0
      util/MysqlCreateVue.go
  6. 0 262
      util/MysqlToStruct.go

+ 9 - 7
main.go

@@ -9,11 +9,13 @@ func init() {
 	configs.ConfigInit()
 }
 func main() {
-	util.MysqlToStruct(configs.Engine)
-	util.MysqlToDao(configs.Engine)
-	//user, err := dao.SaveUser(&domain.User{})
-	//if err != nil {
-	//fmt.Println(err)
-	//}
-	//fmt.Println(user)
+	//初始化
+	util.InitMTableArray(configs.Engine)
+	//执行生成,go
+	//util.MysqlToStruct()
+	//util.MysqlToDao()
+	//util.MysqlToBaseCRUDRouter()
+	//执行生成,vue
+	util.MysqlToVueApi()
+
 }

+ 88 - 0
text/TextFile

@@ -0,0 +1,88 @@
+package router
+
+import (
+	"demo/data/dao/manage"
+	"demo/data/domain"
+	"demo/share"
+	"encoding/json"
+	"github.com/gin-gonic/gin"
+	"github.com/spf13/cast"
+)
+
+func Base" + table.AaBbName + "Router(group *gin.RouterGroup) {
+	Base" + table.AaBbName + "Group := group.Group("/back/base")
+	PushRouter(Base" + table.AaBbName + "Group, "GET", "/" + table.aaBbName + "", GetBase" + table.AaBbName + "ById)
+	PushRouter(Base" + table.AaBbName + "Group, "POST", "/" + table.aaBbName + "/list", GetBase" + table.AaBbName + "List)
+	PushRouter(Base" + table.AaBbName + "Group, "POST", "/" + table.aaBbName + "/in", GetBase" + table.AaBbName + "ListInId)
+	PushRouter(Base" + table.AaBbName + "Group, "POST", "/" + table.aaBbName + "", SaveBase" + table.AaBbName + ")
+	PushRouter(Base" + table.AaBbName + "Group, "PUT", "/" + table.aaBbName + "", UpdateBase" + table.AaBbName + ")
+	PushRouter(Base" + table.AaBbName + "Group, "DELETE", "/" + table.aaBbName + "", DeleteBase" + table.AaBbName + ")
+}
+
+func GetBase" + table.AaBbName + "ById(c *gin.Context) {
+	id := c.Param("id")
+	" + table.aaBbName + ", err := manage.Get" + table.AaBbName + "ById(cast.ToInt64(id))
+	if err != nil {
+		c.JSON(200, CreateResultError(500, "用户查询不存在"))
+	}
+	c.JSON(200, CreateResultData(" + table.aaBbName + "))
+}
+
+func GetBase" + table.AaBbName + "List(c *gin.Context) {
+	data := share.GetJsonAnyParam(c)
+	param, _ := data("param")
+	pageNum, _ := data("pageNum")
+	pageSize, _ := data("pageSize")
+	" + table.aaBbName + " := domain." + table.AaBbName + "{}
+	err := json.Unmarshal([]byte(cast.ToString(param)), &" + table.aaBbName + ")
+	list, err := manage.Get" + table.AaBbName + "List(" + table.aaBbName + ", cast.ToInt(pageNum), cast.ToInt(pageSize))
+	if err != nil {
+		c.JSON(200, CreateResultError(500, "查询错误"))
+	}
+	c.JSON(200, CreateResultData(list))
+}
+
+func GetBase" + table.AaBbName + "ListInId(c *gin.Context) {
+	data := share.GetJsonAnyParam(c)
+	idsString, _ := data("ids")
+	var ids []int64
+	err := json.Unmarshal([]byte(cast.ToString(idsString)), &ids)
+	list, err := manage.Get" + table.AaBbName + "ListInId(ids)
+	if err != nil {
+		c.JSON(200, CreateResultError(500, "查询错误"))
+	}
+	c.JSON(200, CreateResultData(list))
+}
+
+func SaveBase" + table.AaBbName + "(c *gin.Context) {
+	data := share.GetJsonAnyParam(c)
+	" + table.aaBbName + "Param, _ := data("" + table.aaBbName + "")
+	" + table.aaBbName + " := domain." + table.AaBbName + "{}
+	err := json.Unmarshal([]byte(cast.ToString(" + table.aaBbName + "Param)), &" + table.aaBbName + ")
+	save" + table.AaBbName + ", err := manage.Save" + table.AaBbName + "(&" + table.aaBbName + ")
+	if err != nil {
+		c.JSON(200, CreateResultError(500, "保存错误"))
+	}
+	c.JSON(200, CreateResultData(save" + table.AaBbName + "))
+}
+
+func UpdateBase" + table.AaBbName + "(c *gin.Context) {
+	data := share.GetJsonAnyParam(c)
+	" + table.aaBbName + ", _ := data("" + table.aaBbName + "")
+	id, _ := data("id")
+
+	set" + table.AaBbName + ", b, err := manage.Set" + table.AaBbName + "(cast.ToStringMap(" + table.aaBbName + "), cast.ToInt64(id))
+	if err != nil || !b {
+		c.JSON(200, CreateResultError(500, "修改错误"))
+	}
+	c.JSON(200, CreateResultData(set" + table.AaBbName + "))
+}
+
+func DeleteBase" + table.AaBbName + "(c *gin.Context) {
+	id := c.Param("id")
+	res := manage.Delete" + table.AaBbName + "(cast.ToInt64(id))
+	if !res {
+		c.JSON(200, CreateResultError(500, "删除错误"))
+	}
+	c.JSON(200, CreateResult())
+}

+ 111 - 0
util/MysqlBaseData.go

@@ -0,0 +1,111 @@
+package util
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+	"strings"
+	"xorm.io/xorm"
+)
+
+type MTable struct {
+	Name     string
+	AaBbName string
+	aaBbName string
+	Comment  string
+	existId  bool
+	MColumns []MColumn
+}
+type MColumn struct {
+	Name        string //aa_bb
+	AaBbName    string
+	aaBbName    string
+	Comment     string
+	SqlTypeName string
+	TypeName    string
+	VueTypeName string
+	Length      int64
+	Length2     int64
+	IsKey       bool
+}
+
+func (receiver MTable) String() string {
+	return fmt.Sprintf("Name:%s,Comment:%s,MColumns:%s\n\n\n", receiver.Name, receiver.Comment, receiver.MColumns)
+}
+func (receiver MColumn) String() string {
+	return fmt.Sprintf("Name:%s,AaBbName:%s,aaBbName:%s,Comment:%s,SqlTypeName:%s,TypeName:%s,Length:%d,Length2:%d\n",
+		receiver.Name, receiver.AaBbName, receiver.aaBbName, receiver.Comment, receiver.SqlTypeName, receiver.TypeName, receiver.Length, receiver.Length2)
+}
+
+var MTables = make([]MTable, 0)
+
+// InitMTableArray 初始化加载数据库结构并存储
+func InitMTableArray(engine *xorm.Engine) {
+	if len(MTables) > 0 {
+		return
+	}
+	metas, err := engine.DBMetas()
+	if err != nil {
+		fmt.Println(err)
+	}
+	for _, meta := range metas {
+		var mTable MTable
+		mTable.Name = meta.Name
+		mTable.AaBbName, mTable.aaBbName = formatName(meta.Name)
+		mTable.Comment = meta.Comment
+
+		var cols = meta.Columns()
+		for i := range cols {
+			var mColumn MColumn
+			mColumn.Name = cols[i].Name
+			mColumn.AaBbName, mColumn.aaBbName = formatName(cols[i].Name)
+			mColumn.IsKey = cols[i].IsPrimaryKey
+
+			if cols[i].IsPrimaryKey && cols[i].IsAutoIncrement {
+				mTable.existId = true
+			}
+			mColumn.Comment = cols[i].Comment
+			mColumn.SqlTypeName = cols[i].SQLType.Name
+			mColumn.TypeName = formatSqlType(mColumn.SqlTypeName)
+			mColumn.VueTypeName = formatSqlToVueType(mColumn.SqlTypeName)
+			mColumn.Length = cols[i].Length
+			mColumn.Length2 = cols[i].Length2
+			mTable.MColumns = append(mTable.MColumns, mColumn)
+
+		}
+		MTables = append(MTables, mTable)
+		fmt.Println(mTable)
+	}
+}
+
+// 将名字修改成大驼峰和小驼峰的格式进行返回
+func formatName(name string) (string, string) {
+	split := strings.Split(strings.ToLower(name), "_")
+	if len(split) == 1 {
+		return strings.ToUpper(split[0][0:1]) + split[0][1:], split[0]
+	} else {
+		AaBb := ""
+		aaBb := ""
+		for j := range split {
+			AaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
+			if j == 0 {
+				aaBb += split[j]
+			} else {
+				aaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
+			}
+		}
+		return AaBb, aaBb
+	}
+}
+
+func WriteFile(fileUrl, content string) {
+	os.Truncate(fileUrl, 0)
+	file, _ := os.OpenFile(fileUrl, os.O_CREATE|os.O_RDWR, 0666)
+	defer file.Close()
+
+	writer := bufio.NewWriter(file)
+
+	writer.WriteString(content)
+	writer.Flush()
+
+}

+ 275 - 0
util/MysqlCreateGo.go

@@ -0,0 +1,275 @@
+package util
+
+import (
+	"bufio"
+	"fmt"
+	"os"
+	"strings"
+)
+
+// const base_url = "E:\\project\\kkc\\kkc-go\\"
+const base_url = "D:\\project\\study\\kkc\\kkc-go\\"
+
+// 修改mysql数据库对应的go类型
+func formatSqlType(str string) string {
+	str = strings.ToLower(str)
+	switch str {
+	case "varchar":
+		return "string"
+	case "int":
+		return "int64"
+	case "decimal":
+		return "float64"
+	case "datetime":
+		return "time.Time"
+	case "longblob":
+		return "string"
+	default:
+		panic("未定义的类型:" + str)
+	}
+}
+
+//----------------------------------------------------------
+
+// MysqlToStruct 根据mysql 生成对应的struct及String函数
+func MysqlToStruct() {
+	var structString = "package domain\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\n"
+	for _, mtable := range MTables {
+		structString += fmt.Sprint("//", mtable.AaBbName, " ", mtable.Comment, "\n",
+			"type ", mtable.AaBbName, " struct {\n")
+
+		cols := mtable.MColumns
+		var toString = ""
+		for i := range cols {
+			if cols[i].aaBbName == "id" && cols[i].IsKey {
+				structString += fmt.Sprint("    ", cols[i].AaBbName, " int64 `json:\"", cols[i].aaBbName, "\"`",
+					"// ", cols[i].Length, " ", cols[i].Length2, " 注释:", cols[i].Comment, "\n")
+				toString += fmt.Sprint(cols[i].AaBbName, ":\", receiver.", cols[i].AaBbName, ", \",")
+
+			} else {
+				structString += fmt.Sprint("    ", cols[i].AaBbName, " ", cols[i].TypeName, " `xorm:\"", cols[i].Name, "\"  json:\"", cols[i].aaBbName, "\"`",
+					"// ", cols[i].Length, " ", cols[i].Length2, " 注释:", cols[i].Comment, "\n")
+				toString += fmt.Sprint(cols[i].AaBbName, ":\", receiver.", cols[i].AaBbName, ", \",")
+			}
+		}
+		structString += "}\n\n"
+		structString += fmt.Sprint("func (receiver ", mtable.AaBbName, ") String() string {\n")
+		structString += fmt.Sprint("    return fmt.Sprint(\"", mtable.AaBbName, "{", toString[0:len(toString)-1], "}\")\n}\n\n")
+		fmt.Println(structString)
+	}
+	fileUrl := base_url + "\\data\\domain\\DoMain.go"
+	//清空文件
+	os.Truncate(fileUrl, 0)
+	file, _ := os.OpenFile(fileUrl, os.O_CREATE|os.O_RDWR, 0666)
+	defer file.Close()
+
+	writer := bufio.NewWriter(file)
+	//writer.WriteString("package domain\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\n")
+	writer.WriteString(structString)
+	writer.Flush()
+
+	//file.Write([]byte("package domain\n\nimport \"time\"\n"))
+	//file.Write([]byte(structString))
+}
+
+// MysqlToDao 生成简单的CRUD dao层
+func MysqlToDao() {
+	var baseUrl = base_url + "data\\dao\\manage\\"
+	tables := MTables
+	for _, table := range tables {
+		var dao = ""
+		fileName := table.AaBbName + "Dao.go"
+		dao += "package manage\n\nimport (\n\t\"demo/configs\"\n\t\"demo/data/domain\"\n\t\"demo/data/domain/vo\"\n)\n"
+		//get
+		if table.Name == "role_authority" {
+			fmt.Println(table.existId, "====================>")
+		}
+		var idColumn MColumn
+		for _, column := range table.MColumns {
+			if column.IsKey {
+				idColumn = column
+				break
+			}
+		}
+		//没有id的不适用
+		if table.existId {
+			dao += "func Get" + table.AaBbName + "ById(id int64) (domain." + table.AaBbName + ", error) {" +
+				"\n\tvar " + table.aaBbName + " domain." + table.AaBbName + "" +
+				"\n\t_, err := configs.Engine.Where(\"id = ?\", id).Get(&" + table.aaBbName + ")" +
+				"\n\tif err != nil {" +
+				"\n\t\treturn " + table.aaBbName + ", err" +
+				"\n\t}" +
+				"\n\treturn " + table.aaBbName + ", nil" +
+				"\n}\n\n"
+		}
+		dao += "func Get" + table.AaBbName + "ListInId(ids []int64) ([]domain." + table.AaBbName + ", error) {" +
+			"\n\trows, err := configs.Engine.In(\"id\", ids).Rows(&domain." + table.AaBbName + "{})" +
+			"\n\tif err != nil {" +
+			"\n\t\treturn make([]domain." + table.AaBbName + ", 0), err" +
+			"\n\t}" +
+			"\n\tdefer rows.Close()" +
+			"\n\tvar list []domain." + table.AaBbName + "" +
+			"\n\tfor rows.Next() {" +
+			"\n\t\tvar u domain." + table.AaBbName + "" +
+			"\n\t\tlist = append(list, u)" +
+			"\n\t}" +
+			"\n\treturn list, nil" +
+			"\n}\n\n"
+
+		//list
+		dao += "func Get" + table.AaBbName + "List(" + table.aaBbName + " domain." + table.AaBbName + ", pageNum, pageSize int) (vo.BaseListVo, error) {" +
+			"\n\tvar arr []domain." + table.AaBbName +
+			"\n\tCount, err := configs.Engine.Limit(pageSize, (pageNum-1)*pageSize).Desc(\"id\").FindAndCount(&arr, &" + table.aaBbName + ")" +
+			"\n\tvar vo vo.BaseListVo" +
+			"\n\tif err != nil {" +
+			"\n\t\treturn vo, err" +
+			"\n\t}" +
+			"\n\tif err != nil {" +
+			"\n\t\treturn vo, err" +
+			"\n\t}" +
+			"\n\tvo.PageNum = pageNum" +
+			"\n\tvo.PageSize = pageSize" +
+			"\n\tvo.List = make([]any, len(arr))" +
+			"\n\tfor i, v := range arr {" +
+			"\n\t\tvo.List[i] = v" +
+			"\n\t}" +
+			"\n\tvo.Total = int(Count)" +
+			"\n\treturn vo, nil" +
+			"\n}\n\n"
+
+		dao += "func Save" + table.AaBbName + "(" + table.aaBbName + " *domain." + table.AaBbName + ") (domain." + table.AaBbName + ", error) {" +
+			"\n\t_, err := configs.Engine.Insert(&" + table.aaBbName + ")" +
+			"\n\tif err != nil {" +
+			"\n\t\treturn *" + table.aaBbName + ", err" +
+			"\n\t}" +
+			"\n\treturn *" + table.aaBbName + ", nil" +
+			"\n}\n\n"
+		dao += "func Set" + table.AaBbName + "(" + table.aaBbName + "Map map[string]interface{}, id int64) (domain." + table.AaBbName + ", bool, error) {" +
+			"\n\tvar " + table.aaBbName + " domain." + table.AaBbName + "" +
+			"\n\t_, err := configs.Engine.Table(\"" + table.Name + "\").Where(\"" + idColumn.Name + " = ?\", id).Update(" + table.aaBbName + "Map)" +
+			"\n\tif err != nil {" +
+			"\n\t\treturn " + table.aaBbName + ", false, err" +
+			"\n\t}" +
+			"\n\treturn " + table.aaBbName + ", true, nil" +
+			"\n}\n\n"
+		if table.existId {
+			dao += "func Delete" + table.AaBbName + "(id int64) bool {" +
+				"\n\tvar " + table.aaBbName + " domain." + table.AaBbName +
+				"\n\ti, err := configs.Engine.Where(\"id = ?\", id).Delete(&" + table.aaBbName + ")" +
+				"\n\tif err != nil {" +
+				"\n\t\treturn false" +
+				"\n\t}" +
+				"\n\treturn i > 0" +
+				"\n}"
+		}
+		//创建文件
+		url := baseUrl + fileName
+		WriteFile(url, dao)
+	}
+
+}
+
+func MysqlToBaseCRUDRouter() {
+	tables := MTables
+	var template = "package router" +
+		"\n" +
+		"\nimport (" +
+		"\n\t\"demo/data/dao/manage\"" +
+		"\n\t\"demo/data/domain\"" +
+		"\n\t\"demo/share\"" +
+		"\n\t\"encoding/json\"" +
+		"\n\t\"github.com/gin-gonic/gin\"" +
+		"\n\t\"github.com/spf13/cast\"" +
+		"\n)" +
+		"\n"
+	var routerHeader = ""
+	var routerBody = ""
+	var getRouterFunc = ""
+	for i := range tables {
+		table := tables[i]
+		getRouterFunc += "//Base" + table.AaBbName + "Router(group)\n"
+		routerHeader +=
+			"\nfunc Base" + table.AaBbName + "Router(group *gin.RouterGroup) {" +
+				"\n\tBase" + table.AaBbName + "Group := group.Group(\"/back/base\")" +
+				"\n\tPushRouter(Base" + table.AaBbName + "Group, \"GET\", \"/" + table.aaBbName + "\", GetBase" + table.AaBbName + "ById)" +
+				"\n\tPushRouter(Base" + table.AaBbName + "Group, \"POST\", \"/" + table.aaBbName + "/list\", GetBase" + table.AaBbName + "List)" +
+				"\n\tPushRouter(Base" + table.AaBbName + "Group, \"POST\", \"/" + table.aaBbName + "/in\", GetBase" + table.AaBbName + "ListInId)" +
+				"\n\tPushRouter(Base" + table.AaBbName + "Group, \"POST\", \"/" + table.aaBbName + "\", SaveBase" + table.AaBbName + ")" +
+				"\n\tPushRouter(Base" + table.AaBbName + "Group, \"PUT\", \"/" + table.aaBbName + "\", UpdateBase" + table.AaBbName + ")" +
+				"\n\tPushRouter(Base" + table.AaBbName + "Group, \"DELETE\", \"/" + table.aaBbName + "\", DeleteBase" + table.AaBbName + ")" +
+				"\n}\n"
+		routerBody +=
+			"\nfunc GetBase" + table.AaBbName + "ById(c *gin.Context) {" +
+				"\n\tid := c.Param(\"id\")" +
+				"\n\t" + table.aaBbName + ", err := manage.Get" + table.AaBbName + "ById(cast.ToInt64(id))" +
+				"\n\tif err != nil {" +
+				"\n\t\tc.JSON(200, CreateResultError(500, \"用户查询不存在\"))" +
+				"\n\t}" +
+				"\n\tc.JSON(200, CreateResultData(" + table.aaBbName + "))" +
+				"\n}" +
+				"\n" +
+				"\nfunc GetBase" + table.AaBbName + "List(c *gin.Context) {" +
+				"\n\tdata := share.GetJsonAnyParam(c)" +
+				"\n\tparam, _ := data(\"param\")" +
+				"\n\tpageNum, _ := data(\"pageNum\")" +
+				"\n\tpageSize, _ := data(\"pageSize\")" +
+				"\n\t" + table.aaBbName + " := domain." + table.AaBbName + "{}" +
+				"\n\terr := json.Unmarshal([]byte(cast.ToString(param)), &" + table.aaBbName + ")" +
+				"\n\tlist, err := manage.Get" + table.AaBbName + "List(" + table.aaBbName + ", cast.ToInt(pageNum), cast.ToInt(pageSize))" +
+				"\n\tif err != nil {" +
+				"\n\t\tc.JSON(200, CreateResultError(500, \"查询错误\"))" +
+				"\n\t}" +
+				"\n\tc.JSON(200, CreateResultData(list))" +
+				"\n}" +
+				"\n" +
+				"\nfunc GetBase" + table.AaBbName + "ListInId(c *gin.Context) {" +
+				"\n\tdata := share.GetJsonAnyParam(c)" +
+				"\n\tidsString, _ := data(\"ids\")" +
+				"\n\tvar ids []int64" +
+				"\n\terr := json.Unmarshal([]byte(cast.ToString(idsString)), &ids)" +
+				"\n\tlist, err := manage.Get" + table.AaBbName + "ListInId(ids)" +
+				"\n\tif err != nil {" +
+				"\n\t\tc.JSON(200, CreateResultError(500, \"查询错误\"))" +
+				"\n\t}" +
+				"\n\tc.JSON(200, CreateResultData(list))" +
+				"\n}" +
+				"\n" +
+				"\nfunc SaveBase" + table.AaBbName + "(c *gin.Context) {" +
+				"\n\tdata := share.GetJsonAnyParam(c)" +
+				"\n\t" + table.aaBbName + "Param, _ := data(\"" + table.aaBbName + "\")" +
+				"\n\t" + table.aaBbName + " := domain." + table.AaBbName + "{}" +
+				"\n\terr := json.Unmarshal([]byte(cast.ToString(" + table.aaBbName + "Param)), &" + table.aaBbName + ")" +
+				"\n\tsave" + table.AaBbName + ", err := manage.Save" + table.AaBbName + "(&" + table.aaBbName + ")" +
+				"\n\tif err != nil {" +
+				"\n\t\tc.JSON(200, CreateResultError(500, \"保存错误\"))" +
+				"\n\t}" +
+				"\n\tc.JSON(200, CreateResultData(save" + table.AaBbName + "))" +
+				"\n}" +
+				"\n" +
+				"\nfunc UpdateBase" + table.AaBbName + "(c *gin.Context) {" +
+				"\n\tdata := share.GetJsonAnyParam(c)" +
+				"\n\t" + table.aaBbName + ", _ := data(\"" + table.aaBbName + "\")" +
+				"\n\tid, _ := data(\"id\")" +
+				"\n" +
+				"\n\tset" + table.AaBbName + ", b, err := manage.Set" + table.AaBbName + "(cast.ToStringMap(" + table.aaBbName + "), cast.ToInt64(id))" +
+				"\n\tif err != nil || !b {" +
+				"\n\t\tc.JSON(200, CreateResultError(500, \"修改错误\"))" +
+				"\n\t}" +
+				"\n\tc.JSON(200, CreateResultData(set" + table.AaBbName + "))" +
+				"\n}" +
+				"\n" +
+				"\nfunc DeleteBase" + table.AaBbName + "(c *gin.Context) {" +
+				"\n\tid := c.Param(\"id\")" +
+				"\n\tres := manage.Delete" + table.AaBbName + "(cast.ToInt64(id))" +
+				"\n\tif !res {" +
+				"\n\t\tc.JSON(200, CreateResultError(500, \"删除错误\"))" +
+				"\n\t}" +
+				"\n\tc.JSON(200, CreateResult())" +
+				"\n}" +
+				"\n"
+	}
+
+	//url := "D:\\project\\study\\kkc\\go-xorm-create\\go-xorm-create\\text\\TextFile"
+	url := "D:\\project\\study\\kkc\\kkc-go\\router\\BasaeBackRouter.go"
+	WriteFile(url, template+getRouterFunc+routerHeader+routerBody)
+}

+ 78 - 0
util/MysqlCreateVue.go

@@ -0,0 +1,78 @@
+package util
+
+import "strings"
+
+// 修改mysql数据库对应的go类型
+func formatSqlToVueType(str string) string {
+	str = strings.ToLower(str)
+	switch str {
+	case "varchar":
+		return "string"
+	case "int":
+		return "number"
+	case "decimal":
+		return "number"
+	case "datetime":
+		return "string"
+	case "longblob":
+		return "string"
+	default:
+		panic("未定义的类型:" + str)
+	}
+}
+
+func MysqlToVueApi() {
+	vueFileContent := "import api, {ResponseData} from \"../api.ts\";\n\n"
+	var objectList = ""
+	var apiList = ""
+	//生成结构体
+	for i := range MTables {
+		table := MTables[i]
+		//添加名字
+		objectList += "export class " + table.AaBbName + "{"
+		for j := range table.MColumns {
+			column := table.MColumns[j]
+			objectList += "\n\t" + column.aaBbName + ": " + column.VueTypeName
+		}
+		objectList += "\n\n\tconstructor("
+		for j := range table.MColumns {
+			column := table.MColumns[j]
+			objectList += column.aaBbName + ": " + column.VueTypeName + ", "
+		}
+		objectList += ") {"
+		for j := range table.MColumns {
+			column := table.MColumns[j]
+			objectList += "\n\t\tthis." + column.aaBbName + " = " + column.aaBbName + ";"
+		}
+		objectList += "\n\t}\n}\n\n"
+		//生成api
+		apiList += "export function GetBase" + table.AaBbName + "ById(id: number | string) {" +
+			"\n    return api.GetDataByPath(\"/back/base/" + table.aaBbName + "?id=\" + id, {}, true) as Promise<ResponseData<" + table.AaBbName + ">>;" +
+			"\n}" +
+			"\n" +
+			"\nexport function GetBase" + table.AaBbName + "ListBy" + table.AaBbName + "(" + table.AaBbName + ": " + table.AaBbName + ") {" +
+			"\n    return api.PostDataByPath(\"/back/base/" + table.aaBbName + "/list\", {" + table.aaBbName + ": " + table.AaBbName + "}, true) as Promise<ResponseData<BaseListVo<" + table.AaBbName + ">[]>>;" +
+			"\n}" +
+			"\n" +
+			"\nexport function GetBase" + table.AaBbName + "ListByIds(ids: number[] | string[]) {" +
+			"\n    return api.PostDataByPath(\"/back/base/" + table.aaBbName + "/in\", {" +
+			"\n        ids: ids" +
+			"\n    }, true) as Promise<ResponseData<" + table.AaBbName + "[]>>;" +
+			"\n}" +
+			"\n" +
+			"\nexport function SaveBase" + table.AaBbName + "(" + table.AaBbName + ": " + table.AaBbName + ") {" +
+			"\n    return api.PostDataByPath(\"/back/base/" + table.aaBbName + "\", {article: " + table.AaBbName + "}, true) as Promise<ResponseData<" + table.AaBbName + ">>;" +
+			"\n}" +
+			"\n" +
+			"\nexport function UpdateBase" + table.AaBbName + "(" + table.AaBbName + ": " + table.AaBbName + ", id: number | string) {" +
+			"\n    return api.GetDataByPath(\"/back/base/" + table.aaBbName + "\", {" + table.aaBbName + ": " + table.AaBbName + ", id: id}, true) as Promise<ResponseData<" + table.AaBbName + ">>;" +
+			"\n}" +
+			"\n" +
+			"\nexport function DeleteBase" + table.AaBbName + "ById(id: number | string) {" +
+			"\n    return api.GetDataByPath(\"/back/base/" + table.aaBbName + "?id=\" + id, {}, true) as Promise<ResponseData<any>>;" +
+			"\n}\n\n"
+	}
+
+	url := "D:\\project\\study\\kkc\\kkc-shop\\src\\api\\back\\BaseBackApi.ts"
+	WriteFile(url, vueFileContent+apiList+objectList)
+}

+ 0 - 262
util/MysqlToStruct.go

@@ -1,262 +0,0 @@
-package util
-
-import (
-	"bufio"
-	"fmt"
-	"os"
-	"strings"
-	"xorm.io/xorm"
-)
-
-// const base_url = "E:\\project\\kkc\\kkc-go\\"
-const base_url = "D:\\project\\study\\kkc\\kkc-go\\"
-
-type MTable struct {
-	Name     string
-	AaBbName string
-	aaBbName string
-	Comment  string
-	existId  bool
-	MColumns []MColumn
-}
-type MColumn struct {
-	Name        string //aa_bb
-	AaBbName    string
-	aaBbName    string
-	Comment     string
-	SqlTypeName string
-	TypeName    string
-	Length      int64
-	Length2     int64
-	IsKey       bool
-}
-
-func (receiver MTable) String() string {
-	return fmt.Sprintf("Name:%s,Comment:%s,MColumns:%s\n\n\n", receiver.Name, receiver.Comment, receiver.MColumns)
-}
-func (receiver MColumn) String() string {
-	return fmt.Sprintf("Name:%s,AaBbName:%s,aaBbName:%s,Comment:%s,SqlTypeName:%s,TypeName:%s,Length:%d,Length2:%d\n",
-		receiver.Name, receiver.AaBbName, receiver.aaBbName, receiver.Comment, receiver.SqlTypeName, receiver.TypeName, receiver.Length, receiver.Length2)
-}
-
-var MTables = make([]MTable, 0)
-
-// InitMTableArray 初始化加载数据库结构并存储
-func InitMTableArray(engine *xorm.Engine) {
-	metas, err := engine.DBMetas()
-	if err != nil {
-		fmt.Println(err)
-	}
-	for _, meta := range metas {
-		var mTable MTable
-		mTable.Name = meta.Name
-		mTable.AaBbName, mTable.aaBbName = formatName(meta.Name)
-		mTable.Comment = meta.Comment
-
-		var cols = meta.Columns()
-		for i := range cols {
-			var mColumn MColumn
-			mColumn.Name = cols[i].Name
-			mColumn.AaBbName, mColumn.aaBbName = formatName(cols[i].Name)
-			mColumn.IsKey = cols[i].IsPrimaryKey
-
-			if cols[i].IsPrimaryKey && cols[i].IsAutoIncrement {
-				mTable.existId = true
-			}
-			mColumn.Comment = cols[i].Comment
-			mColumn.SqlTypeName = cols[i].SQLType.Name
-			mColumn.TypeName = formatSqlType(mColumn.SqlTypeName)
-			mColumn.Length = cols[i].Length
-			mColumn.Length2 = cols[i].Length2
-			mTable.MColumns = append(mTable.MColumns, mColumn)
-
-		}
-		MTables = append(MTables, mTable)
-		fmt.Println(mTable)
-	}
-}
-
-// 将名字修改成大驼峰和小驼峰的格式进行返回
-func formatName(name string) (string, string) {
-	split := strings.Split(strings.ToLower(name), "_")
-	if len(split) == 1 {
-		return strings.ToUpper(split[0][0:1]) + split[0][1:], split[0]
-	} else {
-		AaBb := ""
-		aaBb := ""
-		for j := range split {
-			AaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
-			if j == 0 {
-				aaBb += split[j]
-			} else {
-				aaBb += strings.ToUpper(split[j][0:1]) + split[j][1:]
-			}
-		}
-		return AaBb, aaBb
-	}
-}
-
-// 修改mysql数据库对应的go类型
-func formatSqlType(str string) string {
-	str = strings.ToLower(str)
-	switch str {
-	case "varchar":
-		return "string"
-	case "int":
-		return "int64"
-	case "decimal":
-		return "float64"
-	case "datetime":
-		return "time.Time"
-	case "longblob":
-		return "string"
-	default:
-		panic("未定义的类型:" + str)
-	}
-}
-
-//----------------------------------------------------------
-
-// MysqlToStruct 根据mysql 生成对应的struct及String函数
-func MysqlToStruct(engine *xorm.Engine) {
-	InitMTableArray(engine)
-	var structString = ""
-	for _, mtable := range MTables {
-		structString += fmt.Sprint("//", mtable.AaBbName, " ", mtable.Comment, "\n",
-			"type ", mtable.AaBbName, " struct {\n")
-
-		cols := mtable.MColumns
-		var toString = ""
-		for i := range cols {
-			if cols[i].aaBbName == "id" && cols[i].IsKey {
-				structString += fmt.Sprint("    ", cols[i].AaBbName, " int64 `json:\"", cols[i].aaBbName, "\"`",
-					"// ", cols[i].Length, " ", cols[i].Length2, " 注释:", cols[i].Comment, "\n")
-				toString += fmt.Sprint(cols[i].AaBbName, ":\", receiver.", cols[i].AaBbName, ", \",")
-
-			} else {
-				structString += fmt.Sprint("    ", cols[i].AaBbName, " ", cols[i].TypeName, " `xorm:\"", cols[i].Name, "\"  json:\"", cols[i].aaBbName, "\"`",
-					"// ", cols[i].Length, " ", cols[i].Length2, " 注释:", cols[i].Comment, "\n")
-				toString += fmt.Sprint(cols[i].AaBbName, ":\", receiver.", cols[i].AaBbName, ", \",")
-			}
-		}
-		structString += "}\n\n"
-		structString += fmt.Sprint("func (receiver ", mtable.AaBbName, ") String() string {\n")
-		structString += fmt.Sprint("    return fmt.Sprint(\"", mtable.AaBbName, "{", toString[0:len(toString)-1], "}\")\n}\n\n")
-		fmt.Println(structString)
-	}
-	fileUrl := base_url + "\\data\\domain\\DoMain.go"
-	//清空文件
-	os.Truncate(fileUrl, 0)
-	file, _ := os.OpenFile(fileUrl, os.O_CREATE|os.O_RDWR, 0666)
-	defer file.Close()
-
-	writer := bufio.NewWriter(file)
-	writer.WriteString("package domain\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\n")
-	writer.WriteString(structString)
-	writer.Flush()
-
-	//file.Write([]byte("package domain\n\nimport \"time\"\n"))
-	//file.Write([]byte(structString))
-}
-
-// MysqlToDao 生成简单的CRUD dao层
-func MysqlToDao(engine *xorm.Engine) {
-	InitMTableArray(engine)
-	var baseUrl = base_url + "data\\dao\\manage\\"
-	tables := MTables
-	for _, table := range tables {
-		var dao = ""
-		fileName := table.AaBbName + "Dao.go"
-		dao += "package manage\n\nimport (\n\t\"demo/configs\"\n\t\"demo/data/domain\"\n\t\"demo/data/domain/vo\"\n)\n"
-		//get
-		if table.Name == "role_authority" {
-			fmt.Println(table.existId, "====================>")
-		}
-		var idColumn MColumn
-		for _, column := range table.MColumns {
-			if column.IsKey {
-				idColumn = column
-				break
-			}
-		}
-		//没有id的不适用
-		if table.existId {
-			dao += "func GetById" + table.AaBbName + "(id int) (domain." + table.AaBbName + ", error) {" +
-				"\n\tvar " + table.aaBbName + " domain." + table.AaBbName + "" +
-				"\n\t_, err := configs.Engine.Where(\"id = ?\", id).Get(&" + table.aaBbName + ")" +
-				"\n\tif err != nil {" +
-				"\n\t\treturn " + table.aaBbName + ", err" +
-				"\n\t}" +
-				"\n\treturn " + table.aaBbName + ", nil" +
-				"\n}\n\n"
-		}
-		dao += "func GetInIdList" + table.AaBbName + "(ids []int64) ([]domain." + table.AaBbName + ", error) {" +
-			"\n\trows, err := configs.Engine.In(\"id\", ids).Rows(&domain." + table.AaBbName + "{})" +
-			"\n\tif err != nil {" +
-			"\n\t\treturn make([]domain." + table.AaBbName + ", 0), err" +
-			"\n\t}" +
-			"\n\tdefer rows.Close()" +
-			"\n\tvar list []domain." + table.AaBbName + "" +
-			"\n\tfor rows.Next() {" +
-			"\n\t\tvar u domain." + table.AaBbName + "" +
-			"\n\t\tlist = append(list, u)" +
-			"\n\t}" +
-			"\n\treturn list, nil" +
-			"\n}\n\n"
-
-		//list
-		dao += "func GetList" + table.AaBbName + "(" + table.aaBbName + " domain." + table.AaBbName + ", pageNum, pageSize int) (vo.BaseListVo, error) {" +
-			"\n\tvar arr []domain." + table.AaBbName +
-			"\n\tCount, err := configs.Engine.Limit(pageSize, (pageNum-1)*pageSize).Desc(\"id\").FindAndCount(&arr, &" + table.aaBbName + ")" +
-			"\n\tvar vo vo.BaseListVo" +
-			"\n\tif err != nil {" +
-			"\n\t\treturn vo, err" +
-			"\n\t}" +
-			"\n\tif err != nil {" +
-			"\n\t\treturn vo, err" +
-			"\n\t}" +
-			"\n\tvo.PageNum = pageNum" +
-			"\n\tvo.PageSize = pageSize" +
-			"\n\tvo.List = make([]any, len(arr))" +
-			"\n\tfor i, v := range arr {" +
-			"\n\t\tvo.List[i] = v" +
-			"\n\t}" +
-			"\n\tvo.Total = int(Count)" +
-			"\n\treturn vo, nil" +
-			"\n}\n\n"
-
-		dao += "func Save" + table.AaBbName + "(" + table.aaBbName + " *domain." + table.AaBbName + ") (domain." + table.AaBbName + ", error) {" +
-			"\n\t_, err := configs.Engine.Insert(&" + table.aaBbName + ")" +
-			"\n\tif err != nil {" +
-			"\n\t\treturn *" + table.aaBbName + ", err" +
-			"\n\t}" +
-			"\n\treturn *" + table.aaBbName + ", nil" +
-			"\n}\n\n"
-		dao += "func Set" + table.AaBbName + "(" + table.aaBbName + "Map map[string]interface{}, id int64) (domain." + table.AaBbName + ", bool, error) {" +
-			"\n\tvar " + table.aaBbName + " domain." + table.AaBbName + "" +
-			"\n\t_, err := configs.Engine.Table(\"" + table.Name + "\").Where(\"" + idColumn.Name + " = ?\", id).Update(" + table.aaBbName + "Map)" +
-			"\n\tif err != nil {" +
-			"\n\t\treturn " + table.aaBbName + ", false, err" +
-			"\n\t}" +
-			"\n\treturn " + table.aaBbName + ", true, nil" +
-			"\n}\n\n"
-		if table.existId {
-			dao += "func Delete" + table.AaBbName + "(" + table.aaBbName + " domain." + table.AaBbName + ") bool {" +
-				"\n\ti, err := configs.Engine.Where(\"id = ?\", " + table.aaBbName + ".Id).Delete(&" + table.aaBbName + ")" +
-				"\n\tif err != nil {" +
-				"\n\t\treturn false" +
-				"\n\t}" +
-				"\n\treturn i > 0" +
-				"\n}"
-		}
-		//创建文件
-		url := baseUrl + fileName
-		os.Truncate(url, 0)
-		file, _ := os.OpenFile(url, os.O_CREATE|os.O_RDWR, 0666)
-		writer := bufio.NewWriter(file)
-		writer.WriteString(dao)
-		writer.Flush()
-		file.Close()
-	}
-
-}