package com.fdkankan.download.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.fdkankan.common.util.CmdUtils; import com.fdkankan.common.util.FileUtils; import com.fdkankan.download.constant.ScrbCanstant; import com.fdkankan.download.constant.UserEditDataType; import com.fdkankan.download.entity.*; import com.fdkankan.download.factory.UserEditData.UserEditDataHandler; import com.fdkankan.download.factory.UserEditData.UserEditDataHandlerFactory; import com.fdkankan.download.service.*; import com.fdkankan.fyun.face.FYunFileServiceInterface; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.File; import java.util.*; @Slf4j @Service public class ScrbServiceImpl implements IScrbService { @Resource private FYunFileServiceInterface fYunFileService; @Autowired private IScenePlusService scenePlusService; @Autowired private IScenePlusExtService scenePlusExtService; @Autowired private ISceneEditInfoService sceneEditInfoService; @Autowired private ISceneEditInfoExtService sceneEditInfoExtService; @Autowired private ISceneEditControlsService sceneEditControlsService; @Override public void syncScene(JSONObject param) throws Exception { String num = param.getString("num"); String basePath = "/mnt/scrb/"; String zipPath = basePath + num + ".zip"; String scenePath = basePath + "num/"; //下载zip包、解压 String key = param.getString("key"); fYunFileService.downloadFile(key, zipPath); ZipUtil.unzip(zipPath, basePath); //切图 String tilesPath = scenePath + "scene_view_data/" + num + "/images/tiles/"; String skyboxPath = tilesPath + "4k"; CmdUtils.callLine(ScrbCanstant.CmdCanstant.cut_image + skyboxPath + " " + tilesPath); //删除4k图 FileUtil.del(skyboxPath); //上传文件 List files = FileUtil.loopFiles(scenePath + "scene_view_data/"); files.stream().forEach(file -> { fYunFileService.uploadFile(file.getAbsolutePath(), file.getAbsolutePath().replace(scenePath, "")); }); files = FileUtil.loopFiles(scenePath + "scene_result_data/"); files.stream().forEach(file -> { fYunFileService.uploadFile(file.getAbsolutePath(), file.getAbsolutePath().replace(scenePath, "")); }); //插入数据库,如果是重推,不需要执行这部 ScenePlus scenePlus = scenePlusService.getByNum(num); if(Objects.isNull(scenePlus)){ String scenePlusStr = FileUtil.readUtf8String(scenePath + "scenePlus.txt"); scenePlus = JSON.parseObject(scenePlusStr, ScenePlus.class); scenePlus.setId(null); scenePlusService.save(scenePlus); String scenePlusExtStr = FileUtil.readUtf8String(scenePath + "scenePlusExt.txt"); ScenePlusExt scenePlusExt = JSON.parseObject(scenePlusExtStr, ScenePlusExt.class); scenePlusExt.setId(null); scenePlusExt.setPlusId(scenePlus.getId()); scenePlusExtService.save(scenePlusExt); String sceneEditInfoStr = FileUtil.readUtf8String(scenePath + "sceneEditInfo.txt"); SceneEditInfo sceneEditInfo = JSON.parseObject(sceneEditInfoStr, SceneEditInfo.class); sceneEditInfo.setId(null); sceneEditInfo.setScenePlusId(scenePlus.getId()); sceneEditInfoService.save(sceneEditInfo); String sceneEditInfoExtStr = FileUtil.readUtf8String(scenePath + "sceneEditInfoExt.txt"); SceneEditInfoExt sceneEditInfoExt = JSON.parseObject(sceneEditInfoExtStr, SceneEditInfoExt.class); sceneEditInfoExt.setId(null); sceneEditInfoExt.setScenePlusId(scenePlus.getId()); sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId()); sceneEditInfoExtService.save(sceneEditInfoExt); String sceneEditControlsStr = FileUtil.readUtf8String(scenePath + "sceneEditControls.txt"); SceneEditControls sceneEditControls = JSON.parseObject(sceneEditControlsStr, SceneEditControls.class); sceneEditControls.setId(null); sceneEditControls.setEditInfoId(sceneEditInfo.getId()); sceneEditControlsService.save(sceneEditControls); } //清除用户编辑业务数据 Set bizs = new HashSet<>(); bizs.add(UserEditDataType.BOX_MODEL.message()); bizs.add(UserEditDataType.FLOORPLAN.message()); bizs.add(UserEditDataType.FILTERS.message()); this.initUserEditData(num, bizs, null); } @Override public void initUserEditData(String num, Set bizs, Map> params) throws Exception { if(StrUtil.isEmpty(num) || CollUtil.isEmpty(bizs)){ return; } for (String biz : bizs) { UserEditDataHandler handler = UserEditDataHandlerFactory.getHandler(biz); handler.init(num, CollUtil.isEmpty(params) ? null : params.get(biz)); } } }