From 8fe759f26e23fb594f4bf02d6d4889f4521d41a7 Mon Sep 17 00:00:00 2001
From: Xiajijian <1176061145@qq.com>
Date: Sat, 11 Oct 2025 15:26:43 +0800
Subject: [PATCH] 1.修该并合并无人机盒子对象相关关系。

---
 ard-work/src/main/java/com/ard/work/service/impl/ArdDroneServiceImpl.java |  138 +++++++++++++++++++++++++++++++---------------
 1 files changed, 93 insertions(+), 45 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneServiceImpl.java b/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneServiceImpl.java
index 7011058..9c9e3fc 100644
--- a/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/work/service/impl/ArdDroneServiceImpl.java
@@ -1,94 +1,142 @@
 package com.ard.work.service.impl;
 
-import com.ard.common.utils.uuid.IdUtils;
+import com.ard.common.utils.DateUtils;
 import com.ard.work.domain.entity.ArdDroneInfo;
+import com.ard.work.domain.receiver.BoxInfoReceiver;
 import com.ard.work.mapper.ArdDroneInfoMapper;
+import com.ard.work.service.ITyService;
 import com.ard.work.service.IArdDroneService;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Stack;
+import java.util.stream.Collectors;
 
 /**
- * 无人机管理Service业务层处理
- * 
- * @author xia
- * @date 2025-10-10
+ * 无人机盒子Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-03-04
  */
 @Service
 public class ArdDroneServiceImpl implements IArdDroneService {
 
-    @Autowired
-    private ArdDroneInfoMapper ardDroneInfoMapper;
+    @Resource
+    private ArdDroneInfoMapper ArdDroneInfoMapper;
+
+    @Resource
+    private ITyService tyService;
 
     /**
-     * 查询无人机管理
-     * 
-     * @param id 无人机管理主键
-     * @return 无人机管理
+     * 查询无人机盒子
+     *
+     * @param id 无人机盒子主键
+     * @return 无人机盒子
      */
     @Override
-    public ArdDroneInfo selectArdDroneManagementById(String id)
-    {
-        return ardDroneInfoMapper.selectArdDroneManagementById(id);
+    public ArdDroneInfo selectArdDroneById(String id) {
+        return ArdDroneInfoMapper.selectArdDroneById(id);
     }
 
     /**
-     * 查询无人机管理列表
-     * 
-     * @param ardDroneInfo 无人机管理
-     * @return 无人机管理
+     * 查询无人机盒子列表
+     *
+     * @param ArdDroneInfo 无人机盒子
+     * @return 无人机盒子
      */
     @Override
-    public List<ArdDroneInfo> selectArdDroneManagementList(ArdDroneInfo ardDroneInfo) {
-        return ardDroneInfoMapper.selectArdDroneManagementList(ardDroneInfo);
+    public List<ArdDroneInfo> selectArdDroneList(ArdDroneInfo ArdDroneInfo) {
+        return ArdDroneInfoMapper.selectArdDroneList(ArdDroneInfo);
     }
 
     /**
-     * 新增无人机管理
-     * 
-     * @param ardDroneInfo 无人机管理
+     * 新增无人机盒子
+     *
+     * @param ArdDroneInfo 无人机盒子
      * @return 结果
      */
     @Override
-    public int insertArdDroneManagement(ArdDroneInfo ardDroneInfo) {
-        ardDroneInfo.setId(IdUtils.fastUUID());
-        return ardDroneInfoMapper.insertArdDroneManagement(ardDroneInfo);
+    public int insertArdDrone(ArdDroneInfo ArdDroneInfo) {
+        ArdDroneInfo.setCreateTime(DateUtils.getNowDate());
+        return ArdDroneInfoMapper.insertArdDrone(ArdDroneInfo);
     }
 
     /**
-     * 修改无人机管理
-     * 
-     * @param ardDroneInfo 无人机管理
+     * 修改无人机盒子
+     *
+     * @param ArdDroneInfo 无人机盒子
      * @return 结果
      */
     @Override
-    public int updateArdDroneManagement(ArdDroneInfo ardDroneInfo)
-    {
-        return ardDroneInfoMapper.updateArdDroneManagement(ardDroneInfo);
+    public int updateArdDrone(ArdDroneInfo ArdDroneInfo) {
+        ArdDroneInfo.setUpdateTime(DateUtils.getNowDate());
+        return ArdDroneInfoMapper.updateArdDrone(ArdDroneInfo);
     }
 
     /**
-     * 批量删除无人机管理
-     * 
-     * @param ids 需要删除的无人机管理主键
+     * 批量删除无人机盒子
+     *
+     * @param ids 需要删除的无人机盒子主键
      * @return 结果
      */
     @Override
-    public int deleteArdDroneManagementByIds(String[] ids)
-    {
-        return ardDroneInfoMapper.deleteArdDroneManagementByIds(ids);
+    public int deleteArdDroneByIds(String[] ids) {
+        return ArdDroneInfoMapper.deleteArdDroneByIds(ids);
     }
 
     /**
-     * 删除无人机管理信息
-     * 
-     * @param id 无人机管理主键
+     * 删除无人机盒子信息
+     *
+     * @param id 无人机盒子主键
      * @return 结果
      */
     @Override
-    public int deleteArdDroneManagementById(String id)
-    {
-        return ardDroneInfoMapper.deleteArdDroneManagementById(id);
+    public int deleteArdDroneById(String id) {
+        return ArdDroneInfoMapper.deleteArdDroneById(id);
+    }
+
+    /**
+     * 同步盒子属性
+     *
+     * @return 结果
+     */
+    @Scheduled(fixedRate = 1000 * 60)
+    public void syncBoxInfo() {
+        List<ArdDroneInfo> ArdDroneeListEntity = selectArdDroneList(new ArdDroneInfo());
+        // 将本地列表转换为Map,方便快速查找
+        Map<String, ArdDroneInfo> localArdDroneMap = ArdDroneeListEntity.stream()
+                .collect(Collectors.toMap(ArdDroneInfo::getBoxSn, drone -> drone));
+        //遍历接口最新获取的无人机盒子信息
+        tyService.getBoxList().forEach(remoteArdDrone -> {
+            ArdDroneInfo localArdDroneInfo = localArdDroneMap.get(remoteArdDrone.getBoxSn());
+            if (localArdDroneInfo != null) {
+                if (!localArdDroneInfo.isSameAs(remoteArdDrone)) {
+                    // 修改无人机(只更新变化的属性)
+                    updateChangedAttributes(localArdDroneInfo, remoteArdDrone);
+                    updateArdDrone(localArdDroneInfo);
+                }
+            }
+        });
+    }
+
+    // 更新变化的属性
+    private void updateChangedAttributes(ArdDroneInfo localBoxInfo, BoxInfoReceiver remoteArdDrone) {
+        if (!Objects.equals(localBoxInfo.getBoxName(), remoteArdDrone.getBoxName())) {
+            localBoxInfo.setBoxName(remoteArdDrone.getBoxName());
+        }
+        if (!Objects.equals(localBoxInfo.getBoxVersion(), remoteArdDrone.getBoxVersion())) {
+            localBoxInfo.setBoxVersion(remoteArdDrone.getBoxVersion());
+        }
+        if (!Objects.equals(localBoxInfo.getLastTaskId(), remoteArdDrone.getLastTaskId())) {
+            localBoxInfo.setLastTaskId(remoteArdDrone.getLastTaskId());
+        }
+        if (!Objects.equals(localBoxInfo.getOnLine(), remoteArdDrone.getOnLine())) {
+            localBoxInfo.setOnLine(remoteArdDrone.getOnLine());
+        }
+        // 更新其他属性
     }
 }

--
Gitblit v1.9.3