package com.ard.route.service.impl;
|
|
import java.io.IOException;
|
import java.util.List;
|
|
import com.ard.common.exception.ControlException;
|
import com.ard.common.utils.DateUtils;
|
import com.ard.common.utils.file.FileUtils;
|
import com.ard.common.utils.uuid.IdUtils;
|
import com.ard.data.noflyzone.domain.ArdNoFlyZone;
|
import com.ard.data.noflyzone.domain.Vertex;
|
import com.ard.data.noflyzone.service.IArdNoFlyZoneService;
|
import com.ard.data.noflyzone.utils.NoFlyZoneUtils;
|
import com.ard.oss.model.MinioUploadResult;
|
import com.ard.oss.service.impl.OssServiceContext;
|
import com.ard.route.domain.UavRouteReq;
|
import com.ard.route.domain.route.ArdRouteInfo;
|
import com.ard.route.domain.vo.KmzResultVo;
|
import com.ard.route.mapper.ArdRouteInfoMapper;
|
import com.ard.route.service.IArdRouteInfoService;
|
import com.ard.route.service.UavRouteService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.annotation.Resource;
|
|
import static com.ard.route.util.ToolUtils.*;
|
|
/**
|
* 航线(kmz)Service业务层处理
|
*
|
* @author xia
|
* @date 2025-10-23
|
*/
|
@Service
|
public class ArdRouteInfoServiceImpl implements IArdRouteInfoService {
|
|
@Autowired
|
private ArdRouteInfoMapper ardRouteInfoMapper;
|
|
@Autowired
|
private OssServiceContext ossService;
|
|
@Autowired
|
private UavRouteService routeService;
|
|
@Resource
|
private IArdNoFlyZoneService ardNoFlyZoneService;
|
|
/**
|
* 查询航线(kmz)
|
*
|
* @param id 航线(kmz)主键
|
* @return 航线(kmz)
|
*/
|
@Override
|
public ArdRouteInfo selectArdRouteInfoById(String id) {
|
ArdRouteInfo ardRouteInfo = ardRouteInfoMapper.selectArdRouteInfoById(id);
|
try {
|
ardRouteInfo.setUavRouteReq((UavRouteReq) deserialize(ardRouteInfo.getRouteData()));
|
} catch (IOException | ClassNotFoundException e) {
|
throw new RuntimeException(e);
|
}
|
return ardRouteInfo;
|
}
|
|
/**
|
* 查询航线(kmz)列表
|
*
|
* @param ardRouteInfo 航线(kmz)
|
* @return 航线(kmz)
|
*/
|
@Override
|
public List<ArdRouteInfo> selectArdRouteInfoList(ArdRouteInfo ardRouteInfo) {
|
return ardRouteInfoMapper.selectArdRouteInfoList(ardRouteInfo);
|
}
|
|
/**
|
* 新增航线(kmz)
|
*
|
* @param ardRouteInfo 航线(kmz)
|
* @return 结果
|
*/
|
@Override
|
public String insertArdRouteInfo(ArdRouteInfo ardRouteInfo) {
|
ardRouteInfo.setId(IdUtils.simpleUUID());
|
ardRouteInfo.setCreateTime(DateUtils.getNowDate());
|
if (ardRouteInfo.getGroupId() == null){
|
ardRouteInfo.setGroupId("0");
|
}
|
// 航线数据
|
byte[] routeData;
|
try {
|
routeData = serialize(ardRouteInfo.getUavRouteReq());
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
ardRouteInfo.setRouteData(routeData);
|
KmzResultVo kmzResult = routeService.buildKmz(ardRouteInfo.getUavRouteReq(), ardRouteInfo.getName());
|
ardRouteInfo.setPath(kmzResult.getPath());
|
ardRouteInfoMapper.insertArdRouteInfo(ardRouteInfo);
|
return kmzResult.getPath();
|
}
|
|
/**
|
* 修改航线(kmz)
|
*
|
* @param ardRouteInfo 航线(kmz)
|
* @return 结果
|
*/
|
@Override
|
public int updateArdRouteInfo(ArdRouteInfo ardRouteInfo) {
|
ardRouteInfo.setUpdateTime(DateUtils.getNowDate());
|
KmzResultVo kmzResult = new KmzResultVo();
|
// 获取源文件名字
|
ArdRouteInfo route = ardRouteInfoMapper.selectArdRouteInfoById(ardRouteInfo.getId());
|
if (route.getName().equals(ardRouteInfo.getName())) {
|
kmzResult = routeService.updateKmz(ardRouteInfo.getUavRouteReq(), ardRouteInfo.getName());
|
}else {
|
kmzResult = routeService.updateKmzNew(ardRouteInfo.getUavRouteReq(), route.getName(), ardRouteInfo.getName());
|
}
|
if ("更新航线kmz文件失败".equals(kmzResult.getData())) {
|
return 0;
|
}
|
ardRouteInfo.setPath(kmzResult.getPath());
|
return ardRouteInfoMapper.updateArdRouteInfo(ardRouteInfo);
|
}
|
|
/**
|
* 批量删除航线(kmz)
|
*
|
* @param ids 需要删除的航线(kmz)主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdRouteInfoByIds(String[] ids) {
|
// 删除航线(kmz)文件
|
for (String id : ids) {
|
ArdRouteInfo information = ardRouteInfoMapper.selectArdRouteInfoById(id);
|
ossService.deleteObject("kmz", subStringMinioUrlName(information.getPath()));
|
}
|
return ardRouteInfoMapper.deleteArdRouteInfoByIds(ids);
|
}
|
|
/**
|
* 删除航线(kmz)信息
|
*
|
* @param id 航线(kmz)主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdRouteInfoById(String id) {
|
return ardRouteInfoMapper.deleteArdRouteInfoById(id);
|
}
|
|
/**
|
* 导入航线(kmz)文件
|
*
|
* @param file 文件
|
* @return 结果
|
*/
|
@Override
|
public MinioUploadResult uploadArdRouteInfo(MultipartFile file) {
|
try {
|
String url = ossService.upload("kmz",file);
|
ArdRouteInfo information = new ArdRouteInfo();
|
information.setName(file.getOriginalFilename());
|
information.setPath(url);
|
information.setGroupId("0"); // 默认分组
|
insertRouteInfomation(information);
|
return MinioUploadResult.builder()
|
.url(url)
|
.newFileName(FileUtils.getName(url))
|
.originalFilename(file.getOriginalFilename())
|
.build();
|
}catch (Exception e){
|
return null;
|
}
|
}
|
|
/**
|
* 根据文件名称查询航线信息
|
*
|
* @param name 文件名称
|
* @return 结果
|
*/
|
@Override
|
public ArdRouteInfo selectArdRouteInfoByName(String name) {
|
return ardRouteInfoMapper.selectArdRouteInfoByName(name);
|
}
|
|
/**
|
* 修改航线分组ID
|
*
|
* @param id ID
|
* @param GroupId 分组ID
|
* @return 结果
|
*/
|
@Override
|
public int updateRouteInfomationGroupId(String id, String GroupId) {
|
return ardRouteInfoMapper.updateRouteInforGroupId(id, GroupId);
|
}
|
|
/**
|
* 判断行点是否在禁飞区
|
*
|
* @param longitude 经度
|
* @param latitude 纬度
|
* @return 结果
|
*/
|
@Override
|
public Boolean selectRouteInfomationNoFly(Double longitude, Double latitude) {
|
if (longitude == null || latitude == null) {
|
throw new ControlException("方法参数中未找到有效经纬度字段,无法判断禁飞区!");
|
}
|
List<ArdNoFlyZone> ardNoFlyZones = ardNoFlyZoneService.selectArdNoFlyZoneList(new ArdNoFlyZone());
|
if (!ardNoFlyZones.isEmpty()) {
|
Vertex vertex = new Vertex(longitude, latitude);
|
// boolean inNoFlyZones = NoFlyZoneUtils.isPointInPolygon(vertex, ardNoFlyZones);
|
// if (inNoFlyZones) {
|
// throw new ControlException("目标点在禁飞区内,无法执行操作!");
|
// }
|
}
|
return true;
|
}
|
|
/**
|
* 数据新增航线信息
|
*/
|
private void insertRouteInfomation(ArdRouteInfo ardRouteInfo){
|
ardRouteInfo.setId(IdUtils.simpleUUID());
|
ardRouteInfo.setCreateTime(DateUtils.getNowDate());
|
ardRouteInfoMapper.insertArdRouteInfo(ardRouteInfo);
|
}
|
|
}
|