GeneratorService.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. /**
  19. * 生成代码逻辑
  20. */
  21. @Service
  22. public class GeneratorService {
  23. @Autowired
  24. private TemplateConfigService templateConfigService;
  25. /**
  26. * 生成代码内容,map的
  27. *
  28. * @param generatorParam 生成参数
  29. * @param generatorConfig 数据源配置
  30. * @return 一张表对应多个模板
  31. */
  32. public List<CodeFile> generate(GeneratorParam generatorParam, GeneratorConfig generatorConfig) {
  33. List<SQLContext> contextList = this.buildSQLContextList(generatorParam, generatorConfig);
  34. List<CodeFile> codeFileList = new ArrayList<>();
  35. for (SQLContext sqlContext : contextList) {
  36. setPackageName(sqlContext, generatorParam.getPackageName());
  37. setDelPrefix(sqlContext, generatorParam.getDelPrefix());
  38. for (int tcId : generatorParam.getTemplateConfigIdList()) {
  39. TemplateConfig template = templateConfigService.getById(tcId);
  40. String folder = template.getName();
  41. String fileName = doGenerator(sqlContext, template.getFileName());
  42. String content = doGenerator(sqlContext, template.getContent());
  43. CodeFile codeFile = new CodeFile();
  44. codeFile.setFolder(folder);
  45. codeFile.setFileName(fileName);
  46. codeFile.setContent(content);
  47. codeFileList.add(codeFile);
  48. }
  49. }
  50. return codeFileList;
  51. }
  52. /**
  53. * 返回SQL上下文列表
  54. *
  55. * @param generatorParam 参数
  56. * @param generatorConfig 配置
  57. * @return 返回SQL上下文
  58. */
  59. private List<SQLContext> buildSQLContextList(GeneratorParam generatorParam, GeneratorConfig generatorConfig) {
  60. List<String> tableNames = generatorParam.getTableNames();
  61. List<SQLContext> contextList = new ArrayList<>();
  62. SQLService service = SQLServiceFactory.build(generatorConfig);
  63. TableSelector tableSelector = service.getTableSelector(generatorConfig);
  64. tableSelector.setSchTableNames(tableNames);
  65. List<TableDefinition> tableDefinitions = tableSelector.getTableDefinitions();
  66. for (TableDefinition tableDefinition : tableDefinitions) {
  67. SQLContext sqlContext = new SQLContext(tableDefinition);
  68. sqlContext.setDbName(generatorConfig.getDbName());
  69. contextList.add(sqlContext);
  70. }
  71. return contextList;
  72. }
  73. private void setPackageName(SQLContext sqlContext, String packageName) {
  74. if (StringUtils.hasText(packageName)) {
  75. sqlContext.setPackageName(packageName);
  76. }
  77. }
  78. private void setDelPrefix(SQLContext sqlContext, String delPrefix) {
  79. if (StringUtils.hasText(delPrefix)) {
  80. sqlContext.setDelPrefix(delPrefix);
  81. }
  82. }
  83. private String doGenerator(SQLContext sqlContext, String template) {
  84. if (template == null) {
  85. return "";
  86. }
  87. VelocityContext context = new VelocityContext();
  88. context.put("context", sqlContext);
  89. context.put("table", sqlContext.getTableDefinition());
  90. context.put("pk", sqlContext.getTableDefinition().getPkColumn());
  91. context.put("columns", sqlContext.getTableDefinition().getColumnDefinitions());
  92. context.put("csharpColumns", sqlContext.getTableDefinition().getCsharpColumnDefinitions());
  93. return VelocityUtil.generate(context, template);
  94. }
  95. }