12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181 |
- 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.io.FileUtil;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.extra.qrcode.QrCodeUtil;
- import cn.hutool.extra.qrcode.QrConfig;
- import cn.hutool.http.HttpUtil;
- 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.image.MatrixToImageWriterUtil;
- 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.Result;
- 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.joda.time.DateTime;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.http.*;
- import org.springframework.stereotype.Service;
- import org.springframework.util.LinkedMultiValueMap;
- import org.springframework.util.MultiValueMap;
- import org.springframework.util.ObjectUtils;
- import org.springframework.web.client.RestTemplate;
- import java.io.File;
- import java.io.IOException;
- import java.nio.charset.StandardCharsets;
- import java.util.*;
- /**
- * <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;
- @Value("${queue.modeling.v3.modeling-pre}")
- private String queueV3ModelingPre;
- @Value("${v3.controlUrl:#{null}}")
- private String v3controlUrl;
- @Autowired
- private RedisUtil redisUtil;
- @Autowired
- private IScenePlusExtService scenePlusExtService;
- @Autowired
- private IScene3dNumService scene3dNumService;
- @Autowired
- private IScenePlusService scenePlusService;
- @Autowired
- private RabbitMqProducer rabbitMqProducer;
- @Autowired
- private ISceneProEditService sceneProEditService;
- @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;
- private RestTemplate restTemplate = new RestTemplate();
- @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));
- sceneFileBuild.setCreateTime(new Date());
- 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());
- if (cameraDetail.getCompanyId() != null) {
- Company company = companyService.getById(cameraDetail.getCompanyId());
- if (company != null && !ObjectUtils.isEmpty(company.getCalculateFlexibility()) && !company.getCalculateFlexibility()) {
- mqMessage.setFlexibility(-1);
- }
- }
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, mqMessage);
- return scenePlusVO;
- }
- public ScenePlusVO buildV3Scene(ScenePro scenePro,String fileId, String prefix,JSONObject jsonObject,String buildType,long cameraType) throws Exception{
- //调用createScene方法生成scene数据和加入算法队列
- 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);
- }
- String sceneNum = scenePro.getNum();
- if (scenePro.getStatus().equals(SceneStatus.wait.code())) {
- log.info(scenePro.getNum() + ":场景处于计算中,不能再计算");
- return null;
- }
- String localDataPath = String.format(ConstantFilePath.DATABUFFER_FORMAT, sceneNum);
- String imgViewPath = String.format(ConstantFilePath.IMAGE_PATH_FORMAT, sceneNum);
- String dataViewPath = String.format(ConstantFilePath.DATA_PATH_FORMAT, 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"));
- }
- //删除oss的houst_floor.json(国际版可能会卡住)
- fYunFileService.deleteFile(dataViewPath + "houst_floor.json");
- String algorithm = jsonObject.getString("location") != null && "1".equals(jsonObject.getString("location")) ? "sfm" : "slam";
- ScenePlusVO scenePlusVO = this.createScenePro(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"),
- jsonObject.getInteger("resolution"), firmwareVersion.toString(), buildType);
- 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());
- if (cameraDetail.getCompanyId() != null) {
- Company company = companyService.getById(cameraDetail.getCompanyId());
- if (company != null) {
- log.info("复制企业logo");
- SceneProEdit sceneEditInfo = sceneProEditService.getByProId(scenePlusVO.getId());
- if (StrUtil.isNotEmpty(company.getTopLogo())) {
- fYunFileService.copyFileInBucket(company.getTopLogo(),imgViewPath + "logo-main.png");
- }
- if (StrUtil.isNotEmpty(company.getFloorLogo())) {
- fYunFileService.copyFileInBucket(company.getFloorLogo(),imgViewPath + "floorLogoImg.png");
- sceneEditInfo.setFloorLogo("user");
- }
- if (StrUtil.isNotEmpty(company.getQrLogo())) {
- createQrCode(sceneNum,scenePlusVO.getWebSite(),company.getQrLogo());
- }
- sceneProEditService.updateById(sceneEditInfo);
- if (!ObjectUtils.isEmpty(company.getCalculateFlexibility()) && !company.getCalculateFlexibility()) {
- mqMessage.setFlexibility(-1);
- }
- }
- }
- rabbitMqProducer.sendByWorkQueue(queueV3ModelingPre, mqMessage);
- return scenePlusVO;
- }
- private void createQrCode(String num, String url, String qrLogo) {
- String localLogoPath = null;
- if (!org.apache.commons.lang3.ObjectUtils.isEmpty(qrLogo)) {
- try {
- localLogoPath = ConstantFilePath.AGENT_PATH + qrLogo.substring(qrLogo.lastIndexOf("//") + 1);
- HttpUtil.downloadFile(qrLogo, localLogoPath);
- } catch (Exception e) {
- log.error("公司logo下载失败:{}", qrLogo);
- localLogoPath = null;
- }
- }
- //生成二维码
- String outPathZh = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+ num +".png";
- String outPathEn = ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+ num +"_en.png";
- QrConfig qrConfig = QrConfig.create();
- if(!org.apache.commons.lang3.ObjectUtils.isEmpty(localLogoPath)){
- qrConfig.setImg(localLogoPath);
- }
- QrCodeUtil.generate(url, qrConfig, FileUtil.file(outPathZh));
- QrCodeUtil.generate(url + "&lang=en", qrConfig, FileUtil.file(outPathEn));
- //上传二维码
- fYunFileService.uploadFile(outPathZh, String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + num + ".png");
- fYunFileService.uploadFile(outPathEn, String.format(UploadFilePath.DOWNLOADS_QRCODE, num) + num + "_en.png");
- if(!org.apache.commons.lang3.ObjectUtils.isEmpty(localLogoPath)){
- FileUtils.deleteFile(localLogoPath);
- }
- }
- @Override
- public ResultData uploadSuccessBuild(String params) throws Exception {
- log.info("uploadSuccessBuild-params: " + params);
- String preParams = 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;
- }
- }
- ResultData ok = callV3(preParams, fdageJson,"api/scene/file/uploadSuccessBuild");
- if (ok != null) return ok;
- // 判断是否是V3的场景
- ScenePro scenePro = sceneProService.getOne(
- new LambdaQueryWrapper<ScenePro>().like(ScenePro::getDataSource, fileId));
- if (ObjectUtils.isEmpty(scenePro) || (!ObjectUtils.isEmpty(scenePro.getIsUpgrade()) && scenePro.getIsUpgrade() == 1)) {
- buildScene(fileId, prefixBuffer.toString(),fdageJson,buildType,cameraType);
- }else{
- buildV3Scene(scenePro,fileId, prefixBuffer.toString(),fdageJson,buildType,cameraType);
- }
- return ResultData.ok();
- }
- private ResultData callV3(String preParams, JSONObject fdageJson,String api) {
- String cameraName = fdageJson.getJSONObject("cam").getString("uuid");
- 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);
- }
- log.info("相机详情:{}",JSONObject.toJSONString(cameraDetail));
- // 判断是否是正顺的场景,如果是正顺的场景,则发送到原来的系统进行计算
- if (!ObjectUtils.isEmpty(cameraDetail.getCompanyId())) {
- Company company = companyService.getById(cameraDetail.getCompanyId());
- if(ObjectUtils.isEmpty(company)){
- log.error("企业配置有误:" + cameraName);
- throw new BusinessException(CameraConstant.FAILURE_6003);
- }
- if (!ObjectUtils.isEmpty(company.getSceneVersion()) && company.getSceneVersion().equals("V3")) {
- callV3Service(preParams,api);
- return ResultData.ok();
- }
- }
- return null;
- }
- public void callV3Service(String params,String api){
- log.info("params:{}", params);
- if(ObjectUtils.isEmpty(v3controlUrl)){
- log.error("未配置V3服务器!");
- return;
- }
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.MULTIPART_FORM_DATA);
- MultiValueMap<String,String> paramMap = new LinkedMultiValueMap();
- paramMap.add("params",params);
- HttpEntity<Object> formEntity = new HttpEntity<>(paramMap,headers);
- ResponseEntity<Result> responseEntity = restTemplate.postForEntity(v3controlUrl+api, formEntity, Result.class);
- if (responseEntity.getStatusCode() != HttpStatus.OK || responseEntity.getBody().getCode() != HttpStatus.OK.value()) {
- log.error("正顺场景请求V3服务器失败!");
- return;
- }
- log.info("正顺场景请求V3服务器成功!");
- }
- @Override
- public ResultData turntableUploadSuccess(String params) throws Exception {
- log.info("turntableUploadSuccess-params: " + params);
- String preParams = 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;
- }
- ResultData ok = callV3(preParams, fdageJson,"api/scene/file/turntableUploadSuccess");
- if (ok != null) return ok;
- ScenePlusVO scenePlusVO = null;
- // 判断是否是V3的场景
- ScenePro scenePro = sceneProService.getOne(
- new LambdaQueryWrapper<ScenePro>().like(ScenePro::getDataSource, fileId));
- if (ObjectUtils.isEmpty(scenePro) || (!ObjectUtils.isEmpty(scenePro.getIsUpgrade()) && scenePro.getIsUpgrade() == 1)) {
- scenePlusVO = buildScene(fileId, prefixBuffer.toString(), fdageJson, buildType, cameraType);
- } else {
- scenePlusVO = buildV3Scene(scenePro,fileId, prefixBuffer.toString(), fdageJson, buildType, cameraType);
- }
- if(ObjectUtils.isEmpty(scenePlusVO)){
- return ResultData.ok();
- }
- // 通知激光场景系统开始构建场景
- if(cameraType.longValue() == 14){
- ScenePlus scenePlus = scenePlusService.getScenePlusByNum(scenePlusVO.getNum());
- Long sceneUserId = scenePlus.getUserId();
- String userName = null;
- if(!ObjectUtils.isEmpty(sceneUserId)){
- userName = userService.getSSOUserByUserId(sceneUserId).getUserName();
- }
- //判断 是否为激光相机
- Camera camera = cameraService.getByChildName(mac);
- if(!ObjectUtils.isEmpty(scenePlus)){
- fdkkLaserService.saveScene(scenePlus,fdageJson.getString("pwd"),camera,userName,false);
- }else{
- fdkkLaserService.saveScene(scenePro,fdageJson.getString("pwd"),camera,userName,false);
- }
- }
- 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);
- if(cameraType.longValue() == 14){
- scenePlusExt.setDataSource(ConstantFilePath.BUILD_MODEL_LASER_PATH +
- cameraName.replace("4DKKPRO_", "").replace("-fdage", "").toLowerCase() + File.separator +
- fileId + File.separator + unicode);
- }else{
- scenePlusExt.setDataSource(ConstantFilePath.BUILD_MODEL_PATH +
- cameraName.replace("4DKKPRO_", "").replace("-fdage", "").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(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.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 ScenePlusVO createScenePro(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 resolution, String firmwareVersion, String buildType
- )throws Exception{
- ScenePro scene = sceneProService.getByNum(projectNum);
- SceneProEdit sceneEdit = sceneProEditService.getByProId(scene.getId());
- scene.setCameraId(cameraId);
- scene.setPhoneId(phoneId);
- scene.setNum(projectNum);
- scene.setSpace(0L);
- if (pic != null && pic.length() > 5) {
- scene.setThumb(pic);
- } else {
- scene.setThumb(ConstantUrl.DEFAULT_SCENE_PIC);
- }
- scene.setThumb(scene.getThumb().concat("?t=") + System.currentTimeMillis());
- if (!ObjectUtils.isEmpty(userName)) {
- scene.setUserId(userId);
- }
- if (sceneShootCount == null) {
- scene.setShootCount(0);
- } else {
- scene.setShootCount(sceneShootCount);
- }
- if (sceneName != null) {
- scene.setSceneName(sceneName);
- }
- if (sceneDec != null) {
- scene.setSceneDec("<p>" + new String(sceneDec.getBytes("UTF-8")) + "</p>");
- }
- if (sceneType != null) {
- scene.setSceneType(sceneType);
- }
- if (gps != null && !gps.trim().equals("")) {
- scene.setGps(gps);
- }
- scene.setAlgorithm(algorithm);
- if(!org.springframework.util.StringUtils.isEmpty(firmwareVersion)){
- scene.setFirmwareVersion(firmwareVersion);
- }
- scene.setBuildType(buildType);
- log.info("场景记录添加到数据库:"+projectNum);
- scene.setStatus(0);
- scene.setPayStatus(0);
- scene.setRecStatus("A");
- scene.setCreateTime(new Date());
- if (sceneName != null) {
- scene.setSceneName(sceneName);
- }
- if (sceneType != null) {
- scene.setSceneType(sceneType);
- }
- sceneProService.updateById(scene);
- sceneEdit.setNeedKey(0);
- if (cameraType.longValue() != 14 && !ObjectUtils.isEmpty(sceneKey)) {
- sceneEdit.setNeedKey(1);
- sceneEdit.setSceneKey(sceneKey);
- }
- sceneEdit.setProId(scene.getId());
- sceneEdit.setMapVisi(1);
- sceneEdit.setTourVisi(1);
- sceneEdit.setVrVisi(1);
- sceneEdit.setCadImgVisi(1);
- sceneEdit.setPanoVisi(1);
- sceneEdit.setOverlay(null);
- sceneEdit.setM2dVisi(1);
- sceneEdit.setPlayData(null);
- sceneEdit.setFloorLogo("0");
- sceneEdit.setM3dVisi(1);
- sceneEdit.setJumpScene(false);
- sceneEdit.setMeasureVisi(0);
- sceneEdit.setFloorLogoSize(100);
- sceneEdit.setUpdateTime(new Date());
- sceneEdit.setRecStatus("A");
- sceneEdit.setFloorPublishVer(sceneEdit.getFloorEditVer() + 1);
- sceneEdit.setFloorEditVer(sceneEdit.getFloorEditVer() + 1);
- sceneEdit.setVersion(sceneEdit.getVersion() + 1);
- sceneEdit.setImagesVersion(sceneEdit.getImagesVersion() + 1);
- sceneProEditService.updateById(sceneEdit);
- JSONObject scenejson = JSONObject.parseObject(JSONObject.toJSONString(scene));
- scenejson.put("thumbImg", 0);
- scenejson.put("version", sceneEdit.getVersion());
- scenejson.put("floorLogo", 0);
- if(!ObjectUtils.isEmpty(sceneKey)){
- scenejson.put("sceneKey", sceneKey);
- scenejson.put("public", 1);
- }else{
- scenejson.put("sceneKey", "");
- scenejson.put("public", 0);
- }
- if(cameraType.longValue() < 4 || cameraType.longValue() == 5 || cameraType.longValue() == 6){
- scenejson.put("visions", 1);
- }else {
- scenejson.put("visions", 2);
- }
- scenejson.put("createTime", new DateTime(new Date()).toString("yyyy-MM-dd HH:mm"));
- scenejson.put("floorPublishVer", sceneEdit.getFloorPublishVer());
- scenejson.put("floorEditVer", sceneEdit.getFloorEditVer());
- scenejson.put("rulerVisi", sceneEdit.getRulerVisi());
- scenejson.put("entry", null);
- if(!org.springframework.util.StringUtils.isEmpty(sceneEdit.getHotsIds())){
- scenejson.put("hots", 1);
- }
- File file = new File(ConstantFilePath.SCENE_PATH+"data/data"+projectNum);
- if(!file.exists()||!file.isDirectory())
- {
- file.mkdirs();
- }
- FileUtils.writeFile(ConstantFilePath.SCENE_PATH+"data/data"+projectNum+File.separator+"scene.json", scenejson.toString());
- //生成二维码
- MatrixToImageWriterUtil.createQRCode(scene.getWebSite(), ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+projectNum+".png",false, null);
- MatrixToImageWriterUtil.createQRCode(scene.getWebSite() + "&lang=en", ConstantFilePath.BASE_PATH + File.separator + "sceneQRcode/"+projectNum+"_en.png",false, null);
- log.info("二维码生成完成");
- ScenePlusVO scenePlusVO = new ScenePlusVO();
- scenePlusVO.setSceneStatus(scene.getStatus());
- scenePlusVO.setThumb(scene.getThumb());
- scenePlusVO.setPayStatus(scene.getPayStatus());
- scenePlusVO.setId(scene.getId());
- scenePlusVO.setNum(scene.getNum());
- scenePlusVO.setWebSite(scene.getWebSite());
- scenePlusVO.setDataSource(scene.getDataSource());
- 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));
- mqMsg.setExt(new HashMap<>());
- return mqMsg;
- }
- @Override
- public ResultData rebuildScene(String num,Boolean force,Boolean deleteExtras) throws IOException {
- ScenePro scenePro = sceneProService.getByNum(num);
- //如果是v3场景,不允许重算,需要升级v4后再调此接口进行重算
- if(Objects.nonNull(scenePro) && (Objects.isNull(scenePro.getIsUpgrade())
- || scenePro.getIsUpgrade() != CommonStatus.YES.code().intValue())){
- return rebuildV3Scene(scenePro,num,force);
- }
- 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"));
- if(ObjectUtils.isEmpty(statusJson)){
- statusJson = new JSONObject();
- }
- //临时将-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;
- }
- BuildSceneCallMessage message = null;
- if(sceneSource == 4){
- String userName = null;
- Long sceneUserId = scenePlus.getUserId();
- if (!ObjectUtils.isEmpty(sceneUserId)) {
- SSOUser user = userService.getSSOUserByUserId(sceneUserId);
- userName = user.getUserName();
- }
- Camera cameraEntity = cameraService.getById(scenePlus.getCameraId());
- fdkkLaserService.saveScene(scenePlus,null,cameraEntity,userName,true);
- message = this.getBuildSceneMqMessage(
- num, cameraType,
- fdageData.getString("location") != null && "1".equals(fdageData.getString("location")) ? "sfm" : "slam",
- fdageData.getInteger("resolution"), buildType, path);
- }else{
- message = this.getBuildSceneMqMessage(
- num, cameraType, fdageData.getString("location") != null && "1".equals(fdageData.getString("location")) ? "sfm" : "slam",
- fdageData.getInteger("resolution"), buildType,
- path);
- }
- if(deleteExtras){
- message.getExt().put("deleteExtras",deleteExtras);
- }
- rabbitMqProducer.sendByWorkQueue(queueModelingPre, message);
- scenePlusService.update(new LambdaUpdateWrapper<ScenePlus>()
- .set(ScenePlus::getSceneStatus, SceneStatus.wait.code())
- .eq(ScenePlus::getNum, num));
- return ResultData.ok();
- }
- public ResultData rebuildV3Scene(ScenePro scenePro,String num,Boolean force) throws IOException {
- if (scenePro.getStatus() == 0 && (ObjectUtils.isEmpty(force) || !force)) {
- throw new BusinessException(ErrorCode.FAILURE_CODE_5033);
- }
- String path = scenePro.getDataSource();
- Integer sceneSource = scenePro.getSceneSource();
- String buildType = scenePro.getBuildType();
- Integer sceneScheme = scenePro.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());
- }
- String statusJsonOssPath = String.format(ConstantFilePath.DATA_PATH_FORMAT, num) + "status.json";
- JSONObject statusJson = JSONObject.parseObject(fYunFileService.getFileContent(statusJsonOssPath));
- if (ObjectUtils.isEmpty(statusJson)) {
- statusJson = new JSONObject();
- }
- //临时将-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) {
- String userName = null;
- Long sceneUserId = scenePro.getUserId();
- if (!ObjectUtils.isEmpty(sceneUserId)) {
- SSOUser user = userService.getSSOUserByUserId(sceneUserId);
- userName = user.getUserName();
- }
- Camera cameraEntity = cameraService.getById(scenePro.getCameraId());
- fdkkLaserService.saveScene(scenePro, null, cameraEntity, userName, true);
- BuildSceneCallMessage buildSceneMqMessage = this.getBuildSceneMqMessage(
- num, cameraType,
- fdageData.getString("location") != null && "1".equals(fdageData.getString("location")) ? "sfm" : "slam",
- fdageData.getInteger("resolution"), buildType, path);
- rabbitMqProducer.sendByWorkQueue(queueV3ModelingPre, 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(queueV3ModelingPre, buildSceneMqMessage);
- }
- //重算的场景,先移除该场景对应的容量
- sceneProService.update(new LambdaUpdateWrapper<ScenePro>()
- .set(ScenePro::getStatus, SceneStatus.wait.code())
- .set(ScenePro::getSpace,0)
- .eq(ScenePro::getNum, num));
- return ResultData.ok();
- }
- }
|