From 906a6d74670020699e45888943d6ea263cbb5957 Mon Sep 17 00:00:00 2001 From: AlanScipio Date: Fri, 2 Feb 2024 18:46:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=94=AF=E6=8C=81MyBatisDynamicSql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/core/utils/StringUtils.java | 4 +- .../core/utils/file/FileActionHandler.java | 18 + .../common/core/utils/file/FileFilter.java | 14 + .../common/core/utils/file/FileUtils.java | 306 ++++++++---- .../common/core/utils/poi/ExcelUtil.java | 98 ++-- .../ruoyi/gen/controller/GenController.java | 33 +- .../java/com/ruoyi/gen/domain/GenTable.java | 22 +- .../com/ruoyi/gen/domain/GenTableColumn.java | 15 + .../gen/service/GenTableServiceImpl.java | 50 +- .../java/com/ruoyi/gen/util/GenUtils.java | 137 ++---- .../ruoyi/gen/util/VelocityInitializer.java | 20 +- .../com/ruoyi/gen/util/VelocityUtils.java | 243 ++++----- .../mapper/generator/GenTableMapper.xml | 462 +++++++++++------- .../vm/java/controller-dynamic.java.vm | 116 +++++ .../main/resources/vm/java/controller.java.vm | 9 +- .../src/main/resources/vm/java/domain.java.vm | 2 +- .../src/main/resources/vm/java/mapper.java.vm | 18 +- .../main/resources/vm/java/service.java.vm | 34 +- .../vm/java/serviceImpl-dynamic.java.vm | 217 ++++++++ .../resources/vm/java/serviceImpl.java.vm | 4 +- .../main/resources/vm/java/sub-domain.java.vm | 2 +- .../ruoyi/system/mapper/SysConfigMapper.xml | 165 ++++--- .../wms/controller/UnitInfoController.java | 97 ++++ .../com/ruoyi/wms/mapper/UnitInfoMapper.java | 25 +- .../ruoyi/wms/service/IUnitInfoService.java | 61 +++ .../wms/service/impl/UnitInfoServiceImpl.java | 113 +++++ ruoyi-ui/src/api/tool/gen.js | 2 +- ruoyi-ui/src/views/tool/build/index.vue | 2 +- ruoyi-ui/src/views/tool/gen/genInfoForm.vue | 16 + ruoyi-ui/src/views/tool/gen/index.vue | 2 +- sql/ry-cloud-ryas.sql | 159 ++++-- sql/ry-config-ryas.sql | 2 +- 32 files changed, 1678 insertions(+), 790 deletions(-) create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileActionHandler.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileFilter.java create mode 100644 ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller-dynamic.java.vm create mode 100644 ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl-dynamic.java.vm create mode 100644 ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/controller/UnitInfoController.java create mode 100644 ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/IUnitInfoService.java create mode 100644 ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/UnitInfoServiceImpl.java diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java index f26ce3139..884a1204f 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java @@ -357,7 +357,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { return ""; } else if (!name.contains("_")) { // 不含下划线,仅将首字母大写 - return name.substring(0, 1).toUpperCase() + name.substring(1); + return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); } // 用下划线将原始字符串分割 String[] camels = name.split("_"); @@ -382,7 +382,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { return null; } if (s.indexOf(SEPARATOR) == -1) { - return s; + return s.toLowerCase(); } s = s.toLowerCase(); StringBuilder sb = new StringBuilder(s.length()); diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileActionHandler.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileActionHandler.java new file mode 100644 index 000000000..10de4f328 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileActionHandler.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.core.utils.file; + +import java.io.File; + +/** + * @author Alan Scipio + * created on 2024/2/2 + */ +@FunctionalInterface +public interface FileActionHandler { + + void onHandle(File file, Object... args); + + default void onHandle(File file) { + onHandle(file, (Object[]) null); + } + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileFilter.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileFilter.java new file mode 100644 index 000000000..02abca5e6 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileFilter.java @@ -0,0 +1,14 @@ +package com.ruoyi.common.core.utils.file; + +import java.io.File; + +/** + * @author Alan Scipio + * created on 2024/2/2 + */ +@FunctionalInterface +public interface FileFilter { + + boolean accept(File file); + +} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java index 8904c9553..d6653e41d 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java @@ -1,83 +1,71 @@ package com.ruoyi.common.core.utils.file; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; +import com.ruoyi.common.core.utils.StringUtils; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.ArrayUtils; -import com.ruoyi.common.core.utils.StringUtils; + +import java.io.*; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; /** * 文件处理工具类 - * + * * @author ruoyi */ -public class FileUtils -{ - /** 字符常量:斜杠 {@code '/'} */ +public class FileUtils { + /** + * 字符常量:斜杠 {@code '/'} + */ public static final char SLASH = '/'; - /** 字符常量:反斜杠 {@code '\\'} */ + /** + * 字符常量:反斜杠 {@code '\\'} + */ public static final char BACKSLASH = '\\'; - public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; + public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-|.\\u4e00-\\u9fa5]+"; /** * 输出指定文件的byte数组 - * + * * @param filePath 文件路径 - * @param os 输出流 - * @return + * @param os 输出流 */ - public static void writeBytes(String filePath, OutputStream os) throws IOException - { + public static void writeBytes(String filePath, OutputStream os) throws IOException { FileInputStream fis = null; - try - { + try { File file = new File(filePath); - if (!file.exists()) - { + if (!file.exists()) { throw new FileNotFoundException(filePath); } fis = new FileInputStream(file); byte[] b = new byte[1024]; int length; - while ((length = fis.read(b)) > 0) - { + while ((length = fis.read(b)) > 0) { os.write(b, 0, length); } - } - catch (IOException e) - { + } catch (IOException e) { throw e; - } - finally - { - if (os != null) - { - try - { + } finally { + if (os != null) { + try { os.close(); - } - catch (IOException e1) - { + } catch (IOException e1) { e1.printStackTrace(); } } - if (fis != null) - { - try - { + if (fis != null) { + try { fis.close(); - } - catch (IOException e1) - { + } catch (IOException e1) { e1.printStackTrace(); } } @@ -86,17 +74,14 @@ public class FileUtils /** * 删除文件 - * + * * @param filePath 文件 - * @return */ - public static boolean deleteFile(String filePath) - { + public static boolean deleteFile(String filePath) { boolean flag = false; File file = new File(filePath); // 路径为文件且不为空则进行删除 - if (file.isFile() && file.exists()) - { + if (file.isFile() && file.exists()) { flag = file.delete(); } return flag; @@ -104,26 +89,23 @@ public class FileUtils /** * 文件名称验证 - * + * * @param filename 文件名称 * @return true 正常 false 非法 */ - public static boolean isValidFilename(String filename) - { + public static boolean isValidFilename(String filename) { return filename.matches(FILENAME_PATTERN); } /** * 检查文件是否可下载 - * + * * @param resource 需要下载的文件 * @return true 正常 false 非法 */ - public static boolean checkAllowDownload(String resource) - { + public static boolean checkAllowDownload(String resource) { // 禁止目录上跳级别 - if (StringUtils.contains(resource, "..")) - { + if (StringUtils.contains(resource, "..")) { return false; } // 判断是否在允许下载的文件规则内 @@ -132,35 +114,27 @@ public class FileUtils /** * 下载文件名重新编码 - * - * @param request 请求对象 + * + * @param request 请求对象 * @param fileName 文件名 * @return 编码后的文件名 */ - public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException - { + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { final String agent = request.getHeader("USER-AGENT"); String filename = fileName; - if (agent.contains("MSIE")) - { + if (agent.contains("MSIE")) { // IE浏览器 - filename = URLEncoder.encode(filename, "utf-8"); + filename = URLEncoder.encode(filename, StandardCharsets.UTF_8); filename = filename.replace("+", " "); - } - else if (agent.contains("Firefox")) - { + } else if (agent.contains("Firefox")) { // 火狐浏览器 filename = new String(fileName.getBytes(), "ISO8859-1"); - } - else if (agent.contains("Chrome")) - { + } else if (agent.contains("Chrome")) { // google浏览器 - filename = URLEncoder.encode(filename, "utf-8"); - } - else - { + filename = URLEncoder.encode(filename, StandardCharsets.UTF_8); + } else { // 其它浏览器 - filename = URLEncoder.encode(filename, "utf-8"); + filename = URLEncoder.encode(filename, StandardCharsets.UTF_8); } return filename; } @@ -171,30 +145,24 @@ public class FileUtils * @param filePath 文件 * @return 文件名 */ - public static String getName(String filePath) - { - if (null == filePath) - { + public static String getName(String filePath) { + if (null == filePath) { return null; } int len = filePath.length(); - if (0 == len) - { + if (0 == len) { return filePath; } - if (isFileSeparator(filePath.charAt(len - 1))) - { + if (isFileSeparator(filePath.charAt(len - 1))) { // 以分隔符结尾的去掉结尾分隔符 len--; } int begin = 0; char c; - for (int i = len - 1; i > -1; i--) - { + for (int i = len - 1; i > -1; i--) { c = filePath.charAt(i); - if (isFileSeparator(c)) - { + if (isFileSeparator(c)) { // 查找最后一个路径分隔符(/或者\) begin = i + 1; break; @@ -211,31 +179,27 @@ public class FileUtils * @param c 字符 * @return 是否为Windows或者Linux(Unix)文件分隔符 */ - public static boolean isFileSeparator(char c) - { + public static boolean isFileSeparator(char c) { return SLASH == c || BACKSLASH == c; } /** * 下载文件名重新编码 * - * @param response 响应对象 + * @param response 响应对象 * @param realFileName 真实文件名 - * @return */ - public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException - { + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { String percentEncodedFileName = percentEncode(realFileName); - StringBuilder contentDispositionValue = new StringBuilder(); - contentDispositionValue.append("attachment; filename=") - .append(percentEncodedFileName) - .append(";") - .append("filename*=") - .append("utf-8''") - .append(percentEncodedFileName); + String contentDispositionValue = "attachment; filename=" + + percentEncodedFileName + + ";" + + "filename*=" + + "utf-8''" + + percentEncodedFileName; - response.setHeader("Content-disposition", contentDispositionValue.toString()); + response.setHeader("Content-disposition", contentDispositionValue); response.setHeader("download-filename", percentEncodedFileName); } @@ -245,9 +209,137 @@ public class FileUtils * @param s 需要百分号编码的字符串 * @return 百分号编码后的字符串 */ - public static String percentEncode(String s) throws UnsupportedEncodingException - { - String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); + public static String percentEncode(String s) { + String encode = URLEncoder.encode(s, StandardCharsets.UTF_8); return encode.replaceAll("\\+", "%20"); } + + /** + * 递归地在指定根目录下查找所有具有特定文件名的文件。 + * + * @param rootDir 根目录 + * @param searchFileName 要查找的文件名 + * @param caseSensitive 是否大小写敏感 + * @return 找到的具有特定文件名的文件对象列表 + * @throws IOException 如果在访问文件系统时发生错误 + */ + public static List findFiles(File rootDir, String searchFileName, boolean caseSensitive) throws IOException { + Path startPath = rootDir.toPath(); + + if (!Files.exists(startPath)) { + throw new FileNotFoundException("The provided root path does not exist: " + rootDir.getAbsolutePath()); + } + + List matchingFiles; + + try (var paths = Files.walk(startPath)) { + matchingFiles = paths + .filter(Files::isRegularFile) + .filter(path -> { + if (caseSensitive) { + return path.getFileName().toString().equals(searchFileName); + } else { + return path.getFileName().toString().equalsIgnoreCase(searchFileName); + } + }) + .map(Path::toFile) + .collect(Collectors.toList()); + } + + return matchingFiles; + } + + public static List findFiles(String rootPath, String searchFileName, boolean caseSensitive) throws IOException { + return findFiles(new File(rootPath), searchFileName, caseSensitive); + } + + public static List findFiles(String rootPath, String searchFileName) throws IOException { + return findFiles(rootPath, searchFileName, true); + } + + /** + * 读取文件内容并替换多组指定字符串。 + * + * @param file 文件 + * @param replacements 一个映射表,其中键为要替换的目标字符串,值为替换后的字符串 + * @param handler 替换时的回调 + * @throws IOException 如果读取或写入文件时发生错误 + */ + public static void replaceInFile(File file, Map replacements, FileActionHandler handler) throws IOException { + if (file == null) { + throw new IllegalArgumentException("The provided file is null"); + } + if (!file.exists()) { + throw new FileNotFoundException("The provided file does not exist: " + file.getAbsolutePath()); + } + if (replacements.isEmpty()) { + return; + } + + Path path = file.toPath(); + + // 读取文件内容到String + String content = Files.readString(path, StandardCharsets.UTF_8); + + // 遍历replacements Map,对每个要替换的字符串进行处理 + for (Map.Entry entry : replacements.entrySet()) { + if (handler != null) { + handler.onHandle(file, entry); + } + content = content.replace(entry.getKey(), entry.getValue()); + } + + // 将修改后的内容写回文件 + Files.writeString(path, content, StandardCharsets.UTF_8); + } + + public static void replaceInFile(File file, Map replacements) throws IOException { + replaceInFile(file, replacements, null); + } + + /** + * 检查并删除指定文件中符合正则表达式的行。 + * + * @param file 文件 + * @param regex 符合此正则表达式的行将被删除 + * @param handler 找到符合正则表达式的行时的回调 + * @throws IOException 如果读取或写入文件时发生错误 + */ + public static void removeLinesMatchingRegex(File file, String regex, FileActionHandler handler) throws IOException { + if (file == null) { + throw new IllegalArgumentException("The provided file is null"); + } + if (!file.exists()) { + throw new FileNotFoundException("The provided file does not exist: " + file.getAbsolutePath()); + } + if (StringUtils.isBlank(regex)) { + return; + } + + Path path = file.toPath(); + + // 读取文件的每一行,过滤掉符合正则表达式的行 + try (var lines = Files.lines(path, StandardCharsets.UTF_8)) { + AtomicInteger lineNo = new AtomicInteger(1); + List filteredLines = lines.filter(line -> { + boolean matches = line.matches(regex); + if (matches) { + if (handler != null) { + handler.onHandle(file, lineNo.get(), line); + } + } + lineNo.getAndIncrement(); + return !matches; + }) + .collect(Collectors.toList()); + + // 将过滤后的内容写回文件 + Files.write(path, filteredLines, StandardCharsets.UTF_8); + } + } + + public static void removeLinesMatchingRegex(File file, String regex) throws IOException { + removeLinesMatchingRegex(file, regex, null); + } + } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java index c27c1bd8c..a98de2e8c 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java @@ -1,57 +1,5 @@ package com.ruoyi.common.core.utils.poi; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.math.BigDecimal; -import java.text.DecimalFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import jakarta.servlet.http.HttpServletResponse; -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.RegExUtils; -import org.apache.commons.lang3.reflect.FieldUtils; -import org.apache.poi.ss.usermodel.BorderStyle; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.ss.usermodel.ClientAnchor; -import org.apache.poi.ss.usermodel.DataValidation; -import org.apache.poi.ss.usermodel.DataValidationConstraint; -import org.apache.poi.ss.usermodel.DataValidationHelper; -import org.apache.poi.ss.usermodel.DateUtil; -import org.apache.poi.ss.usermodel.Drawing; -import org.apache.poi.ss.usermodel.FillPatternType; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.HorizontalAlignment; -import org.apache.poi.ss.usermodel.IndexedColors; -import org.apache.poi.ss.usermodel.Name; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.VerticalAlignment; -import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.ss.usermodel.WorkbookFactory; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.ss.util.CellRangeAddressList; -import org.apache.poi.util.IOUtils; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFClientAnchor; -import org.apache.poi.xssf.usermodel.XSSFDataValidation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.annotation.Excel.ColumnType; import com.ruoyi.common.core.annotation.Excel.Type; @@ -63,6 +11,31 @@ import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.file.FileTypeUtils; import com.ruoyi.common.core.utils.file.ImageUtils; import com.ruoyi.common.core.utils.reflect.ReflectUtils; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFClientAnchor; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; /** * Excel相关处理 @@ -366,18 +339,16 @@ public class ExcelUtil { } else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) { val = Convert.toBool(val, false); } - if (StringUtils.isNotNull(fieldType)) { - String propertyName = field.getName(); - if (StringUtils.isNotEmpty(attr.targetAttr())) { - propertyName = field.getName() + "." + attr.targetAttr(); - } - if (StringUtils.isNotEmpty(attr.readConverterExp())) { - val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); - } else if (!attr.handler().equals(ExcelHandlerAdapter.class)) { - val = dataFormatHandlerAdapter(val, attr, null); - } - ReflectUtils.invokeSetter(entity, propertyName, val); + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) { + propertyName = field.getName() + "." + attr.targetAttr(); } + if (StringUtils.isNotEmpty(attr.readConverterExp())) { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } else if (!attr.handler().equals(ExcelHandlerAdapter.class)) { + val = dataFormatHandlerAdapter(val, attr, null); + } + ReflectUtils.invokeSetter(entity, propertyName, val); } list.add(entity); } @@ -403,7 +374,6 @@ public class ExcelUtil { * @param list 导出数据集合 * @param sheetName 工作表的名称 * @param title 标题 - * @return 结果 */ public void exportExcel(HttpServletResponse response, List list, String sheetName, String title) { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java index 98888da0e..ec584f957 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java @@ -1,22 +1,5 @@ package com.ruoyi.gen.controller; -import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import jakarta.servlet.http.HttpServletResponse; -import org.apache.commons.io.IOUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -28,6 +11,16 @@ import com.ruoyi.gen.domain.GenTable; import com.ruoyi.gen.domain.GenTableColumn; import com.ruoyi.gen.service.IGenTableColumnService; import com.ruoyi.gen.service.IGenTableService; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 代码生成 操作处理 @@ -167,8 +160,8 @@ public class GenController extends BaseController { */ @RequiresPermissions("tool:gen:edit") @Log(title = "代码生成", businessType = BusinessType.UPDATE) - @GetMapping("/synchDb/{tableName}") - public AjaxResult synchDb(@PathVariable("tableName") String tableName) { + @GetMapping("/syncDb/{tableName}") + public AjaxResult syncDb(@PathVariable("tableName") String tableName) { genTableService.synchDb(tableName); return success(); } @@ -190,7 +183,7 @@ public class GenController extends BaseController { */ private void genCode(HttpServletResponse response, byte[] data) throws IOException { response.reset(); - response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\""); + response.setHeader("Content-Disposition", "attachment; filename=\"generatedCodes.zip\""); response.addHeader("Content-Length", "" + data.length); response.setContentType("application/octet-stream; charset=UTF-8"); IOUtils.write(data, response.getOutputStream()); diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java index 81daf158f..124490d81 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java @@ -1,13 +1,14 @@ package com.ruoyi.gen.domain; -import java.io.Serial; -import java.util.List; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; -import org.apache.commons.lang3.ArrayUtils; import com.ruoyi.common.core.constant.GenConstants; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.domain.BaseEntity; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import org.apache.commons.lang3.ArrayUtils; + +import java.io.Serial; +import java.util.List; /** * 业务表 gen_table @@ -46,6 +47,9 @@ public class GenTable extends BaseEntity /** 前端类型(element-ui模版 element-plus模版) */ private String tplWebType; + /** 后端类型(MyBaitsDynamicSQL模板,常规模板) */ + private String tplBackendType; + /** 生成包路径 */ @NotBlank(message = "生成包路径不能为空") private String packageName; @@ -100,6 +104,14 @@ public class GenTable extends BaseEntity /** 上级菜单名称字段 */ private String parentMenuName; + public String getTplBackendType() { + return tplBackendType; + } + + public void setTplBackendType(String tplBackendType) { + this.tplBackendType = tplBackendType; + } + public Long getTableId() { return tableId; diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java index a0b1142d0..844ea1ccb 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java @@ -1,5 +1,6 @@ package com.ruoyi.gen.domain; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.validation.constraints.NotBlank; import com.ruoyi.common.core.utils.StringUtils; @@ -52,6 +53,12 @@ public class GenTableColumn extends BaseEntity { @NotBlank(message = "Java属性不能为空") private String javaField; + /** + * JAVA字段名(开头大写) + */ + @JsonIgnore + private transient String javaFieldUpper; + /** * 是否主键(1是) */ @@ -107,6 +114,14 @@ public class GenTableColumn extends BaseEntity { */ private Integer sort; + public String getJavaFieldUpper() { + return javaFieldUpper; + } + + public void setJavaFieldUpper(String javaFieldUpper) { + this.javaFieldUpper = javaFieldUpper; + } + public void setColumnId(Long columnId) { this.columnId = columnId; } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java index 5b8a07709..dfbe63c90 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java @@ -1,27 +1,5 @@ package com.ruoyi.gen.service; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.Velocity; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.constant.Constants; @@ -37,6 +15,28 @@ import com.ruoyi.gen.mapper.GenTableMapper; import com.ruoyi.gen.util.GenUtils; import com.ruoyi.gen.util.VelocityInitializer; import com.ruoyi.gen.util.VelocityUtils; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +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.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * 业务 服务层实现 @@ -187,7 +187,7 @@ public class GenTableServiceImpl implements IGenTableService { VelocityContext context = VelocityUtils.prepareContext(table); // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType(), table.getTplBackendType()); for (String template : templates) { // 渲染模板 StringWriter sw = new StringWriter(); @@ -232,7 +232,7 @@ public class GenTableServiceImpl implements IGenTableService { VelocityContext context = VelocityUtils.prepareContext(table); // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType(), table.getTplBackendType()); for (String template : templates) { if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) { // 渲染模板 @@ -329,7 +329,7 @@ public class GenTableServiceImpl implements IGenTableService { VelocityContext context = VelocityUtils.prepareContext(table); // 获取模板列表 - List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType(), table.getTplBackendType()); for (String template : templates) { // 渲染模板 StringWriter sw = new StringWriter(); diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java index 2c1c53173..f55bb722c 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java @@ -1,25 +1,24 @@ package com.ruoyi.gen.util; -import java.util.Arrays; -import org.apache.commons.lang3.RegExUtils; import com.ruoyi.common.core.constant.GenConstants; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.gen.config.GenConfig; import com.ruoyi.gen.domain.GenTable; import com.ruoyi.gen.domain.GenTableColumn; +import org.apache.commons.lang3.RegExUtils; + +import java.util.Arrays; /** * 代码生成器 工具类 - * + * * @author ruoyi */ -public class GenUtils -{ +public class GenUtils { /** * 初始化表信息 */ - public static void initTable(GenTable genTable, String operName) - { + public static void initTable(GenTable genTable, String operName) { genTable.setClassName(convertClassName(genTable.getTableName())); genTable.setPackageName(GenConfig.getPackageName()); genTable.setModuleName(getModuleName(GenConfig.getPackageName())); @@ -32,8 +31,7 @@ public class GenUtils /** * 初始化列属性字段 */ - public static void initColumnField(GenTableColumn column, GenTable table) - { + public static void initColumnField(GenTableColumn column, GenTable table) { String dataType = getDbType(column.getColumnType()); String columnName = column.getColumnName(); column.setTableId(table.getTableId()); @@ -44,36 +42,28 @@ public class GenUtils column.setJavaType(GenConstants.TYPE_STRING); column.setQueryType(GenConstants.QUERY_EQ); - if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) - { + if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) { // 字符串长度超过500设置为文本域 Integer columnLength = getColumnLength(column.getColumnType()); String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; column.setHtmlType(htmlType); - } - else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) - { + } else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) { column.setJavaType(GenConstants.TYPE_DATE); column.setHtmlType(GenConstants.HTML_DATETIME); - } - else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) - { + } else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) { column.setHtmlType(GenConstants.HTML_INPUT); // 如果是浮点型 统一用BigDecimal String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); - if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) - { + if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) { column.setJavaType(GenConstants.TYPE_BIGDECIMAL); } // 如果是整形 - else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) - { + else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) { column.setJavaType(GenConstants.TYPE_INTEGER); } // 长整形 - else - { + else { column.setJavaType(GenConstants.TYPE_LONG); } } @@ -82,74 +72,63 @@ public class GenUtils column.setIsInsert(GenConstants.REQUIRE); // 编辑字段 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) - { + if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) { column.setIsEdit(GenConstants.REQUIRE); } // 列表字段 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) - { + if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) { column.setIsList(GenConstants.REQUIRE); } // 查询字段 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) - { + if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) { column.setIsQuery(GenConstants.REQUIRE); } // 查询字段类型 - if (StringUtils.endsWithIgnoreCase(columnName, "name")) - { + if (StringUtils.endsWithIgnoreCase(columnName, "name")) { column.setQueryType(GenConstants.QUERY_LIKE); } // 状态字段设置单选框 - if (StringUtils.endsWithIgnoreCase(columnName, "status")) - { + if (StringUtils.endsWithIgnoreCase(columnName, "status")) { column.setHtmlType(GenConstants.HTML_RADIO); } // 类型&性别字段设置下拉框 else if (StringUtils.endsWithIgnoreCase(columnName, "type") - || StringUtils.endsWithIgnoreCase(columnName, "sex")) - { + || StringUtils.endsWithIgnoreCase(columnName, "sex")) { column.setHtmlType(GenConstants.HTML_SELECT); } // 图片字段设置图片上传控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "image")) - { + else if (StringUtils.endsWithIgnoreCase(columnName, "image")) { column.setHtmlType(GenConstants.HTML_IMAGE_UPLOAD); } // 文件字段设置文件上传控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "file")) - { + else if (StringUtils.endsWithIgnoreCase(columnName, "file")) { column.setHtmlType(GenConstants.HTML_FILE_UPLOAD); } // 内容字段设置富文本控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "content")) - { + else if (StringUtils.endsWithIgnoreCase(columnName, "content")) { column.setHtmlType(GenConstants.HTML_EDITOR); } } /** * 校验数组是否包含指定值 - * - * @param arr 数组 + * + * @param arr 数组 * @param targetValue 值 * @return 是否包含 */ - public static boolean arraysContains(String[] arr, String targetValue) - { + public static boolean arraysContains(String[] arr, String targetValue) { return Arrays.asList(arr).contains(targetValue); } /** * 获取模块名 - * + * * @param packageName 包名 * @return 模块名 */ - public static String getModuleName(String packageName) - { + public static String getModuleName(String packageName) { int lastIndex = packageName.lastIndexOf("."); int nameLength = packageName.length(); return StringUtils.substring(packageName, lastIndex + 1, nameLength); @@ -157,12 +136,11 @@ public class GenUtils /** * 获取业务名 - * + * * @param tableName 表名 * @return 业务名 */ - public static String getBusinessName(String tableName) - { + public static String getBusinessName(String tableName) { int lastIndex = tableName.lastIndexOf("_"); int nameLength = tableName.length(); return StringUtils.substring(tableName, lastIndex + 1, nameLength); @@ -170,16 +148,14 @@ public class GenUtils /** * 表名转换成Java类名 - * + * * @param tableName 表名称 * @return 类名 */ - public static String convertClassName(String tableName) - { + public static String convertClassName(String tableName) { boolean autoRemovePre = GenConfig.getAutoRemovePre(); String tablePrefix = GenConfig.getTablePrefix(); - if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) - { + if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) { String[] searchList = StringUtils.split(tablePrefix, ","); tableName = replaceFirst(tableName, searchList); } @@ -188,19 +164,15 @@ public class GenUtils /** * 批量替换前缀 - * - * @param replacementm 替换值 - * @param searchList 替换列表 - * @return + * + * @param replacement 替换值 + * @param searchList 替换列表 */ - public static String replaceFirst(String replacementm, String[] searchList) - { - String text = replacementm; - for (String searchString : searchList) - { - if (replacementm.startsWith(searchString)) - { - text = replacementm.replaceFirst(searchString, ""); + public static String replaceFirst(String replacement, String[] searchList) { + String text = replacement; + for (String searchString : searchList) { + if (replacement.startsWith(searchString)) { + text = replacement.replaceFirst(searchString, ""); break; } } @@ -209,48 +181,39 @@ public class GenUtils /** * 关键字替换 - * + * * @param text 需要被替换的名字 * @return 替换后的名字 */ - public static String replaceText(String text) - { + public static String replaceText(String text) { return RegExUtils.replaceAll(text, "(?:表|若依)", ""); } /** * 获取数据库类型字段 - * + * * @param columnType 列类型 * @return 截取后的列类型 */ - public static String getDbType(String columnType) - { - if (StringUtils.indexOf(columnType, "(") > 0) - { + public static String getDbType(String columnType) { + if (StringUtils.indexOf(columnType, "(") > 0) { return StringUtils.substringBefore(columnType, "("); - } - else - { + } else { return columnType; } } /** * 获取字段长度 - * + * * @param columnType 列类型 * @return 截取后的列类型 */ - public static Integer getColumnLength(String columnType) - { - if (StringUtils.indexOf(columnType, "(") > 0) - { + public static Integer getColumnLength(String columnType) { + if (StringUtils.indexOf(columnType, "(") > 0) { String length = StringUtils.substringBetween(columnType, "(", ")"); return Integer.valueOf(length); - } - else - { + } else { return 0; } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java index c0736626b..076814fd6 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java @@ -1,33 +1,29 @@ package com.ruoyi.gen.util; -import java.util.Properties; -import org.apache.velocity.app.Velocity; import com.ruoyi.common.core.constant.Constants; +import org.apache.velocity.app.Velocity; + +import java.util.Properties; /** * VelocityEngine工厂 - * + * * @author ruoyi */ -public class VelocityInitializer -{ +public class VelocityInitializer { /** * 初始化vm方法 */ - public static void initVelocity() - { + public static void initVelocity() { Properties p = new Properties(); - try - { + try { // 加载classpath目录下的vm文件 p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); // 定义字符集 p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8); // 初始化Velocity引擎,指定配置Properties Velocity.init(p); - } - catch (Exception e) - { + } catch (Exception e) { throw new RuntimeException(e); } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java index 2c8dcb1ca..e9e31aa82 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java @@ -1,10 +1,5 @@ package com.ruoyi.gen.util; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import org.apache.velocity.VelocityContext; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.constant.GenConstants; @@ -12,21 +7,32 @@ import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.gen.domain.GenTable; import com.ruoyi.gen.domain.GenTableColumn; +import org.apache.velocity.VelocityContext; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * 模板工具类 - * + * * @author ruoyi */ -public class VelocityUtils -{ - /** 项目空间路径 */ +public class VelocityUtils { + /** + * 项目空间路径 + */ private static final String PROJECT_PATH = "main/java"; - /** mybatis空间路径 */ + /** + * mybatis空间路径 + */ private static final String MYBATIS_PATH = "main/resources/mapper"; - /** 默认上级菜单,系统工具 */ + /** + * 默认上级菜单,系统工具 + */ private static final String DEFAULT_PARENT_MENU_ID = "3"; /** @@ -34,8 +40,7 @@ public class VelocityUtils * * @return 模板列表 */ - public static VelocityContext prepareContext(GenTable genTable) - { + public static VelocityContext prepareContext(GenTable genTable) { String moduleName = genTable.getModuleName(); String businessName = genTable.getBusinessName(); String packageName = genTable.getPackageName(); @@ -62,30 +67,27 @@ public class VelocityUtils velocityContext.put("table", genTable); velocityContext.put("dicts", getDicts(genTable)); setMenuVelocityContext(velocityContext, genTable); - if (GenConstants.TPL_TREE.equals(tplCategory)) - { + if (GenConstants.TPL_TREE.equals(tplCategory)) { setTreeVelocityContext(velocityContext, genTable); } - if (GenConstants.TPL_SUB.equals(tplCategory)) - { + if (GenConstants.TPL_SUB.equals(tplCategory)) { setSubVelocityContext(velocityContext, genTable); } + addJavaFieldUpperCase(genTable.getColumns()); //javaField首字母大写 return velocityContext; } - public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) - { + public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) { String options = genTable.getOptions(); JSONObject paramsObj = JSON.parseObject(options); String parentMenuId = getParentMenuId(paramsObj); context.put("parentMenuId", parentMenuId); } - public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) - { + public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) { String options = genTable.getOptions(); JSONObject paramsObj = JSON.parseObject(options); - String treeCode = getTreecode(paramsObj); + String treeCode = getTreeCode(paramsObj); String treeParentCode = getTreeParentCode(paramsObj); String treeName = getTreeName(paramsObj); @@ -93,18 +95,15 @@ public class VelocityUtils context.put("treeParentCode", treeParentCode); context.put("treeName", treeName); context.put("expandColumn", getExpandColumn(genTable)); - if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) - { + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE)); } - if (paramsObj.containsKey(GenConstants.TREE_NAME)) - { + if (paramsObj.containsKey(GenConstants.TREE_NAME)) { context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME)); } } - public static void setSubVelocityContext(VelocityContext context, GenTable genTable) - { + public static void setSubVelocityContext(VelocityContext context, GenTable genTable) { GenTable subTable = genTable.getSubTable(); String subTableName = genTable.getSubTableName(); String subTableFkName = genTable.getSubTableFkName(); @@ -123,36 +122,40 @@ public class VelocityUtils /** * 获取模板信息 - * @param tplCategory 生成的模板 - * @param tplWebType 前端类型 + * + * @param tplCategory 生成的模板 + * @param tplWebType 前端类型 + * @param tplBackendType 后端类型 * @return 模板列表 */ - public static List getTemplateList(String tplCategory, String tplWebType) - { + public static List getTemplateList(String tplCategory, String tplWebType, String tplBackendType) { + List templates = new ArrayList<>(); + //后端 + if ("mybatis-dynamic".equals(tplBackendType)) { + //MyBatis Dynamic SQL + templates.add("vm/java/controller-dynamic.java.vm"); + templates.add("vm/java/serviceImpl-dynamic.java.vm"); + } else { + //常规 + templates.add("vm/java/domain.java.vm"); + templates.add("vm/java/controller.java.vm"); + templates.add("vm/java/serviceImpl.java.vm"); + templates.add("vm/java/mapper.java.vm"); + templates.add("vm/xml/mapper.xml.vm"); + } + templates.add("vm/java/service.java.vm"); + templates.add("vm/sql/sql.vm"); + //前端 + templates.add("vm/js/api.js.vm"); String useWebType = "vm/vue"; - if ("element-plus".equals(tplWebType)) - { + if ("element-plus".equals(tplWebType)) { useWebType = "vm/vue/v3"; } - List templates = new ArrayList(); - templates.add("vm/java/domain.java.vm"); - templates.add("vm/java/mapper.java.vm"); - templates.add("vm/java/service.java.vm"); - templates.add("vm/java/serviceImpl.java.vm"); - templates.add("vm/java/controller.java.vm"); - templates.add("vm/xml/mapper.xml.vm"); - templates.add("vm/sql/sql.vm"); - templates.add("vm/js/api.js.vm"); - if (GenConstants.TPL_CRUD.equals(tplCategory)) - { + if (GenConstants.TPL_CRUD.equals(tplCategory)) { templates.add(useWebType + "/index.vue.vm"); - } - else if (GenConstants.TPL_TREE.equals(tplCategory)) - { + } else if (GenConstants.TPL_TREE.equals(tplCategory)) { templates.add(useWebType + "/index-tree.vue.vm"); - } - else if (GenConstants.TPL_SUB.equals(tplCategory)) - { + } else if (GenConstants.TPL_SUB.equals(tplCategory)) { templates.add(useWebType + "/index.vue.vm"); templates.add("vm/java/sub-domain.java.vm"); } @@ -162,8 +165,7 @@ public class VelocityUtils /** * 获取文件名 */ - public static String getFileName(String template, GenTable genTable) - { + public static String getFileName(String template, GenTable genTable) { // 文件名称 String fileName = ""; // 包路径 @@ -179,48 +181,32 @@ public class VelocityUtils String mybatisPath = MYBATIS_PATH + "/" + moduleName; String vuePath = "vue"; - if (template.contains("domain.java.vm")) - { + if (template.contains("domain.java.vm")) { fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); } - if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) - { + if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) { fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); - } - else if (template.contains("mapper.java.vm")) - { + } else if (template.contains("mapper.java.vm")) { fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); - } - else if (template.contains("service.java.vm")) - { + } else if (template.contains("service.java.vm")) { fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); - } - else if (template.contains("serviceImpl.java.vm")) - { + } else if (template.contains("serviceImpl.java.vm")) { fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); - } - else if (template.contains("controller.java.vm")) - { + } else if (template.contains("serviceImpl-dynamic.java.vm")) { + fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); + } else if (template.contains("controller.java.vm")) { fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); - } - else if (template.contains("mapper.xml.vm")) - { + } else if (template.contains("controller-dynamic.java.vm")) { + fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); + } else if (template.contains("mapper.xml.vm")) { fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); - } - else if (template.contains("sql.vm")) - { + } else if (template.contains("sql.vm")) { fileName = businessName + "Menu.sql"; - } - else if (template.contains("api.js.vm")) - { + } else if (template.contains("api.js.vm")) { fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); - } - else if (template.contains("index.vue.vm")) - { + } else if (template.contains("index.vue.vm")) { fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); - } - else if (template.contains("index-tree.vue.vm")) - { + } else if (template.contains("index-tree.vue.vm")) { fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); } return fileName; @@ -232,36 +218,29 @@ public class VelocityUtils * @param packageName 包名称 * @return 包前缀名称 */ - public static String getPackagePrefix(String packageName) - { + public static String getPackagePrefix(String packageName) { int lastIndex = packageName.lastIndexOf("."); return StringUtils.substring(packageName, 0, lastIndex); } /** * 根据列类型获取导入包 - * + * * @param genTable 业务表对象 * @return 返回需要导入的包列表 */ - public static HashSet getImportList(GenTable genTable) - { + public static HashSet getImportList(GenTable genTable) { List columns = genTable.getColumns(); GenTable subGenTable = genTable.getSubTable(); HashSet importList = new HashSet(); - if (StringUtils.isNotNull(subGenTable)) - { + if (StringUtils.isNotNull(subGenTable)) { importList.add("java.util.List"); } - for (GenTableColumn column : columns) - { - if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) - { + for (GenTableColumn column : columns) { + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) { importList.add("java.util.Date"); importList.add("com.fasterxml.jackson.annotation.JsonFormat"); - } - else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) - { + } else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) { importList.add("java.math.BigDecimal"); } } @@ -270,17 +249,15 @@ public class VelocityUtils /** * 根据列类型获取字典组 - * + * * @param genTable 业务表对象 * @return 返回字典组 */ - public static String getDicts(GenTable genTable) - { + public static String getDicts(GenTable genTable) { List columns = genTable.getColumns(); Set dicts = new HashSet(); addDicts(dicts, columns); - if (StringUtils.isNotNull(genTable.getSubTable())) - { + if (StringUtils.isNotNull(genTable.getSubTable())) { List subColumns = genTable.getSubTable().getColumns(); addDicts(dicts, subColumns); } @@ -289,18 +266,15 @@ public class VelocityUtils /** * 添加字典列表 - * - * @param dicts 字典列表 + * + * @param dicts 字典列表 * @param columns 列集合 */ - public static void addDicts(Set dicts, List columns) - { - for (GenTableColumn column : columns) - { + public static void addDicts(Set dicts, List columns) { + for (GenTableColumn column : columns) { if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( column.getHtmlType(), - new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) - { + new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX})) { dicts.add("'" + column.getDictType() + "'"); } } @@ -309,12 +283,11 @@ public class VelocityUtils /** * 获取权限前缀 * - * @param moduleName 模块名称 + * @param moduleName 模块名称 * @param businessName 业务名称 * @return 返回权限前缀 */ - public static String getPermissionPrefix(String moduleName, String businessName) - { + public static String getPermissionPrefix(String moduleName, String businessName) { return StringUtils.format("{}:{}", moduleName, businessName); } @@ -324,11 +297,9 @@ public class VelocityUtils * @param paramsObj 生成其他选项 * @return 上级菜单ID字段 */ - public static String getParentMenuId(JSONObject paramsObj) - { + public static String getParentMenuId(JSONObject paramsObj) { if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) - && StringUtils.isNotEmpty(paramsObj.getString(GenConstants.PARENT_MENU_ID))) - { + && StringUtils.isNotEmpty(paramsObj.getString(GenConstants.PARENT_MENU_ID))) { return paramsObj.getString(GenConstants.PARENT_MENU_ID); } return DEFAULT_PARENT_MENU_ID; @@ -340,10 +311,8 @@ public class VelocityUtils * @param paramsObj 生成其他选项 * @return 树编码 */ - public static String getTreecode(JSONObject paramsObj) - { - if (paramsObj.containsKey(GenConstants.TREE_CODE)) - { + public static String getTreeCode(JSONObject paramsObj) { + if (paramsObj.containsKey(GenConstants.TREE_CODE)) { return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); } return StringUtils.EMPTY; @@ -355,10 +324,8 @@ public class VelocityUtils * @param paramsObj 生成其他选项 * @return 树父编码 */ - public static String getTreeParentCode(JSONObject paramsObj) - { - if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) - { + public static String getTreeParentCode(JSONObject paramsObj) { + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); } return StringUtils.EMPTY; @@ -370,10 +337,8 @@ public class VelocityUtils * @param paramsObj 生成其他选项 * @return 树名称 */ - public static String getTreeName(JSONObject paramsObj) - { - if (paramsObj.containsKey(GenConstants.TREE_NAME)) - { + public static String getTreeName(JSONObject paramsObj) { + if (paramsObj.containsKey(GenConstants.TREE_NAME)) { return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); } return StringUtils.EMPTY; @@ -385,24 +350,26 @@ public class VelocityUtils * @param genTable 业务表对象 * @return 展开按钮列序号 */ - public static int getExpandColumn(GenTable genTable) - { + public static int getExpandColumn(GenTable genTable) { String options = genTable.getOptions(); JSONObject paramsObj = JSON.parseObject(options); String treeName = paramsObj.getString(GenConstants.TREE_NAME); int num = 0; - for (GenTableColumn column : genTable.getColumns()) - { - if (column.isList()) - { + for (GenTableColumn column : genTable.getColumns()) { + if (column.isList()) { num++; String columnName = column.getColumnName(); - if (columnName.equals(treeName)) - { + if (columnName.equals(treeName)) { break; } } } return num; } + + public static void addJavaFieldUpperCase(List columns) { + for (GenTableColumn column : columns) { + column.setJavaFieldUpper(column.getCapJavaField()); + } + } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml index 69ac4054b..8264b4d06 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml @@ -1,177 +1,304 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, tpl_web_type, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table - - - - + + + + AND lower(table_name) like lower(concat('%', #{tableName}, '%')) + + + AND lower(table_comment) like lower(concat('%', #{tableComment}, '%')) + + + AND date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + + + AND date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + insert into gen_table ( - table_name, - table_comment, - class_name, - tpl_category, - tpl_web_type, - package_name, - module_name, - business_name, - function_name, - function_author, - gen_type, - gen_path, - remark, - create_by, - create_time - )values( - #{tableName}, - #{tableComment}, - #{className}, - #{tplCategory}, - #{tplWebType}, - #{packageName}, - #{moduleName}, - #{businessName}, - #{functionName}, - #{functionAuthor}, - #{genType}, - #{genPath}, - #{remark}, - #{createBy}, - sysdate() - ) + table_name, + table_comment, + class_name, + tpl_category, + tpl_web_type, + tpl_backend_type, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + remark, + create_by, + create_time + )values( + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{tplWebType}, + #{tplBackendType}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{genType}, + #{genPath}, + #{remark}, + #{createBy}, + sysdate() + ) - - + + update gen_table table_name = #{tableName}, @@ -184,6 +311,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" gen_path = #{genPath}, tpl_category = #{tplCategory}, tpl_web_type = #{tplWebType}, + tpl_backend_type = #{tplBackendType}, package_name = #{packageName}, module_name = #{moduleName}, business_name = #{businessName}, @@ -195,9 +323,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where table_id = #{tableId} - + - delete from gen_table where table_id in + delete from gen_table where table_id in #{tableId} diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller-dynamic.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller-dynamic.java.vm new file mode 100644 index 000000000..5c142aace --- /dev/null +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller-dynamic.java.vm @@ -0,0 +1,116 @@ +package ${packageName}.controller; + +import java.util.List; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +#if($table.crud || $table.sub) +import com.ruoyi.common.core.web.page.TableDataInfo; +#elseif($table.tree) +#end + +/** + * ${functionName}Controller + * + * @author ${author} + * created on ${datetime} + */ +@RestController +@RequestMapping("/${businessName}") +public class ${ClassName}Controller extends BaseController +{ + @Autowired + private I${ClassName}Service ${className}Service; + + /** + * 查询${functionName}列表 + */ + @RequiresPermissions("${permissionPrefix}:list") + @GetMapping("/list") +#if($table.crud || $table.sub) + public TableDataInfo list(${ClassName} ${className}) + { + startPage(); + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return getDataTable(list); + } +#elseif($table.tree) + public AjaxResult list(${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return success(list); + } +#end + + //TODO 如果要启用导出功能,需要在domain实体类的字段上添加注解:@com.ruoyi.common.core.annotation.Excel(name = "字段名") + /* + * 导出${functionName}列表 + */ +// @RequiresPermissions("${permissionPrefix}:export") +// @Log(title = "${functionName}", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(HttpServletResponse response, ${ClassName} ${className}) +// { +// List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); +// ExcelUtil<${ClassName}> util = new ExcelUtil<>(${ClassName}.class); +// util.exportExcel(response, list, "${functionName}数据"); +// } + + /** + * 获取${functionName}详细信息 + */ + @RequiresPermissions("${permissionPrefix}:query") + @GetMapping(value = "/{${pkColumn.javaField}}") + public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) + { + return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField})); + } + + /** + * 新增${functionName} + */ + @RequiresPermissions("${permissionPrefix}:add") + @Log(title = "${functionName}", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.insert${ClassName}(${className})); + } + + /** + * 修改${functionName} + */ + @RequiresPermissions("${permissionPrefix}:edit") + @Log(title = "${functionName}", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.update${ClassName}(${className})); + } + + /** + * 删除${functionName} + */ + @RequiresPermissions("${permissionPrefix}:remove") + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @DeleteMapping("/{${pkColumn.javaField}s}") + public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) + { + return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s)); + } +} diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm index 363979bdb..d3688cf61 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm @@ -1,8 +1,7 @@ package ${packageName}.controller; import java.util.List; -import java.io.IOException; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -29,7 +28,7 @@ import com.ruoyi.common.core.web.page.TableDataInfo; * ${functionName}Controller * * @author ${author} - * @date ${datetime} + * created on ${datetime} */ @RestController @RequestMapping("/${businessName}") @@ -67,7 +66,7 @@ public class ${ClassName}Controller extends BaseController public void export(HttpServletResponse response, ${ClassName} ${className}) { List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); - ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + ExcelUtil<${ClassName}> util = new ExcelUtil<>(${ClassName}.class); util.exportExcel(response, list, "${functionName}数据"); } @@ -108,7 +107,7 @@ public class ${ClassName}Controller extends BaseController */ @RequiresPermissions("${permissionPrefix}:remove") @Log(title = "${functionName}", businessType = BusinessType.DELETE) - @DeleteMapping("/{${pkColumn.javaField}s}") + @DeleteMapping("/{${pkColumn.javaField}s}") public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) { return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s)); diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm index 3e6be024e..5529f5f55 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm @@ -16,7 +16,7 @@ import com.ruoyi.common.core.web.domain.TreeEntity; * ${functionName}对象 ${tableName} * * @author ${author} - * @date ${datetime} + * created on ${datetime} */ #if($table.crud || $table.sub) #set($Entity="BaseEntity") diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm index 6f0317905..ce579b740 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm @@ -10,7 +10,7 @@ import ${packageName}.domain.${subClassName}; * ${functionName}Mapper接口 * * @author ${author} - * @date ${datetime} + * created on ${datetime} */ public interface ${ClassName}Mapper { @@ -20,7 +20,7 @@ public interface ${ClassName}Mapper * @param ${pkColumn.javaField} ${functionName}主键 * @return ${functionName} */ - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); /** * 查询${functionName}列表 @@ -28,7 +28,7 @@ public interface ${ClassName}Mapper * @param ${className} ${functionName} * @return ${functionName}集合 */ - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + List<${ClassName}> select${ClassName}List(${ClassName} ${className}); /** * 新增${functionName} @@ -36,7 +36,7 @@ public interface ${ClassName}Mapper * @param ${className} ${functionName} * @return 结果 */ - public int insert${ClassName}(${ClassName} ${className}); + int insert${ClassName}(${ClassName} ${className}); /** * 修改${functionName} @@ -44,7 +44,7 @@ public interface ${ClassName}Mapper * @param ${className} ${functionName} * @return 结果 */ - public int update${ClassName}(${ClassName} ${className}); + int update${ClassName}(${ClassName} ${className}); /** * 删除${functionName} @@ -52,7 +52,7 @@ public interface ${ClassName}Mapper * @param ${pkColumn.javaField} ${functionName}主键 * @return 结果 */ - public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); /** * 批量删除${functionName} @@ -60,7 +60,7 @@ public interface ${ClassName}Mapper * @param ${pkColumn.javaField}s 需要删除的数据主键集合 * @return 结果 */ - public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); #if($table.sub) /** @@ -69,7 +69,7 @@ public interface ${ClassName}Mapper * @param ${pkColumn.javaField}s 需要删除的数据主键集合 * @return 结果 */ - public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); /** * 批量新增${subTable.functionName} @@ -77,7 +77,7 @@ public interface ${ClassName}Mapper * @param ${subclassName}List ${subTable.functionName}列表 * @return 结果 */ - public int batch${subClassName}(List<${subClassName}> ${subclassName}List); + int batch${subClassName}(List<${subClassName}> ${subclassName}List); /** diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm index 250f68c8c..1ef50ad4f 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm @@ -1,61 +1,61 @@ package ${packageName}.service; import java.util.List; -import ${packageName}.domain.${ClassName}; + +import ${packageName}.domain .${ClassName}; /** * ${functionName}Service接口 - * + * * @author ${author} - * @date ${datetime} + * created on ${datetime} */ -public interface I${ClassName}Service -{ +public interface I${ClassName}Service { /** * 查询${functionName} - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return ${functionName} */ - public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); /** * 查询${functionName}列表 - * + * * @param ${className} ${functionName} * @return ${functionName}集合 */ - public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + List<${ClassName}> select${ClassName}List(${ClassName} ${className}); /** * 新增${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ - public int insert${ClassName}(${ClassName} ${className}); + int insert${ClassName}(${ClassName} ${className}); /** * 修改${functionName} - * + * * @param ${className} ${functionName} * @return 结果 */ - public int update${ClassName}(${ClassName} ${className}); + int update${ClassName}(${ClassName} ${className}); /** * 批量删除${functionName} - * + * * @param ${pkColumn.javaField}s 需要删除的${functionName}主键集合 * @return 结果 */ - public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); /** * 删除${functionName}信息 - * + * * @param ${pkColumn.javaField} ${functionName}主键 * @return 结果 */ - public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); } diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl-dynamic.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl-dynamic.java.vm new file mode 100644 index 000000000..e318b179e --- /dev/null +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl-dynamic.java.vm @@ -0,0 +1,217 @@ +package ${packageName}.service.impl; + +import java.util.List; +#foreach ($column in $columns) +#if($column.javaField == 'createTime' || $column.javaField == 'updateTime') +import com.ruoyi.common.core.utils.DateUtils; +#break +#end +#end +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.mybatis.dynamic.sql.where.condition.IsEqualTo; +import org.mybatis.dynamic.sql.where.condition.IsIn; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.SqlBuilder; +#if($table.sub) +import java.util.ArrayList; +import com.ruoyi.common.core.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import ${packageName}.domain.${subClassName}; +#end +import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.domain.${ClassName}; +import ${packageName}.mapper.${ClassName}DynamicSqlSupport; +import ${packageName}.service.I${ClassName}Service; + +import java.util.List; +import java.util.Optional; + +/** + * ${functionName}Service业务层处理 + * + * @author ${author} + * created on ${datetime} + */ +@Service +public class ${ClassName}ServiceImpl implements I${ClassName}Service +{ + @Autowired + private ${ClassName}Mapper ${className}Mapper; + + /** + * 查询${functionName} + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return ${functionName} + */ + @Override + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { + Optional<${ClassName}> result = ${className}Mapper.selectOne(dsl -> dsl.where(${ClassName}DynamicSqlSupport.${pkColumn.javaField}, SqlBuilder.isEqualTo(${pkColumn.javaField}))); + return result.orElse(null); + } + + /** + * 查询${functionName}列表 + * + * @param ${className} ${functionName} + * @return ${functionName} + */ + @Override + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) + { +## return ${className}Mapper.select(SelectDSLCompleter.allRows()); //查询全部字段 +#set ($whereFuncName = "where") +#set ($conditionFuncName = "isEqualToWhenPresent") + return unitInfoMapper.select(dsl -> dsl +#foreach ($column in $columns) + ## where语句是where还是and开头 + #if (!$foreach.first) + #set ($whereFuncName = "and") + #end + ## 查询条件 + #if ($columne.queryType == "EQ") + #set ($conditionFuncName = "isEqualToWhenPresent") + #elseif ($columne.queryType == "NE") + #set ($conditionFuncName = "isNotEqualToWhenPresent") + #elseif ($columne.queryType == "GT") + #set ($conditionFuncName = "isGreaterThanWhenPresent") + #elseif ($columne.queryType == "GTE") + #set ($conditionFuncName = "isGreaterThanOrEqualToWhenPresent") + #elseif ($columne.queryType == "LT") + #set ($conditionFuncName = "isLessThanWhenPresent") + #elseif ($columne.queryType == "LTE") + #set ($conditionFuncName = "isLessThanOrEqualToWhenPresent") + #elseif ($columne.queryType == "LIKE") + #set ($conditionFuncName = "isLikeWhenPresent") + #elseif ($columne.queryType == "BETWEEN") + #set ($conditionFuncName = "isBetweenWhenPresent") +## #elseif ($columne.queryType == "IN") +## #set ($conditionFuncName = "isIn") +## #elseif ($columne.queryType == "NI") +## #set ($conditionFuncName = "isNotIn") + #end + ## 对like条件的特殊处理 + #if ($columne.queryType == "LIKE") + .${whereFuncName}(${ClassName}DynamicSqlSupport.$column.javaField, SqlBuilder.${conditionFuncName}(${className}.get${column.javaFieldUpper}() == null ? null : "%" + ${className}.get${column.javaFieldUpper}() + "%") + #else + .${whereFuncName}(${ClassName}DynamicSqlSupport.$column.javaField, SqlBuilder.${conditionFuncName}(${className}.get${column.javaFieldUpper}())) + #end +#end + ); + } + + /** + * 新增${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int insert${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setCreateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + int rows = ${className}Mapper.insertSelective(${className}); + insert${subClassName}(${className}); + return rows; +#else + return ${className}Mapper.insertSelective(${className}); +#end + } + + /** + * 修改${functionName} + * + * @param ${className} ${functionName} + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int update${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'updateTime') + ${className}.setUpdateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); + insert${subClassName}(${className}); +#end + return ${className}Mapper.updateByPrimaryKeySelective(${className}); + } + + /** + * 批量删除${functionName} + * + * @param ${pkColumn.javaField}s 需要删除的${functionName}主键 + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); +#end + + return ${className}Mapper.delete(dsl -> dsl.where(${ClassName}DynamicSqlSupport.${pkColumn.javaField}, SqlBuilder.isIn(${pkColumn.javaField}s))); + } + + /** + * 删除${functionName}信息 + * + * @param ${pkColumn.javaField} ${functionName}主键 + * @return 结果 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField}); +#end + return ${className}Mapper.delete(dsl -> dsl.where(${ClassName}DynamicSqlSupport.${pkColumn.javaField}, SqlBuilder.isEqualTo(${pkColumn.javaField}))); + } +#if($table.sub) + + /** + * 新增${subTable.functionName}信息 + * + * @param ${className} ${functionName}对象 + */ + public void insert${subClassName}(${ClassName} ${className}) + { + List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); + ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); + if (StringUtils.isNotNull(${subclassName}List)) + { + List<${subClassName}> list = new ArrayList<${subClassName}>(); + for (${subClassName} ${subclassName} : ${subclassName}List) + { + ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); + list.add(${subclassName}); + } + if (!list.isEmpty()) + { + ${className}Mapper.batch${subClassName}(list); + } + } + } +#end +} diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm index 9cd8534bd..5ec047909 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm @@ -23,7 +23,7 @@ import ${packageName}.service.I${ClassName}Service; * ${functionName}Service业务层处理 * * @author ${author} - * @date ${datetime} + * created on ${datetime} */ @Service public class ${ClassName}ServiceImpl implements I${ClassName}Service @@ -159,7 +159,7 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); list.add(${subclassName}); } - if (list.size() > 0) + if (!list.isEmpty()) { ${className}Mapper.batch${subClassName}(list); } diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/sub-domain.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/sub-domain.java.vm index 2e039ff62..7a0e935c2 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/sub-domain.java.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/sub-domain.java.vm @@ -12,7 +12,7 @@ import com.ruoyi.common.core.web.domain.BaseEntity; * ${subTable.functionName}对象 ${subTableName} * * @author ${author} - * @date ${datetime} + * created on ${datetime} */ public class ${subClassName} extends BaseEntity { diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/com/ruoyi/system/mapper/SysConfigMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/com/ruoyi/system/mapper/SysConfigMapper.xml index 3cd93f885..6865ddf9c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/com/ruoyi/system/mapper/SysConfigMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/com/ruoyi/system/mapper/SysConfigMapper.xml @@ -1,96 +1,105 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - + + + + + + + + + + + - + - select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark - from sys_config + select config_id, + config_name, + config_key, + config_value, + config_type, + create_by, + create_time, + update_by, + update_time, + remark + from sys_config - + - - - - and config_id = #{configId} - - - and config_key = #{configKey} - - - - - - + - - - - AND config_name like concat('%', #{configName}, '%') - - - AND config_type = #{configType} - - - AND config_key like concat('%', #{configKey}, '%') - - - and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') - - - and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') - - + + AND config_name like concat('%', #{configName}, '%') + + + AND config_type = #{configType} + + + AND config_key like concat('%', #{configKey}, '%') + + + and date_format(create_time,'%y%m%d') >= date_format(#{params.beginTime},'%y%m%d') + + + and date_format(create_time,'%y%m%d') <= date_format(#{params.endTime},'%y%m%d') + + - + - + - - + + insert into sys_config ( - config_name, - config_key, - config_value, - config_type, - create_by, - remark, - create_time + config_name, + config_key, + config_value, + config_type, + create_by, + remark, + create_time )values( - #{configName}, - #{configKey}, - #{configValue}, - #{configType}, - #{createBy}, - #{remark}, - sysdate() - ) + #{configName}, + #{configKey}, + #{configValue}, + #{configType}, + #{createBy}, + #{remark}, + sysdate() + ) - - - update sys_config + + + update sys_config config_name = #{configName}, config_key = #{configKey}, @@ -98,20 +107,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" config_type = #{configType}, update_by = #{updateBy}, remark = #{remark}, - update_time = sysdate() + update_time = sysdate() where config_id = #{configId} - + - delete from sys_config where config_id = #{configId} + delete + from sys_config + where config_id = #{configId} - + - delete from sys_config where config_id in + delete from sys_config where config_id in - #{configId} + #{configId} - + \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/controller/UnitInfoController.java b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/controller/UnitInfoController.java new file mode 100644 index 000000000..778edd09c --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/controller/UnitInfoController.java @@ -0,0 +1,97 @@ +package com.ruoyi.wms.controller; + +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.core.web.domain.AjaxResult; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.wms.domain.UnitInfo; +import com.ruoyi.wms.service.IUnitInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 单位信息管理Controller + * + * @author ruoyi + * created on 2024-02-02 + */ +@RestController +@RequestMapping("/UnitInfo") +public class UnitInfoController extends BaseController +{ + @Autowired + private IUnitInfoService unitInfoService; + + /** + * 查询单位信息管理列表 + */ + @RequiresPermissions("wms:UnitInfo:list") + @GetMapping("/list") + public TableDataInfo list(UnitInfo unitInfo) + { + startPage(); + List list = unitInfoService.selectUnitInfoList(unitInfo); + return getDataTable(list); + } + + //TODO 如果要启用导出功能,需要在domain实体类的字段上添加注解:@com.ruoyi.common.core.annotation.Excel(name = "字段名") + /* + * 导出单位信息管理列表 + */ +// @RequiresPermissions("wms:UnitInfo:export") +// @Log(title = "单位信息管理", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(HttpServletResponse response, UnitInfo unitInfo) +// { +// List list = unitInfoService.selectUnitInfoList(unitInfo); +// ExcelUtil util = new ExcelUtil<>(UnitInfo.class); +// util.exportExcel(response, list, "单位信息管理数据"); +// } + + /** + * 获取单位信息管理详细信息 + */ + @RequiresPermissions("wms:UnitInfo:query") + @GetMapping(value = "/{orgCd}") + public AjaxResult getInfo(@PathVariable("orgCd") String orgCd) + { + return success(unitInfoService.selectUnitInfoByOrgCd(orgCd)); + } + + /** + * 新增单位信息管理 + */ + @RequiresPermissions("wms:UnitInfo:add") + @Log(title = "单位信息管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody UnitInfo unitInfo) + { + return toAjax(unitInfoService.insertUnitInfo(unitInfo)); + } + + /** + * 修改单位信息管理 + */ + @RequiresPermissions("wms:UnitInfo:edit") + @Log(title = "单位信息管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody UnitInfo unitInfo) + { + return toAjax(unitInfoService.updateUnitInfo(unitInfo)); + } + + /** + * 删除单位信息管理 + */ + @RequiresPermissions("wms:UnitInfo:remove") + @Log(title = "单位信息管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{orgCds}") + public AjaxResult remove(@PathVariable String[] orgCds) + { + return toAjax(unitInfoService.deleteUnitInfoByOrgCds(orgCds)); + } +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/mapper/UnitInfoMapper.java b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/mapper/UnitInfoMapper.java index 334055f52..670106c21 100644 --- a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/mapper/UnitInfoMapper.java +++ b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/mapper/UnitInfoMapper.java @@ -1,18 +1,8 @@ package com.ruoyi.wms.mapper; -import static com.ruoyi.wms.mapper.UnitInfoDynamicSqlSupport.*; -import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; - import com.ruoyi.wms.domain.UnitInfo; import jakarta.annotation.Generated; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Result; -import org.apache.ibatis.annotations.ResultMap; -import org.apache.ibatis.annotations.Results; -import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.*; import org.apache.ibatis.type.JdbcType; import org.mybatis.dynamic.sql.BasicColumn; import org.mybatis.dynamic.sql.delete.DeleteDSLCompleter; @@ -23,11 +13,14 @@ import org.mybatis.dynamic.sql.update.UpdateDSL; import org.mybatis.dynamic.sql.update.UpdateDSLCompleter; import org.mybatis.dynamic.sql.update.UpdateModel; import org.mybatis.dynamic.sql.util.SqlProviderAdapter; -import org.mybatis.dynamic.sql.util.mybatis3.CommonCountMapper; -import org.mybatis.dynamic.sql.util.mybatis3.CommonDeleteMapper; -import org.mybatis.dynamic.sql.util.mybatis3.CommonInsertMapper; -import org.mybatis.dynamic.sql.util.mybatis3.CommonUpdateMapper; -import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils; +import org.mybatis.dynamic.sql.util.mybatis3.*; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +import static com.ruoyi.wms.mapper.UnitInfoDynamicSqlSupport.*; +import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; @Mapper public interface UnitInfoMapper extends CommonCountMapper, CommonDeleteMapper, CommonInsertMapper, CommonUpdateMapper { diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/IUnitInfoService.java b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/IUnitInfoService.java new file mode 100644 index 000000000..f27d99cbd --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/IUnitInfoService.java @@ -0,0 +1,61 @@ +package com.ruoyi.wms.service; + +import com.ruoyi.wms.domain.UnitInfo; + +import java.util.List; + +/** + * 单位信息管理Service接口 + * + * @author ruoyi + * created on 2024-02-02 + */ +public interface IUnitInfoService { + /** + * 查询单位信息管理 + * + * @param orgCd 单位信息管理主键 + * @return 单位信息管理 + */ + UnitInfo selectUnitInfoByOrgCd(String orgCd); + + /** + * 查询单位信息管理列表 + * + * @param unitInfo 单位信息管理 + * @return 单位信息管理集合 + */ + List selectUnitInfoList(UnitInfo unitInfo); + + /** + * 新增单位信息管理 + * + * @param unitInfo 单位信息管理 + * @return 结果 + */ + int insertUnitInfo(UnitInfo unitInfo); + + /** + * 修改单位信息管理 + * + * @param unitInfo 单位信息管理 + * @return 结果 + */ + int updateUnitInfo(UnitInfo unitInfo); + + /** + * 批量删除单位信息管理 + * + * @param orgCds 需要删除的单位信息管理主键集合 + * @return 结果 + */ + int deleteUnitInfoByOrgCds(String[] orgCds); + + /** + * 删除单位信息管理信息 + * + * @param orgCd 单位信息管理主键 + * @return 结果 + */ + int deleteUnitInfoByOrgCd(String orgCd); +} diff --git a/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/UnitInfoServiceImpl.java b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/UnitInfoServiceImpl.java new file mode 100644 index 000000000..fcf64ee74 --- /dev/null +++ b/ruoyi-modules/ruoyi-wms/src/main/java/com/ruoyi/wms/service/impl/UnitInfoServiceImpl.java @@ -0,0 +1,113 @@ +package com.ruoyi.wms.service.impl; + +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.wms.domain.UnitInfo; +import com.ruoyi.wms.mapper.UnitInfoDynamicSqlSupport; +import com.ruoyi.wms.mapper.UnitInfoMapper; +import com.ruoyi.wms.service.IUnitInfoService; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * 单位信息管理Service业务层处理 + * + * @author ruoyi + * created on 2024-02-02 + */ +@Service +public class UnitInfoServiceImpl implements IUnitInfoService { + @Autowired + private UnitInfoMapper unitInfoMapper; + + /** + * 查询单位信息管理 + * + * @param orgCd 单位信息管理主键 + * @return 单位信息管理 + */ + @Override + public UnitInfo selectUnitInfoByOrgCd(String orgCd) { + Optional result = unitInfoMapper.selectOne(dsl -> dsl.where(UnitInfoDynamicSqlSupport.orgCd, SqlBuilder.isEqualTo(orgCd))); + return result.orElse(null); + } + + /** + * 查询单位信息管理列表 + * + * @param unitInfo 单位信息管理 + * @return 单位信息管理 + */ + @Override + public List selectUnitInfoList(UnitInfo unitInfo) { + return unitInfoMapper.select(dsl -> dsl + .where(UnitInfoDynamicSqlSupport.orgCd, SqlBuilder.isEqualToWhenPresent(unitInfo.getOrgCd())) + .and(UnitInfoDynamicSqlSupport.unit, SqlBuilder.isEqualToWhenPresent(unitInfo.getUnit())) + .and(UnitInfoDynamicSqlSupport.unitName, SqlBuilder.isEqualToWhenPresent(unitInfo.getUnitName())) + .and(UnitInfoDynamicSqlSupport.unitConvRate, SqlBuilder.isEqualToWhenPresent(unitInfo.getUnitConvRate())) + .and(UnitInfoDynamicSqlSupport.srcConvUnit, SqlBuilder.isEqualToWhenPresent(unitInfo.getSrcConvUnit())) + .and(UnitInfoDynamicSqlSupport.remark1, SqlBuilder.isEqualToWhenPresent(unitInfo.getRemark1())) + .and(UnitInfoDynamicSqlSupport.remark2, SqlBuilder.isEqualToWhenPresent(unitInfo.getRemark2())) + .and(UnitInfoDynamicSqlSupport.remark3, SqlBuilder.isEqualToWhenPresent(unitInfo.getRemark3())) + .and(UnitInfoDynamicSqlSupport.remark4, SqlBuilder.isEqualToWhenPresent(unitInfo.getRemark4())) + .and(UnitInfoDynamicSqlSupport.remark5, SqlBuilder.isEqualToWhenPresent(unitInfo.getRemark5())) + .and(UnitInfoDynamicSqlSupport.updateCount, SqlBuilder.isEqualToWhenPresent(unitInfo.getUpdateCount())) + .and(UnitInfoDynamicSqlSupport.deleteFlag, SqlBuilder.isEqualToWhenPresent(unitInfo.getDeleteFlag())) + .and(UnitInfoDynamicSqlSupport.createBy, SqlBuilder.isEqualToWhenPresent(unitInfo.getCreateBy())) + .and(UnitInfoDynamicSqlSupport.createTime, SqlBuilder.isEqualToWhenPresent(unitInfo.getCreateTime())) + .and(UnitInfoDynamicSqlSupport.updateBy, SqlBuilder.isEqualToWhenPresent(unitInfo.getUpdateBy())) + .and(UnitInfoDynamicSqlSupport.updateTime, SqlBuilder.isEqualToWhenPresent(unitInfo.getUpdateTime())) + .and(UnitInfoDynamicSqlSupport.remark, SqlBuilder.isEqualToWhenPresent(unitInfo.getRemark())) + ); + } + + /** + * 新增单位信息管理 + * + * @param unitInfo 单位信息管理 + * @return 结果 + */ + @Override + public int insertUnitInfo(UnitInfo unitInfo) { + unitInfo.setCreateTime(DateUtils.getNowDate()); + return unitInfoMapper.insertSelective(unitInfo); + } + + /** + * 修改单位信息管理 + * + * @param unitInfo 单位信息管理 + * @return 结果 + */ + @Override + public int updateUnitInfo(UnitInfo unitInfo) { + unitInfo.setUpdateTime(DateUtils.getNowDate()); + return unitInfoMapper.updateByPrimaryKeySelective(unitInfo); + } + + /** + * 批量删除单位信息管理 + * + * @param orgCds 需要删除的单位信息管理主键 + * @return 结果 + */ + @Override + public int deleteUnitInfoByOrgCds(String[] orgCds) { + + return unitInfoMapper.delete(dsl -> dsl.where(UnitInfoDynamicSqlSupport.orgCd, SqlBuilder.isIn(orgCds))); + } + + /** + * 删除单位信息管理信息 + * + * @param orgCd 单位信息管理主键 + * @return 结果 + */ + @Override + public int deleteUnitInfoByOrgCd(String orgCd) { + return unitInfoMapper.delete(dsl -> dsl.where(UnitInfoDynamicSqlSupport.orgCd, SqlBuilder.isEqualTo(orgCd))); + } +} diff --git a/ruoyi-ui/src/api/tool/gen.js b/ruoyi-ui/src/api/tool/gen.js index 7524a0abe..f78556163 100644 --- a/ruoyi-ui/src/api/tool/gen.js +++ b/ruoyi-ui/src/api/tool/gen.js @@ -70,7 +70,7 @@ export function genCode(tableName) { // 同步数据库 export function synchDb(tableName) { return request({ - url: '/code/gen/synchDb/' + tableName, + url: '/code/gen/syncDb/' + tableName, method: 'get' }) } diff --git a/ruoyi-ui/src/views/tool/build/index.vue b/ruoyi-ui/src/views/tool/build/index.vue index c3543a92d..726d0c7ad 100644 --- a/ruoyi-ui/src/views/tool/build/index.vue +++ b/ruoyi-ui/src/views/tool/build/index.vue @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/ruoyi-ui/src/views/tool/gen/genInfoForm.vue b/ruoyi-ui/src/views/tool/gen/genInfoForm.vue index 1856eaee8..c8c73eb1b 100644 --- a/ruoyi-ui/src/views/tool/gen/genInfoForm.vue +++ b/ruoyi-ui/src/views/tool/gen/genInfoForm.vue @@ -22,6 +22,16 @@ + + + + + + + + + +