From 174017c59d630b0f65375907f173b8d2a9bd233d Mon Sep 17 00:00:00 2001 From: wuyuan <15505152113@163.com> Date: Thu, 3 Apr 2025 15:37:39 +0800 Subject: [PATCH] 11 --- .../service/impl/DeviceQrtzServiceImpl.java | 112 +++++++++--------- .../manage/service/impl/SDKDeviceService.java | 8 +- 2 files changed, 64 insertions(+), 56 deletions(-) diff --git a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java index e4b2d00..0a0308b 100644 --- a/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java +++ b/dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/DeviceQrtzServiceImpl.java @@ -17,6 +17,7 @@ import org.dromara.common.redis.utils.RedisOpsUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sdk.cloudapi.wayline.*; +import org.dromara.common.sdk.common.HttpResultResponse; import org.dromara.sample.fegin.RemoteBusinessTaskFeign; import org.dromara.sample.manage.mapper.IDeviceQrtzDateMapper; import org.dromara.sample.manage.mapper.IDeviceQrtzFileMapper; @@ -51,6 +52,8 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; /** * @auther yq @@ -70,8 +73,9 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService { private IWaylineFileMapper waylineFileMapper; @Autowired private IFlightTaskService flightTaskService; -// @DubboReference -// private RemoteBusinessTaskService remoteBusinessTaskService; + + Lock lock = new ReentrantLock(); + private ExecutorService executor = Executors.newFixedThreadPool(5); @@ -285,63 +289,63 @@ public class DeviceQrtzServiceImpl implements IDeviceQrtzService { return; } RedisOpsUtils.setWithExpire(device.getDeviceSn(), device, 180); - executor.execute(new Runnable() { - @Override - public void run() { - try { - // 获取当前日期 - LocalDateTime currentDate = LocalDateTime.now(); - // 定义日期格式 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - DateTimeFormatter formatterS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - // 格式化当前日期 - String formattedDate = currentDate.format(formatter); - List qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper().eq("device_sn", device.getDeviceSn()).eq("exec_date", formattedDate).eq("status", DeviceQrtzConstants.QRTZ_FILE_STATUS_1).orderByAsc("sort")); - if (!qrtzFileEntityList.isEmpty()) { - DeviceQrtzFileEntity deviceQrtzFileEntity = qrtzFileEntityList.get(0); - List qrtzDateEntityList = deviceQrtzDateMapper.listDeviceQrtzDateByQrtzAndDate(deviceQrtzFileEntity.getQrtzId()); - if (!qrtzDateEntityList.isEmpty()) { - // 获取当前日期和时间 - for (DeviceQrtzDateEntity qrtzDate : qrtzDateEntityList) { - if (!currentDate.isBefore(Convert.toLocalDateTime(qrtzDate.getStartDate())) && !currentDate.isAfter(Convert.toLocalDateTime(qrtzDate.getEndDate()))) { - //获取航线数据发送之类 - WaylineFileEntity waylineFileEntity = waylineFileMapper.selectOne(new LambdaQueryWrapper().eq(WaylineFileEntity::getWaylineId, deviceQrtzFileEntity.getWaylineId())); - if (waylineFileEntity == null) { - //更改为异常,当前航线不存在 - deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_0); - deviceQrtzFileMapper.updateById(deviceQrtzFileEntity); - continue; - } - //获取是否是工单航线,是修改状态 - remoteBusinessTaskFeign.updateTaskStatus(deviceQrtzFileEntity.getWaylineId(), BusinessConstants.TASK_STATUS_2, null, null); - CreateJobParam createJobParam = new CreateJobParam(); - try { - createJobParam.setName(deviceQrtzFileEntity.getWaylineName() + "" + currentDate.format(formatterS)); - createJobParam.setFileId(deviceQrtzFileEntity.getWaylineId()); - createJobParam.setDockSn(device.getDeviceSn()); - createJobParam.setWaylineType(WaylineTypeEnum.find(Integer.parseInt(waylineFileEntity.getTemplateTypes()))); - createJobParam.setTaskType(TaskTypeEnum.IMMEDIATE); - createJobParam.setJobId(UUID.randomUUID().toString()); - //createJobParam.setRthAltitude(); - createJobParam.setMinBatteryCapacity(50); - createJobParam.setJobType(WaylineJobTypeEnum.WISDOM_TASK); - createJobParam.setWaylinePrecisionType(WaylinePrecisionTypeEnum.RTK); - createJobParam.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME); - createJobParam.setRthAltitude(120); - flightTaskService.publishFlightTask(device.getWorkspaceId(), createJobParam,deviceQrtzFileEntity.getNickName()); - } catch (Exception e) { - e.printStackTrace(); - } - } + // 获取当前日期 + LocalDateTime currentDate = LocalDateTime.now(); + // 定义日期格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter formatterS = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + // 格式化当前日期 + String formattedDate = currentDate.format(formatter); + List qrtzFileEntityList = deviceQrtzFileMapper.selectList(new QueryWrapper().eq("device_sn", device.getDeviceSn()).eq("exec_date", formattedDate).eq("status", DeviceQrtzConstants.QRTZ_FILE_STATUS_1).orderByAsc("sort")); + if (!qrtzFileEntityList.isEmpty()) { + DeviceQrtzFileEntity deviceQrtzFileEntity = qrtzFileEntityList.get(0); + List qrtzDateEntityList = deviceQrtzDateMapper.listDeviceQrtzDateByQrtzAndDate(deviceQrtzFileEntity.getQrtzId()); + if (!qrtzDateEntityList.isEmpty()) { + // 获取当前日期和时间 + for (DeviceQrtzDateEntity qrtzDate : qrtzDateEntityList) { + if (!currentDate.isBefore(Convert.toLocalDateTime(qrtzDate.getStartDate())) && !currentDate.isAfter(Convert.toLocalDateTime(qrtzDate.getEndDate()))) { + //获取航线数据发送之类 + WaylineFileEntity waylineFileEntity = waylineFileMapper.selectOne(new LambdaQueryWrapper().eq(WaylineFileEntity::getWaylineId, deviceQrtzFileEntity.getWaylineId())); + if (waylineFileEntity == null) { + //更改为异常,当前航线不存在 + deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_0); + deviceQrtzFileMapper.updateById(deviceQrtzFileEntity); + continue; + } + //获取是否是工单航线,是修改状态 + remoteBusinessTaskFeign.updateTaskStatus(deviceQrtzFileEntity.getWaylineId(), BusinessConstants.TASK_STATUS_2, null, null); + CreateJobParam createJobParam = new CreateJobParam(); + try { + createJobParam.setName(deviceQrtzFileEntity.getWaylineName() + "" + currentDate.format(formatterS)); + createJobParam.setFileId(deviceQrtzFileEntity.getWaylineId()); + createJobParam.setDockSn(device.getDeviceSn()); + createJobParam.setWaylineType(WaylineTypeEnum.find(Integer.parseInt(waylineFileEntity.getTemplateTypes()))); + createJobParam.setTaskType(TaskTypeEnum.IMMEDIATE); + createJobParam.setJobId(UUID.randomUUID().toString()); + //createJobParam.setRthAltitude(); + createJobParam.setMinBatteryCapacity(50); + createJobParam.setJobType(WaylineJobTypeEnum.WISDOM_TASK); + createJobParam.setWaylinePrecisionType(WaylinePrecisionTypeEnum.RTK); + createJobParam.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME); + createJobParam.setRthAltitude(120); + HttpResultResponse httpResultResponse = flightTaskService.publishFlightTask(device.getWorkspaceId(), createJobParam, deviceQrtzFileEntity.getNickName()); + if(httpResultResponse.getCode() == 0){ + deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_2); + deviceQrtzFileMapper.updateById(deviceQrtzFileEntity); + return; } - + deviceQrtzFileEntity.setStatus(DeviceQrtzConstants.QRTZ_FILE_STATUS_0); + deviceQrtzFileMapper.updateById(deviceQrtzFileEntity); + } catch (Exception e) { + e.printStackTrace(); } } - } catch (Exception e) { - throw new RuntimeException(e); + } + } - }); + } + } } 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 c59734f..87c84bb 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 @@ -1,6 +1,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.sdk.cloudapi.device.*; import org.dromara.common.sdk.cloudapi.device.api.AbstractDeviceService; import org.dromara.common.sdk.cloudapi.psdk.PsdkUiResource; @@ -150,16 +151,19 @@ public class SDKDeviceService extends AbstractDeviceService { return; } } + if(request.getData().getMediaFileDetail() != null){ + RedisOpsUtils.hashSet("updateMediaFileDetail",from,request.getData().getMediaFileDetail().getRemainUpload()); + } DeviceDTO device = deviceOpt.get(); if (StringUtils.hasText(device.getChildDeviceSn())) { deviceService.getDeviceBySn(device.getChildDeviceSn()).ifPresent(device::setChildren); } + Integer remainUpload = (Integer) RedisOpsUtils.hashGet("updateMediaFileDetail", from); if(request.getData().getModeCode() != null && request.getData().getModeCode().getCode() == 0 && request.getData().getDroneChargeState() != null && request.getData().getDroneChargeState().getState() == false - && request.getData().getDroneChargeState().getCapacityPercent() >= 80){ + && request.getData().getDroneChargeState().getCapacityPercent() >= 80 && (remainUpload != null && remainUpload == 0)){ deviceQrtzService.getDeviceQrtzFileEntity(device); - } deviceRedisService.setDeviceOnline(device);