支持修改驱动器 ID

This commit is contained in:
zhaojun1998
2021-01-23 13:35:52 +08:00
parent e8c249b9ea
commit 34647793c8
7 changed files with 178 additions and 46 deletions

View File

@@ -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);
}
}

View File

@@ -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<FilterConfig> filter, @PathVariable("id") Integer driveId) {
/**
* 停止驱动器
*
* @param driveId
* 驱动器 ID
*/
@PostMapping("/drive/{driveId}/filters")
public ResultBean saveFilters(@RequestBody List<FilterConfig> filter, @PathVariable Integer driveId) {
filterConfigService.batchSave(filter, driveId);
return ResultBean.success();
}
/**
* 保存拖拽排序信息
*
* @param driveConfigs
* 拖拽排序信息
*/
@PostMapping("/drive/drag")
public ResultBean saveDriveDrag(@RequestBody List<JSONObject> 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();
}
}

View File

@@ -18,7 +18,6 @@ import javax.persistence.Id;
public class DriveConfig {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private Boolean enable;

View File

@@ -26,8 +26,40 @@ public interface DriverConfigRepository extends JpaRepository<DriveConfig, Integ
List<DriveConfig> 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);
}

View File

@@ -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<StorageConfig, In
*/
StorageConfig findByDriveIdAndKey(Integer driveId, String key);
/**
* 更新驱动器 ID 对应的参数设置为新的驱动器 ID
*
* @param updateId
* 驱动器原 ID
*
* @param newId
* 驱动器新 ID
*/
@Modifying
@Query(value="update STORAGE_CONFIG set driveId = :newId where driveId = :updateId")
void updateDriveId(Integer updateId, Integer newId);
}

View File

@@ -50,6 +50,7 @@ public class DriveConfigService {
public static final Class<StorageStrategyConfig> 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

View File

@@ -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;
}
}