123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197 |
- 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.CameraConstant;
- import com.fdkankan.common.constant.CommonStatus;
- import com.fdkankan.common.constant.ConstantUrl;
- import com.fdkankan.common.constant.ErrorCode;
- import com.fdkankan.common.constant.RecStatus;
- import com.fdkankan.common.constant.SceneStatus;
- 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.entity.Camera;
- import com.fdkankan.contro.entity.CameraDetail;
- import com.fdkankan.contro.entity.Company;
- import com.fdkankan.contro.entity.SSOUser;
- import com.fdkankan.contro.entity.SceneCooperation;
- import com.fdkankan.contro.entity.SceneEditControls;
- import com.fdkankan.contro.entity.SceneEditInfo;
- import com.fdkankan.contro.entity.SceneEditInfoExt;
- import com.fdkankan.contro.entity.SceneFileBuild;
- import com.fdkankan.contro.entity.ScenePlus;
- import com.fdkankan.contro.entity.ScenePlusExt;
- import com.fdkankan.contro.entity.ScenePro;
- import com.fdkankan.contro.entity.SceneResourceCamera;
- import com.fdkankan.contro.entity.SceneResourceCooperation;
- import com.fdkankan.contro.mapper.ISceneFileBuildMapper;
- import com.fdkankan.contro.service.ICameraDetailService;
- import com.fdkankan.contro.service.ICameraService;
- import com.fdkankan.contro.service.ICompanyService;
- import com.fdkankan.contro.service.IFdkkLaserService;
- import com.fdkankan.contro.service.IScene3dNumService;
- import com.fdkankan.contro.service.ISceneCooperationService;
- import com.fdkankan.contro.service.ISceneEditControlsService;
- import com.fdkankan.contro.service.ISceneEditInfoExtService;
- import com.fdkankan.contro.service.ISceneEditInfoService;
- import com.fdkankan.contro.service.ISceneFileBuildService;
- import com.fdkankan.contro.service.IScenePlusExtService;
- import com.fdkankan.contro.service.IScenePlusService;
- import com.fdkankan.contro.service.ISceneProService;
- import com.fdkankan.contro.service.ISceneResourceCameraService;
- import com.fdkankan.contro.service.ISceneResourceCooperationService;
- import com.fdkankan.contro.service.IUserService;
- import com.fdkankan.contro.vo.ResponseSceneFile;
- import com.fdkankan.contro.vo.ScenePlusVO;
- import com.fdkankan.fyun.config.FYunFileConfig;
- import com.fdkankan.fyun.constant.FYunTypeEnum;
- import com.fdkankan.fyun.face.FYunFileServiceInterface;
- import com.fdkankan.image.MatrixToImageWriterUtil;
- import com.fdkankan.model.constants.ConstantFilePath;
- import com.fdkankan.model.constants.UploadFilePath;
- import com.fdkankan.model.utils.ComputerUtil;
- import com.fdkankan.model.utils.CreateObjUtil;
- import com.fdkankan.rabbitmq.bean.BuildSceneCallMessage;
- import com.fdkankan.rabbitmq.util.RabbitMqProducer;
- import com.fdkankan.redis.util.RedisUtil;
- import com.fdkankan.web.config.FileRouteConfig;
- import com.fdkankan.web.response.ResultData;
- import com.fdkankan.web.util.RSAEncrypt;
- import java.io.File;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Objects;
- 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;
- /**
- * <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-call}")
- private String queueModelingCall;
- @Value("${queue.modeling.modeling-pre}")
- private String queueModelingPre;
- @Value("${fyun.type}")
- private String fyunType;
- @Autowired
- private RedisUtil redisUtil;
- @Autowired
- private FileRouteConfig routeConfig;
- @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;
- @Autowired
- private ISceneProService sceneProService;
- @Autowired
- private IFdkkLaserService fdkkLaserService;
- @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);
- String dataSource = scenePlusService.getDataSourceLikeUnicode("/" + folderName);
- if(StrUtil.isNotEmpty(dataSource)){
- int n = dataSource.split("/").length;
- if(n > 1){
- String fileId = dataSource.split("/")[n - 2];
- ResponseSceneFile responseSceneFile = new ResponseSceneFile();
- responseSceneFile.setFileId(fileId);
- //可以重复上传,文件id保存50年(因为该redis工具无法设置永久保存)
- redisUtil.set(fileId, folderName, 1537920000);
- return responseSceneFile;
- }
- }else {
- SceneFileBuild sceneFileBuild = this.findByUnicode(folderName);
- if(sceneFileBuild != null){
- String fileId = sceneFileBuild.getFileId();
- ResponseSceneFile responseSceneFile = new ResponseSceneFile();
- responseSceneFile.setFileId(fileId);
- //可以重复上传,文件id保存50年(因为该redis工具无法设置永久保存)
- redisUtil.set(fileId, folderName, 1537920000);
- return responseSceneFile;
- }
- }
- log.info("开始新生成build数据");
- // 构造方法设置机器码:第0个机房的第0台机器
- SnowflakeIdGenerator snowflakeIdGenerator = new SnowflakeIdGenerator(0, 0);
- long fileId = snowflakeIdGenerator.nextId();
- log.info("新生成build数据,{}", fileId);
- SceneFileBuild sceneFileBuild = new SceneFileBuild();
- sceneFileBuild.setChildName(mac);
- sceneFileBuild.setFileId(String.valueOf(fileId));
- sceneFileBuild.setUnicode(folderName);
- sceneFileBuild.setUploadStatus(0);
- sceneFileBuild.setBuildStatus(0);
- sceneFileBuild.setTotalPicNum(Integer.valueOf(totalPicNum));
- sceneFileBuild.setChunks(Integer.valueOf(chunks));
- this.save(sceneFileBuild);
- ResponseSceneFile responseSceneFile = new ResponseSceneFile();
- responseSceneFile.setFileId(String.valueOf(fileId));
- //可以重复上传,文件id保存50年(因为该redis工具无法设置永久保存)
- redisUtil.set(String.valueOf(fileId), folderName, 1537920000);
- 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 void buildScene(String filePath, String fileId, boolean fromOss, String prefix) throws Exception{
- //获取解压后的资源的data.fdage中的数据
- String data = FileUtils.readFile(filePath + "data.fdage");
- JSONObject jsonObject = JSONObject.parseObject(data);
- //调用createScene方法生成scene数据和加入算法队列
- if(jsonObject != null){
- //有calibration值为标定,1: camera_calibration 2: color_anlysis,0正常计算
- if(jsonObject.get("calibration") != null && jsonObject.getString("calibration").equals("1")){
- String mac = filePath.replace(ConstantFilePath.BUILD_MODEL_PATH, "").split("/")[0];
- String calPath = ConstantFilePath.BUILD_MODEL_PATH + mac + "/camera_calibration";
- //生成标定数据
- ComputerUtil.createCalibrationData(calPath, filePath);
- //开始标定计算
- rabbitMqProducer.sendByWorkQueue(queueModelingCall, calPath);
- }else if(jsonObject.get("calibration") != null && jsonObject.getString("calibration").equals("2")){
- String mac = filePath.replace(ConstantFilePath.BUILD_MODEL_PATH, "").split("/")[0];
- String calPath = ConstantFilePath.BUILD_MODEL_PATH + mac + "/color_anlysis";
- //生成标定数据
- ComputerUtil.createCalibrationData(calPath, filePath);
- //开始标定计算
- Map<String,String> map = ComputerUtil.computerCalibration(calPath);
- }else if(jsonObject.get("calibration") != null && jsonObject.getString("calibration").equals("3")){
- String mac = filePath.replace(ConstantFilePath.BUILD_MODEL_PATH, "").split("/")[0];
- String calPath = ConstantFilePath.BUILD_MODEL_PATH + mac + "/shading";
- //生成标定数据
- ComputerUtil.createCalibrationData(calPath, filePath);
- //开始标定计算
- rabbitMqProducer.sendByWorkQueue(queueModelingCall, calPath);
- }else {
- String sceneNum = "";
- String cameraName = jsonObject.getJSONObject("cam").getString("uuid");
- String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime");
- log.info("查询相机:" + cameraName);
- Camera camera = cameraService.getByChildName(cameraName);
- if(camera == null){
- log.error("该相机不存在:" + cameraName);
- //偶现data.fdage给的相机码多了或少了4DKKPRO_
- if(cameraName.contains("4DKKPRO_")){
- camera = cameraService.getByChildName(cameraName.replace("4DKKPRO_", ""));
- }else {
- camera = cameraService.getByChildName("4DKKPRO_" + 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(Objects.nonNull(scenePlus)){
- sceneNum = scenePlus.getNum();
- if(scenePlus.getSceneStatus() == SceneStatus.wait.code()){
- log.info(sceneNum + ":场景处于计算中,不能再计算");
- return;
- }
- }else {
- sceneNum = scene3dNumService.generateSceneNum(cameraDetail.getType());
- rebuild = 0;
- }
- if(sceneNum == null){
- log.error("大场景序号为空:" + sceneNum);
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, sceneNum);
- String localImagesPath = String.format(ConstantFilePath.IMAGESBUFFER_FORMAT, sceneNum);
- String imgViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, sceneNum);
- String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, sceneNum);
- String userName = null;
- if(cameraDetail.getUserId() != null){
- SSOUser user = userService.getSSOUserByUserId(cameraDetail.getUserId());
- if(user != null){
- userName = user.getUserName();
- }
- }
- String icon = null;
- if(jsonObject.containsKey("icon") && StrUtil.isNotEmpty(jsonObject.getString("icon"))){
- fYunFileService.downloadFile(ConstantFilePath.OSS_PREFIX + prefix + jsonObject.getString("icon"), filePath);
- icon = fYunFileConfig.getHost() + imgViewPath + jsonObject.getString("icon");
- fYunFileService.uploadFile(filePath + jsonObject.getString("icon"), imgViewPath + jsonObject.getString("icon"));
- }
- JSONObject firmwareVersion = new JSONObject();
- if(jsonObject.containsKey("camSoftwareVersion") && StrUtil.isNotEmpty(jsonObject.getString("camSoftwareVersion"))){
- firmwareVersion.put("camSoftwareVersion", jsonObject.getString("camSoftwareVersion"));
- }
- if(jsonObject.containsKey("version") && StrUtil.isNotEmpty(jsonObject.getString("version"))){
- firmwareVersion.put("version", jsonObject.getString("version"));
- }
- String sceneUrl = mainUrl +"/"+sceneProNewUrl;
- String buildType = "V2";
- Long cameraType = 10L;
- //根据videoVersion判断是V2还是V3版本的算法和页面
- if(jsonObject.containsKey("videoVersion") && StrUtil.isNotEmpty(jsonObject.getString("videoVersion"))){
- if(jsonObject.getIntValue("videoVersion") >= 4){
- buildType = "V3";
- cameraType = 11L;
- }
- }
- //重算的场景,先移除该场景对应的容量
- if(rebuild == 1){
- scenePlusService.resetSpace(sceneNum);
- }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");
- }
- ScenePlusVO scenePlusVO = null;
- Object[] objects = null;
- BuildSceneCallMessage mqMessage = null;
- if(fromOss){
- objects = this.createScenePlus(sceneNum, camera.getId(), camera.getChildName(), jsonObject.getString("creator"),
- jsonObject.getString("pwd"), unicode,
- cameraType, fileId, prefix, "", icon, "0", cameraDetail.getUserId(), userName,
- jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
- 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());
- }else {
- objects = this.createScenePlus(sceneNum, camera.getId(), camera.getChildName(), jsonObject.getString("creator"),
- jsonObject.getString("pwd"), unicode,
- cameraDetail.getGoodsId(), String.valueOf(fileId), "", "", icon, "0", cameraDetail.getUserId(), userName,
- jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
- 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());
- }
- scenePlusVO = (ScenePlusVO)objects[0];
- mqMessage = (BuildSceneCallMessage)objects[1];
- 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");
- }
- //删除oss的houst_floor.json(国际版可能会卡住)
- fYunFileService.deleteFile(dataViewPath + "houst_floor.json");
- if(cameraDetail.getCompanyId() != null){
- Company company = companyService.getById(cameraDetail.getCompanyId());
- if(company != null){
- log.info("复制企业logo");
- SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlusVO.getId());
- SceneEditInfoExt sceneEditInfoExt = sceneEditInfoExtService.getByEditInfoId(sceneEditInfo.getId());
- if(StrUtil.isNotEmpty(company.getTopLogo())){
- //复制阿里云主服务器的图片到横琴云副服务器中
- if(!new File(ConstantFilePath.BASE_PATH + File.separator + company.getTopLogo()).exists()){
- log.info("下载topLogo");
- FileUtils.downLoadFromUrl(mainUrl + company.getTopLogo() + "?t=" + System.currentTimeMillis(),
- company.getTopLogo().substring(company.getTopLogo().lastIndexOf("/") + 1),
- ConstantFilePath.BASE_PATH + company.getTopLogo().substring(0, company.getTopLogo().lastIndexOf("/")));
- }
- FileUtils.copyFile(ConstantFilePath.BASE_PATH + File.separator + company.getTopLogo(),
- localImagesPath + "logo-main.png", true);
- fYunFileService.uploadFile(localImagesPath + "logo-main.png", imgViewPath + "logo-main.png");
- }
- if(StrUtil.isNotEmpty(company.getFloorLogo())){
- //复制阿里云主服务器的图片到横琴云副服务器中
- if(!new File(ConstantFilePath.BASE_PATH + File.separator + company.getFloorLogo()).exists()){
- log.info("下载floorLogo");
- FileUtils.downLoadFromUrl(mainUrl + company.getFloorLogo() + "?t=" + System.currentTimeMillis(),
- company.getFloorLogo().substring(company.getFloorLogo().lastIndexOf("/") + 1),
- ConstantFilePath.BASE_PATH + company.getFloorLogo().substring(0, company.getFloorLogo().lastIndexOf("/")));
- }
- FileUtils.copyFile(ConstantFilePath.BASE_PATH + File.separator + company.getFloorLogo(),
- localImagesPath + "floorLogoImg.png", true);
- fYunFileService.uploadFile(localImagesPath + "floorLogoImg.png", imgViewPath + "floorLogoImg.png");
- sceneEditInfo.setFloorLogo("user");
- }
- if(StrUtil.isNotEmpty(company.getQrLogo())){
- //生成新的分享的二维码
- MatrixToImageWriterUtil.createQRCode(sceneUrl + sceneNum, ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneNum+".png",
- false, ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/QRShareLogo.png");
- MatrixToImageWriterUtil.createQRCode(sceneUrl + sceneNum + "&lang=en", ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneNum+"_en.png",
- false, ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/QRShareLogo.png");
- }
- sceneEditInfoService.updateById(sceneEditInfo);
- }
- }
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, mqMessage);
- }
- }else {
- log.info("data.fdage文件不存在");
- throw new BusinessException(CameraConstant.FAILURE_6009);
- }
- }
- @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.debug("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];
- Object folderNameObject = redisUtil.get(fileId);
- String folderName = folderNameObject == null ? null : (String)folderNameObject;
- if(StringUtils.isEmpty(folderName)){
- ScenePlus scenePlus = scenePlusService.getByFileId("/" + fileId + "/");
- if(scenePlus != null){
- ScenePlusExt plusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
- folderName = plusExt.getDataSource().substring(plusExt.getDataSource().lastIndexOf("/") + 1);
- }
- if(StringUtils.isEmpty(folderName)){
- SceneFileBuild sceneFileBuild = this.findByFileId(fileId);
- if(sceneFileBuild != null){
- folderName = sceneFileBuild.getUnicode();
- }
- }
- }
- StringBuilder filePathBuffer = new StringBuilder(routeConfig.getHardDisk()).append(mac).append(File.separator)
- .append(fileId).append(File.separator).append(folderName).append(File.separator).append("capture")
- .append(File.separator);
- StringBuilder prefixBuffer = new StringBuilder(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator);
- File filePath = new File(filePathBuffer.toString());
- if(!filePath.exists()){
- filePath.mkdirs();
- }
- fYunFileService.downloadFile(ConstantFilePath.OSS_PREFIX + prefixBuffer.toString() + "data.fdage",filePathBuffer.toString() + "data.fdage");
- buildScene(filePathBuffer.toString(), fileId, true, prefixBuffer.toString());
- 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];
- Object folderNameObject = redisUtil.get(fileId);
- String folderName = folderNameObject == null ? null : (String)folderNameObject;
- if(StringUtils.isEmpty(folderName)){
- ScenePlusExt scenePlusExt = scenePlusExtService.list(
- new LambdaQueryWrapper<ScenePlusExt>()
- .like(ScenePlusExt::getDataSource, "%/" + fileId + "/%")).get(0);
- if(scenePlusExt != null){
- folderName = scenePlusExt.getDataSource().substring(scenePlusExt.getDataSource().lastIndexOf("/") + 1);
- }
- if(StringUtils.isEmpty(folderName)){
- SceneFileBuild sceneFileBuild = this.findByFileId(fileId);
- if(sceneFileBuild != null){
- folderName = sceneFileBuild.getUnicode();
- }
- }
- }
- //判断 是否为激光相机
- Camera camera = cameraService.getByChildName(mac);
- CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
- String hardDisk = routeConfig.getHardDisk();
- if(cameraDetail!=null){
- if(cameraDetail.getType() == 10){
- hardDisk = routeConfig.getHardDiskLaser();
- }
- }
- log.info("相机 mnt 路径 : " + hardDisk + ", 相机类型 : " + cameraDetail.getType());
- //本机目录
- StringBuilder filePathBuffer = new StringBuilder(hardDisk).append(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator).append("capture").append(File.separator);
- //云目录
- StringBuilder prefixBuffer = new StringBuilder(mac).append(File.separator).append(fileId).append(File.separator).append(folderName).append(File.separator);
- File filePath = new File(filePathBuffer.toString());
- if(!filePath.exists()){
- filePath.mkdirs();
- }
- fYunFileService.downloadFile(ConstantFilePath.OSS_PREFIX + prefixBuffer.toString() + "data.fdage", filePathBuffer.toString() + "data.fdage");
- turntableBuildScene(filePathBuffer.toString(), fileId, true, prefixBuffer.toString());
- return ResultData.ok();
- }
- public void turntableBuildScene(String filePath, String fileId, boolean fromOss, String prefix) throws Exception{
- String data = FileUtils.readFile(filePath + "data.fdage");
- JSONObject jsonObject = JSONObject.parseObject(data);
- //调用createScene方法生成scene数据和加入算法队列
- if(jsonObject == null) {
- log.info("data.fdage文件不存在");
- throw new BusinessException(CameraConstant.FAILURE_6009);
- }
- String sceneNum = "";
- String snCode = jsonObject.getJSONObject("cam").getString("uuid");
- String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime"); //从data.fage 取出
- //查看场景中的文件目录是否有改文件id,有则重新计算改场景,无则新建场景
- ScenePlus scene = scenePlusService.getByFileId("/" + fileId + "/");
- int rebuild = 1;
- log.info("查询相机:" + snCode);
- Camera camera = cameraService.getByChildName(snCode);
- if(camera == null){
- log.error("该相机不存在:" + snCode);
- camera = cameraService.getBySnCode(snCode);
- if(camera == null){
- throw new BusinessException(CameraConstant.FAILURE_6003);
- }
- }
- CameraDetail cameraDetail = cameraDetailService.getByCameraId(camera.getId());
- if(cameraDetail == null){
- log.error("该相机详情不存在:" + snCode);
- throw new BusinessException(CameraConstant.FAILURE_6003);
- }
- if(Objects.nonNull(scene)){
- sceneNum = scene.getNum();
- if(scene.getSceneStatus() == SceneStatus.wait.code()){
- log.info(sceneNum + ":场景处于计算中,不能再计算");
- return;
- }
- }else {
- sceneNum = scene3dNumService.generateSceneNum(cameraDetail.getType());
- rebuild = 0;
- }
- if(sceneNum == null){
- log.error("大场景序号为空:" + sceneNum);
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- log.info("是否是重算,rebuild:{}",rebuild);
- String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, sceneNum);
- String localImagesPath = String.format(ConstantFilePath.IMAGESBUFFER_FORMAT, sceneNum);
- String imageViewPath = String.format(UploadFilePath.IMG_VIEW_PATH, sceneNum);
- String dataViewPath = String.format(UploadFilePath.DATA_VIEW_PATH, sceneNum);
- String userName = null;
- if(cameraDetail.getUserId() != null){
- SSOUser user = userService.getSSOUserByUserId(cameraDetail.getUserId());
- if(user != null){
- userName = user.getUserName();
- }
- }
- String icon = null;
- if(jsonObject.containsKey("icon") && StrUtil.isNotEmpty(jsonObject.getString("icon"))){
- fYunFileService.downloadFile(ConstantFilePath.OSS_PREFIX + prefix + jsonObject.getString("icon"), filePath);
- icon = fYunFileConfig.getHost() + imageViewPath + jsonObject.getString("icon");
- fYunFileService.uploadFile(filePath + jsonObject.getString("icon"), imageViewPath + jsonObject.getString("icon"));
- log.info("上传icon成功....");
- }
- JSONObject firmwareVersion = new JSONObject();
- if(jsonObject.containsKey("camSoftwareVersion") && StrUtil.isNotEmpty(jsonObject.getString("camSoftwareVersion"))){
- firmwareVersion.put("camSoftwareVersion", jsonObject.getString("camSoftwareVersion"));
- }
- if(jsonObject.containsKey("version") && StrUtil.isNotEmpty(jsonObject.getString("version"))){
- firmwareVersion.put("version", jsonObject.getString("version"));
- }
- String sceneUrl = mainUrl + "/" + sceneProNewUrl;
- String buildType = "V3";
- //13表示转台
- Long cameraType = 13L;
- //激光转台 八目相机占用 10 和 11
- if(jsonObject.getJSONObject("cam").getIntValue("type") == 10){
- //激光转台
- cameraType = 14L;
- }
- //重算的场景,先移除该场景对应的容量
- if(rebuild == 1){
- scenePlusService.resetSpace(sceneNum);
- }else {
- //上传log-main.png
- fYunFileService.uploadFile(ConstantFilePath.LOGO_PATH + "logo-main.png", imageViewPath + "logo-main.png");
- fYunFileService.uploadFile(ConstantFilePath.LOGO_PATH + "logo-main-en.png", imageViewPath + "logo-main-en.png");
- log.info("第一次计算场景,上传logo-main.png");
- }
- Object[] objects = this.createScenePlus(sceneNum, camera.getId(), camera.getChildName(), jsonObject.getString("creator"),
- jsonObject.getString("pwd"), unicode,
- cameraType, String.valueOf(fileId), prefix, "", icon, "0", cameraDetail.getUserId(), userName,
- jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
- 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());
- BuildSceneCallMessage mqMessage = (BuildSceneCallMessage)objects[1];
- ScenePlusVO scenePlusVO = (ScenePlusVO) objects[0];
- if(scenePlusVO != null){
- 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");
- log.info("上传status.json,上传内容:{}" + statusJson.toString());
- }
- if(cameraDetail.getCompanyId() != null){
- Company company = companyService.getById(cameraDetail.getCompanyId());
- if(company != null){
- Map<String, Object> jsonMap = new HashMap<>();
- log.info("复制企业logo");
- SceneEditInfo sceneEditInfo = sceneEditInfoService.getByScenePlusId(scenePlusVO.getId());
- // SceneProEdit sceneProEdit = sceneProEditService.findByProId(scene.getId());
- // SceneProEditExt sceneProEditExt = sceneProEditExtService.getByProEditId(sceneProEdit.getId());
- if(StrUtil.isNotEmpty(company.getTopLogo())){
- FileUtils.copyFile(ConstantFilePath.BASE_PATH + File.separator + company.getTopLogo(),localImagesPath + "logo-main.png", true);
- fYunFileService.uploadFile(localImagesPath + "logo-main.png", imageViewPath + "logo-main.png");
- }
- if(StrUtil.isNotEmpty(company.getFloorLogo())){
- FileUtils.copyFile(ConstantFilePath.BASE_PATH + File.separator + company.getFloorLogo(),
- localImagesPath + "floorLogoImg.png", true);
- fYunFileService.uploadFile(localImagesPath + "floorLogoImg.png",
- imageViewPath + "floorLogoImg.png");
- sceneEditInfo.setFloorLogo("user");
- }
- if(StrUtil.isNotEmpty(company.getQrLogo())){
- // TODO: 2022/7/25 目前v4版本不需要生成带logo的二维码,这里先注释掉 dsx-------------------------------start
- // FileUtils.copyFile(ConstantFilePath.BASE_PATH + File.separator + company.getQrLogo(),
- // ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/QRShareLogo.png", true);
- //
- // uploadToOssUtil.upload(ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/QRShareLogo.png",
- // imageViewPath + "QRShareLogo.png");
- //
- // // TODO: 2022/1/24 暂时保留旧版本,系统稳定后删除
- // uploadToOssUtil.upload(ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/QRShareLogo.png",
- // "images/images" + sceneNum + "/QRShareLogo.png");
- //
- //// sceneProEdit.setShareLogo("images/images" + sceneNum + "/QRShareLogo.png");//旧系统代码,先保留
- // sceneProEdit.setShareLogo(imageViewPath + "QRShareLogo.png");
- // TODO: 2022/7/25 目前v4版本不需要生成带logo的二维码,这里先注释掉 dsx-------------------------------end
- //生成新的分享的二维码-中文版本
- MatrixToImageWriterUtil.createQRCode(sceneUrl + sceneNum, ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneNum+".png",
- false, ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/QRShareLogo.png");
- //生成新的分享的二维码-英文版本
- MatrixToImageWriterUtil.createQRCode(sceneUrl + sceneNum + "&lang=en", ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+sceneNum+"_en.png",
- false, ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/QRShareLogo.png");
- }
- // TODO: 2022/7/25 目前v4版本还没开发地面点位log功能,这里先注释掉 dsx-------------------------------start
- // if(StrUtil.isNotEmpty(company.getMarkerLogo())){
- // FileUtils.copyFile(ConstantFilePath.BASE_PATH + File.separator + company.getMarkerLogo(),
- // ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/marker.png", true);
- // uploadToOssUtil.upload(ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/marker.png",
- // imageViewPath + "marker.png");
- //
- // // TODO: 2022/1/24 暂时保留旧版本,系统稳定后删除
- // uploadToOssUtil.upload(ConstantFilePath.SCENE_PATH + "images/images" + sceneNum + "/marker.png",
- // "images/images" + sceneNum + "/marker.png");
- //
- // sceneProEdit.setMarkerLogo("user");
- // jsonMap.put("markerLogo", "user");
- // }
- // TODO: 2022/7/25 目前v4版本还没开发地面点位log功能,这里先注释掉 dsx-------------------------------end
- sceneEditInfoService.updateById(sceneEditInfo);
- }
- //删除oss的houst_floor.json
- fYunFileService.deleteFile(dataViewPath + "houst_floor.json");
- }
- //激光转台 八目相机占用 10 和 11
- log.info("发送mq,camType:{}", jsonObject.getJSONObject("cam").getIntValue("type"));
- if(jsonObject.getJSONObject("cam").getIntValue("type") == 10){
- // mqProducer.sendOneWay(topicLaserA, mqMessage);
- // TODO: 2022/3/19 这里应该是发送激光的 ,目前还不清楚,先统一发送同一个mq
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, mqMessage);
- }else if(scene != null){
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, mqMessage);
- }
- }
- public Object[] createScenePlus(String projectNum, Long cameraId, String cameraName, String phoneId, String sceneKey,
- String unicode, Long cameraType, String fileId, String prefix,
- String imgsName, String pic, String isModel, 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);
- String path = ConstantFilePath.BUILD_MODEL_PATH + unicode;
- scenePlus.setSceneSource(1);
- if(cameraType.longValue() == 5 || cameraType.longValue() == 6){
- //场景来源双目相机
- scenePlus.setSceneSource(2);
- scenePlusExt.setDataSource(ConstantFilePath.BUILD_MODEL_PATH + unicode);
- }else if(cameraType.longValue() == 14){
- scenePlusExt.setDataSource(ConstantFilePath.BUILD_MODEL_LASER_PATH +
- cameraName.replace("4DKKPRO_", "").replace("-fdage", "").toLowerCase() + File.separator +
- fileId + File.separator + unicode);
- path = ConstantFilePath.BUILD_MODEL_LASER_PATH + unicode;
- log.info("激光相机 dataSource :" + scenePlusExt.getDataSource());
- }else if(cameraType.longValue() >= 3){
- scenePlusExt.setDataSource(ConstantFilePath.BUILD_MODEL_PATH +
- cameraName.replace("4DKKPRO_", "").replace("-fdage", "").toLowerCase() + File.separator +
- fileId + File.separator + unicode);
- }else {
- scenePlusExt.setDataSource(prefix+imgsName);
- }
- if(resolution == null || resolution.intValue() == 0){
- scenePlusExt.setSceneScheme(cameraType.intValue());
- }else {
- scenePlusExt.setSceneScheme(4);
- }
- //场景来源双目相机,sceneScheme为4,加载high,low图
- if(cameraType.longValue() == 5 || cameraType.longValue() == 6){
- scenePlusExt.setSceneScheme(4);
- }
- //转台相机用4k图
- if(cameraType.longValue() == 13 ){
- scenePlus.setSceneSource(3);
- scenePlusExt.setSceneScheme(10);
- }
- //激光相机
- if(cameraType.longValue() == 14 ){
- scenePlus.setSceneSource(4);
- 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.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.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);
- }
- BuildSceneCallMessage buildSceneMqMessage =this.getBuildSceneMqMessage(
- projectNum, cameraName, unicode, cameraType, fileId, prefix, imgsName, isModel,
- userName, algorithm, resolution, buildType, path, scenePlus.getId(), scenePlus.getTitle(),
- scenePlusExt.getWebSite(), scenePlus.getCreateTime(), scenePlus.getUserId(),
- scenePlusExt.getDataSource(), scenePlus.getSceneStatus(), scenePlus.getPayStatus(), scenePlusExt.getThumb());
- BeanUtil.copyProperties(scenePlusExt, scenePlusVO);
- BeanUtil.copyProperties(scenePlus, scenePlusVO);
- return new Object[]{scenePlusVO, buildSceneMqMessage};
- }
- public BuildSceneCallMessage getBuildSceneMqMessage(String projectNum, String cameraName, String unicode,
- Long cameraType, String fileId,String prefix, String imgsName,
- String isModel, String userName,String algorithm, Integer resolution,
- String buildType, String path, Long sceneProId, String sceneName, String webSite,
- Date sceneProCreateTime, Long userId, String dataSource,
- Integer sceneStatus, Integer PayStatus, String thumb) {
- BuildSceneCallMessage mqMsg = new BuildSceneCallMessage();
- mqMsg.setSceneProId(sceneProId);
- mqMsg.setSceneNum(projectNum);
- mqMsg.setCameraName(cameraName);
- mqMsg.setUnicode(unicode);
- mqMsg.setCameraType(String.valueOf(cameraType));
- mqMsg.setFileId(fileId);
- mqMsg.setPrefix(prefix);
- mqMsg.setImgsName(imgsName);
- mqMsg.setIsModel(isModel);
- mqMsg.setUserName(userName);
- mqMsg.setAlgorithm(algorithm);
- mqMsg.setResolution(String.valueOf(resolution));
- mqMsg.setBuildType(buildType);
- mqMsg.setPath(path);
- mqMsg.setSceneName(sceneName);
- mqMsg.setWebSite(webSite);
- mqMsg.setSceneProCreateTime(sceneProCreateTime);
- mqMsg.setUserId(userId);
- mqMsg.setDataSource(dataSource);
- mqMsg.setSceneStatus(sceneStatus);
- mqMsg.setPayStatus(PayStatus);
- mqMsg.setCreateTime(DateUtil.format(Calendar.getInstance().getTime(), DateExtUtil.dateStyle));
- mqMsg.setThumb(thumb);
- return mqMsg;
- }
- @Override
- public ResultData rebuildScene(String num) {
- ScenePro scenePro = sceneProService.getByNum(num);
- //如果是v3场景,不允许重算,需要升级v4后再调此接口进行重算
- if(Objects.nonNull(scenePro)
- && (Objects.isNull(scenePro.getIsUpgrade())
- || scenePro.getIsUpgrade() != CommonStatus.YES.code().intValue())){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5064);
- }
- ScenePlusVO scenePlusVO = null;
- ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
- if(Objects.isNull(scenePlus)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- if(scenePlus.getSceneStatus() == 0){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
- }
- ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
- String path = scenePlusExt.getDataSource();
- Integer sceneSource = scenePlus.getSceneSource();
- String dataSource = scenePlusExt.getDataSource();
- Long sceneUserId = scenePlus.getUserId();
- String buildType = scenePlusExt.getBuildType();
- Integer sceneStatus = scenePlus.getSceneStatus();
- String webSite = scenePlusExt.getWebSite();
- String thumb = scenePlusExt.getThumb();
- Integer payStatus = scenePlus.getPayStatus();
- Integer sceneScheme = scenePlusExt.getSceneScheme();
- Long sceneId = scenePlus.getId();
- String sceneName = scenePlus.getTitle();
- Date createTime = scenePlus.getCreateTime();
- String bucket = scenePlusExt.getYunFileBucket();
- //重新计算时需要删除文件夹,否知使用缓存
- FileUtils.delAllFile(path + File.separator + "results");
- String fileId = path.split("/")[path.split("/").length - 2];
- log.info("fileId:" + fileId);
- //获取解压后的资源的data.fdage中的数据
- File folderPath = new File(path);
- if (fyunType.equals(FYunTypeEnum.AWS.code())) {
- fYunFileService.downloadFileByCommand(bucket, path + "/capture/",
- ConstantFilePath.OSS_PREFIX + path.replace(ConstantFilePath.BUILD_MODEL_PATH, ""));
- } else {
- String dataFdageOssPath =
- ConstantFilePath.OSS_PREFIX +
- path.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
- .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH, "") + "/data.fdage";
- fYunFileService.downloadFileByCommand(bucket, path + "/capture/data.fdage", dataFdageOssPath);
- }
- String data = FileUtils.readFile(folderPath.getAbsolutePath() + File.separator + "capture" + File.separator + "data.fdage");
- com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(data);
- if(ObjectUtils.isEmpty(jsonObject)){
- log.error("data.fdage文件不存在");
- return ResultData.error(CameraConstant.FAILURE_6009.code(), CameraConstant.FAILURE_6009.message());
- }
- String sceneUrl = mainUrl +"/"+sceneProNewUrl;
- //有points字段的是八目
- String cameraName = jsonObject.getJSONObject("cam").getString("uuid");
- String userName = null;
- if (!ObjectUtils.isEmpty(sceneUserId)) {
- SSOUser user = userService.getSSOUserByUserId(sceneUserId);
- userName = user.getUserName();
- }
- //重算的场景,先移除该场景对应的容量
- scenePlusService.resetSpace(num);
- JSONObject statusJson = new JSONObject();
- //临时将-2改成1,app还没完全更新
- statusJson.put("status", sceneStatus == -2 ? 1 : sceneStatus);
- statusJson.put("webSite", webSite);
- statusJson.put("sceneNum", num);
- statusJson.put("thumb", thumb);
- statusJson.put("payStatus", payStatus);
- String statusJsonLocalPath = ConstantFilePath.SCENE_PATH + "data/data" + num + File.separator + "status.json";
- String statusJsonOssPath = String.format(UploadFilePath.DATA_VIEW_PATH, num) + "status.json";
- FileUtils.writeFile(statusJsonLocalPath, statusJson.toString());
- fYunFileService.uploadFile(bucket, statusJsonLocalPath, statusJsonOssPath);
- String unicode = jsonObject.getString("creator") + "_" + jsonObject.getString("uuidtime");
- Long cameraType = (long)sceneScheme == 3 ? 12 : (long)sceneScheme;
- //判断是否转台相机
- if(sceneSource == 3){
- cameraType = 13L;
- }
- if(sceneSource == 4){
- cameraType = 14L;
- }
- if(sceneSource == 4){
- fdkkLaserService.updateSceneStatus(num,0);
- BuildSceneCallMessage buildSceneMqMessage =this.getBuildSceneMqMessage(
- num, cameraName, unicode, cameraType, fileId,
- dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
- .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH,"")+ File.separator,
- "zip.Zip", "0",
- userName, jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
- jsonObject.getInteger("resolution"), buildType,
- ConstantFilePath.BUILD_MODEL_LASER_PATH + unicode, sceneId, sceneName,
- webSite, createTime, sceneUserId, dataSource, sceneStatus, payStatus, thumb);
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, buildSceneMqMessage);
- }else{
- BuildSceneCallMessage buildSceneMqMessage =this.getBuildSceneMqMessage(
- num, cameraName, unicode, cameraType, fileId,
- dataSource.replace(ConstantFilePath.BUILD_MODEL_PATH, "")
- .replace(ConstantFilePath.BUILD_MODEL_LASER_PATH,"")+ File.separator,
- "zip.Zip", "0",
- userName, jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam",
- jsonObject.getInteger("resolution"), buildType,
- ConstantFilePath.BUILD_MODEL_PATH + unicode, sceneId, sceneName,
- webSite, createTime, sceneUserId, dataSource, sceneStatus, payStatus, thumb);
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, buildSceneMqMessage);
- }
- scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
- .set(ScenePlus::getSceneStatus, SceneStatus.wait.code())
- .eq(ScenePlus::getNum, num));
- return ResultData.ok();
- }
- }
|