CodeGenConfig.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
  2. //
  3. // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
  6. namespace Admin.NET.Core.Service;
  7. /// <summary>
  8. /// 代码生成详细配置参数
  9. /// </summary>
  10. public class CodeGenConfig
  11. {
  12. /// <summary>
  13. /// 主键Id
  14. /// </summary>
  15. public long Id { get; set; }
  16. /// <summary>
  17. /// 代码生成主表ID
  18. /// </summary>
  19. public long CodeGenId { get; set; }
  20. /// <summary>
  21. /// 数据库字段名
  22. /// </summary>
  23. public string ColumnName { get; set; }
  24. /// <summary>
  25. /// 主外键
  26. /// </summary>
  27. public string ColumnKey { get; set; }
  28. /// <summary>
  29. /// 实体属性名
  30. /// </summary>
  31. public string PropertyName { get; set; }
  32. /// <summary>
  33. /// 字段数据长度
  34. /// </summary>
  35. public int ColumnLength { get; set; }
  36. /// <summary>
  37. /// 数据库字段名(首字母小写)
  38. /// </summary>
  39. public string LowerPropertyName => string.IsNullOrWhiteSpace(PropertyName) ? null : PropertyName[..1].ToLower() + PropertyName[1..];
  40. /// <summary>
  41. /// 字段描述
  42. /// </summary>
  43. public string ColumnComment { get; set; }
  44. /// <summary>
  45. /// .NET类型
  46. /// </summary>
  47. public string NetType { get; set; }
  48. /// <summary>
  49. /// 数据库中类型(物理类型)
  50. /// </summary>
  51. public string DataType { get; set; }
  52. /// <summary>
  53. /// 字段数据默认值
  54. /// </summary>
  55. public string DefaultValue { get; set; }
  56. /// <summary>
  57. /// 可空.NET类型
  58. /// </summary>
  59. public string NullableNetType => Regex.IsMatch(NetType ?? "", "(.*?Enum|bool|char|int|long|double|float|decimal)[?]?") ? NetType.TrimEnd('?') + "?" : NetType;
  60. /// <summary>
  61. /// 作用类型(字典)
  62. /// </summary>
  63. public string EffectType { get; set; }
  64. /// <summary>
  65. /// 外键库标识
  66. /// </summary>
  67. public string FkConfigId { get; set; }
  68. /// <summary>
  69. /// 外键实体名称
  70. /// </summary>
  71. public string FkEntityName { get; set; }
  72. /// <summary>
  73. /// 外键表名称
  74. /// </summary>
  75. public string FkTableName { get; set; }
  76. /// <summary>
  77. /// 外键实体名称(首字母小写)
  78. /// </summary>
  79. public string LowerFkEntityName => string.IsNullOrWhiteSpace(FkEntityName) ? null : FkEntityName[..1].ToLower() + FkEntityName[1..];
  80. /// <summary>
  81. /// 外键链接字段
  82. /// </summary>
  83. public string FkLinkColumnName { get; set; }
  84. /// <summary>
  85. /// 外键显示字段
  86. /// </summary>
  87. [Newtonsoft.Json.JsonIgnore]
  88. [System.Text.Json.Serialization.JsonIgnore]
  89. public string FkDisplayColumns { get; set; }
  90. /// <summary>
  91. /// 外键显示字段
  92. /// </summary>
  93. public List<string> FkDisplayColumnList { get; set; }
  94. /// <summary>
  95. /// 外键显示字段(首字母小写)
  96. /// </summary>
  97. public List<string> LowerFkDisplayColumnsList => FkDisplayColumnList?.Select(name => name[..1].ToLower() + name[1..]).ToList();
  98. /// <summary>
  99. /// 外键显示字段.NET类型
  100. /// </summary>
  101. public string FkColumnNetType { get; set; }
  102. /// <summary>
  103. /// 父级字段
  104. /// </summary>
  105. public string PidColumn { get; set; }
  106. /// <summary>
  107. /// 字典code
  108. /// </summary>
  109. public string DictTypeCode { get; set; }
  110. /// <summary>
  111. /// 查询方式
  112. /// </summary>
  113. public string QueryType { get; set; }
  114. /// <summary>
  115. /// 是否是查询条件
  116. /// </summary>
  117. public string WhetherQuery { get; set; }
  118. /// <summary>
  119. /// 列表是否缩进(字典)
  120. /// </summary>
  121. public string WhetherRetract { get; set; }
  122. /// <summary>
  123. /// 是否必填(字典)
  124. /// </summary>
  125. public string WhetherRequired { get; set; }
  126. /// <summary>
  127. /// 是否可排序(字典)
  128. /// </summary>
  129. public string WhetherSortable { get; set; }
  130. /// <summary>
  131. /// 列表显示
  132. /// </summary>
  133. public string WhetherTable { get; set; }
  134. /// <summary>
  135. /// 增改
  136. /// </summary>
  137. public string WhetherAddUpdate { get; set; }
  138. /// <summary>
  139. /// 导入
  140. /// </summary>
  141. public string WhetherImport { get; set; }
  142. /// <summary>
  143. /// 是否是通用字段
  144. /// </summary>
  145. public string WhetherCommon { get; set; }
  146. /// <summary>
  147. /// 排序
  148. /// </summary>
  149. public int OrderNo { get; set; }
  150. /// <summary>
  151. /// 是否是选择器控件
  152. /// </summary>
  153. public bool IsSelectorEffectType => Regex.IsMatch(EffectType ?? "", "Selector$|ForeignKey", RegexOptions.IgnoreCase);
  154. /// <summary>
  155. /// 去掉尾部Id的属性名
  156. /// </summary>
  157. public string PropertyNameTrimEndId => PropertyName.TrimEnd("Id");
  158. /// <summary>
  159. /// 去掉尾部Id的属性名
  160. /// </summary>
  161. public string LowerPropertyNameTrimEndId => LowerPropertyName.TrimEnd("Id");
  162. /// <summary>
  163. /// 扩展属性名称
  164. /// </summary>
  165. public string ExtendedPropertyName => EffectType switch
  166. {
  167. "ForeignKey" => $"{PropertyName.TrimEnd("Id")}FkDisplayName",
  168. "ApiTreeSelector" => $"{PropertyName.TrimEnd("Id")}DisplayName",
  169. "DictSelector" => $"{PropertyName.TrimEnd("Id")}DictLabel",
  170. "Upload" => $"{PropertyName.TrimEnd("Id")}Attachment",
  171. _ => PropertyName
  172. };
  173. /// <summary>
  174. /// 首字母小写的扩展属性名称
  175. /// </summary>
  176. public string LowerExtendedPropertyName
  177. {
  178. get
  179. {
  180. var displayPropertyName = ExtendedPropertyName;
  181. if (string.IsNullOrWhiteSpace(displayPropertyName)) return null;
  182. return displayPropertyName[..1].ToLower() + displayPropertyName[1..];
  183. }
  184. }
  185. /// <summary>
  186. /// 获取外键显示值语句
  187. /// </summary>
  188. /// <param name="tableAlias">表别名</param>
  189. /// <param name="separator">多字段时的连接符</param>
  190. /// <returns></returns>
  191. public string GetDisplayColumn(string tableAlias, string separator = "-") => "$\"" + string.Join(separator, FkDisplayColumnList?.Select(name => $"{{{tableAlias}.{name}}}") ?? new List<string>()) + "\"";
  192. }