You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package main
import (
"dsBaseWeb/Utils/CommonUtil"
"dsBaseWeb/Utils/ConfigUtil"
"dsBaseWeb/Utils/DbUtil"
"fmt"
"github.com/lunny/log"
"io/ioutil"
"os"
"os/exec"
"strconv"
"strings"
)
func main() {
//1、遍历数据库所有的表
sql := "select table_name from information_schema.tables where table_schema=?"
list, _ := DbUtil.Engine.SQL(sql, ConfigUtil.MysqlDbName).QueryString()
for i := 0; i < len(list); i++ {
tableName := list[i]["table_name"]
//查询所有字段
sql2 := "select column_name,data_type,column_comment,column_key from information_schema.columns where table_schema=? and table_name=?"
listField, _ := DbUtil.Engine.SQL(sql2, ConfigUtil.MysqlDbName, tableName).QueryString()
tableName = CommonUtil.GetSnakeCaseStr(strings.Replace(tableName, "t_", "", -1))
str := `syntax = "proto3";` + "\n\n"
str += `//在web层重新生成pb.go的方法 `+ "\n"
str +=`/*`+"\n"
str += `protoc -I Business/` + tableName + "/" + tableName + "Proto" + `/ Business/` + tableName + `/` + tableName + "Proto/" + tableName + `.proto --go_out=plugins=grpc:Business/` + tableName + "/" + tableName + "Proto" + "\n"
str +=`*/`+"\n"
str += `package ` + tableName + `Proto;` + "\n\n"
//golang中的包
str += `option go_package = ".;` + tableName + `Proto";` + "\n\n"
//用于生成java的代码配置
str += `option java_multiple_files = true;` + "\n"
str += `option java_package = "com.dsideal.dsmin.base";` + "\n"
str += `option java_outer_classname = "` + tableName + `";` + "\n"
str += `option objc_class_prefix = "";` + "\n\n"
//暴露的接口
str += `service ` + tableName + `Manage {` + "\n"
str += " //获取单条\n"
str += ` rpc Get` + tableName + ` (ModelArg) returns (Reply) {}` + "\n"
str += " //增加\n"
str += ` rpc Add` + tableName + ` (ModelArg) returns (Reply) {}` + "\n"
str += " //批量删除\n"
str += ` rpc Delete` + tableName + ` (DeleteIdsArg) returns (Reply) {}` + "\n"
str += " //修改\n"
str += ` rpc Update` + tableName + ` (ModelArg) returns (Reply) {}` + "\n"
str += " //查询(分页)\n"
str += ` rpc Page` + tableName + ` (QueryArg) returns (Reply) {}` + "\n"
str += `}` + "\n\n"
str += "message ModelArg {\n"
for j := 0; j < len(listField); j++ {
columnName := listField[j]["column_name"]
//这个属性不用生成了 黄海添加于2020-04-26
if columnName == "LastUpdatedTime " {
continue
}
dataType := listField[j]["data_type"]
columnComment := listField[j]["column_comment"]
str += " //" + columnComment + "\n"
if dataType == "int" || dataType == "tinyint" {
str += " int32 " + CommonUtil.GetSnakeCaseStr(columnName) + " = " + strconv.Itoa(j+1) + ";\n"
}else if dataType == "float" || dataType == "double" {
str += " float " + CommonUtil.GetSnakeCaseStr(columnName) + " = " + strconv.Itoa(j+1) + ";\n"
}else {
str += " string " + CommonUtil.GetSnakeCaseStr(columnName) + " = " + strconv.Itoa(j+1) + ";\n"
}
}
//添加ForceUpdateFields 黄海添加于2020-05-20
str+=" //需要强制更新的列"+"\n"
str+=" repeated string ForceUpdateFields = "+ strconv.Itoa(len(listField)+1)+";"+"\n"
str += "}\n\n"
//查询参数
str += "// 查询参数\n"
str += "message QueryArg{\n"
str += " int32 Page = 1;\n"
str += " int32 Limit = 2;\n"
str += "}\n\n"
//查询请求响应内容
str += "// 查询请求响应\n"
str += "message Reply{\n"
str += " bool Success = 1;\n"
str += " string Message = 2;\n"
str += " int32 Count = 3;\n"
str += " string List = 4;\n"
str += "}\n"
//删除参数
str += "//删除参数\n"
str += "message DeleteIdsArg {\n"
str += " //一个或多个ID\n"
str += " repeated string Ids = 1;\n"
str += "}\n"
//按文件分别保存
workingPath := "./Tools/proto/" + tableName + "/" + tableName + "Proto/"
if !CommonUtil.Exists(workingPath) {
err := os.MkdirAll(workingPath, os.ModePerm)
if err != nil {
log.Fatal(err)
}
}
path := workingPath + tableName + ".proto"
ioutil.WriteFile(path, []byte(str), 0666)
//生成一次pb.go
cmd := "protoc -I Tools/proto/" + tableName + "/" + tableName + "Proto/ Tools/proto/" + tableName + "/" + tableName + "Proto/" + tableName + ".proto --go_out=plugins=grpc:Tools/proto/" + tableName + "/" + tableName + "Proto"
runInWindows(cmd)
}
fmt.Println("恭喜所有表对应的proto文件内容生成成功")
}
/**
功能在windows下执行一次dos命令
作者:黄海
时间2020-05-06
*/
func runInWindows(cmd string) string {
fmt.Println("Running Win cmd:", cmd)
result, err := exec.Command("cmd", "/c", cmd).Output()
if err != nil {
fmt.Println(err.Error())
}
return strings.TrimSpace(string(result))
}