zhangqian
2023-08-26 5193dcb9336e853502baf8a539d3f45efebe2f86
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package system
 
import (
    "errors"
    "go/token"
    "strings"
 
    "srm/global"
)
 
// AutoCodeStruct 初始版本自动化代码工具
type AutoCodeStruct struct {
    StructName         string   `json:"structName"`         // Struct名称
    TableName          string   `json:"tableName"`          // 表名
    PackageName        string   `json:"packageName"`        // 文件名称
    HumpPackageName    string   `json:"humpPackageName"`    // go文件名称
    Abbreviation       string   `json:"abbreviation"`       // Struct简称
    Description        string   `json:"description"`        // Struct中文名称
    AutoCreateApiToSql bool     `json:"autoCreateApiToSql"` // 是否自动创建api
    AutoCreateResource bool     `json:"autoCreateResource"` // 是否自动创建资源标识
    AutoMoveFile       bool     `json:"autoMoveFile"`       // 是否自动移动文件
    BusinessDB         string   `json:"businessDB"`         // 业务数据库
    Fields             []*Field `json:"fields,omitempty"`
    HasTimer           bool
    DictTypes          []string `json:"-"`
    Package            string   `json:"package"`
    PackageT           string   `json:"-"`
    NeedValid          bool     `json:"-"`
    NeedSort           bool     `json:"-"`
    HasPic             bool     `json:"-"`
    HasRichText        bool     `json:"-"`
    HasFile            bool     `json:"-"`
    NeedJSON           bool     `json:"-"`
}
 
func (a *AutoCodeStruct) Pretreatment() {
    a.KeyWord()
    a.SuffixTest()
}
 
// KeyWord 是go关键字的处理加上 _ ,防止编译报错
// Author [SliverHorn](https://github.com/SliverHorn)
func (a *AutoCodeStruct) KeyWord() {
    if token.IsKeyword(a.Abbreviation) {
        a.Abbreviation = a.Abbreviation + "_"
    }
}
 
// SuffixTest 处理_test 后缀
// Author [SliverHorn](https://github.com/SliverHorn)
func (a *AutoCodeStruct) SuffixTest() {
    if strings.HasSuffix(a.HumpPackageName, "test") {
        a.HumpPackageName = a.HumpPackageName + "_"
    }
}
 
type Field struct {
    FieldName       string `json:"fieldName"`       // Field名
    FieldDesc       string `json:"fieldDesc"`       // 中文名
    FieldType       string `json:"fieldType"`       // Field数据类型
    FieldJson       string `json:"fieldJson"`       // FieldJson
    DataTypeLong    string `json:"dataTypeLong"`    // 数据库字段长度
    Comment         string `json:"comment"`         // 数据库字段描述
    ColumnName      string `json:"columnName"`      // 数据库字段
    FieldSearchType string `json:"fieldSearchType"` // 搜索条件
    DictType        string `json:"dictType"`        // 字典
    Require         bool   `json:"require"`         // 是否必填
    ErrorText       string `json:"errorText"`       // 校验失败文字
    Clearable       bool   `json:"clearable"`       // 是否可清空
    Sort            bool   `json:"sort"`            // 是否增加排序
}
 
var ErrAutoMove error = errors.New("创建代码成功并移动文件成功")
 
type SysAutoCode struct {
    global.GVA_MODEL
    PackageName string `json:"packageName" gorm:"comment:包名"`
    Label       string `json:"label" gorm:"comment:展示名"`
    Desc        string `json:"desc" gorm:"comment:描述"`
}
 
type AutoPlugReq struct {
    PlugName    string         `json:"plugName"` // 必然大写开头
    Snake       string         `json:"snake"`    // 后端自动转为 snake
    RouterGroup string         `json:"routerGroup"`
    HasGlobal   bool           `json:"hasGlobal"`
    HasRequest  bool           `json:"hasRequest"`
    HasResponse bool           `json:"hasResponse"`
    NeedModel   bool           `json:"needModel"`
    Global      []AutoPlugInfo `json:"global,omitempty"`
    Request     []AutoPlugInfo `json:"request,omitempty"`
    Response    []AutoPlugInfo `json:"response,omitempty"`
}
 
func (a *AutoPlugReq) CheckList() {
    a.Global = bind(a.Global)
    a.Request = bind(a.Request)
    a.Response = bind(a.Response)
 
}
func bind(req []AutoPlugInfo) []AutoPlugInfo {
    var r []AutoPlugInfo
    for _, info := range req {
        if info.Effective() {
            r = append(r, info)
        }
    }
    return r
}
 
type AutoPlugInfo struct {
    Key  string `json:"key"`
    Type string `json:"type"`
    Desc string `json:"desc"`
}
 
func (a AutoPlugInfo) Effective() bool {
    return a.Key != "" && a.Type != "" && a.Desc != ""
}