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.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.manage_jp.common.PageInfo; import com.fdkankan.manage_jp.entity.*; import com.fdkankan.manage_jp.httpClient.service.LaserService; import com.fdkankan.manage_jp.mapper.IProjectSceneGpsMapper; import com.fdkankan.manage_jp.mapper.ISceneProMapper; import com.fdkankan.manage_jp.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.manage_jp.vo.request.ProjectParam; import com.fdkankan.manage_jp.vo.request.SceneGpsParam; import com.fdkankan.manage_jp.vo.request.SceneParam; import com.fdkankan.manage_jp.vo.response.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @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; @Autowired IUserRoleService userRoleService; @Override public List getNotGpsScene() { return this.getBaseMapper().getNotGpsScene(); } @Override public ProjectSceneGps addGps(SceneGpsDb sceneGpsDb) { SceneGpsVo sceneGpsVo = getByLaserEdit(sceneGpsDb.getNum()); // if(sceneGpsDb.getSceneSource() == 4 || sceneGpsDb.getSceneSource() == 5){ // sceneGpsVo = getByLaserEdit(sceneGpsDb.getNum()); // }else { // sceneGpsVo = getByHomeParameters(sceneGpsDb.getDataSource()); // } if(sceneGpsVo == null && StrUtil.isNotBlank(sceneGpsDb.getGps())){ String gps = sceneGpsDb.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(sceneGpsDb.getNum()); sceneGps.setWebSite(sceneGpsDb.getWebSite()); sceneGps.setLat(sceneGpsVo.getLat()); sceneGps.setLon(sceneGpsVo.getLon()); sceneGps.setAlt(sceneGpsVo.getAlt()); sceneGps.setGpsSource(sceneGpsVo.getGpsSource()); sceneGps.setSceneSource(sceneGpsDb.getSceneSource()); return sceneGps; } return null; } 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); } @Autowired ISceneProMapper sceneProMapper; @Autowired ITmContractorNumService tmContractorNumService; @Autowired IProjectService projectService; @Autowired IProjectNumService projectNumService; private void commonParam(SceneGpsParam param){ } @Override public Object listSceneGps(SceneGpsParam param){ if(param.getUserId() == null){ return new ArrayList<>(); } List roleIdList = userRoleService.getByUserId((param.getUserId())); List roleIds = roleIdList.stream().map(UserRole::getRoleId).collect(Collectors.toList()); if(roleIds.contains(5L)) { //平台管理员 param.setUserId(null); param.setCompanyId(null); } List numList = tmContractorNumService.getNumListByCompanyId(param.getCompanyId()); param.setCooperateSceneCodes(numList); Page sceneGpsDbVpPage = this.getBaseMapper().listGps(new Page<>(param.getPageNum(), param.getPageSize()), param); return PageInfo.PageInfo(sceneGpsDbVpPage); } @Override public Object allSceneGps(SceneGpsParam param) { if(param.getUserId() == null){ return new ArrayList<>(); } List roleIdList = userRoleService.getByUserId((param.getUserId())); List roleIds = roleIdList.stream().map(UserRole::getRoleId).collect(Collectors.toList()); HashMap> projectNumMap = new HashMap<>(); HashMap projectMap = new HashMap<>(); if(param.getType() == 0){ //项目场景 List projectList = new ArrayList<>(); if(!roleIds.contains(5L) && param.getProjectId() == null) { //平台管理员 projectList = projectService.listByCompanyId(param.getCompanyId()); }else if(param.getProjectId() == null){ projectList = projectService.listShow(); }else { Project project = projectService.getById(param.getProjectId()); projectList = Arrays.asList(project); } if(projectList == null || projectList.isEmpty()){ return new ArrayList<>(); } for (Project project : projectList) { projectMap.put(project.getId(),project); } List projectIds = projectList.stream().map(Project::getId).collect(Collectors.toList()); List projectNums = projectNumService.getByProjectId(projectIds); for (ProjectNum projectNum : projectNums) { if(projectNumMap.get(projectNum.getProjectId()) == null){ List proNumList = new ArrayList<>(); proNumList.add(projectNum.getNum()); projectNumMap.put(projectNum.getProjectId(),proNumList); }else { projectNumMap.get(projectNum.getProjectId()).add(projectNum.getNum()); } } List numList = projectNums.stream().map(ProjectNum::getNum).collect(Collectors.toList()); param.setNumList(numList); } if(param.getType() == 1 ){ if(roleIds.contains(5L)) { //平台管理员 param.setUserId(null); param.setCompanyId(null); } List numList = tmContractorNumService.getNumListByCompanyId(param.getCompanyId()); param.setCooperateSceneCodes(numList); if(param.getProjectId() != null){ Project project = projectService.getById(param.getProjectId()); if(project == null){ return PageInfo.PageInfoEmpty(param.getPageNum(),param.getPageSize()); } List projectNumList = projectNumService.getByProjectId(Arrays.asList(param.getProjectId())); if(projectNumList== null || projectNumList.isEmpty()){ return PageInfo.PageInfoEmpty(param.getPageNum(),param.getPageSize()); } List projectNums = projectNumList.stream().map(ProjectNum::getNum).collect(Collectors.toList()); param.setNumList(projectNums); } } Page sceneGpsDbVpPage = this.getBaseMapper().listGps(new Page<>(1, Integer.MAX_VALUE), param); List sceneGpsDbVps = sceneGpsDbVpPage.getRecords(); if(param.getType() == 1){ return sceneGpsDbVps; } if(param.getType() == 0){ List< ProjectSceneMapVo> voList = new ArrayList<>(); HashMap scenMap = new HashMap<>(); for (SceneGpsDbVp sceneGpsDbVp : sceneGpsDbVps) { scenMap.put(sceneGpsDbVp.getNum(),sceneGpsDbVp); } for (Integer projectId : projectMap.keySet()) { ProjectSceneMapVo vo = new ProjectSceneMapVo(); BeanUtils.copyProperties(projectMap.get(projectId),vo); vo.setTitle(projectMap.get(projectId).getProjectName()); vo.setId(projectId); List list = projectNumMap.get(projectId); List listScene = new ArrayList<>(); if(list != null){ for (String num : list) { SceneGpsDbVp sceneGpsDbVp = scenMap.get(num); if(sceneGpsDbVp != null){ listScene.add(sceneGpsDbVp); } } } vo.setSceneList(listScene); voList.add(vo); } return voList; } return new ArrayList<>(); } @Override public ProjectSceneGps getByNum(String num) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProjectSceneGps::getNum,num); return this.getOne(wrapper); } @Override public void deleteByNumList(List numList) { if(numList == null || numList.isEmpty()){ return; } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(ProjectSceneGps::getNum,numList); this.remove(wrapper); } }