zhaowenyu
2025-12-08 0d9fb1b9336da142d070109782a8c260744f5e57
ard-work/src/main/java/com/ard/work/service/impl/ArdDroneInfoServiceImpl.java
@@ -10,12 +10,15 @@
import com.ard.system.authorize.service.AuthorizeService;
import com.ard.work.domain.dto.BoxSettingsDTO;
import com.ard.work.domain.entity.ArdDroneInfo;
import com.ard.work.domain.entity.ArdServerInfo;
import com.ard.work.domain.receiver.BoxInfoReceiver;
import com.ard.work.domain.receiver.BoxStreamUrlReceiver;
import com.ard.work.mapper.ArdDroneInfoMapper;
import com.ard.work.service.IArdDroneInfoService;
import com.ard.work.service.IArdServerInfoService;
import com.ard.work.service.ITyService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@@ -45,6 +48,9 @@
    @Resource
    private RedisCache redisCache;
    @Autowired
    private IArdServerInfoService ardServerInfoService;
    /**
     * 查询无人机盒子
@@ -113,7 +119,8 @@
     */
    @Override
    public int updateArdDrone(ArdDroneInfo ArdDroneInfo) {
        Boolean b = tyService.updateBoxSettings(BoxSettingsDTO.builder().boxSn(ArdDroneInfo.getBoxSn()).boxName(ArdDroneInfo.getBoxName()).build());
        Boolean b =
                tyService.updateBoxSettings(BoxSettingsDTO.builder().boxSn(ArdDroneInfo.getBoxSn()).boxName(ArdDroneInfo.getBoxName()).build());
        if (!b) {
            throw new ServiceException("修改无人机盒子名称失败");
        }
@@ -277,13 +284,22 @@
     */
    @Scheduled(fixedRate = 1000 * 5)
    public void syncBoxInfo() {
        List<ArdDroneInfo> localList = selectArdDroneList(new ArdDroneInfo() {{
            setUseDataScope(false);
        }});
        ArdServerInfo ardServerInfo = new ArdServerInfo();
        ardServerInfo.setUseDataScope(false);
        List<ArdServerInfo> servers = ardServerInfoService.selectArdServerInfoList(ardServerInfo);
        servers.forEach(server -> {
            ArdDroneInfo droneInfo = new ArdDroneInfo();
            droneInfo.setServerId(server.getId());
            droneInfo.setUseDataScope(false);
            List<ArdDroneInfo> localList = selectArdDroneList(droneInfo);
        Map<String, ArdDroneInfo> localMap = localList.stream()
                .collect(Collectors.toMap(ArdDroneInfo::getBoxSn, drone -> drone));
        tyService.getBoxList().forEach(remote -> {
            List<BoxInfoReceiver> boxList = tyService.getBoxList(server.getId());
            if (boxList == null) {
                updateArdDrone(ArdDroneInfo.builder().serverId(server.getId()).onLine(0).build());
                return;
            }
            boxList.forEach(remote -> {
            String boxSn = remote.getBoxSn();
            // ✅ 维护在线状态缓存
@@ -301,6 +317,7 @@
                updateArdDrone(local);
            }
        });
        });
    }
    // 更新变化的属性