From 6ef1763bf27179af9310c39ee99a56f0cb306f95 Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Wed, 3 Dec 2025 22:48:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/pom.xml | 5 + .../com/jeesite/modules/app/Job/hostJob.java | 1 - .../jeesite/modules/app/dao/ExecResult.java | 21 ++ .../jeesite/modules/app/utils/MysqlUtils.java | 46 +++ .../modules/biz/dao/BizSqlStorageDao.java | 15 + .../modules/biz/entity/BizSqlStorage.java | 114 +++++++ .../biz/service/BizSqlStorageService.java | 134 ++++++++ .../biz/web/BizSqlStorageController.java | 173 ++++++++++ .../mappings/modules/biz/BizSqlStorageDao.xml | 15 + web-vue/packages/biz/api/biz/sqlStorage.ts | 57 ++++ .../biz/views/biz/sqlStorage/form.vue | 140 ++++++++ .../biz/views/biz/sqlStorage/formImport.vue | 103 ++++++ .../biz/views/biz/sqlStorage/list.vue | 313 ++++++++++++++++++ 13 files changed, 1136 insertions(+), 1 deletion(-) create mode 100644 web-api/src/main/java/com/jeesite/modules/app/dao/ExecResult.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/dao/BizSqlStorageDao.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/entity/BizSqlStorage.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/service/BizSqlStorageService.java create mode 100644 web-api/src/main/java/com/jeesite/modules/biz/web/BizSqlStorageController.java create mode 100644 web-api/src/main/resources/mappings/modules/biz/BizSqlStorageDao.xml create mode 100644 web-vue/packages/biz/api/biz/sqlStorage.ts create mode 100644 web-vue/packages/biz/views/biz/sqlStorage/form.vue create mode 100644 web-vue/packages/biz/views/biz/sqlStorage/formImport.vue create mode 100644 web-vue/packages/biz/views/biz/sqlStorage/list.vue diff --git a/common/pom.xml b/common/pom.xml index 4bce0d66..29df84a2 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -26,6 +26,11 @@ provided + + cn.hutool + hutool-all + 5.8.16 + com.jcraft diff --git a/web-api/src/main/java/com/jeesite/modules/app/Job/hostJob.java b/web-api/src/main/java/com/jeesite/modules/app/Job/hostJob.java index 9e6802bb..3ca0ab3d 100644 --- a/web-api/src/main/java/com/jeesite/modules/app/Job/hostJob.java +++ b/web-api/src/main/java/com/jeesite/modules/app/Job/hostJob.java @@ -119,7 +119,6 @@ public class hostJob { bizDeviceInfo.setDevice(diskInfo.getDevice()); bizDeviceInfo.setMountPoint(diskInfo.getMountPoint()); List deviceInfoList = deviceInfoService.findList(bizDeviceInfo); - BizDeviceInfo deviceInfo = deviceInfoList.isEmpty() ? new BizDeviceInfo() : deviceInfoList.get(0); deviceInfo.setHostId(host.getHostId()); deviceInfo.setDevice(diskInfo.getDevice()); diff --git a/web-api/src/main/java/com/jeesite/modules/app/dao/ExecResult.java b/web-api/src/main/java/com/jeesite/modules/app/dao/ExecResult.java new file mode 100644 index 00000000..627d0fde --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/app/dao/ExecResult.java @@ -0,0 +1,21 @@ +package com.jeesite.modules.app.dao; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ExecResult implements Serializable { + + private String code; + + private String fileName; + + public ExecResult() { + } + + public ExecResult(String code, String fileName) { + this.code = code; + this.fileName = fileName; + } +} diff --git a/web-api/src/main/java/com/jeesite/modules/app/utils/MysqlUtils.java b/web-api/src/main/java/com/jeesite/modules/app/utils/MysqlUtils.java index b1b03b6c..26bf42f4 100644 --- a/web-api/src/main/java/com/jeesite/modules/app/utils/MysqlUtils.java +++ b/web-api/src/main/java/com/jeesite/modules/app/utils/MysqlUtils.java @@ -1,7 +1,11 @@ package com.jeesite.modules.app.utils; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.poi.excel.BigExcelWriter; +import cn.hutool.poi.excel.ExcelUtil; import com.jeesite.modules.app.dao.TableTree; +import com.jeesite.modules.app.dao.ExecResult; import com.jeesite.modules.biz.entity.BizDbConfig; import com.jeesite.modules.biz.entity.BizTableField; import com.jeesite.modules.biz.entity.BizTableInfo; @@ -18,6 +22,10 @@ public class MysqlUtils { private static final LoggerUtils logger = LoggerUtils.getInstance(); + private static final String filePath = "/ogsapp/resultList/"; + + private static String EXEC_CODE = "0"; + // 需要排除的系统数据库 private static final List SYSTEM_DATABASES = Arrays.asList( "information_schema", "mysql", "performance_schema", "sys", "test" @@ -202,4 +210,42 @@ public class MysqlUtils { } return tableTrees; } + + + public static ExecResult getExecResult(BizDbConfig dbConfig, String sql) { + String fileName = filePath + vId.getCid() + "_data.xlsx"; + try { + Connection conn = getConnection(dbConfig.getDbIp(), dbConfig.getDbPort(), dbConfig.getDbUsername(), dbConfig.getDbPassword()); + Statement statement = conn.createStatement(); + boolean isQuery = sql.trim().toUpperCase().startsWith("SELECT"); + if (isQuery) { + ResultSet rs = statement.executeQuery(sql); + List> resultList = new ArrayList<>(); + ResultSetMetaData metaData = rs.getMetaData(); + int columnCount = metaData.getColumnCount(); + while (rs.next()) { + Map rowMap = new LinkedHashMap<>(); + for (int i = 1; i <= columnCount; i++) { + String columnName = metaData.getColumnName(i); + Object value = rs.getObject(i); + rowMap.put(columnName, value); + } + resultList.add(rowMap); + } + List> mapList = CollUtil.newArrayList(resultList); + BigExcelWriter writer = ExcelUtil.getBigWriter(fileName); + writer.write(mapList); + writer.close(); + logger.info(sql, "执行成功,影响行数:", resultList.size(), "执行结果:", fileName); + } else { + int affectedRows = statement.executeUpdate(sql); + logger.info(sql, "执行成功,影响行数:", affectedRows); + } + EXEC_CODE = "1"; + } catch (Exception e) { + EXEC_CODE = "0"; + logger.error(e.getMessage()); + } + return new ExecResult(EXEC_CODE, fileName); + } } \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/dao/BizSqlStorageDao.java b/web-api/src/main/java/com/jeesite/modules/biz/dao/BizSqlStorageDao.java new file mode 100644 index 00000000..dd44e31b --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/dao/BizSqlStorageDao.java @@ -0,0 +1,15 @@ +package com.jeesite.modules.biz.dao; + +import com.jeesite.common.dao.CrudDao; +import com.jeesite.common.mybatis.annotation.MyBatisDao; +import com.jeesite.modules.biz.entity.BizSqlStorage; + +/** + * 数据开发DAO接口 + * @author gaoxq + * @version 2025-12-03 + */ +@MyBatisDao(dataSourceName="work") +public interface BizSqlStorageDao extends CrudDao { + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/entity/BizSqlStorage.java b/web-api/src/main/java/com/jeesite/modules/biz/entity/BizSqlStorage.java new file mode 100644 index 00000000..7be12fe8 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/entity/BizSqlStorage.java @@ -0,0 +1,114 @@ +package com.jeesite.modules.biz.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.jeesite.common.mybatis.annotation.JoinTable; +import com.jeesite.common.mybatis.annotation.JoinTable.Type; +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +import com.jeesite.common.entity.DataEntity; +import com.jeesite.common.mybatis.annotation.Column; +import com.jeesite.common.mybatis.annotation.Table; +import com.jeesite.common.mybatis.mapper.query.QueryType; +import com.jeesite.common.utils.excel.annotation.ExcelField; +import com.jeesite.common.utils.excel.annotation.ExcelField.Align; +import com.jeesite.common.utils.excel.annotation.ExcelFields; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 数据开发Entity + * + * @author gaoxq + * @version 2025-12-03 + */ +@EqualsAndHashCode(callSuper = true) +@Table(name = "biz_sql_storage", alias = "a", label = "数据开发信息", columns = { + @Column(name = "create_time", attrName = "createTime", label = "创建时间", isUpdate = false, isUpdateForce = true), + @Column(name = "id", attrName = "id", label = "主键ID", isPK = true), + @Column(name = "sql_name", attrName = "sqlName", label = "SQL名称", queryType = QueryType.LIKE), + @Column(name = "sql_content", attrName = "sqlContent", label = "SQL语句", isQuery = false), + @Column(name = "sql_type", attrName = "sqlType", label = "SQL类型"), + @Column(name = "sql_desc", attrName = "sqlDesc", label = "SQL描述", isQuery = false), + @Column(name = "update_time", attrName = "updateTime", label = "更新时间"), + @Column(name = "ustatus", attrName = "ustatus", label = "状态"), + @Column(name = "execute_file", attrName = "executeFile", label = "文件名称", isQuery = false), + @Column(name = "execute_time", attrName = "executeTime", label = "执行时间"), + @Column(name = "execute_result", attrName = "executeResult", label = "执行结果"), + @Column(name = "db_id", attrName = "dbId", label = "连接标识"), +}, joinTable = { + @JoinTable(type = Type.LEFT_JOIN, entity = BizDbConfig.class, attrName = "this", alias = "b", + on = "a.db_id = b.id", + columns = { + @Column(name = "db_type", attrName = "dbType", label = "数据库类型"), + @Column(name = "db_name", attrName = "dbName", label = "数据库名称"), + @Column(name = "db_ip", attrName = "dbIp", label = "数据库IP"), + }), +}, orderBy = "a.create_time DESC" +) +@Data +public class BizSqlStorage extends DataEntity implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + private Date createTime; // 创建时间 + private String sqlName; // SQL名称 + private String sqlContent; // SQL语句 + private String sqlType; // SQL类型 + private String sqlDesc; // SQL描述 + private Date updateTime; // 更新时间 + private String ustatus; // 状态 + private String executeFile; // 文件名称 + private Date executeTime; // 执行时间 + private String executeResult; // 执行结果 + private String dbId; // 连接标识 + + private String dbType; + private String dbName; + private String dbIp; + + @ExcelFields({ + @ExcelField(title = "创建时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "主键ID", attrName = "id", align = Align.CENTER, sort = 20), + @ExcelField(title = "SQL名称", attrName = "sqlName", align = Align.CENTER, sort = 30), + @ExcelField(title = "SQL语句", attrName = "sqlContent", align = Align.CENTER, sort = 40), + @ExcelField(title = "SQL类型", attrName = "sqlType", align = Align.CENTER, sort = 50), + @ExcelField(title = "SQL描述", attrName = "sqlDesc", align = Align.CENTER, sort = 60), + @ExcelField(title = "更新时间", attrName = "updateTime", align = Align.CENTER, sort = 70, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "状态", attrName = "ustatus", dictType = "ustatus", align = Align.CENTER, sort = 80), + @ExcelField(title = "文件名称", attrName = "executeFile", align = Align.CENTER, sort = 90), + @ExcelField(title = "执行时间", attrName = "executeTime", align = Align.CENTER, sort = 100, dataFormat = "yyyy-MM-dd hh:mm"), + @ExcelField(title = "执行结果", attrName = "executeResult", dictType = "execute_result", align = Align.CENTER, sort = 110), + @ExcelField(title = "数据库名称", attrName = "dbName", align = Align.CENTER, sort = 120), + @ExcelField(title = "数据库IP", attrName = "dbIp", align = Align.CENTER, sort = 120), + }) + public BizSqlStorage() { + this(null); + } + + public BizSqlStorage(String id) { + super(id); + } + + public Date getCreateTime_gte() { + return sqlMap.getWhere().getValue("create_time", QueryType.GTE); + } + + public void setCreateTime_gte(Date createTime) { + sqlMap.getWhere().and("create_time", QueryType.GTE, createTime); + } + + public Date getCreateTime_lte() { + return sqlMap.getWhere().getValue("create_time", QueryType.LTE); + } + + public void setCreateTime_lte(Date createTime) { + sqlMap.getWhere().and("create_time", QueryType.LTE, createTime); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/service/BizSqlStorageService.java b/web-api/src/main/java/com/jeesite/modules/biz/service/BizSqlStorageService.java new file mode 100644 index 00000000..8e21fc01 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/service/BizSqlStorageService.java @@ -0,0 +1,134 @@ +package com.jeesite.modules.biz.service; + +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.jeesite.common.entity.Page; +import com.jeesite.common.service.CrudService; +import com.jeesite.modules.biz.entity.BizSqlStorage; +import com.jeesite.modules.biz.dao.BizSqlStorageDao; +import com.jeesite.common.service.ServiceException; +import com.jeesite.common.config.Global; +import com.jeesite.common.validator.ValidatorUtils; +import com.jeesite.common.utils.excel.ExcelImport; +import org.springframework.web.multipart.MultipartFile; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; + +/** + * 数据开发Service + * @author gaoxq + * @version 2025-12-03 + */ +@Service +public class BizSqlStorageService extends CrudService { + + /** + * 获取单条数据 + * @param bizSqlStorage 主键 + */ + @Override + public BizSqlStorage get(BizSqlStorage bizSqlStorage) { + return super.get(bizSqlStorage); + } + + /** + * 查询分页数据 + * @param bizSqlStorage 查询条件 + * @param bizSqlStorage page 分页对象 + */ + @Override + public Page findPage(BizSqlStorage bizSqlStorage) { + return super.findPage(bizSqlStorage); + } + + /** + * 查询列表数据 + * @param bizSqlStorage 查询条件 + */ + @Override + public List findList(BizSqlStorage bizSqlStorage) { + return super.findList(bizSqlStorage); + } + + /** + * 保存数据(插入或更新) + * @param bizSqlStorage 数据对象 + */ + @Override + @Transactional + public void save(BizSqlStorage bizSqlStorage) { + super.save(bizSqlStorage); + } + + /** + * 导入数据 + * @param file 导入的数据文件 + */ + @Transactional + public String importData(MultipartFile file) { + if (file == null){ + throw new ServiceException(text("请选择导入的数据文件!")); + } + int successNum = 0; int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + try(ExcelImport ei = new ExcelImport(file, 2, 0)){ + List list = ei.getDataList(BizSqlStorage.class); + for (BizSqlStorage bizSqlStorage : list) { + try{ + ValidatorUtils.validateWithException(bizSqlStorage); + this.save(bizSqlStorage); + successNum++; + successMsg.append("" + successNum + "、编号 " + bizSqlStorage.getId() + " 导入成功"); + } catch (Exception e) { + failureNum++; + String msg = "" + failureNum + "、编号 " + bizSqlStorage.getId() + " 导入失败:"; + if (e instanceof ConstraintViolationException){ + ConstraintViolationException cve = (ConstraintViolationException)e; + for (ConstraintViolation> violation : cve.getConstraintViolations()) { + msg += Global.getText(violation.getMessage()) + " ("+violation.getPropertyPath()+")"; + } + }else{ + msg += e.getMessage(); + } + failureMsg.append(msg); + logger.error(msg, e); + } + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + failureMsg.append(e.getMessage()); + return failureMsg.toString(); + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + }else{ + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + + /** + * 更新状态 + * @param bizSqlStorage 数据对象 + */ + @Override + @Transactional + public void updateStatus(BizSqlStorage bizSqlStorage) { + super.updateStatus(bizSqlStorage); + } + + /** + * 删除数据 + * @param bizSqlStorage 数据对象 + */ + @Override + @Transactional + public void delete(BizSqlStorage bizSqlStorage) { + super.delete(bizSqlStorage); + } + +} \ No newline at end of file diff --git a/web-api/src/main/java/com/jeesite/modules/biz/web/BizSqlStorageController.java b/web-api/src/main/java/com/jeesite/modules/biz/web/BizSqlStorageController.java new file mode 100644 index 00000000..c9a4d5a9 --- /dev/null +++ b/web-api/src/main/java/com/jeesite/modules/biz/web/BizSqlStorageController.java @@ -0,0 +1,173 @@ +package com.jeesite.modules.biz.web; + +import java.util.Date; +import java.util.List; + +import com.jeesite.modules.app.dao.ExecResult; +import com.jeesite.modules.app.utils.MysqlUtils; +import com.jeesite.modules.app.utils.vDate; +import com.jeesite.modules.biz.entity.BizDbConfig; +import com.jeesite.modules.biz.service.BizDbConfigService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.jeesite.common.config.Global; +import com.jeesite.common.collect.ListUtils; +import com.jeesite.common.entity.Page; +import com.jeesite.common.lang.DateUtils; +import com.jeesite.common.utils.excel.ExcelExport; +import com.jeesite.common.utils.excel.annotation.ExcelField.Type; +import org.springframework.web.multipart.MultipartFile; +import com.jeesite.common.web.BaseController; +import com.jeesite.modules.biz.entity.BizSqlStorage; +import com.jeesite.modules.biz.service.BizSqlStorageService; + +/** + * 数据开发Controller + * + * @author gaoxq + * @version 2025-12-03 + */ +@Controller +@RequestMapping(value = "${adminPath}/biz/sqlStorage") +public class BizSqlStorageController extends BaseController { + + @Resource + private BizDbConfigService dbConfigService; + + private final BizSqlStorageService bizSqlStorageService; + + public BizSqlStorageController(BizSqlStorageService bizSqlStorageService) { + this.bizSqlStorageService = bizSqlStorageService; + } + + /** + * 获取数据 + */ + @ModelAttribute + public BizSqlStorage get(String id, boolean isNewRecord) { + return bizSqlStorageService.get(id, isNewRecord); + } + + /** + * 查询列表 + */ + @RequiresPermissions("biz:sqlStorage:view") + @RequestMapping(value = {"list", ""}) + public String list(BizSqlStorage bizSqlStorage, Model model) { + model.addAttribute("bizSqlStorage", bizSqlStorage); + return "modules/biz/bizSqlStorageList"; + } + + /** + * 查询列表数据 + */ + @RequiresPermissions("biz:sqlStorage:view") + @RequestMapping(value = "listData") + @ResponseBody + public Page listData(BizSqlStorage bizSqlStorage, HttpServletRequest request, HttpServletResponse response) { + bizSqlStorage.setPage(new Page<>(request, response)); + Page page = bizSqlStorageService.findPage(bizSqlStorage); + return page; + } + + /** + * 查看编辑表单 + */ + @RequiresPermissions("biz:sqlStorage:view") + @RequestMapping(value = "form") + public String form(BizSqlStorage bizSqlStorage, Model model) { + model.addAttribute("bizSqlStorage", bizSqlStorage); + return "modules/biz/bizSqlStorageForm"; + } + + /** + * 保存数据 + */ + @RequiresPermissions("biz:sqlStorage:edit") + @PostMapping(value = "save") + @ResponseBody + public String save(@Validated BizSqlStorage bizSqlStorage) { + bizSqlStorage.setUpdateTime(vDate.getUpdateTime(bizSqlStorage.getIsNewRecord())); + bizSqlStorageService.save(bizSqlStorage); + return renderResult(Global.TRUE, text("保存数据开发成功!")); + } + + /** + * 导出数据 + */ + @RequiresPermissions("biz:sqlStorage:view") + @RequestMapping(value = "exportData") + public void exportData(BizSqlStorage bizSqlStorage, HttpServletResponse response) { + List list = bizSqlStorageService.findList(bizSqlStorage); + String fileName = "数据开发" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx"; + try (ExcelExport ee = new ExcelExport("数据开发", BizSqlStorage.class)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 下载模板 + */ + @RequiresPermissions("biz:sqlStorage:view") + @RequestMapping(value = "importTemplate") + public void importTemplate(HttpServletResponse response) { + BizSqlStorage bizSqlStorage = new BizSqlStorage(); + List list = ListUtils.newArrayList(bizSqlStorage); + String fileName = "数据开发模板.xlsx"; + try (ExcelExport ee = new ExcelExport("数据开发", BizSqlStorage.class, Type.IMPORT)) { + ee.setDataList(list).write(response, fileName); + } + } + + /** + * 导入数据 + */ + @ResponseBody + @RequiresPermissions("biz:sqlStorage:edit") + @PostMapping(value = "importData") + public String importData(MultipartFile file) { + try { + String message = bizSqlStorageService.importData(file); + return renderResult(Global.TRUE, "posfull:" + message); + } catch (Exception ex) { + return renderResult(Global.FALSE, "posfull:" + ex.getMessage()); + } + } + + /** + * 删除数据 + */ + @RequiresPermissions("biz:sqlStorage:edit") + @RequestMapping(value = "delete") + @ResponseBody + public String delete(BizSqlStorage bizSqlStorage) { + bizSqlStorageService.delete(bizSqlStorage); + return renderResult(Global.TRUE, text("删除数据开发成功!")); + } + + @RequiresPermissions("biz:sqlStorage:edit") + @RequestMapping(value = "execute") + @ResponseBody + public String execute(BizSqlStorage bizSqlStorage) { + BizSqlStorage sqlStorage = bizSqlStorageService.get(bizSqlStorage); + BizDbConfig config = dbConfigService.get(sqlStorage.getDbId()); + ExecResult result = MysqlUtils.getExecResult(config, sqlStorage.getSqlContent()); + sqlStorage.setExecuteResult(result.getCode()); + sqlStorage.setExecuteFile(result.getFileName()); + sqlStorage.setExecuteTime(new Date()); + bizSqlStorageService.save(sqlStorage); + return renderResult(Global.TRUE, text("执行数据脚本成功!")); + } + +} \ No newline at end of file diff --git a/web-api/src/main/resources/mappings/modules/biz/BizSqlStorageDao.xml b/web-api/src/main/resources/mappings/modules/biz/BizSqlStorageDao.xml new file mode 100644 index 00000000..b679b53a --- /dev/null +++ b/web-api/src/main/resources/mappings/modules/biz/BizSqlStorageDao.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/web-vue/packages/biz/api/biz/sqlStorage.ts b/web-vue/packages/biz/api/biz/sqlStorage.ts new file mode 100644 index 00000000..9c61f0d6 --- /dev/null +++ b/web-vue/packages/biz/api/biz/sqlStorage.ts @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + * @author gaoxq + */ +import { defHttp } from '@jeesite/core/utils/http/axios'; +import { useGlobSetting } from '@jeesite/core/hooks/setting'; +import { BasicModel, Page } from '@jeesite/core/api/model/baseModel'; +import { UploadApiResult } from '@jeesite/core/api/sys/upload'; +import { UploadFileParams } from '@jeesite/types/axios'; +import { AxiosProgressEvent } from 'axios'; + +const { ctxPath, adminPath } = useGlobSetting(); + +export interface BizSqlStorage extends BasicModel { + createTime?: string; // 创建时间 + sqlName: string; // SQL名称 + sqlContent: string; // SQL语句 + sqlType: string; // SQL类型 + sqlDesc?: string; // SQL描述 + updateTime?: string; // 更新时间 + ustatus: string; // 状态 + executeFile?: string; // 文件名称 + executeTime?: string; // 执行时间 + executeResult?: string; // 执行结果 + dbId: string; // 连接标识 +} + +export const bizSqlStorageList = (params?: BizSqlStorage | any) => + defHttp.get({ url: adminPath + '/biz/sqlStorage/list', params }); + +export const bizSqlStorageListData = (params?: BizSqlStorage | any) => + defHttp.post>({ url: adminPath + '/biz/sqlStorage/listData', params }); + +export const bizSqlStorageForm = (params?: BizSqlStorage | any) => + defHttp.get({ url: adminPath + '/biz/sqlStorage/form', params }); + +export const bizSqlStorageSave = (params?: any, data?: BizSqlStorage | any) => + defHttp.postJson({ url: adminPath + '/biz/sqlStorage/save', params, data }); + +export const bizSqlStorageImportData = ( + params: UploadFileParams, + onUploadProgress: (progressEvent: AxiosProgressEvent) => void, +) => + defHttp.uploadFile( + { + url: ctxPath + adminPath + '/biz/sqlStorage/importData', + onUploadProgress, + }, + params, + ); + +export const bizSqlStorageDelete = (params?: BizSqlStorage | any) => + defHttp.get({ url: adminPath + '/biz/sqlStorage/delete', params }); + +export const bizSqlStorageExecute = (params?: BizSqlStorage | any) => + defHttp.get({ url: adminPath + '/biz/sqlStorage/execute', params }); diff --git a/web-vue/packages/biz/views/biz/sqlStorage/form.vue b/web-vue/packages/biz/views/biz/sqlStorage/form.vue new file mode 100644 index 00000000..b9d1277c --- /dev/null +++ b/web-vue/packages/biz/views/biz/sqlStorage/form.vue @@ -0,0 +1,140 @@ + + + + + + {{ getTitle.value }} + + + + + diff --git a/web-vue/packages/biz/views/biz/sqlStorage/formImport.vue b/web-vue/packages/biz/views/biz/sqlStorage/formImport.vue new file mode 100644 index 00000000..020e5d30 --- /dev/null +++ b/web-vue/packages/biz/views/biz/sqlStorage/formImport.vue @@ -0,0 +1,103 @@ + + + + + {{ t('选择文件') }} + {{ uploadInfo }} + + + {{ t('提示:仅允许导入“xls”或“xlsx”格式文件!') }} + + + + + {{ t('下载模板') }} + + + + + diff --git a/web-vue/packages/biz/views/biz/sqlStorage/list.vue b/web-vue/packages/biz/views/biz/sqlStorage/list.vue new file mode 100644 index 00000000..c7b7769e --- /dev/null +++ b/web-vue/packages/biz/views/biz/sqlStorage/list.vue @@ -0,0 +1,313 @@ + + + + + + + {{ getTitle.value }} + + + + {{ t('导出') }} + + + {{ t('新增') }} + + + + + {{ record.sqlName }} + + + + + + + +