From 11d5e2cdbbaba1c6b61e57411f623de025aa5d2d Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期五, 17 六月 2022 10:35:43 +0800 Subject: [PATCH] update 优化 代码生成 业务接口 增加事务回滚 --- ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java | 194 ++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 152 insertions(+), 42 deletions(-) diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java index f957009..2a99a2e 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -2,12 +2,17 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; -import com.baomidou.mybatisplus.core.conditions.Wrapper; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.GenConstants; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; @@ -28,7 +33,10 @@ import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.nio.charset.StandardCharsets; @@ -43,10 +51,11 @@ * * @author Lion Li */ +@DS("#header.datasource") @Slf4j @RequiredArgsConstructor @Service -public class GenTableServiceImpl extends BaseGenTableServiceImpl { +public class GenTableServiceImpl implements IGenTableService { private final GenTableMapper baseMapper; private final GenTableColumnMapper genTableColumnMapper; @@ -83,17 +92,6 @@ return TableDataInfo.build(page); } - /** - * 鏌ヨ涓氬姟鍒楄〃 - * - * @param genTable 涓氬姟淇℃伅 - * @return 涓氬姟闆嗗悎 - */ - @Override - public List<GenTable> selectGenTableList(GenTable genTable) { - return baseMapper.selectList(this.buildGenTableQueryWrapper(genTable)); - } - private QueryWrapper<GenTable> buildGenTableQueryWrapper(GenTable genTable) { Map<String, Object> params = genTable.getParams(); QueryWrapper<GenTable> wrapper = Wrappers.query(); @@ -107,34 +105,8 @@ @Override public TableDataInfo<GenTable> selectPageDbTableList(GenTable genTable, PageQuery pageQuery) { - Page<GenTable> page = baseMapper.selectPageDbTableList(pageQuery.build(), this.buildDbTableQueryWrapper(genTable)); + Page<GenTable> page = baseMapper.selectPageDbTableList(pageQuery.build(), genTable); return TableDataInfo.build(page); - } - - /** - * 鏌ヨ鎹簱鍒楄〃 - * - * @param genTable 涓氬姟淇℃伅 - * @return 鏁版嵁搴撹〃闆嗗悎 - */ - @Override - public List<GenTable> selectDbTableList(GenTable genTable) { - return baseMapper.selectDbTableList(this.buildDbTableQueryWrapper(genTable)); - } - - private Wrapper<Object> buildDbTableQueryWrapper(GenTable genTable) { - Map<String, Object> params = genTable.getParams(); - QueryWrapper<Object> wrapper = Wrappers.query(); - wrapper.apply("table_schema = (select database())") - .notLike("table_name", "xxl_job_") - .notLike("table_name", "gen_") - .notInSql("table_name", "select table_name from gen_table") - .like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName())) - .like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(table_comment)", StringUtils.lowerCase(genTable.getTableComment())) - .between(params.get("beginTime") != null && params.get("endTime") != null, - "create_time", params.get("beginTime"), params.get("endTime")) - .orderByDesc("create_time"); - return wrapper; } /** @@ -164,6 +136,7 @@ * @param genTable 涓氬姟淇℃伅 * @return 缁撴灉 */ + @Transactional(rollbackFor = Exception.class) @Override public void updateGenTable(GenTable genTable) { String options = JsonUtils.toJsonString(genTable.getParams()); @@ -182,6 +155,7 @@ * @param tableIds 闇�瑕佸垹闄ょ殑鏁版嵁ID * @return 缁撴灉 */ + @Transactional(rollbackFor = Exception.class) @Override public void deleteGenTableByIds(Long[] tableIds) { List<Long> ids = Arrays.asList(tableIds); @@ -194,6 +168,7 @@ * * @param tableList 瀵煎叆琛ㄥ垪琛� */ + @Transactional(rollbackFor = Exception.class) @Override public void importGenTable(List<GenTable> tableList) { String operName = LoginHelper.getUsername(); @@ -231,6 +206,12 @@ Map<String, String> dataMap = new LinkedHashMap<>(); // 鏌ヨ琛ㄤ俊鎭� GenTable table = baseMapper.selectGenTableById(tableId); + Snowflake snowflake = IdUtil.getSnowflake(); + List<Long> menuIds = new ArrayList<>(); + for (int i = 0; i < 6; i++) { + menuIds.add(snowflake.nextId()); + } + table.setMenuIds(menuIds); // 璁剧疆涓诲瓙琛ㄤ俊鎭� setSubTable(table); // 璁剧疆涓婚敭鍒椾俊鎭� @@ -249,6 +230,21 @@ dataMap.put(template, sw.toString()); } return dataMap; + } + + /** + * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableName 琛ㄥ悕绉� + * @return 鏁版嵁 + */ + @Override + public byte[] downloadCode(String tableName) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + generatorCode(tableName, zip); + IoUtil.close(zip); + return outputStream.toByteArray(); } /** @@ -292,6 +288,7 @@ * * @param tableName 琛ㄥ悕绉� */ + @Transactional(rollbackFor = Exception.class) @Override public void synchDb(String tableName) { GenTable table = baseMapper.selectGenTableByName(tableName); @@ -339,12 +336,34 @@ } /** - * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜 + * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableNames 琛ㄦ暟缁� + * @return 鏁版嵁 */ @Override - public void generatorCode(String tableName, ZipOutputStream zip) { + public byte[] downloadCode(String[] tableNames) { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableName : tableNames) { + generatorCode(tableName, zip); + } + IoUtil.close(zip); + return outputStream.toByteArray(); + } + + /** + * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜 + */ + private void generatorCode(String tableName, ZipOutputStream zip) { // 鏌ヨ琛ㄤ俊鎭� GenTable table = baseMapper.selectGenTableByName(tableName); + Snowflake snowflake = IdUtil.getSnowflake(); + List<Long> menuIds = new ArrayList<>(); + for (int i = 0; i < 6; i++) { + menuIds.add(snowflake.nextId()); + } + table.setMenuIds(menuIds); // 璁剧疆涓诲瓙琛ㄤ俊鎭� setSubTable(table); // 璁剧疆涓婚敭鍒椾俊鎭� @@ -375,6 +394,60 @@ } /** + * 淇敼淇濆瓨鍙傛暟鏍¢獙 + * + * @param genTable 涓氬姟淇℃伅 + */ + @Override + public void validateEdit(GenTable genTable) { + if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) { + String options = JsonUtils.toJsonString(genTable.getParams()); + Dict paramsObj = JsonUtils.parseMap(options); + if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_CODE))) { + throw new ServiceException("鏍戠紪鐮佸瓧娈典笉鑳戒负绌�"); + } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_PARENT_CODE))) { + throw new ServiceException("鏍戠埗缂栫爜瀛楁涓嶈兘涓虹┖"); + } else if (StringUtils.isEmpty(paramsObj.getStr(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())) { + throw new ServiceException("瀛愯〃鍏宠仈鐨勫閿悕涓嶈兘涓虹┖"); + } + } + } + } + + /** + * 璁剧疆涓婚敭鍒椾俊鎭� + * + * @param table 涓氬姟琛ㄤ俊鎭� + */ + public void setPkColumn(GenTable table) { + for (GenTableColumn column : table.getColumns()) { + if (column.isPk()) { + table.setPkColumn(column); + break; + } + } + if (ObjectUtil.isNull(table.getPkColumn())) { + table.setPkColumn(table.getColumns().get(0)); + } + if (GenConstants.TPL_SUB.equals(table.getTplCategory())) { + for (GenTableColumn column : table.getSubTable().getColumns()) { + if (column.isPk()) { + table.getSubTable().setPkColumn(column); + break; + } + } + if (ObjectUtil.isNull(table.getSubTable().getPkColumn())) { + table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); + } + } + } + + /** * 璁剧疆涓诲瓙琛ㄤ俊鎭� * * @param table 涓氬姟琛ㄤ俊鎭� @@ -386,4 +459,41 @@ } } + /** + * 璁剧疆浠g爜鐢熸垚鍏朵粬閫夐」鍊� + * + * @param genTable 璁剧疆鍚庣殑鐢熸垚瀵硅薄 + */ + public void setTableFromOptions(GenTable genTable) { + Dict paramsObj = JsonUtils.parseMap(genTable.getOptions()); + if (ObjectUtil.isNotNull(paramsObj)) { + String treeCode = paramsObj.getStr(GenConstants.TREE_CODE); + String treeParentCode = paramsObj.getStr(GenConstants.TREE_PARENT_CODE); + String treeName = paramsObj.getStr(GenConstants.TREE_NAME); + String parentMenuId = paramsObj.getStr(GenConstants.PARENT_MENU_ID); + String parentMenuName = paramsObj.getStr(GenConstants.PARENT_MENU_NAME); + + genTable.setTreeCode(treeCode); + genTable.setTreeParentCode(treeParentCode); + genTable.setTreeName(treeName); + genTable.setParentMenuId(parentMenuId); + genTable.setParentMenuName(parentMenuName); + } + } + + /** + * 鑾峰彇浠g爜鐢熸垚鍦板潃 + * + * @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); + } } + -- Gitblit v1.9.3