Przeglądaj źródła

移除钉钉消息发送以及激光系统推送逻辑

tianboguang 2 lat temu
rodzic
commit
de9dc59147

+ 0 - 11
pom.xml

@@ -66,12 +66,6 @@
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
-		<!-- 钉钉sdk -->
-		<dependency>
-			<groupId>com.dingtalk.open</groupId>
-			<artifactId>taobao-sdk-java-auto</artifactId>
-			<version>1479188381469-20211020</version>
-		</dependency>
 		<dependency>
 			<groupId>com.alibaba.cloud</groupId>
 			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
@@ -92,11 +86,6 @@
 			<groupId>com.fdkankan</groupId>
 			<version>2.0.0-SNAPSHOT</version>
 		</dependency>
-		<dependency>
-			<groupId>com.fdkankan</groupId>
-			<artifactId>4dkankan-utils-dingtalk</artifactId>
-			<version>2.0.0-SNAPSHOT</version>
-		</dependency>
 
 		<dependency>
 			<groupId>com.fdkankan</groupId>

+ 0 - 832
src/main/java/com/fdkankan/modeling/receiver/BuildSceneListener.java

@@ -1,832 +0,0 @@
-//package com.fdkankan.modeling.receiver;
-//
-//import static com.fdkankan.push.PushMessageConfig.ANDROID_KEY;
-//import static com.fdkankan.push.PushMessageConfig.ANDROID_KEY_Z;
-//import static com.fdkankan.push.PushMessageConfig.ANDROID_SECRET;
-//import static com.fdkankan.push.PushMessageConfig.ANDROID_SECRET_Z;
-//import static com.fdkankan.push.PushMessageConfig.IOS_KEY;
-//import static com.fdkankan.push.PushMessageConfig.IOS_KEY_Z;
-//import static com.fdkankan.push.PushMessageConfig.IOS_SECRET;
-//import static com.fdkankan.push.PushMessageConfig.IOS_SECRET_Z;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.exceptions.ExceptionUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.alibaba.fastjson.JSONArray;
-//import com.alibaba.fastjson.JSONObject;
-//import com.fdkankan.common.constant.BuildStatus;
-//import com.fdkankan.common.constant.ConstantFilePath;
-//import com.fdkankan.common.constant.ConstantUrl;
-//import com.fdkankan.common.constant.ModelingBuildStatus;
-//import com.fdkankan.common.constant.ServerCode;
-//import com.fdkankan.common.constant.UploadFilePath;
-//import com.fdkankan.common.exception.BusinessException;
-//import com.fdkankan.common.util.ComputerUtil;
-//import com.fdkankan.common.util.CreateObjUtil;
-//import com.fdkankan.common.util.FileUtil;
-//import com.fdkankan.common.util.FileUtils;
-//import com.fdkankan.common.util.SceneUtil;
-//import com.fdkankan.dingtalk.DingTalkSendUtils;
-//import com.fdkankan.fyun.constant.StorageType;
-//import com.fdkankan.fyun.oss.UploadToOssUtil;
-//import com.fdkankan.modeling.bean.BuildSceneResultBean;
-//import com.fdkankan.modeling.constants.SysConstants;
-//import com.fdkankan.modeling.entity.BuildLog;
-//import com.fdkankan.modeling.exception.BuildException;
-//import com.fdkankan.modeling.service.IBuildLogService;
-//import com.fdkankan.mq.message.BuildSceneFailDTMqMessage;
-//import com.fdkankan.mq.message.BuildSceneMqMessage;
-//import com.fdkankan.mq.message.BuildSceneResultMqMessage;
-//import com.fdkankan.mq.util.RocketMQProducer;
-//import com.fdkankan.push.PushMessageConfig;
-//import com.fdkankan.push.PushMsgUtil;
-//import com.fdkankan.redis.constant.RedisKey;
-//import com.fdkankan.redis.util.RedisUtil;
-//import com.taobao.api.ApiException;
-//import java.io.File;
-//import java.io.FileWriter;
-//import java.io.IOException;
-//import java.io.PrintWriter;
-//import java.io.StringWriter;
-//import java.io.UnsupportedEncodingException;
-//import java.security.InvalidKeyException;
-//import java.security.NoSuchAlgorithmException;
-//import java.time.Duration;
-//import java.time.temporal.ChronoUnit;
-//import java.util.Date;
-//import java.util.HashMap;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Map.Entry;
-//import java.util.Objects;
-//import java.util.concurrent.Callable;
-//import java.util.concurrent.CompletableFuture;
-//import java.util.concurrent.ExecutorService;
-//import java.util.concurrent.Executors;
-//import java.util.concurrent.Future;
-//import java.util.concurrent.TimeUnit;
-//import java.util.concurrent.TimeoutException;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.commons.lang3.StringUtils;
-//import org.apache.commons.lang3.time.StopWatch;
-//import org.apache.rocketmq.spring.annotation.MessageModel;
-//import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
-//import org.apache.rocketmq.spring.core.RocketMQListener;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.beans.factory.annotation.Value;
-//import org.springframework.stereotype.Component;
-//import org.springframework.util.ObjectUtils;
-//import org.springframework.web.client.RestTemplate;
-//
-//
-//@Slf4j
-//@Component
-//@RocketMQMessageListener(
-//        consumerGroup = "${rocketmq.consumer.build-scene-group}",
-//        topic = "${rocketmq.build-scene.topicName.topic-modeling-a}",
-//        messageModel = MessageModel.CLUSTERING,//负载均衡模式
-//        consumeThreadMax = 1,//消费者最大线程数,每次只消费一个
-//        consumeTimeout = 172801000L
-//)
-//public class BuildSceneListener implements RocketMQListener<String> {
-//
-//    @Value("${rocketmq.consumer.build-scene-group}")
-//    private String consumerGroup;
-//
-//    @Value("${rocketmq.build-scene.topicName.topic-modeling-a}")
-//    private String topicName;
-//
-//    @Value("${rocketmq.build-scene.topicName.topic-modeling-a-dt}")
-//    private String topicNameDt;
-//
-//    @Value("${rocketmq.build-scene-result.topicName.topic-modeling-a}")
-//    private String buildSceneResultTopic;
-//
-//    @Autowired
-//    RedisUtil redisUtil;
-//
-//    private RestTemplate restTemplate = new RestTemplate();
-//
-//    @Value("${4dkk.laserService.host}")
-//    private String laserHost;
-//
-//    @Value("${upload.type}")
-//    private String ossType;
-//
-//    @Value("${oss.prefix.ali}")
-//    private String prefixAli;
-//
-//    @Autowired
-//    private UploadToOssUtil uploadToOssUtil;
-//
-//    @Autowired
-//    RocketMQProducer rocketMQProducer;
-//
-//    @Value("${environment:dev}")
-//    private String environment;
-//
-//    @Autowired
-//    private DingTalkSendUtils dingTalkSendUtils;
-//
-//    @Autowired
-//    private IBuildLogService buildLogService;
-//
-//    @Override
-//    public void onMessage(String message) {
-//        log.info("开始处理消息,消费者组:{},主题名:{}, 消息内容:{}", consumerGroup, topicName, message);
-//        if (ObjectUtils.isEmpty(message)) {
-//            SysConstants.SYSTEM_BUILDING = false;
-//            log.error("消息体为空,退出构建,当前服务器id:{}", SysConstants.hostName);
-//            return;
-//        }
-//        BuildSceneMqMessage buildSceneMqMessage = JSONObject.parseObject(message, BuildSceneMqMessage.class);
-//        if(Objects.isNull(buildSceneMqMessage) || StrUtil.isBlank(buildSceneMqMessage.getSceneNum())){
-//            log.error("消息内容错误,消费者组:{},主题名:{}, 消息内容:{}", consumerGroup, topicName, message);
-//            return;
-//        }
-//        process(buildSceneMqMessage);
-//
-//        log.info("处理消息结束,消费者组:{},主题名:{}, 消息内容:{}", consumerGroup, topicName, message);
-//    }
-//
-//    public void process(BuildSceneMqMessage message) {
-//
-//        SysConstants.SYSTEM_BUILDING = true;
-//        if (SysConstants.SYSTEM_OFFING) {
-//            SysConstants.SYSTEM_BUILDING = false;
-//            log.error("服务实例:{} 正在关闭,退出构建!", SysConstants.hostName);
-//            throw new BusinessException(ServerCode.SERVER_CLOSING);
-//        }
-//        //开始计时
-//        StopWatch watch = new StopWatch();
-//        watch.start();
-//
-//        BuildLog buildLog = new BuildLog();
-//        final BuildSceneResultBean buildSceneResult = new BuildSceneResultBean();
-//        Future<ModelingBuildStatus> future = null;
-//        try {
-//
-//            //休眠2秒等待准备数据
-//            Thread.sleep(2000L);
-//
-//            //计算前准备
-//            preBuild(message, buildLog);
-//
-//            future = SysConstants.executorService.submit(()->{
-//                return buildScene(message, buildSceneResult);
-//            });
-//            future.get(SysConstants.modelTimeOut, TimeUnit.HOURS);
-//
-//            //结束计时
-//            watch.stop();
-//            buildLog.setDuration(watch.getTime(TimeUnit.SECONDS));
-//        } catch (TimeoutException ex) {
-//            log.error("服务实例:{} 构建异常:",SysConstants.hostName,ex);
-//            buildSceneResult.setBuildStatus(ModelingBuildStatus.OVERTIME);
-//        } catch (BuildException e){
-//            buildSceneResult.setBuildStatus(e.getBuildStatus());
-//        } catch(Exception e) {
-//            log.error("服务实例:{} 构建异常:", SysConstants.hostName, e);
-//            if (e.getCause() instanceof BuildException) {
-//                buildSceneResult.setBuildStatus(((BuildException) e.getCause()).getBuildStatus());
-//            } else {
-//                buildSceneResult.setBuildStatus(ModelingBuildStatus.FAILED);
-//                //未知异常,记录异常信息
-//                buildLog.setReason(ExceptionUtil.stacktraceToString(e, 3000));
-//            }
-//        }
-//        //计算后处理
-//        afterBuild(message, buildSceneResult, buildLog);
-//
-//    }
-//
-//    private ModelingBuildStatus buildScene(BuildSceneMqMessage message, BuildSceneResultBean buildSceneResult) throws Exception{
-//        String projectNum = null;
-//        Long computeTime = null;//计算耗时
-//        //如果mq生产者在消息体中执行了计算结果mq的主题名,就发到这个主题名,否则就发送到配置的主题名
-//        String resultTopicName = StrUtil.isNotBlank(message.getResultReceiverMqName()) ?
-//                message.getResultReceiverMqName() : buildSceneResultTopic;
-//        //该场景使用的容量
-////        Long space = 0L;
-//        //支付状态
-//        int payStatus = 0;
-//        String unicode = message.getUnicode();
-//        String path = message.getPath();
-//        String prefix = message.getPrefix();
-//        projectNum = message.getSceneNum();
-//        //不同的相机不同的方法
-//        String cameraType = message.getCameraType();
-//        String algorithm = message.getAlgorithm();
-//        String fileId = message.getFileId();
-//        String cameraName = message.getCameraName();
-//        //0表示有4k图,1表示没有
-//        String resolution = message.getResolution();
-//        //判断调用V2还是V3版本的算法
-//        String buildType = ObjectUtils.isEmpty(message.getBuildType()) ? "V2" : message.getBuildType();
-//
-//        String dataPath = "data/data" + projectNum;//老版本文件路径
-//
-//        Map<String,String> map = null;
-//        Integer pushChannel = null;
-//        String pushToken = null;
-//        Integer videoVersion = null;
-//
-//        buildSceneResult.setResultTopicName(resultTopicName);
-//        buildSceneResult.setCameraType(cameraType);
-//        buildSceneResult.setNum(projectNum);
-//
-//
-//        Map<String, String> dataMap = ComputerUtil.getTypeString(cameraType, algorithm,
-//                resolution);
-//        String splitType = dataMap.get("splitType");
-//        String skyboxType = dataMap.get("skyboxType");
-//        String dataDescribe = dataMap.get("dataDescribe");
-//
-//        log.info("用的算法是:"+algorithm);
-//        log.info("用的相机是:"+ (Integer.parseInt(cameraType) < 4 ? "单球目" : "双球目(八目)"));
-//
-//        //4表示硬件部研发的双球目相机,其余为旧版本相机
-//        if(Integer.parseInt(cameraType) < 3){
-//
-//            String data = FileUtils.readFile(path + File.separator + "capture" +File.separator+"data.fdage");
-//            JSONObject dataJson = new JSONObject();
-//            if(data!=null){
-//                dataJson = JSONObject.parseObject(data);
-//                if(dataJson.containsKey("imgs")){
-//                    splitType = "SPLIT_V4";
-//                }
-//            }
-//            //生成project.json和data.json供算法部使用
-//            ComputerUtil.createJson(path, splitType, skyboxType, dataDescribe, projectNum, path);
-//            //计算模型并返回需要上传oss的文件集合
-//            map = ComputerUtil.computer(projectNum, path, buildType);
-//
-//        } else {
-//
-//            path = SceneUtil.getPath(path, cameraName, fileId, Integer.parseInt(cameraType), unicode);
-//
-//            String dataFdagePath = path + File.separator + "capture" +File.separator+"data.fdage";
-//            log.info("dataFdagePath 文件路径 :{}", dataFdagePath);
-//            String data = FileUtils.readFile(dataFdagePath);
-//            //获取data.fdage的内容
-//            JSONObject dataJson = new JSONObject();
-//            if(data!=null){
-//                dataJson = JSONObject.parseObject(data);
-//            }
-//            pushChannel = dataJson.getInteger("pushChannel");
-//            pushToken = dataJson.getString("pushToken");
-//
-//            /*
-//             1、判断是否计算过资源,若计算过删除缓存, 如果caches中存在_images文件或者目录,就删除掉,否则就删除除了images以外的所有文件和目录
-//             2、删除上一次计算出来的result目录
-//             */
-//            this.deleteCachesAndResult(path);
-//
-//            //v2版本使用4k算法
-//            if(dataJson.containsKey("videoVersion")
-//                    && StringUtils.isNotEmpty(dataJson.getString("videoVersion"))
-//                    && Integer.parseInt(dataJson.getString("videoVersion")) < 4){
-//                skyboxType = "SKYBOX_V6";
-//            }
-//
-//            //生成project.json和data.json并写到path目录下供算法部使用
-//            log.info("path:" + path);
-//            ComputerUtil.createJson(path, splitType, skyboxType, dataDescribe, projectNum, path);
-//            //计算模型并返回需要上传oss的文件集合
-//            map = ComputerUtil.computer(projectNum, path, buildType);
-//            //计算完成时间
-//            log.info("计算完成耗时:{}",computeTime);
-//
-//            if(Integer.parseInt(cameraType) == 5 || Integer.parseInt(cameraType) == 6){
-//                map.put(path + File.separator + "capture/stitch_params.txt", dataPath + "/stitch_params.txt");
-//            }
-//            map.put(path + File.separator + "capture/Up.xml", dataPath + "/Up.xml");
-//            map.put(path + File.separator + "capture/Up2.xml", dataPath + "/Up2.xml");
-//
-//            //转台相机
-//            if(Integer.parseInt(cameraType) == 13){
-//                map.put(path + File.separator + "capture/Up.txt", dataPath + "/Up.txt");
-//                map.put(path + File.separator + "capture/Up2.txt", dataPath + "/Up2.txt");
-//            }
-//
-//            //计算已使用容量
-//            payStatus = 1;
-//
-//            log.info("八目上完oss结束修改数据:"+projectNum);
-//
-//            //读取计算结果文件生成videosJson
-////                videosJson = this.getVideosJson(path, dataJson, projectNum, Integer.valueOf(cameraType));
-//            String videoVersionStr = dataJson.getString("videoVersion");
-//            videoVersion = StrUtil.isEmpty(videoVersionStr) ? null : Integer.parseInt(videoVersionStr);
-//
-//            //更新scene.json里面的video数据
-////                this.updateVideosToSceneJson(projectNum, videosJson);
-//
-//            //计算成功  激光转台相机 同步 请求
-//            this.jgSynch(message);
-//        }
-//
-//        buildSceneResult.setBuildStatus(ModelingBuildStatus.SUCCESS);
-//        buildSceneResult.setFileId(fileId);
-//        buildSceneResult.setPayStatus(payStatus);
-//        buildSceneResult.setUploadMap(map);
-//        buildSceneResult.setPath(path);
-//        buildSceneResult.setPushChannel(pushChannel);
-//        buildSceneResult.setPushToken(pushToken);
-//        buildSceneResult.setPrefix(prefix);
-//        buildSceneResult.setVideoVersion(videoVersion);
-//
-//        CreateObjUtil.deleteFile(path.replace(ConstantFilePath.BUILD_MODEL_PATH, "/") + "/capture");
-//
-//        return ModelingBuildStatus.SUCCESS;
-//
-////        return BuildSceneResultBean.builder()
-////            .buildStatus(ModelingBuildStatus.SUCCESS)
-////            .resultTopicName(resultTopicName)
-////            .cameraType(cameraType)
-////            .fileId(fileId)
-////            .payStatus(payStatus)
-////            .num(projectNum)
-////            .uploadMap(map)
-////            .path(path)
-////            .pushChannel(pushChannel)
-////            .pushToken(pushToken)
-////            .prefix(prefix)
-////            .videoVersion(videoVersion)
-////            .build();
-//    }
-//
-//    private void afterBuild(BuildSceneMqMessage message, BuildSceneResultBean buildSceneResult, BuildLog buildLog){
-//        try {
-//            ModelingBuildStatus buildStatus = buildSceneResult.getBuildStatus();
-//            String buildLogPath = String.format(UploadFilePath.BUILD_LOG_PATH, message.getSceneNum());
-//            log.info("服务{} 计算结束:{},计算状态:{}", SysConstants.hostName, buildLog.getNum(),buildStatus.message());
-//
-//            if(!buildStatus.equals(ModelingBuildStatus.REPEAT)){
-//                //释放锁
-//                redisUtil.del(String.format(RedisKey.SCENE_BUILDING, message.getSceneNum()));
-//
-//                //生成status.json文件
-//                this.upoadLog(message.getSceneStatus(), message.getWebSite(),
-//                    message.getSceneNum(),message.getThumb(),message.getPayStatus(), message.getDataSource());
-//
-//                //如果是重复计算,没有走到计算逻辑,不需要上传日志文件
-//                buildLog.setLogDetailPath(prefixAli+ buildLogPath + "console.log");
-//            }
-//            buildLog.setBuildStatus(buildStatus.code());
-//            buildLog.setCameraType(Integer.parseInt(buildSceneResult.getCameraType()));
-//            buildLogService.updateById(buildLog);
-//
-//        } catch (Exception e) {
-//            log.error("计算后业务处理出错!", e);
-//        }finally {
-//            //发送计算结果mq
-//            buildSceneResult.setDuration(buildLog.getDuration());
-//            this.sendCallResult(message, buildSceneResult);
-//
-//            //计算完毕,将当前系统构建状态改为false
-//            SysConstants.SYSTEM_BUILDING = false;
-//        }
-//    }
-//
-//    private void uploadCaches(String num, Map<String,String> map, String path){
-//
-//        String sceneNumPAth = String.format("scene/%s", num);
-//
-//        List<String> imagesList = FileUtil.getFileList(path + "/caches/images");
-//        log.info("caches/images_path:{}", path + "/caches/images");
-//        if(CollUtil.isNotEmpty(imagesList)){
-//            log.info("上传的caches/images文件列表:{}", imagesList.toString());
-//            imagesList.stream().forEach(str -> map.put(str, str.replace(path, sceneNumPAth)));
-//        }
-//
-//        List<String> videosList = FileUtil.getFileList(path + "/caches/videos");
-//        if(CollUtil.isNotEmpty(videosList)){
-//            log.info("上传的caches/videos文件列表:{}", videosList.toString());
-//            videosList.stream().forEach(str -> map.put(str, str.replace(path, sceneNumPAth)));
-//        }
-//
-//    }
-//
-//    private void preBuild(BuildSceneMqMessage message, BuildLog buildLog) throws BuildException {
-//
-//        // 初始化日志参数
-//        buildLog.setHostName(SysConstants.hostName);
-//        buildLog.setTopicName(topicName);
-//        buildLog.setNum(message.getSceneNum());
-//        buildLog.setDataSource(message.getDataSource());
-//        buildLogService.save(buildLog);
-//
-////        String key = RedisKey.SCENE_BUILDING + message.getSceneNum();
-////        Long building = redisUtil.incr(key, 1);
-////        if (building.compareTo(1L) != 0) {
-////            log.error("场景正在构建中,退出构建,当前服务器id:{},参数:{}", SysConstants.hostName, JSONObject.toJSONString(message));
-////            throw new BuildException(ModelingBuildStatus.REPEAT);
-////        } else {
-////            redisUtil.expire(key, Duration.of(SysConstants.modelTimeOut, ChronoUnit.HOURS));
-////        }
-//    }
-//
-//    private void copyToEditDir(String num) throws IOException {
-//
-//        String editImagesPath = String.format(UploadFilePath.IMG_EDIT_PATH, num);
-//        String viewImagesPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
-//
-//        String editDataPath = String.format(UploadFilePath.DATA_EDIT_PATH, num);
-//        String viewDataPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
-//
-//        Map<String, String> map = new HashMap<>();
-//        map.put(editImagesPath + "vision.modeldata", viewImagesPath + "vision.modeldata");
-//        map.put(editImagesPath + "vision2.modeldata", viewImagesPath + "vision2.modeldata");
-//        map.put(editDataPath + "floorplan_cad.json", viewDataPath + "floorplan_cad.json");
-//
-//        for (Entry<String, String> entry : map.entrySet()) {
-//            uploadToOssUtil.copyFiles(entry.getValue(), entry.getKey());
-//        }
-//    }
-//
-//    /**
-//     * 发送计算结果
-//     * @param message
-//     * @param buildSceneResult
-//     */
-//    private void sendCallResult(BuildSceneMqMessage message, BuildSceneResultBean buildSceneResult){
-//        ModelingBuildStatus buildStatus = buildSceneResult.getBuildStatus();
-//        //重复计算不需要发送mq做后置处理
-//        if(buildStatus.equals(ModelingBuildStatus.REPEAT)){
-//            return;
-//        }
-//        boolean buildSuccess = buildStatus.equals(ModelingBuildStatus.SUCCESS) ? true : false;
-//        rocketMQProducer.sendOneWay(buildSceneResult.getResultTopicName(),
-//                BuildSceneResultMqMessage.builder()
-//                    .buildSuccess(buildSuccess)
-//                    .cameraType(buildSceneResult.getCameraType())
-//                    .computeTime(buildSceneResult.getDuration())
-//                    .fileId(buildSceneResult.getFileId())
-//                    .payStatus(buildSceneResult.getPayStatus())
-//                    .sceneCode(message.getSceneNum())
-//                    .uploadFiles(buildSceneResult.getUploadMap())
-//                    .path(buildSceneResult.getPath())
-//                    .pushChannel(buildSceneResult.getPushChannel())
-//                    .pushToken(buildSceneResult.getPushToken())
-//                    .prefix(buildSceneResult.getPrefix())
-//                    .videoVersion(buildSceneResult.getVideoVersion())
-//                    .build());
-//
-//        //如果是计算失败,需要发送钉钉
-//        if(!buildSuccess){
-//            // TODO: 2022/1/25 测试阶段,先注释掉推送
-//            this.sendDingTalkMq(buildStatus.message(), message);
-//        }
-//    }
-//
-//    private void upoadLog(Integer sceneStatus, String webSite,
-//            String num, String thumb, Integer payStatus, String dataSource){
-//        try{
-//            JSONObject statusJson = new JSONObject();
-//            //临时将-2改成1,app还没完全更新
-//            if(sceneStatus == -2){
-//                sceneStatus = 1;
-//            }else if(sceneStatus == -1){
-//                // 失败状态不予显示到客户端
-//                sceneStatus = 0;
-//            }
-//            statusJson.put("status", sceneStatus);
-//            statusJson.put("webSite", webSite);
-//            statusJson.put("sceneNum", num);
-//            statusJson.put("thumb", thumb);
-//            statusJson.put("payStatus", payStatus);
-//            FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+num+File.separator+"status.json", statusJson.toString());
-//
-//            String dataPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
-//            String buildLogPath = String.format(UploadFilePath.BUILD_LOG_PATH, num);
-//
-//            //todo 待删除old_path
-//            uploadToOssUtil.upload(
-//                ConstantFilePath.SCENE_PATH + "data/data" + num + File.separator + "status.json",
-//                "data/data" + num + File.separator + "status.json");
-//
-//            uploadToOssUtil.upload(
-//                ConstantFilePath.SCENE_PATH + "data/data" + num + File.separator + "status.json",
-//                dataPath + "status.json");
-//
-//            uploadToOssUtil.upload(dataSource + File.separator + "console.log",
-//                buildLogPath + "console.log");
-//
-//        }catch (Exception e){
-//            log.error("上传日志失败!", e);
-//        }
-//    }
-//
-//    private void jgSynch(BuildSceneMqMessage message){
-//        log.info("激光转台相机 同步 请求 ");
-//        if(Integer.parseInt(message.getCameraType()) != 14)
-//            return;
-//
-//        String sceneName = message.getSceneName();
-//        String dataSource = message.getDataSource();
-//        Long userId = message.getUserId();
-//        String userName = message.getUserName();
-//        String cameraName = message.getCameraName();
-//        try {
-//            String title = "";
-//            if(StringUtils.isNotEmpty(sceneName)){
-//                title = sceneName;
-//            }
-////                        String dataSource = sceneProExt.getDataSource();
-//            String jgPath = dataSource;
-//            //创建目录
-//            if(dataSource.lastIndexOf("/")!=-1){
-//                jgPath = jgPath + "_laserData";
-//            }else{
-//                jgPath = jgPath.substring(0,jgPath.length()-1) + "_laserData";
-//            }
-//
-//            FileUtils.createDir(jgPath+"/extras");
-//
-//            log.info("生成 激光相机目录 " + jgPath);
-//            //生成data.json
-//            JSONObject jgDataJson = new JSONObject();
-//            jgDataJson.put("split_type", "SPLIT_V15");
-//            jgDataJson.put("skybox_type", "SKYBOX_V5");
-//            jgDataJson.put("extras", null);
-//            FileUtils.writeFile(jgPath + File.separator + "data.json", jgDataJson.toString());
-//
-//            CreateObjUtil.cpfile(dataSource  + "/results/laserData/cover", jgPath+"/extras/");
-//            CreateObjUtil.cplaserfile(dataSource  + "/results/laserData", jgPath+File.separator);
-//
-//            //激光相机
-//            String url = laserHost+"/indoor/{sceneCode}/service/init?path="
-//                    + jgPath + File.separator + "laserData" + "&title="+ title
-//                    + "&childName=" + cameraName + "&createTime=" +  message.getSceneProCreateTime()
-//                    + "&snCode="+ cameraName;
-//
-//            if(userId!=null){
-//                url = url + "&userId=" + userId;
-//            }
-//
-//            if(StringUtils.isNotEmpty(userName)){
-//                url = url + "&phone=" + userName;
-//            }
-//
-//            url = url.replace("{sceneCode}",message.getSceneNum());
-//            log.info("激光转台相机 同步 :" + url);
-//            JSONObject hotListJson =
-//                    JSONObject.parseObject(restTemplate.getForObject(url,String.class));
-//            log.info("激光转台相机 同步结束 :" + hotListJson);
-//        }catch (Exception e){
-//            log.error("激光转台相机同步失败", e);
-//            // TODO: 2022/1/25 测试阶段,先注释掉推送
-////            this.sendDingTalkMq("激光转台相机同步失败", message);
-//        }
-//    }
-//
-//    private void sendSms(JSONObject dataJson, int cameraType, String sceneName, String webSite){
-//        log.info("推送消息,渠道是 {}, 手机token是 {}", dataJson.get("pushChannel"), dataJson.get("pushToken"));
-//        if(dataJson.containsKey("pushChannel") && dataJson.containsKey("pushToken")){
-//            try{
-//                if(StorageType.AWS.code().equals(ossType)){
-//                    PushMsgUtil.googlePushMsg(ConstantFilePath.BASE_PATH + "/refreshToken.json",dataJson.getString("pushToken"),
-//                            sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                            webSite);
-//                    return;
-//                }
-//
-//                PushMessageConfig demo = null;
-//                if(dataJson.getIntValue("pushChannel") == 0){
-//
-//                    if(cameraType == 10 || cameraType == 13){
-//                        //ios
-//                        log.info("IOS_KEY:{}, IOS_SECRET:{}", IOS_KEY_Z, IOS_SECRET_Z);
-//                        demo = new PushMessageConfig(IOS_KEY_Z, IOS_SECRET_Z);
-//                        demo.sendIOSUnicast(dataJson.getString("pushToken"),
-//                                "四维看看Minion", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                                webSite);
-//                    }else {
-//                        //ios
-//                        log.info("IOS_KEY:{}, IOS_SECRET:{}", IOS_KEY, IOS_SECRET);
-//                        demo = new PushMessageConfig(IOS_KEY, IOS_SECRET);
-//                        demo.sendIOSUnicast(dataJson.getString("pushToken"),
-//                                "四维看看Pro", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                                webSite);
-//                    }
-//
-//                }else {
-//                    if(cameraType == 10 || cameraType == 13){
-//                        //ios
-//                        //安卓
-//                        log.info("ANDROID_KEY:{}, ANDROID_SECRET:{}", ANDROID_KEY_Z, ANDROID_SECRET_Z);
-//                        demo = new PushMessageConfig(ANDROID_KEY_Z, ANDROID_SECRET_Z);
-//                        demo.sendAndroidUnicast2(dataJson.getString("pushToken"),
-//                                "四维看看Minion", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                                webSite);
-//                    }else {
-//                        //安卓
-//                        log.info("ANDROID_KEY:{}, ANDROID_SECRET:{}", ANDROID_KEY, ANDROID_SECRET);
-//                        demo = new PushMessageConfig(ANDROID_KEY, ANDROID_SECRET);
-//                        demo.sendAndroidUnicast(dataJson.getString("pushToken"),
-//                                "四维看看Pro", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                                webSite);
-//                    }
-//                }
-//                log.info("消息推送结束!");
-//            }catch (Exception e){
-//                log.error("推送消息失败:", e);
-//            }
-//        }
-//    }
-//
-//    private void updateVideosToSceneJson(String projectNum, JSONObject videosJson) throws Exception {
-//        String sceneJsonPath = String.format(ConstantFilePath.SCENE_PATH_FORMAT, projectNum);
-//        String strsceneInfos = FileUtils.readFile(sceneJsonPath);
-//        JSONObject scenejson = new JSONObject();
-//        if(strsceneInfos!=null){
-//            scenejson = JSONObject.parseObject(strsceneInfos);
-//        }
-//        scenejson.put("videos", videosJson.toJSONString());
-//        FileUtils.writeFile(sceneJsonPath, scenejson.toString());
-//    }
-//
-//    private JSONObject getVideosJson(String path, JSONObject dataJson, String projectNum, int cameraType) throws Exception {
-//        //读取videos_hdr_param.json, 保存点位视频的value
-//        Map<String, Object> videoMap = new HashMap<>();
-//        String videosHdr = FileUtils.readFile(path + File.separator + "results/videos/videos_hdr_param.json");
-//        JSONArray videoArray = null;
-//        if(StringUtils.isNotEmpty(videosHdr)){
-//            videoArray = JSONObject.parseObject(videosHdr).getJSONArray("hdr_param");
-//        }
-//        if(videoArray != null){
-//            for(int i = 0, len = videoArray.size(); i < len; i++) {
-//                videoMap.put(videoArray.getJSONObject(i).getString("name"), videoArray.getJSONObject(i).getString("value"));
-//                if(videoArray.getJSONObject(i).containsKey("fov")){
-//                    videoMap.put(videoArray.getJSONObject(i).getString("name") + "_fov", videoArray.getJSONObject(i).getString("fov"));
-//                }
-//            }
-//        }
-//
-//        //获取upload中的video视频名称
-//        String uploadData = FileUtils.readFile(path + File.separator + "results" +File.separator+"upload.json");
-//        JSONObject uploadJson = null;
-//        JSONArray array = null;
-//        if(uploadData!=null) {
-//            uploadJson = JSONObject.parseObject(uploadData);
-//            array = uploadJson.getJSONArray("upload");
-//        }
-//        JSONObject fileJson = null;
-//        String fileName = "";
-//
-//        //计算ts文件的大小,并拼接成json格式
-//        JSONArray jsonArray = new JSONArray();
-//        JSONObject videoJson = null;
-//        JSONObject videosJson = new JSONObject();
-//        long videoSize = 0L;
-//        for(int i = 0, len = array.size(); i < len; i++) {
-//            fileJson = array.getJSONObject(i);
-//            fileName = fileJson.getString("file");
-//            if(fileJson.getIntValue("clazz") == 11 && fileName.contains(".mp4") && !fileName.contains("-ios.mp4")){
-//                videoJson = new JSONObject();
-//                videoJson.put("id", fileName.substring(
-//                        0, fileName.lastIndexOf(".")).replace("videos/", ""));
-//
-//                //如果ts文件存在,就计算ts大小
-//                if(new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).exists()){
-//                    videoSize = new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).length();
-//                    videoJson.put("tsSize", videoSize);
-//                }
-//                if(videoMap.containsKey(videoJson.get("id"))){
-//                    videoJson.put("value", videoMap.get(videoJson.get("id")));
-//                }
-//                if(videoMap.containsKey(videoJson.get("id") + "_fov")){
-//                    videoJson.put("blend_fov", videoMap.get(videoJson.get("id") + "_fov"));
-//                }else {
-//                    videoJson.put("blend_fov", 7);
-//                }
-//                jsonArray.add(videoJson);
-//            }
-//        }
-//
-//        videosJson.put("data", jsonArray);
-//        if(dataJson.containsKey("videoVersion") && StringUtils.isNotEmpty(dataJson.getString("videoVersion")) && Integer.parseInt(dataJson.getString("videoVersion")) >= 4){
-//            videosJson.put("version", 3);
-//            if(StorageType.OSS.code().equals(ossType)){
-//                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up.xml");
-//            }
-//            if(StorageType.AWS.code().equals(ossType)){
-//                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up.xml");
-//            }
-//            if(cameraType == 13){
-//                //转台相机
-//                videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
-//            }
-//        }else {
-//            videosJson.put("version", 1);
-//            if("oss".equals(ossType)){
-//                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up2.xml");
-//            }
-//            if("aws".equals(ossType)){
-//                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up2.xml");
-//            }
-//
-//            if(cameraType == 13){
-//                //转台相机
-//                videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
-//            }
-//        }
-//
-//        if(cameraType == 5 || cameraType == 6){
-//            videosJson.put("version", 1);
-//            if("oss".equals(ossType)){
-//                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/stitch_params.txt");
-//            }
-//            if("aws".equals(ossType)){
-//                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/stitch_params.txt");
-//            }
-//        }
-//
-//        return videosJson;
-//    }
-//
-//    private String downLoadSource(String path, int cameraType, String cameraName, String unicode, String fileId, String imgsName, String prefix) throws Exception {
-//        if(cameraType < 4){
-//            throw new Exception("cameraType 不能小于4");
-//        }
-//        //cameraType=5为新版本双目, cameraType=6为小红屋新版本双目
-//        String ossPath = ConstantFilePath.OSS_PREFIX + cameraName.replace("4DKKPRO_", "")
-//                .replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator
-//                + unicode + File.separator;
-//        String localPath = cameraName.replace("4DKKPRO_", "").replace("-fdage", "").toLowerCase() +
-//                File.separator + fileId + File.separator + unicode;
-//        if(cameraType == 5 || cameraType == 6){
-//            path = ConstantFilePath.BUILD_MODEL_PATH + unicode;
-//            //下载zip包
-//            FileUtils.downLoadFromUrl(prefix + "/" + imgsName + "?m=" + System.currentTimeMillis(), imgsName, path + File.separator + "capture");
-//            //解压
-//            FileUtils.decompress(path + File.separator + "capture" + File.separator + imgsName,
-//                    path + File.separator + "capture") ;
-//            //删除压缩包
-//            FileUtil.delFile(path + File.separator + "capture" + File.separator + imgsName);
-//        }else if(cameraType == 14) {
-////                    + File.separator + "capture"
-//            path = ConstantFilePath.BUILD_MODEL_LASER_PATH + localPath;
-//            CreateObjUtil.ossUtilCp(ossPath,path + File.separator + "capture");
-//        } else{
-//            path = ConstantFilePath.BUILD_MODEL_PATH + localPath;
-//            CreateObjUtil.ossUtilCp(ossPath,path + File.separator + "capture");
-//        }
-//        return path;
-//    }
-//
-//    private void deleteCachesAndResult(String path){
-//        //判断是否计算过资源,若计算过删除缓存, 如果caches中存在_images文件或者目录,就删除掉,否则就删除除了images以外的所有文件和目录
-//        File caches = new File(path + File.separator + "caches");
-//        if(caches.exists()){
-//            for(File deleteFile : caches.listFiles()){
-//                if(new File(path + "_images").exists()){
-//                    if(deleteFile.isDirectory()){
-//                        FileUtils.delAllFile(deleteFile.getAbsolutePath());
-//                    }else {
-//                        FileUtils.deleteFile(deleteFile.getAbsolutePath());
-//                    }
-//                }else if(!deleteFile.getAbsolutePath().contains("images")){
-//                    if(deleteFile.isDirectory()){
-//                        FileUtils.delAllFile(deleteFile.getAbsolutePath());
-//                    }else {
-//                        FileUtils.deleteFile(deleteFile.getAbsolutePath());
-//                    }
-//                }
-//            }
-//        }
-//        //删除上一次计算出来的result目录
-//        if(new File(path + File.separator + "results").exists()){
-//            FileUtils.delAllFile(path + File.separator + "results");
-//        }
-//    }
-//
-//    private void sendDingTalkMq(String reason,BuildSceneMqMessage message){
-//        String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
-//        rocketMQProducer.sendOneWay(topicNameDt,
-//            BuildSceneFailDTMqMessage.builder()
-//                .hostName(SysConstants.hostName)
-//                .reason(reason)
-//                .num(message.getSceneNum())
-//                .serverPath(serverPath)
-//                .build());
-//    }
-//
-//    private void handFail(String reason,BuildSceneMqMessage message){
-//        String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
-//        handFail(reason,serverPath,message.getSceneNum());
-//    }
-//
-//    private void handFail(String reason,String serverPath,String num){
-//        CompletableFuture.runAsync(() -> {
-//            try {
-//                String content = String.format(SysConstants.DINGTALK_MSG_PATTERN,environment, SysConstants.hostName,reason,num,serverPath,num,num);
-//                dingTalkSendUtils.sendActioncardMsgToDingRobot(content,"场景计算失败");
-//            } catch (ApiException | UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException apiException) {
-//                apiException.printStackTrace();
-//            }
-//        });
-//    }
-//}

+ 0 - 794
src/main/java/com/fdkankan/modeling/receiver/BuildSceneMQListener.java

@@ -1,794 +0,0 @@
-//package com.fdkankan.modeling.receiver;
-//
-//import cn.hutool.core.collection.CollUtil;
-//import cn.hutool.core.date.DateUtil;
-//import cn.hutool.core.util.StrUtil;
-//import com.alibaba.fastjson.JSONArray;
-//import com.alibaba.fastjson.JSONObject;
-//import com.amazonaws.services.devicefarm.model.UploadType;
-//import com.fdkankan.common.constant.ConstantFilePath;
-//import com.fdkankan.common.constant.ConstantUrl;
-//import com.fdkankan.common.constant.UploadFilePath;
-//import com.fdkankan.common.util.ComputerUtil;
-//import com.fdkankan.common.util.CreateObjUtil;
-//import com.fdkankan.common.util.FileUtil;
-//import com.fdkankan.common.util.FileUtils;
-//import com.fdkankan.dingtalk.DingTalkSendUtils;
-//import com.fdkankan.fyun.constant.StorageType;
-//import com.fdkankan.fyun.oss.UploadToOssUtil;
-//import com.fdkankan.modeling.constants.SysConstants;
-//import com.fdkankan.mq.message.BuildSceneMqMessage;
-//import com.fdkankan.mq.message.BuildSceneResultMqMessage;
-//import com.fdkankan.mq.util.RocketMQProducer;
-//import com.fdkankan.push.PushMessageConfig;
-//import com.fdkankan.push.PushMsgUtil;
-//import com.fdkankan.redis.constant.RedisKey;
-//import com.fdkankan.redis.util.RedisUtil;
-//import com.taobao.api.ApiException;
-//import java.util.List;
-//import java.util.Map.Entry;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.commons.lang3.StringUtils;
-//import org.apache.rocketmq.spring.annotation.ConsumeMode;
-//import org.apache.rocketmq.spring.annotation.MessageModel;
-//import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
-//import org.apache.rocketmq.spring.core.RocketMQListener;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.beans.factory.annotation.Value;
-//import org.springframework.stereotype.Component;
-//import org.springframework.util.ObjectUtils;
-//import org.springframework.web.client.RestTemplate;
-//
-//import java.io.*;
-//import java.security.InvalidKeyException;
-//import java.security.NoSuchAlgorithmException;
-//import java.time.Duration;
-//import java.time.temporal.ChronoUnit;
-//import java.util.Date;
-//import java.util.HashMap;
-//import java.util.Map;
-//import java.util.Objects;
-//import java.util.concurrent.*;
-//
-//import static com.fdkankan.push.PushMessageConfig.*;
-//
-//
-//@Slf4j
-//@Component
-//@RocketMQMessageListener(
-//        consumerGroup = "${rocketmq.consumer.build-scene-group}",
-//        topic = "${rocketmq.build-scene.topicName.topic-modeling-a}",
-//        messageModel = MessageModel.CLUSTERING,//负载均衡模式
-//        consumeThreadMax = 1//消费者最大线程数,每次只消费一个
-//)
-//public class BuildSceneMQListener implements RocketMQListener<String> {
-//
-//    @Value("${rocketmq.consumer.build-scene-group}")
-//    private String consumerGroup;
-//
-//    @Value("${rocketmq.build-scene.topicName.topic-modeling-a}")
-//    private String topicName;
-//
-//    @Autowired
-//    RedisUtil redisUtil;
-//
-//    private RestTemplate restTemplate = new RestTemplate();
-//
-//    @Value("${4dkk.laserService.host}")
-//    private String laserHost;
-//
-//    @Value("${upload.type}")
-//    private String ossType;
-//
-//    @Value("${oss.prefix.ali}")
-//    private String prefixAli;
-//
-//    @Autowired
-//    private UploadToOssUtil uploadToOssUtil;
-//
-//    @Autowired
-//    RocketMQProducer rocketMQProducer;
-//
-//    @Value("${rocketmq.build-scene-result.topicName.topic-modeling-a}")
-//    private String buildSceneResultTopic;
-//
-//    @Value("${environment:dev}")
-//    private String environment;
-//
-//    @Autowired
-//    private DingTalkSendUtils dingTalkSendUtils;
-//
-//    @Override
-//    public synchronized void onMessage(String message) {
-//        log.info("开始处理消息,消费者组:{},主题名:{}, 消息内容:{}", consumerGroup, topicName, message);
-//        BuildSceneMqMessage buildSceneMqMessage = JSONObject.parseObject(message, BuildSceneMqMessage.class);
-//        if(StringUtils.isBlank(buildSceneMqMessage.getSceneNum())){
-//            log.error("消息结构错误,消费者组:{},主题名:{}, 消息内容:{}", consumerGroup, topicName, message);
-//            return;
-//        }
-//        process(buildSceneMqMessage);
-//    }
-//
-//    public void process(BuildSceneMqMessage message) {
-//        final ExecutorService exec = Executors.newFixedThreadPool(1);
-//        Callable<String> call = (Callable<String>) () -> {
-//            //开始执行耗时操作
-//            try {
-//                String key = RedisKey.SCENE_BUILDING + message.getSceneNum();
-//                // 获取缓存锁,防止重复消费
-//                Long building = redisUtil.incr(key, 1);
-//                if (building.compareTo(1L) != 0) {
-//                    log.error("场景正在构建中,退出构建,当前服务器id:{},参数:{}", SysConstants.hostName, JSONObject.toJSONString(message));
-//                } else {
-//                    redisUtil.expire(key, Duration.of(SysConstants.modelTimeOut, ChronoUnit.HOURS));
-//                }
-//                //休眠2秒等待数据入库
-//                Thread.sleep(2000L);
-//                try {
-//                    FileUtils.writeFile("/opt/hosts/running.txt", DateUtil.formatDateTime(new Date()));
-//                    String tomcatLog = "scenenum:" + message.getSceneNum() + "\ntime:" + DateUtil.formatDateTime(new Date()) +
-//                            " action:create hostname:" + SysConstants.hostName;
-//                    //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
-//                    FileWriter writer = new FileWriter("/mnt/elastic_log/tomcat" + "_" + message.getSceneNum() + ".log", true);
-//                    writer.write(tomcatLog);
-//                    writer.close();
-//                } catch (Exception e) {
-//                    e.printStackTrace();
-//                }
-//
-//                this.buildScene(message);
-//                redisUtil.del(key);
-//                try {
-//                    FileUtils.deleteFile("/opt/hosts/running.txt");
-//                    String tomcatLog = "scenenum:" + message.getSceneNum() + "\ntime:" + DateUtil.formatDateTime(new Date()) +
-//                            " action:delete hostname:" + SysConstants.hostName;
-//                    //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
-//                    FileWriter writer = new FileWriter("/mnt/elastic_log/tomcat" + "_" + message.getSceneNum() + "log", true);
-//                    writer.write(tomcatLog);
-//                    writer.close();
-//                } catch (Exception e) {
-//                    e.printStackTrace();
-//                }
-//            } catch (Exception e) {
-//                log.error("大场景计算失败",e);
-//                // TODO: 2022/1/25 测试阶段,先注释掉推送
-////                this.handFail("计算失败", message);
-//            }
-//            log.info("场景生成好了***");
-//            return "success";
-//        };
-//        Future<String> future = exec.submit(call);
-//        try {
-//            future.get(SysConstants.modelTimeOut, TimeUnit.HOURS); //任务处理超时时间设为 24个小时
-//        } catch (TimeoutException ex) {
-//            ex.printStackTrace();
-//            StringWriter trace=new StringWriter();
-//            ex.printStackTrace(new PrintWriter(trace));
-//            log.error("超时了");
-//            log.error(trace.toString());
-//            FileUtils.deleteFile("/opt/hosts/running.txt");
-//            future.cancel(true);
-//            // TODO: 2022/1/25 测试阶段,先注释掉推送
-////            handFail("计算超时",message);
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//            StringWriter trace=new StringWriter();
-//            e.printStackTrace(new PrintWriter(trace));
-//            log.error(trace.toString());
-//            FileUtils.deleteFile("/opt/hosts/running.txt");
-//            future.cancel(true);
-//            // TODO: 2022/1/25 测试阶段,先注释掉推送
-////            handFail("计算失败",message);
-//        }
-//
-//    }
-//
-//    private void buildScene(BuildSceneMqMessage message){
-//        boolean buildSuccess = Boolean.FALSE;
-//        String projectNum = null;
-//        Long computeTime = null;//计算耗时
-//        JSONObject videosJson = null;
-//        //如果mq生产者在消息体中执行了计算结果mq的主题名,就发到这个主题名,否则就发送到配置的主题名
-//        String resultTopicName = StrUtil.isNotBlank(message.getResultReceiverMqName()) ?
-//                message.getResultReceiverMqName() : buildSceneResultTopic;
-//        //该场景使用的容量
-//        Long space = 0L;
-//        //支付状态
-//        int payStatus = 0;
-//        String unicode = message.getUnicode();
-//        String path = message.getPath();
-//        String prefix = message.getPrefix();
-//        String imgsName = message.getImgsName();
-//        projectNum = message.getSceneNum();
-//        String userName = message.getUserName();
-//        //不同的相机不同的方法
-//        String cameraType = message.getCameraType();
-//        String algorithm = message.getAlgorithm();
-//        String fileId = message.getFileId();
-//        String cameraName = message.getCameraName();
-//        //0表示有4k图,1表示没有
-//        String resolution = message.getResolution();
-//        //判断调用V2还是V3版本的算法
-//        String buildType = ObjectUtils.isEmpty(message.getBuildType()) ? "V2" : message.getBuildType();
-//        String sceneName = message.getSceneName();
-//        String webSite = message.getWebSite();
-//        Date createTime = message.getSceneProCreateTime();
-//        Long userId = message.getUserId();
-//        String dataSource = message.getDataSource();
-//        Integer sceneStatus = message.getSceneStatus();
-//        Integer sceneProPayStatus = message.getPayStatus();
-//        Long sceneProId = message.getSceneProId();
-//        String thumb = message.getThumb();
-//
-//        String imgPath = String.format(UploadFilePath.IMG_VIEW_PATH, projectNum);       //新版本文件路径
-//        String dataPath = String.format(UploadFilePath.DATA_VIEW_PATH, projectNum);     //新版本文件路径
-//        String videosPath = String.format(UploadFilePath.VIDEOS_VIEW_PATH, projectNum);     //新版本文件路径
-//
-//        String oldDataPath = "data/data" + projectNum;//老版本文件路径
-//
-//        try{
-//            if(StringUtils.equals(message.getIsStandardization(),"1")){
-//                //表示标定算法
-//                ComputerUtil.computerCalibration(message.getPath());
-//                return;
-//            }
-//
-//            Map<String, String> dataMap = ComputerUtil.getTypeString(cameraType, algorithm,
-//                    resolution);
-//            String splitType = dataMap.get("splitType");
-//            String skyboxType = dataMap.get("skyboxType");
-//            String dataDescribe = dataMap.get("dataDescribe");
-//
-//            log.info("用的算法是:"+algorithm);
-//            log.info("用的相机是:"+ (Integer.parseInt(cameraType) < 4 ? "单球目" : "双球目(八目)"));
-//            Map<String,String> map = new HashMap<>();
-//
-//            //4表示硬件部研发的双球目相机,其余为旧版本相机
-//            if(Integer.parseInt(cameraType) < 3){
-//                for(int i = 0;i<5;++i){
-//                    try{
-//                        FileUtils.downLoadFromUrl(prefix+imgsName+"?m="+new Date().getTime(), imgsName,
-//                                path + File.separator + "capture");
-//                        FileUtils.decompress(path + File.separator + "capture" +File.separator+imgsName,
-//                                path + File.separator + "capture") ;
-//                        break;
-//                    }catch(Exception e){
-//                        log.error(String.format("第%d次下载并解压资源失败", i+1),  e);
-//                        if(i<4)
-//                        {
-//                            FileUtils.deleteFile(path + File.separator + "capture" +File.separator+imgsName);
-//                            FileUtils.delFolder(path + File.separator + "capture" +File.separator+"images");
-//                        }
-//                        Thread.sleep(10000);
-//                    }
-//                }
-//
-//                FileUtils.deleteFile(path + File.separator + "capture" +File.separator+"zip.Zip");
-//
-//                String data = FileUtils.readFile(path + File.separator + "capture" +File.separator+"data.fdage");
-//                JSONObject dataJson = new JSONObject();
-//                if(data!=null){
-//                    dataJson = JSONObject.parseObject(data);
-//                    if(dataJson.containsKey("imgs")){
-//                        splitType = "SPLIT_V4";
-//                    }
-//                }
-//                //生成project.json和data.json供算法部使用
-//                ComputerUtil.createJson(path, splitType, skyboxType, dataDescribe, projectNum, path);
-//                //计算模型并返回需要上传oss的文件集合
-//                map = ComputerUtil.computer(projectNum, path, buildType);
-//
-//                uploadToOssUtil.uploadMulFiles(map);
-//                log.info("双目上完oss结束修改数据:"+projectNum);
-//            } else {
-//
-//                //休眠1秒,否则可能获取不到场景资源
-//                Thread.sleep(1000);
-//                if(sceneProId == null){
-//                    log.info(projectNum + ":场景不存在");
-//                    // TODO: 2022/1/25 测试阶段,先注释掉推送
-////                    handFail("场景不存在",message);
-//                    return;
-//                }
-//
-//                long start = System.currentTimeMillis();
-//
-//                //下载资源到本地
-//                path = this.downLoadSource(path, Integer.valueOf(cameraType), cameraName, unicode, fileId, imgsName, prefix);
-//
-//                String dataFdagePath = path + File.separator + "capture" +File.separator+"data.fdage";
-//                log.info("dataFdagePath 文件路径 :{}", dataFdagePath);
-//                String data = FileUtils.readFile(dataFdagePath);
-//                //获取data.fdage的内容
-//                JSONObject dataJson = new JSONObject();
-//                if(data!=null){
-//                    dataJson = JSONObject.parseObject(data);
-//                }
-//
-//                /*
-//                 1、判断是否计算过资源,若计算过删除缓存, 如果caches中存在_images文件或者目录,就删除掉,否则就删除除了images以外的所有文件和目录
-//                 2、删除上一次计算出来的result目录
-//                 */
-//                this.deleteCachesAndResult(path);
-//
-//                //v2版本使用4k算法
-//                if(dataJson.containsKey("videoVersion")
-//                        && StringUtils.isNotEmpty(dataJson.getString("videoVersion"))
-//                        && Integer.parseInt(dataJson.getString("videoVersion")) < 4){
-//                    skyboxType = "SKYBOX_V6";
-//                }
-//
-//                //生成project.json和data.json并写到path目录下供算法部使用
-//                log.info("path:" + path);
-//                ComputerUtil.createJson(path, splitType, skyboxType, dataDescribe, projectNum, path);
-//                //计算模型并返回需要上传oss的文件集合
-//                map = ComputerUtil.computer(projectNum, path, buildType);
-//                //计算完成时间
-//                computeTime = (System.currentTimeMillis() - start) / 1000;
-//                log.info("计算完成耗时:{}",computeTime);
-//
-//                if(Integer.parseInt(cameraType) == 5 || Integer.parseInt(cameraType) == 6){
-//                    //todo 老版本old_path 待删除
-//                    map.put(path + File.separator + "capture/stitch_params.txt",
-//                            oldDataPath + "/stitch_params.txt");
-//                    //新版本文件路径
-//                    map.put(path + File.separator + "capture/stitch_params.txt",
-//                            dataPath+ "stitch_params.txt");
-//                }
-//
-//                //todo 老版本old_path 待删除
-//                map.put(path + File.separator + "capture/Up.xml", oldDataPath + "/Up.xml");
-//                map.put(path + File.separator + "capture/Up2.xml", oldDataPath + "/Up2.xml");
-//                //新版本文件路径
-//                map.put(path + File.separator + "capture/Up.xml", dataPath  + "Up.xml");
-//                map.put(path + File.separator + "capture/Up2.xml", dataPath + "Up2.xml");
-//
-//                //转台相机
-//                if(Integer.parseInt(cameraType) == 13){
-//
-//                    //todo 老版本old_path 待删除
-//                    map.put(path + File.separator + "capture/Up.txt", oldDataPath + "/Up.txt");
-//                    map.put(path + File.separator + "capture/Up2.txt", oldDataPath + "/Up2.txt");
-//
-//                    map.put(path + File.separator + "capture/Up.txt", dataPath+ "Up.txt");
-//                    map.put(path + File.separator + "capture/Up2.txt",dataPath + "Up2.txt");
-//                }
-//
-//                //上传计算结果中的caches/images和caches/videos
-//                this.uploadCaches(projectNum, map, path);
-//
-//                log.info("计算完成,批量上传文件集合:{}", map.toString());
-//                //上传计算后生成的文件
-//                uploadToOssUtil.uploadMulFiles(map);
-//
-//                //拷贝部分文件到编辑目录,用于用户编辑
-//                this.copyToEditDir(projectNum);
-//
-//                //计算已使用容量
-//                payStatus = 1;
-//                File spaceFile = null;
-//                for (String key : map.keySet()) {
-//                    spaceFile = new File(key);
-//                    if(spaceFile.exists()){
-//                        space += spaceFile.length();
-//                    }
-//                }
-//
-//                log.info("八目上完oss结束修改数据:"+projectNum);
-//
-//                //读取计算结果文件生成videosJson
-//                videosJson = this.getVideosJson(path, dataJson, projectNum, Integer.valueOf(cameraType));
-//
-//                //更新scene.json里面的video数据
-//                this.updateVideosToSceneJson(projectNum, videosJson);
-//
-//                //根据data.fdage推送计算完成的消息
-//                this.sendSms(dataJson, Integer.valueOf(cameraType), sceneName, webSite);
-//
-//                //计算成功  激光转台相机 同步 请求
-//                this.jgSynch(projectNum, Integer.valueOf(cameraType), sceneName, dataSource, createTime, userId, userName, cameraName);
-//            }
-//
-//            CreateObjUtil.deleteFile(path.replace(ConstantFilePath.BUILD_MODEL_PATH, "/") + "/capture");
-//            buildSuccess = Boolean.TRUE;
-//        } catch(Exception e){
-//            log.error("计算大场景失败"+projectNum, e);
-//            // TODO: 2022/1/25 测试阶段,先注释掉推送
-////            handFail("计算失败",message);
-//        }finally {
-//            //发送计算结果到mq,再由消费者消费并操作数据库
-//            this.sendCallResult(buildSuccess, resultTopicName, cameraType, computeTime, fileId, payStatus, projectNum, space, videosJson);
-//            //上传status.json   console.log
-//            this.uploadStatusJsonAndConsoleLog(sceneProId, sceneStatus, webSite, projectNum, thumb, payStatus, dataPath, dataSource);
-//
-//        }
-//    }
-//
-//    private void uploadCaches(String num, Map<String,String> map, String path){
-//
-//        String sceneNumPAth = String.format("scene/%s", num);
-//
-//        List<String> imagesList = FileUtil.getFileList(path + "/caches/images");
-//        log.info("caches/images_path:{}", path + "/caches/images");
-//        if(CollUtil.isNotEmpty(imagesList)){
-//            log.info("上传的caches/images文件列表:{}", imagesList.toString());
-//            imagesList.stream().forEach(str -> map.put(str, str.replace(path, sceneNumPAth)));
-//        }
-//
-//        List<String> videosList = FileUtil.getFileList(path + "/caches/videos");
-//        if(CollUtil.isNotEmpty(videosList)){
-//            log.info("上传的caches/videos文件列表:{}", videosList.toString());
-//            videosList.stream().forEach(str -> map.put(str, str.replace(path, sceneNumPAth)));
-//        }
-//
-//    }
-//
-//    private void copyToEditDir(String num) throws IOException {
-//
-//        String editImagesPath = String.format(UploadFilePath.IMG_EDIT_PATH, num);
-//        String viewImagesPath = String.format(UploadFilePath.IMG_VIEW_PATH, num);
-//
-//        String editDataPath = String.format(UploadFilePath.DATA_EDIT_PATH, num);
-//        String viewDataPath = String.format(UploadFilePath.DATA_VIEW_PATH, num);
-//
-//        Map<String, String> map = new HashMap<>();
-//        map.put(editImagesPath + "vision.modeldata", viewImagesPath + "vision.modeldata");
-//        map.put(editImagesPath + "vision2.modeldata", viewImagesPath + "vision2.modeldata");
-//        map.put(editDataPath + "floorplan_cad.json", viewDataPath + "floorplan_cad.json");
-//
-//        for (Entry<String, String> entry : map.entrySet()) {
-//            uploadToOssUtil.copyFiles(entry.getValue(), entry.getKey());
-//        }
-//    }
-//
-//    private void sendCallResult(boolean buildSuccess, String resultTopicName, String cameraType, Long computeTime, String fileId,
-//                                Integer payStatus, String projectNum, Long space, JSONObject videosJson){
-//        rocketMQProducer.sendOneWay(resultTopicName,
-//                BuildSceneResultMqMessage.builder()
-//                        .buildSuccess(buildSuccess)
-//                        .cameraType(cameraType)
-//                        .computeTime(computeTime)
-//                        .fileId(fileId)
-//                        .payStatus(payStatus)
-//                        .sceneCode(projectNum)
-//                        .space(space)
-//                        .videosJson(buildSuccess? videosJson.toJSONString() : null)
-//                        .build());
-//    }
-//
-//    private void uploadStatusJsonAndConsoleLog(Long sceneProId, Integer sceneStatus, String webSite, String projectNum,
-//                                               String thumb, Integer payStatus, String dataPath, String dataSource){
-//        try{
-//            if(Objects.nonNull(sceneProId)){
-//                com.alibaba.fastjson.JSONObject statusJson = new com.alibaba.fastjson.JSONObject();
-//                //临时将-2改成1,app还没完全更新
-//                if(sceneStatus == -2){
-//                    sceneStatus = 1;
-//                }else if(sceneStatus == -1){
-//                    // 失败状态不予显示到客户端
-//                    sceneStatus = 0;
-//                }
-//                statusJson.put("status", sceneStatus);
-//                statusJson.put("webSite", webSite);
-//                statusJson.put("sceneNum", projectNum);
-//                statusJson.put("thumb", thumb);
-//                statusJson.put("payStatus", payStatus);
-//                FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+projectNum+File.separator+"status.json", statusJson.toString());
-//
-//                //todo 待删除old_path
-//                uploadToOssUtil.upload(ConstantFilePath.SCENE_PATH+"data/data"+projectNum+File.separator+"status.json",
-//                        "data/data"+projectNum+File.separator+"status.json");
-//
-//                uploadToOssUtil.upload(ConstantFilePath.SCENE_PATH+"data/data"+projectNum+File.separator+"status.json",
-//                        dataPath+"status.json");
-//
-//                //上送日志  //todo 待删除old_path
-//                uploadToOssUtil.upload(dataSource+File.separator+"console.log",
-//                        "build_log/"+projectNum+File.separator+"console.log");
-//
-//                //上送日志
-//                uploadToOssUtil.upload(dataSource+File.separator+"console.log",
-//                        dataPath+"console.log");
-//
-//            }
-//        }catch (Exception e){
-//            log.error("上传status.json/console.log失败", e);
-//        }
-//    }
-//
-//    private void jgSynch(String projectNum, int cameraType, String sceneName, String dataSource, Date createTime, Long userId, String userName, String cameraName){
-//        log.info("激光转台相机 同步 请求 ");
-//        if(cameraType != 14)
-//            return;
-//        try {
-//            String title = "";
-//            if(StringUtils.isNotEmpty(sceneName)){
-//                title = sceneName;
-//            }
-////                        String dataSource = sceneProExt.getDataSource();
-//            String jgPath = dataSource;
-//            //创建目录
-//            if(dataSource.lastIndexOf("/")!=-1){
-//                jgPath = jgPath + "_laserData";
-//            }else{
-//                jgPath = jgPath.substring(0,jgPath.length()-1) + "_laserData";
-//            }
-//
-//            FileUtils.createDir(jgPath+"/extras");
-//
-//            log.info("生成 激光相机目录 " + jgPath);
-//            //生成data.json
-//            JSONObject jgDataJson = new JSONObject();
-//            jgDataJson.put("split_type", "SPLIT_V15");
-//            jgDataJson.put("skybox_type", "SKYBOX_V5");
-//            jgDataJson.put("extras", null);
-//            FileUtils.writeFile(jgPath + File.separator + "data.json", jgDataJson.toString());
-//
-//            CreateObjUtil.cpfile(dataSource  + "/results/laserData/cover", jgPath+"/extras/");
-//            CreateObjUtil.cplaserfile(dataSource  + "/results/laserData", jgPath+File.separator);
-//
-//            //激光相机
-//            String url = laserHost+"/indoor/{sceneCode}/service/init?path="
-//                    + jgPath + File.separator + "laserData" + "&title="+ title
-//                    + "&childName=" + cameraName + "&createTime=" +  createTime
-//                    + "&snCode="+ cameraName;
-//
-//            if(userId!=null){
-//                url = url + "&userId=" + userId;
-//            }
-//
-//            if(StringUtils.isNotEmpty(userName)){
-//                url = url + "&phone=" + userName;
-//            }
-//
-//            url = url.replace("{sceneCode}",projectNum);
-//            log.info("激光转台相机 同步 :" + url);
-//            com.alibaba.fastjson.JSONObject hotListJson =
-//                    com.alibaba.fastjson.JSONObject.parseObject(restTemplate.getForObject(url,String.class));
-//            log.info("激光转台相机 同步结束 :" + hotListJson);
-//        }catch (Exception e){
-//            log.error("激光转台相机同步失败", e);
-//            // TODO: 2022/1/25 测试阶段,先注释掉推送
-////          handFail("激光转台相机同步失败",message);
-//        }
-//    }
-//
-//    private void sendSms(JSONObject dataJson, int cameraType, String sceneName, String webSite){
-//        log.info("推送消息,渠道是 {}, 手机token是 {}", dataJson.get("pushChannel"), dataJson.get("pushToken"));
-//        if(dataJson.containsKey("pushChannel") && dataJson.containsKey("pushToken")){
-//            try{
-//                if(StorageType.AWS.code().equals(ossType)){
-//                    PushMsgUtil.googlePushMsg(ConstantFilePath.BASE_PATH + "/refreshToken.json",dataJson.getString("pushToken"),
-//                            sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                            webSite);
-//                    return;
-//                }
-//
-//                PushMessageConfig demo = null;
-//                if(dataJson.getIntValue("pushChannel") == 0){
-//
-//                    if(cameraType == 10 || cameraType == 13){
-//                        //ios
-//                        log.info("IOS_KEY:{}, IOS_SECRET:{}", IOS_KEY_Z, IOS_SECRET_Z);
-//                        demo = new PushMessageConfig(IOS_KEY_Z, IOS_SECRET_Z);
-//                        demo.sendIOSUnicast(dataJson.getString("pushToken"),
-//                                "四维看看Minion", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                                webSite);
-//                    }else {
-//                        //ios
-//                        log.info("IOS_KEY:{}, IOS_SECRET:{}", IOS_KEY, IOS_SECRET);
-//                        demo = new PushMessageConfig(IOS_KEY, IOS_SECRET);
-//                        demo.sendIOSUnicast(dataJson.getString("pushToken"),
-//                                "四维看看Pro", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                                webSite);
-//                    }
-//
-//                }else {
-//                    if(cameraType == 10 || cameraType == 13){
-//                        //ios
-//                        //安卓
-//                        log.info("ANDROID_KEY:{}, ANDROID_SECRET:{}", ANDROID_KEY_Z, ANDROID_SECRET_Z);
-//                        demo = new PushMessageConfig(ANDROID_KEY_Z, ANDROID_SECRET_Z);
-//                        demo.sendAndroidUnicast2(dataJson.getString("pushToken"),
-//                                "四维看看Minion", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                                webSite);
-//                    }else {
-//                        //安卓
-//                        log.info("ANDROID_KEY:{}, ANDROID_SECRET:{}", ANDROID_KEY, ANDROID_SECRET);
-//                        demo = new PushMessageConfig(ANDROID_KEY, ANDROID_SECRET);
-//                        demo.sendAndroidUnicast(dataJson.getString("pushToken"),
-//                                "四维看看Pro", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看",
-//                                webSite);
-//                    }
-//                }
-//                log.info("消息推送结束!");
-//            }catch (Exception e){
-//                log.error("推送消息失败:", e);
-//            }
-//        }
-//    }
-//
-//    private void updateVideosToSceneJson(String projectNum, JSONObject videosJson) throws Exception {
-//        String sceneJsonPath = String.format(ConstantFilePath.SCENE_PATH_FORMAT, projectNum);
-//        String strsceneInfos = FileUtils.readFile(sceneJsonPath);
-//        JSONObject scenejson = new JSONObject();
-//        if(strsceneInfos!=null){
-//            scenejson = com.alibaba.fastjson.JSONObject.parseObject(strsceneInfos);
-//        }
-//        scenejson.put("videos", videosJson.toJSONString());
-//        FileUtils.writeFile(sceneJsonPath, scenejson.toString());
-//    }
-//
-//    private JSONObject getVideosJson(String path, JSONObject dataJson, String projectNum, int cameraType) throws Exception {
-//        //读取videos_hdr_param.json, 保存点位视频的value
-//        Map<String, Object> videoMap = new HashMap<>();
-//        String videosHdr = FileUtils.readFile(path + File.separator + "results/videos/videos_hdr_param.json");
-//        JSONArray videoArray = null;
-//        if(StringUtils.isNotEmpty(videosHdr)){
-//            videoArray = com.alibaba.fastjson.JSONObject.parseObject(videosHdr).getJSONArray("hdr_param");
-//        }
-//        if(videoArray != null){
-//            for(int i = 0, len = videoArray.size(); i < len; i++) {
-//                videoMap.put(videoArray.getJSONObject(i).getString("name"), videoArray.getJSONObject(i).getString("value"));
-//                if(videoArray.getJSONObject(i).containsKey("fov")){
-//                    videoMap.put(videoArray.getJSONObject(i).getString("name") + "_fov", videoArray.getJSONObject(i).getString("fov"));
-//                }
-//            }
-//        }
-//
-//        //获取upload中的video视频名称
-//        String uploadData = FileUtils.readFile(path + File.separator + "results" +File.separator+"upload.json");
-//        com.alibaba.fastjson.JSONObject uploadJson = null;
-//        JSONArray array = null;
-//        if(uploadData!=null) {
-//            uploadJson = com.alibaba.fastjson.JSONObject.parseObject(uploadData);
-//            array = uploadJson.getJSONArray("upload");
-//        }
-//        com.alibaba.fastjson.JSONObject fileJson = null;
-//        String fileName = "";
-//
-//        //计算ts文件的大小,并拼接成json格式
-//        JSONArray jsonArray = new JSONArray();
-//        com.alibaba.fastjson.JSONObject videoJson = null;
-//        JSONObject videosJson = new JSONObject();
-//        long videoSize = 0L;
-//        for(int i = 0, len = array.size(); i < len; i++) {
-//            fileJson = array.getJSONObject(i);
-//            fileName = fileJson.getString("file");
-//            if(fileJson.getIntValue("clazz") == 11 && fileName.contains(".mp4") && !fileName.contains("-ios.mp4")){
-//                videoJson = new com.alibaba.fastjson.JSONObject();
-//                videoJson.put("id", fileName.substring(
-//                        0, fileName.lastIndexOf(".")).replace("videos/", ""));
-//
-//                //如果ts文件存在,就计算ts大小
-//                if(new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).exists()){
-//                    videoSize = new File(path + File.separator + "results" +File.separator+ fileName.replace(".mp4", ".ts")).length();
-//                    videoJson.put("tsSize", videoSize);
-//                }
-//                if(videoMap.containsKey(videoJson.get("id"))){
-//                    videoJson.put("value", videoMap.get(videoJson.get("id")));
-//                }
-//                if(videoMap.containsKey(videoJson.get("id") + "_fov")){
-//                    videoJson.put("blend_fov", videoMap.get(videoJson.get("id") + "_fov"));
-//                }else {
-//                    videoJson.put("blend_fov", 7);
-//                }
-//                jsonArray.add(videoJson);
-//            }
-//        }
-//
-//        videosJson.put("data", jsonArray);
-//        if(dataJson.containsKey("videoVersion") && StringUtils.isNotEmpty(dataJson.getString("videoVersion")) && Integer.parseInt(dataJson.getString("videoVersion")) >= 4){
-//            videosJson.put("version", 3);
-//            if(StorageType.OSS.code().equals(ossType)){
-//                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up.xml");
-//            }
-//            if(StorageType.AWS.code().equals(ossType)){
-//                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up.xml");
-//            }
-//            if(cameraType == 13){
-//                //转台相机
-//                videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
-//            }
-//        }else {
-//            videosJson.put("version", 1);
-//            if("oss".equals(ossType)){
-//                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/Up2.xml");
-//            }
-//            if("aws".equals(ossType)){
-//                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/Up2.xml");
-//            }
-//
-//            if(cameraType == 13){
-//                //转台相机
-//                videosJson.put("upPath", videosJson.getString("upPath").replace(".xml", ".txt"));
-//            }
-//        }
-//
-//        if(cameraType == 5 || cameraType == 6){
-//            videosJson.put("version", 1);
-//            if("oss".equals(ossType)){
-//                videosJson.put("upPath", prefixAli + "data/data" + projectNum + "/stitch_params.txt");
-//            }
-//            if("aws".equals(ossType)){
-//                videosJson.put("upPath", ConstantUrl.PREFIX_AWS + "data/data" + projectNum + "/stitch_params.txt");
-//            }
-//        }
-//
-//        return videosJson;
-//    }
-//
-//    private String downLoadSource(String path, int cameraType, String cameraName, String unicode, String fileId, String imgsName, String prefix) throws Exception {
-//        if(cameraType < 4){
-//            throw new Exception("cameraType 不能小于4");
-//        }
-//        //cameraType=5为新版本双目, cameraType=6为小红屋新版本双目
-//        String ossPath = ConstantFilePath.OSS_PREFIX + cameraName.replace("4DKKPRO_", "")
-//                .replace("-fdage", "").toLowerCase() + File.separator + fileId + File.separator
-//                + unicode + File.separator;
-//        String localPath = cameraName.replace("4DKKPRO_", "").replace("-fdage", "").toLowerCase() +
-//                File.separator + fileId + File.separator + unicode;
-//        if(cameraType == 5 || cameraType == 6){
-//            path = ConstantFilePath.BUILD_MODEL_PATH + unicode;
-//            //下载zip包
-//            FileUtils.downLoadFromUrl(prefix + "/" + imgsName + "?m=" + System.currentTimeMillis(), imgsName, path + File.separator + "capture");
-//            //解压
-//            FileUtils.decompress(path + File.separator + "capture" + File.separator + imgsName,
-//                    path + File.separator + "capture") ;
-//            //删除压缩包
-//            FileUtil.delFile(path + File.separator + "capture" + File.separator + imgsName);
-//        }else if(cameraType == 14) {
-////                    + File.separator + "capture"
-//            path = ConstantFilePath.BUILD_MODEL_LASER_PATH + localPath;
-//            CreateObjUtil.ossUtilCp(ossPath,path + File.separator + "capture");
-//        } else{
-//            path = ConstantFilePath.BUILD_MODEL_PATH + localPath;
-//            CreateObjUtil.ossUtilCp(ossPath,path + File.separator + "capture");
-//        }
-//        return path;
-//    }
-//
-//    private void deleteCachesAndResult(String path){
-//        //判断是否计算过资源,若计算过删除缓存, 如果caches中存在_images文件或者目录,就删除掉,否则就删除除了images以外的所有文件和目录
-//        File caches = new File(path + File.separator + "caches");
-//        if(caches.exists()){
-//            for(File deleteFile : caches.listFiles()){
-//                if(new File(path + "_images").exists()){
-//                    if(deleteFile.isDirectory()){
-//                        FileUtils.delAllFile(deleteFile.getAbsolutePath());
-//                    }else {
-//                        FileUtils.deleteFile(deleteFile.getAbsolutePath());
-//                    }
-//                }else if(!deleteFile.getAbsolutePath().contains("images")){
-//                    if(deleteFile.isDirectory()){
-//                        FileUtils.delAllFile(deleteFile.getAbsolutePath());
-//                    }else {
-//                        FileUtils.deleteFile(deleteFile.getAbsolutePath());
-//                    }
-//                }
-//            }
-//        }
-//        //删除上一次计算出来的result目录
-//        if(new File(path + File.separator + "results").exists()){
-//            FileUtils.delAllFile(path + File.separator + "results");
-//        }
-//    }
-//
-//    private void handFail(String reason,BuildSceneMqMessage message){
-//        String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
-//        handFail(reason,serverPath,message.getSceneNum());
-//    }
-//
-//    private void handFail(String reason,String serverPath,String num){
-//        // 释放缓存锁
-//        redisUtil.del(RedisKey.SCENE_BUILDING + num);
-//        CompletableFuture.runAsync(() -> {
-//            try {
-//                String content = String.format(SysConstants.DINGTALK_MSG_PATTERN,environment, SysConstants.hostName,reason,num,serverPath,num,num);
-//                dingTalkSendUtils.sendActioncardMsgToDingRobot(content,"场景计算失败");
-//            } catch (ApiException | UnsupportedEncodingException | NoSuchAlgorithmException | InvalidKeyException apiException) {
-//                apiException.printStackTrace();
-//            }
-//        });
-//    }
-//}

+ 0 - 96
src/main/java/com/fdkankan/modeling/receiver/RabbitMqListener.java

@@ -1,6 +1,5 @@
 package com.fdkankan.modeling.receiver;
 
-import cn.hutool.core.exceptions.ExceptionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.ModelingBuildStatus;
@@ -18,15 +17,12 @@ import com.fdkankan.modeling.entity.BuildLog;
 import com.fdkankan.modeling.exception.BuildException;
 import com.fdkankan.modeling.service.IBuildLogService;
 import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
-import com.fdkankan.rabbitmq.bean.BuildSceneFailDTMqMessage;
 import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage;
 import com.fdkankan.rabbitmq.util.RabbitMqProducer;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
 import com.rabbitmq.client.Channel;
-import com.rabbitmq.client.Envelope;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.StopWatch;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.rabbit.annotation.Queue;
@@ -34,11 +30,9 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.amqp.support.AmqpHeaders;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.messaging.handler.annotation.Header;
 import org.springframework.stereotype.Component;
 import org.springframework.util.ObjectUtils;
-import org.springframework.web.client.RestTemplate;
 
 import java.io.File;
 import java.nio.charset.StandardCharsets;
@@ -62,19 +56,12 @@ public class RabbitMqListener {
 
     @Value("${queue.modeling.modeling-call}")
     private String queueModelingCall;
-    @Value("${queue.modeling.modeling-dt}")
-    private String queueModelingDt;
     @Value("${queue.modeling.modeling-post}")
     private String queueModelingPost;
 
     @Autowired
     private RedisUtil redisUtil;
 
-    private RestTemplate restTemplate = new RestTemplate();
-
-    @Value("${4dkk.laserService.host}")
-    private String laserHost;
-
     @Autowired
     private FYunFileServiceInterface fYunFileService;
 
@@ -273,9 +260,6 @@ public class RabbitMqListener {
             payStatus = 1;
 
             log.info("八目上完oss结束修改数据:"+num);
-
-            //计算成功  激光转台相机 同步 请求
-            this.syncLaserSystem(message);
         }
 
         buildSceneResult.setFileId(fileId);
@@ -307,7 +291,6 @@ public class RabbitMqListener {
                 String buildLogPath = String.format(UploadFilePath.BUILD_LOG_PATH, message.getSceneNum());
                 buildLog.setLogDetailPath(fYunFileConfig+ buildLogPath + "console.log");
             }
-//            buildLog.setCameraType(Integer.parseInt(buildSceneResult.getCameraType()));
             buildLogService.updateById(buildLog);
         } catch (Exception e) {
             log.error("计算后业务处理出错!", e);
@@ -315,11 +298,6 @@ public class RabbitMqListener {
             //发送计算结果mq
             buildSceneResult.setDuration(buildLog.getDuration());
             this.sendCallResult(message, buildSceneResult);
-            //如果是计算失败,需要发送钉钉
-            if(!ModelingBuildStatus.SUCCESS.equals(buildStatus)){
-                // TODO: 2022/1/25 测试阶段,先注释掉推送
-                this.sendDingTalkMq(buildStatus.message(), message);
-            }
         }
     }
 
@@ -406,68 +384,6 @@ public class RabbitMqListener {
         }
     }
 
-    private void syncLaserSystem(BuildSceneCallMessage message){
-        log.info("激光转台相机 同步 请求 ");
-        if(Integer.parseInt(message.getCameraType()) != 14)
-            return;
-
-        String sceneName = message.getSceneName();
-        String dataSource = message.getDataSource();
-        Long userId = message.getUserId();
-        String userName = message.getUserName();
-        String cameraName = message.getCameraName();
-        try {
-            String title = "";
-            if(StringUtils.isNotEmpty(sceneName)){
-                title = sceneName;
-            }
-//                        String dataSource = sceneProExt.getDataSource();
-            String jgPath = dataSource;
-            //创建目录
-            if(dataSource.lastIndexOf("/")!=-1){
-                jgPath = jgPath + "_laserData";
-            }else{
-                jgPath = jgPath.substring(0,jgPath.length()-1) + "_laserData";
-            }
-
-            FileUtils.createDir(jgPath+"/extras");
-
-            log.info("生成 激光相机目录 " + jgPath);
-            //生成data.json
-            JSONObject jgDataJson = new JSONObject();
-            jgDataJson.put("split_type", "SPLIT_V15");
-            jgDataJson.put("skybox_type", "SKYBOX_V5");
-            jgDataJson.put("extras", null);
-            FileUtils.writeFile(jgPath + File.separator + "data.json", jgDataJson.toString());
-
-            CreateObjUtil.cpfile(dataSource  + "/results/laserData/cover", jgPath+"/extras/");
-            CreateObjUtil.cplaserfile(dataSource  + "/results/laserData", jgPath+File.separator);
-
-            //激光相机
-            String url = laserHost+"/indoor/{sceneCode}/service/init?path="
-                + jgPath + File.separator + "laserData" + "&title="+ title
-                + "&childName=" + cameraName + "&createTime=" +  message.getSceneProCreateTime()
-                + "&snCode="+ cameraName;
-
-            if(userId!=null){
-                url = url + "&userId=" + userId;
-            }
-
-            if(StringUtils.isNotEmpty(userName)){
-                url = url + "&phone=" + userName;
-            }
-
-            url = url.replace("{sceneCode}",message.getSceneNum());
-            log.info("激光转台相机 同步 :" + url);
-            JSONObject hotListJson = JSONObject.parseObject(restTemplate.getForObject(url,String.class));
-            log.info("激光转台相机 同步结束 :" + hotListJson);
-        }catch (Exception e){
-            log.error("激光转台相机同步失败", e);
-            // TODO: 2022/1/25 测试阶段,先注释掉推送
-//            this.sendDingTalkMq("激光转台相机同步失败", message);
-        }
-    }
-
     private void deleteCachesAndResult(String path){
         //判断是否计算过资源,若计算过删除缓存, 如果caches中存在_images文件或者目录,就删除掉,否则就删除除了images以外的所有文件和目录
         File caches = new File(path + File.separator + "caches");
@@ -494,16 +410,4 @@ public class RabbitMqListener {
         }
     }
 
-    private void sendDingTalkMq(String reason,BuildSceneCallMessage message){
-        String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(message.getPrefix());
-        rabbitMqProducer.sendByWorkQueue(
-            queueModelingDt,
-            BuildSceneFailDTMqMessage.builder()
-            .hostName(SysConstants.hostName)
-            .reason(reason)
-            .num(message.getSceneNum())
-            .serverPath(serverPath)
-            .build());
-    }
-
 }