123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668 |
- package com.fdkankan.contro.service.impl;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.util.StrUtil;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.fdkankan.common.constant.*;
- import com.fdkankan.common.exception.BusinessException;
- import com.fdkankan.common.util.DateExtUtil;
- import com.fdkankan.common.util.FileUtils;
- import com.fdkankan.common.util.SnowflakeIdGenerator;
- import com.fdkankan.contro.constant.RedisConstants;
- import com.fdkankan.contro.entity.*;
- import com.fdkankan.contro.mapper.ISceneFileBuildMapper;
- import com.fdkankan.contro.service.*;
- import com.fdkankan.contro.vo.ResponseSceneFile;
- import com.fdkankan.contro.vo.ScenePlusVO;
- import com.fdkankan.fyun.config.FYunFileConfig;
- import com.fdkankan.fyun.face.FYunFileServiceInterface;
- import com.fdkankan.model.constants.ConstantFilePath;
- import com.fdkankan.model.constants.UploadFilePath;
- import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
- import com.fdkankan.rabbitmq.util.RabbitMqProducer;
- import com.fdkankan.redis.util.RedisUtil;
- import com.fdkankan.web.response.ResultData;
- import com.fdkankan.web.util.RSAEncrypt;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.codec.binary.Base64;
- 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;
- import org.springframework.util.ObjectUtils;
- import java.io.File;
- import java.io.IOException;
- import java.nio.charset.StandardCharsets;
- import java.util.Calendar;
- import java.util.List;
- import java.util.Objects;
- /**
- * <p>
- * 场景文件建模表 服务实现类
- * </p>
- *
- * @author dengsixing
- * @since 2021-12-23
- */
- @Slf4j
- @Service
- public class SceneFileBuildServiceImpl extends ServiceImpl<ISceneFileBuildMapper, SceneFileBuild> implements ISceneFileBuildService {
- private static final String SPLICE = "#";
- @Value("${main.url}")
- private String mainUrl;
- @Value("${scene.pro.new.url}")
- private String sceneProNewUrl;
- @Value("${queue.modeling.modeling-pre}")
- private String queueModelingPre;
- @Autowired
- private RedisUtil redisUtil;
- @Autowired
- private IScenePlusExtService scenePlusExtService;
- @Autowired
- private IScene3dNumService scene3dNumService;
- @Autowired
- private IScenePlusService scenePlusService;
- @Autowired
- private RabbitMqProducer rabbitMqProducer;
- @Autowired
- private ISceneEditInfoService sceneEditInfoService;
- @Autowired
- private ISceneEditControlsService sceneEditControlsService;
- @Autowired
- private ISceneEditInfoExtService sceneEditInfoExtService;
- @Autowired
- private ISceneCooperationService sceneCooperationService;
- @Autowired
- private ISceneResourceCameraService sceneResourceCameraService;
- @Autowired
- private ISceneResourceCooperationService sceneResourceCooperationService;
- @Autowired
- private ICameraService cameraService;
- @Autowired
- private ICameraDetailService cameraDetailService;
- @Autowired
- private IUserService userService;
- @Autowired
- private ICompanyService companyService;
- @Autowired
- private FYunFileServiceInterface fYunFileService;
- @Autowired
- private FYunFileConfig fYunFileConfig;
- @Override
- public SceneFileBuild findByFileId(String fileId) {
- List<SceneFileBuild> list = this.list(new LambdaQueryWrapper<SceneFileBuild>().eq(SceneFileBuild::getFileId, fileId)
- .orderByDesc(SceneFileBuild::getId));
- if(CollUtil.isEmpty(list)){
- return null;
- }
- return list.get(0);
- }
- @Override
- public ResponseSceneFile preUpload(String params) throws Exception {
- log.info("preUpload-params: "+params);
- if (StrUtil.isEmpty(params)){
- throw new BusinessException(ErrorCode.PARAM_REQUIRED);
- }
- params = params.replaceAll("%2B", "+");
- Base64 base64 = new Base64();
- String cipher = params;
- // 私钥解密过程
- byte[] res = RSAEncrypt.decrypt(RSAEncrypt.loadPrivateKeyByStr(RSAEncrypt.loadPrivateKeyByFile()),
- base64.decode(cipher));
- String restr = new String(res, "UTF-8");
- log.debug("preUpload-params解密结果:" + restr);
- String[] strArr = restr.split(SPLICE);
- if (strArr.length != 5) {
- throw new BusinessException(ErrorCode.PARAM_REQUIRED);
- }
- String mac = strArr[0];
- String totalPicNum = strArr[1];
- String chunks = strArr[2];
- String folderName = strArr[3];
- if (StrUtil.isEmpty(mac)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5044);
- }
- if (totalPicNum == null){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5045);
- }
- if (chunks == null){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5046);
- }
- if (folderName == null){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5047);
- }
- log.info("mac:{} 准备上传文件,folderName:{}", mac, folderName);
- ResponseSceneFile responseSceneFile = new ResponseSceneFile();
- // 检测是否有生成
- String fileId = redisUtil.get(String.format(RedisConstants.FOLDER_FILEID_BUILD, folderName));
- if (!ObjectUtils.isEmpty(fileId)) {
- responseSceneFile.setFileId(fileId);
- return responseSceneFile;
- }
- SceneFileBuild sceneFileBuild = this.findByUnicode(folderName);
- if (sceneFileBuild != null) {
- fileId = sceneFileBuild.getFileId();
- responseSceneFile.setFileId(fileId);
- redisUtil.set(String.format(RedisConstants.FOLDER_FILEID_BUILD, folderName), fileId, 2 * 24 * 60 * 60);
- return responseSceneFile;
- }
- // 加锁
- long incr = redisUtil.incr(String.format(RedisConstants.FOLDER_LOCK_BUILD, folderName), 1);
- if (incr > 1) {
- throw new BusinessException(ErrorCode.FAILURE_CODE_5052);
- }
- redisUtil.expire(String.format(RedisConstants.FOLDER_LOCK_BUILD, folderName), 120);
- log.info("开始新生成build数据");
- fileId = new SnowflakeIdGenerator(0, 0).nextId() + "";
- log.info("新生成build数据,{}", fileId);
- sceneFileBuild = new SceneFileBuild();
- sceneFileBuild.setChildName(mac);
- sceneFileBuild.setFileId(fileId);
- sceneFileBuild.setUnicode(folderName);
- sceneFileBuild.setTotalPicNum(Integer.valueOf(totalPicNum));
- sceneFileBuild.setChunks(Integer.valueOf(chunks));
- this.save(sceneFileBuild);
- redisUtil.set(String.format(RedisConstants.FOLDER_FILEID_BUILD, folderName), fileId, 2 * 24 * 60 * 60);
- redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName, 2 * 24 * 60 * 60);
- responseSceneFile.setFileId(fileId);
- return responseSceneFile;
- }
- public SceneFileBuild findByUnicode(String unicode) {
- List<SceneFileBuild> list = this.list(new QueryWrapper<SceneFileBuild>()
- .eq("unicode", unicode)
- .orderByDesc("id"));
- if(CollUtil.isEmpty(list))
- return null;
- return list.get(0);
- }
- public ScenePlusVO buildScene(String fileId, String prefix,JSONObject jsonObject,String buildType,long cameraType) throws Exception{
- //调用createScene方法生成scene数据和加入算法队列
- String sceneNum = "";
- String cameraName = jsonObject.getJSONObject("cam").getString("uuid");
- String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime");
- Camera camera = cameraService.getByChildName(cameraName);
- if (camera == null) {
- throw new BusinessException(CameraConstant.FAILURE_6003);
- }
- CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
- if (cameraDetail == null) {
- log.error("该相机详情不存在:" + cameraName);
- throw new BusinessException(CameraConstant.FAILURE_6003);
- }
- //查看场景中的文件目录是否有改文件id,有则重新计算改场景,无则新建场景
- ScenePlus scenePlus = scenePlusService.getByFileId("/" + fileId + "/");
- int rebuild = 1;
- if (ObjectUtils.isEmpty(scenePlus)) {
- sceneNum = scene3dNumService.generateSceneNum(cameraDetail.getType());
- rebuild = 0;
- } else {
- sceneNum = scenePlus.getNum();
- if (scenePlus.getSceneStatus().equals(SceneStatus.wait.code())) {
- log.info(scenePlus.getNum() + ":场景处于计算中,不能再计算");
- return null;
- }
- }
- if (sceneNum == null) {
- log.error("大场景序号为空:" + sceneNum);
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, sceneNum);
- String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, sceneNum);
- String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, sceneNum);
- String userName = null;
- if (!ObjectUtils.isEmpty(cameraDetail.getUserId())) {
- SSOUser user = userService.getSSOUserByUserId(cameraDetail.getUserId());
- userName = ObjectUtils.isEmpty(user) ? null : user.getUserName();
- }
- String icon = null;
- if (!ObjectUtils.isEmpty(jsonObject.getString("icon"))) {
- fYunFileService.copyFileInBucket(ConstantFilePath.OSS_PREFIX + prefix + jsonObject.getString("icon"),imgViewPath + jsonObject.getString("icon"));
- icon = fYunFileConfig.getHost() + imgViewPath + jsonObject.getString("icon");
- log.info("上传icon成功....");
- }
- JSONObject firmwareVersion = new JSONObject();
- if (!ObjectUtils.isEmpty(jsonObject.getString("camSoftwareVersion"))) {
- firmwareVersion.put("camSoftwareVersion", jsonObject.getString("camSoftwareVersion"));
- }
- if (!ObjectUtils.isEmpty(jsonObject.getString("version"))) {
- firmwareVersion.put("version", jsonObject.getString("version"));
- }
- String sceneUrl = mainUrl + "/" + sceneProNewUrl;
- //重算的场景,先移除该场景对应的容量
- if (rebuild == 1) {
- scenePlusService.resetSpace(sceneNum);
- //删除oss的houst_floor.json(国际版可能会卡住)
- fYunFileService.deleteFile(dataViewPath + "houst_floor.json");
- } else {
- //上传log-main.png
- fYunFileService.uploadFile(ConstantFilePath.LOGO_PATH + "logo-main.png", imgViewPath + "logo-main.png");
- fYunFileService.uploadFile(ConstantFilePath.LOGO_PATH + "logo-main-en.png", imgViewPath + "logo-main-en.png");
- }
- String algorithm = jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam";
- ScenePlusVO scenePlusVO = this.createScenePlus(sceneNum, camera.getId(), camera.getChildName(), jsonObject.getString("creator"),
- jsonObject.getString("pwd"), unicode,cameraType, fileId, icon, cameraDetail.getUserId(), userName,algorithm,
- jsonObject.getJSONArray("points").size(), jsonObject.getString("name"), jsonObject.getString("info"),
- jsonObject.getInteger("scenetype"), jsonObject.getString("gps"), rebuild,
- jsonObject.getInteger("resolution"), firmwareVersion.toString(), sceneUrl, buildType, cameraDetail.getCooperationUser());
- if (Objects.nonNull(scenePlusVO)) {
- JSONObject statusJson = new JSONObject();
- //临时将-2改成1,app还没完全更新
- statusJson.put("status", scenePlusVO.getSceneStatus() == -2 ? 1 : scenePlusVO.getSceneStatus());
- statusJson.put("webSite", scenePlusVO.getWebSite());
- statusJson.put("sceneNum", scenePlusVO.getNum());
- statusJson.put("thumb", scenePlusVO.getThumb());
- statusJson.put("payStatus", 0);
- statusJson.put("recStatus", 'A');
- FileUtils.writeFile(localDataPath + "status.json", statusJson.toString());
- fYunFileService.uploadFile(localDataPath + "status.json", dataViewPath + "status.json");
- }
- BuildSceneCallMessage mqMessage = getBuildSceneMqMessage(sceneNum, cameraType, algorithm, jsonObject.getInteger("resolution"), buildType,
- scenePlusVO.getDataSource());
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, mqMessage);
- return scenePlusVO;
- }
- @Override
- public ResultData uploadSuccessBuild(String params) throws Exception {
- log.info("uploadSuccessBuild-params: " + params);
- if (StringUtils.isEmpty(params)) {
- throw new BusinessException(ErrorCode.PARAM_REQUIRED);
- }
- params = params.replaceAll("%2B", "+");
- params = params.replaceAll(" ", "+");
- Base64 base64 = new Base64();
- String cipher = params;
- // 私钥解密过程
- byte[] res = RSAEncrypt.decrypt(RSAEncrypt.loadPrivateKeyByStr(RSAEncrypt.loadPrivateKeyByFile()), base64.decode(cipher));
- String restr = new String(res, "UTF-8");
- log.info("uploadSuccessBuild-params解密结果:" + restr);
- String[] strArr = restr.split(SPLICE);
- if (strArr.length != 3) {
- throw new BusinessException(ErrorCode.PARAM_REQUIRED);
- }
- String mac = strArr[0];
- String fileId = strArr[1];
- String folderName = redisUtil.get(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId));
- if(StringUtils.isEmpty(folderName)){
- SceneFileBuild fileBuild = findByFileId(fileId);
- if(ObjectUtils.isEmpty(fileBuild)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
- }
- folderName = fileBuild.getUnicode();
- redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName,2 * 24 * 60 * 60);
- }
- StringBuilder prefixBuffer = new StringBuilder(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator);
- String buildType = "V2";
- Long cameraType = 10L;
- JSONObject fdageJson = JSONObject.parseObject(fYunFileService.getFileContent(ConstantFilePath.OSS_PREFIX + prefixBuffer + "data.fdage"));
- if(ObjectUtils.isEmpty(fdageJson)){
- log.info("data.fdage文件不存在");
- throw new BusinessException(CameraConstant.FAILURE_6009);
- }
- //根据videoVersion判断是V2还是V3版本的算法和页面
- if (fdageJson.containsKey("videoVersion") && StrUtil.isNotEmpty(fdageJson.getString("videoVersion"))) {
- if (fdageJson.getIntValue("videoVersion") >= 4) {
- buildType = "V3";
- cameraType = 11L;
- }
- }
- buildScene(fileId, prefixBuffer.toString(),fdageJson,buildType,cameraType);
- return ResultData.ok();
- }
- @Override
- public ResultData turntableUploadSuccess(String params) throws Exception {
- log.info("turntableUploadSuccess-params: " + params);
- if (StringUtils.isEmpty(params)) {
- throw new BusinessException(ErrorCode.PARAM_REQUIRED);
- }
- params = params.replaceAll("%2B", "+");
- params = params.replaceAll(" ", "+");
- Base64 base64 = new Base64();
- String cipher = params;
- // 私钥解密过程
- byte[] res = RSAEncrypt.decrypt(RSAEncrypt.loadPrivateKeyByStr(RSAEncrypt.loadPrivateKeyByFile()),
- base64.decode(cipher));
- String restr = new String(res, "UTF-8");
- log.info("uploadSuccessBuild-params解密结果:" + restr);
- String[] strArr = restr.split(SPLICE);
- if (strArr.length != 3) {
- throw new BusinessException(ErrorCode.PARAM_REQUIRED);
- }
- String mac = strArr[0];
- String fileId = strArr[1];
- String folderName = redisUtil.get(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId));
- if(StringUtils.isEmpty(folderName)){
- SceneFileBuild fileBuild = findByFileId(fileId);
- if(ObjectUtils.isEmpty(fileBuild)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
- }
- folderName = fileBuild.getUnicode();
- redisUtil.set(String.format(RedisConstants.FILEID_FOLDER_BUILD, fileId), folderName);
- }
- //云目录
- StringBuilder prefixBuffer = new StringBuilder(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator);
- JSONObject fdageJson = JSONObject.parseObject(fYunFileService.getFileContent(ConstantFilePath.OSS_PREFIX + prefixBuffer + "data.fdage"));
- if(ObjectUtils.isEmpty(fdageJson)){
- log.info("data.fdage文件不存在");
- throw new BusinessException(CameraConstant.FAILURE_6009);
- }
- String buildType = "V3";
- //13表示转台
- Long cameraType = 13L;
- //激光转台 八目相机占用 10 和 11
- if(fdageJson.getJSONObject("cam").getIntValue("type") == 10){
- //激光转台
- cameraType = 14L;
- }
- buildScene(fileId, prefixBuffer.toString(), fdageJson, buildType, cameraType);
- return ResultData.ok();
- }
- public ScenePlusVO createScenePlus(String projectNum, Long cameraId, String cameraName, String phoneId, String sceneKey,
- String unicode, Long cameraType, String fileId, String pic, Long userId, String userName,
- String algorithm, Integer sceneShootCount, String sceneName,
- String sceneDec, Integer sceneType, String gps,Integer type,
- Integer resolution, String firmwareVersion, String url, String buildType,
- Long cooperationUser)throws Exception{
- ScenePlusVO scenePlusVO = new ScenePlusVO();
- ScenePlus scenePlus = new ScenePlus();
- ScenePlusExt scenePlusExt = new ScenePlusExt();
- scenePlusExt.setWebSite(url+projectNum);
- scenePlus.setCameraId(cameraId);
- scenePlus.setPhoneId(phoneId);
- scenePlus.setNum(projectNum);
- scenePlus.setSceneSource(1);
- scenePlusExt.setDataSource(ConstantFilePath.BUILD_MODEL_PATH + cameraName.toLowerCase() + File.separator + fileId + File.separator + unicode);
- if(resolution == null || resolution.intValue() == 0){
- scenePlusExt.setSceneScheme(cameraType.intValue());
- }else {
- scenePlusExt.setSceneScheme(4);
- }
- //转台相机用4k图
- if(cameraType.longValue() == 13 ){
- scenePlus.setSceneSource(3);
- scenePlusExt.setSceneScheme(10);
- }
- if (pic != null && pic.length() > 5) {
- scenePlusExt.setThumb(pic);
- } else {
- scenePlusExt.setThumb(ConstantUrl.DEFAULT_SCENE_PIC);
- }
- scenePlusExt.setThumb(scenePlusExt.getThumb().concat("?t=") + System.currentTimeMillis());
- if (!ObjectUtils.isEmpty(userName)) {
- scenePlus.setUserId(userId);
- }
- if (sceneShootCount == null) {
- scenePlusExt.setShootCount(0);
- } else {
- scenePlusExt.setShootCount(sceneShootCount);
- }
- if (sceneName != null) {
- scenePlus.setTitle(sceneName);
- }
- if (sceneDec != null) {
- scenePlus.setDescription("<p>" + new String(sceneDec.getBytes("UTF-8")) + "</p>");
- }
- if (sceneType != null) {
- scenePlus.setSceneType(sceneType);
- }
- if (gps != null && !gps.trim().equals("")) {
- scenePlusExt.setGps(gps);
- }
- scenePlusExt.setAlgorithm(algorithm);
- if(!org.springframework.util.StringUtils.isEmpty(firmwareVersion)){
- scenePlusExt.setFirmwareVersion(firmwareVersion);
- }
- scenePlusExt.setBuildType(buildType);
- log.info("场景记录添加到数据库:"+projectNum);
- //type=0为新生成场景,其余为重新计算场景
- SceneEditInfo sceneEditInfo = new SceneEditInfo();
- SceneEditInfoExt sceneEditInfoExt = new SceneEditInfoExt();
- SceneEditControls sceneEditControls = new SceneEditControls();
- if(type == 0){
- scenePlus.setSceneStatus(SceneStatus.wait.code());
- scenePlusService.save(scenePlus);
- scenePlusExt.setPlusId(scenePlus.getId());
- scenePlusExtService.save(scenePlusExt);
- sceneEditInfo.setTitle(scenePlus.getTitle());
- sceneEditInfo.setDescription(scenePlus.getDescription());
- sceneEditInfo.setScenePlusId(scenePlus.getId());
- if(StrUtil.isNotBlank(sceneKey)) {
- sceneEditInfo.setScenePassword(sceneKey);
- sceneEditControls.setShowLock((int) CommonStatus.YES.code());
- }
- sceneEditInfoService.save(sceneEditInfo);
- sceneEditControls.setEditInfoId(sceneEditInfo.getId());
- sceneEditControlsService.save(sceneEditControls);
- //新增场景时,同时新增场景协作信息
- if(cooperationUser != null){
- SceneCooperation sceneCooperationEntity = new SceneCooperation();
- sceneCooperationEntity.setNum(projectNum);
- sceneCooperationEntity.setUserId(cooperationUser);
- sceneCooperationService.save(sceneCooperationEntity);
- List<SceneResourceCamera> resourceCameraList = sceneResourceCameraService.findListByCameraId(cameraId);
- SceneResourceCooperation sceneResourceCooperation = null;
- if(resourceCameraList != null && resourceCameraList.size() > 0){
- for (SceneResourceCamera sceneResourceCamera : resourceCameraList) {
- sceneResourceCooperation = new SceneResourceCooperation();
- sceneResourceCooperation.setSceneResourceId(sceneResourceCamera.getSceneResourceId());
- sceneResourceCooperation.setSceneCooperationId(sceneCooperationEntity.getId());
- sceneResourceCooperationService.save(sceneResourceCooperation);
- }
- }
- }
- }else {
- ScenePlus oldScene = scenePlusService.getScenePlusByNum(projectNum);
- scenePlus.setId(oldScene.getId());
- scenePlus.setSceneStatus(0);
- scenePlus.setRecStatus(RecStatus.VALID.code());
- scenePlus.setPayStatus(0);
- scenePlus.setCreateTime(Calendar.getInstance().getTime());
- ScenePlusExt oldSceneExt = scenePlusExtService.getScenePlusExtByPlusId(oldScene.getId());
- scenePlusExt.setSpace(oldSceneExt.getSpace());
- scenePlusExt.setEcs(oldSceneExt.getEcs());
- scenePlusExt.setViewCount(oldSceneExt.getViewCount());
- if(sceneName!=null) {
- scenePlus.setTitle(sceneName);
- }
- if(sceneType!=null) {
- scenePlus.setSceneType(sceneType);
- }
- scenePlusService.updateById(scenePlus);
- scenePlusExtService.updateById(scenePlusExt);
- SceneEditInfo oldSceneEditInfo = sceneEditInfoService.getByScenePlusId(oldScene.getId());
- SceneEditInfoExt oldSceneEditeIinfoExt = sceneEditInfoExtService.getByEditInfoId(oldSceneEditInfo.getId());
- if(StrUtil.isNotBlank(sceneKey)) {
- sceneEditInfo.setScenePassword(sceneKey);
- sceneEditControls.setShowLock((int) CommonStatus.YES.code());
- }else{
- sceneEditInfo.setScenePassword("");
- sceneEditControls.setShowLock((int)CommonStatus.NO.code());
- }
- sceneEditInfo.setTitle(scenePlus.getTitle());
- sceneEditInfo.setDescription(scenePlus.getDescription());
- sceneEditInfo.setId(oldSceneEditInfo.getId());
- sceneEditInfo.setScenePlusId(scenePlus.getId());
- sceneEditInfo.setFloorLogoSize(100);
- sceneEditInfo.setRecStatus(RecStatus.VALID.code());
- sceneEditInfo.setFloorPublishVer(oldSceneEditInfo.getFloorEditVer() + 1);
- sceneEditInfo.setFloorEditVer(oldSceneEditInfo.getFloorEditVer() + 1);
- sceneEditInfo.setVersion(oldSceneEditInfo.getVersion() + 1);
- sceneEditInfoService.updateById(sceneEditInfo);
- sceneEditInfoExt.setId(oldSceneEditeIinfoExt.getId());
- sceneEditInfoExt.setEditInfoId(sceneEditInfo.getId());
- sceneEditInfoExt.setScenePlusId(scenePlus.getId());
- sceneEditInfoExtService.updateById(sceneEditInfoExt);
- }
- BeanUtil.copyProperties(scenePlusExt, scenePlusVO);
- BeanUtil.copyProperties(scenePlus, scenePlusVO);
- return scenePlusVO;
- }
- public BuildSceneCallMessage getBuildSceneMqMessage(String projectNum,
- Long cameraType, String algorithm, Integer resolution,
- String buildType, String dataSource) {
- BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
- mqMsg.setSceneNum(projectNum);
- mqMsg.setCameraType(String.valueOf(cameraType));
- mqMsg.setAlgorithm(algorithm);
- mqMsg.setResolution(String.valueOf(resolution));
- mqMsg.setBuildType(buildType);
- mqMsg.setPath(dataSource);
- mqMsg.setCreateTime(DateUtil.format(Calendar.getInstance().getTime(), DateExtUtil.dateStyle));
- return mqMsg;
- }
- @Override
- public ResultData rebuildScene(String num,Boolean force) throws IOException {
- ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
- if(Objects.isNull(scenePlus)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- if (scenePlus.getSceneStatus() == 0 && (ObjectUtils.isEmpty(force) || !force)) {
- throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
- }
- ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
- String path = scenePlusExt.getDataSource();
- Integer sceneSource = scenePlus.getSceneSource();
- String buildType = scenePlusExt.getBuildType();
- Integer sceneScheme = scenePlusExt.getSceneScheme();
- //重新计算时需要删除文件夹,否知使用缓存
- FileUtils.delAllFile(path + File.separator + "results");
- String dataFdageOssPath = ConstantFilePath.OSS_PREFIX+ path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
- .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "") + "/data.fdage";
- JSONObject fdageData = JSONObject.parseObject(fYunFileService.getFileContent(dataFdageOssPath));
- if(ObjectUtils.isEmpty(fdageData)){
- log.error("data.fdage文件不存在");
- return ResultData.error(CameraConstant.FAILURE_6009.code(), CameraConstant.FAILURE_6009.message());
- }
- //重算的场景,先移除该场景对应的容量
- scenePlusService.resetSpace(num);
- String statusJsonOssPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "status.json";
- JSONObject statusJson = JSONObject.parseObject(fYunFileService.getFileContent(String.format(UploadFilePath.DATA_VIEW_PATH, num) + "status.json"));
- //临时将-2改成1,app还没完全更新
- statusJson.put("status", SceneStatus.wait.code());
- fYunFileService.uploadFile(statusJson.toJSONString().getBytes(StandardCharsets.UTF_8),statusJsonOssPath);
- Long cameraType = (long)sceneScheme == 3 ? 12 : (long)sceneScheme;
- //判断是否转台相机
- if(sceneSource == 3){
- cameraType = 13L;
- }
- if(sceneSource == 4){
- cameraType = 14L;
- }
- if(sceneSource == 4){
- BuildSceneCallMessage buildSceneMqMessage = this.getBuildSceneMqMessage(
- num, cameraType,
- fdageData.getString("location") != null && "1".equals(fdageData.getString("location")) ? "sfm" : "slam",
- fdageData.getInteger("resolution"), buildType, path);
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, buildSceneMqMessage);
- }else{
- BuildSceneCallMessage buildSceneMqMessage = this.getBuildSceneMqMessage(
- num, cameraType, fdageData.getString("location") != null && "1".equals(fdageData.getString("location")) ? "sfm" : "slam",
- fdageData.getInteger("resolution"), buildType,
- path);
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, buildSceneMqMessage);
- }
- scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
- .set(ScenePlus::getSceneStatus, SceneStatus.wait.code())
- .eq(ScenePlus::getNum, num));
- return ResultData.ok();
- }
- }
|