资源管理模块优化
This commit is contained in:
@@ -54,7 +54,7 @@ public class PlatformCompanyAdminController {
|
||||
return Result.success(UserResponse.from(userService.createCompanyAdmin(UserContext.requireUser(), request)));
|
||||
}
|
||||
|
||||
@Operation(summary = "创建系统工程师管理员")
|
||||
@Operation(summary = "创建系统管理员")
|
||||
@PostMapping("/system-engineer")
|
||||
public Result<UserResponse> createSystemEngineerAdmin(@Valid @RequestBody CreateSystemEngineerAdminRequest request) {
|
||||
return Result.success(UserResponse.from(userService.createSystemEngineerAdmin(UserContext.requireUser(), request)));
|
||||
|
||||
@@ -37,7 +37,7 @@ public class SourceResourceController {
|
||||
|
||||
@Operation(summary = "分页查询资源")
|
||||
@GetMapping
|
||||
public Result<PageResult<SourceResourceResponse>> page(@ParameterObject SourceResourcePageQuery query) {
|
||||
public Result<PageResult<SourceResourceResponse>> page(@ParameterObject @ModelAttribute SourceResourcePageQuery query) {
|
||||
return Result.success(sourceResourceService.pageResources(UserContext.requireUser(), query));
|
||||
}
|
||||
|
||||
|
||||
@@ -8,4 +8,6 @@ import org.apache.ibatis.annotations.Param;
|
||||
public interface SourceResourceMapper extends BaseMapper<SourceResource> {
|
||||
|
||||
List<SourceResource> selectByCompanyIdAndIds(@Param("companyId") Long companyId, @Param("resourceIds") List<Long> resourceIds);
|
||||
|
||||
SourceResource selectByCompanyIdAndResourceName(@Param("companyId") Long companyId, @Param("resourceName") String resourceName);
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.labelsys.backend.service;
|
||||
|
||||
import org.springframework.boot.context.event.ApplicationReadyEvent;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.labelsys.backend.config.ObjectStorageProperties;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import software.amazon.awssdk.services.s3.S3Client;
|
||||
import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
|
||||
import software.amazon.awssdk.services.s3.model.HeadBucketRequest;
|
||||
import software.amazon.awssdk.services.s3.model.NoSuchBucketException;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class ObjectStorageInitializer {
|
||||
|
||||
private final S3Client s3Client;
|
||||
private final ObjectStorageProperties properties;
|
||||
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
public void initializeBuckets() {
|
||||
log.info("开始初始化对象存储桶...");
|
||||
|
||||
String[] buckets = {
|
||||
properties.getSourceBucket(),
|
||||
properties.getArtifactBucket(),
|
||||
properties.getExportBucket()
|
||||
};
|
||||
|
||||
for (String bucketName : buckets) {
|
||||
try {
|
||||
if (!bucketExists(bucketName)) {
|
||||
createBucket(bucketName);
|
||||
log.info("成功创建存储桶: {}", bucketName);
|
||||
} else {
|
||||
log.info("存储桶已存在: {}", bucketName);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("初始化存储桶 {} 失败: {}", bucketName, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
log.info("对象存储桶初始化完成");
|
||||
}
|
||||
|
||||
private boolean bucketExists(String bucketName) {
|
||||
try {
|
||||
s3Client.headBucket(HeadBucketRequest.builder().bucket(bucketName).build());
|
||||
return true;
|
||||
} catch (NoSuchBucketException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private void createBucket(String bucketName) {
|
||||
s3Client.createBucket(CreateBucketRequest.builder().bucket(bucketName).build());
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.labelsys.backend.common.ResultCode;
|
||||
import com.labelsys.backend.common.exception.BusinessException;
|
||||
import com.labelsys.backend.config.ObjectStorageProperties;
|
||||
import com.labelsys.backend.context.LoginUser;
|
||||
import com.labelsys.backend.dto.common.PageResult;
|
||||
import com.labelsys.backend.dto.request.SourceResourcePageQuery;
|
||||
@@ -53,6 +52,14 @@ public class SourceResourceService {
|
||||
if (!ResourceType.isValid(request.getResourceType())) {
|
||||
throw new BusinessException(ResultCode.BAD_REQUEST, "资源类型非法");
|
||||
}
|
||||
String resourceName =
|
||||
StringUtils.hasText(request.getResourceName()) ? request.getResourceName() : file.getOriginalFilename();
|
||||
SourceResource existingResource =
|
||||
sourceResourceMapper.selectByCompanyIdAndResourceName(currentUser.companyId(), resourceName);
|
||||
if (existingResource != null) {
|
||||
throw new BusinessException(ResultCode.BAD_REQUEST, "资源名称已存在:" + resourceName);
|
||||
}
|
||||
|
||||
long resourceId = IdGenerator.nextId();
|
||||
String extension = resolveExtension(file.getOriginalFilename(), request.getResourceType());
|
||||
String objectKey = ObjectStoragePathBuilder.sourceObjectKey(currentUser.companyId(), request.getResourceType(),
|
||||
|
||||
@@ -27,4 +27,8 @@
|
||||
and id in <foreach collection="resourceIds" item="resourceId" open="(" separator=","
|
||||
close=")"> #{resourceId} </foreach>
|
||||
</select>
|
||||
|
||||
<select id="selectByCompanyIdAndResourceName" resultMap="SourceResourceResultMap"> SELECT <include
|
||||
refid="SourceResourceColumns" /> FROM source_resource WHERE company_id = #{companyId}
|
||||
AND resource_name = #{resourceName} LIMIT 1 </select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user