package com.fdkankan.manage_jp.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.fdkankan.fyun.face.FYunFileServiceInterface;
import com.fdkankan.manage_jp.entity.ProjectSceneGps;
import com.fdkankan.manage_jp.entity.ScenePlus;
import com.fdkankan.manage_jp.entity.ScenePlusExt;
import com.fdkankan.manage_jp.httpClient.service.LaserService;
import com.fdkankan.manage_jp.mapper.IProjectSceneGpsMapper;
import com.fdkankan.manage_jp.service.IProjectSceneGpsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.manage_jp.service.IScenePlusExtService;
import com.fdkankan.manage_jp.service.IScenePlusService;
import com.fdkankan.manage_jp.vo.response.SceneExtGpsVo;
import com.fdkankan.manage_jp.vo.response.SceneGpsVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
* 服务实现类
*
*
* @author
* @since 2024-08-16
*/
@Service
@Slf4j
public class ProjectSceneGpsServiceImpl extends ServiceImpl implements IProjectSceneGpsService {
@Autowired
IScenePlusService scenePlusService;
@Autowired
IScenePlusExtService scenePlusExtService;
@Autowired
FYunFileServiceInterface fYunFileServiceInterface;
@Autowired
LaserService laserService;
@Override
public List getNotGpsScene() {
return this.getBaseMapper().getNotGpsScene();
}
@Override
public void addGps(String num) {
ScenePlus scenePlus = scenePlusService.getByNum(num);
ScenePlusExt scenePlusExt = scenePlusExtService.getByPlusId(scenePlus.getId());
String dataSource = scenePlusExt.getDataSource();
SceneGpsVo sceneGpsVo = null;
if(scenePlus.getSceneSource() == 4 || scenePlus.getSceneSource() == 5){
sceneGpsVo = getByLaserEdit(num);
}else {
sceneGpsVo = getByHomeParameters(dataSource);
}
if(sceneGpsVo == null && StrUtil.isNotBlank(scenePlusExt.getGps())){
String gps = scenePlusExt.getGps();
SceneExtGpsVo extGpsVo = JSONObject.parseObject(gps,SceneExtGpsVo.class);
sceneGpsVo = new SceneGpsVo(extGpsVo.getLatitude(),extGpsVo.getLongitude(),extGpsVo.getAltitude(),1);
}
if(sceneGpsVo != null
&& StrUtil.isNotBlank(sceneGpsVo.getLat())
&& StrUtil.isNotBlank(sceneGpsVo.getLon())
&& StrUtil.isNotBlank(sceneGpsVo.getAlt())){
ProjectSceneGps sceneGps = new ProjectSceneGps();
sceneGps.setNum(num);
sceneGps.setWebSite(scenePlusExt.getWebSite());
sceneGps.setLat(sceneGpsVo.getLat());
sceneGps.setLon(sceneGpsVo.getLon());
sceneGps.setAlt(sceneGpsVo.getAlt());
sceneGps.setGpsSource(sceneGpsVo.getGpsSource());
sceneGps.setSceneSource(scenePlus.getSceneSource());
this.save(sceneGps);
}
}
private SceneGpsVo getByLaserEdit(String num) {
return laserService.getLocation(num);
}
private SceneGpsVo getByHomeParameters(String dataSource) {
dataSource = dataSource.replaceAll("/mnt/data", "home");
boolean parametersFlag = fYunFileServiceInterface.fileExist(dataSource+"/parameters.json");
if (parametersFlag) {
JSONObject parameters = JSONObject.parseObject(fYunFileServiceInterface.getFileContent(dataSource+"/parameters.json"));
JSONArray parametersArray = parameters.getJSONArray("parameters");
for (Object o : parametersArray) {
JSONObject parameter = (JSONObject) o;
JSONObject ggaLocation = parameter.getJSONObject("value").getJSONObject("ggaLocation");
if (ObjectUtil.isNotEmpty(ggaLocation)
&& StrUtil.isNotEmpty(ggaLocation.getString("lon"))
&& StrUtil.isNotEmpty(ggaLocation.getString("lat"))
&& StrUtil.isNotEmpty(ggaLocation.getString("alt"))) {
log.info("从rtk获取gps信息:{}", parameters);
return new SceneGpsVo(ggaLocation.getString("lat"),ggaLocation.getString("lon"),ggaLocation.getString("alt"),0);
}
}
}
return null;
}
@Override
public void updateGps(String num,String lat,String lon,Integer type) {
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(ProjectSceneGps::getNum,num);
wrapper.set(ProjectSceneGps::getLat,lat);
wrapper.set(ProjectSceneGps::getLon,lon);
wrapper.set(ProjectSceneGps::getGpsSource,type);
this.update(wrapper);
}
}