123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- package com.fdkankan.contro.service.impl;
- import cn.hutool.core.io.FileUtil;
- import com.alibaba.fastjson.JSONObject;
- import com.fdkankan.common.constant.CommonStatus;
- import com.fdkankan.common.constant.SceneStatus;
- import com.fdkankan.common.constant.SceneVersionType;
- import com.fdkankan.common.util.DateUtil;
- import com.fdkankan.common.util.FileUtils;
- import com.fdkankan.contro.bean.SyncLaserResultBean;
- import com.fdkankan.contro.entity.*;
- import com.fdkankan.contro.service.*;
- import com.fdkankan.fyun.face.FYunFileServiceInterface;
- import com.fdkankan.rabbitmq.util.RabbitMqProducer;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.cloud.context.config.annotation.RefreshScope;
- import org.springframework.stereotype.Service;
- import org.springframework.util.ObjectUtils;
- import javax.annotation.Resource;
- import java.io.File;
- import java.io.IOException;
- import java.util.*;
- @Service
- @Slf4j
- @RefreshScope
- public class IFdkkLaserServiceImpl implements IFdkkLaserService {
- @Autowired
- private ISceneProService sceneProService;
- @Autowired
- private IScenePlusService scenePlusService;
- @Autowired
- private IScenePlusExtService scenePlusExtService;
- @Autowired
- private RabbitMqProducer rabbitMqProducer;
- @Value("${queue.application.laser.update-scene}")
- private String updateScene;
- @Value("${queue.application.laser.init-scene:laser-init-scene}")
- private String initScene;
- @Value("${queue.application.laser.update-build-status}")
- private String updateBuildStatus;
- @Value("${queue.application.laser.cloud-point-build}")
- private String cloudPointBuild;
- @Value("${4dkk.laserService.bucket}")
- private String bucket;
- @Value("${4dkk.laserService.cloud-point-fyun-path}")
- private String cloudPointFyunPath;
- @Autowired
- private IUserService userService;
- @Resource
- private FYunFileServiceInterface fYunFileService;
- public void syncBuildResult(SyncLaserResultBean laserResultBean) {
- log.info("激光转台相机构建结果 同步 请求 ");
- try {
- String num = laserResultBean.getNum();
- String dataSource = laserResultBean.getDataSource();
- Integer sceneStatus = laserResultBean.getSceneStatus();
- Date createTime = laserResultBean.getCreateTime();
- Integer shootCount = laserResultBean.getShootCount();
- Integer payStatus = laserResultBean.getPayStatus();
- Boolean mixture = laserResultBean.getMixture() == CommonStatus.NO.code().intValue() ? false : true;
- String version = SceneVersionType.V4.code();
- String jgPath = dataSource;
- //创建目录
- if (dataSource.lastIndexOf("/") != -1) {
- jgPath = jgPath + "_laserData";
- } else {
- jgPath = jgPath.substring(0, jgPath.length() - 1) + "_laserData";
- }
- FileUtils.createDir(jgPath + "/extras");
- log.info("生成 激光相机目录 " + jgPath);
- //生成data.json
- JSONObject jgDataJson = new JSONObject();
- jgDataJson.put("split_type", "SPLIT_V15");
- jgDataJson.put("skybox_type", "SKYBOX_V5");
- jgDataJson.put("extras", null);
- FileUtils.writeFile(jgPath + File.separator + "data.json", jgDataJson.toString());
- // result/mesh/mesh.obj --> jgPath/laserData/laser.obj
- log.info("开始拷贝obj文件");
- FileUtils.copyDirectiory(dataSource + "/results/mesh", jgPath + "/laserData/mesh");
- FileUtils.copyDirectiory(dataSource + "/results/laserData/cover", jgPath + "/extras");
- //删除旧的深度图
- if(FileUtil.exist( jgPath+"/laserData/depthmap/")){
- FileUtil.del(jgPath+"/laserData/depthmap/");
- }
- FileUtils.copyFile(dataSource + "/results/laserData", jgPath, true);
- // updateSceneStatus(scenePlus, scenePlusExt, jgPath + File.separator + "laserData",createTime, algorithmTime, scenePlusExt);
- Map<String, Object> params = new HashMap<>();
- params.put("sceneCode", num);
- params.put("status", sceneStatus);
- params.put("version",version);
- params.put("createTime", DateUtil.date2String(createTime, null));
- params.put("algorithmTime", DateUtil.date2String(Calendar.getInstance().getTime(), null));
- params.put("path", jgPath + File.separator + "laserData");
- params.put("shootCount", shootCount);
- params.put("payStatus", payStatus);
- params.put("mixture", mixture);
- rabbitMqProducer.sendByWorkQueue(updateScene, params);
- } catch (Exception e) {
- log.error("激光转台相机同步失败", e);
- }
- }
- @Override
- public void pushBuildStatusToLaserSystem(String projectNum, String laserObjFilePath, Integer buildObjStatus) {
- Map<String, Object> params = new HashMap<>();
- params.put("sceneCode", projectNum);
- params.put("objPath", laserObjFilePath);
- params.put("buildObjStatus", buildObjStatus);
- rabbitMqProducer.sendByWorkQueue(updateBuildStatus, params);
- }
- public void saveScene(ScenePlus scenePlus, JSONObject fdageJson, Camera cameraEntity, String phone, boolean rebuild, Integer payStatus) {
- Map<String, Object> params = new HashMap<>();
- params.put("childName", cameraEntity.getChildName());
- params.put("createTime", DateUtil.date2String(scenePlus.getCreateTime(), null));
- params.put("phone", phone);
- params.put("sceneCode", scenePlus.getNum());
- params.put("snCode", cameraEntity.getSnCode());
- params.put("status", scenePlus.getSceneStatus());
- if (!rebuild) {
- if(Objects.nonNull(fdageJson)){
- params.put("password", fdageJson.getString("pwd"));
- }
- } else {
- params.put("status", 4);
- }
- params.put("version",getSceneVersion(scenePlus.getNum()));
- params.put("title", scenePlus.getLaserTitle());
- params.put("userId", scenePlus.getUserId());
- params.put("sceneSource", scenePlus.getSceneSource());
- if(Objects.nonNull(fdageJson)){
- params.put("location", fdageJson.getInteger("location"));
- }
- params.put("payStatus", payStatus);
- rabbitMqProducer.sendByWorkQueue(initScene, params);
- }
- public void saveScene(ScenePro scenePro, String scenePassword, Camera cameraEntity, String phone, boolean rebuild, Integer payStatus) {
- Map<String, Object> params = new HashMap<>();
- params.put("childName", cameraEntity.getChildName());
- if(ObjectUtils.isEmpty(scenePro.getCreateTime())){
- scenePro.setCreateTime(new Date());
- }
- params.put("createTime", DateUtil.date2String(scenePro.getCreateTime(), null));
- params.put("phone", phone);
- params.put("sceneCode", scenePro.getNum());
- params.put("snCode", cameraEntity.getSnCode());
- params.put("status", scenePro.getStatus());
- if (!rebuild) {
- params.put("password", scenePassword);
- } else {
- params.put("status", 4);
- }
- params.put("version",getSceneVersion(scenePro.getNum()));
- params.put("title", scenePro.getSceneName());
- params.put("userId", scenePro.getUserId());
- params.put("payStatus", payStatus);
- rabbitMqProducer.sendByWorkQueue(initScene, params);
- }
- private String getSceneVersion(String num) {
- String version = "V3";
- ScenePro scenepro = sceneProService.getByNum(num);
- if (scenepro == null || scenepro.getIsUpgrade() == 1) {
- ScenePlus plus = scenePlusService.getScenePlusByNum(num);
- if (plus != null) {
- version = "V4";
- }
- }
- return version;
- }
- @Override
- public void cloudPointBuild(String sceneCode, String path) {
- log.info("开始同步点云编辑文件");
- // 删除旧的文件及目录
- try {
- fYunFileService.deleteFile(cloudPointFyunPath + "vision_edit.txt");
- fYunFileService.deleteFolder(cloudPointFyunPath + "uuidcloud");
- } catch (IOException e) {
- log.error("删除文件失败", e);
- e.printStackTrace();
- }
- // 上传点云编辑文件,并通知激光系统
- log.info("开始上传点云文件,bucket:{}", bucket);
- fYunFileService.uploadFile(bucket,path + "/results/laserData/vision_edit.txt", String.format(cloudPointFyunPath,sceneCode,sceneCode) + "vision_edit.txt");
- fYunFileService.uploadFileByCommand(bucket,path + "/results/laserData/uuidcloud", String.format(cloudPointFyunPath,sceneCode,sceneCode) + "uuidcloud");
- Map<String, Object> params = new HashMap<>();
- params.put("sceneNum", sceneCode);
- params.put("businessType", 0);
- rabbitMqProducer.sendByWorkQueue(cloudPointBuild, params);
- }
- public void sendE57ToLaser(ScenePlus scenePlus, ScenePlusExt scenePlusExt, String path) {
- User user = userService.getById(scenePlus.getUserId());
- Map<String, Object> params = new HashMap<>();
- params.put("createTime", DateUtil.date2String(scenePlus.getCreateTime(), null));
- params.put("phone", user.getUserName());
- params.put("sceneCode", scenePlus.getNum());
- params.put("status", -scenePlus.getSceneStatus());
- params.put("version",getSceneVersion(scenePlus.getNum()));
- params.put("title", scenePlus.getTitle());
- params.put("userId", scenePlus.getUserId());
- params.put("sceneSource", scenePlus.getSceneSource());
- params.put("location", scenePlusExt.getLocation());
- params.put("payStatus", scenePlus.getPayStatus());
- params.put("shootCount", scenePlusExt.getShootCount());
- params.put("path", path);
- Date algorithmTime = new Date();
- if(Objects.nonNull(scenePlusExt.getAlgorithmTime())){
- algorithmTime = scenePlusExt.getAlgorithmTime();
- }
- params.put("algorithmTime", DateUtil.date2String(algorithmTime, null));
- if(scenePlus.getSceneStatus() == SceneStatus.wait.code()){
- rabbitMqProducer.sendByWorkQueue("laser-e57-init-scene", params);
- }
- if(scenePlus.getSceneStatus() == SceneStatus.NO_DISPLAY.code() || scenePlus.getSceneStatus() == SceneStatus.FAILD.code()){
- rabbitMqProducer.sendByWorkQueue("laser-e57-update-scene", params);
- }
- }
- public void sendRebuildE57ToLaser(ScenePlus scenePlus) {
- User user = userService.getById(scenePlus.getUserId());
- Map<String, Object> params = new HashMap<>();
- params.put("sceneCode", scenePlus.getNum());
- params.put("status", SceneStatus.wait.code());
- rabbitMqProducer.sendByWorkQueue("laser-e57-update-scene", params);
- }
- public String syncBuildResult4E57(String dataSource) {
- log.info("激光转台相机构建结果 同步 请求 ");
- try {
- String jgPath = dataSource;
- //创建目录
- if (dataSource.lastIndexOf("/") != -1) {
- jgPath = jgPath + "_laserData";
- } else {
- jgPath = jgPath.substring(0, jgPath.length() - 1) + "_laserData";
- }
- FileUtils.createDir(jgPath + "/extras");
- log.info("生成 激光相机目录 " + jgPath);
- //生成data.json
- JSONObject jgDataJson = new JSONObject();
- jgDataJson.put("split_type", "SPLIT_V15");
- jgDataJson.put("skybox_type", "SKYBOX_V5");
- jgDataJson.put("extras", null);
- FileUtils.writeFile(jgPath + File.separator + "data.json", jgDataJson.toString());
- // result/mesh/mesh.obj --> jgPath/laserData/laser.obj
- log.info("开始拷贝obj文件");
- FileUtils.copyDirectiory(dataSource + "/results/mesh", jgPath + "/laserData/mesh");
- FileUtils.copyDirectiory(dataSource + "/results/laserData/cover", jgPath + "/extras");
- //删除旧的深度图
- if(FileUtil.exist( jgPath+"/laserData/depthmap/")){
- FileUtil.del(jgPath+"/laserData/depthmap/");
- }
- FileUtils.copyFile(dataSource + "/results/laserData", jgPath, true);
- return jgPath + "/laserData";
- } catch (Exception e) {
- log.error("激光转台相机同步失败", e);
- }
- return null;
- }
- }
|