//package com.iotechn.unimall.admin.api.tools;
|
//
|
//import com.baomidou.mybatisplus.annotation.TableName;
|
//import com.iotechn.unimall.data.domain.GeneratorTableColumnDO;
|
//import com.iotechn.unimall.data.dto.CodeReverseGenerateDTO;
|
//import com.iotechn.unimall.data.dto.CodeReverseGenerateTableDTO;
|
//import com.iotechn.unimall.data.mapper.GeneratorMapper;
|
//import freemarker.cache.FileTemplateLoader;
|
//import freemarker.template.Configuration;
|
//import freemarker.template.Template;
|
//import freemarker.template.TemplateException;
|
//import org.slf4j.Logger;
|
//import org.slf4j.LoggerFactory;
|
//import org.springframework.beans.factory.annotation.Autowired;
|
//import org.springframework.stereotype.Service;
|
//
|
//import java.io.File;
|
//import java.io.FileWriter;
|
//import java.io.IOException;
|
//import java.util.Date;
|
//import java.util.HashSet;
|
//import java.util.List;
|
//import java.util.Set;
|
//import java.util.regex.Matcher;
|
//import java.util.regex.Pattern;
|
//import java.util.stream.Collectors;
|
//
|
///**
|
// * Created with IntelliJ IDEA.
|
// * Description:
|
// * User: rize
|
// * Date: 2020/3/11
|
// * Time: 11:03
|
// */
|
//@Service("generatorService")
|
//public class GeneratorServiceImpl implements GeneratorService {
|
//
|
// @Autowired
|
// private GeneratorMapper generatorMapper;
|
//
|
// private static final Logger logger = LoggerFactory.getLogger(GeneratorServiceImpl.class);
|
//
|
// @Override
|
// public List<CodeReverseGenerateTableDTO> listTable(Long adminId) throws ServiceException {
|
// List<String> strings = generatorMapper.listTables();
|
// List<CodeReverseGenerateTableDTO> tableDTOList = strings.stream().map(item -> {
|
// CodeReverseGenerateTableDTO tableDTO = new CodeReverseGenerateTableDTO();
|
// tableDTO.setExist(checkMapperExist(item));
|
// tableDTO.setName(item);
|
// return tableDTO;
|
// }).collect(Collectors.toList());
|
// return tableDTOList;
|
// }
|
//
|
// private boolean checkMapperExist(String tableName) {
|
// Set<Class<?>> set = ClassScannerUtil.getClasses("com.iotechn.unimall.data.domain");
|
// for (Class clazz : set) {
|
// TableName annotation = (TableName) clazz.getDeclaredAnnotation(TableName.class);
|
// if (annotation != null) {
|
// String value = annotation.value();
|
// if (value != null) {
|
// if (tableName.equals(value)) {
|
// return true;
|
// }
|
// }
|
// }
|
// }
|
// return false;
|
// }
|
//
|
// @Override
|
// public List<CodeReverseGenerateDTO.ColumnDefinition> loadColumns(String tableName, Long adminId) throws ServiceException {
|
// List<GeneratorTableColumnDO> generatorTableColumnDOS = generatorMapper.listColumns(tableName);
|
// List<CodeReverseGenerateDTO.ColumnDefinition> columnDefinitions = generatorTableColumnDOS.stream().map(item -> {
|
// CodeReverseGenerateDTO.ColumnDefinition definition = new CodeReverseGenerateDTO.ColumnDefinition();
|
// definition.setName(item.getField());
|
// definition.setClazz(mappingJavaClass(item.getType()));
|
// definition.setAlias(lineToHump(item.getField()));
|
// definition.setChinese(definition.getAlias());
|
// // 若字段NULL = NO。则表示不能为空。则NotNull字段该设为True
|
// definition.setNotnull(item.getNull().equals("NO"));
|
// definition.setMoney(false);
|
// definition.setInsertColumn(false);
|
// definition.setQuery(false);
|
// definition.setLikeQuery(false);
|
// definition.setShowInList(false);
|
// definition.setNotnull(false);
|
// return definition;
|
// }).collect(Collectors.toList());
|
// return columnDefinitions;
|
// }
|
//
|
// private String mappingJavaClass(String type) {
|
// if (type.startsWith("varchar")) {
|
// return String.class.getName();
|
// } else if (type.startsWith("int")) {
|
// return Integer.class.getName();
|
// } else if (type.startsWith("bigint")) {
|
// return Long.class.getName();
|
// } else if (type.startsWith("date")) {
|
// return Date.class.getName();
|
// } else {
|
// // 返回空,要求手动填写
|
// return "";
|
// }
|
// }
|
//
|
// private String lineToHump(String str) {
|
// Pattern linePattern = Pattern.compile("_(\\w)");
|
// str = str.toLowerCase();
|
// Matcher matcher = linePattern.matcher(str);
|
// StringBuffer sb = new StringBuffer();
|
// while (matcher.find()) {
|
// matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
|
// }
|
// matcher.appendTail(sb);
|
// return sb.toString();
|
// }
|
//
|
// @Override
|
// public String generate(CodeReverseGenerateDTO generateDTO, Long adminId) throws ServiceException {
|
// String workDirStr = System.getProperty("user.dir");
|
// File workDir = new File(workDirStr);
|
// if (workDir.exists()) {
|
// try {
|
// // 若存在,获取模板引擎。模板可以保存在内存中,也可以保存在文件或数据中
|
// String templateBaseDir = workDirStr + "/unimall-admin-api/src/main/resources";
|
// FileTemplateLoader fileTemplateLoader = new FileTemplateLoader(new File(templateBaseDir));
|
// Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
|
// configuration.setTemplateLoader(fileTemplateLoader);
|
// String title = generateDTO.getTitle();
|
// String[] split = title.split("\\.");
|
// String packageName = split[0];
|
// String serviceName = split[1];
|
// String doName = lineToHump(generateDTO.getTableName().replace("unimall_", ""));
|
// generateDTO.setDoLowCaseName(doName);
|
// doName = doName.replaceFirst(doName.substring(0,1), doName.substring(0,1).toUpperCase());
|
// generateDTO.setDoName(doName);
|
// generateDTO.setPackageName(packageName);
|
// generateDTO.setServiceName(serviceName);
|
// generateDTO.setServiceLowCaseName(serviceName.toLowerCase());
|
// Set<String> importClassNames = new HashSet<>();
|
// for (CodeReverseGenerateDTO.ColumnDefinition columnDefinition : generateDTO.getColumnDefinitionList()) {
|
// if (!columnDefinition.getClazz().startsWith("java.lang")) {
|
// importClassNames.add(columnDefinition.getClazz());
|
// }
|
// String substring = columnDefinition.getClazz().substring(columnDefinition.getClazz().lastIndexOf(".") + 1);
|
// columnDefinition.setClazzName(substring);
|
// }
|
// generateDTO.setImportClasses(importClassNames);
|
// // step1. 生成DO对象
|
// Template doTemplate = configuration.getTemplate("do.ftl", "utf-8");
|
// writeFile(workDirStr + "/unimall-data/src/main/java/com/iotechn/unimall/data/domain/" + doName + "DO.java", doTemplate, generateDTO);
|
// // step2. 生成Mapper
|
// Template mapperTemplate = configuration.getTemplate("mapper.ftl", "utf-8");
|
// writeFile(workDirStr + "/unimall-data/src/main/java/com/iotechn/unimall/data/mapper/" + doName + "Mapper.java", mapperTemplate, generateDTO);
|
// // step3. 生成Service接口
|
// Template serviceTemplate = configuration.getTemplate("service.ftl", "utf-8");
|
// String apiDirStr = workDirStr + "/unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/" + packageName;
|
// File apiDir = new File(apiDirStr);
|
// if (!apiDir.exists()) {
|
// apiDir.mkdir();
|
// }
|
// writeFile(workDirStr + "/unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/" + packageName + "/Admin" + serviceName + "Service.java", serviceTemplate, generateDTO);
|
// // step4. 生成Service实现
|
// Template serviceImplTemplate = configuration.getTemplate("serviceImpl.ftl", "utf-8");
|
// writeFile(workDirStr + "/unimall-admin-api/src/main/java/com/iotechn/unimall/admin/api/" + packageName + "/Admin" + serviceName + "ServiceImpl.java", serviceImplTemplate, generateDTO);
|
// // step5. 生成api/*.js文件
|
// Template apijsTemplate = configuration.getTemplate("apijs.ftl", "utf-8");
|
// writeFile(workDirStr + "/unimall-admin/src/api/" + generateDTO.getPageName() + ".js", apijsTemplate, generateDTO);
|
// // step6. 生成页面
|
// Template pageTemplate = configuration.getTemplate("page.ftl", "utf-8");
|
// writeFile(workDirStr + "/unimall-admin/src/views/" + generateDTO.getFolder() + "/" + generateDTO.getPageName() + ".vue", pageTemplate, generateDTO);
|
// return "ok";
|
// } catch (IOException e) {
|
// logger.error("[代码生成] IO异常", e);
|
// throw new AdminServiceException(ExceptionDefinition.ADMIN_GENERATOR_IO_EXCEPTION);
|
// } catch (TemplateException e) {
|
// logger.error("[模板生成] 异常", e);
|
// throw new AdminServiceException(ExceptionDefinition.ADMIN_GENERATOR_TEMPLATE_EXCEPTION);
|
// }
|
//
|
// } else {
|
// throw new AdminServiceException(ExceptionDefinition.ADMIN_GENERATOR_WORK_DIR_NOT_EXIST);
|
// }
|
// }
|
//
|
// /**
|
// * @param fileName 文件全路径
|
// * @param template
|
// * @param model
|
// * @throws IOException
|
// */
|
// private void writeFile(String fileName, Template template, CodeReverseGenerateDTO model) throws IOException, ServiceException, TemplateException {
|
// File file = new File(fileName);
|
// if (!file.exists()) {
|
// file.createNewFile();
|
// } else {
|
// throw new AdminServiceException(ExceptionDefinition.ADMIN_GENERATOR_FILE_ALREADY_EXIST);
|
// }
|
// FileWriter fileWriter = new FileWriter(fileName);
|
// template.process(model, fileWriter);
|
// fileWriter.flush();
|
// fileWriter.close();
|
// }
|
//
|
//}
|