GenTableService.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. using Infrastructure.Attribute;
  2. using Infrastructure.Extensions;
  3. using SqlSugar;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using ZR.Model;
  8. using ZR.Model.System.Generate;
  9. using ZR.Service.System.IService;
  10. namespace ZR.Service.System
  11. {
  12. /// <summary>
  13. /// 代码生成表
  14. /// </summary>
  15. [AppService(ServiceType = typeof(IGenTableService), ServiceLifetime = LifeTime.Transient)]
  16. public class GenTableService : BaseService<GenTable>, IGenTableService
  17. {
  18. private IGenTableColumnService GenTableColumnService;
  19. public GenTableService(IGenTableColumnService genTableColumnService)
  20. {
  21. GenTableColumnService = genTableColumnService;
  22. }
  23. /// <summary>
  24. /// 删除表
  25. /// </summary>
  26. /// <param name="tableIds">需要删除的表id</param>
  27. /// <returns></returns>
  28. public int DeleteGenTableByIds(long[] tableIds)
  29. {
  30. Delete(f => tableIds.Contains(f.TableId));
  31. return GenTableColumnService.DeleteGenTableColumn(tableIds);
  32. }
  33. /// <summary>
  34. /// 删除表根据表名
  35. /// </summary>
  36. /// <param name="tableName"></param>
  37. /// <returns></returns>
  38. public int DeleteGenTableByTbName(string tableName)
  39. {
  40. return Delete(f => f.TableName == tableName) ? 1 : 0;
  41. }
  42. /// <summary>
  43. /// 获取表信息
  44. /// </summary>
  45. /// <param name="tableId"></param>
  46. /// <returns></returns>
  47. public GenTable GetGenTableInfo(long tableId)
  48. {
  49. GenTable info = GetId(tableId);
  50. if (info != null && !info.SubTableName.IsEmpty())
  51. {
  52. info.SubTable = Queryable().Where(f => f.TableName == info.SubTableName).First();
  53. info.SubTable.Columns = GenTableColumnService.GenTableColumns(info.SubTable.TableId);
  54. }
  55. return info;
  56. }
  57. /// <summary>
  58. /// 获取所有代码生成表
  59. /// </summary>
  60. /// <returns></returns>
  61. public List<GenTable> GetGenTableAll()
  62. {
  63. return GetAll();
  64. }
  65. /// <summary>
  66. /// 查询代码生成表信息
  67. /// </summary>
  68. /// <param name="genTable"></param>
  69. /// <param name="pagerInfo"></param>
  70. /// <returns></returns>
  71. public PagedInfo<GenTable> GetGenTables(GenTable genTable, PagerInfo pagerInfo)
  72. {
  73. var predicate = Expressionable.Create<GenTable>();
  74. predicate = predicate.AndIF(genTable.TableName.IfNotEmpty(), it => it.TableName.Contains(genTable.TableName));
  75. return GetPages(predicate.ToExpression(), pagerInfo, x => x.TableId, OrderByType.Desc);
  76. }
  77. /// <summary>
  78. /// 插入代码生成表
  79. /// </summary>
  80. /// <param name="table"></param>
  81. /// <returns></returns>
  82. public int ImportGenTable(GenTable table)
  83. {
  84. table.Create_time = DateTime.Now;
  85. //导入前删除现有表
  86. //DeleteGenTableByIds(new long[] { table.TableId });
  87. DeleteGenTableByTbName(table.TableName);
  88. return Insertable(table).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnIdentity();
  89. }
  90. /// <summary>
  91. /// 获取表数据
  92. /// </summary>
  93. /// <param name="tableNames"></param>
  94. /// <returns></returns>
  95. public List<GenTable> SelectDbTableListByNamess(string[] tableNames)
  96. {
  97. throw new NotImplementedException();
  98. }
  99. public int UpdateGenTable(GenTable genTable)
  100. {
  101. var db = Context;
  102. genTable.Update_time = db.GetDate();
  103. return db.Updateable(genTable).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
  104. }
  105. /// <summary>
  106. /// 同步数据库
  107. /// </summary>
  108. /// <param name="tableId">表id</param>
  109. /// <param name="dbTableColumns"></param>
  110. /// <param name="genTable"></param>
  111. public void SynchDb(long tableId, GenTable genTable, List<GenTableColumn> dbTableColumns)
  112. {
  113. List<GenTableColumn> tableColumns = GenTableColumnService.GenTableColumns(tableId);
  114. List<string> tableColumnNames = tableColumns.Select(f => f.ColumnName).ToList();
  115. List<string> dbTableColumneNames = dbTableColumns.Select(f => f.ColumnName).ToList();
  116. List<GenTableColumn> insertColumns = new();
  117. foreach (var column in dbTableColumns)
  118. {
  119. if (!tableColumnNames.Contains(column.ColumnName))
  120. {
  121. insertColumns.Add(column);
  122. }
  123. }
  124. bool result = UseTran2(() =>
  125. {
  126. GenTableColumnService.Insert(insertColumns);
  127. List<GenTableColumn> delColumns = tableColumns.FindAll(column => !dbTableColumneNames.Contains(column.ColumnName));
  128. if (delColumns != null && delColumns.Count > 0)
  129. {
  130. GenTableColumnService.Delete(delColumns.Select(f => f.ColumnId).ToList());
  131. }
  132. });
  133. }
  134. }
  135. /// <summary>
  136. /// 代码生成表列
  137. /// </summary>
  138. [AppService(ServiceType = typeof(IGenTableColumnService), ServiceLifetime = LifeTime.Transient)]
  139. public class GenTableColumnService : BaseService<GenTableColumn>, IGenTableColumnService
  140. {
  141. /// <summary>
  142. /// 删除表字段
  143. /// </summary>
  144. /// <param name="tableColumn"></param>
  145. /// <returns></returns>
  146. public int DeleteGenTableColumn(long tableId)
  147. {
  148. return Deleteable().Where(f => new long[] { tableId }.Contains(f.TableId)).ExecuteCommand();
  149. }
  150. /// <summary>
  151. /// 根据表id批量删除表字段
  152. /// </summary>
  153. /// <param name="tableId"></param>
  154. /// <returns></returns>
  155. public int DeleteGenTableColumn(long[] tableId)
  156. {
  157. return Deleteable().Where(f => tableId.Contains(f.TableId)).ExecuteCommand();
  158. }
  159. /// <summary>
  160. /// 根据表名删除字段
  161. /// </summary>
  162. /// <param name="tableName"></param>
  163. /// <returns></returns>
  164. public int DeleteGenTableColumnByTableName(string tableName)
  165. {
  166. return Deleteable().Where(f => f.TableName == tableName).ExecuteCommand();
  167. }
  168. /// <summary>
  169. /// 获取表所有字段
  170. /// </summary>
  171. /// <param name="tableId"></param>
  172. /// <returns></returns>
  173. public List<GenTableColumn> GenTableColumns(long tableId)
  174. {
  175. return Queryable().Where(f => f.TableId == tableId).OrderBy(x => x.Sort).ToList();
  176. }
  177. /// <summary>
  178. /// 插入表字段
  179. /// </summary>
  180. /// <param name="tableColumn"></param>
  181. /// <returns></returns>
  182. public int InsertGenTableColumn(List<GenTableColumn> tableColumn)
  183. {
  184. return Context.Insertable(tableColumn).IgnoreColumns(x => new { x.Remark }).ExecuteCommand();
  185. }
  186. /// <summary>
  187. /// 批量更新表字段
  188. /// </summary>
  189. /// <param name="tableColumn"></param>
  190. /// <returns></returns>
  191. public int UpdateGenTableColumn(List<GenTableColumn> tableColumn)
  192. {
  193. return Context.Updateable(tableColumn)
  194. .WhereColumns(it => new { it.ColumnId, it.TableId })
  195. .UpdateColumns(it => new
  196. {
  197. it.ColumnComment,
  198. it.CsharpField,
  199. it.CsharpType,
  200. it.IsQuery,
  201. it.IsEdit,
  202. it.IsInsert,
  203. it.IsList,
  204. it.QueryType,
  205. it.HtmlType,
  206. it.IsRequired,
  207. it.Sort,
  208. it.Update_time,
  209. it.DictType,
  210. it.Update_by,
  211. it.Remark,
  212. it.IsSort,
  213. it.IsExport,
  214. it.AutoFillType
  215. })
  216. .ExecuteCommand();
  217. }
  218. }
  219. }