package com.fdkankan.manage_jp.task; import cn.hutool.core.io.FileUtil; import com.alibaba.fastjson.JSONObject; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.manage_jp.config.ManageConfig; import com.fdkankan.manage_jp.entity.*; import com.fdkankan.manage_jp.httpClient.service.LaserService; import com.fdkankan.manage_jp.service.IProjectSceneGpsService; import com.fdkankan.manage_jp.service.IScenePlusExtService; import com.fdkankan.manage_jp.service.IScenePlusService; import com.fdkankan.manage_jp.service.ISceneProService; import com.fdkankan.manage_jp.vo.response.SceneGpsDb; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; @Service @Slf4j public class TaskService { @Autowired IProjectSceneGpsService projectSceneGpsService; @Autowired LaserService laserService; @Autowired ISceneProService sceneProService; @Autowired IScenePlusService scenePlusService; @Autowired IScenePlusExtService scenePlusExtService; @Scheduled(initialDelay = 2000, fixedDelay = 1000 * 60 ) public void run() { addLaserData(); } private void addLaserData() { List sceneGpsDbs1 = projectSceneGpsService.getNotGpsScene(); if(sceneGpsDbs1.isEmpty()){ log.debug("没有需要更新GPS数据的场景"); return; } List laserssList = new ArrayList<>(); List lasersgList = new ArrayList<>(); for (SceneGpsDb sceneGpsDb : sceneGpsDbs1) { ProjectSceneGps sceneGps = projectSceneGpsService.addGps(sceneGpsDb); if(sceneGps != null){ log.debug("num:{}gps:{}",sceneGpsDb.getNum(),sceneGps); if(sceneGps.getSceneSource() == 4 ) { laserssList.add(sceneGps); }else if( sceneGps.getSceneSource() == 5){ lasersgList.add(sceneGps); } } } addLaserList(laserssList,4); addLaserList(lasersgList,5); } private void addLaserList(List laserssList,Integer sceneSource) { List sceneMapShowList = new ArrayList<>(); if(!laserssList.isEmpty()){ List numList1 = laserssList.stream().map(ProjectSceneGps::getNum).collect(Collectors.toList()); HashMap ssSceneMap = laserService.list(numList1,sceneSource); for (ProjectSceneGps sceneGps : laserssList) { JSONObject ssObj = ssSceneMap.get(sceneGps.getNum()); if(ssObj!=null ){ sceneGps.setWebSite(ssObj.getString("webSite")); projectSceneGpsService.save(sceneGps); if(sceneGps.getGpsSource() == 2){ sceneMapShowList.add(sceneGps.getNum()); } } } } sceneProService.openMapShow(sceneMapShowList); } @Autowired ManageConfig manageConfig; @Autowired FYunFileServiceInterface fYunFileServiceInterface; @Scheduled(initialDelay = 3000,fixedDelay = 1000 * 60 * 60 *24) public void delScene() { List scenePros = sceneProService.getDelSceneNumV3(); for (ScenePro scenePro : scenePros) { if(StringUtils.isBlank(scenePro.getNum())){ continue; } delSource(scenePro.getNum(),scenePro.getDataSource()); sceneProService.updateDelSourceV3(scenePro.getNum()); } List scenePluses = sceneProService.getDelSceneNumV4(); for (ScenePlus scenePlus : scenePluses) { if(StringUtils.isBlank(scenePlus.getNum())){ continue; } delSource(scenePlus.getNum(),scenePlus.getDataSource()); sceneProService.updateDelSourceV4(scenePlus.getNum()); } } /** * 删除场景nas和oss数据 * oss * 正式:laser_p_data/场景码 * 测试:laser_u_data/场景码 * 原始资源 v3 v4 * 查看资源 scene_view_data v4 * 编辑资源 scene_edit_data v4 * 缓存资源 scene_result_data v4 * data/data v3 * images/images v3 * video/video v3 * voice/voice v3 * scene/ * downloads/scene/ * downloads/scenes/.zip * downloads/extras/_extras.zip * downloads/extras/_mesh.zip */ public static List meshOssPath = Arrays.asList( "scene_view_data/%s", "scene_edit_data/%s", "data/data%s", "images/images%s", "video/video%s", "voice/voice%s", "scene/%s", "downloads/scene/%s", "downloads/scenes/%s.zip", "downloads/extras/%s_extras.zip", "downloads/extras/%s_mesh.zip" ); public static List meshNasDataSourcePath = Arrays.asList( "%s_images", "%s_laser_obj", "%s_obj2Tiles", "%s_obj2txt" ); public static List meshNasNumPath = Arrays.asList( "/mnt/4Dkankan/scene_v4/%s", "/mnt/4Dkankan/scene/data/data%s", "/mnt/4Dkankan/scene/images/images%s", "/mnt/4Dkankan/scene/voice/voice%s" ); private void delSource(String num,String dataSource){ try { if(StringUtils.isBlank(num)){ return; } ScenePro scenePro = sceneProService.getByNum(num); ScenePlus scenePlus = scenePlusService.getByNum(num); if(scenePro != null || scenePlus != null){ return; } String active = manageConfig.getActive(); String laserOssPath = "laser_u_data/"+ num; if(active.contains("prod")){ laserOssPath= "laser_p_data/"+ num; } log.info("del-scene:{},oss-path:{}",num,laserOssPath); fYunFileServiceInterface.deleteFolder(laserOssPath); for (String meshPath : meshOssPath) { log.info("del-scene:{},oss-path:{}",num,String.format(meshPath,num)); if(meshPath.contains(".zip")){ fYunFileServiceInterface.deleteFile(String.format(meshPath,num)); }else { fYunFileServiceInterface.deleteFolder(String.format(meshPath,num)); } } for (String meshPath : meshNasNumPath) { log.info("del-scene:{},nas-path:{}",num,String.format(meshPath,num)); FileUtil.del(String.format(meshPath,num)); } if(checkDataSource(dataSource)){ List scenePros = sceneProService.getDataSource(dataSource); List scenePlusExts = scenePlusExtService.getDataSource(dataSource); if(!scenePros.isEmpty() || !scenePlusExts.isEmpty()){ return; } String origPath = dataSource.replace("/mnt/data","home"); log.info("del-scene:{},oss-orig-path:{}",num,origPath); fYunFileServiceInterface.deleteFolder(origPath); log.info("del-scene:{},nas-path:{}",num,dataSource); FileUtil.del(dataSource); for (String meshPath : meshNasDataSourcePath) { log.info("del-scene:{},nas-path:{}",num,String.format(meshPath,dataSource)); FileUtil.del(String.format(meshPath,dataSource)); } } }catch (Exception e){ log.info("删除失败:{}",e); } } public static boolean checkDataSource(String dataSource) { if(StringUtils.isBlank(dataSource)){ return false; } return dataSource.contains("/mnt/data") && dataSource.split("/").length >4; } }