-
zhangwei
3 天以前 89b94f3cc1aa492b3223b97f3312d8eca004032b
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
namespace Admin.NET.Core.Service;
 
/// <summary>
/// 代码生成详细配置参数
/// </summary>
public class CodeGenConfig
{
    /// <summary>
    /// 主键Id
    /// </summary>
    public long Id { get; set; }
 
    /// <summary>
    /// 代码生成主表ID
    /// </summary>
    public long CodeGenId { get; set; }
 
    /// <summary>
    /// 数据库字段名
    /// </summary>
    public string ColumnName { get; set; }
 
    /// <summary>
    /// 主外键
    /// </summary>
    public string ColumnKey { get; set; }
 
    /// <summary>
    /// 实体属性名
    /// </summary>
    public string PropertyName { get; set; }
 
    /// <summary>
    /// 字段数据长度
    /// </summary>
    public int ColumnLength { get; set; }
 
    /// <summary>
    /// 数据库字段名(首字母小写)
    /// </summary>
    public string LowerPropertyName => string.IsNullOrWhiteSpace(PropertyName) ? null : PropertyName[..1].ToLower() + PropertyName[1..];
 
    /// <summary>
    /// 字段描述
    /// </summary>
    public string ColumnComment { get; set; }
 
    /// <summary>
    /// .NET类型
    /// </summary>
    public string NetType { get; set; }
 
    /// <summary>
    /// 数据库中类型(物理类型)
    /// </summary>
    public string DataType { get; set; }
 
    /// <summary>
    /// 可空.NET类型
    /// </summary>
    public string NullableNetType => Regex.IsMatch(NetType ?? "", "(.*?Enum|bool|char|int|long|double|float|decimal)[?]?") ? NetType.TrimEnd('?') + "?" : NetType;
 
    /// <summary>
    /// 作用类型(字典)
    /// </summary>
    public string EffectType { get; set; }
 
    /// <summary>
    /// 外键库标识
    /// </summary>
    public string FkConfigId { get; set; }
 
    /// <summary>
    /// 外键实体名称
    /// </summary>
    public string FkEntityName { get; set; }
 
    /// <summary>
    /// 外键表名称
    /// </summary>
    public string FkTableName { get; set; }
 
    /// <summary>
    /// 外键实体名称(首字母小写)
    /// </summary>
    public string LowerFkEntityName => string.IsNullOrWhiteSpace(FkEntityName) ? null : FkEntityName[..1].ToLower() + FkEntityName[1..];
 
    /// <summary>
    /// 外键链接字段
    /// </summary>
    public string FkLinkColumnName { get; set; }
 
    /// <summary>
    /// 外键显示字段
    /// </summary>
    [Newtonsoft.Json.JsonIgnore]
    [System.Text.Json.Serialization.JsonIgnore]
    public string FkDisplayColumns { get; set; }
 
    /// <summary>
    /// 外键显示字段
    /// </summary>
    public List<string> FkDisplayColumnList { get; set; }
 
    /// <summary>
    /// 外键显示字段(首字母小写)
    /// </summary>
    public List<string> LowerFkDisplayColumnsList => FkDisplayColumnList?.Select(name => name[..1].ToLower() + name[1..]).ToList();
 
    /// <summary>
    /// 外键显示字段.NET类型
    /// </summary>
    public string FkColumnNetType { get; set; }
 
    /// <summary>
    /// 父级字段
    /// </summary>
    public string PidColumn { get; set; }
 
    /// <summary>
    /// 字典code
    /// </summary>
    public string DictTypeCode { get; set; }
 
    /// <summary>
    /// 查询方式
    /// </summary>
    public string QueryType { get; set; }
 
    /// <summary>
    /// 是否是查询条件
    /// </summary>
    public string WhetherQuery { get; set; }
 
    /// <summary>
    /// 列表是否缩进(字典)
    /// </summary>
    public string WhetherRetract { get; set; }
 
    /// <summary>
    /// 是否必填(字典)
    /// </summary>
    public string WhetherRequired { get; set; }
 
    /// <summary>
    /// 是否可排序(字典)
    /// </summary>
    public string WhetherSortable { get; set; }
 
    /// <summary>
    /// 列表显示
    /// </summary>
    public string WhetherTable { get; set; }
 
    /// <summary>
    /// 增改
    /// </summary>
    public string WhetherAddUpdate { get; set; }
 
    /// <summary>
    /// 导入
    /// </summary>
    public string WhetherImport { get; set; }
 
    /// <summary>
    /// 是否是通用字段
    /// </summary>
    public string WhetherCommon { get; set; }
 
    /// <summary>
    /// 排序
    /// </summary>
    public int OrderNo { get; set; }
 
    /// <summary>
    /// 是否是选择器控件
    /// </summary>
    public bool IsSelectorEffectType => Regex.IsMatch(EffectType ?? "", "Selector$|ForeignKey", RegexOptions.IgnoreCase);
 
    /// <summary>
    /// 去掉尾部Id的属性名
    /// </summary>
    public string PropertyNameTrimEndId => PropertyName.TrimEnd("Id");
 
    /// <summary>
    /// 去掉尾部Id的属性名
    /// </summary>
    public string LowerPropertyNameTrimEndId => LowerPropertyName.TrimEnd("Id");
 
    /// <summary>
    /// 扩展属性名称
    /// </summary>
    public string ExtendedPropertyName => EffectType switch
    {
        "ForeignKey" => $"{PropertyName.TrimEnd("Id")}FkDisplayName",
        "ApiTreeSelector" => $"{PropertyName.TrimEnd("Id")}DisplayName",
        "DictSelector" => $"{PropertyName.TrimEnd("Id")}DictLabel",
        "Upload" => $"{PropertyName.TrimEnd("Id")}Attachment",
        _ => PropertyName
    };
 
    /// <summary>
    /// 首字母小写的扩展属性名称
    /// </summary>
    public string LowerExtendedPropertyName
    {
        get
        {
            var displayPropertyName = ExtendedPropertyName;
            if (string.IsNullOrWhiteSpace(displayPropertyName)) return null;
            return displayPropertyName[..1].ToLower() + displayPropertyName[1..];
        }
    }
 
    /// <summary>
    /// 获取外键显示值语句
    /// </summary>
    /// <param name="tableAlias">表别名</param>
    /// <param name="separator">多字段时的连接符</param>
    /// <returns></returns>
    public string GetDisplayColumn(string tableAlias, string separator = "-") => "$\"" + string.Join(separator, FkDisplayColumnList?.Select(name => $"{{{tableAlias}.{name}}}") ?? new List<string>()) + "\"";
}