Browse Source

Merge remote-tracking branch 'origin/dev' into dev

pull/6/head
杨威 1 month ago
parent
commit
5a88dc5b6d
  1. 3
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java
  2. 14
      dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java
  3. 1
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java
  4. 1
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java
  5. 35
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java
  6. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/PayloadCommandsHandler.java
  7. 1
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java
  8. 15
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java
  9. 33
      dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java
  10. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java
  11. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceQrtzDTO.java
  12. 2
      dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceQueryParam.java
  13. 4
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java
  14. 38
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java
  15. 4
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java
  16. 13
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
  17. 14
      dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java
  18. 4
      dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java
  19. 3
      dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java
  20. 6
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java
  21. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java
  22. 22
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
  23. 19
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  24. 29
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java
  25. 35
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java
  26. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java
  27. 3
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java
  28. 2
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java
  29. 3
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java
  30. 9
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java
  31. 4
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java
  32. 20
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java
  33. 15
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java
  34. 53
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java
  35. 21
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java
  36. 6
      dk-modules/sample/src/main/resources/mapper/DeviceQrtzMapper.xml
  37. 18
      dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml

3
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java

@ -70,9 +70,10 @@ public interface IHttpMediaService {
value = "{\"code\": 0, \"message\":\"success\", \"data\": \"media/DJI_20220831151616_0004_W_Waypoint4.JPG\"}" value = "{\"code\": 0, \"message\":\"success\", \"data\": \"media/DJI_20220831151616_0004_W_Waypoint4.JPG\"}"
)}))) )})))
@PostMapping(PREFIX + "/workspaces/{workspace_id}/upload-callback") @PostMapping(PREFIX + "/workspaces/{workspace_id}/{pro_id}/upload-callback")
HttpResultResponse<String> mediaUploadCallback( HttpResultResponse<String> mediaUploadCallback(
@PathVariable(name = "workspace_id") String workspaceId, @PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "pro_id") Integer proId,
@Valid @RequestBody MediaUploadCallbackRequest request, @Valid @RequestBody MediaUploadCallbackRequest request,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);

14
dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java

@ -45,9 +45,21 @@ public interface IHttpWaylineService {
@Parameter(name = "workspace_id", description = "workspace_id", schema = @Schema(format = "uuid")) @Parameter(name = "workspace_id", description = "workspace_id", schema = @Schema(format = "uuid"))
}) })
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines") @GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines")
HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList( HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylines(
@Valid @ParameterObject GetWaylineListRequest request, @Valid @ParameterObject GetWaylineListRequest request,
@PathVariable(name = "workspace_id") String workspaceId, @PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "proIds",required = false) List<Integer> proIds,
HttpServletRequest req, HttpServletResponse rsp);
@Operation(summary = "获取航线路线列表", description = "根据查询条件査询路线文件的基本数据。飞行员中的查询条件字段是固定的。",
parameters = {
@Parameter(name = "workspace_id", description = "workspace_id", schema = @Schema(format = "uuid"))
})
@GetMapping(PREFIX + "/workspaces/{workspace_id}/waylinesList")
HttpResultResponse<List<GetWaylineListResponse>> getWaylineList(
@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "pro_id",required = false) Integer proId,
HttpServletRequest req, HttpServletResponse rsp); HttpServletRequest req, HttpServletResponse rsp);
/** /**

1
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java

@ -198,6 +198,7 @@ public class BusinessAlertStatisticsController extends BaseController {
@Operation(summary="预警对比统计(预警状态)", description="预警对比统计(预警状态)") @Operation(summary="预警对比统计(预警状态)", description="预警对比统计(预警状态)")
@GetMapping(value = "/compare/status/count") @GetMapping(value = "/compare/status/count")
public R<List<Map<String, Object>>> countAlertStatusCompare(BusinessAlertBo businessAlertBo) { public R<List<Map<String, Object>>> countAlertStatusCompare(BusinessAlertBo businessAlertBo) {
return R.ok(statisticsService.countAlertStatusCompare(businessAlertBo)); return R.ok(statisticsService.countAlertStatusCompare(businessAlertBo));
} }

1
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java

@ -311,7 +311,6 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService {
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
/** /**
* 查询当前用户待办预警 * 查询当前用户待办预警
* @param bo * @param bo

35
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java

@ -3,19 +3,18 @@ package org.dromara.sample.control.service.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.control.*;
import org.dromara.common.sdk.cloudapi.wayline.OutOfControlActionEnum; import org.dromara.common.sdk.cloudapi.wayline.OutOfControlActionEnum;
import org.dromara.common.sdk.cloudapi.wayline.TaskTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.TaskTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum;
import org.dromara.sample.control.model.enums.PayloadCommandsEnum;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDevicePayloadService; import org.dromara.sample.manage.service.IDevicePayloadService;
import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.IDeviceService;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.sdk.cloudapi.control.FlyToPointRequest;
import org.dromara.common.sdk.cloudapi.control.PayloadAuthorityGrabRequest;
import org.dromara.common.sdk.cloudapi.control.TakeoffToPointRequest;
import org.dromara.common.sdk.cloudapi.control.api.AbstractControlService; import org.dromara.common.sdk.cloudapi.control.api.AbstractControlService;
import org.dromara.common.sdk.cloudapi.debug.DebugMethodEnum; import org.dromara.common.sdk.cloudapi.debug.DebugMethodEnum;
import org.dromara.common.sdk.cloudapi.debug.api.AbstractDebugService; import org.dromara.common.sdk.cloudapi.debug.api.AbstractDebugService;
@ -32,6 +31,8 @@ import org.dromara.sample.control.model.enums.DroneAuthorityEnum;
import org.dromara.sample.control.model.enums.RemoteDebugMethodEnum; import org.dromara.sample.control.model.enums.RemoteDebugMethodEnum;
import org.dromara.sample.control.model.param.*; import org.dromara.sample.control.model.param.*;
import org.dromara.sample.control.service.IControlService; import org.dromara.sample.control.service.IControlService;
import org.dromara.sample.media.model.MediaFileCountDTO;
import org.dromara.sample.media.service.IMediaRedisService;
import org.dromara.sample.wayline.mapper.IWaylineJobMapper; import org.dromara.sample.wayline.mapper.IWaylineJobMapper;
import org.dromara.sample.wayline.model.entity.WaylineJobEntity; import org.dromara.sample.wayline.model.entity.WaylineJobEntity;
import org.dromara.sample.wayline.model.enums.WaylineJobStatusEnum; import org.dromara.sample.wayline.model.enums.WaylineJobStatusEnum;
@ -41,10 +42,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.*;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import static org.dromara.common.sdk.cloudapi.device.RcLostActionEnum.RETURN_HOME; import static org.dromara.common.sdk.cloudapi.device.RcLostActionEnum.RETURN_HOME;
import static org.dromara.common.sdk.cloudapi.wayline.WaylineMethodEnum.RETURN_HOME_CANCEL; import static org.dromara.common.sdk.cloudapi.wayline.WaylineMethodEnum.RETURN_HOME_CANCEL;
@ -85,6 +83,9 @@ public class ControlServiceImpl implements IControlService {
@Autowired @Autowired
private IWaylineJobMapper waylineJobMapper; private IWaylineJobMapper waylineJobMapper;
@Autowired
private IMediaRedisService mediaRedisService;
private RemoteDebugHandler checkDebugCondition(String sn, RemoteDebugParam param, RemoteDebugMethodEnum controlMethodEnum) { private RemoteDebugHandler checkDebugCondition(String sn, RemoteDebugParam param, RemoteDebugMethodEnum controlMethodEnum) {
RemoteDebugHandler handler = Objects.nonNull(controlMethodEnum.getClazz()) ? RemoteDebugHandler handler = Objects.nonNull(controlMethodEnum.getClazz()) ?
mapper.convertValue(Objects.nonNull(param) ? param : new Object(), controlMethodEnum.getClazz()) mapper.convertValue(Objects.nonNull(param) ? param : new Object(), controlMethodEnum.getClazz())
@ -198,7 +199,14 @@ public class ControlServiceImpl implements IControlService {
waylineJobEntity.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME.getAction()); waylineJobEntity.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME.getAction());
waylineJobEntity.setRthAltitude(param.getRthAltitude()); waylineJobEntity.setRthAltitude(param.getRthAltitude());
waylineJobEntity.setMediaCount(0); waylineJobEntity.setMediaCount(0);
waylineJobEntity.setProId(dockOpt.get().getProId());
waylineJobEntity.setFileId("-1");
waylineJobEntity.setJobType(WaylineJobTypeEnum.INSTRUCT.getType()); waylineJobEntity.setJobType(WaylineJobTypeEnum.INSTRUCT.getType());
MediaFileCountDTO mediaFileCountDTO = new MediaFileCountDTO();
mediaFileCountDTO.setJobId(waylineJobEntity.getJobId());
mediaFileCountDTO.setDeviceSn(sn);
mediaFileCountDTO.setFileId("-1");
mediaRedisService.setMediaCount(sn, waylineJobEntity.getJobId(),mediaFileCountDTO);
TopicServicesResponse<ServicesReplyData> response = abstractControlService.takeoffToPoint( TopicServicesResponse<ServicesReplyData> response = abstractControlService.takeoffToPoint(
SDKManager.getDeviceSDK(sn), mapper.convertValue(param, TakeoffToPointRequest.class)); SDKManager.getDeviceSDK(sn), mapper.convertValue(param, TakeoffToPointRequest.class));
ServicesReplyData reply = response.getData(); ServicesReplyData reply = response.getData();
@ -217,16 +225,16 @@ public class ControlServiceImpl implements IControlService {
TopicServicesResponse<ServicesReplyData> response; TopicServicesResponse<ServicesReplyData> response;
switch (authority) { switch (authority) {
case FLIGHT: case FLIGHT:
if (deviceService.checkAuthorityFlight(sn)) { // if (deviceService.checkAuthorityFlight(sn)) {
return HttpResultResponse.success(); // return HttpResultResponse.success();
} // }
response = abstractControlService.flightAuthorityGrab(SDKManager.getDeviceSDK(sn)); response = abstractControlService.flightAuthorityGrab(SDKManager.getDeviceSDK(sn));
break; break;
case PAYLOAD: case PAYLOAD:
if (checkPayloadAuthority(sn, param.getPayloadIndex())) { // if (checkPayloadAuthority(sn, param.getPayloadIndex())) {
return HttpResultResponse.success(); // return HttpResultResponse.success();
} // }
response = abstractControlService.payloadAuthorityGrab(SDKManager.getDeviceSDK(sn), response = abstractControlService.payloadAuthorityGrab(SDKManager.getDeviceSDK(sn),
new PayloadAuthorityGrabRequest().setPayloadIndex(new PayloadIndex(param.getPayloadIndex()))); new PayloadAuthorityGrabRequest().setPayloadIndex(new PayloadIndex(param.getPayloadIndex())));
break; break;
@ -260,6 +268,7 @@ public class ControlServiceImpl implements IControlService {
mapper.convertValue(param.getData(), param.getCmd().getCmd().getClazz())); mapper.convertValue(param.getData(), param.getCmd().getCmd().getClazz()));
ServicesReplyData serviceReply = response.getData(); ServicesReplyData serviceReply = response.getData();
return serviceReply.getResult().isSuccess() ? return serviceReply.getResult().isSuccess() ?
HttpResultResponse.success() HttpResultResponse.success()
: HttpResultResponse.error(serviceReply.getResult()); : HttpResultResponse.error(serviceReply.getResult());

2
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/PayloadCommandsHandler.java

@ -73,7 +73,7 @@ public abstract class PayloadCommandsHandler {
String deviceSn = checkDockOnline(dockSn); String deviceSn = checkDockOnline(dockSn);
checkDeviceOnline(deviceSn); checkDeviceOnline(deviceSn);
checkAuthority(deviceSn); //checkAuthority(deviceSn);
if (!canPublish(deviceSn)) { if (!canPublish(deviceSn)) {
throw new RuntimeException("无人机的当前状态不支持此功能,请稍后再试。"); throw new RuntimeException("无人机的当前状态不支持此功能,请稍后再试。");

1
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java

@ -69,6 +69,7 @@ public class SDKControlService extends AbstractControlService {
} }
TakeoffToPointProgress eventsReceiver = request.getData(); TakeoffToPointProgress eventsReceiver = request.getData();
webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(), webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(),
BizCodeEnum.TAKE_OFF_TO_POINT_PROGRESS.getCode(), BizCodeEnum.TAKE_OFF_TO_POINT_PROGRESS.getCode(),
ResultNotifyDTO.builder().sn(dockSn) ResultNotifyDTO.builder().sn(dockSn)

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

@ -9,6 +9,7 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.IDeviceService;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -37,6 +38,10 @@ public class DeviceController {
@Autowired @Autowired
private IDeviceService deviceService; private IDeviceService deviceService;
@Autowired
private IDeviceProService deviceProService;
/** /**
* 获取一个工作区中所有在线设备的列表 * 获取一个工作区中所有在线设备的列表
* Get the topology list of all online devices in one workspace. * Get the topology list of all online devices in one workspace.
@ -45,8 +50,8 @@ public class DeviceController {
@GetMapping("/{workspace_id}/devices") @GetMapping("/{workspace_id}/devices")
@Operation(summary = "获取一个工作区中所有在线设备的列表。", description = "获取一个工作区中所有在线设备的列表") @Operation(summary = "获取一个工作区中所有在线设备的列表。", description = "获取一个工作区中所有在线设备的列表")
public HttpResultResponse<List<DeviceDTO>> getDevices(@PathVariable("workspace_id") String workspaceId, public HttpResultResponse<List<DeviceDTO>> getDevices(@PathVariable("workspace_id") String workspaceId,
@RequestParam(name = "nickname",required = false) String nickname) { @RequestParam(name = "nickname",required = false) String nickname,@RequestParam(name = "proIds",required = false) List<Integer> proIds) {
List<DeviceDTO> devicesList = deviceService.getDevicesTopoForWeb(workspaceId,nickname); List<DeviceDTO> devicesList = deviceService.getDevicesTopoForWeb(workspaceId,nickname,proIds);
return HttpResultResponse.success(devicesList); return HttpResultResponse.success(devicesList);
} }
@ -92,9 +97,9 @@ public class DeviceController {
@PathVariable("workspace_id") String workspaceId,Integer domain, @PathVariable("workspace_id") String workspaceId,Integer domain,
@RequestParam(name = "pageNum", defaultValue = "1") Long page, @RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@RequestParam(name = "nickname",required = false) String nickname) { @RequestParam(name = "nickname",required = false) String nickname,
LoginUser loginUser = LoginHelper.getLoginUser(); @RequestParam(name = "proIds",required = false) List<Integer> proIds) {
PaginationData<DeviceDTO> devices = deviceService.getBoundDevicesWithDomain(workspaceId, page, pageSize, domain,nickname); PaginationData<DeviceDTO> devices = deviceService.getBoundDevicesWithDomain(workspaceId, page, pageSize, domain,nickname,proIds);
return HttpResultResponse.success(devices); return HttpResultResponse.success(devices);
} }

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

@ -268,6 +268,7 @@ public class MegaphoneController {
@RequestBody Map<String,Object>objectMap @RequestBody Map<String,Object>objectMap
) { ) {
String top = "task/image/disobey/smoke"; String top = "task/image/disobey/smoke";
String topTow = "task/image/disobey/streamType";
//发送mqtt //发送mqtt
String s = remoteConfigService.selectStreamIp(); String s = remoteConfigService.selectStreamIp();
DisobeyDTO param = Convert.convert(DisobeyDTO.class, objectMap); DisobeyDTO param = Convert.convert(DisobeyDTO.class, objectMap);
@ -298,6 +299,13 @@ public class MegaphoneController {
disobeyDTO.setRtmpUrl(param.getRtmpUrl()); disobeyDTO.setRtmpUrl(param.getRtmpUrl());
gatewayPublish.publish(top,new CommonTopicRequest<>() gatewayPublish.publish(top,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(disobeyDTO)),1); .setData(Objects.requireNonNull(disobeyDTO)),1);
Map<String,Object> map = new HashMap<>();
map.put("labelEn",type);
map.put("deviceSn",objectMap.get("deviceSn"));
StreamTypeDTO param1 = Convert.convert(StreamTypeDTO.class, map);
gatewayPublish.publish(topTow,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(param1)),1);
} }
} }
}else if (CollectionUtils.isNotEmpty(types) && split.length < types.size()){ }else if (CollectionUtils.isNotEmpty(types) && split.length < types.size()){
@ -336,8 +344,33 @@ public class MegaphoneController {
gatewayPublish.publish(top,new CommonTopicRequest<>() gatewayPublish.publish(top,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(disobeyDTO)),1); .setData(Objects.requireNonNull(disobeyDTO)),1);
Map<String,Object> map = new HashMap<>();
map.put("labelEn",type);
map.put("deviceSn",objectMap.get("deviceSn"));
StreamTypeDTO param1 = Convert.convert(StreamTypeDTO.class, map);
gatewayPublish.publish(topTow,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(param1)),1);
} }
} }
}else {
if (CollectionUtils.isNotEmpty(types)){
//删数据
for (String type : types){
deviceStreamMapper.delete(new QueryWrapper<DeviceStreamEntity>().eq("rtmp_url", param.getRtmpUrl())
.eq("stream_type", type));
List<String> list = new ArrayList<>();
list.add(type);
DisobeyDTO disobeyDTO = new DisobeyDTO();
disobeyDTO.setUrl(s);
disobeyDTO.setOpen(2);
disobeyDTO.setType(list);
disobeyDTO.setRtmpUrl(param.getRtmpUrl());
gatewayPublish.publish(top,new CommonTopicRequest<>()
.setData(Objects.requireNonNull(disobeyDTO)),1);
}
}else {
}
} }
} }
if (param.getOpen() == 2){ if (param.getOpen() == 2){

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java

@ -102,7 +102,7 @@ public class DeviceDTO {
private String tenantId; private String tenantId;
@Schema(description = "项目ID") @Schema(description = "项目ID")
private String proId; private Integer proId;
@Schema(description = "项目ID") @Schema(description = "项目ID")
private DeviceProEntity deviceProEntity; private DeviceProEntity deviceProEntity;

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceQrtzDTO.java

@ -96,4 +96,6 @@ public class DeviceQrtzDTO {
private String deptName; private String deptName;
private List<Long>deptIds; private List<Long>deptIds;
private List<Integer> proIds;
} }

2
dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceQueryParam.java

@ -35,4 +35,6 @@ public class DeviceQueryParam {
private boolean orderBy; private boolean orderBy;
private boolean isAsc; private boolean isAsc;
private List<Integer> proIds;
} }

4
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java

@ -68,7 +68,7 @@ public interface IDeviceService {
* @param workspaceId * @param workspaceId
* @return * @return
*/ */
List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname); List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname,List<Integer> proIds);
/** /**
@ -131,7 +131,7 @@ public interface IDeviceService {
* @param domain * @param domain
* @return * @return
*/ */
PaginationData<DeviceDTO> getBoundDevicesWithDomain(String workspaceId, Long page, Long pageSize, Integer domain,String nickname); PaginationData<DeviceDTO> getBoundDevicesWithDomain(String workspaceId, Long page, Long pageSize, Integer domain,String nickname,List<Integer> proIds);
/** /**
* Unbind device base on device's sn. * Unbind device base on device's sn.

38
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java

@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.firmware.*; import org.dromara.common.sdk.cloudapi.firmware.*;
import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService; import org.dromara.common.sdk.cloudapi.firmware.api.AbstractFirmwareService;
import org.dromara.common.sdk.cloudapi.livestream.VideoTypeEnum;
import org.dromara.common.sdk.cloudapi.property.api.AbstractPropertyService; import org.dromara.common.sdk.cloudapi.property.api.AbstractPropertyService;
import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl; import org.dromara.common.sdk.cloudapi.tsa.DeviceIconUrl;
import org.dromara.common.sdk.cloudapi.tsa.TopologyDeviceModel; import org.dromara.common.sdk.cloudapi.tsa.TopologyDeviceModel;
@ -45,6 +47,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.sample.websocket.service.IWebSocketMessageService; import org.dromara.sample.websocket.service.IWebSocketMessageService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -58,6 +61,9 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.dromara.common.core.utils.StringUtils.DASH;
import static org.dromara.common.core.utils.StringUtils.SLASH;
/** /**
* *
* @author sean.zhou * @author sean.zhou
@ -132,6 +138,9 @@ public class DeviceServiceImpl implements IDeviceService {
@Autowired @Autowired
private IDeviceProMapper deviceProMapper; private IDeviceProMapper deviceProMapper;
@Autowired
private IDeviceProService deviceProService;
@Override @Override
public void subDeviceOffline(String deviceSn) { public void subDeviceOffline(String deviceSn) {
// If no information about this device exists in the cache, the drone is considered to be offline. // If no information about this device exists in the cache, the drone is considered to be offline.
@ -221,21 +230,28 @@ public class DeviceServiceImpl implements IDeviceService {
} }
}) })
.eq(StringUtils.hasText(param.getWorkspaceId()), .eq(StringUtils.hasText(param.getWorkspaceId()),
DeviceEntity::getWorkspaceId, param.getWorkspaceId()) DeviceEntity::getWorkspaceId, param.getWorkspaceId())
.eq(param.getBoundStatus() != null, DeviceEntity::getBoundStatus, param.getBoundStatus()) .eq(param.getBoundStatus() != null, DeviceEntity::getBoundStatus, param.getBoundStatus())
.in(ObjectUtil.isAllNotEmpty(param.getProIds()),
DeviceEntity::getProId, param.getProIds())
.orderBy(param.isOrderBy(), .orderBy(param.isOrderBy(),
param.isAsc(), DeviceEntity::getId)) param.isAsc(), DeviceEntity::getId))
.stream() .stream()
.map(this::deviceEntityConvertToDTO) .map(this::deviceEntityConvertToDTO)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@Override @Override
public List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname) { public List<DeviceDTO> getDevicesTopoForWeb(String workspaceId,String nickname,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
List<DeviceDTO> devicesList = this.getDevicesByParams( List<DeviceDTO> devicesList = this.getDevicesByParams(
DeviceQueryParam.builder() DeviceQueryParam.builder()
.workspaceId(workspaceId) .workspaceId(workspaceId)
.domains(List.of(DeviceDomainEnum.REMOTER_CONTROL.getDomain(), DeviceDomainEnum.DOCK.getDomain())) .domains(List.of(DeviceDomainEnum.REMOTER_CONTROL.getDomain(), DeviceDomainEnum.DOCK.getDomain()))
.proIds(proIds)
.build()); .build());
devicesList.stream() devicesList.stream()
@ -258,14 +274,15 @@ public class DeviceServiceImpl implements IDeviceService {
DeviceDTO subDevice = getDevicesByParams(DeviceQueryParam.builder().deviceSn(gateway.getChildDeviceSn()).build()).get(0); DeviceDTO subDevice = getDevicesByParams(DeviceQueryParam.builder().deviceSn(gateway.getChildDeviceSn()).build()).get(0);
subDevice.setStatus(deviceRedisService.checkDeviceOnline(subDevice.getDeviceSn())); subDevice.setStatus(deviceRedisService.checkDeviceOnline(subDevice.getDeviceSn()));
List<CapacityCameraDTO> capacityCameraByDeviceSn = capacityCameraService.getCapacityCameraByDeviceSn(gateway.getChildDeviceSn()); /*List<CapacityCameraDTO> capacityCameraByDeviceSn = capacityCameraService.getCapacityCameraByDeviceSn(gateway.getChildDeviceSn());
String videoId = ""; String videoId = "";
if(capacityCameraByDeviceSn != null && capacityCameraByDeviceSn.size() > 0 ){ if(capacityCameraByDeviceSn != null && capacityCameraByDeviceSn.size() > 0 ){
if(capacityCameraByDeviceSn.get(0).getVideosList().size() > 0){ if(capacityCameraByDeviceSn.get(0).getVideosList().size() > 0){
videoId = gateway.getChildDeviceSn() + "/" + capacityCameraByDeviceSn.get(0).getIndex() + "/" + capacityCameraByDeviceSn.get(0).getVideosList().get(0).getIndex(); videoId = gateway.getChildDeviceSn() + "/" + capacityCameraByDeviceSn.get(0).getIndex() + "/" + capacityCameraByDeviceSn.get(0).getVideosList().get(0).getIndex();
} }
} }*/
subDevice.setVideoId(videoId); String deviceVideoEnum = DeviceVideoEnum.find(subDevice.getDeviceName()).getDevice();
subDevice.setVideoId(new VideoId(subDevice.getDeviceSn()+SLASH+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL.getType() + DASH+DeviceTypeVideoEnum.ZERO.getVideoType()).toString());
gateway.setChildren(subDevice); gateway.setChildren(subDevice);
// gateway.setVideoId(DeviceEnum.videoId); // gateway.setVideoId(DeviceEnum.videoId);
// payloads // payloads
@ -405,7 +422,8 @@ public class DeviceServiceImpl implements IDeviceService {
.map(WorkspaceDTO::getWorkspaceName).orElse("") : "") .map(WorkspaceDTO::getWorkspaceName).orElse("") : "")
.firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE) .firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE)
.videoId(dockVideoId) .videoId(dockVideoId)
.thingVersion(entity.getVersion()).proId(ObjectUtil.isNotEmpty(entity.getProId())?String.valueOf(entity.getProId()):"").build(); .proId(ObjectUtil.isNotEmpty(entity.getProId())?entity.getProId():null)
.thingVersion(entity.getVersion()).build();
} catch (CloudSDKException e) { } catch (CloudSDKException e) {
log.error(e.getLocalizedMessage() + "Entity: {}", entity); log.error(e.getLocalizedMessage() + "Entity: {}", entity);
} }
@ -495,13 +513,14 @@ public class DeviceServiceImpl implements IDeviceService {
@Override @Override
public PaginationData<DeviceDTO> getBoundDevicesWithDomain(String workspaceId, Long page, public PaginationData<DeviceDTO> getBoundDevicesWithDomain(String workspaceId, Long page,
Long pageSize, Integer domain,String nickname) { Long pageSize, Integer domain,String nickname,List<Integer> proIds) {
Page<DeviceEntity> pagination = mapper.selectPage(new Page<>(page, pageSize), Page<DeviceEntity> pagination = mapper.selectPage(new Page<>(page, pageSize),
new LambdaQueryWrapper<DeviceEntity>() new LambdaQueryWrapper<DeviceEntity>()
.eq(DeviceEntity::getDomain, domain) .eq(DeviceEntity::getDomain, domain)
.eq(DeviceEntity::getWorkspaceId, workspaceId) .eq(DeviceEntity::getWorkspaceId, workspaceId)
.eq(DeviceEntity::getBoundStatus, true) .eq(DeviceEntity::getBoundStatus, true)
.in(ObjectUtil.isAllNotEmpty(proIds),DeviceEntity::getProId, proIds)
.eq(org.dromara.common.core.utils.StringUtils.isNotEmpty(nickname),DeviceEntity::getNickname,nickname)); .eq(org.dromara.common.core.utils.StringUtils.isNotEmpty(nickname),DeviceEntity::getNickname,nickname));
List<DeviceDTO> devicesList = pagination.getRecords().stream().map(this::deviceEntityConvertToDTO) List<DeviceDTO> devicesList = pagination.getRecords().stream().map(this::deviceEntityConvertToDTO)
.peek(device -> { .peek(device -> {
@ -728,7 +747,8 @@ public class DeviceServiceImpl implements IDeviceService {
.firmwareVersion(dto.getFirmwareVersion()) .firmwareVersion(dto.getFirmwareVersion())
.compatibleStatus(dto.getFirmwareStatus() == null ? null : .compatibleStatus(dto.getFirmwareStatus() == null ? null :
DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE != dto.getFirmwareStatus()) DeviceFirmwareStatusEnum.CONSISTENT_UPGRADE != dto.getFirmwareStatus())
.deviceDesc(dto.getDeviceDesc()).proId(ObjectUtil.isNotEmpty(dto.getProId())?Integer.valueOf(dto.getProId()):null) .deviceDesc(dto.getDeviceDesc())
.proId(dto.getProId() == null ? null : dto.getProId())
.build(); .build();
} }
} }

4
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java

@ -139,7 +139,7 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
default: default:
return HttpResultResponse.error(LiveErrorCodeEnum.URL_TYPE_NOT_SUPPORTED); return HttpResultResponse.error(LiveErrorCodeEnum.URL_TYPE_NOT_SUPPORTED);
} }
DeviceEntity deviceBySn = deviceService.getDeviceByChildSn(liveParam.getVideoId().getDroneSn()); /* DeviceEntity deviceBySn = deviceService.getDeviceByChildSn(liveParam.getVideoId().getDroneSn());
if(deviceBySn != null){ if(deviceBySn != null){
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceBySn.getDeviceSn()); Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceBySn.getDeviceSn());
@ -172,7 +172,7 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
} }
} }
} }*/
// MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",liveParam.getVideoId().getDroneSn(),liveParam.getVideoId().toString()); // MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",liveParam.getVideoId().getDroneSn(),liveParam.getVideoId().toString());
return HttpResultResponse.success(live); return HttpResultResponse.success(live);

13
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java

@ -3,6 +3,7 @@ package org.dromara.sample.manage.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import org.dromara.common.redis.utils.RedisOpsUtils; import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.rocketmq.producer.MessageProducerUtil; import org.dromara.common.rocketmq.producer.MessageProducerUtil;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.device.*;
import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService; import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService;
import org.dromara.common.sdk.cloudapi.livestream.VideoTypeEnum; import org.dromara.common.sdk.cloudapi.livestream.VideoTypeEnum;
@ -41,6 +42,8 @@ import java.util.stream.Collectors;
import static org.dromara.common.core.utils.StringUtils.DASH; import static org.dromara.common.core.utils.StringUtils.DASH;
import static org.dromara.common.core.utils.StringUtils.SLASH; import static org.dromara.common.core.utils.StringUtils.SLASH;
import static org.dromara.common.core.constant.Constants.FLY_COUNT;
/** /**
* @author sean * @author sean
* @version 1.7 * @version 1.7
@ -159,10 +162,14 @@ public class SDKDeviceService extends AbstractDeviceService {
if(request.getData().getMediaFileDetail() != null){ if(request.getData().getMediaFileDetail() != null){
RedisOpsUtils.hashSet("updateMediaFileDetail",from,request.getData().getMediaFileDetail().getRemainUpload()); RedisOpsUtils.hashSet("updateMediaFileDetail",from,request.getData().getMediaFileDetail().getRemainUpload());
} }
if( deviceRedisService.getDeviceOsd(deviceOpt.get().getChildDeviceSn(),OsdDockDrone.class).isEmpty() && deviceRedisService.checkDeviceVideo(deviceOpt.get().getChildDeviceSn())){
deviceRedisService.delDeviceVideo(deviceOpt.get().getChildDeviceSn());
}
DeviceDTO device = deviceOpt.get(); DeviceDTO device = deviceOpt.get();
if(request.getData().getLatitude() != null && request.getData().getLongitude() != null
&& ((deviceOpt.get().getLatitude() == null && deviceOpt.get().getLongitude() == null)) || (request.getData().getLatitude() != deviceOpt.get().getLatitude() && request.getData().getLongitude() != deviceOpt.get().getLongitude())){
deviceOpt.get().setLatitude(request.getData().getLatitude());
deviceOpt.get().setLongitude(request.getData().getLongitude());
deviceRedisService.setDeviceOnline(deviceOpt.get());
deviceService.updateDevice(deviceOpt.get());
}
if (StringUtils.hasText(device.getChildDeviceSn())) { if (StringUtils.hasText(device.getChildDeviceSn())) {
deviceService.getDeviceBySn(device.getChildDeviceSn()).ifPresent(device::setChildren); deviceService.getDeviceBySn(device.getChildDeviceSn()).ifPresent(device::setChildren);
} }

14
dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java

@ -6,6 +6,7 @@ import jakarta.servlet.http.HttpServletResponse;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.media.service.IFileService; import org.dromara.sample.media.service.IFileService;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
import java.util.List;
/** /**
* @author sean * @author sean
@ -28,6 +30,8 @@ public class FileController {
@Autowired @Autowired
private IFileService fileService; private IFileService fileService;
/** /**
* 根据工作区id获取此工作区中所有媒体文件的信息 * 根据工作区id获取此工作区中所有媒体文件的信息
* Get information about all the media files in this workspace based on the workspace id. * Get information about all the media files in this workspace based on the workspace id.
@ -37,8 +41,9 @@ public class FileController {
@Operation(summary = "根据工作区id获取此工作区中所有媒体文件的信息。", description = "根据工作区id获取此工作区中所有媒体文件的信息。") @Operation(summary = "根据工作区id获取此工作区中所有媒体文件的信息。", description = "根据工作区id获取此工作区中所有媒体文件的信息。")
public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesList(@RequestParam(name = "pageNum", defaultValue = "1") Long page, public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesList(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId) { @PathVariable(name = "workspace_id") String workspaceId,
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize); @RequestParam(name = "proIds",required = false) List<Integer> proIds) {
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize,proIds);
return HttpResultResponse.success(filesList); return HttpResultResponse.success(filesList);
} }
@ -72,8 +77,9 @@ public class FileController {
public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesByJobId(@RequestParam(name = "pageNum", defaultValue = "1") Long page, public HttpResultResponse<PaginationData<MediaFileDTO>> getFilesByJobId(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId, @PathVariable(name = "workspace_id") String workspaceId,
@PathVariable(name = "job_id") String jobId) { @PathVariable(name = "job_id") String jobId,
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId); @RequestParam(name = "type", required = false) Integer type) {
PaginationData<MediaFileDTO> filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId,type);
for (MediaFileDTO mediaFileDTO :filesList.getList()){ for (MediaFileDTO mediaFileDTO :filesList.getList()){
mediaFileDTO.setUrl(fileService.getObjectUrl(workspaceId, mediaFileDTO.getFileId()).toString()); mediaFileDTO.setUrl(fileService.getObjectUrl(workspaceId, mediaFileDTO.getFileId()).toString());
} }

4
dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java

@ -52,8 +52,8 @@ public class MediaController implements IHttpMediaService {
* @return * @return
*/ */
@Override @Override
public HttpResultResponse<String> mediaUploadCallback( String workspaceId, @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) { public HttpResultResponse<String> mediaUploadCallback( String workspaceId,Integer proId, @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) {
mediaService.saveMediaFile(workspaceId, request); mediaService.saveMediaFile(workspaceId, request,proId);
return HttpResultResponse.success(request.getObjectKey()); return HttpResultResponse.success(request.getObjectKey());
} }

3
dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java

@ -111,5 +111,8 @@ public class MediaFileEntity implements Serializable {
@TableField("file_index") @TableField("file_index")
private Integer fileIndex; private Integer fileIndex;
@TableField("pro_id")
private Integer proId;
} }

6
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java

@ -29,7 +29,7 @@ public interface IFileService {
* @param file * @param file
* @return * @return
*/ */
Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask); Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask,Integer proId);
/** /**
* Query information about all files in this workspace based on the workspace id. * Query information about all files in this workspace based on the workspace id.
@ -45,7 +45,7 @@ public interface IFileService {
* @param pageSize * @param pageSize
* @return * @return
*/ */
PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize); PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List<Integer> proIds);
/** /**
* Get the download address of the file. * Get the download address of the file.
@ -71,7 +71,7 @@ public interface IFileService {
* @param pageSize * @param pageSize
* @return * @return
*/ */
PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId); PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId,Integer type);
/** /**

2
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java

@ -26,7 +26,7 @@ public interface IMediaService {
* @param file * @param file
* @return * @return
*/ */
Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file); Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file,Integer proId);
/** /**
* Query tiny fingerprints about all files in this workspace based on the workspace id. * Query tiny fingerprints about all files in this workspace based on the workspace id.

22
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java

@ -1,11 +1,13 @@
package org.dromara.sample.media.service.impl; package org.dromara.sample.media.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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 org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum; import org.dromara.common.sdk.cloudapi.device.DeviceEnum;
import org.dromara.common.sdk.cloudapi.media.FlightTask; import org.dromara.common.sdk.cloudapi.media.FlightTask;
import org.dromara.common.sdk.cloudapi.media.MediaSubFileTypeEnum; import org.dromara.common.sdk.cloudapi.media.MediaSubFileTypeEnum;
@ -14,11 +16,13 @@ import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.model.dto.DeviceDictionaryDTO; import org.dromara.sample.manage.model.dto.DeviceDictionaryDTO;
import org.dromara.sample.manage.service.IDeviceDictionaryService; import org.dromara.sample.manage.service.IDeviceDictionaryService;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.media.constant.MinIOConstants; import org.dromara.sample.media.constant.MinIOConstants;
import org.dromara.sample.media.mapper.IFileMapper; import org.dromara.sample.media.mapper.IFileMapper;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.media.model.MediaFileEntity; import org.dromara.sample.media.model.MediaFileEntity;
import org.dromara.sample.media.service.IFileService; import org.dromara.sample.media.service.IFileService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -43,7 +47,8 @@ public class FileServiceImpl implements IFileService {
@Autowired @Autowired
private IDeviceDictionaryService deviceDictionaryService; private IDeviceDictionaryService deviceDictionaryService;
@Autowired
private IDeviceProService deviceProService;
private Optional<MediaFileEntity> getMediaByFingerprint(String workspaceId, String fingerprint) { private Optional<MediaFileEntity> getMediaByFingerprint(String workspaceId, String fingerprint) {
MediaFileEntity fileEntity = mapper.selectOne(new LambdaQueryWrapper<MediaFileEntity>() MediaFileEntity fileEntity = mapper.selectOne(new LambdaQueryWrapper<MediaFileEntity>()
@ -65,10 +70,11 @@ public class FileServiceImpl implements IFileService {
} }
@Override @Override
public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask) { public Integer saveFile(String workspaceId, MediaUploadCallbackRequest file, FlightTask flightTask,Integer proId) {
MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file,flightTask); MediaFileEntity fileEntity = this.fileUploadConvertToEntity(file,flightTask);
fileEntity.setWorkspaceId(workspaceId); fileEntity.setWorkspaceId(workspaceId);
fileEntity.setFileId(UUID.randomUUID().toString()); fileEntity.setFileId(UUID.randomUUID().toString());
fileEntity.setProId(proId);
fileEntity.setFileType(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf(".")+1)); fileEntity.setFileType(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf(".")+1));
if(!fileEntity.getFileType().equals("DAT")){ if(!fileEntity.getFileType().equals("DAT")){
fileEntity.setFileStatus(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf("_")+1, fileEntity.getFileName().lastIndexOf("."))); fileEntity.setFileStatus(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf("_")+1, fileEntity.getFileName().lastIndexOf(".")));
@ -91,11 +97,16 @@ public class FileServiceImpl implements IFileService {
} }
@Override @Override
public PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize) { public PaginationData<MediaFileDTO> getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
Page<MediaFileEntity> pageData = mapper.selectPage( Page<MediaFileEntity> pageData = mapper.selectPage(
new Page<MediaFileEntity>(page, pageSize), new Page<MediaFileEntity>(page, pageSize),
new LambdaQueryWrapper<MediaFileEntity>() new LambdaQueryWrapper<MediaFileEntity>()
.eq(MediaFileEntity::getWorkspaceId, workspaceId) .eq(MediaFileEntity::getWorkspaceId, workspaceId)
.in(ObjectUtil.isAllNotEmpty(proIds),MediaFileEntity::getProId, proIds)
.orderByDesc(MediaFileEntity::getId)); .orderByDesc(MediaFileEntity::getId));
List<MediaFileDTO> records = pageData.getRecords() List<MediaFileDTO> records = pageData.getRecords()
.stream() .stream()
@ -125,12 +136,15 @@ public class FileServiceImpl implements IFileService {
} }
@Override @Override
public PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId) { public PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId,Integer type) {
String [] fileTypes = new String[]{"jpeg","mp4"};
Page<MediaFileEntity> pageData = mapper.selectPage( Page<MediaFileEntity> pageData = mapper.selectPage(
new Page<MediaFileEntity>(page, pageSize), new Page<MediaFileEntity>(page, pageSize),
new LambdaQueryWrapper<MediaFileEntity>() new LambdaQueryWrapper<MediaFileEntity>()
.eq(MediaFileEntity::getWorkspaceId, workspaceId) .eq(MediaFileEntity::getWorkspaceId, workspaceId)
.eq(MediaFileEntity::getJobId, JobId) .eq(MediaFileEntity::getJobId, JobId)
.in(ObjectUtil.isNotEmpty(type),MediaFileEntity::getFileType,fileTypes)
.orderByDesc(MediaFileEntity::getId)); .orderByDesc(MediaFileEntity::getId));
List<MediaFileDTO> records = pageData.getRecords() List<MediaFileDTO> records = pageData.getRecords()
.stream() .stream()

19
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java

@ -1,5 +1,6 @@
package org.dromara.sample.media.service.impl; package org.dromara.sample.media.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DeviceQrtzConstants; import org.dromara.common.core.constant.DeviceQrtzConstants;
@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@ -80,8 +82,8 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
} }
@Override @Override
public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file) { public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file,Integer proId) {
return fileService.saveFile(workspaceId, file,null); return fileService.saveFile(workspaceId, file,null,proId);
} }
@Override @Override
@ -123,8 +125,12 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
} }
return new TopicEventsResponse<MqttReply>().setData(MqttReply.success()); return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
} }
List<DeviceQrtzFileEntity> deviceQrtzFileEntities = new ArrayList<>();
MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId); MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId);
List<DeviceQrtzFileEntity> deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper<DeviceQrtzFileEntity>().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId())); if(ObjectUtil.isNull(mediaFileCount)){
deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper<DeviceQrtzFileEntity>().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId()));
}
// duplicate data // duplicate data
if (deviceOpt.isEmpty() if (deviceOpt.isEmpty()
|| (Objects.nonNull(mediaFileCount) && request.getBid().equals(mediaFileCount.getBid()) || (Objects.nonNull(mediaFileCount) && request.getBid().equals(mediaFileCount.getBid())
@ -145,10 +151,11 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
return null; return null;
} }
notifyUploadedCount(mediaFileCount, request, jobId, device,deviceQrtzFileEntities); notifyUploadedCount(mediaFileCount, request, jobId, device);
return new TopicEventsResponse<MqttReply>().setData(MqttReply.success()); return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
} }
@Override @Override
public TopicEventsResponse<MqttReply> highestPriorityUploadFlightTaskMedia( public TopicEventsResponse<MqttReply> highestPriorityUploadFlightTaskMedia(
TopicEventsRequest<HighestPriorityUploadFlightTaskMedia> request, MessageHeaders headers) { TopicEventsRequest<HighestPriorityUploadFlightTaskMedia> request, MessageHeaders headers) {
@ -189,12 +196,12 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
file.setPath(objectKey.substring(Optional.of(objectKey.indexOf("mediafile")) file.setPath(objectKey.substring(Optional.of(objectKey.indexOf("mediafile"))
.filter(index -> index > 0).map(index -> index++).orElse(0), .filter(index -> index > 0).map(index -> index++).orElse(0),
objectKey.lastIndexOf("/"))); objectKey.lastIndexOf("/")));
Integer fileFlag = fileService.saveFile(device.getWorkspaceId(), file, callback.getFlightTask()); Integer fileFlag = fileService.saveFile(device.getWorkspaceId(), file, callback.getFlightTask(),device.getProId());
return fileFlag> 0; return fileFlag> 0;
} }
private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest<FileUploadCallback> request, String jobId, DeviceDTO dock, List<DeviceQrtzFileEntity> deviceQrtzFileEntities) { private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest<FileUploadCallback> request, String jobId, DeviceDTO dock) {
// Do not notify when files that do not belong to the route are uploaded. // Do not notify when files that do not belong to the route are uploaded.
//不通知不属于路由的文件被上传。 //不通知不属于路由的文件被上传。
if (Objects.isNull(mediaFileCount)) { if (Objects.isNull(mediaFileCount)) {

29
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java

@ -1,6 +1,7 @@
package org.dromara.sample.wayline.controller; package org.dromara.sample.wayline.controller;
import io.seata.common.util.CollectionUtils;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -14,6 +15,10 @@ import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.cloudapi.wayline.api.IHttpWaylineService; import org.dromara.common.sdk.cloudapi.wayline.api.IHttpWaylineService;
import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.manage.mapper.IDeviceProUserMapper;
import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO; import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity; import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
@ -31,8 +36,11 @@ import java.net.URL;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.bouncycastle.internal.asn1.cms.CMSObjectIdentifiers.data;
/** /**
* @author sean * @author sean
@ -46,6 +54,9 @@ public class WaylineFileController implements IHttpWaylineService {
@Autowired @Autowired
private IWaylineFileService waylineFileService; private IWaylineFileService waylineFileService;
@Autowired
private IDeviceRedisService deviceRedisService;
/** /**
* 根据waylineID删除工作区中的wayline文件 * 根据waylineID删除工作区中的wayline文件
* Delete the wayline file in the workspace according to the wayline id. * Delete the wayline file in the workspace according to the wayline id.
@ -67,13 +78,17 @@ public class WaylineFileController implements IHttpWaylineService {
*/ */
@PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/{deviceSn}/upload") @PostMapping("${url.wayline.prefix}${url.wayline.version}/workspaces/{workspace_id}/waylines/file/{deviceSn}/upload")
@Operation(summary = "导入kmz航路文件。", description = "导入kmz航路文件。") @Operation(summary = "导入kmz航路文件。", description = "导入kmz航路文件。")
public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,@PathVariable(name = "deviceSn") String deviceSn) { public HttpResultResponse importKmzFile(@PathVariable(name = "workspace_id") String workspaceId,HttpServletRequest request, MultipartFile file,@PathVariable(name = "deviceSn") String deviceSn,@RequestParam(name = "proId",required = false) Integer proId) {
if (Objects.isNull(file)) { if (Objects.isNull(file)) {
return HttpResultResponse.error("未收到文件。"); return HttpResultResponse.error("未收到文件。");
} }
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(deviceSn);
if(proId == null){
proId = deviceOnline.get().getProId();
}
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
String creator = loginUser.getUsername(); String creator = loginUser.getUsername();
waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn); waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn,proId);
return HttpResultResponse.success(); return HttpResultResponse.success();
} }
@ -86,11 +101,17 @@ public class WaylineFileController implements IHttpWaylineService {
* @return * @return
*/ */
@Override @Override
public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylineList(@Valid GetWaylineListRequest request,String workspaceId, HttpServletRequest req, HttpServletResponse rsp) { public HttpResultResponse<PaginationData<GetWaylineListResponse>> getWaylines(@Valid GetWaylineListRequest request,String workspaceId,List<Integer> proIds, HttpServletRequest req, HttpServletResponse rsp) {
PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(workspaceId, request); PaginationData<GetWaylineListResponse> data = waylineFileService.getWaylinesByParam(workspaceId, request,proIds);
return HttpResultResponse.success(data); return HttpResultResponse.success(data);
} }
@Override
public HttpResultResponse<List<GetWaylineListResponse>> getWaylineList(String workspaceId,Integer proId, HttpServletRequest req, HttpServletResponse rsp) {
List<GetWaylineListResponse> waylinesByParamList = waylineFileService.getWaylinesByParamList(workspaceId, proId);
return HttpResultResponse.success(waylinesByParamList);
}
/** /**
* 根据 wayline 文件 ID 查询文件的下载地址并直接重定向到此地址进行下载 * 根据 wayline 文件 ID 查询文件的下载地址并直接重定向到此地址进行下载
* Query the download address of the file according to the wayline file id, * Query the download address of the file according to the wayline file id,

35
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java

@ -16,12 +16,15 @@ import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.wayline.model.dto.WaylineJobDTO; import org.dromara.sample.wayline.model.dto.WaylineJobDTO;
import org.dromara.sample.wayline.model.enums.WaylineTaskStatusEnum; import org.dromara.sample.wayline.model.enums.WaylineTaskStatusEnum;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.sample.wayline.model.param.CreateJobParam; import org.dromara.sample.wayline.model.param.CreateJobParam;
import org.dromara.sample.wayline.model.param.UpdateJobParam; import org.dromara.sample.wayline.model.param.UpdateJobParam;
import org.dromara.sample.wayline.service.IFlightTaskService; import org.dromara.sample.wayline.service.IFlightTaskService;
import org.dromara.sample.wayline.service.IWaylineFileService; import org.dromara.sample.wayline.service.IWaylineFileService;
import org.dromara.sample.wayline.service.IWaylineJobService; import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService; import org.dromara.sample.wayline.service.IWaylineRedisService;
import org.dromara.sample.wayline.service.IWaylineRedisService;
import org.dromara.sample.wayline.service.impl.WaylineFileServiceImpl;
import org.dromara.system.api.model.LoginUser; import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -33,6 +36,8 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import static org.bouncycastle.asn1.x500.style.RFC4519Style.name;
/** /**
* @author sean * @author sean
@ -81,8 +86,11 @@ public class WaylineJobController {
@Operation(summary = "查询工作区中的所有作业。。", description = "查询工作区中的所有作业。") @Operation(summary = "查询工作区中的所有作业。。", description = "查询工作区中的所有作业。")
public HttpResultResponse<PaginationData<WaylineJobDTO>> getJobs(@RequestParam(name = "pageNum", defaultValue = "1") Long page, public HttpResultResponse<PaginationData<WaylineJobDTO>> getJobs(@RequestParam(name = "pageNum", defaultValue = "1") Long page,
@RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize,
@PathVariable(name = "workspace_id") String workspaceId) { @PathVariable(name = "workspace_id") String workspaceId,
PaginationData<WaylineJobDTO> data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize); @RequestParam(name = "proIds" , required = false) List<Integer> proIds,
@RequestParam(name = "fileId" , required = false) String fileId,
@RequestParam(name = "name" , required = false) String name) {
PaginationData<WaylineJobDTO> data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize,fileId,proIds,name);
return HttpResultResponse.success(data); return HttpResultResponse.success(data);
} }
@ -120,28 +128,25 @@ public class WaylineJobController {
flighttaskService.updateJobStatus(workspaceId, jobId, param); flighttaskService.updateJobStatus(workspaceId, jobId, param);
return HttpResultResponse.success(); return HttpResultResponse.success();
} }
@GetMapping("/{workspace_id}/getJobIdByDeviceSn")
public static void main(String[] args) { @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")
WaylineTaskStatusEnum pause = WaylineTaskStatusEnum.RESUME; public HttpResultResponse getJobIdByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId,
System.out.println(pause.getVal()); @RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) {
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn);
if(runningWaylineJob.isEmpty())HttpResultResponse.error("不存在");
return HttpResultResponse.success(runningWaylineJob.get().getOutput().getExt().getFlightId()==null?runningWaylineJob.get().getOutput().getExt().getFlightId():null);
} }
@GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn") @GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn")
@Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。") @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")
public void getJobFileUrlByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId, public void getJobFileUrlByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId,
@RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) { @RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) {
try { try {
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn); Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn);
if(runningWaylineJob.isEmpty()) { if(runningWaylineJob.isEmpty())return;
return;
}
String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId();
Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId); Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId);
if(waylineJobDTO.isEmpty()) { if(waylineJobDTO.isEmpty())return;
return;
}
URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId()); URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId());
rsp.sendRedirect(url.toString()); rsp.sendRedirect(url.toString());
} catch (IOException | SQLException e) { } catch (IOException | SQLException e) {

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java

@ -47,4 +47,6 @@ public class WaylineFileDTO {
private Integer fileNo; private Integer fileNo;
private Integer proId;
} }

3
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java

@ -10,6 +10,7 @@ import org.dromara.common.sdk.cloudapi.wayline.TaskTypeEnum;
import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineTypeEnum;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* @author sean * @author sean
@ -72,4 +73,6 @@ public class WaylineJobDTO {
private String parentId; private String parentId;
private ProgressExtBreakPoint breakPoint; private ProgressExtBreakPoint breakPoint;
private List<Integer> proIds;
} }

2
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java

@ -69,4 +69,6 @@ public class WaylineFileEntity implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String deviceName; private String deviceName;
@TableField("pro_id")
private Integer proId;
} }

3
dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java

@ -94,4 +94,7 @@ public class WaylineJobEntity implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private ProgressExtBreakPoint breakPoint; private ProgressExtBreakPoint breakPoint;
@TableField("pro_id")
private Integer proId;
} }

9
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java

@ -5,6 +5,7 @@ import org.dromara.common.sdk.cloudapi.wayline.GetWaylineListResponse;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.wayline.model.dto.WaylineFileDTO; import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity; import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.File; import java.io.File;
@ -26,7 +27,9 @@ public interface IWaylineFileService {
* @param param * @param param
* @return * @return
*/ */
PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param); PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List<Integer> proIds);
List<GetWaylineListResponse> getWaylinesByParamList(String workspaceId,Integer proId);
/** /**
* Query the information of this wayline file according to the wayline file id. * Query the information of this wayline file according to the wayline file id.
@ -83,10 +86,12 @@ public interface IWaylineFileService {
* @param creator * @param creator
* @return * @return
*/ */
void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn); void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn,Integer proId);
String getWaylineIdByFileId(Integer fileId); String getWaylineIdByFileId(Integer fileId);
WaylineFileEntity getWaylineFileByWaylineId(Integer waylineId);
/** /**
* Perform paging queries based on query parameters. * Perform paging queries based on query parameters.

4
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java

@ -28,7 +28,7 @@ public interface IWaylineJobService {
* @param endTime The time the job ended. * @param endTime The time the job ended.
* @return * @return
*/ */
Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime); Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime, Integer proId);
/** /**
* Create a sub-task based on the information of the parent task. * Create a sub-task based on the information of the parent task.
@ -71,7 +71,7 @@ public interface IWaylineJobService {
* @param pageSize * @param pageSize
* @return * @return
*/ */
PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize); PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List<Integer> proIds,String name);
/** /**
* Query the wayline execution status of the dock. * Query the wayline execution status of the dock.

20
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java

@ -241,8 +241,14 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) { if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) {
continue; continue;
} }
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(param.getDockSn());
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, loginUser.getUsername(), new Date(beginTime), new Date(endTime)); if(deviceOnline.isEmpty()){
throw new SQLException("机场信息不存在");
}
if(deviceOnline.get().getProId() == null){
throw new SQLException("项目组不存在");
}
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, loginUser.getUsername(), new Date(beginTime), new Date(endTime),deviceOnline.get().getProId());
if (waylineJobOpt.isEmpty()) { if (waylineJobOpt.isEmpty()) {
throw new SQLException("无法创建路线作业。"); throw new SQLException("无法创建路线作业。");
} }
@ -273,8 +279,14 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl
if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) { if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) {
continue; continue;
} }
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(param.getDockSn());
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, username, new Date(beginTime), new Date(endTime)); if(deviceOnline.isEmpty()){
throw new SQLException("机场信息不存在");
}
if(deviceOnline.get().getProId() == null){
throw new SQLException("项目组不存在");
}
Optional<WaylineJobDTO> waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, username, new Date(beginTime), new Date(endTime),deviceOnline.get().getProId());
if (waylineJobOpt.isEmpty()) { if (waylineJobOpt.isEmpty()) {
throw new SQLException("无法创建路线作业。"); throw new SQLException("无法创建路线作业。");
} }

15
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java

@ -3,6 +3,7 @@ package org.dromara.sample.wayline.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DeviceQrtzConstants; import org.dromara.common.core.constant.DeviceQrtzConstants;
import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.common.sdk.cloudapi.wayline.*; import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.cloudapi.wayline.api.AbstractWaylineService; import org.dromara.common.sdk.cloudapi.wayline.api.AbstractWaylineService;
import org.dromara.common.sdk.mqtt.MqttReply; import org.dromara.common.sdk.mqtt.MqttReply;
@ -16,8 +17,10 @@ import org.dromara.sample.common.error.CommonErrorEnum;
import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.model.entity.DeviceFlightRecordsEntity;
import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity; import org.dromara.sample.manage.model.entity.DeviceQrtzFileEntity;
import org.dromara.sample.manage.model.enums.UserTypeEnum; import org.dromara.sample.manage.model.enums.UserTypeEnum;
import org.dromara.sample.manage.service.IDeviceFlightRecordsService;
import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.media.model.MediaFileCountDTO; import org.dromara.sample.media.model.MediaFileCountDTO;
import org.dromara.sample.media.service.IMediaRedisService; import org.dromara.sample.media.service.IMediaRedisService;
@ -71,6 +74,9 @@ public class SDKWaylineService extends AbstractWaylineService {
@Autowired @Autowired
private IWebSocketMessageService webSocketMessageService; private IWebSocketMessageService webSocketMessageService;
@Autowired
private IDeviceFlightRecordsService deviceFlightRecordsService;
@Override @Override
public TopicEventsResponse<MqttReply> deviceExitHomingNotify(TopicEventsRequest<DeviceExitHomingNotify> request, MessageHeaders headers) { public TopicEventsResponse<MqttReply> deviceExitHomingNotify(TopicEventsRequest<DeviceExitHomingNotify> request, MessageHeaders headers) {
return super.deviceExitHomingNotify(request, headers); return super.deviceExitHomingNotify(request, headers);
@ -105,7 +111,14 @@ public class SDKWaylineService extends AbstractWaylineService {
.completedTime(LocalDateTime.now()) .completedTime(LocalDateTime.now())
.mediaCount(output.getExt().getMediaCount()) .mediaCount(output.getExt().getMediaCount())
.build(); .build();
Optional<OsdDockDrone> deviceOsd = deviceRedisService.getDeviceOsd(deviceOpt.get().getChildDeviceSn(), OsdDockDrone.class);
Integer totalFlightSorties = deviceOsd.get().getTotalFlightSorties();
Float totalFlightTime = deviceOsd.get().getTotalFlightTime();
DeviceFlightRecordsEntity deviceFlightRecords = new DeviceFlightRecordsEntity();
deviceFlightRecords.setDeviceSn(response.getGateway());
deviceFlightRecords.setFlyCount(totalFlightSorties);
deviceFlightRecords.setFlyAccTime(totalFlightTime.intValue());
deviceFlightRecordsService.saveDeviceFlight(deviceFlightRecords);
// record the update of the media count. // record the update of the media count.
if (Objects.nonNull(job.getMediaCount()) && job.getMediaCount() != 0) { if (Objects.nonNull(job.getMediaCount()) && job.getMediaCount() != 0) {
mediaRedisService.setMediaCount(response.getGateway(), job.getJobId(), mediaRedisService.setMediaCount(response.getGateway(), job.getJobId(),

53
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java

@ -17,6 +17,7 @@ import org.dom4j.io.SAXReader;
import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum; import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceEnum; import org.dromara.common.sdk.cloudapi.device.DeviceEnum;
import org.dromara.common.sdk.cloudapi.device.DeviceSubTypeEnum; import org.dromara.common.sdk.cloudapi.device.DeviceSubTypeEnum;
@ -28,6 +29,8 @@ import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.RemoteFileService;
import org.dromara.resource.api.domain.RemoteFile; import org.dromara.resource.api.domain.RemoteFile;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.wayline.mapper.IAudioFileMapper; import org.dromara.sample.wayline.mapper.IAudioFileMapper;
import org.dromara.sample.wayline.mapper.IWaylineFileMapper; import org.dromara.sample.wayline.mapper.IWaylineFileMapper;
import org.dromara.sample.wayline.model.dto.KmzFileProperties; import org.dromara.sample.wayline.model.dto.KmzFileProperties;
@ -35,6 +38,7 @@ import org.dromara.sample.wayline.model.dto.WaylineFileDTO;
import org.dromara.sample.wayline.model.entity.AudioFileEntity; import org.dromara.sample.wayline.model.entity.AudioFileEntity;
import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.dromara.sample.wayline.model.entity.WaylineFileEntity;
import org.dromara.sample.wayline.service.IWaylineFileService; import org.dromara.sample.wayline.service.IWaylineFileService;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -77,9 +81,21 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
@DubboReference @DubboReference
private RemoteFileService remoteFileService; private RemoteFileService remoteFileService;
@Autowired
private IDeviceProService deviceProService;
@Autowired
private IDeviceRedisService deviceRedisService;
@Override @Override
public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param) { public PaginationData<GetWaylineListResponse> getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List<Integer> proIds) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(proIds == null){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
// Paging Query // Paging Query
List<Integer> finalProIds = proIds;
Page<WaylineFileEntity> page = mapper.selectPage( Page<WaylineFileEntity> page = mapper.selectPage(
new Page<WaylineFileEntity>(param.getPage(), param.getPageSize()), new Page<WaylineFileEntity>(param.getPage(), param.getPageSize()),
new LambdaQueryWrapper<WaylineFileEntity>() new LambdaQueryWrapper<WaylineFileEntity>()
@ -103,6 +119,9 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
.and(ObjectUtil.isNotEmpty(param.getDeviceSn()), wrapper -> { .and(ObjectUtil.isNotEmpty(param.getDeviceSn()), wrapper -> {
wrapper.eq(WaylineFileEntity::getDeviceSn, param.getDeviceSn()).or(); wrapper.eq(WaylineFileEntity::getDeviceSn, param.getDeviceSn()).or();
}) })
.and(ObjectUtil.isAllNotEmpty(proIds), wrapper -> {
wrapper.in(WaylineFileEntity::getProId, finalProIds);
})
.like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey()) .like(Objects.nonNull(param.getKey()), WaylineFileEntity::getName, param.getKey())
// There is a risk of SQL injection // There is a risk of SQL injection
.last(Objects.nonNull(param.getOrderBy()), " order by " + param.getOrderBy().toString())); .last(Objects.nonNull(param.getOrderBy()), " order by " + param.getOrderBy().toString()));
@ -115,6 +134,24 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
return new PaginationData<>(records, new Pagination(page.getCurrent(), page.getSize(), page.getTotal())); return new PaginationData<>(records, new Pagination(page.getCurrent(), page.getSize(), page.getTotal()));
} }
@Override
public List<GetWaylineListResponse> getWaylinesByParamList(String workspaceId,Integer proId) {
List<WaylineFileEntity> waylineFileEntities = mapper.selectList(
new LambdaQueryWrapper<WaylineFileEntity>()
.eq(WaylineFileEntity::getWorkspaceId, workspaceId)
.eq(WaylineFileEntity::getProId, proId)
// There is a risk of SQL injection
.orderByDesc(WaylineFileEntity::getCreateTime));
// Wrap the results of a paging query into a custom paging object.
List<GetWaylineListResponse> records = waylineFileEntities
.stream()
.map(this::entityConvertToDTO)
.collect(Collectors.toList());
return records;
}
@Override @Override
public Optional<GetWaylineListResponse> getWaylineByWaylineId(String workspaceId, String waylineId) { public Optional<GetWaylineListResponse> getWaylineByWaylineId(String workspaceId, String waylineId) {
return Optional.ofNullable( return Optional.ofNullable(
@ -203,7 +240,10 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
} }
@Override @Override
public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn) { public void importKmzFile(MultipartFile file, String workspaceId, String creator,String deviceSn,Integer proId) {
if(ObjectUtil.isNull(proId)){
proId = deviceRedisService.getDeviceOnline(deviceSn).get().getProId();
}
Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file); Optional<WaylineFileDTO> waylineFileOpt = validKmzFile(file);
if (waylineFileOpt.isEmpty()) { if (waylineFileOpt.isEmpty()) {
throw new RuntimeException("文件格式不正确。"); throw new RuntimeException("文件格式不正确。");
@ -230,6 +270,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
}else { }else {
waylineFile.setFileNo(1); waylineFile.setFileNo(1);
} }
waylineFile.setProId(proId);
this.saveWaylineFile(workspaceId, waylineFile); this.saveWaylineFile(workspaceId, waylineFile);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
@ -244,6 +285,13 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
return waylineId; return waylineId;
} }
@Override
public WaylineFileEntity getWaylineFileByWaylineId(Integer waylineId) {
return mapper.selectOne(
new LambdaQueryWrapper<WaylineFileEntity>()
.eq(WaylineFileEntity::getId, waylineId));
}
@Override @Override
public PaginationData<GetWaylineListResponse> getWaylinesByParamNew(String workspaceId, GetWaylineListRequest param) { public PaginationData<GetWaylineListResponse> getWaylinesByParamNew(String workspaceId, GetWaylineListRequest param) {
Page<WaylineFileEntity> waylineFileEntityPage = new Page<>(param.getPage(), param.getPageSize()); Page<WaylineFileEntity> waylineFileEntityPage = new Page<>(param.getPage(), param.getPageSize());
@ -466,6 +514,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService {
.favorited(file.getFavorited()) .favorited(file.getFavorited())
.sign(file.getSign()) .sign(file.getSign())
.deviceSn(file.getDeviceSns().get(0)) .deviceSn(file.getDeviceSns().get(0))
.proId(file.getProId())
.build(); .build();
} }

21
dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java

@ -1,10 +1,12 @@
package org.dromara.sample.wayline.service.impl; package org.dromara.sample.wayline.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.redis.config.RedisConst; import org.dromara.common.redis.config.RedisConst;
import org.dromara.common.redis.utils.RedisOpsUtils; import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum; import org.dromara.common.sdk.cloudapi.device.DockModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum; import org.dromara.common.sdk.cloudapi.device.DroneModeCodeEnum;
import org.dromara.common.sdk.cloudapi.device.OsdDock; import org.dromara.common.sdk.cloudapi.device.OsdDock;
@ -12,8 +14,10 @@ import org.dromara.common.sdk.cloudapi.device.OsdDockDrone;
import org.dromara.common.sdk.cloudapi.wayline.*; import org.dromara.common.sdk.cloudapi.wayline.*;
import org.dromara.common.sdk.common.Pagination; import org.dromara.common.sdk.common.Pagination;
import org.dromara.common.sdk.common.PaginationData; import org.dromara.common.sdk.common.PaginationData;
import org.dromara.common.sdk.exception.CloudSDKException;
import org.dromara.sample.component.mqtt.model.EventsReceiver; import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceDTO;
import org.dromara.sample.manage.service.IDeviceProService;
import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceRedisService;
import org.dromara.sample.manage.service.IDeviceService; import org.dromara.sample.manage.service.IDeviceService;
import org.dromara.sample.media.model.MediaFileCountDTO; import org.dromara.sample.media.model.MediaFileCountDTO;
@ -29,12 +33,14 @@ import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService; import org.dromara.sample.wayline.service.IWaylineRedisService;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.sql.SQLException;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
@ -72,6 +78,9 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
@Autowired @Autowired
private IWaylineRedisService waylineRedisService; private IWaylineRedisService waylineRedisService;
@Autowired
private IDeviceProService deviceProService;
private Optional<WaylineJobDTO> insertWaylineJob(WaylineJobEntity jobEntity) { private Optional<WaylineJobDTO> insertWaylineJob(WaylineJobEntity jobEntity) {
int id = mapper.insert(jobEntity); int id = mapper.insert(jobEntity);
if (id <= 0) { if (id <= 0) {
@ -81,7 +90,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
} }
@Override @Override
public Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime) { public Optional<WaylineJobDTO> createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime,Integer proId) {
if (Objects.isNull(param)) { if (Objects.isNull(param)) {
return Optional.empty(); return Optional.empty();
} }
@ -104,6 +113,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
.mediaCount(0) .mediaCount(0)
.breakPoint(param.getBreakPoint()) .breakPoint(param.getBreakPoint())
.jobType(param.getJobType().getType()) .jobType(param.getJobType().getType())
.proId(proId)
.build(); .build();
return insertWaylineJob(jobEntity); return insertWaylineJob(jobEntity);
@ -163,11 +173,18 @@ public class WaylineJobServiceImpl implements IWaylineJobService {
} }
@Override @Override
public PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize) { public PaginationData<WaylineJobDTO> getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List<Integer> proIds,String name) {
LoginUser loginUser = LoginHelper.getLoginUser();
if(ObjectUtil.isAllEmpty(proIds)){
proIds = deviceProService.listDeviceGroup(loginUser.getUserId());
}
Page<WaylineJobEntity> pageData = mapper.selectPage( Page<WaylineJobEntity> pageData = mapper.selectPage(
new Page<WaylineJobEntity>(page, pageSize), new Page<WaylineJobEntity>(page, pageSize),
new LambdaQueryWrapper<WaylineJobEntity>() new LambdaQueryWrapper<WaylineJobEntity>()
.eq(WaylineJobEntity::getWorkspaceId, workspaceId) .eq(WaylineJobEntity::getWorkspaceId, workspaceId)
.eq(WaylineJobEntity::getFileId, fileId)
.like(ObjectUtil.isNotEmpty(name),WaylineJobEntity::getName, name).or().like(ObjectUtil.isNotEmpty(name),WaylineJobEntity::getWaylineName,name)
.in(ObjectUtil.isAllNotEmpty(proIds),WaylineJobEntity::getProId,proIds)
.orderByDesc(WaylineJobEntity::getId)); .orderByDesc(WaylineJobEntity::getId));
List<WaylineJobDTO> records = pageData.getRecords() List<WaylineJobDTO> records = pageData.getRecords()
.stream() .stream()

6
dk-modules/sample/src/main/resources/mapper/DeviceQrtzMapper.xml

@ -43,6 +43,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id} #{id}
</foreach> </foreach>
</if> </if>
<if test="condition.proIds.size > 0">
AND wd.pro_id in
<foreach item="proId" collection="condition.proIds" open="(" separator="," close=")">
#{proId}
</foreach>
</if>
order by wdq.status asc, wdq.create_time desc order by wdq.status asc, wdq.create_time desc
</select> </select>
<select id="calendarList" resultType="java.util.Map"></select> <select id="calendarList" resultType="java.util.Map"></select>

18
dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.sample.manage.mapper.IDeviceProMapper"> <mapper namespace="org.dromara.sample.manage.mapper.IDeviceProMapper">
<resultMap id="listDeviceProEntityMap" type="org.dromara.sample.manage.model.entity.DeviceProEntity"> <resultMap id="listDeviceProEntityMap" type="org.dromara.sample.manage.model.entity.DeviceProEntity">
<result column="pro_id" property="id"/> <result column="pro_id" property="id"/>
@ -20,14 +20,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dp.nick_name, dp.nick_name,
dp.create_time dp.create_time
FROM FROM
manage_device_pro dp manage_device_pro dp
<where> <where>
<if test="condition.bind_code != null and condition.bind_code != ''"> <if test="condition.bind_code != null and condition.bind_code != ''">
and dp.bind_code like concat(concat('%',#{condition.bind_code}),'%') and dp.bind_code like concat(concat('%',#{condition.bind_code}),'%')
</if> </if>
<if test="condition.pro_name != null and condition.pro_name != ''"> <if test="condition.pro_name != null and condition.pro_name != ''">
and dp.pro_name like concat(concat('%',#{condition.pro_name}),'%') and dp.pro_name like concat(concat('%',#{condition.pro_name}),'%')
</if> </if>
</where> </where>
</select> </select>
</mapper> </mapper>

Loading…
Cancel
Save