package com.fdkankan.scene.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.exceptions.ExceptionUtil; 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.fdkankan.common.constant.CommonStatus; import com.fdkankan.common.constant.ConstantFilePath; import com.fdkankan.common.constant.UploadFilePath; import com.fdkankan.common.util.FileUtil; import com.fdkankan.common.util.FileUtils; import com.fdkankan.common.util.MatrixToImageWriterUtil; import com.fdkankan.common.util.SceneUtil; import com.fdkankan.fyun.oss.UploadToOssUtil; import com.fdkankan.redis.constant.RedisKey; import com.fdkankan.redis.constant.RedisLockKey; import com.fdkankan.redis.util.RedisLockUtil; import com.fdkankan.redis.util.RedisUtil; import com.fdkankan.scene.bean.RequestSceneProV4; import com.fdkankan.scene.bean.SceneEditControlsBean; import com.fdkankan.scene.bean.SceneJsonBean; import com.fdkankan.scene.bean.SceneUpgradeProgressBean; import com.fdkankan.scene.constant.ProgressStatus; import com.fdkankan.scene.entity.SceneEditControls; import com.fdkankan.scene.entity.SceneEditInfo; import com.fdkankan.scene.entity.SceneEditInfoExt; import com.fdkankan.scene.entity.ScenePlusExt; import com.fdkankan.scene.entity.ScenePro; import com.fdkankan.scene.entity.SceneProEdit; import com.fdkankan.scene.entity.SceneRepairLog; import com.fdkankan.scene.service.ISceneEditControlsService; import com.fdkankan.scene.service.ISceneEditInfoExtService; import com.fdkankan.scene.service.ISceneEditInfoService; import com.fdkankan.scene.service.IScenePlusExtService; import com.fdkankan.scene.service.ISceneProEditService; import com.fdkankan.scene.service.ISceneProService; import com.fdkankan.scene.service.ISceneRepairLogService; import com.fdkankan.scene.service.ISceneUpgradeToV4Service; import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.atomic.AtomicInteger; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Service; /** *

* TODO *

* * @author dengsixing * @since 2022/4/21 **/ @RefreshScope @Slf4j @Service public class SceneUpgradeToV4Service implements ISceneUpgradeToV4Service { @Value("${main.url}") private String mainUrl; @Value("${scene.pro.new.url}") private String sceneProNewUrl; @Value("${oss.prefix.url}") private String ossUrlPrefix; @Value("${http.host.4dkankanMini}") private String fkankanMiniHost; @Value("${http.api-v4.upgradeToV4ResultSync}") private String URL_UPGRADE_TO_V4_RESULT_SYNC; @Autowired private RedisLockUtil redisLockUtil; @Autowired private ISceneEditInfoService sceneEditInfoService; @Autowired private ISceneEditInfoExtService sceneEditInfoExtService; @Autowired private ISceneProEditService sceneProEditService; @Autowired private ISceneEditControlsService sceneEditControlsService; @Autowired private ISceneRepairLogService sceneRepairLogService; @Value("${oss.bucket:4dkankan}") private String bucket; @Autowired private ISceneProService sceneProService; @Autowired private IScenePlusExtService scenePlusExtService; @Autowired private UploadToOssUtil uploadToOssUtil; @Autowired RedisUtil redisUtil; @Override public void upgrade(long sceneProId) throws Exception{ ScenePro scenePro = sceneProService.getById(sceneProId); //线程开始,正在执行线程数+1 String num = scenePro.getNum(); 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 voicePath = String.format("voice/voice%s/", num); String dataViewPath = String.format("scene_view_data/%s/data/", num); String imageViewPath = String.format("scene_view_data/%s/images/", num); String videoViewPath = String.format("scene_view_data/%s/video/", num); String voiceViewPath = String.format("scene_view_data/%s/voice/", num); long consumTime = 0; long startTime = Calendar.getInstance().getTimeInMillis(); SceneRepairLog sceneRepairLog = null; try { sceneRepairLog = sceneRepairLogService.getOne(new LambdaQueryWrapper().eq(SceneRepairLog::getNum, num)); if(sceneRepairLog == null){ sceneRepairLog = SceneRepairLog.builder() .num(scenePro.getNum()) .reason("") .state(0).build(); }else{ sceneRepairLog.setUpdateTime(Calendar.getInstance().getTime()); sceneRepairLog.setReason(""); sceneRepairLog.setState(0); } //写入日志 sceneRepairLogService.saveOrUpdate(sceneRepairLog); SceneProEdit sceneProEdit = sceneProEditService.getOne( new LambdaQueryWrapper() .eq(SceneProEdit::getProId, scenePro.getId())); String path = scenePro.getDataSource(); //生成热点json文件 Integer tags = this.createHotJson(dataPath, num); boolean existLoadingLogo = false; //生成编辑表 SceneEditInfo sceneEditInfo = sceneEditInfoService.getOne( new LambdaQueryWrapper() .eq(SceneEditInfo::getSceneProId, scenePro.getId())); SceneEditInfoExt sceneEditInfoExt = null; SceneEditControls sceneEditControls = null; if(sceneEditInfo == null){ List loadingLogoFile = uploadToOssUtil.listKeys(imagePath + "logo-main.png"); if(CollUtil.isNotEmpty(loadingLogoFile)){ existLoadingLogo = true; } sceneEditInfo = new SceneEditInfo(); sceneEditInfo.setSceneProId(scenePro.getId()); sceneEditInfo.setScenePlusId(scenePro.getId()); sceneEditInfo.setFloorLogo(sceneProEdit.getFloorLogo()); sceneEditInfo.setFloorLogoSize(sceneProEdit.getFloorLogoSize()); sceneEditInfo.setFloorLogoFile("user".equals(sceneProEdit.getFloorLogo()) ? "floorLogo-user.png" : null); //floorLogoImg.png -> floorLogo-user.png String music = null; if(!"noMusic".equals(sceneProEdit.getBgMusic()) && !"0".equals(sceneProEdit.getBgMusic())){ music = sceneProEdit.getBgMusic(); } if(StrUtil.isNotEmpty(music)){ if(music.equals("无")) music = ""; if(music.equals("欢快")) music = "01"; if(music.equals("空灵")) music = "02"; if(music.equals("节奏")) music = "03"; if(music.equals("怀旧")) music = "04"; if(music.equals("想念")) music = "05"; if(music.equals("复古")) music = "06"; if(music.equals("琴弦")) music = "07"; if(music.equals("愉快")) music = "08"; } sceneEditInfo.setMusic(music); //如果bgmusicname 不为空 ,MusicFile = BgMusicName if(StrUtil.isNotEmpty(sceneProEdit.getBgMusicName())){ sceneEditInfo.setMusicFile(sceneProEdit.getBgMusicName()); } //bgmusic=user, music=musicfile if("user".equals(sceneProEdit.getBgMusic())){ sceneEditInfo.setMusic(sceneEditInfo.getMusicFile()); } sceneEditInfo.setScenePassword(sceneProEdit.getSceneKey()); sceneEditInfo.setTitle(scenePro.getSceneName()); sceneEditInfo.setDescription(scenePro.getSceneDec()); sceneEditInfo.setFloorPlanUser(0); sceneEditInfo.setTags(tags); sceneEditInfo.setVersion(sceneProEdit.getVersion()); sceneEditInfo.setIsUploadObj(Integer.parseInt(CommonStatus.NO.code().toString())); sceneEditInfo.setFloorEditVer(sceneProEdit.getFloorEditVer()); sceneEditInfo.setFloorPublishVer(sceneProEdit.getFloorPublishVer()); // sceneEditInfo.setBoxVideos(sceneProEditExt.getOverlay()); sceneEditInfo.setEntry(sceneProEdit.getEntry()); sceneEditInfo.setLoadingLogo(existLoadingLogo ? "user" : null); sceneEditInfo.setLoadingLogoFile(existLoadingLogo ? "loadingLogo-user.png" : null); sceneEditInfo.setCreateTime(sceneProEdit.getCreateTime()); sceneEditInfo.setUpdateTime(sceneProEdit.getUpdateTime()); sceneEditInfoService.save(sceneEditInfo); sceneEditInfoExt = new SceneEditInfoExt(); sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId()); sceneEditInfoExt.setSceneProId(scenePro.getId()); sceneEditInfoExt.setScenePlusId(scenePro.getId()); sceneEditInfoExt.setFloorPlanAngle(sceneProEdit.getFloorPlanAngle() == null ? 0f : Float.parseFloat(sceneProEdit.getFloorPlanAngle())); sceneEditInfoExt.setFloorPlanCompass(this.getFloorPlanCompass(num)); sceneEditInfoExt.setVrNum(sceneProEdit.getVrNum()); sceneEditInfoExt.setCreateTime(sceneEditInfo.getCreateTime()); sceneEditInfoExt.setUpdateTime(sceneEditInfo.getUpdateTime()); sceneEditInfoExt.setTbStatus(sceneEditInfo.getTbStatus()); sceneEditInfoExtService.save(sceneEditInfoExt); sceneEditControls = new SceneEditControls(); sceneEditControls.setEditInfoId(sceneEditInfo.getId()); sceneEditControls.setShowMap(sceneProEdit.getMapVisi()); sceneEditControls.setShowLock(sceneProEdit.getNeedKey()); sceneEditControls.setShowTitle(Integer.valueOf(CommonStatus.YES.code())); sceneEditControls.setShowPanorama(sceneProEdit.getPanoVisi()); sceneEditControls.setShowDollhouse(sceneProEdit.getM3dVisi()); sceneEditControls.setShowFloorplan(sceneProEdit.getM2dVisi()); sceneEditControls.setShowVR(sceneProEdit.getVrVisi()); // sceneEditControls.setShowTour(sceneProEditExt.getTourVisi()); sceneEditControls.setShowRule(sceneProEdit.getRulerVisi()); sceneEditControls.setCreateTime(sceneEditInfo.getCreateTime()); sceneEditControls.setUpdateTime(sceneEditInfo.getUpdateTime()); sceneEditControls.setTbStatus(sceneEditInfo.getTbStatus()); sceneEditControlsService.save(sceneEditControls); }else{ sceneEditInfoExt = sceneEditInfoExtService.getOne( new LambdaQueryWrapper() .eq(SceneEditInfoExt::getEditInfoId, sceneEditInfo.getId())); sceneEditControls = sceneEditControlsService.getOne( new LambdaQueryWrapper() .eq(SceneEditControls::getEditInfoId, sceneEditInfo.getId())); sceneEditInfo.setTitle(scenePro.getSceneName()); sceneEditInfo.setVersion(sceneEditInfo.getVersion() + 1); sceneEditInfoService.updateById(sceneEditInfo); } //完成数据库操作更新进度条为10 this.updateProgress(num, 10, ProgressStatus.DO_DB.code()); //oss文件拷贝 AtomicInteger count = new AtomicInteger(0); AtomicInteger completeCnt = new AtomicInteger(0); List list = new ArrayList<>(); List dataKeys = uploadToOssUtil.listKeys(dataPath); List imageKeys = uploadToOssUtil.listKeys(imagePath); List videoKeys = uploadToOssUtil.listKeys(videoPath); List voiceKeys = uploadToOssUtil.listKeys(voicePath); if(CollUtil.isNotEmpty(dataKeys)) count.addAndGet(dataKeys.size()); if(CollUtil.isNotEmpty(imageKeys)) count.addAndGet(imageKeys.size()); if(CollUtil.isNotEmpty(videoKeys)) count.addAndGet(videoKeys.size()); if(CollUtil.isNotEmpty(voiceKeys)) count.addAndGet(voiceKeys.size()); this.copyFileOss(num, completeCnt, count, dataKeys, dataPath, dataViewPath); this.copyFileOss(num, completeCnt, count, imageKeys, imagePath, imageViewPath); this.copyFileOss(num, completeCnt, count, videoKeys, videoPath, videoViewPath); this.copyFileOss(num, completeCnt, count, voiceKeys, voicePath, voiceViewPath); //将全景图缓存到缓存目录 List imagesList = cn.hutool.core.io.FileUtil.listFileNames(path + "/caches/images"); String cachedImagesPath = String.format(ConstantFilePath.SCENE_CACHE_IMAGES, num); //先清除旧的全景图 cn.hutool.core.io.FileUtil.del(cachedImagesPath); String visionPath = path + "/results/vision.txt"; List panoramaImageList = SceneUtil.getPanoramaImageList(visionPath); imagesList.stream().forEach(fileName -> { if(panoramaImageList.contains(fileName)){ String srcPath = path + "/caches/images/" + fileName; String targetPath = cachedImagesPath + fileName; log.info("源文件:{}, 目标文件:{}", srcPath, targetPath); cn.hutool.core.io.FileUtil.copy(srcPath, targetPath, true); } }); //户型图上传 String userEditPath = UploadFilePath.USER_EDIT_PATH + "floor-cad-%s.%s"; String userViewPath = UploadFilePath.USER_VIEW_PATH + "floor-cad-%s.%s"; String floorCadPath = path + "/results/floorplan_cad"; List floorCadList = FileUtil.getFileList(floorCadPath); if(CollUtil.isNotEmpty(floorCadList)){ floorCadList.stream().forEach(str->{ String substring = str.substring(str.lastIndexOf(File.separator) + 1); String[] arr = substring.split("floor"); String[] arr2 = arr[1].split("\\."); uploadToOssUtil.upload(str, String.format(userEditPath, num, arr2[0], arr2[1])); uploadToOssUtil.upload(str, String.format(userViewPath, num, arr2[0], arr2[1])); }); } //拷贝模型文件到用户编辑目录 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 map2 = new HashMap<>(); map2.put(editImagesPath + "vision.modeldata", viewImagesPath + "vision.modeldata"); map2.put(editImagesPath + "vision2.modeldata", viewImagesPath + "vision2.modeldata"); map2.put(editDataPath + "floorplan_cad.json", viewDataPath + "floorplan_cad.json"); for (Entry entry : map2.entrySet()) { uploadToOssUtil.copyFiles(entry.getValue(), entry.getKey()); } //完成数据库操作更新进度条为10 this.updateProgress(num, 90, ProgressStatus.DO_OSS.code()); //生成二维码 String sceneUrl = mainUrl + "/" + sceneProNewUrl; String outPathZh = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/" + num + ".png"; String outPathEn = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/" + num + "_en.png"; MatrixToImageWriterUtil.createQRCode(sceneUrl + num, outPathZh, false,null); MatrixToImageWriterUtil.createQRCode(sceneUrl + num + "&lang=en", outPathEn, false, null); uploadToOssUtil.upload(outPathZh, String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + num + ".png"); uploadToOssUtil.upload(outPathEn, String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + num + "_en.png"); //根据编辑表 上传用户目录 包括编辑目录 查看目录 String editUsersPath = String.format(UploadFilePath.USER_EDIT_PATH, num); String viewUsersPath = String.format(UploadFilePath.USER_VIEW_PATH, num); if("user".equals(sceneProEdit.getFloorLogo())){ uploadToOssUtil.copyFiles(imagePath + "floorLogoImg.png", editUsersPath + "floorLogo-user.png"); uploadToOssUtil.copyFiles(imagePath + "floorLogoImg.png", viewUsersPath + "floorLogo-user.png"); } if("user".equals(sceneProEdit.getBgMusic())){ uploadToOssUtil.copyFiles(imagePath + sceneProEdit.getBgMusicName(), editUsersPath + "music-user.mp3"); uploadToOssUtil.copyFiles(imagePath + sceneProEdit.getBgMusicName(), viewUsersPath + "music-user.mp3"); } if(existLoadingLogo){ uploadToOssUtil.copyFiles(imagePath + "logo-main.png", editUsersPath + "loadingLogo-user.png"); uploadToOssUtil.copyFiles(imagePath + "logo-main.png", viewUsersPath + "loadingLogo-user.png"); } ScenePlusExt scenePlusExt = scenePlusExtService.getOne( new LambdaQueryWrapper() .eq(ScenePlusExt::getPlusId, scenePro.getId())); if(StrUtil.isNotEmpty(scenePro.getThumb()) && scenePro.getThumb().contains(imagePath)){ String thumbUrl = null; if(scenePro.getThumb().contains("thumbSmallImg.jpg")){ uploadToOssUtil.copyFiles(imagePath + "thumbBigImg.jpg", editUsersPath + "thumb-1k.jpg"); uploadToOssUtil.copyFiles(imagePath + "thumbBigImg.jpg", viewUsersPath + "thumb-1k.jpg"); uploadToOssUtil.copyFiles(imagePath + "thumbBigImg.jpg", editUsersPath + "thumb-2k.jpg"); uploadToOssUtil.copyFiles(imagePath + "thumbBigImg.jpg", viewUsersPath + "thumb-2k.jpg"); uploadToOssUtil.copyFiles(imagePath + "thumbSmallImg.jpg", editUsersPath + "thumb-128.jpg"); uploadToOssUtil.copyFiles(imagePath + "thumbSmallImg.jpg", viewUsersPath + "thumb-128.jpg"); thumbUrl = this.ossUrlPrefix + String.format(UploadFilePath.USER_VIEW_PATH, num) + "thumb-128.jpg"; }else{ thumbUrl = scenePro.getThumb().replace(imagePath, viewImagesPath); } String webSite = sceneUrl + num; scenePro.setThumb(thumbUrl); scenePro.setWebSite(webSite); sceneProService.updateById(scenePro); scenePlusExt.setThumb(thumbUrl); scenePlusExt.setWebSite(webSite); scenePlusExtService.updateById(scenePlusExt); } if(StrUtil.isNotEmpty(sceneEditInfo.getBoxVideos())){ JSONArray boxVideoArr = JSON.parseArray(sceneEditInfo.getBoxVideos()); for(int i = 0; i < boxVideoArr.size(); i++){ JSONObject boxVideo = boxVideoArr.getJSONObject(i); String sid = boxVideo.getString("sid"); uploadToOssUtil.copyFiles(imagePath + "overlay" + sid + ".mp4", editUsersPath + sid + ".mp4"); uploadToOssUtil.copyFiles(imagePath + "overlay" + sid + ".mp4", viewUsersPath + sid + ".mp4"); uploadToOssUtil.copyFiles(imagePath + "overlay" + sid + ".flv", editUsersPath + sid + ".flv"); uploadToOssUtil.copyFiles(imagePath + "overlay" + sid + ".flv", viewUsersPath + sid + ".flv"); } } //本地mapping文件上传 String mappingOssPath = String.format(UploadFilePath.DATA_EDIT_PATH, num) + "mapping"; String mappingPath = "/mnt/4Dkankan/scene/data/data" + num + "/mapping"; List mappingList = FileUtils.list(new File(mappingPath)); if(CollUtil.isNotEmpty(mappingList)){ mappingList.parallelStream().forEach(mapping->{ uploadToOssUtil.upload(mapping, mapping.replace(mappingPath, mappingOssPath)); }); } //生成scene.json // 生成新的scene.json,上传至scene_view_data//data SceneJsonBean sceneJson = new SceneJsonBean(); BeanUtil.copyProperties(sceneEditInfoExt, sceneJson); BeanUtil.copyProperties(sceneEditInfo, sceneJson); SceneEditControlsBean sceneEditControlsBean = BeanUtil.copyProperties(sceneEditControls, SceneEditControlsBean.class); sceneJson.setControls(sceneEditControlsBean); sceneJson.setNum(num); sceneJson.setCreateTime(scenePro.getCreateTime()); sceneJson.setSceneResolution(scenePlusExt.getSceneResolution()); sceneJson.setSceneFrom(scenePlusExt.getSceneFrom()); sceneJson.setSceneKind(scenePlusExt.getSceneKind()); if(StrUtil.isNotEmpty(scenePro.getVideos())){ sceneJson.setVideos(JSON.parseObject(scenePro.getVideos())); } sceneJson.setVersion(sceneEditInfo.getVersion()); //上传sceneJson文件 String sceneJsonPath = String.format(UploadFilePath.DATA_VIEW_PATH+"scene.json", num); uploadToOssUtil.upload(JSON.toJSONBytes(sceneJson), sceneJsonPath); redisUtil.del(String.format(RedisKey.SCENE_JSON, num)); //迁移耗时 consumTime = Calendar.getInstance().getTimeInMillis() - startTime; //记录日志 sceneRepairLog.setUpdateTime(Calendar.getInstance().getTime()); sceneRepairLog.setState(1); sceneRepairLog.setConsumTime(consumTime); sceneRepairLogService.updateById(sceneRepairLog); //处理scenepro的升级状态和协作关系 sceneProService.upgradeToV4ResultSync( RequestSceneProV4.builder() .id(sceneProId) .webSite(scenePro.getWebSite()) .build()); this.updateProgress(num, 100, ProgressStatus.SUCCESS.code()); }catch (Exception e){ log.error(e.getMessage(), e); //完成数据库操作更新进度条为0,状态失败 this.updateProgress(num, 0, ProgressStatus.FAIL.code()); //记录日志 consumTime = Calendar.getInstance().getTimeInMillis() - startTime; sceneRepairLog.setUpdateTime(Calendar.getInstance().getTime()); sceneRepairLog.setState(2); sceneRepairLog.setReason(ExceptionUtil.stacktraceToString(e)); sceneRepairLog.setConsumTime(consumTime); sceneRepairLogService.updateById(sceneRepairLog); } finally { String lockKey = String.format(RedisLockKey.LOCK_SCENE_UPGRADE_V4, num); redisUtil.del(lockKey); } } private void copyFileOss(String num, AtomicInteger completeCnt, AtomicInteger count, List keyList, String sourcePath, String targetPah){ if(CollUtil.isEmpty(keyList)) return; keyList.parallelStream().forEach(key->{ try { String targetKey = null; if(key.contains(sourcePath)){ targetKey = key.replace(sourcePath, targetPah); } uploadToOssUtil.copyObject(key, targetKey); this.updateProgress(num, 10 + (new BigDecimal(completeCnt.incrementAndGet()) .divide(new BigDecimal(count.get()), 6, BigDecimal.ROUND_HALF_UP) .multiply(new BigDecimal(0.7)) .multiply(new BigDecimal(100)) .setScale(0, RoundingMode.UP) .intValue()), ProgressStatus.DO_OSS.code() ); } catch (IOException e) { log.error("文件拷贝出错,key:{}", key); } }); } private Integer createHotJson(String dataPath, String num) throws IOException { Integer tags = Integer.valueOf(CommonStatus.NO.code()); // Set icons = new HashSet<>(); // String hotJson = uploadToOssUtil.getObjectContent("4dkankan", dataPath + "hot.json"); // JSONArray newHotArr = new JSONArray(); // if(StrUtil.isNotBlank(hotJson)){ // JSONArray hotArr = JSON.parseArray(hotJson); // if(hotArr.size() > 0){ // tags = Integer.valueOf(CommonStatus.YES.code()); // for(int i=0; i < hotArr.size(); i++){ // JSONObject oldHot = (JSONObject)hotArr.get(i); // String styleId = oldHot.getString("styleId"); // // JSONObject newHot = new JSONObject(); // newHot.put("createTime", Calendar.getInstance().getTimeInMillis() + i); // newHot.put("icon", styleId); // // newHot.put("position", oldHot.getJSONObject("position")); // // JSONObject media = new JSONObject(); // newHot.put("media", media); // JSONObject fileName = oldHot.getJSONObject("fileName"); // Set> entries = null; // if(fileName != null){ // entries = fileName.entrySet(); // } // if(CollUtil.isNotEmpty(entries)){ // for (Entry entry : entries) { // JSONArray arr = new JSONArray(); // media.put(entry.getKey(), arr); // JSONObject o = new JSONObject(); // arr.add(o); // String fileSrc = ((String) entry.getValue()); // o.put("src", oldHot.getString("sid") + fileSrc.substring(fileSrc.lastIndexOf("."))); // o.put("name", fileSrc); // } // } // newHot.put("type", oldHot.getString("mediaType")); // newHot.put("title", oldHot.getString("label")); // newHot.put("content", oldHot.getString("description")); // newHot.put("sid", oldHot.getString("sid")); // // if(StrUtil.isNotBlank(styleId)){ // icons.add(styleId); // } // // } // } // String hotJsonEditPath = String.format(UploadFilePath.USER_EDIT_PATH, num) + "hot.json"; // String hotJsonViewPath = String.format(UploadFilePath.USER_VIEW_PATH, num) + "hot.json"; // uploadToOssUtil.upload(hotJson.getBytes(), hotJsonEditPath); // uploadToOssUtil.upload(hotJson.getBytes(), hotJsonViewPath); // // //写到本地文件 // JSONObject localObject = new JSONObject(); // localObject.put("tags", newHotArr); // localObject.put("icons", icons); // String hotJsonPath = String.format(ConstantFilePath.SCENE_USER_PATH_V4, num) + "hot.json"; // FileUtils.writeFile(hotJsonPath, localObject.toJSONString()); // } return tags; } private Float getFloorPlanCompass(String num){ String objectContent = uploadToOssUtil.getObjectContent(bucket, "data/data" + num + "/houst_floor.json"); if(StrUtil.isEmpty(objectContent)){ return null; } JSONObject jsonObject = JSON.parseObject(objectContent); JSONArray floors = jsonObject.getJSONArray("floors"); if(CollUtil.isEmpty(floors)){ return null; } Object o = floors.get(0); JSONObject object = (JSONObject)o; return object.getFloat("dire"); } /** * 更新进度条 * @param num * @param progress * @param status */ private void updateProgress(String num, int progress, int status){ String key = String.format(RedisKey.scene_upgrade_progress_num, num); redisUtil.set(key, JSON.toJSONString( SceneUpgradeProgressBean.builder() .num(num).status(status) .progress(progress).build())); } }