Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue
Conflicts:
ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java
ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java
ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java
ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
ruoyi-ui/src/api/tool/gen.js
ruoyi-ui/src/assets/styles/ruoyi.scss
ruoyi-ui/src/views/system/user/index.vue
ruoyi-ui/src/views/tool/gen/index.vue
| | |
| | | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
| | | <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
| | | <java.version>1.8</java.version>
|
| | | <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
|
| | | <mybatis.boot.version>1.3.2</mybatis.boot.version>
|
| | | <druid.version>1.1.22</druid.version>
|
| | | <bitwalker.version>1.19</bitwalker.version>
|
| | |
| | | <dependency>
|
| | | <groupId>org.springframework.boot</groupId>
|
| | | <artifactId>spring-boot-dependencies</artifactId>
|
| | | <version>2.1.1.RELEASE</version>
|
| | | <version>2.1.17.RELEASE</version>
|
| | | <type>pom</type>
|
| | | <scope>import</scope>
|
| | | </dependency>
|
| | |
| | | val = Convert.toStr(val);
|
| | | }
|
| | | }
|
| | | else if ((Integer.TYPE == fieldType) || (Integer.class == fieldType))
|
| | | else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val)))
|
| | | {
|
| | | val = Convert.toInt(val);
|
| | | }
|
| | | else if ((Long.TYPE == fieldType) || (Long.class == fieldType))
|
| | | else if (Long.TYPE == fieldType || Long.class == fieldType)
|
| | | {
|
| | | val = Convert.toLong(val);
|
| | | }
|
| | | else if ((Double.TYPE == fieldType) || (Double.class == fieldType))
|
| | | else if (Double.TYPE == fieldType || Double.class == fieldType)
|
| | | {
|
| | | val = Convert.toDouble(val);
|
| | | }
|
| | | else if ((Float.TYPE == fieldType) || (Float.class == fieldType))
|
| | | else if (Float.TYPE == fieldType || Float.class == fieldType)
|
| | | {
|
| | | val = Convert.toFloat(val);
|
| | | }
|
| | |
| | | @PreAuthorize("@ss.hasPermi('tool:gen:code')") |
| | | @Log(title = "代码生成", businessType = BusinessType.GENCODE) |
| | | @GetMapping("/genCode/{tableName}") |
| | | public AjaxResult genCode(HttpServletResponse response, @PathVariable("tableName") String tableName) |
| | | public AjaxResult genCode(@PathVariable("tableName") String tableName) |
| | | { |
| | | genTableService.generatorCode(tableName); |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | /** |
| | | * 同步数据库 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('tool:gen:edit')") |
| | | @Log(title = "代码生成", businessType = BusinessType.UPDATE) |
| | | @GetMapping("/synchDb/{tableName}") |
| | | public AjaxResult synchDb(@PathVariable("tableName") String tableName) |
| | | { |
| | | genTableService.synchDb(tableName); |
| | | return AjaxResult.success(); |
| | | } |
| | | |
| | | /** |
| | | * 批量生成代码 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('tool:gen:code')") |
| | |
| | | * @return 列信息 |
| | | */ |
| | | public List<GenTableColumn> selectDbTableColumnsByName(String tableName); |
| | | |
| | | |
| | | /** |
| | | * 查询业务字段列表 |
| | | * |
| | |
| | | public int updateGenTableColumn(GenTableColumn genTableColumn); |
| | | |
| | | /** |
| | | * 删除业务字段 |
| | | * |
| | | * @param genTableColumns 列数据 |
| | | * @return 结果 |
| | | */ |
| | | public int deleteGenTableColumns(List<GenTableColumn> genTableColumns); |
| | | |
| | | /** |
| | | * 批量删除业务字段 |
| | | * |
| | | * @param ids 需要删除的数据ID |
| | |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | import java.util.zip.ZipEntry; |
| | | import java.util.zip.ZipOutputStream; |
| | | import org.apache.commons.io.IOUtils; |
| | |
| | | * 生成代码(自定义路径) |
| | | * |
| | | * @param tableName 表名称 |
| | | * @return 数据 |
| | | */ |
| | | @Override |
| | | public void generatorCode(String tableName) |
| | |
| | | } |
| | | |
| | | /** |
| | | * 同步数据库 |
| | | * |
| | | * @param tableName 表名称 |
| | | */ |
| | | @Override |
| | | @Transactional |
| | | public void synchDb(String tableName) |
| | | { |
| | | GenTable table = genTableMapper.selectGenTableByName(tableName); |
| | | List<GenTableColumn> tableColumns = table.getColumns(); |
| | | List<String> tableColumnNames = tableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); |
| | | |
| | | List<GenTableColumn> dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); |
| | | List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); |
| | | |
| | | dbTableColumns.forEach(column -> { |
| | | if (!tableColumnNames.contains(column.getColumnName())) |
| | | { |
| | | GenUtils.initColumnField(column, table); |
| | | genTableColumnMapper.insertGenTableColumn(column); |
| | | } |
| | | }); |
| | | |
| | | List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); |
| | | if (StringUtils.isNotEmpty(delColumns)) |
| | | { |
| | | genTableColumnMapper.deleteGenTableColumns(delColumns); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 批量生成代码(下载方式) |
| | | * |
| | | * @param tableNames 表数组 |
| | |
| | | public void generatorCode(String tableName); |
| | | |
| | | /** |
| | | * 同步数据库 |
| | | * |
| | | * @param tableName 表名称 |
| | | */ |
| | | public void synchDb(String tableName); |
| | | |
| | | /** |
| | | * 批量生成代码(下载方式) |
| | | * |
| | | * @param tableNames 表数组 |
| | |
| | | </foreach> |
| | | </delete> |
| | | |
| | | <delete id="deleteGenTableColumns"> |
| | | delete from gen_table_column where column_id in |
| | | <foreach collection="list" item="item" open="(" separator="," close=")"> |
| | | #{item.columnId} |
| | | </foreach> |
| | | </delete> |
| | | |
| | | </mapper> |
| | |
| | | </foreach> |
| | | </delete> |
| | | |
| | | </mapper> |
| | | </mapper> |
| | |
| | | AND date_format(u.create_time,'%y%m%d') <= date_format(#{endTime},'%y%m%d') |
| | | </if> |
| | | <if test="deptId != null and deptId != 0"> |
| | | AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (#{deptId},ancestors) )) |
| | | AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) )) |
| | | </if> |
| | | <!-- 数据范围过滤 --> |
| | | ${params.dataScope} |
| | |
| | | }) |
| | | } |
| | | |
| | | // 同步数据库 |
| | | export function synchDb(tableName) { |
| | | return request({ |
| | | url: '/tool/gen/synchDb/' + tableName, |
| | | method: 'get' |
| | | }) |
| | | } |
| | |
| | | font-size: 13px; |
| | | } |
| | | } |
| | | .el-table__body-wrapper { |
| | | .el-button [class*="el-icon-"] + span { |
| | | margin-left: 1px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** 表单布局 **/ |
| | |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width"> |
| | | <el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:user:edit']">修改</el-button> |
| | | <el-button v-if="scope.row.userId !== 1" size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:user:remove']">删除</el-button> |
| | |
| | | <el-button |
| | | type="text" |
| | | size="small" |
| | | icon="el-icon-refresh" |
| | | @click="handleSynchDb(scope.row)" |
| | | v-hasPermi="['tool:gen:edit']" |
| | | >同步</el-button> |
| | | <el-button |
| | | type="text" |
| | | size="small" |
| | | icon="el-icon-download" |
| | | @click="handleGenTable(scope.row)" |
| | | v-hasPermi="['tool:gen:code']" |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { listTable, previewTable, delTable, genCode } from "@/api/tool/gen"; |
| | | import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen"; |
| | | import importTable from "./importTable"; |
| | | import { downLoadZip } from "@/utils/zipdownload"; |
| | | export default { |
| | |
| | | downLoadZip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi"); |
| | | } |
| | | }, |
| | | /** 同步数据库操作 */ |
| | | handleSynchDb(row) { |
| | | const tableName = row.tableName; |
| | | this.$confirm('确认要强制同步"' + tableName + '"表结构吗?', "警告", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }).then(function() { |
| | | return synchDb(tableName); |
| | | }).then(() => { |
| | | this.msgSuccess("同步成功"); |
| | | }).catch(function() {}); |
| | | }, |
| | | /** 打开导入表弹窗 */ |
| | | openImportTable() { |
| | | this.$refs.import.show(); |