diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java index ae56a54a..295ac56d 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteFileService.java @@ -7,17 +7,16 @@ import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; -import com.ruoyi.system.api.domain.SysFile; +import com.ruoyi.system.api.domain.SysFileInfo; import com.ruoyi.system.api.factory.RemoteFileFallbackFactory; /** * 文件服务 - * + * * @author ruoyi */ @FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteFileFallbackFactory.class) -public interface RemoteFileService -{ +public interface RemoteFileService { /** * 上传文件 * @@ -25,5 +24,5 @@ public interface RemoteFileService * @return 结果 */ @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public R upload(@RequestPart(value = "file") MultipartFile file); + R upload(@RequestPart(value = "file") MultipartFile file); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysFile.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysFile.java deleted file mode 100644 index 440df49d..00000000 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysFile.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ruoyi.system.api.domain; - -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; - -/** - * 文件信息 - * - * @author ruoyi - */ -public class SysFile -{ - /** - * 文件名称 - */ - private String name; - - /** - * 文件地址 - */ - private String url; - - public String getName() - { - return name; - } - - public void setName(String name) - { - this.name = name; - } - - public String getUrl() - { - return url; - } - - public void setUrl(String url) - { - this.url = url; - } - - @Override - public String toString() { - return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) - .append("name", getName()) - .append("url", getUrl()) - .toString(); - } -} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysFileInfo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysFileInfo.java new file mode 100644 index 00000000..91ecf116 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysFileInfo.java @@ -0,0 +1,34 @@ +package com.ruoyi.system.api.domain; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 文件信息 + * + * @author ruoyi + */ +@Data +public class SysFileInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 文件ID + */ + private String fileId; + + /** + * 文件名称 + */ + private String name; + + /** + * 文件地址 + */ + private String url; + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java index bc3b6fff..2e2bc093 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteFileFallbackFactory.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.RemoteFileService; -import com.ruoyi.system.api.domain.SysFile; +import com.ruoyi.system.api.domain.SysFileInfo; /** * 文件服务降级处理 @@ -26,7 +26,7 @@ public class RemoteFileFallbackFactory implements FallbackFactory upload(MultipartFile file) + public R upload(MultipartFile file) { return R.fail("上传文件失败:" + throwable.getMessage()); } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java index e2df52b6..83da4caa 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java @@ -2,11 +2,10 @@ package com.ruoyi.common.core.constant; /** * 缓存常量信息 - * + * * @author ruoyi */ -public class CacheConstants -{ +public class CacheConstants { /** * 缓存有效期,默认720(分钟) */ diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java index 7450399b..c0b6bc5d 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java @@ -1,48 +1,44 @@ package com.ruoyi.common.redis.configure; -import java.nio.charset.Charset; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.SerializationException; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONReader; import com.alibaba.fastjson2.JSONWriter; import com.alibaba.fastjson2.filter.Filter; import com.ruoyi.common.core.constant.Constants; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; /** * Redis使用FastJson序列化 - * + * * @author ruoyi */ -public class FastJson2JsonRedisSerializer implements RedisSerializer -{ - public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); +public class FastJson2JsonRedisSerializer implements RedisSerializer { + public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR); - private Class clazz; + private final Class clazz; - public FastJson2JsonRedisSerializer(Class clazz) - { + public FastJson2JsonRedisSerializer(Class clazz) { super(); this.clazz = clazz; } @Override - public byte[] serialize(T t) throws SerializationException - { - if (t == null) - { + public byte[] serialize(T t) throws SerializationException { + if (t == null) { return new byte[0]; } return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); } @Override - public T deserialize(byte[] bytes) throws SerializationException - { - if (bytes == null || bytes.length <= 0) - { + public T deserialize(byte[] bytes) throws SerializationException { + if (bytes == null || bytes.length <= 0) { return null; } String str = new String(bytes, DEFAULT_CHARSET); diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java index 42c5d173..4d611ffc 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java @@ -12,18 +12,16 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; /** * redis配置 - * + * * @author ruoyi */ @Configuration @EnableCaching @AutoConfigureBefore(RedisAutoConfiguration.class) -public class RedisConfig implements CachingConfigurer -{ +public class RedisConfig implements CachingConfigurer { @Bean - @SuppressWarnings(value = { "unchecked", "rawtypes" }) - public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) - { + @SuppressWarnings(value = {"unchecked", "rawtypes"}) + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java index 67ac6e30..a76fe75e 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java @@ -1,11 +1,5 @@ package com.ruoyi.common.redis.service; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.BoundSetOperations; import org.springframework.data.redis.core.HashOperations; @@ -13,64 +7,62 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; +import java.util.*; +import java.util.concurrent.TimeUnit; + /** * spring redis 工具类 - * + * * @author ruoyi **/ -@SuppressWarnings(value = { "unchecked", "rawtypes" }) +@SuppressWarnings(value = {"unchecked", "rawtypes"}) @Component -public class RedisService -{ +public class RedisService { @Autowired public RedisTemplate redisTemplate; /** * 缓存基本的对象,Integer、String、实体类等 * - * @param key 缓存的键值 + * @param key 缓存的键值 * @param value 缓存的值 */ - public void setCacheObject(final String key, final T value) - { + public void setCacheObject(final String key, final T value) { redisTemplate.opsForValue().set(key, value); } /** * 缓存基本的对象,Integer、String、实体类等 * - * @param key 缓存的键值 - * @param value 缓存的值 - * @param timeout 时间 + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 * @param timeUnit 时间颗粒度 */ - public void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) - { + public void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) { redisTemplate.opsForValue().set(key, value, timeout, timeUnit); } /** * 设置有效时间 * - * @param key Redis键 + * @param key Redis键 * @param timeout 超时时间 * @return true=设置成功;false=设置失败 */ - public boolean expire(final String key, final long timeout) - { + public boolean expire(final String key, final long timeout) { return expire(key, timeout, TimeUnit.SECONDS); } /** * 设置有效时间 * - * @param key Redis键 + * @param key Redis键 * @param timeout 超时时间 - * @param unit 时间单位 + * @param unit 时间单位 * @return true=设置成功;false=设置失败 */ - public boolean expire(final String key, final long timeout, final TimeUnit unit) - { + public boolean expire(final String key, final long timeout, final TimeUnit unit) { return redisTemplate.expire(key, timeout, unit); } @@ -80,8 +72,7 @@ public class RedisService * @param key Redis键 * @return 有效时间 */ - public long getExpire(final String key) - { + public long getExpire(final String key) { return redisTemplate.getExpire(key); } @@ -91,8 +82,7 @@ public class RedisService * @param key 键 * @return true 存在 false不存在 */ - public Boolean hasKey(String key) - { + public Boolean hasKey(String key) { return redisTemplate.hasKey(key); } @@ -102,19 +92,15 @@ public class RedisService * @param key 缓存键值 * @return 缓存键值对应的数据 */ - public T getCacheObject(final String key) - { + public T getCacheObject(final String key) { ValueOperations operation = redisTemplate.opsForValue(); return operation.get(key); } /** * 删除单个对象 - * - * @param key */ - public boolean deleteObject(final String key) - { + public boolean deleteObject(final String key) { return redisTemplate.delete(key); } @@ -122,22 +108,19 @@ public class RedisService * 删除集合对象 * * @param collection 多个对象 - * @return */ - public boolean deleteObject(final Collection collection) - { + public boolean deleteObject(final Collection collection) { return redisTemplate.delete(collection) > 0; } /** * 缓存List数据 * - * @param key 缓存的键值 + * @param key 缓存的键值 * @param dataList 待缓存的List数据 * @return 缓存的对象 */ - public long setCacheList(final String key, final List dataList) - { + public long setCacheList(final String key, final List dataList) { Long count = redisTemplate.opsForList().rightPushAll(key, dataList); return count == null ? 0 : count; } @@ -148,48 +131,36 @@ public class RedisService * @param key 缓存的键值 * @return 缓存键值对应的数据 */ - public List getCacheList(final String key) - { + public List getCacheList(final String key) { return redisTemplate.opsForList().range(key, 0, -1); } /** * 缓存Set * - * @param key 缓存键值 + * @param key 缓存键值 * @param dataSet 缓存的数据 * @return 缓存数据的对象 */ - public BoundSetOperations setCacheSet(final String key, final Set dataSet) - { + public BoundSetOperations setCacheSet(final String key, final Set dataSet) { BoundSetOperations setOperation = redisTemplate.boundSetOps(key); - Iterator it = dataSet.iterator(); - while (it.hasNext()) - { - setOperation.add(it.next()); + for (T t : dataSet) { + setOperation.add(t); } return setOperation; } /** * 获得缓存的set - * - * @param key - * @return */ - public Set getCacheSet(final String key) - { + public Set getCacheSet(final String key) { return redisTemplate.opsForSet().members(key); } /** * 缓存Map - * - * @param key - * @param dataMap */ - public void setCacheMap(final String key, final Map dataMap) - { + public void setCacheMap(final String key, final Map dataMap) { if (dataMap != null) { redisTemplate.opsForHash().putAll(key, dataMap); } @@ -197,36 +168,30 @@ public class RedisService /** * 获得缓存的Map - * - * @param key - * @return */ - public Map getCacheMap(final String key) - { + public Map getCacheMap(final String key) { return redisTemplate.opsForHash().entries(key); } /** * 往Hash中存入数据 * - * @param key Redis键 - * @param hKey Hash键 + * @param key Redis键 + * @param hKey Hash键 * @param value 值 */ - public void setCacheMapValue(final String key, final String hKey, final T value) - { + public void setCacheMapValue(final String key, final String hKey, final T value) { redisTemplate.opsForHash().put(key, hKey, value); } /** * 获取Hash中的数据 * - * @param key Redis键 + * @param key Redis键 * @param hKey Hash键 * @return Hash中的对象 */ - public T getCacheMapValue(final String key, final String hKey) - { + public T getCacheMapValue(final String key, final String hKey) { HashOperations opsForHash = redisTemplate.opsForHash(); return opsForHash.get(key, hKey); } @@ -234,24 +199,22 @@ public class RedisService /** * 获取多个Hash中的数据 * - * @param key Redis键 + * @param key Redis键 * @param hKeys Hash键集合 * @return Hash对象集合 */ - public List getMultiCacheMapValue(final String key, final Collection hKeys) - { + public List getMultiCacheMapValue(final String key, final Collection hKeys) { return redisTemplate.opsForHash().multiGet(key, hKeys); } /** * 删除Hash中的某条数据 * - * @param key Redis键 + * @param key Redis键 * @param hKey Hash键 * @return 是否成功 */ - public boolean deleteCacheMapValue(final String key, final String hKey) - { + public boolean deleteCacheMapValue(final String key, final String hKey) { return redisTemplate.opsForHash().delete(key, hKey) > 0; } @@ -261,8 +224,7 @@ public class RedisService * @param pattern 字符串前缀 * @return 对象列表 */ - public Collection keys(final String pattern) - { + public Collection keys(final String pattern) { return redisTemplate.keys(pattern); } } diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqRule.java b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqRule.java index 2e5b7e7c..0d9d7032 100644 --- a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqRule.java +++ b/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysSeqRule.java @@ -1,5 +1,6 @@ package com.ruoyi.common.services.domain; +import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.web.domain.BaseEntity; import java.io.Serial; @@ -25,46 +26,55 @@ public class SysSeqRule extends BaseEntity implements Serializable { /** * 序列号识别码 */ + @Excel(name = "序列号识别码") private String seqDistCd; /** * 规则名称 */ + @Excel(name = "规则名称") private String ruleName; /** * 前缀 */ + @Excel(name = "前缀") private String prefix; /** * 分隔符1 */ + @Excel(name = "分隔符1") private String separator1; /** * 日期格式 */ + @Excel(name = "日期格式") private String dateFormat; /** * 序列号数字部分的最小位数,不足补0 */ + @Excel(name = "最小位数") private Integer minDigits; /** * 分隔符2 */ + @Excel(name = "分隔符2") private String separator2; /** * 生成器名称(或类全名),自定义的生成器可忽略前面的规则自行生成 */ + @Excel(name = "生成器名") private String generatorName; /** * 是否启用 */ + @Excel(name = "是否启用") private Integer enableFlag; /** @@ -95,6 +105,10 @@ public class SysSeqRule extends BaseEntity implements Serializable { @Serial private static final long serialVersionUID = 1L; + public boolean isEnabled() { + return enableFlag != null && enableFlag == 1; + } + public Long getRuleId() { return ruleId; } diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/constants/FileStorageType.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/constants/FileStorageType.java similarity index 91% rename from ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/constants/FileStorageType.java rename to ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/constants/FileStorageType.java index 8e3f2490..2df8fa0d 100644 --- a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/constants/FileStorageType.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/constants/FileStorageType.java @@ -1,4 +1,4 @@ -package com.ruoyi.common.services.constants; +package com.ruoyi.file.constants; import com.ruoyi.common.core.constant.IEnum; import lombok.Getter; diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileCRUDController.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileCRUDController.java new file mode 100644 index 00000000..9c0f7d79 --- /dev/null +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileCRUDController.java @@ -0,0 +1,58 @@ +package com.ruoyi.file.controller; + +import com.ruoyi.common.core.utils.poi.ExcelUtil; +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.security.annotation.RequiresPermissions; +import com.ruoyi.file.domain.SysFile; +import com.ruoyi.file.service.ISysFileCRUDService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 文件存储记录Controller + * + * @author ryas + * created on 2024-02-19 + */ +@RestController +@RequestMapping("/FileRecord") +public class SysFileCRUDController extends BaseController { + @Autowired + private ISysFileCRUDService crudService; + + /** + * 查询文件存储记录列表 + */ + @RequiresPermissions("file:FileRecord:list") + @GetMapping("/list") + public TableDataInfo list(SysFile sysFile) { + startPage(); + List list = crudService.selectSysFileList(sysFile); + return getDataTable(list); + } + + /** + * 导出文件存储记录列表 + */ + @RequiresPermissions("file:FileRecord:export") + @PostMapping("/export") + public void export(HttpServletResponse response, SysFile sysFile) { + List list = crudService.selectSysFileList(sysFile); + ExcelUtil util = new ExcelUtil<>(SysFile.class); + util.exportExcel(response, list, "文件存储记录数据"); + } + + /** + * 获取文件存储记录详细信息 + */ + @RequiresPermissions("file:FileRecord:query") + @GetMapping(value = "/{fileId}") + public AjaxResult getInfo(@PathVariable("fileId") String fileId) { + return success(crudService.selectSysFileByFileId(fileId)); + } +} diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java index 0fd6fc96..6cbd05e0 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java @@ -1,5 +1,6 @@ package com.ruoyi.file.controller; +import com.ruoyi.file.domain.FileSaveResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -9,7 +10,7 @@ import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.file.FileUtils; import com.ruoyi.file.service.ISysFileService; -import com.ruoyi.system.api.domain.SysFile; +import com.ruoyi.system.api.domain.SysFileInfo; /** * 文件请求处理 @@ -28,14 +29,17 @@ public class SysFileController { * 文件上传请求 */ @PostMapping("upload") - public R upload(MultipartFile file) { + public R upload(MultipartFile file) { try { // 上传并返回访问地址 - String url = sysFileService.uploadFile(file); - SysFile sysFile = new SysFile(); - sysFile.setName(FileUtils.getName(url)); - sysFile.setUrl(url); - return R.ok(sysFile); + FileSaveResult saveResult = sysFileService.uploadFile(file); + String requestUrl = saveResult.getRequestUrl(); + // 构建返回结果 + SysFileInfo responseInfo = new SysFileInfo(); + responseInfo.setFileId(saveResult.getFileId()); + responseInfo.setName(FileUtils.getName(requestUrl)); + responseInfo.setUrl(requestUrl); + return R.ok(responseInfo); } catch (Exception e) { log.error("上传文件失败", e); return R.fail(e.getMessage()); diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveForm.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveForm.java new file mode 100644 index 00000000..f2cb5ae1 --- /dev/null +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveForm.java @@ -0,0 +1,43 @@ +package com.ruoyi.file.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.web.multipart.MultipartFile; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Alan Scipio + * created on 2024/2/19 + */ +@NoArgsConstructor +@AllArgsConstructor +@Data +public class FileSaveForm implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 域名或本机访问地址 + */ + public String domain; + + /** + * 文件存储基础目录 + */ + private String localBaseDir; + + /** + * 资源映射路径 前缀 + */ + public String localFilePrefix; + + /** + * 上传的文件 + */ + private MultipartFile file; + +} diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveRecord.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveRecord.java deleted file mode 100644 index 7c9af383..00000000 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveRecord.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ruoyi.file.domain; - -import com.ruoyi.file.utils.FileUploadResult; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - -/** - * @author Alan Scipio - * created on 2024/2/19 - */ -@Data -public class FileSaveRecord implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - private String requestUrl; - - private FileUploadResult uploadResult; - -} diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveResult.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveResult.java new file mode 100644 index 00000000..144407d6 --- /dev/null +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileSaveResult.java @@ -0,0 +1,51 @@ +package com.ruoyi.file.domain; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author Alan Scipio + * created on 2024/2/19 + */ +@Data +public class FileSaveResult implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + private boolean success; + + private String message; + + /** + * 文件请求地址 + */ + private String requestUrl; + + /** + * 文件上传结果 + */ + private FileUploadResult uploadResult; + + public String getFileId() { + return uploadResult == null ? "" : uploadResult.getFileId(); + } + + public static FileSaveResult success(String requestUrl, FileUploadResult uploadResult) { + FileSaveResult result = new FileSaveResult(); + result.setSuccess(true); + result.setRequestUrl(requestUrl); + result.setUploadResult(uploadResult); + return result; + } + + public static FileSaveResult fail(String message) { + FileSaveResult result = new FileSaveResult(); + result.setSuccess(false); + result.setMessage(message); + return result; + } + +} diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadResult.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileUploadResult.java similarity index 56% rename from ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadResult.java rename to ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileUploadResult.java index 1f22b7ce..48b558e5 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadResult.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/FileUploadResult.java @@ -1,4 +1,4 @@ -package com.ruoyi.file.utils; +package com.ruoyi.file.domain; import lombok.Data; @@ -15,18 +15,39 @@ public class FileUploadResult implements Serializable { @Serial private static final long serialVersionUID = 1L; + /** + * 文件ID + */ private String fileId; + /** + * 存储的文件名 + */ private String savedFileName; + /** + * 存储的文件名(带年月日的相对父路径,例如/2024/02/19/xxx.png) + */ private String savedPathFileName; + /** + * 原始文件名 + */ private String originalFilename; + /** + * 文件扩展名 + */ private String extension; + /** + * 文件大小 + */ private Long fileSize; + /** + * 文件存储的绝对路径 + */ private String savedPath; } diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysFile.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/SysFile.java similarity index 84% rename from ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysFile.java rename to ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/SysFile.java index 30b42f6e..8f39ca1a 100644 --- a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/domain/SysFile.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/domain/SysFile.java @@ -1,5 +1,6 @@ -package com.ruoyi.common.services.domain; +package com.ruoyi.file.domain; +import com.ruoyi.common.core.annotation.Excel; import com.ruoyi.common.core.web.domain.BaseEntity; import java.io.Serial; @@ -18,43 +19,51 @@ import java.io.Serializable; */ public class SysFile extends BaseEntity implements Serializable { /** - * 文件ID + * 文件ID */ + @Excel(name = "文件ID") private String fileId; /** - * 保存的文件名称 + * 保存的文件名称 */ + @Excel(name = "保存文件名") private String savedName; /** - * 原始文件名称 + * 原始文件名称 */ + @Excel(name = "原始文件名") private String originalName; /** - * 文件路径 + * 文件路径 */ + @Excel(name = "文件路径") private String filePath; /** - * 文件后缀 + * 文件后缀 */ + @Excel(name = "文件后缀") private String extension; /** - * 存储方式 + * 存储方式 */ + @Excel(name = "存储方式") private String storageType; /** - * 获取文件的URL + * 获取文件的URL */ + @Excel(name = "获取文件的URL") private String requestUrl; /** - * 文件大小(Byte) + * 文件大小(Byte) */ + @Excel(name = "文件大小(Byte)") private Long fileSize; @Serial diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysFileDynamicSqlSupport.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/mapper/SysFileDynamicSqlSupport.java similarity index 98% rename from ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysFileDynamicSqlSupport.java rename to ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/mapper/SysFileDynamicSqlSupport.java index a19a7c14..78deb568 100644 --- a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysFileDynamicSqlSupport.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/mapper/SysFileDynamicSqlSupport.java @@ -1,4 +1,4 @@ -package com.ruoyi.common.services.mapper; +package com.ruoyi.file.mapper; import org.mybatis.dynamic.sql.AliasableSqlTable; import org.mybatis.dynamic.sql.SqlColumn; diff --git a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysFileMapper.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/mapper/SysFileMapper.java similarity index 98% rename from ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysFileMapper.java rename to ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/mapper/SysFileMapper.java index 553f0913..bb75f0ac 100644 --- a/ruoyi-common/ruoyi-common-services/src/main/java/com/ruoyi/common/services/mapper/SysFileMapper.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/mapper/SysFileMapper.java @@ -1,7 +1,7 @@ -package com.ruoyi.common.services.mapper; +package com.ruoyi.file.mapper; import com.ruoyi.common.security.utils.SecurityUtilsExt; -import com.ruoyi.common.services.domain.SysFile; +import com.ruoyi.file.domain.SysFile; import org.apache.ibatis.annotations.*; import org.apache.ibatis.type.JdbcType; import org.mybatis.dynamic.sql.BasicColumn; @@ -19,7 +19,7 @@ import java.util.Collection; import java.util.List; import java.util.Optional; -import static com.ruoyi.common.services.mapper.SysFileDynamicSqlSupport.*; +import static com.ruoyi.file.mapper.SysFileDynamicSqlSupport.*; import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; @Mapper diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java index 20a22891..55c399c9 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java @@ -1,15 +1,10 @@ package com.ruoyi.file.service; -import java.io.InputStream; - -import com.alibaba.nacos.common.utils.IoUtils; -import org.springframework.beans.factory.annotation.Autowired; +import com.github.tobato.fastdfs.service.FastFileStorageClient; +import com.ruoyi.file.domain.FileSaveResult; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import com.github.tobato.fastdfs.domain.fdfs.StorePath; -import com.github.tobato.fastdfs.service.FastFileStorageClient; -import com.ruoyi.common.core.utils.file.FileTypeUtils; /** * FastDFS 文件存储 @@ -34,13 +29,12 @@ public class FastDfsSysFileServiceImpl implements ISysFileService { * @return 访问地址 */ @Override - public String uploadFile(MultipartFile file) throws Exception { + public FileSaveResult uploadFile(MultipartFile file) throws Exception { // InputStream inputStream = file.getInputStream(); // StorePath storePath = storageClient.uploadFile(inputStream, file.getSize(), // FileTypeUtils.getExtension(file), null); // IoUtils.closeQuietly(inputStream); // return domain + "/" + storePath.getFullPath(); - - return "notImplementedYet"; + return FileSaveResult.fail("Not implemented yet!"); } } diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileCRUDService.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileCRUDService.java new file mode 100644 index 00000000..6bad3d5e --- /dev/null +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileCRUDService.java @@ -0,0 +1,61 @@ +package com.ruoyi.file.service; + +import com.ruoyi.file.domain.SysFile; + +import java.util.List; + +/** + * 文件存储记录Service接口 + * + * @author ryas + * created on 2024-02-19 + */ +public interface ISysFileCRUDService { + /** + * 查询文件存储记录 + * + * @param fileId 文件存储记录主键 + * @return 文件存储记录 + */ + SysFile selectSysFileByFileId(String fileId); + + /** + * 查询文件存储记录列表 + * + * @param sysFile 文件存储记录 + * @return 文件存储记录集合 + */ + List selectSysFileList(SysFile sysFile); + + /** + * 新增文件存储记录 + * + * @param sysFile 文件存储记录 + * @return 结果 + */ + int insertSysFile(SysFile sysFile); + + /** + * 修改文件存储记录 + * + * @param sysFile 文件存储记录 + * @return 结果 + */ + int updateSysFile(SysFile sysFile); + + /** + * 批量删除文件存储记录 + * + * @param fileIds 需要删除的文件存储记录主键集合 + * @return 结果 + */ + int deleteSysFileByFileIds(String[] fileIds); + + /** + * 删除文件存储记录信息 + * + * @param fileId 文件存储记录主键 + * @return 结果 + */ + int deleteSysFileByFileId(String fileId); +} diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java index 910d604f..9c3c363b 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java @@ -1,5 +1,6 @@ package com.ruoyi.file.service; +import com.ruoyi.file.domain.FileSaveResult; import org.springframework.web.multipart.MultipartFile; /** @@ -12,8 +13,8 @@ public interface ISysFileService { * 文件上传接口 * * @param file 上传的文件 - * @return 访问地址 + * @return 保存结果 */ - String uploadFile(MultipartFile file) throws Exception; + FileSaveResult uploadFile(MultipartFile file) throws Exception; } diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java index 2493b26d..0870344f 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java @@ -1,9 +1,10 @@ package com.ruoyi.file.service; -import com.ruoyi.common.services.constants.FileStorageType; -import com.ruoyi.common.services.domain.SysFile; -import com.ruoyi.common.services.mapper.SysFileMapper; -import com.ruoyi.file.utils.FileUploadResult; +import com.ruoyi.file.constants.FileStorageType; +import com.ruoyi.file.domain.FileSaveResult; +import com.ruoyi.file.domain.FileUploadResult; +import com.ruoyi.file.domain.SysFile; +import com.ruoyi.file.mapper.SysFileMapper; import com.ruoyi.file.utils.FileUploadUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -49,18 +50,19 @@ public class LocalSysFileServiceImpl implements ISysFileService { */ @Transactional @Override - public String uploadFile(MultipartFile file) throws Exception { + public FileSaveResult uploadFile(MultipartFile file) throws Exception { // 保存文件到本地 FileUploadResult uploadResult = FileUploadUtils.upload(localFilePath, file); String savedPathFileName = uploadResult.getSavedPathFileName(); - String url = domain + localFilePrefix + savedPathFileName; + String requestUrl = domain + localFilePrefix + savedPathFileName; // 保存文件记录 - saveFileRecord(url, uploadResult); + SysFile record = getSysFile(uploadResult, requestUrl); + sysFileMapper.insertSelective(record); // 返回访问地址 - return url; + return FileSaveResult.success(requestUrl, uploadResult); } - private void saveFileRecord(String requestUrl, FileUploadResult uploadResult) { + private SysFile getSysFile(FileUploadResult uploadResult, String requestUrl) { SysFile record = new SysFile(); record.setFileId(uploadResult.getFileId()); // 文件ID record.setSavedName(uploadResult.getSavedFileName()); // 保存的文件名 @@ -70,6 +72,6 @@ public class LocalSysFileServiceImpl implements ISysFileService { record.setStorageType(FileStorageType.LOCAL.name()); // 存储类型:本地文件存储 record.setRequestUrl(requestUrl); // 获取文件的URL record.setFileSize(uploadResult.getFileSize()); // 文件大小(Byte) - sysFileMapper.insertSelective(record); + return record; } } diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java index 08710828..2be338e6 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java @@ -1,8 +1,9 @@ package com.ruoyi.file.service; import com.alibaba.nacos.common.utils.IoUtils; -import com.ruoyi.file.config.MinioConfig; +import com.ruoyi.file.domain.FileSaveResult; import com.ruoyi.file.utils.FileUploadUtils; +import com.ruoyi.file.config.MinioConfig; import io.minio.MinioClient; import io.minio.PutObjectArgs; import org.springframework.beans.factory.annotation.Autowired; @@ -12,7 +13,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; /** - * TODO 未完成,还需要保存文件记录 + * TODO 未完成,还需要改造:保存文件记录 * Minio 文件存储 * * @author ruoyi @@ -32,7 +33,7 @@ public class MinioSysFileServiceImpl implements ISysFileService { * @return 访问地址 */ @Override - public String uploadFile(MultipartFile file) throws Exception { + public FileSaveResult uploadFile(MultipartFile file) throws Exception { String fileName = FileUploadUtils.extractFilename(file, null); InputStream inputStream = file.getInputStream(); PutObjectArgs args = PutObjectArgs.builder() @@ -43,6 +44,7 @@ public class MinioSysFileServiceImpl implements ISysFileService { .build(); client.putObject(args); IoUtils.closeQuietly(inputStream); - return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName; + String requestUrl = minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName; + return FileSaveResult.success(requestUrl, null); } } diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/SysFileCRUDServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/SysFileCRUDServiceImpl.java new file mode 100644 index 00000000..3ca6c126 --- /dev/null +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/SysFileCRUDServiceImpl.java @@ -0,0 +1,116 @@ +package com.ruoyi.file.service; + +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.file.domain.SysFile; +import com.ruoyi.file.mapper.SysFileDynamicSqlSupport; +import com.ruoyi.file.mapper.SysFileMapper; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Optional; + +/** + * 文件存储记录Service业务层处理 + * + * @author ryas + * created on 2024-02-19 + */ +@Service +public class SysFileCRUDServiceImpl implements ISysFileCRUDService { + @Autowired + private SysFileMapper sysFileMapper; + + /** + * 查询文件存储记录 + * + * @param fileId 文件存储记录主键 + * @return 文件存储记录 + */ + @Override + public SysFile selectSysFileByFileId(String fileId) { + Optional result = sysFileMapper.selectOne(dsl -> dsl.where(SysFileDynamicSqlSupport.fileId, SqlBuilder.isEqualTo(fileId))); + return result.orElse(null); + } + + /** + * 查询文件存储记录列表 + * + * @param sysFile 文件存储记录 + * @return 文件存储记录 + */ + @Override + public List selectSysFileList(SysFile sysFile) { + if (StringUtils.isNotBlank(sysFile.getSavedName()) || StringUtils.isNotBlank(sysFile.getFileId())) { + //条件查询 + SelectStatementProvider provider = SqlBuilder.select(SysFileMapper.selectList) + .from(SysFileDynamicSqlSupport.sysFile) + .where(SysFileDynamicSqlSupport.fileId, SqlBuilder.isEqualToWhenPresent(sysFile.getFileId())) + .and(SysFileDynamicSqlSupport.savedName, SqlBuilder.isLikeWhenPresent(sysFile.getSavedName() == null ? null : "%" + sysFile.getSavedName() + "%")) + .build() + .render(RenderingStrategies.MYBATIS3); + return sysFileMapper.selectMany(provider); + } else { + //全部查询 + return sysFileMapper.select(SelectDSLCompleter.allRows()); + } + } + + /** + * 新增文件存储记录 + * + * @param sysFile 文件存储记录 + * @return 结果 + */ + @Transactional + @Override + public int insertSysFile(SysFile sysFile) { + return sysFileMapper.insertSelective(sysFile); + } + + /** + * 修改文件存储记录 + * + * @param sysFile 文件存储记录 + * @return 结果 + */ + @Transactional + @Override + public int updateSysFile(SysFile sysFile) { + return sysFileMapper.updateByPrimaryKeySelective(sysFile); + } + + /** + * 批量删除文件存储记录 + * + * @param fileIds 需要删除的文件存储记录主键 + * @return 结果 + */ + @Transactional + @Override + public int deleteSysFileByFileIds(String[] fileIds) { + DeleteStatementProvider provider = SqlBuilder.deleteFrom(SysFileDynamicSqlSupport.sysFile) + .where(SysFileDynamicSqlSupport.fileId, SqlBuilder.isIn(fileIds)) + .build() + .render(RenderingStrategies.MYBATIS3); + return sysFileMapper.delete(provider); + } + + /** + * 删除文件存储记录信息 + * + * @param fileId 文件存储记录主键 + * @return 结果 + */ + @Transactional + @Override + public int deleteSysFileByFileId(String fileId) { + return sysFileMapper.deleteByPrimaryKey(fileId); + } +} diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java index 17d47470..8ace92fd 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java @@ -1,169 +1,170 @@ -package com.ruoyi.file.utils; - -import com.ruoyi.common.core.exception.file.FileException; -import com.ruoyi.common.core.exception.file.FileNameLengthLimitExceededException; -import com.ruoyi.common.core.exception.file.FileSizeLimitExceededException; -import com.ruoyi.common.core.exception.file.InvalidExtensionException; -import com.ruoyi.common.core.utils.DateUtils; -import com.ruoyi.common.core.utils.StringUtils; -import com.ruoyi.common.core.utils.file.FileTypeUtils; -import com.ruoyi.common.core.utils.file.MimeTypeUtils; -import com.ruoyi.common.core.utils.uuid.Seq; -import org.springframework.web.multipart.MultipartFile; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Paths; -import java.util.Objects; - -/** - * 文件上传工具类 - * - * @author ruoyi - */ -public class FileUploadUtils { - /** - * 默认大小 100M - */ - public static final long DEFAULT_MAX_SIZE = 100 * 1024 * 1024; - - /** - * 默认的文件名最大长度 100 - */ - public static final int DEFAULT_FILE_NAME_LENGTH = 100; - - /** - * 根据文件路径上传 - * - * @param baseDir 相对应用的基目录 - * @param file 上传的文件 - * @return 文件上传结果 - */ - public static FileUploadResult upload(String baseDir, MultipartFile file) throws IOException { - try { - return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); - } catch (FileException fe) { - throw new IOException(fe.getDefaultMessage(), fe); - } catch (Exception e) { - throw new IOException(e.getMessage(), e); - } - } - - /** - * 文件上传 - * - * @param baseDir 相对应用的基目录 - * @param file 上传的文件 - * @param allowedExtension 上传文件类型 - * @return 返回上传成功的文件名 - * @throws FileSizeLimitExceededException 如果超出最大大小 - * @throws FileNameLengthLimitExceededException 文件名太长 - * @throws IOException 比如读写文件出错时 - * @throws InvalidExtensionException 文件校验异常 - */ - public static FileUploadResult upload(String baseDir, MultipartFile file, String[] allowedExtension) - throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, InvalidExtensionException { - int fileNameLength = Objects.requireNonNull(file.getOriginalFilename()).length(); - if (fileNameLength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { - throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); - } - - FileUploadResult result = new FileUploadResult(); - - assertAllowed(file, allowedExtension, result); - - String fileName = extractFilename(file, result); - - String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath(); - file.transferTo(Paths.get(absPath)); - String savedPathFileName = getPathFileName(fileName); - - result.setSavedPathFileName(savedPathFileName); - result.setSavedPath(absPath); - return result; - } - - /** - * 编码文件名,最终结果举例: .../2024/02/19/20240219154651A001.jpg - */ - public static String extractFilename(MultipartFile file, FileUploadResult result) { - String fileId = Seq.getId(Seq.uploadSeqType); - String savedFileName = StringUtils.format("{}.{}", fileId, FileTypeUtils.getExtension(file)); - if (result != null) { - result.setFileId(fileId); - result.setSavedFileName(savedFileName); - } - return StringUtils.format("{}/{}", DateUtils.datePath(), savedFileName); - } - - @SuppressWarnings("ResultOfMethodCallIgnored") - private static File getAbsoluteFile(String uploadDir, String fileName) { - File desc = new File(uploadDir + File.separator + fileName); - - if (!desc.exists()) { - if (!desc.getParentFile().exists()) { - desc.getParentFile().mkdirs(); - } - } - return desc.isAbsolute() ? desc : desc.getAbsoluteFile(); - } - - private static String getPathFileName(String fileName) { - return "/" + fileName; - } - - /** - * 文件大小校验 - * - * @param file 上传的文件 - * @param result 文件上传结果 - * @throws FileSizeLimitExceededException 如果超出最大大小 - * @throws InvalidExtensionException 文件校验异常 - */ - public static void assertAllowed(MultipartFile file, String[] allowedExtension, FileUploadResult result) - throws FileSizeLimitExceededException, InvalidExtensionException { - long size = file.getSize(); - if (size > DEFAULT_MAX_SIZE) { - throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); - } - result.setFileSize(size); - - String fileName = file.getOriginalFilename(); - String extension = FileTypeUtils.getExtension(file); - result.setExtension(extension); - result.setOriginalFilename(fileName); - if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) { - if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) { - throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, - fileName); - } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) { - throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, - fileName); - } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) { - throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, - fileName); - } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) { - throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, - fileName); - } else { - throw new InvalidExtensionException(allowedExtension, extension, fileName); - } - } - } - - /** - * 判断MIME类型是否是允许的MIME类型 - * - * @param extension 上传文件类型 - * @param allowedExtension 允许上传文件类型 - * @return true/false - */ - public static boolean isAllowedExtension(String extension, String[] allowedExtension) { - for (String str : allowedExtension) { - if (str.equalsIgnoreCase(extension)) { - return true; - } - } - return false; - } +package com.ruoyi.file.utils; + +import com.ruoyi.common.core.exception.file.FileException; +import com.ruoyi.common.core.exception.file.FileNameLengthLimitExceededException; +import com.ruoyi.common.core.exception.file.FileSizeLimitExceededException; +import com.ruoyi.common.core.exception.file.InvalidExtensionException; +import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.file.FileTypeUtils; +import com.ruoyi.common.core.utils.file.MimeTypeUtils; +import com.ruoyi.common.core.utils.uuid.Seq; +import com.ruoyi.file.domain.FileUploadResult; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Objects; + +/** + * 文件上传工具类 + * + * @author ruoyi + */ +public class FileUploadUtils { + /** + * 默认大小 100M + */ + public static final long DEFAULT_MAX_SIZE = 100 * 1024 * 1024; + + /** + * 默认的文件名最大长度 100 + */ + public static final int DEFAULT_FILE_NAME_LENGTH = 100; + + /** + * 根据文件路径上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @return 文件上传结果 + */ + public static FileUploadResult upload(String baseDir, MultipartFile file) throws IOException { + try { + return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } catch (FileException fe) { + throw new IOException(fe.getDefaultMessage(), fe); + } catch (Exception e) { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 文件上传 + * + * @param baseDir 相对应用的基目录 + * @param file 上传的文件 + * @param allowedExtension 上传文件类型 + * @return 返回上传成功的文件名 + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws FileNameLengthLimitExceededException 文件名太长 + * @throws IOException 比如读写文件出错时 + * @throws InvalidExtensionException 文件校验异常 + */ + public static FileUploadResult upload(String baseDir, MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, InvalidExtensionException { + int fileNameLength = Objects.requireNonNull(file.getOriginalFilename()).length(); + if (fileNameLength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + + FileUploadResult result = new FileUploadResult(); + + assertAllowed(file, allowedExtension, result); + + String fileName = extractFilename(file, result); + + String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath(); + file.transferTo(Paths.get(absPath)); + String savedPathFileName = getPathFileName(fileName); + + result.setSavedPathFileName(savedPathFileName); + result.setSavedPath(absPath); + return result; + } + + /** + * 编码文件名,最终结果举例: .../2024/02/19/20240219154651A001.jpg + */ + public static String extractFilename(MultipartFile file, FileUploadResult result) { + String fileId = Seq.getId(Seq.uploadSeqType); + String savedFileName = StringUtils.format("{}.{}", fileId, FileTypeUtils.getExtension(file)); + if (result != null) { + result.setFileId(fileId); + result.setSavedFileName(savedFileName); + } + return StringUtils.format("{}/{}", DateUtils.datePath(), savedFileName); + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + private static File getAbsoluteFile(String uploadDir, String fileName) { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.exists()) { + if (!desc.getParentFile().exists()) { + desc.getParentFile().mkdirs(); + } + } + return desc.isAbsolute() ? desc : desc.getAbsoluteFile(); + } + + private static String getPathFileName(String fileName) { + return "/" + fileName; + } + + /** + * 文件大小校验 + * + * @param file 上传的文件 + * @param result 文件上传结果 + * @throws FileSizeLimitExceededException 如果超出最大大小 + * @throws InvalidExtensionException 文件校验异常 + */ + public static void assertAllowed(MultipartFile file, String[] allowedExtension, FileUploadResult result) + throws FileSizeLimitExceededException, InvalidExtensionException { + long size = file.getSize(); + if (size > DEFAULT_MAX_SIZE) { + throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + result.setFileSize(size); + + String fileName = file.getOriginalFilename(); + String extension = FileTypeUtils.getExtension(file); + result.setExtension(extension); + result.setOriginalFilename(fileName); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, + fileName); + } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, + fileName); + } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, + fileName); + } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) { + throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, + fileName); + } else { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + } + + /** + * 判断MIME类型是否是允许的MIME类型 + * + * @param extension 上传文件类型 + * @param allowedExtension 允许上传文件类型 + * @return true/false + */ + public static boolean isAllowedExtension(String extension, String[] allowedExtension) { + for (String str : allowedExtension) { + if (str.equalsIgnoreCase(extension)) { + return true; + } + } + return false; + } } \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java index 3437c2d5..fdf18fd0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java @@ -1,15 +1,5 @@ package com.ruoyi.system.controller; -import java.util.Arrays; -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.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.file.FileTypeUtils; @@ -21,26 +11,30 @@ import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.RemoteFileService; -import com.ruoyi.system.api.domain.SysFile; +import com.ruoyi.system.api.domain.SysFileInfo; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Arrays; /** * 个人信息 业务处理 - * + * * @author ruoyi */ @RestController @RequestMapping("/user/profile") -public class SysProfileController extends BaseController -{ +public class SysProfileController extends BaseController { @Autowired private ISysUserService userService; - + @Autowired private TokenService tokenService; - + @Autowired private RemoteFileService remoteFileService; @@ -48,8 +42,7 @@ public class SysProfileController extends BaseController * 个人信息 */ @GetMapping - public AjaxResult profile() - { + public AjaxResult profile() { String username = SecurityUtils.getUsername(); SysUser user = userService.selectUserByUserName(username); AjaxResult ajax = AjaxResult.success(user); @@ -63,24 +56,20 @@ public class SysProfileController extends BaseController */ @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult updateProfile(@RequestBody SysUser user) - { + public AjaxResult updateProfile(@RequestBody SysUser user) { LoginUser loginUser = SecurityUtils.getLoginUser(); SysUser currentUser = loginUser.getSysUser(); currentUser.setNickName(user.getNickName()); currentUser.setEmail(user.getEmail()); currentUser.setPhonenumber(user.getPhonenumber()); currentUser.setSex(user.getSex()); - if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser)) - { + if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser)) { return error("修改用户'" + loginUser.getUsername() + "'失败,手机号码已存在"); } - if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser)) - { + if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser)) { return error("修改用户'" + loginUser.getUsername() + "'失败,邮箱账号已存在"); } - if (userService.updateUserProfile(currentUser) > 0) - { + if (userService.updateUserProfile(currentUser) > 0) { // 更新缓存用户信息 tokenService.setLoginUser(loginUser); return success(); @@ -93,22 +82,18 @@ public class SysProfileController extends BaseController */ @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping("/updatePwd") - public AjaxResult updatePwd(String oldPassword, String newPassword) - { + public AjaxResult updatePwd(String oldPassword, String newPassword) { String username = SecurityUtils.getUsername(); SysUser user = userService.selectUserByUserName(username); String password = user.getPassword(); - if (!SecurityUtils.matchesPassword(oldPassword, password)) - { + if (!SecurityUtils.matchesPassword(oldPassword, password)) { return error("修改密码失败,旧密码错误"); } - if (SecurityUtils.matchesPassword(newPassword, password)) - { + if (SecurityUtils.matchesPassword(newPassword, password)) { return error("新密码不能与旧密码相同"); } newPassword = SecurityUtils.encryptPassword(newPassword); - if (userService.resetUserPwd(username, newPassword) > 0) - { + if (userService.resetUserPwd(username, newPassword) > 0) { // 更新缓存用户密码 LoginUser loginUser = SecurityUtils.getLoginUser(); loginUser.getSysUser().setPassword(newPassword); @@ -117,30 +102,25 @@ public class SysProfileController extends BaseController } return error("修改密码异常,请联系管理员"); } - + /** * 头像上传 */ @Log(title = "用户头像", businessType = BusinessType.UPDATE) @PostMapping("/avatar") - public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) - { - if (!file.isEmpty()) - { + public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) { + if (!file.isEmpty()) { LoginUser loginUser = SecurityUtils.getLoginUser(); String extension = FileTypeUtils.getExtension(file); - if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) - { + if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) { return error("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式"); } - R fileResult = remoteFileService.upload(file); - if (StringUtils.isNull(fileResult) || StringUtils.isNull(fileResult.getData())) - { + R fileResult = remoteFileService.upload(file); + if (StringUtils.isNull(fileResult) || StringUtils.isNull(fileResult.getData())) { return error("文件服务异常,请联系管理员"); } String url = fileResult.getData().getUrl(); - if (userService.updateUserAvatar(loginUser.getUsername(), url)) - { + if (userService.updateUserAvatar(loginUser.getUsername(), url)) { AjaxResult ajax = AjaxResult.success(); ajax.put("imgUrl", url); // 更新缓存用户头像 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysSeqRuleController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysSeqRuleController.java new file mode 100644 index 00000000..e761e601 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysSeqRuleController.java @@ -0,0 +1,101 @@ +package com.ruoyi.system.controller; + +import com.ruoyi.common.core.utils.poi.ExcelUtil; +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.common.services.domain.SysSeqRule; +import com.ruoyi.system.service.ISysSeqRuleService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 序列号生成规则Controller + * + * @author ryas + * created on 2024-02-20 + */ +@RestController +@RequestMapping("/SeqRule") +public class SysSeqRuleController extends BaseController { + @Autowired + private ISysSeqRuleService sysSeqRuleService; + + /** + * 查询序列号生成规则列表 + */ + @RequiresPermissions("system:SeqRule:list") + @GetMapping("/list") + public TableDataInfo list(SysSeqRule sysSeqRule) { + startPage(); + List list = sysSeqRuleService.selectSysSeqRuleList(sysSeqRule); + return getDataTable(list); + } + + /** + * 导出序列号生成规则列表 + */ + @RequiresPermissions("system:SeqRule:export") + @Log(title = "序列号生成规则", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysSeqRule sysSeqRule) { + List list = sysSeqRuleService.selectSysSeqRuleList(sysSeqRule); + ExcelUtil util = new ExcelUtil<>(SysSeqRule.class); + util.exportExcel(response, list, "序列号生成规则数据"); + } + + /** + * 获取序列号生成规则详细信息 + */ + @RequiresPermissions("system:SeqRule:query") + @GetMapping(value = "/{ruleId}") + public AjaxResult getInfo(@PathVariable("ruleId") Long ruleId) { + return success(sysSeqRuleService.selectSysSeqRuleByRuleId(ruleId)); + } + + /** + * 新增序列号生成规则 + */ + @RequiresPermissions("system:SeqRule:add") + @Log(title = "序列号生成规则", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysSeqRule sysSeqRule) { + return toAjax(sysSeqRuleService.insertSysSeqRule(sysSeqRule)); + } + + /** + * 修改序列号生成规则 + */ + @RequiresPermissions("system:SeqRule:edit") + @Log(title = "序列号生成规则", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysSeqRule sysSeqRule) { + return toAjax(sysSeqRuleService.updateSysSeqRule(sysSeqRule)); + } + + /** + * 删除序列号生成规则 + */ + @RequiresPermissions("system:SeqRule:remove") + @Log(title = "序列号生成规则", businessType = BusinessType.DELETE) + @DeleteMapping("/{ruleIds}") + public AjaxResult remove(@PathVariable Long[] ruleIds) { + return toAjax(sysSeqRuleService.deleteSysSeqRuleByRuleIds(ruleIds)); + } + + /** + * 规则启用状态修改 + */ + @RequiresPermissions("system:SeqRule:edit") + @Log(title = "序列号生成规则启用状态修改", businessType = BusinessType.UPDATE) + @PutMapping("/changeRuleEnableFlag") + public AjaxResult changeRuleEnableFlag(@RequestBody SysSeqRule sysSeqRule) { + return toAjax(sysSeqRuleService.updateEnableFlag(sysSeqRule)); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java index 446eed64..f4106a4c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java @@ -1,76 +1,76 @@ package com.ruoyi.system.mapper; -import java.util.List; import com.ruoyi.system.domain.SysConfig; +import java.util.List; + /** * 参数配置 数据层 - * + * * @author ruoyi */ -public interface SysConfigMapper -{ +public interface SysConfigMapper { /** * 查询参数配置信息 - * + * * @param config 参数配置信息 * @return 参数配置信息 */ - public SysConfig selectConfig(SysConfig config); + SysConfig selectConfig(SysConfig config); /** * 通过ID查询配置 - * + * * @param configId 参数ID * @return 参数配置信息 */ - public SysConfig selectConfigById(Long configId); + SysConfig selectConfigById(Long configId); /** * 查询参数配置列表 - * + * * @param config 参数配置信息 * @return 参数配置集合 */ - public List selectConfigList(SysConfig config); + List selectConfigList(SysConfig config); /** * 根据键名查询参数配置信息 - * + * * @param configKey 参数键名 * @return 参数配置信息 */ - public SysConfig checkConfigKeyUnique(String configKey); + SysConfig checkConfigKeyUnique(String configKey); /** * 新增参数配置 - * + * * @param config 参数配置信息 * @return 结果 */ - public int insertConfig(SysConfig config); + int insertConfig(SysConfig config); /** * 修改参数配置 - * + * * @param config 参数配置信息 * @return 结果 */ - public int updateConfig(SysConfig config); + int updateConfig(SysConfig config); /** * 删除参数配置 - * + * * @param configId 参数ID * @return 结果 */ - public int deleteConfigById(Long configId); + int deleteConfigById(Long configId); /** * 批量删除参数信息 - * + * * @param configIds 需要删除的参数ID * @return 结果 */ - public int deleteConfigByIds(Long[] configIds); + int deleteConfigByIds(Long[] configIds); } \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java index 8ec8573d..1532576b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java @@ -1,82 +1,82 @@ package com.ruoyi.system.service; -import java.util.List; import com.ruoyi.system.domain.SysConfig; +import java.util.List; + /** * 参数配置 服务层 - * + * * @author ruoyi */ -public interface ISysConfigService -{ +public interface ISysConfigService { /** * 查询参数配置信息 - * + * * @param configId 参数配置ID * @return 参数配置信息 */ - public SysConfig selectConfigById(Long configId); + SysConfig selectConfigById(Long configId); /** * 根据键名查询参数配置信息 - * + * * @param configKey 参数键名 * @return 参数键值 */ - public String selectConfigByKey(String configKey); + String selectConfigByKey(String configKey); /** * 查询参数配置列表 - * + * * @param config 参数配置信息 * @return 参数配置集合 */ - public List selectConfigList(SysConfig config); + List selectConfigList(SysConfig config); /** * 新增参数配置 - * + * * @param config 参数配置信息 * @return 结果 */ - public int insertConfig(SysConfig config); + int insertConfig(SysConfig config); /** * 修改参数配置 - * + * * @param config 参数配置信息 * @return 结果 */ - public int updateConfig(SysConfig config); + int updateConfig(SysConfig config); /** * 批量删除参数信息 - * + * * @param configIds 需要删除的参数ID */ - public void deleteConfigByIds(Long[] configIds); + void deleteConfigByIds(Long[] configIds); /** * 加载参数缓存数据 */ - public void loadingConfigCache(); + void loadingConfigCache(); /** * 清空参数缓存数据 */ - public void clearConfigCache(); + void clearConfigCache(); /** * 重置参数缓存数据 */ - public void resetConfigCache(); + void resetConfigCache(); /** * 校验参数键名是否唯一 - * + * * @param config 参数信息 * @return 结果 */ - public boolean checkConfigKeyUnique(SysConfig config); + boolean checkConfigKeyUnique(SysConfig config); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysSeqRuleService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysSeqRuleService.java new file mode 100644 index 00000000..64659809 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysSeqRuleService.java @@ -0,0 +1,69 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.services.domain.SysSeqRule; + +import java.util.List; + +/** + * 序列号生成规则Service接口 + * + * @author ryas + * created on 2024-02-20 + */ +public interface ISysSeqRuleService { + /** + * 查询序列号生成规则 + * + * @param ruleId 序列号生成规则主键 + * @return 序列号生成规则 + */ + SysSeqRule selectSysSeqRuleByRuleId(Long ruleId); + + /** + * 查询序列号生成规则列表 + * + * @param sysSeqRule 序列号生成规则 + * @return 序列号生成规则集合 + */ + List selectSysSeqRuleList(SysSeqRule sysSeqRule); + + /** + * 新增序列号生成规则 + * + * @param sysSeqRule 序列号生成规则 + * @return 结果 + */ + int insertSysSeqRule(SysSeqRule sysSeqRule); + + /** + * 修改序列号生成规则 + * + * @param sysSeqRule 序列号生成规则 + * @return 结果 + */ + int updateSysSeqRule(SysSeqRule sysSeqRule); + + /** + * 批量删除序列号生成规则 + * + * @param ruleIds 需要删除的序列号生成规则主键集合 + * @return 结果 + */ + int deleteSysSeqRuleByRuleIds(Long[] ruleIds); + + /** + * 删除序列号生成规则信息 + * + * @param ruleId 序列号生成规则主键 + * @return 结果 + */ + int deleteSysSeqRuleByRuleId(Long ruleId); + + /** + * 更新序列号生成规则启用状态 + * + * @param rule 序列号生成规则 + * @return 结果 + */ + int updateEnableFlag(SysSeqRule rule); +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java index 2d7adce1..f9ad4890 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -10,7 +10,7 @@ import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.service.ISysConfigService; import jakarta.annotation.PostConstruct; -import org.springframework.beans.factory.annotation.Autowired; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import java.util.Collection; @@ -23,10 +23,10 @@ import java.util.List; */ @Service public class SysConfigServiceImpl implements ISysConfigService { - @Autowired + @Resource private SysConfigMapper configMapper; - @Autowired + @Resource private RedisService redisService; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSeqRuleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSeqRuleServiceImpl.java new file mode 100644 index 00000000..691af99c --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysSeqRuleServiceImpl.java @@ -0,0 +1,132 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.services.domain.SysSeqRule; +import com.ruoyi.common.services.mapper.SysSeqRuleDynamicSqlSupport; +import com.ruoyi.common.services.mapper.SysSeqRuleMapper; +import com.ruoyi.system.service.ISysSeqRuleService; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider; +import org.mybatis.dynamic.sql.render.RenderingStrategies; +import org.mybatis.dynamic.sql.select.SelectDSLCompleter; +import org.mybatis.dynamic.sql.select.render.SelectStatementProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Optional; + +/** + * 序列号生成规则Service业务层处理 + * + * @author ryas + * created on 2024-02-20 + */ +@Service +public class SysSeqRuleServiceImpl implements ISysSeqRuleService { + @Autowired + private SysSeqRuleMapper sysSeqRuleMapper; + + /** + * 查询序列号生成规则 + * + * @param ruleId 序列号生成规则主键 + * @return 序列号生成规则 + */ + @Override + public SysSeqRule selectSysSeqRuleByRuleId(Long ruleId) { + Optional result = sysSeqRuleMapper.selectOne(dsl -> dsl.where(SysSeqRuleDynamicSqlSupport.ruleId, SqlBuilder.isEqualTo(ruleId))); + return result.orElse(null); + } + + /** + * 查询序列号生成规则列表 + * + * @param sysSeqRule 序列号生成规则 + * @return 序列号生成规则 + */ + @Override + public List selectSysSeqRuleList(SysSeqRule sysSeqRule) { + if (StringUtils.isNotBlank(sysSeqRule.getRuleName()) || StringUtils.isNotBlank(sysSeqRule.getSeqDistCd())) { + //条件查询 + SelectStatementProvider provider = SqlBuilder.select(SysSeqRuleMapper.selectList) + .from(SysSeqRuleDynamicSqlSupport.sysSeqRule) + .where(SysSeqRuleDynamicSqlSupport.seqDistCd, SqlBuilder.isEqualToWhenPresent(sysSeqRule.getSeqDistCd())) + .and(SysSeqRuleDynamicSqlSupport.ruleName, SqlBuilder.isLikeWhenPresent(sysSeqRule.getRuleName() == null ? null : "%" + sysSeqRule.getRuleName() + "%")) + .build() + .render(RenderingStrategies.MYBATIS3); + return sysSeqRuleMapper.selectMany(provider); + } else { + //全部查询 + return sysSeqRuleMapper.select(SelectDSLCompleter.allRows()); + } + } + + /** + * 新增序列号生成规则 + * + * @param sysSeqRule 序列号生成规则 + * @return 结果 + */ + @Transactional + @Override + public int insertSysSeqRule(SysSeqRule sysSeqRule) { + return sysSeqRuleMapper.insertSelective(sysSeqRule); + } + + /** + * 修改序列号生成规则 + * + * @param sysSeqRule 序列号生成规则 + * @return 结果 + */ + @Transactional + @Override + public int updateSysSeqRule(SysSeqRule sysSeqRule) { + return sysSeqRuleMapper.updateByPrimaryKeySelective(sysSeqRule); + } + + /** + * 批量删除序列号生成规则 + * + * @param ruleIds 需要删除的序列号生成规则主键 + * @return 结果 + */ + @Transactional + @Override + public int deleteSysSeqRuleByRuleIds(Long[] ruleIds) { + DeleteStatementProvider provider = SqlBuilder.deleteFrom(SysSeqRuleDynamicSqlSupport.sysSeqRule) + .where(SysSeqRuleDynamicSqlSupport.ruleId, SqlBuilder.isIn(ruleIds)) + .build() + .render(RenderingStrategies.MYBATIS3); + return sysSeqRuleMapper.delete(provider); + } + + /** + * 删除序列号生成规则信息 + * + * @param ruleId 序列号生成规则主键 + * @return 结果 + */ + @Transactional + @Override + public int deleteSysSeqRuleByRuleId(Long ruleId) { + return sysSeqRuleMapper.deleteByPrimaryKey(ruleId); + } + + /** + * 更新序列号生成规则启用状态 + * + * @param rule 序列号生成规则 + * @return 结果 + */ + @Transactional + @Override + public int updateEnableFlag(SysSeqRule rule) { + SysSeqRule updateRule = new SysSeqRule(); + updateRule.setRuleId(rule.getRuleId()); + updateRule.setEnableFlag(rule.getEnableFlag()); + return sysSeqRuleMapper.updateByPrimaryKeySelective(updateRule); + } +} diff --git a/ruoyi-ui/src/api/file/FileRecord.js b/ruoyi-ui/src/api/file/FileRecord.js new file mode 100644 index 00000000..4e7d61c0 --- /dev/null +++ b/ruoyi-ui/src/api/file/FileRecord.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 查询文件存储记录列表 +export function listFileRecord(query) { + return request({ + url: '/file/FileRecord/list', + method: 'get', + params: query + }) +} + +// 查询文件存储记录详细 +export function getFileRecord(fileId) { + return request({ + url: '/file/FileRecord/' + fileId, + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/system/SeqRule.js b/ruoyi-ui/src/api/system/SeqRule.js new file mode 100644 index 00000000..27b84b01 --- /dev/null +++ b/ruoyi-ui/src/api/system/SeqRule.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 查询序列号生成规则列表 +export function listSeqRule(query) { + return request({ + url: '/system/SeqRule/list', + method: 'get', + params: query + }) +} + +// 查询序列号生成规则详细 +export function getSeqRule(ruleId) { + return request({ + url: '/system/SeqRule/' + ruleId, + method: 'get' + }) +} + +// 新增序列号生成规则 +export function addSeqRule(data) { + return request({ + url: '/system/SeqRule', + method: 'post', + data: data + }) +} + +// 修改序列号生成规则 +export function updateSeqRule(data) { + return request({ + url: '/system/SeqRule', + method: 'put', + data: data + }) +} + +// 删除序列号生成规则 +export function delSeqRule(ruleId) { + return request({ + url: '/system/SeqRule/' + ruleId, + method: 'delete' + }) +} + +// 规则启用状态修改 +export function changeRuleEnableFlag(ruleId, enableFlag) { + const data = { + ruleId, + enableFlag, + } + return request({ + url: '/system/SeqRule/changeRuleEnableFlag', + method: 'put', + data: data + }) +} diff --git a/ruoyi-ui/src/views/file/FileRecord/index.vue b/ruoyi-ui/src/views/file/FileRecord/index.vue new file mode 100644 index 00000000..93bbd742 --- /dev/null +++ b/ruoyi-ui/src/views/file/FileRecord/index.vue @@ -0,0 +1,160 @@ + + + diff --git a/ruoyi-ui/src/views/system/SeqRule/index.vue b/ruoyi-ui/src/views/system/SeqRule/index.vue new file mode 100644 index 00000000..39052347 --- /dev/null +++ b/ruoyi-ui/src/views/system/SeqRule/index.vue @@ -0,0 +1,337 @@ + + + diff --git a/sql/ry-cloud-ryas.sql b/sql/ry-cloud-ryas.sql index cfa6e586..7fef38fa 100644 --- a/sql/ry-cloud-ryas.sql +++ b/sql/ry-cloud-ryas.sql @@ -11,7 +11,7 @@ Target Server Version : 80200 (8.2.0) File Encoding : 65001 - Date: 19/02/2024 15:55:14 + Date: 20/02/2024 11:16:45 */ SET NAMES utf8mb4; @@ -151,7 +151,7 @@ CREATE TABLE `gen_table` ( `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', PRIMARY KEY (`table_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '代码生成业务表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '代码生成业务表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of gen_table @@ -159,6 +159,8 @@ CREATE TABLE `gen_table` ( INSERT INTO `gen_table` VALUES (9, 'WMS_M_UNIT_INFO', '单位基础信息表', NULL, NULL, 'UnitInfo', 'crud', 'element-plus', 'mybatis-dynamic', 'com.ruoyi.wms', 'wms', 'UnitInfo', '单位信息管理', 'ryas', '0', '/', '{\"parentMenuId\":\"2000\"}', 'admin', '2024-02-18 07:22:15', '', '2024-02-18 08:07:26', NULL); INSERT INTO `gen_table` VALUES (10, 'WMS_M_GOODS_TYPE_INFO', '物品类型表', NULL, NULL, 'GoodsType', 'crud', 'element-plus', 'mybatis-dynamic', 'com.ruoyi.wms', 'wms', 'GoodsType', '物品类型管理', 'ryas', '0', '/', '{\"parentMenuId\":\"2000\"}', 'admin', '2024-02-18 07:27:46', '', '2024-02-18 08:17:23', NULL); INSERT INTO `gen_table` VALUES (12, 'WMS_M_WAREHOUSE_INFO', '仓库基础信息表', NULL, NULL, 'WarehouseInfo', 'crud', 'element-plus', 'mybatis-dynamic', 'com.ruoyi.wms', 'wms', 'WarehouseInfo', '仓库基础信息', 'ryas', '0', '/', '{\"parentMenuId\":2000}', 'admin', '2024-02-18 08:02:20', '', '2024-02-18 08:07:04', NULL); +INSERT INTO `gen_table` VALUES (13, 'sys_file', '文件存储记录表', NULL, NULL, 'SysFile', 'crud', 'element-plus', 'mybatis-dynamic', 'com.ruoyi.file', 'file', 'FileRecord', '文件存储记录', 'ryas', '0', '/', '{\"parentMenuId\":\"1\"}', 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:14', NULL); +INSERT INTO `gen_table` VALUES (14, 'sys_seq_rule', '序列号生成规则表', NULL, NULL, 'SysSeqRule', 'crud', 'element-plus', 'mybatis-dynamic', 'com.ruoyi.system', 'system', 'SeqRule', '序列号生成规则', 'ryas', '0', '/', '{\"parentMenuId\":1}', 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26', NULL); -- ---------------------------- -- Table structure for gen_table_column @@ -188,7 +190,7 @@ CREATE TABLE `gen_table_column` ( `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者', `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`column_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 226 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '代码生成业务表字段' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 259 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '代码生成业务表字段' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of gen_table_column @@ -251,28 +253,39 @@ INSERT INTO `gen_table_column` VALUES (222, 12, 'create_time', '创建时间', ' INSERT INTO `gen_table_column` VALUES (223, 12, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 26, 'admin', '2024-02-18 08:02:21', '', '2024-02-18 08:07:05'); INSERT INTO `gen_table_column` VALUES (224, 12, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 27, 'admin', '2024-02-18 08:02:21', '', '2024-02-18 08:07:05'); INSERT INTO `gen_table_column` VALUES (225, 12, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'textarea', '', 28, 'admin', '2024-02-18 08:02:21', '', '2024-02-18 08:07:05'); - --- ---------------------------- --- Table structure for sys_common --- ---------------------------- -DROP TABLE IF EXISTS `sys_common`; -CREATE TABLE `sys_common` ( - `config_id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键', - `config_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数名称', - `config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数键名', - `config_value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数键值', - `config_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)', - `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者', - `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', - `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者', - `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', - `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注', - PRIMARY KEY (`config_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '参数配置表' ROW_FORMAT = Dynamic; - --- ---------------------------- --- Records of sys_common --- ---------------------------- +INSERT INTO `gen_table_column` VALUES (226, 13, 'file_id', '文件ID', 'varchar(50)', 'String', 'fileId', '1', '0', NULL, '0', NULL, '1', '1', 'EQ', 'input', '', 1, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:14'); +INSERT INTO `gen_table_column` VALUES (227, 13, 'saved_name', '保存的文件名称', 'varchar(255)', 'String', 'savedName', '0', '0', '0', '0', '0', '1', '1', 'LIKE', 'input', '', 2, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:14'); +INSERT INTO `gen_table_column` VALUES (228, 13, 'original_name', '原始文件名称', 'varchar(255)', 'String', 'originalName', '0', '0', '0', '0', '0', '1', '1', 'LIKE', 'input', '', 3, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:14'); +INSERT INTO `gen_table_column` VALUES (229, 13, 'file_path', '文件路径', 'varchar(500)', 'String', 'filePath', '0', '0', '0', '0', '0', '1', '0', 'EQ', 'textarea', '', 4, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:14'); +INSERT INTO `gen_table_column` VALUES (230, 13, 'extension', '文件后缀', 'varchar(50)', 'String', 'extension', '0', '0', '0', '0', '0', '1', '0', 'EQ', 'input', '', 5, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (231, 13, 'storage_type', '存储方式', 'varchar(50)', 'String', 'storageType', '0', '0', '0', '0', '0', '1', '0', 'EQ', 'select', '', 6, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (232, 13, 'request_url', '获取文件的URL', 'varchar(255)', 'String', 'requestUrl', '0', '0', '0', '0', '0', '1', '0', 'EQ', 'input', '', 7, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (233, 13, 'file_size', '文件大小(Byte)', 'bigint', 'Long', 'fileSize', '0', '0', '0', '0', '0', '1', '0', 'EQ', 'input', '', 8, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (234, 13, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, '1', NULL, 'EQ', 'input', '', 9, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (235, 13, 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', NULL, NULL, NULL, '1', NULL, 'EQ', 'datetime', '', 10, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (236, 13, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, '1', NULL, 'EQ', 'input', '', 11, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (237, 13, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, '1', NULL, 'EQ', 'datetime', '', 12, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (238, 13, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'textarea', '', 13, 'admin', '2024-02-19 10:01:22', '', '2024-02-19 10:08:15'); +INSERT INTO `gen_table_column` VALUES (239, 14, 'rule_id', '规则ID', 'bigint', 'Long', 'ruleId', '1', '0', NULL, '0', NULL, NULL, NULL, 'EQ', 'input', '', 1, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (240, 14, 'seq_dist_cd', '序列号识别码', 'varchar(30)', 'String', 'seqDistCd', '0', '0', '1', '1', '1', '1', '1', 'EQ', 'input', '', 2, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (241, 14, 'rule_name', '规则名称', 'varchar(50)', 'String', 'ruleName', '0', '0', '1', '1', '1', '1', '1', 'LIKE', 'input', '', 3, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (242, 14, 'prefix', '前缀', 'varchar(50)', 'String', 'prefix', '0', '0', '1', '1', '1', '1', '0', 'EQ', 'input', '', 4, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (243, 14, 'separator1', '分隔符1', 'varchar(50)', 'String', 'separator1', '0', '0', NULL, '1', '1', '1', '0', 'EQ', 'input', '', 5, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (244, 14, 'date_format', '日期格式', 'varchar(30)', 'String', 'dateFormat', '0', '0', NULL, '1', '1', '1', '0', 'EQ', 'input', '', 6, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (245, 14, 'min_digits', '序列号数字部分的最小位数,不足补0', 'int', 'Long', 'minDigits', '0', '0', '1', '1', '1', '1', '0', 'EQ', 'input', '', 7, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (246, 14, 'separator2', '分隔符2', 'varchar(50)', 'String', 'separator2', '0', '0', NULL, '1', '1', '1', '0', 'EQ', 'input', '', 8, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (247, 14, 'generator_name', '生成器名称(或类全名),自定义的生成器可忽略前面的规则自行生成', 'varchar(255)', 'String', 'generatorName', '0', '0', NULL, '1', '1', '1', '0', 'LIKE', 'input', '', 9, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (248, 14, 'enable_flag', '是否启用', 'int', 'Long', 'enableFlag', '0', '0', '1', '1', '1', '1', '0', 'EQ', 'input', '', 10, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (249, 14, 'remark_1', '备注1', 'varchar(100)', 'String', 'remark1', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 11, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (250, 14, 'remark_2', '备注2', 'varchar(100)', 'String', 'remark2', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 12, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (251, 14, 'remark_3', '备注3', 'varchar(100)', 'String', 'remark3', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 13, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (252, 14, 'remark_4', '备注4', 'varchar(100)', 'String', 'remark4', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 14, 'admin', '2024-02-19 10:01:22', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (253, 14, 'remark_5', '备注5', 'varchar(100)', 'String', 'remark5', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 15, 'admin', '2024-02-19 10:01:23', '', '2024-02-20 02:07:26'); +INSERT INTO `gen_table_column` VALUES (254, 14, 'create_by', '创建者', 'varchar(64)', 'String', 'createBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 16, 'admin', '2024-02-19 10:01:23', '', '2024-02-20 02:07:27'); +INSERT INTO `gen_table_column` VALUES (255, 14, 'create_time', '创建时间', 'datetime', 'Date', 'createTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 17, 'admin', '2024-02-19 10:01:23', '', '2024-02-20 02:07:27'); +INSERT INTO `gen_table_column` VALUES (256, 14, 'update_by', '更新者', 'varchar(64)', 'String', 'updateBy', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'input', '', 18, 'admin', '2024-02-19 10:01:23', '', '2024-02-20 02:07:27'); +INSERT INTO `gen_table_column` VALUES (257, 14, 'update_time', '更新时间', 'datetime', 'Date', 'updateTime', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'datetime', '', 19, 'admin', '2024-02-19 10:01:23', '', '2024-02-20 02:07:27'); +INSERT INTO `gen_table_column` VALUES (258, 14, 'remark', '备注', 'varchar(500)', 'String', 'remark', '0', '0', NULL, NULL, NULL, NULL, NULL, 'EQ', 'textarea', '', 20, 'admin', '2024-02-19 10:01:23', '', '2024-02-20 02:07:27'); -- ---------------------------- -- Table structure for sys_config @@ -448,7 +461,7 @@ CREATE TABLE `sys_file` ( -- ---------------------------- -- Records of sys_file -- ---------------------------- -INSERT INTO `sys_file` VALUES ('20240219155008A001', '20240219155008A001.png', 'AGVCar02.png', 'D:\\temp\\ruoyi\\uploadPath\\2024\\02\\19\\20240219155008A001.png', 'png', 'LOCAL', 'http://127.0.0.1:9300/statics/2024/02/19/20240219155008A001.png', 330857, '1', '2024-02-19 15:50:17', '1', '2024-02-19 15:50:17', '示例数据'); +INSERT INTO `sys_file` VALUES ('20240219155008A001', '20240219155008A001.png', 'AGVCar02.png', 'D:\\temp\\RYAS\\uploadPath\\2024\\02\\19\\20240219155008A001.png', 'png', 'LOCAL', 'http://127.0.0.1:9300/statics/2024/02/19/20240219155008A001.png', 330857, '1', '2024-02-19 15:50:17', '1', '2024-02-19 15:50:17', '示例数据'); -- ---------------------------- -- Table structure for sys_job @@ -512,7 +525,7 @@ CREATE TABLE `sys_logininfor` ( PRIMARY KEY (`info_id`) USING BTREE, INDEX `idx_sys_logininfor_s`(`status` ASC) USING BTREE, INDEX `idx_sys_logininfor_lt`(`access_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 139 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统访问记录' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 148 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统访问记录' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_logininfor @@ -543,7 +556,7 @@ CREATE TABLE `sys_menu` ( `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '备注', PRIMARY KEY (`menu_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2025 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '菜单权限表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 2034 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '菜单权限表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_menu @@ -650,6 +663,15 @@ INSERT INTO `sys_menu` VALUES (2021, '仓库基础信息新增', 2019, 2, '#', ' INSERT INTO `sys_menu` VALUES (2022, '仓库基础信息修改', 2019, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'wms:WarehouseInfo:edit', '#', 'admin', '2024-02-18 08:34:10', '', NULL, ''); INSERT INTO `sys_menu` VALUES (2023, '仓库基础信息删除', 2019, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'wms:WarehouseInfo:remove', '#', 'admin', '2024-02-18 08:34:10', '', NULL, ''); INSERT INTO `sys_menu` VALUES (2024, '仓库基础信息导出', 2019, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'wms:WarehouseInfo:export', '#', 'admin', '2024-02-18 08:34:10', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2025, '文件存储记录', 1, 10, 'FileRecord', 'file/FileRecord/index', NULL, 1, 0, 'C', '0', '0', 'file:FileRecord:list', 'documentation', 'admin', '2024-02-19 10:19:23', '1', '2024-02-19 10:25:26', '文件存储记录菜单'); +INSERT INTO `sys_menu` VALUES (2026, '文件存储记录查询', 2025, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'file:FileRecord:query', '#', 'admin', '2024-02-19 10:19:23', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2027, '文件存储记录导出', 2025, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'file:FileRecord:export', '#', 'admin', '2024-02-19 10:19:23', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2028, '序列号生成规则', 1, 11, 'SeqRule', 'system/SeqRule/index', NULL, 1, 0, 'C', '0', '0', 'system:SeqRule:list', 'number', 'admin', '2024-02-20 02:05:15', '1', '2024-02-20 02:08:58', '序列号生成规则菜单'); +INSERT INTO `sys_menu` VALUES (2029, '序列号生成规则查询', 2028, 1, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:SeqRule:query', '#', 'admin', '2024-02-20 02:05:15', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2030, '序列号生成规则新增', 2028, 2, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:SeqRule:add', '#', 'admin', '2024-02-20 02:05:15', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2031, '序列号生成规则修改', 2028, 3, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:SeqRule:edit', '#', 'admin', '2024-02-20 02:05:15', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2032, '序列号生成规则删除', 2028, 4, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:SeqRule:remove', '#', 'admin', '2024-02-20 02:05:15', '', NULL, ''); +INSERT INTO `sys_menu` VALUES (2033, '序列号生成规则导出', 2028, 5, '#', '', NULL, 1, 0, 'F', '0', '0', 'system:SeqRule:export', '#', 'admin', '2024-02-20 02:05:15', '', NULL, ''); -- ---------------------------- -- Table structure for sys_notice @@ -701,7 +723,7 @@ CREATE TABLE `sys_oper_log` ( INDEX `idx_sys_oper_log_bt`(`business_type` ASC) USING BTREE, INDEX `idx_sys_oper_log_s`(`status` ASC) USING BTREE, INDEX `idx_sys_oper_log_ot`(`oper_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 215 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '操作日志记录' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 229 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '操作日志记录' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of sys_oper_log @@ -880,7 +902,7 @@ INSERT INTO `sys_role_menu` VALUES (2, 1060); -- ---------------------------- DROP TABLE IF EXISTS `sys_seq_result`; CREATE TABLE `sys_seq_result` ( - `seq_id` bigint(20) UNSIGNED ZEROFILL NOT NULL DEFAULT 100 COMMENT '序列号ID', + `seq_id` bigint(20) UNSIGNED ZEROFILL NOT NULL COMMENT '序列号ID', `seq_dist_cd` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '序列号识别码', `prefix` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '前缀', `separator1` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '分隔符1', @@ -912,7 +934,7 @@ INSERT INTO `sys_seq_result` VALUES (00000006458414990338, 'WHS', 'WH', NULL, NU -- ---------------------------- DROP TABLE IF EXISTS `sys_seq_rule`; CREATE TABLE `sys_seq_rule` ( - `rule_id` bigint NOT NULL DEFAULT 100 COMMENT '规则ID', + `rule_id` bigint NOT NULL COMMENT '规则ID', `seq_dist_cd` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '序列号识别码', `rule_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '规则名称', `prefix` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '前缀', @@ -938,7 +960,7 @@ CREATE TABLE `sys_seq_rule` ( -- ---------------------------- -- Records of sys_seq_rule -- ---------------------------- -INSERT INTO `sys_seq_rule` VALUES (1, 'UNIT', '单位代码生成规则', 'UNIT', NULL, NULL, 5, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 11:38:35', '1', '2024-02-19 11:38:37', NULL); +INSERT INTO `sys_seq_rule` VALUES (1, 'UNIT', '单位代码生成规则', 'UNIT', NULL, NULL, 5, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 11:38:35', '1', '2024-02-20 10:48:55', NULL); INSERT INTO `sys_seq_rule` VALUES (2, 'GT', '物品类型代码生成规则', 'GT', NULL, NULL, 5, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 13:33:21', '1', '2024-02-19 13:33:24', NULL); INSERT INTO `sys_seq_rule` VALUES (3, 'WHS', '仓库代码生成规则', 'WH', NULL, NULL, 3, NULL, NULL, 1, NULL, NULL, NULL, NULL, NULL, '1', '2024-02-19 13:34:28', '1', '2024-02-19 13:34:30', NULL); diff --git a/sql/ry-config-ryas.sql b/sql/ry-config-ryas.sql index 12ecdf68..07ea3a50 100644 --- a/sql/ry-config-ryas.sql +++ b/sql/ry-config-ryas.sql @@ -4,14 +4,14 @@ Source Server : MySQL (CIT1) Source Server Type : MySQL Source Server Version : 80200 (8.2.0) - Source Host : + Source Host : localhost:3306 Source Schema : ry-config Target Server Type : MySQL Target Server Version : 80200 (8.2.0) File Encoding : 65001 - Date: 19/02/2024 15:56:16 + Date: 19/02/2024 17:44:24 */ SET NAMES utf8mb4; @@ -41,7 +41,7 @@ CREATE TABLE `config_info` ( `encrypted_data_key` text CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NULL COMMENT '秘钥', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id` ASC, `group_id` ASC, `tenant_id` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 57 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = 'config_info' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 59 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = 'config_info' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of config_info @@ -53,10 +53,10 @@ INSERT INTO `config_info` VALUES (4, 'ruoyi-monitor-dev.yml', 'DEFAULT_GROUP', ' INSERT INTO `config_info` VALUES (5, 'ruoyi-system-dev.yml', 'DEFAULT_GROUP', '# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n connectTimeout: 30000\n socketTimeout: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n # 主库数据源\n master:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n # 从库数据源\n # slave:\n # username: \n # password: \n # url: \n # driver-class-name: \n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.system\n # 配置MyBatis日志输出\n configuration:\n log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n\n# swagger配置\nswagger:\n title: 系统模块接口文档\n license: Powered By ruoyi\n licenseUrl: https://ruoyi.vip\n', 'c16551d84032495e08b4d0a23648258b', '2020-11-20 00:00:00', '2024-02-01 07:46:29', NULL, '0:0:0:0:0:0:0:1', '', '', '系统模块', 'null', 'null', 'yaml', '', ''); INSERT INTO `config_info` VALUES (6, 'ruoyi-gen-dev.yml', 'DEFAULT_GROUP', '# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password:\n datasource:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.gen.domain\n # 配置mapper的扫描,找到所有的mapper.xml映射文件\n mapperLocations: classpath:mapper/**/*.xml\n\n# swagger配置\nswagger:\n title: 代码生成接口文档\n license: Powered By ruoyi\n licenseUrl: https://ruoyi.vip\n\n# 代码生成\ngen:\n # 作者\n author: ryas\n # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool\n packageName: com.ruoyi.system\n # 自动去除表前缀,默认是false\n autoRemovePre: false\n # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)\n tablePrefix: sys_\n', '6a608ec04c64588783a08316dbe2ac3e', '2020-11-20 00:00:00', '2024-02-05 08:56:27', 'alan', '101.229.149.67', '', '', '代码生成', 'null', 'null', 'yaml', '', ''); INSERT INTO `config_info` VALUES (7, 'ruoyi-job-dev.yml', 'DEFAULT_GROUP', '# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password: \n datasource:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.job.domain\n # 配置mapper的扫描,找到所有的mapper.xml映射文件\n #mapperLocations: classpath:mapper/**/*.xml\n\n# swagger配置\nswagger:\n title: 定时任务接口文档\n license: Powered By ruoyi\n licenseUrl: https://ruoyi.vip\n', '79c2abe7b92b996eae686e4e158efa89', '2020-11-20 00:00:00', '2024-01-31 09:04:48', NULL, '0:0:0:0:0:0:0:1', '', '', '定时任务', 'null', 'null', 'yaml', '', ''); -INSERT INTO `config_info` VALUES (8, 'ruoyi-file-dev.yml', 'DEFAULT_GROUP', '# 本地文件上传 \nfile:\n domain: http://127.0.0.1:9300\n path: D:/temp/ruoyi/uploadPath\n prefix: /statics\n\n# FastDFS配置\nfdfs:\n domain: http://8.129.231.12\n soTimeout: 3000\n connectTimeout: 2000\n trackerList: 8.129.231.12:22122\n\n# Minio配置\nminio:\n url: http://8.129.231.12:9000\n accessKey: minioadmin\n secretKey: minioadmin\n bucketName: test\n\n# spring配置\nspring:\n datasource:\n druid:\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n connectTimeout: 30000\n socketTimeout: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n # 主库数据源\n master:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n # 从库数据源\n # slave:\n # username: \n # password: \n # url: \n # driver-class-name: \n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.file\n # 配置MyBatis日志输出\n configuration:\n log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n', '558d0a9349f5560d8f0bffc3c0c36eab', '2020-11-20 00:00:00', '2024-02-19 07:22:11', 'alan', '101.229.149.67', '', '', '文件服务', 'null', 'null', 'yaml', '', ''); +INSERT INTO `config_info` VALUES (8, 'ruoyi-file-dev.yml', 'DEFAULT_GROUP', '# 本地文件上传 \nfile:\n domain: http://127.0.0.1:9300\n path: D:/temp/RYAS/uploadPath\n prefix: /statics\n\n# FastDFS配置\nfdfs:\n domain: http://8.129.231.12\n soTimeout: 3000\n connectTimeout: 2000\n trackerList: 8.129.231.12:22122\n\n# Minio配置\nminio:\n url: http://8.129.231.12:9000\n accessKey: minioadmin\n secretKey: minioadmin\n bucketName: test\n\n# spring配置\nspring:\n datasource:\n druid:\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n connectTimeout: 30000\n socketTimeout: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n # 主库数据源\n master:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n # 从库数据源\n # slave:\n # username: \n # password: \n # url: \n # driver-class-name: \n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.file\n # 配置MyBatis日志输出\n configuration:\n log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n', '87c71469b7544b782ff9c8dfb2c1f5e5', '2020-11-20 00:00:00', '2024-02-19 09:43:17', 'alan', '223.166.15.195', '', '', '文件服务', 'null', 'null', 'yaml', '', ''); INSERT INTO `config_info` VALUES (9, 'sentinel-ruoyi-gateway', 'DEFAULT_GROUP', '[\r\n {\r\n \"resource\": \"ruoyi-auth\",\r\n \"count\": 500,\r\n \"grade\": 1,\r\n \"limitApp\": \"default\",\r\n \"strategy\": 0,\r\n \"controlBehavior\": 0\r\n },\r\n {\r\n \"resource\": \"ruoyi-system\",\r\n \"count\": 1000,\r\n \"grade\": 1,\r\n \"limitApp\": \"default\",\r\n \"strategy\": 0,\r\n \"controlBehavior\": 0\r\n },\r\n {\r\n \"resource\": \"ruoyi-gen\",\r\n \"count\": 200,\r\n \"grade\": 1,\r\n \"limitApp\": \"default\",\r\n \"strategy\": 0,\r\n \"controlBehavior\": 0\r\n },\r\n {\r\n \"resource\": \"ruoyi-job\",\r\n \"count\": 300,\r\n \"grade\": 1,\r\n \"limitApp\": \"default\",\r\n \"strategy\": 0,\r\n \"controlBehavior\": 0\r\n }\r\n]', '9f3a3069261598f74220bc47958ec252', '2020-11-20 00:00:00', '2020-11-20 00:00:00', NULL, '0:0:0:0:0:0:0:1', '', '', '限流策略', 'null', 'null', 'json', NULL, ''); INSERT INTO `config_info` VALUES (35, 'ruoyi-gateway-dev.yml', 'GROUP_ALL_IN_1', 'spring:\n redis:\n host: localhost\n port: 6379\n password:\n cloud:\n gateway:\n discovery:\n locator:\n lowerCaseServiceId: true\n enabled: true\n routes:\n # 认证中心\n - id: ruoyi-auth\n uri: lb://ruoyi-system\n predicates:\n - Path=/auth/**\n filters:\n # 验证码处理\n - CacheRequestFilter\n - ValidateCodeFilter\n - StripPrefix=1\n # 代码生成\n - id: ruoyi-gen\n uri: lb://ruoyi-gen\n predicates:\n - Path=/code/**\n filters:\n - StripPrefix=1\n # 定时任务\n - id: ruoyi-job\n uri: lb://ruoyi-system\n predicates:\n - Path=/schedule/**\n filters:\n - StripPrefix=1\n # 系统模块\n - id: ruoyi-system\n uri: lb://ruoyi-system\n predicates:\n - Path=/system/**\n filters:\n - StripPrefix=1\n # 文件服务\n - id: ruoyi-file\n uri: lb://ruoyi-system\n predicates:\n - Path=/file/**\n filters:\n - StripPrefix=1\n # WMS服务\n - id: ruoyi-wms\n uri: lb://ruoyi-wms\n predicates:\n - Path=/wms/**\n filters:\n - StripPrefix=1\n\n# 安全配置\nsecurity:\n # 验证码\n captcha:\n enabled: true\n type: math\n # 防止XSS攻击\n xss:\n enabled: true\n excludeUrls:\n - /system/notice\n # 不校验白名单\n ignore:\n whites:\n - /auth/logout\n - /auth/login\n - /auth/register\n - /*/v2/api-docs\n - /csrf\n - /auth/specialAuth/login\n - /system/test/**\n - /wms/test/**\n', 'cc74a6d0d4b40c085da48f56fbd01e5b', '2024-01-31 09:34:00', '2024-02-01 08:25:17', NULL, '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', '', ''); -INSERT INTO `config_info` VALUES (36, 'ruoyi-system-dev.yml', 'GROUP_ALL_IN_1', '# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n connectTimeout: 30000\n socketTimeout: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n # 主库数据源\n master:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n # 从库数据源\n # slave:\n # username: \n # password: \n # url: \n # driver-class-name: \n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.system,com.ruoyi.job.domain\n # 配置MyBatis日志输出\n configuration:\n log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n\n# 本地文件上传 \nfile:\n domain: http://127.0.0.1:9201\n path: D:/temp/ruoyi/uploadPath\n prefix: /statics\n\n# FastDFS配置\nfdfs:\n domain: http://8.129.231.12\n soTimeout: 3000\n connectTimeout: 2000\n trackerList: 8.129.231.12:22122\n\n# Minio配置\nminio:\n url: http://8.129.231.12:9000\n accessKey: minioadmin\n secretKey: minioadmin\n bucketName: test\n\n# 特殊登录控制(不需要验证码)\nspecial:\n auth:\n login-enabled: true\n', '79e0d26257e644b6a248990af323f59d', '2024-01-31 09:34:19', '2024-02-01 08:28:49', NULL, '0:0:0:0:0:0:0:1', '', '', '', '', '', 'yaml', '', ''); +INSERT INTO `config_info` VALUES (36, 'ruoyi-system-dev.yml', 'GROUP_ALL_IN_1', '# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n dynamic:\n druid:\n initial-size: 5\n min-idle: 5\n maxActive: 20\n maxWait: 60000\n connectTimeout: 30000\n socketTimeout: 60000\n timeBetweenEvictionRunsMillis: 60000\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n filters: stat,slf4j\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n datasource:\n # 主库数据源\n master:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n # 从库数据源\n # slave:\n # username: \n # password: \n # url: \n # driver-class-name: \n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.system,com.ruoyi.job.domain\n # 配置MyBatis日志输出\n configuration:\n log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\n\n# 本地文件上传 \nfile:\n domain: http://127.0.0.1:9201\n path: D:/temp/RYAS/uploadPath\n prefix: /statics\n\n# FastDFS配置\nfdfs:\n domain: http://8.129.231.12\n soTimeout: 3000\n connectTimeout: 2000\n trackerList: 8.129.231.12:22122\n\n# Minio配置\nminio:\n url: http://8.129.231.12:9000\n accessKey: minioadmin\n secretKey: minioadmin\n bucketName: test\n\n# 特殊登录控制(不需要验证码)\nspecial:\n auth:\n login-enabled: true\n', '0c0f59e0b7c6b7277b3161e194d078ab', '2024-01-31 09:34:19', '2024-02-19 09:43:34', 'alan', '223.166.15.195', '', '', '', '', '', 'yaml', '', ''); INSERT INTO `config_info` VALUES (37, 'application-dev.yml', 'GROUP_ALL_IN_1', 'spring:\n autoconfigure:\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\n mvc:\n pathmatch:\n matching-strategy: ant_path_matcher\n cloud:\n # feign 配置\n openfeign:\n sentinel:\n enabled: true\n okhttp:\n enabled: true\n httpclient:\n enabled: false\n client:\n config:\n default:\n connectTimeout: 10000\n readTimeout: 10000\n compression:\n request:\n enabled: true\n min-request-size: 8192\n response:\n enabled: true\n\n# 暴露监控端点\nmanagement:\n endpoints:\n web:\n exposure:\n include: \'*\'\n', '40039af000c00c2a42c264e926c1d2fc', '2024-01-31 09:37:04', '2024-01-31 09:37:04', NULL, '0:0:0:0:0:0:0:1', '', '', '通用配置', NULL, NULL, 'yaml', NULL, ''); INSERT INTO `config_info` VALUES (38, 'ruoyi-monitor-dev.yml', 'GROUP_ALL_IN_1', '# spring\nspring:\n security:\n user:\n name: ryas\n password: 123456\n boot:\n admin:\n ui:\n title: RYAS服务状态监控\n', '8b3ccaa35d17b5abe8c05a66a264e5f5', '2024-01-31 09:37:29', '2024-01-31 09:37:29', NULL, '0:0:0:0:0:0:0:1', '', '', '监控中心', NULL, NULL, 'yaml', NULL, ''); INSERT INTO `config_info` VALUES (39, 'ruoyi-gen-dev.yml', 'GROUP_ALL_IN_1', '# spring配置\nspring:\n redis:\n host: localhost\n port: 6379\n password:\n datasource:\n driver-class-name: com.mysql.cj.jdbc.Driver\n url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8\n username: root\n password: password\n\n# mybatis配置\nmybatis:\n # 搜索指定包别名\n typeAliasesPackage: com.ruoyi.gen.domain\n # 配置mapper的扫描,找到所有的mapper.xml映射文件\n mapperLocations: classpath:mapper/**/*.xml\n\n# swagger配置\nswagger:\n title: 代码生成接口文档\n license: Powered By ruoyi\n licenseUrl: https://ruoyi.vip\n\n# 代码生成\ngen:\n # 作者\n author: ryas\n # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool\n packageName: com.ruoyi.system\n # 自动去除表前缀,默认是false\n autoRemovePre: false\n # 表前缀(生成类名不会包含表前缀,多个用逗号分隔)\n tablePrefix: sys_\n', '6a608ec04c64588783a08316dbe2ac3e', '2024-01-31 09:37:29', '2024-02-05 08:56:38', 'alan', '101.229.149.67', '', '', '代码生成', '', '', 'yaml', '', ''); @@ -201,7 +201,7 @@ CREATE TABLE `his_config_info` ( INDEX `idx_gmt_create`(`gmt_create` ASC) USING BTREE, INDEX `idx_gmt_modified`(`gmt_modified` ASC) USING BTREE, INDEX `idx_did`(`data_id` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = '多租户改造' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 56 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_bin COMMENT = '多租户改造' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of his_config_info