资源管理模块优化
This commit is contained in:
@@ -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)));
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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.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(),
|
||||||
|
|||||||
@@ -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>
|
||||||
Reference in New Issue
Block a user