资源管理模块优化

This commit is contained in:
wh
2026-04-27 23:22:14 +08:00
parent 79812b2c77
commit d404c7d187
6 changed files with 78 additions and 3 deletions

View File

@@ -54,7 +54,7 @@ public class PlatformCompanyAdminController {
return Result.success(UserResponse.from(userService.createCompanyAdmin(UserContext.requireUser(), request))); return Result.success(UserResponse.from(userService.createCompanyAdmin(UserContext.requireUser(), request)));
} }
@Operation(summary = "创建系统工程师管理员") @Operation(summary = "创建系统管理员")
@PostMapping("/system-engineer") @PostMapping("/system-engineer")
public Result<UserResponse> createSystemEngineerAdmin(@Valid @RequestBody CreateSystemEngineerAdminRequest request) { public Result<UserResponse> createSystemEngineerAdmin(@Valid @RequestBody CreateSystemEngineerAdminRequest request) {
return Result.success(UserResponse.from(userService.createSystemEngineerAdmin(UserContext.requireUser(), request))); return Result.success(UserResponse.from(userService.createSystemEngineerAdmin(UserContext.requireUser(), request)));

View File

@@ -37,7 +37,7 @@ public class SourceResourceController {
@Operation(summary = "分页查询资源") @Operation(summary = "分页查询资源")
@GetMapping @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)); return Result.success(sourceResourceService.pageResources(UserContext.requireUser(), query));
} }

View File

@@ -8,4 +8,6 @@ import org.apache.ibatis.annotations.Param;
public interface SourceResourceMapper extends BaseMapper<SourceResource> { public interface SourceResourceMapper extends BaseMapper<SourceResource> {
List<SourceResource> selectByCompanyIdAndIds(@Param("companyId") Long companyId, @Param("resourceIds") List<Long> resourceIds); List<SourceResource> selectByCompanyIdAndIds(@Param("companyId") Long companyId, @Param("resourceIds") List<Long> resourceIds);
SourceResource selectByCompanyIdAndResourceName(@Param("companyId") Long companyId, @Param("resourceName") String resourceName);
} }

View File

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

View File

@@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.labelsys.backend.common.ResultCode; import com.labelsys.backend.common.ResultCode;
import com.labelsys.backend.common.exception.BusinessException; import com.labelsys.backend.common.exception.BusinessException;
import com.labelsys.backend.config.ObjectStorageProperties;
import com.labelsys.backend.context.LoginUser; import com.labelsys.backend.context.LoginUser;
import com.labelsys.backend.dto.common.PageResult; import com.labelsys.backend.dto.common.PageResult;
import com.labelsys.backend.dto.request.SourceResourcePageQuery; import com.labelsys.backend.dto.request.SourceResourcePageQuery;
@@ -53,6 +52,14 @@ public class SourceResourceService {
if (!ResourceType.isValid(request.getResourceType())) { if (!ResourceType.isValid(request.getResourceType())) {
throw new BusinessException(ResultCode.BAD_REQUEST, "资源类型非法"); 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(); long resourceId = IdGenerator.nextId();
String extension = resolveExtension(file.getOriginalFilename(), request.getResourceType()); String extension = resolveExtension(file.getOriginalFilename(), request.getResourceType());
String objectKey = ObjectStoragePathBuilder.sourceObjectKey(currentUser.companyId(), request.getResourceType(), String objectKey = ObjectStoragePathBuilder.sourceObjectKey(currentUser.companyId(), request.getResourceType(),

View File

@@ -27,4 +27,8 @@
and id in <foreach collection="resourceIds" item="resourceId" open="(" separator="," and id in <foreach collection="resourceIds" item="resourceId" open="(" separator=","
close=")"> #{resourceId} </foreach> close=")"> #{resourceId} </foreach>
</select> </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> </mapper>