| | |
| | | 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()); |
| | | } |
| | | // 更新其他属性 |
| | | } |
| | | } |