GenTableService.cs 9.5 KB

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