diff --git a/src/main/java/im/zhaojun/zfile/context/DriveContext.java b/src/main/java/im/zhaojun/zfile/context/DriveContext.java index 7525a56..17d79db 100644 --- a/src/main/java/im/zhaojun/zfile/context/DriveContext.java +++ b/src/main/java/im/zhaojun/zfile/context/DriveContext.java @@ -128,4 +128,20 @@ public class DriveContext implements ApplicationContextAware { return null; } + + /** + * 更新上下文环境中的驱动器 ID + * + * @param updateId + * 驱动器原 ID + * + * @param newId + * 驱动器新 ID + */ + public void updateDriveId(Integer updateId, Integer newId) { + AbstractBaseFileService fileService = drivesServiceMap.remove(updateId); + fileService.setDriveId(newId); + drivesServiceMap.put(newId, fileService); + } + } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/controller/admin/DriveController.java b/src/main/java/im/zhaojun/zfile/controller/admin/DriveController.java index 0a9bdf4..d3ac576 100644 --- a/src/main/java/im/zhaojun/zfile/controller/admin/DriveController.java +++ b/src/main/java/im/zhaojun/zfile/controller/admin/DriveController.java @@ -32,6 +32,7 @@ public class DriveController { @Resource private FilterConfigService filterConfigService; + /** * 获取所有驱动器列表 * @@ -47,14 +48,14 @@ public class DriveController { /** * 获取指定驱动器基本信息及其参数 * - * @param id + * @param driveId * 驱动器 ID * * @return 驱动器基本信息 */ - @GetMapping("/drive/{id}") - public ResultBean driveItem(@PathVariable Integer id) { - DriveConfigDTO driveConfig = driveConfigService.findDriveConfigDTOById(id); + @GetMapping("/drive/{driveId}") + public ResultBean driveItem(@PathVariable Integer driveId) { + DriveConfigDTO driveConfig = driveConfigService.findDriveConfigDTOById(driveId); return ResultBean.success(driveConfig); } @@ -72,12 +73,12 @@ public class DriveController { /** * 删除驱动器设置 * - * @param id + * @param driveId * 驱动器 ID */ - @DeleteMapping("/drive/{id}") - public ResultBean deleteDriveItem(@PathVariable Integer id) { - driveConfigService.deleteById(id); + @DeleteMapping("/drive/{driveId}") + public ResultBean deleteDriveItem(@PathVariable Integer driveId) { + driveConfigService.deleteById(driveId); return ResultBean.success(); } @@ -85,14 +86,14 @@ public class DriveController { /** * 启用驱动器 * - * @param id + * @param driveId * 驱动器 ID */ - @PostMapping("/drive/{id}/enable") - public ResultBean enable(@PathVariable("id") Integer id) { - DriveConfig driveConfig = driveConfigService.findById(id); + @PostMapping("/drive/{driveId}/enable") + public ResultBean enable(@PathVariable Integer driveId) { + DriveConfig driveConfig = driveConfigService.findById(driveId); driveConfig.setEnable(true); - driveConfigService.saveOrUpdate(driveConfig); + driveConfigService.updateDriveConfig(driveConfig); return ResultBean.success(); } @@ -100,33 +101,73 @@ public class DriveController { /** * 停止驱动器 * - * @param id + * @param driveId * 驱动器 ID */ - @PostMapping("/drive/{id}/disable") - public ResultBean disable(@PathVariable("id") Integer id) { - DriveConfig driveConfig = driveConfigService.findById(id); + @PostMapping("/drive/{driveId}/disable") + public ResultBean disable(@PathVariable Integer driveId) { + DriveConfig driveConfig = driveConfigService.findById(driveId); driveConfig.setEnable(false); - driveConfigService.saveOrUpdate(driveConfig); + driveConfigService.updateDriveConfig(driveConfig); return ResultBean.success(); } - @GetMapping("/drive/{id}/filters") - public ResultBean getFilters(@PathVariable("id") Integer id) { - return ResultBean.success(filterConfigService.findByDriveId(id)); + /** + * 根据驱动器 ID 获取过滤文件列表 + * + * @param driveId + * 驱动器 ID + */ + @GetMapping("/drive/{driveId}/filters") + public ResultBean getFilters(@PathVariable Integer driveId) { + return ResultBean.success(filterConfigService.findByDriveId(driveId)); } - @PostMapping("/drive/{id}/filters") - public ResultBean saveFilters(@RequestBody List filter, @PathVariable("id") Integer driveId) { + + /** + * 停止驱动器 + * + * @param driveId + * 驱动器 ID + */ + @PostMapping("/drive/{driveId}/filters") + public ResultBean saveFilters(@RequestBody List filter, @PathVariable Integer driveId) { filterConfigService.batchSave(filter, driveId); return ResultBean.success(); } + + /** + * 保存拖拽排序信息 + * + * @param driveConfigs + * 拖拽排序信息 + */ @PostMapping("/drive/drag") public ResultBean saveDriveDrag(@RequestBody List driveConfigs) { driveConfigService.saveDriveDrag(driveConfigs); return ResultBean.success(); } + + /** + * 更新驱动器 ID + * + * @param updateId + * 驱动器原 ID + * + * @param newId + * 驱动器新 ID + */ + @PostMapping("/drive/updateId") + public ResultBean updateDriveId(Integer updateId, Integer newId) { + DriveConfig driveConfig = driveConfigService.findById(newId); + if (driveConfig != null) { + return ResultBean.error("已存在的 ID,请更换 ID 后重试。"); + } + driveConfigService.updateId(updateId, newId); + return ResultBean.success(); + } + } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/model/entity/DriveConfig.java b/src/main/java/im/zhaojun/zfile/model/entity/DriveConfig.java index 718eb1b..fe72a20 100644 --- a/src/main/java/im/zhaojun/zfile/model/entity/DriveConfig.java +++ b/src/main/java/im/zhaojun/zfile/model/entity/DriveConfig.java @@ -18,7 +18,6 @@ import javax.persistence.Id; public class DriveConfig { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private Boolean enable; diff --git a/src/main/java/im/zhaojun/zfile/repository/DriverConfigRepository.java b/src/main/java/im/zhaojun/zfile/repository/DriverConfigRepository.java index 10bd3fe..1bbc874 100644 --- a/src/main/java/im/zhaojun/zfile/repository/DriverConfigRepository.java +++ b/src/main/java/im/zhaojun/zfile/repository/DriverConfigRepository.java @@ -26,8 +26,40 @@ public interface DriverConfigRepository extends JpaRepository findByType(StorageTypeEnum type); + /** + * 更新驱动器 ID 的排序值 + * + * @param orderNum + * 排序值 + * + * @param id + * 驱动器 ID + */ @Modifying @Query(value="update DRIVER_CONFIG set orderNum = :orderNum where id = :id") void updateSetOrderNumById(Integer orderNum, Integer id); + + /** + * 查询驱动器最大的 ID + * + * @return 驱动器最大 ID + */ + @Query(nativeQuery = true, value = "select max(id) max from DRIVER_CONFIG") + Integer selectMaxId(); + + + /** + * 更新驱动器 ID + * + * @param updateId + * 驱动器原 ID + * + * @param newId + * 驱动器新 ID + */ + @Modifying + @Query(value="update DRIVER_CONFIG set id = :newId where id = :updateId") + void updateId(Integer updateId, Integer newId); + } \ No newline at end of file diff --git a/src/main/java/im/zhaojun/zfile/repository/StorageConfigRepository.java b/src/main/java/im/zhaojun/zfile/repository/StorageConfigRepository.java index 64ff0aa..834ae50 100644 --- a/src/main/java/im/zhaojun/zfile/repository/StorageConfigRepository.java +++ b/src/main/java/im/zhaojun/zfile/repository/StorageConfigRepository.java @@ -3,6 +3,8 @@ package im.zhaojun.zfile.repository; import im.zhaojun.zfile.model.entity.StorageConfig; import im.zhaojun.zfile.model.enums.StorageTypeEnum; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.List; @@ -68,4 +70,18 @@ public interface StorageConfigRepository extends JpaRepository STORAGE_STRATEGY_CONFIG_CLASS = StorageStrategyConfig.class; + /** * 获取所有驱动器列表 * @@ -74,6 +75,7 @@ public class DriveConfigService { return driverConfigRepository.findAll(example, sort); } + /** * 获取指定驱动器设置 * @@ -127,6 +129,7 @@ public class DriveConfigService { return driveConfigDTO; } + /** * 获取指定驱动器的存储策略. * @@ -141,12 +144,11 @@ public class DriveConfigService { /** - * 新增或设置驱动器设置 + * 更新驱动器设置 * @param driveConfig 驱动器设置 - * @return 保存后的驱动器设置 */ - public DriveConfig saveOrUpdate(DriveConfig driveConfig) { - return driverConfigRepository.save(driveConfig); + public void updateDriveConfig(DriveConfig driveConfig) { + driverConfigRepository.save(driveConfig); } @@ -165,6 +167,11 @@ public class DriveConfigService { DriveConfig driveConfig = new DriveConfig(); StorageTypeEnum storageType = driveConfigDTO.getType(); BeanUtils.copyProperties(driveConfigDTO, driveConfig); + + if (driveConfig.getId() == null) { + Integer nextId = selectNextId(); + driveConfig.setId(nextId); + } driverConfigRepository.save(driveConfig); // 保存存储策略设置. @@ -213,6 +220,38 @@ public class DriveConfigService { } + /** + * 查询驱动器最大的 ID + * + * @return 驱动器最大 ID + */ + public Integer selectNextId() { + Integer maxId = driverConfigRepository.selectMaxId(); + if (maxId == null) { + maxId = 1; + } + + return maxId + 1; + } + + + /** + * 更新驱动器 ID + * + * @param updateId + * 驱动器原 ID + * + * @param newId + * 驱动器新 ID + */ + @Transactional + public void updateId(Integer updateId, Integer newId) { + driverConfigRepository.updateId(updateId, newId); + storageConfigRepository.updateDriveId(updateId, newId); + driveContext.updateDriveId(updateId, newId); + } + + /** * 删除指定驱动器设置, 会级联删除其参数设置 * @@ -269,24 +308,6 @@ public class DriveConfigService { } - /** - * 更新指定驱动器的缓存启用状态 - * - * @param driveId - * 驱动器 ID - * - * @param autoRefreshCache - * 是否启用缓存自动刷新 - */ - public void updateAutoRefreshCacheStatus(Integer driveId, Boolean autoRefreshCache) { - DriveConfig driveConfig = findById(driveId); - if (driveConfig != null) { - driveConfig.setAutoRefreshCache(autoRefreshCache); - driverConfigRepository.save(driveConfig); - } - } - - /** * 获取指定驱动器的缓存信息 * @param driveId diff --git a/src/main/java/im/zhaojun/zfile/service/base/AbstractBaseFileService.java b/src/main/java/im/zhaojun/zfile/service/base/AbstractBaseFileService.java index 5860dcb..e20d82c 100644 --- a/src/main/java/im/zhaojun/zfile/service/base/AbstractBaseFileService.java +++ b/src/main/java/im/zhaojun/zfile/service/base/AbstractBaseFileService.java @@ -144,4 +144,11 @@ public abstract class AbstractBaseFileService implements BaseFileService { */ public abstract FileItemDTO getFileItem(String path); + public Integer getDriveId() { + return driveId; + } + + public void setDriveId(Integer driveId) { + this.driveId = driveId; + } } \ No newline at end of file