CustomViewEngine.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // 大名科技(天津)有限公司 版权所有
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动
  6. //
  7. // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
  8. namespace Admin.NET.Core.Service;
  9. public class CustomViewEngine : ViewEngineModel
  10. {
  11. private readonly ISqlSugarClient _db;
  12. public CustomViewEngine()
  13. {
  14. }
  15. public CustomViewEngine(ISqlSugarClient db)
  16. {
  17. _db = db;
  18. }
  19. /// <summary>
  20. /// 库定位器
  21. /// </summary>
  22. public string ConfigId { get; set; } = SqlSugarConst.MainConfigId;
  23. public string AuthorName { get; set; }
  24. public string BusName { get; set; }
  25. public string NameSpace { get; set; }
  26. public string ClassName { get; set; }
  27. public string ProjectLastName { get; set; }
  28. public string LowerClassName
  29. {
  30. get
  31. {
  32. return ClassName[..1].ToLower() + ClassName[1..]; // 首字母小写
  33. }
  34. }
  35. public bool IsJoinTable { get; set; }
  36. public bool IsUpload { get; set; }
  37. public string PrintType { get; set; }
  38. public string PrintName { get; set; }
  39. public List<CodeGenConfig> QueryWhetherList { get; set; }
  40. public List<CodeGenConfig> TableField { get; set; }
  41. private List<ColumnOuput> ColumnList { get; set; }
  42. public string GetColumnNetType(object tbName, object colName)
  43. {
  44. if (tbName == null || colName == null) return null;
  45. var config = App.GetOptions<DbConnectionOptions>().ConnectionConfigs.FirstOrDefault(u => u.ConfigId.ToString() == ConfigId);
  46. ColumnList = GetColumnListByTableName(tbName.ToString());
  47. var col = ColumnList.Where(c => (config.DbSettings.EnableUnderLine
  48. ? CodeGenUtil.CamelColumnName(c.ColumnName, Array.Empty<string>())
  49. : c.ColumnName) == colName.ToString()).FirstOrDefault();
  50. return col.NetType;
  51. }
  52. public List<ColumnOuput> GetColumnListByTableName(string tableName)
  53. {
  54. // 多库代码生成切换库
  55. var provider = _db.AsTenant().GetConnectionScope(ConfigId != SqlSugarConst.MainConfigId ? ConfigId : SqlSugarConst.MainConfigId);
  56. // 获取实体类型属性
  57. var entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  58. // 因为ConfigId的表通常也会用到主库的表来做连接,所以这里如果在ConfigId中找不到实体也尝试一下在主库中查找
  59. if (ConfigId == SqlSugarConst.MainConfigId && entityType == null) return null;
  60. if (ConfigId != SqlSugarConst.MainConfigId)
  61. {
  62. provider = _db.AsTenant().GetConnectionScope(SqlSugarConst.MainConfigId);
  63. entityType = provider.DbMaintenance.GetTableInfoList().FirstOrDefault(u => u.Name == tableName);
  64. if (entityType == null) return null;
  65. }
  66. // 按原始类型的顺序获取所有实体类型属性(不包含导航属性,会返回null)
  67. return provider.DbMaintenance.GetColumnInfosByTableName(entityType.Name).Select(u => new ColumnOuput
  68. {
  69. ColumnName = u.DbColumnName,
  70. ColumnKey = u.IsPrimarykey.ToString(),
  71. DataType = u.DataType.ToString(),
  72. NetType = CodeGenUtil.ConvertDataType(u, provider.CurrentConnectionConfig.DbType),
  73. ColumnComment = u.ColumnDescription
  74. }).ToList();
  75. }
  76. }