package com.monkeylessey.sys.service.impl;
|
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.monkeylessey.gen.domain.ReturnColumn;
|
import com.monkeylessey.gen.utils.WordsUtils;
|
import com.monkeylessey.sys.domain.entity.SysGenSet;
|
import com.monkeylessey.sys.domain.entity.SysTable;
|
import com.monkeylessey.gen.domain.GenerateData;
|
import com.monkeylessey.gen.utils.GenerateCodeUtil;
|
import com.monkeylessey.sys.domain.vo.TableColumnVO;
|
import com.monkeylessey.sys.mapper.SysGenSetMapper;
|
import com.monkeylessey.sys.mapper.SysTableMapper;
|
import com.monkeylessey.response.Result;
|
import com.monkeylessey.sys.service.SysTableService;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.StringUtils;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author 29443
|
* @date 2022/5/22
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class SysTableServiceImpl implements SysTableService {
|
|
private final List<String> excludeTable = Arrays.asList("QRTZ_BLOB_TRIGGERS",
|
"QRTZ_CALENDARS",
|
"QRTZ_CRON_TRIGGERS",
|
"QRTZ_FIRED_TRIGGERS",
|
"QRTZ_JOB_DETAILS",
|
"QRTZ_LOCKS",
|
"QRTZ_PAUSED_TRIGGER_GRPS",
|
"QRTZ_SCHEDULER_STATE",
|
"QRTZ_SIMPLE_TRIGGERS",
|
"QRTZ_SIMPROP_TRIGGERS",
|
"QRTZ_TRIGGERS",
|
"sys_file",
|
"sys_op_log");
|
|
private final List<String> excludeColumn = Arrays.asList("deleted");
|
|
private final SysTableMapper tableMapper;
|
private final SysGenSetMapper genSetMapper;
|
private final GenerateCodeUtil generateCodeUtil;
|
|
|
@Override
|
public Result getTableNames(String dataBaseName) {
|
List<SysTable> tables = tableMapper.getTableNames(dataBaseName);
|
List<SysTable> exclude = new ArrayList<>();
|
for (SysTable table : tables) {
|
if (excludeTable.contains(table.getTableName())) {
|
exclude.add(table);
|
}
|
}
|
tables.removeAll(exclude);
|
return Result.ok().data(tables);
|
}
|
|
@Override
|
public Result getTableColumns(String tableName, String dataBaseName) throws JsonProcessingException {
|
if (! StringUtils.hasText(dataBaseName) || ! StringUtils.hasText(tableName)) {
|
throw new IllegalArgumentException("参数错误");
|
}
|
List<TableColumnVO> tableColumns = tableMapper.getTableColumns(tableName, dataBaseName);
|
SysGenSet set = new LambdaQueryChainWrapper<>(genSetMapper)
|
.eq(SysGenSet::getTableName, tableName)
|
.one();
|
if (Objects.nonNull(set)) {
|
ObjectMapper json = new ObjectMapper();
|
return Result.ok().data(json.readValue(set.getContent(), GenerateData.class).getColumns());
|
}
|
List<TableColumnVO> data = tableColumns.stream()
|
.filter(item -> !excludeColumn.contains(item.getColumnName()))
|
.collect(Collectors.toList());
|
data.stream().forEach(item -> {
|
if (item.getColumnName().equals("id")) {
|
item.setAddRequired(Boolean.FALSE);
|
item.setEditRequired(Boolean.TRUE);
|
} else {
|
item.setAddRequired(Boolean.TRUE);
|
item.setEditRequired(Boolean.TRUE);
|
}
|
item.setInputWay("input");
|
});
|
return Result.ok().data(data);
|
}
|
|
@Override
|
public Result getTableColumnsSelect(String tableName, String dataBaseName, String keyword) {
|
if (! StringUtils.hasText(dataBaseName) || ! StringUtils.hasText(tableName)) {
|
throw new IllegalArgumentException("参数错误");
|
}
|
List<String> tableColumns = tableMapper.getTableColumnsSelect(tableName, dataBaseName, keyword);
|
return Result.ok().data(tableColumns);
|
}
|
|
@Override
|
public Result generateCode(GenerateData data) throws JsonProcessingException {
|
data.getColumns().stream().forEach(item -> {
|
// 处理一下,方便模板使用
|
if (!CollectionUtils.isEmpty(item.getReturnColumnList())) {
|
item.getReturnColumnList().stream().forEach(returnC -> {
|
returnC.setProperty(WordsUtils.convertToCamelCase(returnC.getColumn()));
|
});
|
}
|
// 转换类型
|
if ("int".equals(item.getColumnType())) {
|
item.setColumnType("Integer");
|
}
|
else if ("bigint".equals(item.getColumnType())) {
|
item.setColumnType("Long");
|
}
|
else if ("varchar".equals(item.getColumnType()) || "text".equals(item.getColumnType())) {
|
item.setColumnType("String");
|
}
|
else if ("char".equals(item.getColumnType())) {
|
item.setColumnType("String");
|
}
|
else if ("datetime".equals(item.getColumnType())) {
|
item.setColumnType("LocalDateTime");
|
}
|
if ("decimal".equals(item.getColumnType())) {
|
item.setColumnType("BigDecimal");
|
}
|
// 字段名转换
|
item.setPropertyName(WordsUtils.convertToCamelCase(item.getColumnName()));
|
if (StringUtils.hasText(item.getRefTableName())) {
|
item.setRefTableVoName(WordsUtils.firstWordToUp(WordsUtils.convertToCamelCase(item.getRefTableName())) + "VO");
|
item.setRefTableProperty(WordsUtils.firstWordToUp(WordsUtils.convertToCamelCase(item.getRefTableName())) + "VO");
|
}
|
});
|
SysGenSet set = new LambdaQueryChainWrapper<>(genSetMapper)
|
.eq(SysGenSet::getTableName, data.getTableName())
|
.one();
|
ObjectMapper json = new ObjectMapper();
|
String jstr = json.writeValueAsString(data);
|
if (Objects.isNull(set)) {
|
set = new SysGenSet();
|
set.setTableName(data.getTableName());
|
set.setContent(jstr);
|
genSetMapper.insert(set);
|
} else {
|
set.setContent(jstr);
|
genSetMapper.updateById(set);
|
}
|
generateCodeUtil.generateCode(data);
|
return Result.ok("代码生成成功");
|
}
|
}
|