DatabaseTableService.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. using Attribute;
  2. using Model;
  3. using Model.Base;
  4. using Repository;
  5. using Service;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Vo.Admin;
  8. using Dto.Admin;
  9. using Custom;
  10. using Common;
  11. using System.Linq;
  12. namespace Services
  13. {
  14. /// <summary>
  15. /// 数据表Service业务层处理
  16. /// </summary>
  17. [AppService(ServiceType = typeof(IDatabaseTableService), ServiceLifetime = LifeTime.Transient)]
  18. public class DatabaseTableService : BaseService<DatabaseTable>, IDatabaseTableService
  19. {
  20. private readonly IDatabaseFieldService _DatabaseFieldService;
  21. private readonly IDatabaseFieldTabsService _DatabaseFieldTabsService;
  22. public DatabaseTableService(IDatabaseFieldService DatabaseFieldService, IDatabaseFieldTabsService DatabaseFieldTabsService)
  23. {
  24. _DatabaseFieldService = DatabaseFieldService;
  25. _DatabaseFieldTabsService = DatabaseFieldTabsService;
  26. }
  27. /// <summary>
  28. /// 数据表-列表
  29. /// </summary>
  30. /// <param name="param">参数请求体</param>
  31. /// <param name="page">分页参数</param>
  32. /// <returns>列表</returns>
  33. public PagedInfo<GetDatabaseTableListVo> getDatabaseTableList([FromQuery] PagerInfo page, [FromQuery] DatabaseTable param)
  34. {
  35. //拼装查询条件
  36. var predicate = Expressionable.Create<DatabaseTable>();
  37. predicate = predicate.AndIF(param.databaseId > 0, m => m.databaseId == param.databaseId);
  38. predicate = predicate.AndIF(!string.IsNullOrEmpty(param.tableTitle), m => m.tableTitle.Contains(param.tableTitle));
  39. predicate = predicate.AndIF(!string.IsNullOrEmpty(param.tableName), m => m.tableName.Contains(param.tableName));
  40. predicate = predicate.AndIF(param.splitKind > 0, m => m.splitKind == param.splitKind);
  41. var response = Queryable()
  42. .Where(predicate.ToExpression())
  43. .OrderByDescending(m => m.id)
  44. .ToPage<DatabaseTable, GetDatabaseTableListVo>(page);
  45. return response;
  46. }
  47. /// <summary>
  48. /// 数据表-根据服务ID查询列表
  49. /// </summary>
  50. /// <param name="param">参数请求体</param>
  51. /// <param name="page">分页参数</param>
  52. /// <returns>根据服务ID查询列表</returns>
  53. public PagedInfo<GetDatabaseTableListByIdsVo> getDatabaseTableListByIds([FromQuery] PagerInfo page, [FromQuery] GetDatabaseTableListByIdsDto param)
  54. {
  55. //拼装查询条件
  56. var predicate = Expressionable.Create<DatabaseTable>();
  57. // predicate = predicate.AndIF(param.serviceId > 0, m => m.serviceId == param.serviceId);
  58. var response = Queryable()
  59. .Where(predicate.ToExpression())
  60. .OrderByDescending(m => m.id)
  61. .ToPage<DatabaseTable, GetDatabaseTableListByIdsVo>(page);
  62. return response;
  63. }
  64. /// <summary>
  65. /// 克隆数据表
  66. /// </summary>
  67. /// <param name="sourceTable">来源数据表</param>
  68. /// <param name="newDatabaseInfoId">新数据库ID</param>
  69. /// <returns>克隆数据表</returns>
  70. public void copyDatabaseTable([FromBody] CopyDatabaseTableDto param)
  71. {
  72. List<int> tableIdList = param.sourceTableId.ToList();
  73. var sourceTables = GetList(m => tableIdList.Contains(m.id)).ToList();
  74. foreach(DatabaseTable sourceTable in sourceTables)
  75. {
  76. DatabaseTable newTable = new DatabaseTable();
  77. newTable.databaseId = param.targetDatabaseId;
  78. newTable.tableName = sourceTable.tableName;
  79. newTable.tableTitle = sourceTable.tableTitle;
  80. newTable.createTime = DateTime.Now;
  81. int newTableId = InsertReturnIdentity(newTable);
  82. var sourceFieldTabs = _DatabaseFieldTabsService.GetList(m => m.tableId == sourceTable.id).ToList();
  83. if(sourceFieldTabs.Count == 0)
  84. {
  85. // 如果没有分组,则创建一个默认分组
  86. DatabaseFieldTabs defaultTab = new DatabaseFieldTabs();
  87. defaultTab.tabName = "基本信息";
  88. defaultTab.databaseId = param.targetDatabaseId;
  89. defaultTab.tableId = newTableId;
  90. defaultTab.createTime = DateTime.Now;
  91. int defaultTabId = _DatabaseFieldTabsService.InsertReturnIdentity(defaultTab);
  92. var sourceFieldsNoTab = _DatabaseFieldService.GetList(m => m.tableId == sourceTable.id && m.tabId == 0).ToList();
  93. foreach(DatabaseField sourceField in sourceFieldsNoTab)
  94. {
  95. DatabaseField newField = new DatabaseField();
  96. newField.databaseId = param.targetDatabaseId;
  97. newField.tableId = newTableId;
  98. newField.tabId = defaultTabId;
  99. newField.fieldTitle = sourceField.fieldTitle;
  100. newField.fieldName = sourceField.fieldName;
  101. newField.fieldType = sourceField.fieldType;
  102. newField.fieldLength = sourceField.fieldLength;
  103. newField.fieldDefaultValue = sourceField.fieldDefaultValue;
  104. newField.fieldDetail = sourceField.fieldDetail;
  105. newField.editType = sourceField.editType;
  106. newField.validateAttribute = sourceField.validateAttribute;
  107. newField.primaryKey = sourceField.primaryKey;
  108. newField.autoIncrement = sourceField.autoIncrement;
  109. newField.splitFlag = sourceField.splitFlag;
  110. newField.showList = sourceField.showList;
  111. newField.showQuery = sourceField.showQuery;
  112. newField.showEdit = sourceField.showEdit;
  113. newField.checkRepeat = sourceField.checkRepeat;
  114. newField.exportFlag = sourceField.exportFlag;
  115. newField.importFlag = sourceField.importFlag;
  116. newField.listEditFlag = sourceField.listEditFlag;
  117. newField.listEditPlaceholder = sourceField.listEditPlaceholder;
  118. newField.statCondition = sourceField.statCondition;
  119. newField.statData = sourceField.statData;
  120. newField.linkTableId = sourceField.linkTableId;
  121. newField.linkFieldId = sourceField.linkFieldId;
  122. newField.apiId = sourceField.apiId;
  123. newField.createTime = DateTime.Now;
  124. _DatabaseFieldService.Add(newField);
  125. }
  126. }
  127. else
  128. {
  129. foreach(DatabaseFieldTabs sourceFieldTab in sourceFieldTabs)
  130. {
  131. DatabaseFieldTabs newFieldTab = new DatabaseFieldTabs();
  132. newFieldTab.tabName = sourceFieldTab.tabName;
  133. newFieldTab.databaseId = param.targetDatabaseId;
  134. newFieldTab.tableId = newTableId;
  135. newFieldTab.createTime = DateTime.Now;
  136. int newFieldTabId = _DatabaseFieldTabsService.InsertReturnIdentity(newFieldTab);
  137. var sourceFields = _DatabaseFieldService.GetList(m => m.tabId == sourceFieldTab.id).ToList();
  138. foreach(DatabaseField sourceField in sourceFields)
  139. {
  140. DatabaseField newField = new DatabaseField();
  141. newField.databaseId = param.targetDatabaseId;
  142. newField.tableId = newTableId;
  143. newField.tabId = newFieldTabId;
  144. newField.fieldTitle = sourceField.fieldTitle;
  145. newField.fieldName = sourceField.fieldName;
  146. newField.fieldType = sourceField.fieldType;
  147. newField.fieldLength = sourceField.fieldLength;
  148. newField.fieldDefaultValue = sourceField.fieldDefaultValue;
  149. newField.fieldDetail = sourceField.fieldDetail;
  150. newField.editType = sourceField.editType;
  151. newField.validateAttribute = sourceField.validateAttribute;
  152. newField.primaryKey = sourceField.primaryKey;
  153. newField.autoIncrement = sourceField.autoIncrement;
  154. newField.splitFlag = sourceField.splitFlag;
  155. newField.showList = sourceField.showList;
  156. newField.showQuery = sourceField.showQuery;
  157. newField.showEdit = sourceField.showEdit;
  158. newField.checkRepeat = sourceField.checkRepeat;
  159. newField.exportFlag = sourceField.exportFlag;
  160. newField.importFlag = sourceField.importFlag;
  161. newField.listEditFlag = sourceField.listEditFlag;
  162. newField.listEditPlaceholder = sourceField.listEditPlaceholder;
  163. newField.statCondition = sourceField.statCondition;
  164. newField.statData = sourceField.statData;
  165. newField.linkTableId = sourceField.linkTableId;
  166. newField.linkFieldId = sourceField.linkFieldId;
  167. newField.apiId = sourceField.apiId;
  168. newField.createTime = DateTime.Now;
  169. _DatabaseFieldService.Add(newField);
  170. }
  171. }
  172. }
  173. }
  174. }
  175. /// <summary>
  176. /// 生成SQL脚本
  177. /// </summary>
  178. /// <param name="param">参数请求体</param>
  179. /// <returns>生成</returns>
  180. public void makeDatabaseTable([FromBody] MakeDatabaseTableDto param, TokenModel loginUser)
  181. {
  182. List<int> tableIds = param.id.ToList();
  183. List<DatabaseTable> tables = GetList(m => tableIds.Contains(m.id));
  184. foreach(DatabaseTable table in tables)
  185. {
  186. table.fields = _DatabaseFieldService.GetList(m => m.tableId == table.id);
  187. }
  188. MakeData makeData = new();
  189. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  190. makeData.requestId = requestId;
  191. makeData.modePath = "Sql/dbTable.sql";
  192. Dictionary<string, string> attach = new();
  193. attach.Add("id", "0");
  194. attach.Add("kind", "dbTable");
  195. attach.Add("operator", loginUser.username);
  196. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  197. makeData.data = new Dictionary<string, object>();
  198. makeData.data.Add("databaseTable", tables);
  199. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  200. }
  201. /// <summary>
  202. /// 生成java代码-model
  203. /// </summary>
  204. /// <param name="param">参数请求体</param>
  205. /// <returns>生成java代码-model</returns>
  206. public void makeJavaModel(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser)
  207. {
  208. List<DatabaseField> fields = _DatabaseFieldService.GetList(m => m.tableId == table.id);
  209. MakeData makeData = new();
  210. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  211. makeData.requestId = requestId;
  212. makeData.modePath = "Java/model.java";
  213. Dictionary<string, string> attach = new();
  214. attach.Add("id", "0");
  215. attach.Add("kind", "dbTable");
  216. attach.Add("operator", loginUser.username);
  217. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  218. makeData.data = new Dictionary<string, object>();
  219. makeData.data.Add("projectService", baseInfo);
  220. makeData.data.Add("databaseTable", table);
  221. makeData.data.Add("DatabaseFields", fields);
  222. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  223. }
  224. }
  225. }