diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java index b100045..84dbc89 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/media/api/IHttpMediaService.java +++ b/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\"}" )}))) - @PostMapping(PREFIX + "/workspaces/{workspace_id}/upload-callback") + @PostMapping(PREFIX + "/workspaces/{workspace_id}/{pro_id}/upload-callback") HttpResultResponse mediaUploadCallback( @PathVariable(name = "workspace_id") String workspaceId, + @PathVariable(name = "pro_id") Integer proId, @Valid @RequestBody MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp); diff --git a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java b/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java index d826853..3815570 100644 --- a/dk-common/common-cloudsdk/src/main/java/org/dromara/common/sdk/cloudapi/wayline/api/IHttpWaylineService.java +++ b/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")) }) @GetMapping(PREFIX + "/workspaces/{workspace_id}/waylines") - HttpResultResponse> getWaylineList( + HttpResultResponse> getWaylines( @Valid @ParameterObject GetWaylineListRequest request, @PathVariable(name = "workspace_id") String workspaceId, + @RequestParam(name = "proIds",required = false) List 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> getWaylineList( + @PathVariable(name = "workspace_id") String workspaceId, + @RequestParam(name = "pro_id",required = false) Integer proId, HttpServletRequest req, HttpServletResponse rsp); /** diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java index 8b9cd7c..564a09c 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertController.java @@ -166,4 +166,16 @@ public class BusinessAlertController extends BaseController { } + /** + * 查询实时流预警 + */ + @SaCheckPermission("business:alertAi:list") + @Operation(summary ="查询实时流预警",description = "查询实时流预警") + @GetMapping("/ai/verify/alert") + public R> listAiVerifyAlert(BusinessAlertVo vo) { + return R.ok(businessAlertService.listAiVerifyAlert(vo)); + } + + + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java index be9c2c6..f86da09 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java @@ -198,6 +198,7 @@ public class BusinessAlertStatisticsController extends BaseController { @Operation(summary="预警对比统计(预警状态)", description="预警对比统计(预警状态)") @GetMapping(value = "/compare/status/count") public R>> countAlertStatusCompare(BusinessAlertBo businessAlertBo) { + return R.ok(statisticsService.countAlertStatusCompare(businessAlertBo)); } diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java index 641c988..5f7992b 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java +++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessAlertService.java @@ -95,4 +95,6 @@ public interface IBusinessAlertService { Boolean transferAlert(BusinessAlertVo vo); BusinessAlert getBusinessAlert(Long alertId); + + List listAiVerifyAlert(BusinessAlertVo vo); } diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java index 07bbdc4..7f06fac 100644 --- a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertServiceImpl.java +++ b/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); } - /** * 查询当前用户待办预警 * @param bo @@ -669,6 +668,26 @@ public class BusinessAlertServiceImpl implements IBusinessAlertService { return this.baseMapper.selectVoList(wrapper); } + + @Override + public List listAiVerifyAlert(BusinessAlertVo vo) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(BusinessAlert::getHandleType, BusinessStatusEnum.VERIFY.getStatus()); + wrapper.eq(BusinessAlert::getBusinessType, vo.getBusinessType()); + if (ObjectUtil.isNotEmpty(vo.getDeptId())){ + wrapper.eq(BusinessAlert::getDeptId, vo.getDeptId()); + } + + List businessAlertVos = this.baseMapper.selectVoList(wrapper); + businessAlertVos.forEach(businessAlertVo->{ + URL url = MinioUntil.getObjectUrlOne(MinIOConstants.BUCKET_DKCY, businessAlertVo.getImages(), 3600); + + businessAlertVo.setImages(url.toString()); + }); + + return businessAlertVos; + } + @Override public Boolean deleteAlert(List alertIdList) { if (ObjectUtil.isEmpty(alertIdList)) { diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml index 4a938ec..8e7b549 100644 --- a/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessAlertMapper.xml @@ -111,51 +111,51 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java index 7480e39..b0b21a6 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java +++ b/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 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.TaskTypeEnum; import org.dromara.common.sdk.cloudapi.wayline.WaylineJobTypeEnum; 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.service.IDevicePayloadService; import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceService; import com.fasterxml.jackson.databind.ObjectMapper; 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.debug.DebugMethodEnum; 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.param.*; 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.model.entity.WaylineJobEntity; 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.stereotype.Service; -import java.util.Date; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import static org.dromara.common.sdk.cloudapi.device.RcLostActionEnum.RETURN_HOME; import static org.dromara.common.sdk.cloudapi.wayline.WaylineMethodEnum.RETURN_HOME_CANCEL; @@ -85,6 +83,9 @@ public class ControlServiceImpl implements IControlService { @Autowired private IWaylineJobMapper waylineJobMapper; + @Autowired + private IMediaRedisService mediaRedisService; + private RemoteDebugHandler checkDebugCondition(String sn, RemoteDebugParam param, RemoteDebugMethodEnum controlMethodEnum) { RemoteDebugHandler handler = Objects.nonNull(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.setRthAltitude(param.getRthAltitude()); waylineJobEntity.setMediaCount(0); + waylineJobEntity.setProId(dockOpt.get().getProId()); + waylineJobEntity.setFileId("-1"); 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 response = abstractControlService.takeoffToPoint( SDKManager.getDeviceSDK(sn), mapper.convertValue(param, TakeoffToPointRequest.class)); ServicesReplyData reply = response.getData(); @@ -217,16 +225,16 @@ public class ControlServiceImpl implements IControlService { TopicServicesResponse response; switch (authority) { case FLIGHT: - if (deviceService.checkAuthorityFlight(sn)) { - return HttpResultResponse.success(); - } +// if (deviceService.checkAuthorityFlight(sn)) { +// return HttpResultResponse.success(); +// } response = abstractControlService.flightAuthorityGrab(SDKManager.getDeviceSDK(sn)); break; case PAYLOAD: - if (checkPayloadAuthority(sn, param.getPayloadIndex())) { - return HttpResultResponse.success(); - } +// if (checkPayloadAuthority(sn, param.getPayloadIndex())) { +// return HttpResultResponse.success(); +// } response = abstractControlService.payloadAuthorityGrab(SDKManager.getDeviceSDK(sn), new PayloadAuthorityGrabRequest().setPayloadIndex(new PayloadIndex(param.getPayloadIndex()))); break; @@ -260,6 +268,7 @@ public class ControlServiceImpl implements IControlService { mapper.convertValue(param.getData(), param.getCmd().getCmd().getClazz())); ServicesReplyData serviceReply = response.getData(); + return serviceReply.getResult().isSuccess() ? HttpResultResponse.success() : HttpResultResponse.error(serviceReply.getResult()); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/PayloadCommandsHandler.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/PayloadCommandsHandler.java index 4618fed..f0b905c 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/PayloadCommandsHandler.java +++ b/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); checkDeviceOnline(deviceSn); - checkAuthority(deviceSn); + //checkAuthority(deviceSn); if (!canPublish(deviceSn)) { throw new RuntimeException("无人机的当前状态不支持此功能,请稍后再试。"); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java b/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java index 1473203..bae5ca3 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/SDKControlService.java +++ b/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(); + webSocketMessageService.sendBatch(deviceOpt.get().getWorkspaceId(), UserTypeEnum.WEB.getVal(), BizCodeEnum.TAKE_OFF_TO_POINT_PROGRESS.getCode(), ResultNotifyDTO.builder().sn(dockSn) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java index 139af62..15fd4c6 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/DeviceController.java +++ b/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.sample.manage.model.dto.DeviceDTO; import org.dromara.sample.manage.model.dto.DeviceFirmwareUpgradeDTO; +import org.dromara.sample.manage.service.IDeviceProService; import org.dromara.sample.manage.service.IDeviceService; import com.fasterxml.jackson.databind.JsonNode; import lombok.extern.slf4j.Slf4j; @@ -37,6 +38,10 @@ public class DeviceController { @Autowired private IDeviceService deviceService; + + @Autowired + private IDeviceProService deviceProService; + /** * 获取一个工作区中所有在线设备的列表。 * Get the topology list of all online devices in one workspace. @@ -45,8 +50,8 @@ public class DeviceController { @GetMapping("/{workspace_id}/devices") @Operation(summary = "获取一个工作区中所有在线设备的列表。", description = "获取一个工作区中所有在线设备的列表") public HttpResultResponse> getDevices(@PathVariable("workspace_id") String workspaceId, - @RequestParam(name = "nickname",required = false) String nickname) { - List devicesList = deviceService.getDevicesTopoForWeb(workspaceId,nickname); + @RequestParam(name = "nickname",required = false) String nickname,@RequestParam(name = "proIds",required = false) List proIds) { + List devicesList = deviceService.getDevicesTopoForWeb(workspaceId,nickname,proIds); return HttpResultResponse.success(devicesList); } @@ -92,9 +97,9 @@ public class DeviceController { @PathVariable("workspace_id") String workspaceId,Integer domain, @RequestParam(name = "pageNum", defaultValue = "1") Long page, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, - @RequestParam(name = "nickname",required = false) String nickname) { - LoginUser loginUser = LoginHelper.getLoginUser(); - PaginationData devices = deviceService.getBoundDevicesWithDomain(workspaceId, page, pageSize, domain,nickname); + @RequestParam(name = "nickname",required = false) String nickname, + @RequestParam(name = "proIds",required = false) List proIds) { + PaginationData devices = deviceService.getBoundDevicesWithDomain(workspaceId, page, pageSize, domain,nickname,proIds); return HttpResultResponse.success(devices); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java index 7e9a8e8..1ade38a 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/controller/MegaphoneController.java @@ -268,6 +268,7 @@ public class MegaphoneController { @RequestBody MapobjectMap ) { String top = "task/image/disobey/smoke"; + String topTow = "task/image/disobey/streamType"; //发送mqtt String s = remoteConfigService.selectStreamIp(); DisobeyDTO param = Convert.convert(DisobeyDTO.class, objectMap); @@ -298,6 +299,13 @@ public class MegaphoneController { disobeyDTO.setRtmpUrl(param.getRtmpUrl()); gatewayPublish.publish(top,new CommonTopicRequest<>() .setData(Objects.requireNonNull(disobeyDTO)),1); + + Map 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()){ @@ -336,8 +344,33 @@ public class MegaphoneController { gatewayPublish.publish(top,new CommonTopicRequest<>() .setData(Objects.requireNonNull(disobeyDTO)),1); + Map 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().eq("rtmp_url", param.getRtmpUrl()) + .eq("stream_type", type)); + List 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){ diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java index 6e2fcca..2bbfb94 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceDTO.java @@ -102,7 +102,7 @@ public class DeviceDTO { private String tenantId; @Schema(description = "项目ID") - private String proId; + private Integer proId; @Schema(description = "项目ID") private DeviceProEntity deviceProEntity; diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceQrtzDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceQrtzDTO.java index 8b7f833..0f061cb 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/dto/DeviceQrtzDTO.java +++ b/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 ListdeptIds; + + private List proIds; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceQueryParam.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceQueryParam.java index 301b75c..55368e4 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/model/param/DeviceQueryParam.java +++ b/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 isAsc; + + private List proIds; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java index 5bb6e60..0c77906 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/IDeviceService.java @@ -68,7 +68,7 @@ public interface IDeviceService { * @param workspaceId * @return */ - List getDevicesTopoForWeb(String workspaceId,String nickname); + List getDevicesTopoForWeb(String workspaceId,String nickname,List proIds); /** @@ -131,7 +131,7 @@ public interface IDeviceService { * @param domain * @return */ - PaginationData getBoundDevicesWithDomain(String workspaceId, Long page, Long pageSize, Integer domain,String nickname); + PaginationData getBoundDevicesWithDomain(String workspaceId, Long page, Long pageSize, Integer domain,String nickname,List proIds); /** * Unbind device base on device's sn. diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java index 7ac5da3..07ad409 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceServiceImpl.java +++ b/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.update.LambdaUpdateWrapper; 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.firmware.*; 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.tsa.DeviceIconUrl; 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 lombok.extern.slf4j.Slf4j; import org.dromara.sample.websocket.service.IWebSocketMessageService; +import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -58,6 +61,9 @@ import java.util.List; import java.util.Optional; 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 @@ -132,6 +138,9 @@ public class DeviceServiceImpl implements IDeviceService { @Autowired private IDeviceProMapper deviceProMapper; + @Autowired + private IDeviceProService deviceProService; + @Override public void subDeviceOffline(String deviceSn) { // 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()), - DeviceEntity::getWorkspaceId, param.getWorkspaceId()) + DeviceEntity::getWorkspaceId, param.getWorkspaceId()) .eq(param.getBoundStatus() != null, DeviceEntity::getBoundStatus, param.getBoundStatus()) + .in(ObjectUtil.isAllNotEmpty(param.getProIds()), + DeviceEntity::getProId, param.getProIds()) .orderBy(param.isOrderBy(), - param.isAsc(), DeviceEntity::getId)) + param.isAsc(), DeviceEntity::getId)) .stream() .map(this::deviceEntityConvertToDTO) .collect(Collectors.toList()); } @Override - public List getDevicesTopoForWeb(String workspaceId,String nickname) { + public List getDevicesTopoForWeb(String workspaceId,String nickname,List proIds) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if(proIds == null){ + proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); + } List devicesList = this.getDevicesByParams( DeviceQueryParam.builder() .workspaceId(workspaceId) .domains(List.of(DeviceDomainEnum.REMOTER_CONTROL.getDomain(), DeviceDomainEnum.DOCK.getDomain())) + .proIds(proIds) .build()); devicesList.stream() @@ -258,14 +274,15 @@ public class DeviceServiceImpl implements IDeviceService { DeviceDTO subDevice = getDevicesByParams(DeviceQueryParam.builder().deviceSn(gateway.getChildDeviceSn()).build()).get(0); subDevice.setStatus(deviceRedisService.checkDeviceOnline(subDevice.getDeviceSn())); - List capacityCameraByDeviceSn = capacityCameraService.getCapacityCameraByDeviceSn(gateway.getChildDeviceSn()); + /*List capacityCameraByDeviceSn = capacityCameraService.getCapacityCameraByDeviceSn(gateway.getChildDeviceSn()); String videoId = ""; if(capacityCameraByDeviceSn != null && capacityCameraByDeviceSn.size() > 0 ){ if(capacityCameraByDeviceSn.get(0).getVideosList().size() > 0){ 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.setVideoId(DeviceEnum.videoId); // payloads @@ -405,7 +422,8 @@ public class DeviceServiceImpl implements IDeviceService { .map(WorkspaceDTO::getWorkspaceName).orElse("") : "") .firmwareStatus(DeviceFirmwareStatusEnum.NOT_UPGRADE) .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) { log.error(e.getLocalizedMessage() + "Entity: {}", entity); } @@ -495,13 +513,14 @@ public class DeviceServiceImpl implements IDeviceService { @Override public PaginationData getBoundDevicesWithDomain(String workspaceId, Long page, - Long pageSize, Integer domain,String nickname) { + Long pageSize, Integer domain,String nickname,List proIds) { Page pagination = mapper.selectPage(new Page<>(page, pageSize), new LambdaQueryWrapper() .eq(DeviceEntity::getDomain, domain) .eq(DeviceEntity::getWorkspaceId, workspaceId) .eq(DeviceEntity::getBoundStatus, true) + .in(ObjectUtil.isAllNotEmpty(proIds),DeviceEntity::getProId, proIds) .eq(org.dromara.common.core.utils.StringUtils.isNotEmpty(nickname),DeviceEntity::getNickname,nickname)); List devicesList = pagination.getRecords().stream().map(this::deviceEntityConvertToDTO) .peek(device -> { @@ -728,7 +747,8 @@ public class DeviceServiceImpl implements IDeviceService { .firmwareVersion(dto.getFirmwareVersion()) .compatibleStatus(dto.getFirmwareStatus() == null ? null : 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(); } } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java index b81b722..5bea65e 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java @@ -139,7 +139,7 @@ public class LiveStreamServiceImpl implements ILiveStreamService { default: 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){ Optional> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceBySn.getDeviceSn()); @@ -172,7 +172,7 @@ public class LiveStreamServiceImpl implements ILiveStreamService { } } - } + }*/ // MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",liveParam.getVideoId().getDroneSn(),liveParam.getVideoId().toString()); return HttpResultResponse.success(live); diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java index ad9d679..47c00c9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java +++ b/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 org.dromara.common.redis.utils.RedisOpsUtils; 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.api.AbstractDeviceService; 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.SLASH; +import static org.dromara.common.core.constant.Constants.FLY_COUNT; + /** * @author sean * @version 1.7 @@ -159,10 +162,14 @@ public class SDKDeviceService extends AbstractDeviceService { if(request.getData().getMediaFileDetail() != null){ 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(); + 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())) { deviceService.getDeviceBySn(device.getChildDeviceSn()).ifPresent(device::setChildren); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java index d53add4..6a91180 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/FileController.java +++ b/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.sdk.common.HttpResultResponse; 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.service.IFileService; import org.dromara.system.api.model.LoginUser; @@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.net.URL; +import java.util.List; /** * @author sean @@ -28,6 +30,8 @@ public class FileController { @Autowired private IFileService fileService; + + /** * 根据工作区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获取此工作区中所有媒体文件的信息。") public HttpResultResponse> getFilesList(@RequestParam(name = "pageNum", defaultValue = "1") Long page, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, - @PathVariable(name = "workspace_id") String workspaceId) { - PaginationData filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize); + @PathVariable(name = "workspace_id") String workspaceId, + @RequestParam(name = "proIds",required = false) List proIds) { + PaginationData filesList = fileService.getMediaFilesPaginationByWorkspaceId(workspaceId, page, pageSize,proIds); return HttpResultResponse.success(filesList); } @@ -72,8 +77,9 @@ public class FileController { public HttpResultResponse> getFilesByJobId(@RequestParam(name = "pageNum", defaultValue = "1") Long page, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, @PathVariable(name = "workspace_id") String workspaceId, - @PathVariable(name = "job_id") String jobId) { - PaginationData filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId); + @PathVariable(name = "job_id") String jobId, + @RequestParam(name = "type", required = false) Integer type) { + PaginationData filesList = fileService.getMediaFilesPaginationByJobId(workspaceId, page, pageSize,jobId,type); for (MediaFileDTO mediaFileDTO :filesList.getList()){ mediaFileDTO.setUrl(fileService.getObjectUrl(workspaceId, mediaFileDTO.getFileId()).toString()); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java index 2fe3bc4..69dabb9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/controller/MediaController.java @@ -52,8 +52,8 @@ public class MediaController implements IHttpMediaService { * @return */ @Override - public HttpResultResponse mediaUploadCallback( String workspaceId, @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) { - mediaService.saveMediaFile(workspaceId, request); + public HttpResultResponse mediaUploadCallback( String workspaceId,Integer proId, @Valid MediaUploadCallbackRequest request, HttpServletRequest req, HttpServletResponse rsp) { + mediaService.saveMediaFile(workspaceId, request,proId); return HttpResultResponse.success(request.getObjectKey()); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java index ac9b1b0..7d53fc8 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/model/MediaFileEntity.java +++ b/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") private Integer fileIndex; + + @TableField("pro_id") + private Integer proId; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java index 62adab9..5980e9d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java @@ -29,7 +29,7 @@ public interface IFileService { * @param file * @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. @@ -45,7 +45,7 @@ public interface IFileService { * @param pageSize * @return */ - PaginationData getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize); + PaginationData getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List proIds); /** * Get the download address of the file. @@ -71,7 +71,7 @@ public interface IFileService { * @param pageSize * @return */ - PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId); + PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize,String JobId,Integer type); /** diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java index 141039d..51940dc 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java @@ -26,7 +26,7 @@ public interface IMediaService { * @param file * @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. diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java index 4b20be7..c2b62fa 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java +++ b/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; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.oss.core.OssClient; 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.media.FlightTask; 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.sample.manage.model.dto.DeviceDictionaryDTO; 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.mapper.IFileMapper; import org.dromara.sample.media.model.MediaFileDTO; import org.dromara.sample.media.model.MediaFileEntity; import org.dromara.sample.media.service.IFileService; +import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -43,7 +47,8 @@ public class FileServiceImpl implements IFileService { @Autowired private IDeviceDictionaryService deviceDictionaryService; - + @Autowired + private IDeviceProService deviceProService; private Optional getMediaByFingerprint(String workspaceId, String fingerprint) { MediaFileEntity fileEntity = mapper.selectOne(new LambdaQueryWrapper() @@ -65,10 +70,11 @@ public class FileServiceImpl implements IFileService { } @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); fileEntity.setWorkspaceId(workspaceId); fileEntity.setFileId(UUID.randomUUID().toString()); + fileEntity.setProId(proId); fileEntity.setFileType(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf(".")+1)); if(!fileEntity.getFileType().equals("DAT")){ fileEntity.setFileStatus(fileEntity.getFileName().substring( fileEntity.getFileName().lastIndexOf("_")+1, fileEntity.getFileName().lastIndexOf("."))); @@ -91,11 +97,16 @@ public class FileServiceImpl implements IFileService { } @Override - public PaginationData getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize) { + public PaginationData getMediaFilesPaginationByWorkspaceId(String workspaceId, long page, long pageSize,List proIds) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if(proIds == null){ + proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); + } Page pageData = mapper.selectPage( new Page(page, pageSize), new LambdaQueryWrapper() .eq(MediaFileEntity::getWorkspaceId, workspaceId) + .in(ObjectUtil.isAllNotEmpty(proIds),MediaFileEntity::getProId, proIds) .orderByDesc(MediaFileEntity::getId)); List records = pageData.getRecords() .stream() @@ -125,12 +136,15 @@ public class FileServiceImpl implements IFileService { } @Override - public PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId) { + public PaginationData getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId,Integer type) { + + String [] fileTypes = new String[]{"jpeg","mp4"}; Page pageData = mapper.selectPage( new Page(page, pageSize), new LambdaQueryWrapper() .eq(MediaFileEntity::getWorkspaceId, workspaceId) .eq(MediaFileEntity::getJobId, JobId) + .in(ObjectUtil.isNotEmpty(type),MediaFileEntity::getFileType,fileTypes) .orderByDesc(MediaFileEntity::getId)); List records = pageData.getRecords() .stream() diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java index 226f137..0ff5bbb 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java +++ b/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; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.StringUtils; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -80,8 +82,8 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ } @Override - public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file) { - return fileService.saveFile(workspaceId, file,null); + public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file,Integer proId) { + return fileService.saveFile(workspaceId, file,null,proId); } @Override @@ -123,8 +125,12 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ } return new TopicEventsResponse().setData(MqttReply.success()); } + List deviceQrtzFileEntities = new ArrayList<>(); MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId); - List deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper().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().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId())); + } + // duplicate data if (deviceOpt.isEmpty() || (Objects.nonNull(mediaFileCount) && request.getBid().equals(mediaFileCount.getBid()) @@ -145,10 +151,11 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ return null; } - notifyUploadedCount(mediaFileCount, request, jobId, device,deviceQrtzFileEntities); + notifyUploadedCount(mediaFileCount, request, jobId, device); return new TopicEventsResponse().setData(MqttReply.success()); } + @Override public TopicEventsResponse highestPriorityUploadFlightTaskMedia( TopicEventsRequest request, MessageHeaders headers) { @@ -189,12 +196,12 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ file.setPath(objectKey.substring(Optional.of(objectKey.indexOf("mediafile")) .filter(index -> index > 0).map(index -> index++).orElse(0), 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; } - private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest request, String jobId, DeviceDTO dock, List deviceQrtzFileEntities) { + private void notifyUploadedCount(MediaFileCountDTO mediaFileCount, TopicEventsRequest request, String jobId, DeviceDTO dock) { // Do not notify when files that do not belong to the route are uploaded. //不通知不属于路由的文件被上传。 if (Objects.isNull(mediaFileCount)) { diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java index fe5cd46..346a8f7 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineFileController.java @@ -1,6 +1,7 @@ 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.tags.Tag; 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.common.HttpResultResponse; 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.entity.AudioFileEntity; import org.dromara.sample.wayline.model.entity.WaylineFileEntity; @@ -31,8 +36,11 @@ import java.net.URL; import java.sql.SQLException; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; +import static org.bouncycastle.internal.asn1.cms.CMSObjectIdentifiers.data; + /** * @author sean @@ -46,6 +54,9 @@ public class WaylineFileController implements IHttpWaylineService { @Autowired private IWaylineFileService waylineFileService; + @Autowired + private IDeviceRedisService deviceRedisService; + /** * 根据waylineID删除工作区中的wayline文件。 * 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") @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)) { return HttpResultResponse.error("未收到文件。"); } + Optional deviceOnline = deviceRedisService.getDeviceOnline(deviceSn); + if(proId == null){ + proId = deviceOnline.get().getProId(); + } LoginUser loginUser = LoginHelper.getLoginUser(); String creator = loginUser.getUsername(); - waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn); + waylineFileService.importKmzFile(file, workspaceId, creator,deviceSn,proId); return HttpResultResponse.success(); } @@ -86,11 +101,17 @@ public class WaylineFileController implements IHttpWaylineService { * @return */ @Override - public HttpResultResponse> getWaylineList(@Valid GetWaylineListRequest request,String workspaceId, HttpServletRequest req, HttpServletResponse rsp) { - PaginationData data = waylineFileService.getWaylinesByParam(workspaceId, request); + public HttpResultResponse> getWaylines(@Valid GetWaylineListRequest request,String workspaceId,List proIds, HttpServletRequest req, HttpServletResponse rsp) { + PaginationData data = waylineFileService.getWaylinesByParam(workspaceId, request,proIds); return HttpResultResponse.success(data); } + @Override + public HttpResultResponse> getWaylineList(String workspaceId,Integer proId, HttpServletRequest req, HttpServletResponse rsp) { + List waylinesByParamList = waylineFileService.getWaylinesByParamList(workspaceId, proId); + return HttpResultResponse.success(waylinesByParamList); + } + /** * 根据 wayline 文件 ID 查询文件的下载地址,并直接重定向到此地址进行下载。 * Query the download address of the file according to the wayline file id, diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java index 20c444c..758bd5e 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java +++ b/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.wayline.model.dto.WaylineJobDTO; 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.UpdateJobParam; import org.dromara.sample.wayline.service.IFlightTaskService; import org.dromara.sample.wayline.service.IWaylineFileService; 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.impl.WaylineFileServiceImpl; import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -33,6 +36,8 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import static org.bouncycastle.asn1.x500.style.RFC4519Style.name; + /** * @author sean @@ -81,8 +86,11 @@ public class WaylineJobController { @Operation(summary = "查询工作区中的所有作业。。", description = "查询工作区中的所有作业。") public HttpResultResponse> getJobs(@RequestParam(name = "pageNum", defaultValue = "1") Long page, @RequestParam(name = "pageSize", defaultValue = "10") Long pageSize, - @PathVariable(name = "workspace_id") String workspaceId) { - PaginationData data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize); + @PathVariable(name = "workspace_id") String workspaceId, + @RequestParam(name = "proIds" , required = false) List proIds, + @RequestParam(name = "fileId" , required = false) String fileId, + @RequestParam(name = "name" , required = false) String name) { + PaginationData data = waylineJobService.getJobsByWorkspaceId(workspaceId, page, pageSize,fileId,proIds,name); return HttpResultResponse.success(data); } @@ -120,28 +128,25 @@ public class WaylineJobController { flighttaskService.updateJobStatus(workspaceId, jobId, param); return HttpResultResponse.success(); } - - public static void main(String[] args) { - WaylineTaskStatusEnum pause = WaylineTaskStatusEnum.RESUME; - System.out.println(pause.getVal()); - + @GetMapping("/{workspace_id}/getJobIdByDeviceSn") + @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。") + public HttpResultResponse getJobIdByDeviceSn(@PathVariable(name = "workspace_id") String workspaceId, + @RequestParam(name = "device_sn") String deviceSn, HttpServletRequest req, HttpServletResponse rsp) { + Optional> 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") @Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。") 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 { Optional> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceSn); - if(runningWaylineJob.isEmpty()) { - return; - } + if(runningWaylineJob.isEmpty())return; String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId(); Optional waylineJobDTO = waylineJobService.getJobByJobId(workspaceId, jobId); - if(waylineJobDTO.isEmpty()) { - return; - } + if(waylineJobDTO.isEmpty())return; URL url = waylineFileService.getObjectUrl(workspaceId, waylineJobDTO.get().getFileId()); rsp.sendRedirect(url.toString()); } catch (IOException | SQLException e) { diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java index 828b018..580dab9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineFileDTO.java +++ b/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 proId; + } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java index 9973b5a..62e97e5 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/dto/WaylineJobDTO.java +++ b/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 java.time.LocalDateTime; +import java.util.List; /** * @author sean @@ -72,4 +73,6 @@ public class WaylineJobDTO { private String parentId; private ProgressExtBreakPoint breakPoint; + + private List proIds; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java index 32ac78d..c92be00 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineFileEntity.java +++ b/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) private String deviceName; + @TableField("pro_id") + private Integer proId; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java index 2ee1053..eada478 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/model/entity/WaylineJobEntity.java +++ b/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) private ProgressExtBreakPoint breakPoint; + + @TableField("pro_id") + private Integer proId; } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java index 13e4e30..03f6381 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineFileService.java +++ b/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.sample.wayline.model.dto.WaylineFileDTO; import org.dromara.sample.wayline.model.entity.AudioFileEntity; +import org.dromara.sample.wayline.model.entity.WaylineFileEntity; import org.springframework.web.multipart.MultipartFile; import java.io.File; @@ -26,7 +27,9 @@ public interface IWaylineFileService { * @param param * @return */ - PaginationData getWaylinesByParam(String workspaceId, GetWaylineListRequest param); + PaginationData getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List proIds); + + List getWaylinesByParamList(String workspaceId,Integer proId); /** * Query the information of this wayline file according to the wayline file id. @@ -83,10 +86,12 @@ public interface IWaylineFileService { * @param creator * @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); + WaylineFileEntity getWaylineFileByWaylineId(Integer waylineId); + /** * Perform paging queries based on query parameters. diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java index f38ca24..6b2532b 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/IWaylineJobService.java +++ b/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. * @return */ - Optional createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime); + Optional 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. @@ -71,7 +71,7 @@ public interface IWaylineJobService { * @param pageSize * @return */ - PaginationData getJobsByWorkspaceId(String workspaceId, long page, long pageSize); + PaginationData getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List proIds,String name); /** * Query the wayline execution status of the dock. diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java index f87d1f6..cc9b9d9 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/FlightTaskServiceImpl.java +++ b/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()) { continue; } - - Optional waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, loginUser.getUsername(), new Date(beginTime), new Date(endTime)); + Optional deviceOnline = deviceRedisService.getDeviceOnline(param.getDockSn()); + if(deviceOnline.isEmpty()){ + throw new SQLException("机场信息不存在"); + } + if(deviceOnline.get().getProId() == null){ + throw new SQLException("项目组不存在"); + } + Optional waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, loginUser.getUsername(), new Date(beginTime), new Date(endTime),deviceOnline.get().getProId()); if (waylineJobOpt.isEmpty()) { throw new SQLException("无法创建路线作业。"); } @@ -273,8 +279,14 @@ public class FlightTaskServiceImpl extends AbstractWaylineService implements IFl if (TaskTypeEnum.IMMEDIATE != param.getTaskType() && endTime < System.currentTimeMillis()) { continue; } - - Optional waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, username, new Date(beginTime), new Date(endTime)); + Optional deviceOnline = deviceRedisService.getDeviceOnline(param.getDockSn()); + if(deviceOnline.isEmpty()){ + throw new SQLException("机场信息不存在"); + } + if(deviceOnline.get().getProId() == null){ + throw new SQLException("项目组不存在"); + } + Optional waylineJobOpt = waylineJobService.createWaylineJob(param, workspaceId, username, new Date(beginTime), new Date(endTime),deviceOnline.get().getProId()); if (waylineJobOpt.isEmpty()) { throw new SQLException("无法创建路线作业。"); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java index ddbe4f4..4e18381 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/SDKWaylineService.java +++ b/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.QueryWrapper; 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.api.AbstractWaylineService; 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.manage.mapper.IDeviceQrtzFileMapper; 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.enums.UserTypeEnum; +import org.dromara.sample.manage.service.IDeviceFlightRecordsService; import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.media.model.MediaFileCountDTO; import org.dromara.sample.media.service.IMediaRedisService; @@ -71,6 +74,9 @@ public class SDKWaylineService extends AbstractWaylineService { @Autowired private IWebSocketMessageService webSocketMessageService; + @Autowired + private IDeviceFlightRecordsService deviceFlightRecordsService; + @Override public TopicEventsResponse deviceExitHomingNotify(TopicEventsRequest request, MessageHeaders headers) { return super.deviceExitHomingNotify(request, headers); @@ -105,7 +111,14 @@ public class SDKWaylineService extends AbstractWaylineService { .completedTime(LocalDateTime.now()) .mediaCount(output.getExt().getMediaCount()) .build(); - + Optional 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. if (Objects.nonNull(job.getMediaCount()) && job.getMediaCount() != 0) { mediaRedisService.setMediaCount(response.getGateway(), job.getJobId(), diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java index 3cfea66..68fb04d 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineFileServiceImpl.java +++ b/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.entity.UploadResult; 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.DeviceEnum; 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.resource.api.RemoteFileService; 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.IWaylineFileMapper; 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.WaylineFileEntity; import org.dromara.sample.wayline.service.IWaylineFileService; +import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -77,9 +81,21 @@ public class WaylineFileServiceImpl implements IWaylineFileService { @DubboReference private RemoteFileService remoteFileService; + @Autowired + private IDeviceProService deviceProService; + + @Autowired + private IDeviceRedisService deviceRedisService; + + @Override - public PaginationData getWaylinesByParam(String workspaceId, GetWaylineListRequest param) { + public PaginationData getWaylinesByParam(String workspaceId, GetWaylineListRequest param,List proIds) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if(proIds == null){ + proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); + } // Paging Query + List finalProIds = proIds; Page page = mapper.selectPage( new Page(param.getPage(), param.getPageSize()), new LambdaQueryWrapper() @@ -103,6 +119,9 @@ public class WaylineFileServiceImpl implements IWaylineFileService { .and(ObjectUtil.isNotEmpty(param.getDeviceSn()), wrapper -> { 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()) // There is a risk of SQL injection .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())); } + @Override + public List getWaylinesByParamList(String workspaceId,Integer proId) { + + List waylineFileEntities = mapper.selectList( + new LambdaQueryWrapper() + .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 records = waylineFileEntities + .stream() + .map(this::entityConvertToDTO) + .collect(Collectors.toList()); + return records; + } + @Override public Optional getWaylineByWaylineId(String workspaceId, String waylineId) { return Optional.ofNullable( @@ -203,7 +240,10 @@ public class WaylineFileServiceImpl implements IWaylineFileService { } @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 waylineFileOpt = validKmzFile(file); if (waylineFileOpt.isEmpty()) { throw new RuntimeException("文件格式不正确。"); @@ -230,6 +270,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService { }else { waylineFile.setFileNo(1); } + waylineFile.setProId(proId); this.saveWaylineFile(workspaceId, waylineFile); } catch (IOException e) { e.printStackTrace(); @@ -244,6 +285,13 @@ public class WaylineFileServiceImpl implements IWaylineFileService { return waylineId; } + @Override + public WaylineFileEntity getWaylineFileByWaylineId(Integer waylineId) { + return mapper.selectOne( + new LambdaQueryWrapper() + .eq(WaylineFileEntity::getId, waylineId)); + } + @Override public PaginationData getWaylinesByParamNew(String workspaceId, GetWaylineListRequest param) { Page waylineFileEntityPage = new Page<>(param.getPage(), param.getPageSize()); @@ -466,6 +514,7 @@ public class WaylineFileServiceImpl implements IWaylineFileService { .favorited(file.getFavorited()) .sign(file.getSign()) .deviceSn(file.getDeviceSns().get(0)) + .proId(file.getProId()) .build(); } diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java index b50245c..dbfb85f 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/wayline/service/impl/WaylineJobServiceImpl.java +++ b/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; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.dromara.common.redis.config.RedisConst; 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.DroneModeCodeEnum; 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.common.Pagination; 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.manage.model.dto.DeviceDTO; +import org.dromara.sample.manage.service.IDeviceProService; import org.dromara.sample.manage.service.IDeviceRedisService; import org.dromara.sample.manage.service.IDeviceService; 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 com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; +import org.dromara.system.api.model.LoginUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.sql.SQLException; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; @@ -72,6 +78,9 @@ public class WaylineJobServiceImpl implements IWaylineJobService { @Autowired private IWaylineRedisService waylineRedisService; + @Autowired + private IDeviceProService deviceProService; + private Optional insertWaylineJob(WaylineJobEntity jobEntity) { int id = mapper.insert(jobEntity); if (id <= 0) { @@ -81,7 +90,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService { } @Override - public Optional createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime) { + public Optional createWaylineJob(CreateJobParam param, String workspaceId, String username, Date beginTime, Date endTime,Integer proId) { if (Objects.isNull(param)) { return Optional.empty(); } @@ -104,6 +113,7 @@ public class WaylineJobServiceImpl implements IWaylineJobService { .mediaCount(0) .breakPoint(param.getBreakPoint()) .jobType(param.getJobType().getType()) + .proId(proId) .build(); return insertWaylineJob(jobEntity); @@ -163,11 +173,18 @@ public class WaylineJobServiceImpl implements IWaylineJobService { } @Override - public PaginationData getJobsByWorkspaceId(String workspaceId, long page, long pageSize) { + public PaginationData getJobsByWorkspaceId(String workspaceId, long page, long pageSize,String fileId,List proIds,String name) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if(ObjectUtil.isAllEmpty(proIds)){ + proIds = deviceProService.listDeviceGroup(loginUser.getUserId()); + } Page pageData = mapper.selectPage( new Page(page, pageSize), new LambdaQueryWrapper() .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)); List records = pageData.getRecords() .stream() diff --git a/dk-modules/sample/src/main/resources/mapper/DeviceQrtzMapper.xml b/dk-modules/sample/src/main/resources/mapper/DeviceQrtzMapper.xml index 1a4f704..188fc45 100644 --- a/dk-modules/sample/src/main/resources/mapper/DeviceQrtzMapper.xml +++ b/dk-modules/sample/src/main/resources/mapper/DeviceQrtzMapper.xml @@ -43,6 +43,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} + + AND wd.pro_id in + + #{proId} + + order by wdq.status asc, wdq.create_time desc diff --git a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml index d685b89..f7e41db 100644 --- a/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml +++ b/dk-modules/sample/src/main/resources/mapper/IDeviceProMapper.xml @@ -1,7 +1,7 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> @@ -10,24 +10,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - - - - - - - - - - - - - - - - -