Merge remote-tracking branch 'ruoyi-cloud/master'

# Conflicts:
#	ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
#	ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java
#	ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobController.java
#	ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
#	sql/ry_config_20220114.sql
2.X
疯狂的狮子li 3 years ago
commit c28d9c208e

@ -1,120 +1,120 @@
package com.ruoyi.common.core.constant; package com.ruoyi.common.core.constant;
/** /**
* *
* *
* @author Lion Li * @author Lion Li
*/ */
public interface Constants { public interface Constants {
/** /**
* UTF-8 * UTF-8
*/ */
String UTF8 = "UTF-8"; String UTF8 = "UTF-8";
/** /**
* GBK * GBK
*/ */
String GBK = "GBK"; String GBK = "GBK";
/** /**
* RMI * RMI
*/ */
String LOOKUP_RMI = "rmi:"; String LOOKUP_RMI = "rmi:";
/** /**
* LDAP * LDAP
*/ */
String LOOKUP_LDAP = "ldap:"; String LOOKUP_LDAP = "ldap:";
/** /**
* LDAPS * LDAPS
*/ */
String LOOKUP_LDAPS = "ldaps:"; String LOOKUP_LDAPS = "ldaps:";
/** /**
* http * http
*/ */
String HTTP = "http://"; String HTTP = "http://";
/** /**
* https * https
*/ */
String HTTPS = "https://"; String HTTPS = "https://";
/** /**
* *
*/ */
Integer SUCCESS = 200; Integer SUCCESS = 200;
/** /**
* *
*/ */
Integer FAIL = 500; Integer FAIL = 500;
/** /**
* *
*/ */
String LOGIN_SUCCESS = "Success"; String LOGIN_SUCCESS = "Success";
/** /**
* *
*/ */
String LOGOUT = "Logout"; String LOGOUT = "Logout";
/** /**
* *
*/ */
String REGISTER = "Register"; String REGISTER = "Register";
/** /**
* *
*/ */
String LOGIN_FAIL = "Error"; String LOGIN_FAIL = "Error";
/** /**
* *
*/ */
String PAGE_NUM = "pageNum"; String PAGE_NUM = "pageNum";
/** /**
* *
*/ */
String PAGE_SIZE = "pageSize"; String PAGE_SIZE = "pageSize";
/** /**
* *
*/ */
String ORDER_BY_COLUMN = "orderByColumn"; String ORDER_BY_COLUMN = "orderByColumn";
/** /**
* "desc" "asc". * "desc" "asc".
*/ */
String IS_ASC = "isAsc"; String IS_ASC = "isAsc";
/** /**
* redis key * redis key
*/ */
String CAPTCHA_CODE_KEY = "captcha_codes:"; String CAPTCHA_CODE_KEY = "captcha_codes:";
/** /**
* *
*/ */
long CAPTCHA_EXPIRATION = 2; long CAPTCHA_EXPIRATION = 2;
/** /**
* cache key * cache key
*/ */
String SYS_CONFIG_KEY = "sys_config:"; String SYS_CONFIG_KEY = "sys_config:";
/** /**
* cache key * cache key
*/ */
String SYS_DICT_KEY = "sys_dict:"; String SYS_DICT_KEY = "sys_dict:";
/** /**
* *
*/ */
String RESOURCE_PREFIX = "/profile"; String RESOURCE_PREFIX = "/profile";
} }

@ -1,435 +1,444 @@
package com.ruoyi.gen.service; package com.ruoyi.gen.service;
import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.GenConstants; import com.ruoyi.common.core.constant.GenConstants;
import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.JsonUtils; import com.ruoyi.common.core.utils.JsonUtils;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.gen.domain.GenTable; import com.ruoyi.gen.domain.GenTable;
import com.ruoyi.gen.domain.GenTableColumn; import com.ruoyi.gen.domain.GenTableColumn;
import com.ruoyi.gen.mapper.GenTableColumnMapper; import com.ruoyi.gen.mapper.GenTableColumnMapper;
import com.ruoyi.gen.mapper.GenTableMapper; import com.ruoyi.gen.mapper.GenTableMapper;
import com.ruoyi.gen.util.GenUtils; import com.ruoyi.gen.util.GenUtils;
import com.ruoyi.gen.util.VelocityInitializer; import com.ruoyi.gen.util.VelocityInitializer;
import com.ruoyi.gen.util.VelocityUtils; import com.ruoyi.gen.util.VelocityUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.velocity.Template; import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext; import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity; import org.apache.velocity.app.Velocity;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.StringWriter; import java.io.StringWriter;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.function.Function;
import java.util.Map; import java.util.List;
import java.util.stream.Collectors; import java.util.Map;
import java.util.zip.ZipEntry; import java.util.stream.Collectors;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* /**
* *
* @author ruoyi *
*/ * @author ruoyi
@Slf4j */
@RequiredArgsConstructor(onConstructor_ = @Autowired) @Slf4j
@Service @RequiredArgsConstructor(onConstructor_ = @Autowired)
public class GenTableServiceImpl implements IGenTableService { @Service
public class GenTableServiceImpl implements IGenTableService {
private final GenTableMapper genTableMapper;
private final GenTableColumnMapper genTableColumnMapper; private final GenTableMapper genTableMapper;
private final GenTableColumnMapper genTableColumnMapper;
/**
* /**
* *
* @param id ID *
* @return * @param id ID
*/ * @return
@Override */
public GenTable selectGenTableById(Long id) { @Override
GenTable genTable = genTableMapper.selectGenTableById(id); public GenTable selectGenTableById(Long id) {
setTableFromOptions(genTable); GenTable genTable = genTableMapper.selectGenTableById(id);
return genTable; setTableFromOptions(genTable);
} return genTable;
}
/**
* /**
* *
* @param genTable *
* @return * @param genTable
*/ * @return
@Override */
public List<GenTable> selectGenTableList(GenTable genTable) { @Override
return genTableMapper.selectGenTableList(genTable); public List<GenTable> selectGenTableList(GenTable genTable) {
} return genTableMapper.selectGenTableList(genTable);
}
/**
* /**
* *
* @param genTable *
* @return * @param genTable
*/ * @return
@Override */
public List<GenTable> selectDbTableList(GenTable genTable) { @Override
return genTableMapper.selectDbTableList(genTable); public List<GenTable> selectDbTableList(GenTable genTable) {
} return genTableMapper.selectDbTableList(genTable);
}
/**
* /**
* *
* @param tableNames *
* @return * @param tableNames
*/ * @return
@Override */
public List<GenTable> selectDbTableListByNames(String[] tableNames) { @Override
return genTableMapper.selectDbTableListByNames(tableNames); public List<GenTable> selectDbTableListByNames(String[] tableNames) {
} return genTableMapper.selectDbTableListByNames(tableNames);
}
/**
* /**
* *
* @return *
*/ * @return
@Override */
public List<GenTable> selectGenTableAll() { @Override
return genTableMapper.selectGenTableAll(); public List<GenTable> selectGenTableAll() {
} return genTableMapper.selectGenTableAll();
}
/**
* /**
* *
* @param genTable *
* @return * @param genTable
*/ * @return
@Override */
@Transactional @Override
public void updateGenTable(GenTable genTable) { @Transactional
String options = JsonUtils.toJsonString(genTable.getParams()); public void updateGenTable(GenTable genTable) {
genTable.setOptions(options); String options = JsonUtils.toJsonString(genTable.getParams());
int row = genTableMapper.updateGenTable(genTable); genTable.setOptions(options);
if (row > 0) { int row = genTableMapper.updateGenTable(genTable);
for (GenTableColumn cenTableColumn : genTable.getColumns()) { if (row > 0) {
genTableColumnMapper.updateGenTableColumn(cenTableColumn); for (GenTableColumn cenTableColumn : genTable.getColumns()) {
} genTableColumnMapper.updateGenTableColumn(cenTableColumn);
} }
} }
}
/**
* /**
* *
* @param tableIds ID *
* @return * @param tableIds ID
*/ * @return
@Override */
@Transactional @Override
public void deleteGenTableByIds(Long[] tableIds) { @Transactional
genTableMapper.deleteGenTableByIds(tableIds); public void deleteGenTableByIds(Long[] tableIds) {
genTableColumnMapper.deleteGenTableColumnByIds(tableIds); genTableMapper.deleteGenTableByIds(tableIds);
} genTableColumnMapper.deleteGenTableColumnByIds(tableIds);
}
/**
* /**
* *
* @param tableList *
*/ * @param tableList
@Override */
@Transactional @Override
public void importGenTable(List<GenTable> tableList) { @Transactional
String operName = SecurityUtils.getUsername(); public void importGenTable(List<GenTable> tableList) {
try { String operName = SecurityUtils.getUsername();
for (GenTable table : tableList) { try {
String tableName = table.getTableName(); for (GenTable table : tableList) {
GenUtils.initTable(table, operName); String tableName = table.getTableName();
int row = genTableMapper.insertGenTable(table); GenUtils.initTable(table, operName);
if (row > 0) { int row = genTableMapper.insertGenTable(table);
// 保存列信息 if (row > 0) {
List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); // 保存列信息
for (GenTableColumn column : genTableColumns) { List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
GenUtils.initColumnField(column, table); for (GenTableColumn column : genTableColumns) {
genTableColumnMapper.insertGenTableColumn(column); GenUtils.initColumnField(column, table);
} genTableColumnMapper.insertGenTableColumn(column);
} }
} }
} catch (Exception e) { }
throw new ServiceException("导入失败:" + e.getMessage()); } catch (Exception e) {
} throw new ServiceException("导入失败:" + e.getMessage());
} }
}
/**
* /**
* *
* @param tableId *
* @return * @param tableId
*/ * @return
@Override */
public Map<String, String> previewCode(Long tableId) { @Override
Map<String, String> dataMap = new LinkedHashMap<>(); public Map<String, String> previewCode(Long tableId) {
// 查询表信息 Map<String, String> dataMap = new LinkedHashMap<>();
GenTable table = genTableMapper.selectGenTableById(tableId); // 查询表信息
// 设置主子表信息 GenTable table = genTableMapper.selectGenTableById(tableId);
setSubTable(table); // 设置主子表信息
// 设置主键列信息 setSubTable(table);
setPkColumn(table); // 设置主键列信息
VelocityInitializer.initVelocity(); setPkColumn(table);
VelocityInitializer.initVelocity();
VelocityContext context = VelocityUtils.prepareContext(table);
VelocityContext context = VelocityUtils.prepareContext(table);
// 获取模板列表
List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory()); // 获取模板列表
for (String template : templates) { List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
// 渲染模板 for (String template : templates) {
StringWriter sw = new StringWriter(); // 渲染模板
Template tpl = Velocity.getTemplate(template, Constants.UTF8); StringWriter sw = new StringWriter();
tpl.merge(context, sw); Template tpl = Velocity.getTemplate(template, Constants.UTF8);
dataMap.put(template, sw.toString()); tpl.merge(context, sw);
} dataMap.put(template, sw.toString());
return dataMap; }
} return dataMap;
}
/**
* /**
* *
* @param tableName *
* @return * @param tableName
*/ * @return
@Override */
public byte[] downloadCode(String tableName) { @Override
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); public byte[] downloadCode(String tableName) {
ZipOutputStream zip = new ZipOutputStream(outputStream); ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
generatorCode(tableName, zip); ZipOutputStream zip = new ZipOutputStream(outputStream);
IOUtils.closeQuietly(zip); generatorCode(tableName, zip);
return outputStream.toByteArray(); IOUtils.closeQuietly(zip);
} return outputStream.toByteArray();
}
/**
* /**
* *
* @param tableName *
*/ * @param tableName
@Override */
public void generatorCode(String tableName) { @Override
// 查询表信息 public void generatorCode(String tableName) {
GenTable table = genTableMapper.selectGenTableByName(tableName); // 查询表信息
// 设置主子表信息 GenTable table = genTableMapper.selectGenTableByName(tableName);
setSubTable(table); // 设置主子表信息
// 设置主键列信息 setSubTable(table);
setPkColumn(table); // 设置主键列信息
setPkColumn(table);
VelocityInitializer.initVelocity();
VelocityInitializer.initVelocity();
VelocityContext context = VelocityUtils.prepareContext(table);
VelocityContext context = VelocityUtils.prepareContext(table);
// 获取模板列表
List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory()); // 获取模板列表
for (String template : templates) { List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) { for (String template : templates) {
// 渲染模板 if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) {
StringWriter sw = new StringWriter(); // 渲染模板
Template tpl = Velocity.getTemplate(template, Constants.UTF8); StringWriter sw = new StringWriter();
tpl.merge(context, sw); Template tpl = Velocity.getTemplate(template, Constants.UTF8);
try { tpl.merge(context, sw);
String path = getGenPath(table, template); try {
FileUtils.writeStringToFile(new File(path), sw.toString(), StandardCharsets.UTF_8); String path = getGenPath(table, template);
} catch (IOException e) { FileUtils.writeStringToFile(new File(path), sw.toString(), StandardCharsets.UTF_8);
throw new ServiceException("渲染模板失败,表名:" + table.getTableName()); } catch (IOException e) {
} throw new ServiceException("渲染模板失败,表名:" + table.getTableName());
} }
} }
} }
}
/**
* /**
* *
* @param tableName *
*/ * @param tableName
@Override */
@Transactional @Override
public void synchDb(String tableName) { @Transactional
GenTable table = genTableMapper.selectGenTableByName(tableName); public void synchDb(String tableName) {
List<GenTableColumn> tableColumns = table.getColumns(); GenTable table = genTableMapper.selectGenTableByName(tableName);
List<String> tableColumnNames = tableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); List<GenTableColumn> tableColumns = table.getColumns();
Map<String, GenTableColumn> tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity()));
List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
if (StringUtils.isEmpty(dbTableColumns)) { List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName);
throw new ServiceException("同步数据失败,原表结构不存在"); if (StringUtils.isEmpty(dbTableColumns)) {
} throw new ServiceException("同步数据失败,原表结构不存在");
List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); }
List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList());
dbTableColumns.forEach(column -> {
if (!tableColumnNames.contains(column.getColumnName())) { dbTableColumns.forEach(column -> {
GenUtils.initColumnField(column, table); GenUtils.initColumnField(column, table);
genTableColumnMapper.insertGenTableColumn(column); if (tableColumnMap.containsKey(column.getColumnName())) {
} GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName());
}); column.setColumnId(prevColumn.getColumnId());
if (column.isList()) {
List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); // 如果是列表,继续保留字典类型
if (StringUtils.isNotEmpty(delColumns)) { column.setDictType(prevColumn.getDictType());
genTableColumnMapper.deleteGenTableColumns(delColumns); }
} genTableColumnMapper.updateGenTableColumn(column);
} } else {
genTableColumnMapper.insertGenTableColumn(column);
/** }
* });
*
* @param tableNames List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList());
* @return if (StringUtils.isNotEmpty(delColumns)) {
*/ genTableColumnMapper.deleteGenTableColumns(delColumns);
@Override }
public byte[] downloadCode(String[] tableNames) { }
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream); /**
for (String tableName : tableNames) { *
generatorCode(tableName, zip); *
} * @param tableNames
IOUtils.closeQuietly(zip); * @return
return outputStream.toByteArray(); */
} @Override
public byte[] downloadCode(String[] tableNames) {
/** ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
* ZipOutputStream zip = new ZipOutputStream(outputStream);
*/ for (String tableName : tableNames) {
private void generatorCode(String tableName, ZipOutputStream zip) { generatorCode(tableName, zip);
// 查询表信息 }
GenTable table = genTableMapper.selectGenTableByName(tableName); IOUtils.closeQuietly(zip);
// 设置主子表信息 return outputStream.toByteArray();
setSubTable(table); }
// 设置主键列信息
setPkColumn(table); /**
*
VelocityInitializer.initVelocity(); */
private void generatorCode(String tableName, ZipOutputStream zip) {
VelocityContext context = VelocityUtils.prepareContext(table); // 查询表信息
GenTable table = genTableMapper.selectGenTableByName(tableName);
// 获取模板列表 // 设置主子表信息
List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory()); setSubTable(table);
for (String template : templates) { // 设置主键列信息
// 渲染模板 setPkColumn(table);
StringWriter sw = new StringWriter();
Template tpl = Velocity.getTemplate(template, Constants.UTF8); VelocityInitializer.initVelocity();
tpl.merge(context, sw);
try { VelocityContext context = VelocityUtils.prepareContext(table);
// 添加到zip
zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); // 获取模板列表
IOUtils.write(sw.toString(), zip, Constants.UTF8); List<String> templates = VelocityUtils.getTemplateList(table.getTplCategory());
IOUtils.closeQuietly(sw); for (String template : templates) {
zip.flush(); // 渲染模板
zip.closeEntry(); StringWriter sw = new StringWriter();
} catch (IOException e) { Template tpl = Velocity.getTemplate(template, Constants.UTF8);
log.error("渲染模板失败,表名:" + table.getTableName(), e); tpl.merge(context, sw);
} try {
} // 添加到zip
} zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table)));
IOUtils.write(sw.toString(), zip, Constants.UTF8);
/** IOUtils.closeQuietly(sw);
* zip.flush();
* zip.closeEntry();
* @param genTable } catch (IOException e) {
*/ log.error("渲染模板失败,表名:" + table.getTableName(), e);
@Override }
public void validateEdit(GenTable genTable) { }
if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { }
String options = JsonUtils.toJsonString(genTable.getParams());
Map<String, String> paramsObj = JsonUtils.parseMap(options); /**
if (StringUtils.isEmpty(paramsObj.get(GenConstants.TREE_CODE))) { *
throw new ServiceException("树编码字段不能为空"); *
} else if (StringUtils.isEmpty(paramsObj.get(GenConstants.TREE_PARENT_CODE))) { * @param genTable
throw new ServiceException("树父编码字段不能为空"); */
} else if (StringUtils.isEmpty(paramsObj.get(GenConstants.TREE_NAME))) { @Override
throw new ServiceException("树名称字段不能为空"); public void validateEdit(GenTable genTable) {
} else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) { if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) {
if (StringUtils.isEmpty(genTable.getSubTableName())) { String options = JsonUtils.toJsonString(genTable.getParams());
throw new ServiceException("关联子表的表名不能为空"); Map<String, String> paramsObj = JsonUtils.parseMap(options);
} else if (StringUtils.isEmpty(genTable.getSubTableFkName())) { if (StringUtils.isEmpty(paramsObj.get(GenConstants.TREE_CODE))) {
throw new ServiceException("子表关联的外键名不能为空"); throw new ServiceException("树编码字段不能为空");
} } else if (StringUtils.isEmpty(paramsObj.get(GenConstants.TREE_PARENT_CODE))) {
} throw new ServiceException("树父编码字段不能为空");
} } else if (StringUtils.isEmpty(paramsObj.get(GenConstants.TREE_NAME))) {
} throw new ServiceException("树名称字段不能为空");
} else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) {
/** if (StringUtils.isEmpty(genTable.getSubTableName())) {
* throw new ServiceException("关联子表的表名不能为空");
* } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) {
* @param table throw new ServiceException("子表关联的外键名不能为空");
*/ }
public void setPkColumn(GenTable table) { }
for (GenTableColumn column : table.getColumns()) { }
if (column.isPk()) { }
table.setPkColumn(column);
break; /**
} *
} *
if (StringUtils.isNull(table.getPkColumn())) { * @param table
table.setPkColumn(table.getColumns().get(0)); */
} public void setPkColumn(GenTable table) {
if (GenConstants.TPL_SUB.equals(table.getTplCategory())) { for (GenTableColumn column : table.getColumns()) {
for (GenTableColumn column : table.getSubTable().getColumns()) { if (column.isPk()) {
if (column.isPk()) { table.setPkColumn(column);
table.getSubTable().setPkColumn(column); break;
break; }
} }
} if (StringUtils.isNull(table.getPkColumn())) {
if (StringUtils.isNull(table.getSubTable().getPkColumn())) { table.setPkColumn(table.getColumns().get(0));
table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); }
} if (GenConstants.TPL_SUB.equals(table.getTplCategory())) {
} for (GenTableColumn column : table.getSubTable().getColumns()) {
} if (column.isPk()) {
table.getSubTable().setPkColumn(column);
/** break;
* }
* }
* @param table if (StringUtils.isNull(table.getSubTable().getPkColumn())) {
*/ table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0));
public void setSubTable(GenTable table) { }
String subTableName = table.getSubTableName(); }
if (StringUtils.isNotEmpty(subTableName)) { }
table.setSubTable(genTableMapper.selectGenTableByName(subTableName));
} /**
} *
*
/** * @param table
* */
* public void setSubTable(GenTable table) {
* @param genTable String subTableName = table.getSubTableName();
*/ if (StringUtils.isNotEmpty(subTableName)) {
public void setTableFromOptions(GenTable genTable) { table.setSubTable(genTableMapper.selectGenTableByName(subTableName));
Map<String, String> paramsObj = JsonUtils.parseMap(genTable.getOptions()); }
if (StringUtils.isNotNull(paramsObj)) { }
String treeCode = paramsObj.get(GenConstants.TREE_CODE);
String treeParentCode = paramsObj.get(GenConstants.TREE_PARENT_CODE); /**
String treeName = paramsObj.get(GenConstants.TREE_NAME); *
String parentMenuId = paramsObj.get(GenConstants.PARENT_MENU_ID); *
String parentMenuName = paramsObj.get(GenConstants.PARENT_MENU_NAME); * @param genTable
*/
genTable.setTreeCode(treeCode); public void setTableFromOptions(GenTable genTable) {
genTable.setTreeParentCode(treeParentCode); Map<String, String> paramsObj = JsonUtils.parseMap(genTable.getOptions());
genTable.setTreeName(treeName); if (StringUtils.isNotNull(paramsObj)) {
genTable.setParentMenuId(parentMenuId); String treeCode = paramsObj.get(GenConstants.TREE_CODE);
genTable.setParentMenuName(parentMenuName); String treeParentCode = paramsObj.get(GenConstants.TREE_PARENT_CODE);
} String treeName = paramsObj.get(GenConstants.TREE_NAME);
} String parentMenuId = paramsObj.get(GenConstants.PARENT_MENU_ID);
String parentMenuName = paramsObj.get(GenConstants.PARENT_MENU_NAME);
/**
* genTable.setTreeCode(treeCode);
* genTable.setTreeParentCode(treeParentCode);
* @param table genTable.setTreeName(treeName);
* @param template genTable.setParentMenuId(parentMenuId);
* @return genTable.setParentMenuName(parentMenuName);
*/ }
public static String getGenPath(GenTable table, String template) { }
String genPath = table.getGenPath();
if (StringUtils.equals(genPath, "/")) { /**
return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table); *
} *
return genPath + File.separator + VelocityUtils.getFileName(template, table); * @param table
} * @param template
} * @return
*/
public static String getGenPath(GenTable table, String template) {
String genPath = table.getGenPath();
if (StringUtils.equals(genPath, "/")) {
return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table);
}
return genPath + File.separator + VelocityUtils.getFileName(template, table);
}
}

@ -1,199 +1,203 @@
package com.ruoyi.system.service.impl; package com.ruoyi.system.service.impl;
import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.dict.utils.DictUtils; import com.ruoyi.common.dict.utils.DictUtils;
import com.ruoyi.system.api.domain.SysDictData; import com.ruoyi.system.api.domain.SysDictData;
import com.ruoyi.system.api.domain.SysDictType; import com.ruoyi.system.api.domain.SysDictType;
import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.SysDictDataMapper;
import com.ruoyi.system.mapper.SysDictTypeMapper; import com.ruoyi.system.mapper.SysDictTypeMapper;
import com.ruoyi.system.service.ISysDictTypeService; import com.ruoyi.system.service.ISysDictTypeService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.List; import java.util.List;
import java.util.Comparator;
/** import java.util.Map;
* import java.util.stream.Collectors;
*
* @author ruoyi /**
*/ *
@RequiredArgsConstructor(onConstructor_ = @Autowired) *
@Service * @author ruoyi
public class SysDictTypeServiceImpl implements ISysDictTypeService { */
@RequiredArgsConstructor(onConstructor_ = @Autowired)
private final SysDictTypeMapper dictTypeMapper; @Service
private final SysDictDataMapper dictDataMapper; public class SysDictTypeServiceImpl implements ISysDictTypeService {
/** private final SysDictTypeMapper dictTypeMapper;
* private final SysDictDataMapper dictDataMapper;
*/
@PostConstruct /**
public void init() { *
loadingDictCache(); */
} @PostConstruct
public void init() {
/** loadingDictCache();
* }
*
* @param dictType /**
* @return *
*/ *
@Override * @param dictType
public List<SysDictType> selectDictTypeList(SysDictType dictType) { * @return
return dictTypeMapper.selectDictTypeList(dictType); */
} @Override
public List<SysDictType> selectDictTypeList(SysDictType dictType) {
/** return dictTypeMapper.selectDictTypeList(dictType);
* }
*
* @return /**
*/ *
@Override *
public List<SysDictType> selectDictTypeAll() { * @return
return dictTypeMapper.selectDictTypeAll(); */
} @Override
public List<SysDictType> selectDictTypeAll() {
/** return dictTypeMapper.selectDictTypeAll();
* }
*
* @param dictType /**
* @return *
*/ *
@Override * @param dictType
public List<SysDictData> selectDictDataByType(String dictType) { * @return
List<SysDictData> dictDatas = DictUtils.getDictCache(dictType); */
if (StringUtils.isNotEmpty(dictDatas)) { @Override
return dictDatas; public List<SysDictData> selectDictDataByType(String dictType) {
} List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
dictDatas = dictDataMapper.selectDictDataByType(dictType); if (StringUtils.isNotEmpty(dictDatas)) {
if (StringUtils.isNotEmpty(dictDatas)) { return dictDatas;
DictUtils.setDictCache(dictType, dictDatas); }
return dictDatas; dictDatas = dictDataMapper.selectDictDataByType(dictType);
} if (StringUtils.isNotEmpty(dictDatas)) {
return null; DictUtils.setDictCache(dictType, dictDatas);
} return dictDatas;
}
/** return null;
* ID }
*
* @param dictId ID /**
* @return * ID
*/ *
@Override * @param dictId ID
public SysDictType selectDictTypeById(Long dictId) { * @return
return dictTypeMapper.selectDictTypeById(dictId); */
} @Override
public SysDictType selectDictTypeById(Long dictId) {
/** return dictTypeMapper.selectDictTypeById(dictId);
* }
*
* @param dictType /**
* @return *
*/ *
@Override * @param dictType
public SysDictType selectDictTypeByType(String dictType) { * @return
return dictTypeMapper.selectDictTypeByType(dictType); */
} @Override
public SysDictType selectDictTypeByType(String dictType) {
/** return dictTypeMapper.selectDictTypeByType(dictType);
* }
*
* @param dictIds ID /**
* @return *
*/ *
@Override * @param dictIds ID
public void deleteDictTypeByIds(Long[] dictIds) { * @return
for (Long dictId : dictIds) { */
SysDictType dictType = selectDictTypeById(dictId); @Override
if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) { public void deleteDictTypeByIds(Long[] dictIds) {
throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); for (Long dictId : dictIds) {
} SysDictType dictType = selectDictTypeById(dictId);
dictTypeMapper.deleteDictTypeById(dictId); if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) {
DictUtils.removeDictCache(dictType.getDictType()); throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
} }
} dictTypeMapper.deleteDictTypeById(dictId);
DictUtils.removeDictCache(dictType.getDictType());
/** }
* }
*/
@Override /**
public void loadingDictCache() { *
List<SysDictType> dictTypeList = dictTypeMapper.selectDictTypeAll(); */
for (SysDictType dictType : dictTypeList) { @Override
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); public void loadingDictCache() {
DictUtils.setDictCache(dictType.getDictType(), dictDatas); SysDictData dictData = new SysDictData();
} dictData.setStatus("0");
} Map<String, List<SysDictData>> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType));
for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet()) {
/** DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
* }
*/ }
@Override
public void clearDictCache() { /**
DictUtils.clearDictCache(); *
} */
@Override
/** public void clearDictCache() {
* DictUtils.clearDictCache();
*/ }
@Override
public void resetDictCache() { /**
clearDictCache(); *
loadingDictCache(); */
} @Override
public void resetDictCache() {
/** clearDictCache();
* loadingDictCache();
* }
* @param dict
* @return /**
*/ *
@Override *
public int insertDictType(SysDictType dict) { * @param dict
int row = dictTypeMapper.insertDictType(dict); * @return
if (row > 0) { */
DictUtils.setDictCache(dict.getDictType(), null); @Override
} public int insertDictType(SysDictType dict) {
return row; int row = dictTypeMapper.insertDictType(dict);
} if (row > 0) {
DictUtils.setDictCache(dict.getDictType(), null);
/** }
* return row;
* }
* @param dict
* @return /**
*/ *
@Override *
@Transactional * @param dict
public int updateDictType(SysDictType dict) { * @return
SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId()); */
dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType()); @Override
int row = dictTypeMapper.updateDictType(dict); @Transactional
if (row > 0) { public int updateDictType(SysDictType dict) {
List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId());
DictUtils.setDictCache(dict.getDictType(), dictDatas); dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType());
} int row = dictTypeMapper.updateDictType(dict);
return row; if (row > 0) {
} List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
DictUtils.setDictCache(dict.getDictType(), dictDatas);
/** }
* return row;
* }
* @param dict
* @return /**
*/ *
@Override *
public String checkDictTypeUnique(SysDictType dict) { * @param dict
Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); * @return
SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType()); */
if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) { @Override
return UserConstants.NOT_UNIQUE; public String checkDictTypeUnique(SysDictType dict) {
} Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
return UserConstants.UNIQUE; SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
} if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) {
} return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
}

@ -56,7 +56,7 @@
</el-form> </el-form>
<!-- 底部 --> <!-- 底部 -->
<div class="el-login-footer"> <div class="el-login-footer">
<span>Copyright © 2018-2021 ruoyi.vip All Rights Reserved.</span> <span>Copyright © 2018-2022 ruoyi.vip All Rights Reserved.</span>
</div> </div>
</div> </div>
</template> </template>

@ -61,7 +61,7 @@
</el-form> </el-form>
<!-- 底部 --> <!-- 底部 -->
<div class="el-register-footer"> <div class="el-register-footer">
<span>Copyright © 2018-2021 ruoyi.vip All Rights Reserved.</span> <span>Copyright © 2018-2022 ruoyi.vip All Rights Reserved.</span>
</div> </div>
</div> </div>
</template> </template>

Loading…
Cancel
Save