Browse Source

1

pull/1/head
吴远 5 months ago
parent
commit
c7d1f95a64
  1. 45
      dk-common/common-oss/pom.xml
  2. 2
      dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
  3. 34
      dk-common/common-oss/src/main/java/org/dromara/common/oss/enumd/HttpsType.java
  4. 39
      dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/Minio.java
  5. 36
      dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java
  6. 52
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java
  7. 24
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceFirmwareController.java
  8. 8
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceHmsController.java
  9. 33
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/WorkspaceController.java
  10. 8
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/WorkspaceDTO.java
  11. 9
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java
  12. 18
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WorkspaceEntity.java
  13. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IWorkspaceService.java
  14. 9
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/WorkspaceServiceImpl.java
  15. 9
      dk-modules/sample/src/main/java/org/dromara/sample/storage/service/impl/StorageServiceImpl.java
  16. 9
      pom.xml

45
dk-common/common-oss/pom.xml

@ -16,9 +16,10 @@
</description>
<dependencies>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>common-json</artifactId>
<artifactId>common-dubbo</artifactId>
</dependency>
<dependency>
@ -53,6 +54,17 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sts</artifactId>
<version>2.28.22</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>url-connection-client</artifactId>
<version>2.28.22</version> <!-- 必须与SDK主版本严格一致 -->
</dependency>
<!-- 使用AWS基于 CRT 的 S3 客户端 -->
<dependency>
@ -72,16 +84,9 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>1.12.261</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sts</artifactId>
<version>1.12.261</version>
<scope>compile</scope>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>
<dependency>
@ -89,6 +94,22 @@
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-oss.version}</version>
</dependency>
</dependencies>
</dependencies>
<repositories>
<repository>
<id>software.amazon.awssdk</id>
<name>software.amazon.awssdk</name>
<url>https://mvnrepository.com/artifact/software.amazon.awssdk/s3/</url>
<releases>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</releases>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>

2
dk-common/common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java

@ -107,6 +107,7 @@ public class OssClient {
S3Configuration config = S3Configuration.builder().chunkedEncodingEnabled(false)
.pathStyleAccessEnabled(isStyle).build();
// 创建 预签名 URL 的生成器 实例,用于生成 S3 预签名 URL
this.presigner = S3Presigner.builder()
.region(of())
@ -114,7 +115,6 @@ public class OssClient {
.endpointOverride(URI.create(getDomain()))
.serviceConfiguration(config)
.build();
// 创建存储桶
createBucket();
} catch (Exception e) {

34
dk-common/common-oss/src/main/java/org/dromara/common/oss/enumd/HttpsType.java

@ -0,0 +1,34 @@
package org.dromara.common.oss.enumd;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* minio策略配置
*
* @author Lion Li
*/
@Getter
@AllArgsConstructor
public enum HttpsType {
/**
*
*/
N("N"),
/**
*
*/
Y("Y"),
HTTP("http://"),
HTTPS("https://");
/**
* 类型
*/
private final String type;
}

39
dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/Minio.java

@ -1,15 +1,24 @@
package org.dromara.common.oss.factory;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.Credentials;
import io.minio.credentials.AssumeRoleProvider;
import io.minio.credentials.Credentials;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.sdk.cloudapi.storage.CredentialsToken;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.sts.StsClient;
import software.amazon.awssdk.services.sts.model.GetFederationTokenRequest;
import software.amazon.awssdk.services.sts.model.GetSessionTokenRequest;
import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse;
import java.net.URI;
import java.security.NoSuchAlgorithmException;
import java.time.Duration;
/**
* @auther wuyuan
@ -20,18 +29,16 @@ public class Minio {
public static CredentialsToken getCredentials(OssClient client) {
try {
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(client.getOssProperties().getEndpoint(), client.getOssProperties().getRegion());
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(client.getOssProperties().getAccessKey(), client.getOssProperties().getSecretKey());
AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(basicAWSCredentials);
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
.withEndpointConfiguration(endpointConfiguration)
.withCredentials(credentialsProvider).build();
Credentials credentials = stsClient.getSessionToken().getCredentials();
return new CredentialsToken(credentials.getAccessKeyId(), credentials.getSecretAccessKey(), credentials.getSessionToken(), client.getOssProperties().getExpire());
} catch (Exception e) {
AssumeRoleProvider provider = new AssumeRoleProvider(client.getIsHttps()+client.getOssProperties().getEndpoint(), client.getOssProperties().getAccessKey(),
client.getOssProperties().getSecretKey(), Math.toIntExact(client.getOssProperties().getExpire()),
null, client.getOssProperties().getRegion(), null, null, null, null);
Credentials credential = provider.fetch();
return new CredentialsToken(credential.accessKey(), credential.secretKey(), credential.sessionToken(), client.getOssProperties().getExpire());
} catch (NoSuchAlgorithmException e) {
log.debug("Failed to obtain sts.");
e.printStackTrace();
}
return null;
}
}

36
dk-common/common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java

@ -1,8 +1,8 @@
package org.dromara.common.oss.factory;
import org.apache.dubbo.common.utils.JsonUtils;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.oss.constant.OssConstant;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.exception.OssException;
@ -47,7 +47,7 @@ public class OssFactory {
if (json == null) {
throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
}
OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
OssProperties properties = JsonUtils.toJavaObject(json, OssProperties.class);
// 使用租户标识避免多个租户相同key实例覆盖
String key = configKey;
if (StringUtils.isNotBlank(properties.getTenantId())) {
@ -71,33 +71,11 @@ public class OssFactory {
return client;
}
public static synchronized CredentialsToken getCredentials(String configKey) {
String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
if (json == null) {
throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");
}
OssProperties properties = JsonUtils.parseObject(json, OssProperties.class);
// 使用租户标识避免多个租户相同key实例覆盖
String key = configKey;
if (StringUtils.isNotBlank(properties.getTenantId())) {
key = properties.getTenantId() + ":" + configKey;
}
OssClient client = CLIENT_CACHE.get(key);
// 客户端不存在或配置不相同则重新构建
if (client == null || !client.checkPropertiesSame(properties)) {
LOCK.lock();
try {
if(OssTypeEnum.ALIYUN.getType().equals(client.getOssProperties().getSThreeType())){
AliyunOss.getCredentials(client);
}else if(OssTypeEnum.MINIO.getType().equals(client.getOssProperties().getSThreeType())){
Minio.getCredentials(client);
}
} catch (Exception e) {
log.debug("Failed to obtain sts.");
e.printStackTrace();
} finally {
LOCK.unlock();
}
public static synchronized CredentialsToken getCredentials(OssClient client) {
if(OssTypeEnum.ALIYUN.getType().equals(client.getOssProperties().getSThreeType())){
return AliyunOss.getCredentials(client);
}else if(OssTypeEnum.MINIO.getType().equals(client.getOssProperties().getSThreeType())){
return Minio.getCredentials(client);
}
return null;
}

52
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java

@ -1,6 +1,11 @@
package org.dromara.sample.manage.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO;
import org.dromara.sample.manage.service.IDeviceService;
@ -35,22 +40,23 @@ public class DeviceController {
* Get the topology list of all online devices in one workspace.
* @return
*/
@GetMapping("/devices")
public HttpResultResponse<List<DeviceDTO>> getDevices() {
LoginUser loginUser = LoginHelper.getLoginUser();
List<DeviceDTO> devicesList = deviceService.getDevicesTopoForWeb(loginUser.getTenantId());
@GetMapping("/{workspace_id}/devices")
@SaCheckPermission("work:spaces:list")
@Operation(summary = "获取一个工作区中所有在线设备的列表。", description = "获取一个工作区中所有在线设备的列表")
public HttpResultResponse<List<DeviceDTO>> getDevices(@PathVariable("workspace_id") String workspaceId) {
List<DeviceDTO> devicesList = deviceService.getDevicesTopoForWeb(workspaceId);
return HttpResultResponse.success(devicesList);
}
/**
* 绑定设备
* 将设备绑定到工作区只能web查看
* After binding the device to the workspace, the device data can only be seen on the web.
* @param device
* @param deviceSn
* @return
*/
@PostMapping("/{device_sn}/binding")
@Operation(summary = "获取一个工作区中所有在线设备的列表。", description = "获取一个工作区中所有在线设备的列表")
public HttpResultResponse bindDevice(@RequestBody DeviceDTO device, @PathVariable("device_sn") String deviceSn) {
device.setDeviceSn(deviceSn);
boolean isUpd = deviceService.bindDevice(device);
@ -63,11 +69,12 @@ public class DeviceController {
* @param deviceSn
* @return
*/
@GetMapping("/devices/{device_sn}")
public HttpResultResponse getDevice(
@GetMapping("/{workspace_id}/devices/{device_sn}")
@Operation(summary = "根据设备sn获取设备信息。", description = "根据设备sn获取设备信息。")
public HttpResultResponse getDevice(@PathVariable("workspace_id") String workspaceId,
@PathVariable("device_sn") String deviceSn) {
Optional<DeviceDTO> deviceOpt = deviceService.getDeviceBySn(deviceSn);
return deviceOpt.isEmpty() ? HttpResultResponse.error("device not found.") : HttpResultResponse.success(deviceOpt.get());
return deviceOpt.isEmpty() ? HttpResultResponse.error("找不到该设备。") : HttpResultResponse.success(deviceOpt.get());
}
/**
@ -77,23 +84,25 @@ public class DeviceController {
* @param pageSize
* @return
*/
@GetMapping("/devices/bound")
@Operation(summary = "在工作区中获取绑定设备列表。", description = "在工作区中获取绑定设备列表。")
@GetMapping("/{workspace_id}/devices/bound")
public HttpResultResponse<PaginationData<DeviceDTO>> getBoundDevicesWithDomain(
Integer domain,
@PathVariable("workspace_id") String workspaceId,Integer domain,
@RequestParam(defaultValue = "1") Long page,
@RequestParam(value = "page_size", defaultValue = "50") Long pageSize) {
LoginUser loginUser = LoginHelper.getLoginUser();
PaginationData<DeviceDTO> devices = deviceService.getBoundDevicesWithDomain(loginUser.getTenantId(), page, pageSize, domain);
PaginationData<DeviceDTO> devices = deviceService.getBoundDevicesWithDomain(workspaceId, page, pageSize, domain);
return HttpResultResponse.success(devices);
}
/**
* 正在删除设备的绑定状态
* 删除设备的绑定状态
* Removing the binding state of the device.
* @param deviceSn
* @return
*/
@Operation(summary = "删除设备的绑定状态。", description = "删除设备的绑定状态。")
@DeleteMapping("/{device_sn}/unbinding")
public HttpResultResponse unbindingDevice(@PathVariable("device_sn") String deviceSn) {
deviceService.unbindDevice(deviceSn);
@ -108,7 +117,9 @@ public class DeviceController {
* @return
*/
@PutMapping("/devices/{device_sn}")
@Operation(summary = "更新设备信息。", description = "更新设备信息。")
public HttpResultResponse updateDevice(@RequestBody DeviceDTO device,
@PathVariable("workspace_id") String workspaceId,
@PathVariable("device_sn") String deviceSn) {
device.setDeviceSn(deviceSn);
boolean isUpd = deviceService.updateDevice(device);
@ -121,11 +132,11 @@ public class DeviceController {
* @param upgradeDTOS
* @return
*/
@Operation(summary = "设备离线固件升级任务。", description = "设备离线固件升级任务。")
@PostMapping("/devices/ota")
public HttpResultResponse createOtaJob(
public HttpResultResponse createOtaJob(@PathVariable("workspace_id") String workspaceId,
@RequestBody List<DeviceFirmwareUpgradeDTO> upgradeDTOS) {
LoginUser loginUser = LoginHelper.getLoginUser();
return deviceService.createDeviceOtaJob(loginUser.getTenantId(), upgradeDTOS);
return deviceService.createDeviceOtaJob(workspaceId, upgradeDTOS);
}
/**
@ -135,15 +146,16 @@ public class DeviceController {
* @param param
* @return
*/
@PutMapping("/devices/{device_sn}/property")
public HttpResultResponse devicePropertySet(@PathVariable("device_sn") String dockSn,
@Operation(summary = "设置无人机的属性参数。", description = "设置无人机的属性参数。")
@PutMapping("/{workspace_id}/devices/{device_sn}/property")
public HttpResultResponse devicePropertySet(@PathVariable("workspace_id") String workspaceId,
@PathVariable("device_sn") String dockSn,
@RequestBody JsonNode param) {
LoginUser loginUser = LoginHelper.getLoginUser();
if (param.size() != 1) {
return HttpResultResponse.error(CloudSDKErrorEnum.INVALID_PARAMETER);
}
int result = deviceService.devicePropertySet(loginUser.getTenantId(), dockSn, param);
int result = deviceService.devicePropertySet(workspaceId, dockSn, param);
return PropertySetReplyResultEnum.SUCCESS.getResult() == result ?
HttpResultResponse.success() : HttpResultResponse.error(result, String.valueOf(result));
}

24
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceFirmwareController.java

@ -1,5 +1,6 @@
package org.dromara.sample.manage.controller;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
@ -44,6 +45,7 @@ public class DeviceFirmwareController {
* @return
*/
@GetMapping("/firmware-release-notes/latest")
@Operation(summary = "获取此设备型号的最新固件版本信息。", description = "获取此设备型号的最新固件版本信息。")
public HttpResultResponse<List<DeviceFirmwareNoteDTO>> getLatestFirmwareNote(@RequestParam("device_name") List<String> deviceNames) {
List<DeviceFirmwareNoteDTO> releaseNotes = deviceNames.stream()
@ -61,11 +63,12 @@ public class DeviceFirmwareController {
* @param param
* @return
*/
@GetMapping("/firmwares")
@GetMapping("/{workspace_id}/firmwares")
@Operation(summary = "根据参数查询固件信息。", description = "根据参数查询固件信息。")
public HttpResultResponse<PaginationData<DeviceFirmwareDTO>> getAllFirmwarePagination(
@PathVariable("workspace_id") String workspaceId,
@Valid DeviceFirmwareQueryParam param) {
LoginUser loginUser = LoginHelper.getLoginUser();
PaginationData<DeviceFirmwareDTO> data = service.getAllFirmwarePagination(loginUser.getTenantId(), param);
PaginationData<DeviceFirmwareDTO> data = service.getAllFirmwarePagination(workspaceId, param);
return HttpResultResponse.success(data);
}
@ -77,17 +80,19 @@ public class DeviceFirmwareController {
* @param param
* @return
*/
@PostMapping("/firmwares/file/upload")
@Operation(summary = "导入固件文件以进行设备升级。", description = "导入固件文件以进行设备升级。")
@PostMapping("/{workspace_id}/firmwares/file/upload")
public HttpResultResponse importFirmwareFile(HttpServletRequest request,
@NotNull(message = "No file received.") MultipartFile file,
@PathVariable("workspace_id") String workspaceId,
@NotNull(message = "未收到文件。") MultipartFile file,
@Valid DeviceFirmwareUploadParam param) {
if (!file.getOriginalFilename().endsWith(FirmwareFileProperties.FIRMWARE_FILE_SUFFIX)) {
return HttpResultResponse.error("The file format is incorrect.");
return HttpResultResponse.error("文件格式不正确。");
}
LoginUser loginUser = LoginHelper.getLoginUser();
String creator = loginUser.getUsername();
service.importFirmwareFile(loginUser.getTenantId(), creator, param, file);
service.importFirmwareFile(workspaceId, creator, param, file);
return HttpResultResponse.success();
}
@ -98,8 +103,9 @@ public class DeviceFirmwareController {
* @param param
* @return
*/
@PutMapping("/firmwares/{firmware_id}")
public HttpResultResponse changeFirmwareStatus(
@Operation(summary = "更改固件一致性状态。", description = "更改固件一致性状态。")
@PutMapping("/{workspace_id}/firmwares/{firmware_id}")
public HttpResultResponse changeFirmwareStatus(@PathVariable("workspace_id") String workspaceId,
@PathVariable("firmware_id") String firmwareId,
@Valid @RequestBody DeviceFirmwareUpdateParam param) {
service.updateFirmwareInfo(DeviceFirmwareDTO.builder()

8
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceHmsController.java

@ -32,8 +32,8 @@ public class DeviceHmsController {
* @param param
* @return
*/
@GetMapping("/devices/hms")
public HttpResultResponse<PaginationData<DeviceHmsDTO>> getHmsInformation(DeviceHmsQueryParam param) {
@GetMapping("/{workspace_id}/devices/hms")
public HttpResultResponse<PaginationData<DeviceHmsDTO>> getHmsInformation( @PathVariable("workspace_id") String workspaceId,DeviceHmsQueryParam param) {
PaginationData<DeviceHmsDTO> devices = deviceHmsService.getDeviceHmsByParam(param);
return HttpResultResponse.success(devices);
@ -45,7 +45,7 @@ public class DeviceHmsController {
* @param deviceSn
* @return
*/
@PutMapping("/devices/hms/{device_sn}")
@PutMapping("/{workspace_id}/devices/hms/{device_sn}")
public HttpResultResponse updateReadHmsByDeviceSn(@PathVariable("device_sn") String deviceSn) {
deviceHmsService.updateUnreadHms(deviceSn);
return HttpResultResponse.success();
@ -57,7 +57,7 @@ public class DeviceHmsController {
* @param deviceSn
* @return
*/
@GetMapping("/devices/hms/{device_sn}")
@GetMapping("/{workspace_id}/devices/hms/{device_sn}")
public HttpResultResponse<List<DeviceHmsDTO>> getUnreadHmsByDeviceSn(@PathVariable("device_sn") String deviceSn) {
PaginationData<DeviceHmsDTO> paginationData = deviceHmsService.getDeviceHmsByParam(
DeviceHmsQueryParam.builder()

33
dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/WorkspaceController.java

@ -1,15 +1,22 @@
package org.dromara.sample.manage.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import org.dromara.common.core.domain.R;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.web.core.BaseController;
import org.dromara.sample.manage.model.dto.WorkspaceDTO;
import org.dromara.sample.manage.model.entity.WorkspaceEntity;
import org.dromara.sample.manage.service.IWorkspaceService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Optional;
@ -21,7 +28,7 @@ import java.util.Optional;
*/
@RestController
@RequestMapping("${url.manage.prefix}${url.manage.version}/workspaces")
public class WorkspaceController {
public class WorkspaceController extends BaseController {
@Autowired
private IWorkspaceService workspaceService;
@ -33,10 +40,28 @@ public class WorkspaceController {
* @return
*/
@GetMapping("/current")
@SaCheckPermission("work:spaces:list")
@Operation(summary = "获取当前用户所在工作区的相关信息。", description = "工作区配置无人机所用,绑定到平台需要工作区")
public HttpResultResponse getCurrentWorkspace(HttpServletRequest request) {
LoginUser loginUser = LoginHelper.getLoginUser();
String tenantId = loginUser.getTenantId();
Optional<WorkspaceDTO> workspaceOpt = workspaceService.getWorkspaceByTenantId(tenantId);
return workspaceOpt.isEmpty() ? HttpResultResponse.error() : HttpResultResponse.success(workspaceOpt.get());
}
/**
* 新增工作区
* Gets information about the workspace that the current user is in.
* @param request
* @return
*/
@PostMapping("/add")
@SaCheckPermission("work:spaces:add")
@Operation(summary = "新增工作区。", description = "新增工作区主要是组织号",
parameters = {
@Parameter(name = "workspaceDTO", description = "workspaceDTO"),
})
public HttpResultResponse addCurrentWorkspace(HttpServletRequest request, @Validated @RequestBody WorkspaceDTO workspaceDTO) {
return workspaceService.insertCurrentWorkspace(workspaceDTO) > 0 ? HttpResultResponse.success() : HttpResultResponse.error();
}
}

8
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/WorkspaceDTO.java

@ -1,5 +1,7 @@
package org.dromara.sample.manage.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -18,13 +20,19 @@ public class WorkspaceDTO {
private Integer id;
@Pattern(regexp = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
@Schema(description = "workspaceId,设备区域标识id", format = "uuid")
private String workspaceId;
@Schema(description = "workspaceName,工作区标识id")
private String workspaceName;
@Schema(description = "workspaceName,工作区标识id")
private String workspaceDesc;
@Schema(description = "platformName,工作区的平台名称")
private String platformName;
@Schema(description = "bindCode,设备编码")
private String bindCode;
}

9
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/DeviceEntity.java

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* The entity class of the device
@ -52,11 +53,11 @@ public class DeviceEntity implements Serializable {
@TableField(value = "child_sn")
private String childSn;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Long createTime;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Long updateTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@TableField(value = "device_desc")
private String deviceDesc;

18
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/entity/WorkspaceEntity.java

@ -1,36 +1,40 @@
package org.dromara.sample.manage.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serializable;
@TableName(value = "manage_workspace")
@Data
public class WorkspaceEntity implements Serializable {
public class WorkspaceEntity extends TenantEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
@TableField(value = "workspace_id")
@Pattern(regexp = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
@Schema(description = "workspaceId,设备区域标识id", format = "uuid")
private String workspaceId;
@TableField(value = "workspace_name")
@Schema(description = "workspaceName,工作区标识id")
private String workspaceName;
@TableField(value = "workspace_desc")
@Schema(description = "workspaceDesc,工作区描述")
private String workspaceDesc;
@TableField(value = "platform_name")
@Schema(description = "platformName,工作区的平台名称")
private String platformName;
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Long createTime;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Long updateTime;
@TableField(value = "bind_code")
@Schema(description = "bindCode,设备编码")
private String bindCode;

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IWorkspaceService.java

@ -23,4 +23,6 @@ public interface IWorkspaceService {
*/
Optional<WorkspaceDTO> getWorkspaceNameByBindCode(String bindCode);
int insertCurrentWorkspace(WorkspaceDTO workspaceDTO);
}

9
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/WorkspaceServiceImpl.java

@ -1,6 +1,7 @@
package org.dromara.sample.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.sample.manage.mapper.IWorkspaceMapper;
import org.dromara.sample.manage.model.dto.WorkspaceDTO;
import org.dromara.sample.manage.model.entity.WorkspaceEntity;
@ -35,7 +36,7 @@ public class WorkspaceServiceImpl implements IWorkspaceService {
return Optional.ofNullable(entityConvertToDto(
mapper.selectOne(
new LambdaQueryWrapper<WorkspaceEntity>()
.eq(WorkspaceEntity::getWorkspaceId, tenantId))));
.eq(WorkspaceEntity::getTenantId, tenantId))));
}
@Override
@ -44,6 +45,12 @@ public class WorkspaceServiceImpl implements IWorkspaceService {
mapper.selectOne(new LambdaQueryWrapper<WorkspaceEntity>().eq(WorkspaceEntity::getBindCode, bindCode))));
}
@Override
public int insertCurrentWorkspace(WorkspaceDTO workspaceDTO) {
WorkspaceEntity workspaceEntity = MapstructUtils.convert(workspaceDTO, WorkspaceEntity.class);
return mapper.insert(workspaceEntity);
}
/**
* Convert database entity objects into workspace data transfer object.
* @param entity

9
dk-modules/sample/src/main/java/org/dromara/sample/storage/service/impl/StorageServiceImpl.java

@ -9,6 +9,7 @@ import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder
import com.amazonaws.services.securitytoken.model.Credentials;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.enumd.HttpsType;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.sdk.cloudapi.media.StorageConfigGet;
import org.dromara.common.sdk.cloudapi.media.api.AbstractMediaService;
@ -35,11 +36,11 @@ public class StorageServiceImpl extends AbstractMediaService implements IStorage
@Override
public StsCredentialsResponse getSTSCredentials() {
OssClient ossClient = OssFactory.instance("media_file");
OssClient ossClient = OssFactory.instance("mediafile");
return new StsCredentialsResponse()
.setEndpoint(ossClient.getOssProperties().getEndpoint())
.setBucket("media_file")
.setCredentials(OssFactory.getCredentials("media_file"))
.setEndpoint(ossClient.getIsHttps()+ossClient.getOssProperties().getEndpoint())
.setBucket("mediafile")
.setCredentials(OssFactory.getCredentials(ossClient))
.setProvider(OssTypeEnum.fromType(ossClient.getOssProperties().getSThreeType()))
.setObjectKeyPrefix(ossClient.getOssProperties().getPrefix())
.setRegion(ossClient.getOssProperties().getRegion());

9
pom.xml

@ -51,6 +51,7 @@
<!-- OSS 配置 -->
<aws.sdk.version>2.28.22</aws.sdk.version>
<aws.crt.version>0.31.3</aws.crt.version>
<minio.version>8.3.7</minio.version>
<!-- SMS 配置 -->
<sms4j.version>3.3.3</sms4j.version>
@ -82,12 +83,12 @@
<properties>
<!-- 环境标识,需要与配置文件的名称相对应 -->
<profiles.active>dev</profiles.active>
<nacos.server>114.235.183.147:8848</nacos.server>
<nacos.server>127.0.0.1:8848</nacos.server>
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
<nacos.config.group>DEFAULT_GROUP</nacos.config.group>
<nacos.username>nacos</nacos.username>
<nacos.password>nacos</nacos.password>
<logstash.address>114.235.183.147:4560</logstash.address>
<logstash.address>127.0.0.1:4560</logstash.address>
</properties>
<activation>
<!-- 默认环境 -->
@ -98,12 +99,12 @@
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<nacos.server>114.235.183.147:8848</nacos.server>
<nacos.server>127.0.0.1:8848</nacos.server>
<nacos.discovery.group>DEFAULT_GROUP</nacos.discovery.group>
<nacos.config.group>DEFAULT_GROUP</nacos.config.group>
<nacos.username>nacos</nacos.username>
<nacos.password>nacos</nacos.password>
<logstash.address>114.235.183.147:4560</logstash.address>
<logstash.address>127.0.0.1:4560</logstash.address>
</properties>
</profile>
</profiles>

Loading…
Cancel
Save