package com.fdkankan.scene.service.impl; 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.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; 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.fdkankan.common.constant.BuildStatus; import com.fdkankan.common.constant.ConstantFilePath; import com.fdkankan.common.constant.ConstantUrl; import com.fdkankan.common.constant.ExpiredStatus; import com.fdkankan.common.constant.PayStatus; import com.fdkankan.common.constant.SceneFrom; import com.fdkankan.common.constant.SceneResolution; import com.fdkankan.common.constant.SceneSource; import com.fdkankan.common.constant.SceneStatus; import com.fdkankan.common.constant.ServerCode; import com.fdkankan.common.constant.UploadFilePath; import com.fdkankan.common.response.ResultData; import com.fdkankan.common.util.FileUtil; import com.fdkankan.common.util.FileUtils; import com.fdkankan.common.util.MatrixToImageWriterUtil; import com.fdkankan.fyun.constant.StorageType; import com.fdkankan.fyun.oss.UploadToOssUtil; import com.fdkankan.platform.api.dto.CameraDetail; import com.fdkankan.platform.api.dto.UserIncrement; import com.fdkankan.platform.api.feign.PlatformGoodsClient; import com.fdkankan.platform.api.feign.PlatformUserClient; import com.fdkankan.push.PushMessageConfig; import com.fdkankan.push.PushMsgUtil; import com.fdkankan.rabbitmq.bean.BuildSceneResultMqMessage; import com.fdkankan.redis.constant.RedisKey; import com.fdkankan.redis.util.RedisUtil; import com.fdkankan.scene.bean.SceneJsonBean; import com.fdkankan.scene.entity.SceneEditControls; import com.fdkankan.scene.entity.SceneEditInfo; import com.fdkankan.scene.entity.SceneEditInfoExt; import com.fdkankan.scene.entity.SceneFileBuild; import com.fdkankan.scene.entity.ScenePlus; import com.fdkankan.scene.entity.ScenePlusExt; import com.fdkankan.scene.entity.ScenePro; import com.fdkankan.scene.entity.SceneProExt; import com.fdkankan.scene.service.IBuildSceneDTService; import com.fdkankan.scene.service.IBuildScenePostService; import com.fdkankan.scene.service.IBuildScenePreService; import com.fdkankan.scene.service.ISceneEditControlsService; import com.fdkankan.scene.service.ISceneEditInfoExtService; import com.fdkankan.scene.service.ISceneEditInfoService; import com.fdkankan.scene.service.ISceneFileBuildService; import com.fdkankan.scene.service.IScenePlusExtService; import com.fdkankan.scene.service.IScenePlusService; import com.fdkankan.scene.service.ISceneProExtService; import com.fdkankan.scene.service.ISceneProService; import com.fdkankan.scene.service.ISceneService; import com.fdkankan.scene.vo.SceneEditControlsVO; import com.sun.org.apache.bcel.internal.generic.RETURN; import java.io.File; import java.io.IOException; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; /** *

* TODO *

* * @author dengsixing * @since 2022/4/20 **/ @Slf4j @Service public class BuildScenePostServiceImpl implements IBuildScenePostService { @Value("${main.url}") private String mainUrl; @Value("${scene.pro.url}") private String sceneProUrl; @Value("${scene.pro.new.url}") private String sceneProNewUrl; @Value("${upload.type}") private String ossType; @Value("${oss.prefix.ali}") private String prefixAli; @Autowired ISceneService sceneService; @Autowired ISceneFileBuildService sceneFileBuildService; @Autowired ISceneProService sceneProService; @Autowired ISceneProExtService sceneProExtService; @Autowired PlatformGoodsClient platformGoodsClient; @Autowired PlatformUserClient platformUserClient; @Autowired ISceneEditInfoService sceneEditInfoService; @Autowired ISceneEditControlsService sceneEditControlsService; @Autowired UploadToOssUtil uploadToOssUtil; // @Autowired // IBuildScenePreService buildScenePreService; @Autowired RedisUtil redisUtil; @Autowired IScenePlusService scenePlusService; @Autowired IScenePlusExtService scenePlusExtService; @Autowired IBuildSceneDTService buildSceneDTService; @Autowired ISceneEditInfoExtService sceneEditInfoExtService; @Override public void buildScenePost(BuildSceneResultMqMessage message) { Integer cameraType = Integer.parseInt(message.getCameraType()); String sceneCode = message.getSceneCode(); String fileId = message.getFileId(); Integer payStatus = message.getPayStatus(); Long computeTime = message.getComputeTime(); Boolean buildSuccess = message.getBuildSuccess(); Integer videoVersion = message.getVideoVersion(); Map uploadFiles = message.getUploadFiles(); String path = message.getPath(); Integer pushChannel = message.getPushChannel(); String pushToken = message.getPushToken(); String prefix = message.getPrefix(); try { if(!buildSuccess){//建模失败,修改状态为失败状态 log.info("建模失败,修改状态为失败状态"); // TODO: 2022/3/21 plus版本稳定后删除------------------------start sceneService.updateStatus(sceneCode, SceneStatus.FAILD.code()); sceneProService.updateStatus(sceneCode, SceneStatus.FAILD.code()); // TODO: 2022/3/21 plus版本稳定后删除------------------------send scenePlusService.update( new LambdaUpdateWrapper() .set(ScenePlus::getSceneStatus, SceneStatus.FAILD.code()) .eq(ScenePlus::getNum, sceneCode)); SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId); if(Objects.nonNull(sceneFileBuild)){ sceneFileBuild.setBuildStatus(BuildStatus.fail.code()); sceneFileBuildService.updateById(sceneFileBuild); } return; } //建模成功走以下逻辑 log.info("cameraType:{}",cameraType); //计算场景消耗磁盘空间 long space = this.calUseSpace(uploadFiles); if(cameraType < 3){ // TODO: 2022/3/21 plus版本稳定后删除------------------------start sceneService.updateTime(sceneCode, space, payStatus); // TODO: 2022/3/21 plus版本稳定后删除------------------------send this.updateDb4Sm(sceneCode, space); uploadToOssUtil.uploadMulFiles(uploadFiles); return; } //读取计算结果文件生成videosJson JSONObject videosJson = this.getVideosJson(path, videoVersion, sceneCode, cameraType); //写入数据库 // TODO: 2022/3/21 plus版本稳定后删除------------------------start ScenePro scenePro = this.updateDbPro(sceneCode, space, payStatus, videosJson.toJSONString(), computeTime, fileId); SceneProExt sceneProExt = sceneProExtService.findBySceneProId(scenePro.getId()); // TODO: 2022/3/21 plus版本稳定后删除------------------------send ScenePlus scenePlus = this.updateDbPlus(sceneCode, space, payStatus, videosJson.toJSONString(), computeTime, fileId); ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId()); //变更容量,arrearCap为true时,代表容量不足 boolean arrearCap = this.updateSpace(scenePlus.getCameraId(), space, scenePlus.getId(), scenePro.getId()); //如果相机容量不足,需要把场景的paystatus改为容量不足状态 this.sealScene(arrearCap, scenePlus.getId(), scenePro.getId()); Object[] editInfoArr = this.updateEditInfo(scenePro, scenePlus); SceneEditInfo sceneEditInfo = (SceneEditInfo)editInfoArr[0]; SceneEditInfoExt sceneEditInfoExt = (SceneEditInfoExt)editInfoArr[1]; SceneEditControls sceneEditControls = (SceneEditControls)editInfoArr[2]; String sceneUrl = mainUrl + "/" + sceneProNewUrl; String outPathZh = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneCode+".png"; String outPathEn = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneCode+"_en.png"; //生成新的分享的二维码-中文版本 MatrixToImageWriterUtil.createQRCode(sceneUrl + sceneCode, outPathZh, false,null); //生成新的分享的二维码-英文版本 MatrixToImageWriterUtil.createQRCode(sceneUrl + sceneCode + "&lang=en", outPathEn, false, null); //上传二维码 uploadToOssUtil.upload(outPathZh, String.format(UploadFilePath.DOWNLOADS_QRCODE, sceneCode) + sceneCode + ".png"); uploadToOssUtil.upload(outPathEn, String.format(UploadFilePath.DOWNLOADS_QRCODE, sceneCode) + sceneCode + "_en.png"); Map newUploadFiles = this.uploadFileMapHandler(sceneCode, cameraType, uploadFiles); //上传计算结果中的caches/images和caches/videos this.uploadCaches(sceneCode, uploadFiles, path); //上传文件 uploadToOssUtil.uploadMulFiles(newUploadFiles); // TODO: 2022/3/11 同时上传一份到旧版本的目录,用于过渡期使用,待重构版本稳定后删除 uploadToOssUtil.uploadMulFiles(uploadFiles); //拷贝部分文件到编辑目录,用于用户编辑 this.copyToEditDir(sceneCode); //计算成功,发短信 this.sendSms(pushChannel,pushToken, cameraType, scenePro.getSceneName(), scenePro.getWebSite()); // //上传日志文件 // buildScenePreService.uploadLogFile(sceneCode, sceneProExt.getDataSource()); //写scene.json this.writeSceneJson(sceneCode, videosJson, sceneEditInfo, sceneEditInfoExt, sceneEditControls, scenePlus, scenePlusExt, arrearCap); log.info("场景计算结果处理结束,场景码:{}", message.getSceneCode()); }catch (Exception e){ log.error("场景计算结果处理出错", e); //发送钉钉 String serverPath = message.getPath().substring(0,message.getPath().lastIndexOf("/")+1).concat(prefix); // buildSceneDTService.handFail("场景计算结果处理出错", serverPath, sceneCode, BuildScenePreServiceImpl.hostName, BuildScenePreServiceImpl.contentExt); } } private void writeSceneJson(String num, JSONObject videosJson, SceneEditInfo sceneEditInfo,SceneEditInfoExt sceneEditInfoExt, SceneEditControls sceneEditControls, ScenePlus scenePlus, ScenePlusExt scenePlusExt, boolean arrearCap) throws Exception{ String sceneJsonKey = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "scene.json"; boolean exist = uploadToOssUtil.existKey(sceneJsonKey); //如果云端没有scene.json文件,生成一份 if(!exist){ SceneJsonBean sceneJson = new SceneJsonBean(); BeanUtil.copyProperties(sceneEditInfoExt, sceneJson); BeanUtil.copyProperties(sceneEditInfo, sceneJson); SceneEditControlsVO sceneEditControlsVO = BeanUtil.copyProperties(sceneEditControls, SceneEditControlsVO.class); sceneJson.setControls(sceneEditControlsVO); sceneJson.setNum(num); sceneJson.setCreateTime(scenePlus.getCreateTime()); sceneJson.setSceneResolution(scenePlusExt.getSceneResolution()); sceneJson.setSceneFrom(scenePlusExt.getSceneFrom()); sceneJson.setVideos(JSON.toJSONString(videosJson)); if(arrearCap) { sceneJson.setPayStatus(PayStatus.NO_CAPACITY.code()); } String sceneJsonStr = JSON.toJSONString(sceneJson); //上传sceneJson文件 uploadToOssUtil.upload(sceneJsonStr.getBytes(), sceneJsonKey); //scenejson写入缓存 redisUtil.set(String.format(RedisKey.SCENE_JSON, num), sceneJsonStr); } // TODO: 2022/4/21 plus版本稳定后删除------------------------------------------start String localSceneJsonPath = String.format(ConstantFilePath.SCENE_PATH_FORMAT, num); String localSceneJson = FileUtils.readFile(localSceneJsonPath); if(StrUtil.isNotEmpty(localSceneJson)){ JSONObject sceneJsonObject = JSON.parseObject(localSceneJson); sceneJsonObject.put("videos", videosJson); if(arrearCap) { sceneJsonObject.put("payStatus", PayStatus.NO_CAPACITY.code()); } FileUtils.writeFile(localSceneJsonPath, sceneJsonObject.toJSONString()); } // TODO: 2022/4/21 plus版本稳定后删除------------------------------------------end } private void sendSms(Integer pushChannel, String pushToken, int cameraType, String sceneName, String webSite){ log.info("推送消息,渠道是 {}, 手机token是 {}", pushChannel, pushToken); if(Objects.isNull(pushChannel) && StrUtil.isBlank(pushToken)) return; try{ if(StorageType.AWS.code().equals(ossType)){ PushMsgUtil .googlePushMsg(ConstantFilePath.BASE_PATH + "/refreshToken.json", pushToken, sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看", webSite); return; } PushMessageConfig demo = null; if(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(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(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(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(pushToken, "四维看看Pro", sceneName + "计算完成", "您上传的" + sceneName + "计算完成,点击查看", webSite); } } log.info("消息推送结束!"); }catch (Exception e){ log.error("推送消息失败:", e); } } 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 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 entry : map.entrySet()) { uploadToOssUtil.copyFiles(entry.getValue(), entry.getKey()); } } private void uploadCaches(String num, Map map, String path){ String sceneNumPAth = String.format("scene/%s", num); List 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 -> { if(str.endsWith(".jpg")){ map.put(str, str.replace(path, sceneNumPAth)); } }); } List 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 Map uploadFileMapHandler(String num, int cameraType, Map map) { if(CollUtil.isEmpty(map)){ return null; } String dataPath = String.format("data/data%s/", num); String imagePath = String.format("images/images%s/", num); String videoPath = String.format("video/video%s/", num); String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, num); String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, num); String videosViewPath = String.format(UploadFilePath.VIDEOS_VIEW_PATH, num); Map newMap = new HashMap<>(); for (String key : map.keySet()) { String value = map.get(key); if(value.contains(dataPath)){ newMap.put(key, value.replace(dataPath, dataViewPath)); } if(value.contains(imagePath)){ newMap.put(key, value.replace(imagePath, imgViewPath)); } if(value.contains(videoPath)){ newMap.put(key, value.replace(videoPath, videosViewPath)); } } return newMap; } private JSONObject getVideosJson(String path, Integer videoVersion, String projectNum, int cameraType) throws Exception { //读取videos_hdr_param.json, 保存点位视频的value Map 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(Objects.nonNull(videoVersion) && 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 Long calUseSpace(Map uploadFile) { File spaceFile = null; long space = 0L; for (String key : uploadFile.keySet()) { spaceFile = new File(key); if(spaceFile.exists()){ space += spaceFile.length(); } } return space; } private void sealScene(boolean arrearCap, Long scenePlusId, Long sceneProId){ if(!arrearCap){ return; } scenePlusService.update( new LambdaUpdateWrapper() .set(ScenePlus::getPayStatus, PayStatus.NO_CAPACITY) .eq(ScenePlus::getId, scenePlusId)); // TODO: 2022/3/22 plus版本稳定后删除---------------------------start sceneProService.update( new LambdaUpdateWrapper() .set(ScenePro::getPayStatus, PayStatus.NO_CAPACITY) .eq(ScenePro::getId, sceneProId)); // TODO: 2022/3/22 plus版本稳定后删除---------------------------end } /** *

双目场景更新数据库 *

* @author dengsixing * @date 2022/3/21 * @param num * @param space **/ private void updateDb4Sm(String num, long space){ List ScenePlusList = scenePlusService.list( new LambdaQueryWrapper() .select(ScenePlus::getId) .eq(ScenePlus::getNum, num)); if(CollUtil.isNotEmpty(ScenePlusList)) return ; List sceneIds = ScenePlusList.stream().map(scene -> { return scene.getId(); }).collect(Collectors.toList()); //更新场景创建时间 scenePlusService.update(new LambdaUpdateWrapper() .in(ScenePlus::getId, sceneIds) .set(ScenePlus::getCreateTime, Calendar.getInstance().getTime()) .set(ScenePlus::getSceneStatus, SceneStatus.NO_DISPLAY.code())); //更新使用容量 scenePlusExtService.update( new LambdaUpdateWrapper() .in(ScenePlusExt::getPlusId, sceneIds) .set(ScenePlusExt::getSpace, space)); } private ScenePro updateDbPro(String sceneCode, Long space, Integer payStatus, String videosJson, Long computeTime, String fileId) throws Exception{ ScenePro scenePro = sceneProService.findBySceneNum(sceneCode); sceneProService.updateTime(sceneCode, space, payStatus, videosJson, computeTime); SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId); if(sceneFileBuild != null){ sceneFileBuild.setBuildStatus(BuildStatus.success.code()); sceneFileBuildService.updateById(sceneFileBuild); } if(Objects.nonNull(scenePro)){ SceneProExt sceneProExt = sceneProExtService.findBySceneProId(scenePro.getId()); SceneSource sceneSource = SceneSource.get(sceneProExt.getSceneSource()); switch (sceneSource){ case BM: sceneProExt.setSceneResolution(SceneResolution.TILES_2K.code()); sceneProExt.setSceneFrom(SceneFrom.PRO.code()); break; case SM: sceneProExt.setSceneResolution(SceneResolution.TILES_1K.code()); sceneProExt.setSceneFrom(SceneFrom.LITE.code()); break; case ZT: sceneProExt.setSceneResolution(SceneResolution.TILES_4K.code()); sceneProExt.setSceneFrom(SceneFrom.MINION.code()); break; case JG: sceneProExt.setSceneResolution(SceneResolution.TILES_4K.code()); sceneProExt.setSceneFrom(SceneFrom.LASER.code()); break; } sceneProExtService.updateById(sceneProExt); } return scenePro; } private ScenePlus updateDbPlus(String num, Long space, Integer payStatus, String videosJson, Long computeTime, String fileId) throws Exception{ ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num); ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId()); List list = scenePlusService.list( new LambdaQueryWrapper() .select(ScenePlus::getId) .eq(ScenePlus::getNum, num)); if(scenePlus == null || CollUtil.isEmpty(list)) return null; //修改场景状态 空间 支付状态 计算时间 List scenePlusIds = list.stream().map(plus -> { return plus.getId(); }).collect(Collectors.toList()); scenePlusService.update(new LambdaUpdateWrapper() .in(ScenePlus::getId, scenePlusIds) .set(ScenePlus::getSceneStatus, SceneStatus.NO_DISPLAY.code()) .set(ScenePlus::getCreateTime, Calendar.getInstance().getTime()) .set(ScenePlus::getPayStatus, payStatus)); scenePlusExtService.update(new LambdaUpdateWrapper() .in(ScenePlusExt::getPlusId, scenePlusIds) .set(ScenePlusExt::getSpace, space) .set(ScenePlusExt::getComputeTime, computeTime) .set(ScenePlusExt::getVideos, videosJson)); SceneFileBuild sceneFileBuild = sceneFileBuildService.findByFileId(fileId); if(sceneFileBuild != null){ sceneFileBuild.setBuildStatus(BuildStatus.success.code()); sceneFileBuildService.updateById(sceneFileBuild); } SceneSource sceneSource = SceneSource.get(scenePlus.getSceneSource()); switch (sceneSource){ case BM: scenePlusExt.setSceneResolution(SceneResolution.TILES_2K.code()); scenePlusExt.setSceneFrom(SceneFrom.PRO.code()); break; case SM: scenePlusExt.setSceneResolution(SceneResolution.TILES_1K.code()); scenePlusExt.setSceneFrom(SceneFrom.LITE.code()); break; case ZT: scenePlusExt.setSceneResolution(SceneResolution.TILES_4K.code()); scenePlusExt.setSceneFrom(SceneFrom.MINION.code()); break; case JG: scenePlusExt.setSceneResolution(SceneResolution.TILES_4K.code()); scenePlusExt.setSceneFrom(SceneFrom.LASER.code()); break; } scenePlusExtService.updateById(scenePlusExt); return scenePlus; } private boolean updateSpace(Long cameraId, Long space, Long scenePlusId, Long sceneProId) throws Exception{ //更新相机使用用量 ResultData resultData = platformGoodsClient.updateCameraDetailByCameraIdAndSpace(cameraId, space); if(resultData.getCode() != ServerCode.SUCCESS.code()){ log.error("调用platform服务updateCameraDetailByCameraIdAndSpace失败,参数{},{}" ,cameraId, space); throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message()); } CameraDetail cameraDetail = JSONObject.parseObject(JSONObject.toJSONString(resultData.getData()), CameraDetail.class); ResultData resultData1 = platformUserClient.getUserIncrementByCameraId(cameraId); if(resultData1.getCode() != ServerCode.SUCCESS.code()){ log.error("调用platform服务getUserIncrementByCameraId失败,参数{}" ,cameraId); throw new Exception(ServerCode.FEIGN_REQUEST_FAILD.message()); } if( resultData1.getData() == null || resultData1.getData().getIsExpired() == ExpiredStatus.Expired.code()) { // 新上传的场景,如果总容量小于使用容量,则该大场景保留在临时存储空间30天 if (cameraDetail.getTotalSpace().compareTo(cameraDetail.getUsedSpace()) == -1){ return true; } } return false; } private Object[] updateEditInfo(ScenePro scenePro, ScenePlus scenePlus){ SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlus.getId()); SceneEditControls sceneEditControls = null; SceneEditInfoExt sceneEditInfoExt = null; if(sceneEditInfo == null){ sceneEditInfo = new SceneEditInfo(); sceneEditInfo.setScenePlusId(scenePlus.getId()); sceneEditInfo.setSceneProId(scenePro.getId()); sceneEditInfo.setDescription(scenePlus.getDescription()); sceneEditInfo.setTitle(scenePlus.getTitle()); sceneEditInfoService.save(sceneEditInfo); }else{ sceneEditControls = sceneEditControlsService.getBySceneEditId(sceneEditInfo.getId()); sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfo.getId()); } if(sceneEditControls == null){ sceneEditControls = new SceneEditControls(); sceneEditControls.setEditInfoId(sceneEditInfo.getId()); sceneEditControlsService.save(sceneEditControls); } if(sceneEditInfoExt == null){ sceneEditInfoExt = new SceneEditInfoExt(); sceneEditInfoExt.setScenePlusId(scenePlus.getId()); sceneEditInfoExt.setSceneProId(scenePro.getId()); sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId()); sceneEditInfoExtService.save(sceneEditInfoExt); } return new Object[]{sceneEditInfo, sceneEditInfoExt, sceneEditControls}; } }