DatabaseTableService.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  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", "javaModel");
  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("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  220. makeData.data.Add("author", loginUser.username);
  221. makeData.data.Add("projectService", baseInfo);
  222. makeData.data.Add("databaseTable", table);
  223. makeData.data.Add("DatabaseFields", fields);
  224. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  225. }
  226. /// <summary>
  227. /// 生成java代码-service
  228. /// </summary>
  229. /// <param name="param">参数请求体</param>
  230. /// <returns>生成java代码-service</returns>
  231. public void makeJavaService(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser)
  232. {
  233. MakeData makeData = new();
  234. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  235. makeData.requestId = requestId;
  236. makeData.modePath = "Java/service.java";
  237. Dictionary<string, string> attach = new();
  238. attach.Add("id", "0");
  239. attach.Add("kind", "javaService");
  240. attach.Add("operator", loginUser.username);
  241. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  242. makeData.data = new Dictionary<string, object>();
  243. makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  244. makeData.data.Add("author", loginUser.username);
  245. makeData.data.Add("projectService", baseInfo);
  246. makeData.data.Add("databaseTable", table);
  247. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  248. }
  249. /// <summary>
  250. /// 生成java代码-serviceImpl
  251. /// </summary>
  252. /// <param name="param">参数请求体</param>
  253. /// <returns>生成java代码-serviceImpl</returns>
  254. public void makeJavaServiceImpl(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser)
  255. {
  256. MakeData makeData = new();
  257. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  258. makeData.requestId = requestId;
  259. makeData.modePath = "Java/serviceImpl.java";
  260. Dictionary<string, string> attach = new();
  261. attach.Add("id", "0");
  262. attach.Add("kind", "javaServiceImpl");
  263. attach.Add("operator", loginUser.username);
  264. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  265. makeData.data = new Dictionary<string, object>();
  266. makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  267. makeData.data.Add("author", loginUser.username);
  268. makeData.data.Add("projectService", baseInfo);
  269. makeData.data.Add("databaseTable", table);
  270. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  271. }
  272. /// <summary>
  273. /// 生成java代码-dto
  274. /// </summary>
  275. /// <param name="param">参数请求体</param>
  276. /// <returns>生成java代码-dto</returns>
  277. public void makeJavaDto(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser)
  278. {
  279. MakeData makeData = new();
  280. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  281. makeData.requestId = requestId;
  282. makeData.modePath = "Java/dto.java";
  283. Dictionary<string, string> attach = new();
  284. attach.Add("id", "0");
  285. attach.Add("kind", "javaDto");
  286. attach.Add("operator", loginUser.username);
  287. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  288. makeData.data = new Dictionary<string, object>();
  289. makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  290. makeData.data.Add("author", loginUser.username);
  291. makeData.data.Add("projectService", baseInfo);
  292. makeData.data.Add("databaseTable", table);
  293. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  294. }
  295. /// <summary>
  296. /// 生成java代码-vo
  297. /// </summary>
  298. /// <param name="param">参数请求体</param>
  299. /// <returns>生成java代码-vo</returns>
  300. public void makeJavaVo(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser)
  301. {
  302. MakeData makeData = new();
  303. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  304. makeData.requestId = requestId;
  305. makeData.modePath = "Java/vo.java";
  306. Dictionary<string, string> attach = new();
  307. attach.Add("id", "0");
  308. attach.Add("kind", "javaVo");
  309. attach.Add("operator", loginUser.username);
  310. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  311. makeData.data = new Dictionary<string, object>();
  312. makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  313. makeData.data.Add("author", loginUser.username);
  314. makeData.data.Add("projectService", baseInfo);
  315. makeData.data.Add("databaseTable", table);
  316. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  317. }
  318. /// <summary>
  319. /// 生成java代码-mapper
  320. /// </summary>
  321. /// <param name="param">参数请求体</param>
  322. /// <returns>生成java代码-mapper</returns>
  323. public void makeJavaMapper(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser)
  324. {
  325. MakeData makeData = new();
  326. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  327. makeData.requestId = requestId;
  328. makeData.modePath = "Java/mapper.java";
  329. Dictionary<string, string> attach = new();
  330. attach.Add("id", "0");
  331. attach.Add("kind", "javaMapper");
  332. attach.Add("operator", loginUser.username);
  333. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  334. makeData.data = new Dictionary<string, object>();
  335. makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  336. makeData.data.Add("author", loginUser.username);
  337. makeData.data.Add("projectService", baseInfo);
  338. makeData.data.Add("databaseTable", table);
  339. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  340. }
  341. /// <summary>
  342. /// 生成java代码-mapperXml
  343. /// </summary>
  344. /// <param name="param">参数请求体</param>
  345. /// <returns>生成java代码-mapperXml</returns>
  346. public void makeJavaMapperXml(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser)
  347. {
  348. MakeData makeData = new();
  349. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  350. makeData.requestId = requestId;
  351. makeData.modePath = "Java/mapper.xml";
  352. Dictionary<string, string> attach = new();
  353. attach.Add("id", "0");
  354. attach.Add("kind", "javaMapperXml");
  355. attach.Add("operator", loginUser.username);
  356. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  357. makeData.data = new Dictionary<string, object>();
  358. makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  359. makeData.data.Add("author", loginUser.username);
  360. makeData.data.Add("projectService", baseInfo);
  361. makeData.data.Add("databaseTable", table);
  362. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  363. }
  364. /// <summary>
  365. /// 生成java代码-controller
  366. /// </summary>
  367. /// <param name="param">参数请求体</param>
  368. /// <returns>生成java代码-controller</returns>
  369. public void makeJavaController(ProjectService baseInfo, DatabaseTable table, TokenModel loginUser)
  370. {
  371. MakeData makeData = new();
  372. string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
  373. makeData.requestId = requestId;
  374. makeData.modePath = "Java/controller.java";
  375. Dictionary<string, string> attach = new();
  376. attach.Add("id", "0");
  377. attach.Add("kind", "javaController");
  378. attach.Add("operator", loginUser.username);
  379. makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
  380. makeData.data = new Dictionary<string, object>();
  381. makeData.data.Add("since", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  382. makeData.data.Add("author", loginUser.username);
  383. makeData.data.Add("projectService", baseInfo);
  384. makeData.data.Add("databaseTable", table);
  385. RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
  386. }
  387. }
  388. }