GeneratorService.java 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package com.gitee.gen.service;
  2. import com.gitee.gen.common.GeneratorParam;
  3. import com.gitee.gen.entity.TemplateConfig;
  4. import com.gitee.gen.gen.CodeFile;
  5. import com.gitee.gen.gen.GeneratorConfig;
  6. import com.gitee.gen.gen.SQLContext;
  7. import com.gitee.gen.gen.SQLService;
  8. import com.gitee.gen.gen.SQLServiceFactory;
  9. import com.gitee.gen.gen.TableDefinition;
  10. import com.gitee.gen.gen.TableSelector;
  11. import com.gitee.gen.util.VelocityUtil;
  12. import org.apache.velocity.VelocityContext;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.util.StringUtils;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.concurrent.ExecutorService;
  19. import java.util.concurrent.Executors;
  20. /**
  21. * 生成代码逻辑
  22. */
  23. @Service
  24. public class GeneratorService {
  25. @Autowired
  26. private TemplateConfigService templateConfigService;
  27. @Autowired
  28. private GenerateHistoryService generateHistoryService;
  29. static ExecutorService executorService = Executors.newFixedThreadPool(2);
  30. /**
  31. * 生成代码内容,map的
  32. *
  33. * @param generatorParam 生成参数
  34. * @param generatorConfig 数据源配置
  35. * @return 一张表对应多个模板
  36. */
  37. public List<CodeFile> generate(GeneratorParam generatorParam, GeneratorConfig generatorConfig) {
  38. List<SQLContext> contextList = this.buildSQLContextList(generatorParam, generatorConfig);
  39. List<CodeFile> codeFileList = new ArrayList<>();
  40. for (SQLContext sqlContext : contextList) {
  41. setPackageName(sqlContext, generatorParam.getPackageName());
  42. setDelPrefix(sqlContext, generatorParam.getDelPrefix());
  43. for (int tcId : generatorParam.getTemplateConfigIdList()) {
  44. TemplateConfig template = templateConfigService.getById(tcId);
  45. String folder = template.getName();
  46. String fileName = doGenerator(sqlContext, template.getFileName());
  47. String content = doGenerator(sqlContext, template.getContent());
  48. CodeFile codeFile = new CodeFile();
  49. codeFile.setFolder(folder);
  50. codeFile.setFileName(fileName);
  51. codeFile.setContent(content);
  52. codeFileList.add(codeFile);
  53. }
  54. }
  55. executorService.execute(() -> {
  56. generateHistoryService.saveHistory(generatorParam);
  57. });
  58. return codeFileList;
  59. }
  60. /**
  61. * 返回SQL上下文列表
  62. *
  63. * @param generatorParam 参数
  64. * @param generatorConfig 配置
  65. * @return 返回SQL上下文
  66. */
  67. private List<SQLContext> buildSQLContextList(GeneratorParam generatorParam, GeneratorConfig generatorConfig) {
  68. List<String> tableNames = generatorParam.getTableNames();
  69. List<SQLContext> contextList = new ArrayList<>();
  70. SQLService service = SQLServiceFactory.build(generatorConfig);
  71. TableSelector tableSelector = service.getTableSelector(generatorConfig);
  72. tableSelector.setSchTableNames(tableNames);
  73. List<TableDefinition> tableDefinitions = tableSelector.getTableDefinitions();
  74. for (TableDefinition tableDefinition : tableDefinitions) {
  75. SQLContext sqlContext = new SQLContext(tableDefinition);
  76. sqlContext.setDbName(generatorConfig.getDbName());
  77. contextList.add(sqlContext);
  78. }
  79. return contextList;
  80. }
  81. private void setPackageName(SQLContext sqlContext, String packageName) {
  82. if (StringUtils.hasText(packageName)) {
  83. sqlContext.setPackageName(packageName);
  84. }
  85. }
  86. private void setDelPrefix(SQLContext sqlContext, String delPrefix) {
  87. if (StringUtils.hasText(delPrefix)) {
  88. sqlContext.setDelPrefix(delPrefix);
  89. }
  90. }
  91. private String doGenerator(SQLContext sqlContext, String template) {
  92. if (template == null) {
  93. return "";
  94. }
  95. VelocityContext context = new VelocityContext();
  96. context.put("context", sqlContext);
  97. context.put("table", sqlContext.getTableDefinition());
  98. context.put("pk", sqlContext.getTableDefinition().getPkColumn());
  99. context.put("columns", sqlContext.getTableDefinition().getColumnDefinitions());
  100. context.put("csharpColumns", sqlContext.getTableDefinition().getCsharpColumnDefinitions());
  101. return VelocityUtil.generate(context, template);
  102. }
  103. }