package com.ard.work.service.impl; 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.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 ruoyi * @date 2025-03-04 */ @Service public class ArdDroneServiceImpl implements IArdDroneService { @Resource private ArdDroneInfoMapper ArdDroneInfoMapper; @Resource private ITyService tyService; /** * 查询无人机盒子 * * @param id 无人机盒子主键 * @return 无人机盒子 */ @Override public ArdDroneInfo selectArdDroneById(String id) { return ArdDroneInfoMapper.selectArdDroneById(id); } @Override public ArdDroneInfo selectArdDroneByboxSn(String boxSn) { return ArdDroneInfoMapper.selectArdDroneByBoxSn(boxSn); } /** * 查询无人机盒子列表 * * @param ArdDroneInfo 无人机盒子 * @return 无人机盒子 */ @Override public List selectArdDroneList(ArdDroneInfo ArdDroneInfo) { return ArdDroneInfoMapper.selectArdDroneList(ArdDroneInfo); } /** * 新增无人机盒子 * * @param ArdDroneInfo 无人机盒子 * @return 结果 */ @Override public int insertArdDrone(ArdDroneInfo ArdDroneInfo) { ArdDroneInfo.setCreateTime(DateUtils.getNowDate()); return ArdDroneInfoMapper.insertArdDrone(ArdDroneInfo); } /** * 修改无人机盒子 * * @param ArdDroneInfo 无人机盒子 * @return 结果 */ @Override public int updateArdDrone(ArdDroneInfo ArdDroneInfo) { ArdDroneInfo.setUpdateTime(DateUtils.getNowDate()); return ArdDroneInfoMapper.updateArdDrone(ArdDroneInfo); } /** * 批量删除无人机盒子 * * @param ids 需要删除的无人机盒子主键 * @return 结果 */ @Override public int deleteArdDroneByIds(String[] ids) { return ArdDroneInfoMapper.deleteArdDroneByIds(ids); } /** * 删除无人机盒子信息 * * @param id 无人机盒子主键 * @return 结果 */ @Override public int deleteArdDroneById(String id) { return ArdDroneInfoMapper.deleteArdDroneById(id); } /** * 同步盒子属性 * * @return 结果 */ @Scheduled(fixedRate = 1000 * 10) public void syncBoxInfo() { List ArdDroneeListEntity = selectArdDroneList(new ArdDroneInfo()); // 将本地列表转换为Map,方便快速查找 Map 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()); } // 更新其他属性 } }