package com.fdkankan.fusion.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.util.SceneTypeUtil; import com.fdkankan.fusion.entity.*; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.common.PageInfo; import com.fdkankan.fusion.httpClient.FdService; import com.fdkankan.fusion.httpClient.client.FdKKClient; import com.fdkankan.fusion.httpClient.client.LaserClient; import com.fdkankan.fusion.httpClient.request.LaserSceneParam; import com.fdkankan.fusion.httpClient.response.FdkkResponse; import com.fdkankan.fusion.request.ScenePram; import com.fdkankan.fusion.response.SceneProEntityVo; import com.fdkankan.fusion.response.SceneVo; import com.fdkankan.fusion.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Case; import org.aspectj.weaver.ast.And; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.IOException; import java.nio.file.FileStore; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; @Service @Slf4j public class SceneCommonService implements ISceneCommonService { @Resource FdKKClient fdKKClient; @Resource LaserClient laserClient; @Autowired IModelService modelService; @Autowired FdService fdService; @Autowired ITmDepartmentService tmDepartmentService; @Autowired ITmCameraService tmCameraService; @Autowired ICaseService caseService; @Autowired ITmProjectService tmProjectService; @Autowired ICaseNumService caseNumService; @Autowired IMqSendLogService mqSendLogService; @Override public List getSceneListAndModel(ScenePram param) { PageInfo pageInfo = this.pageList(param); List listAll = (List) pageInfo.getList(); if(listAll.size() >0){ List numList = listAll.parallelStream().map(SceneVo::getNum).collect(Collectors.toList()); //设置模型 HashMap map = modelService.getMapByNum(numList); for (SceneVo sceneVo : listAll) { String createTime = sceneVo.getCreateTime(); Model model = map.get(sceneVo.getNum() + sceneVo.getType()); if(model == null){ continue; } BeanUtils.copyProperties(model,sceneVo); sceneVo.setCreateTime(createTime); } } return listAll; } @Autowired ISceneService sceneService; @Autowired ISceneFileBuildService sceneFileBuildService; @Override public PageInfo pageList(ScenePram param) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(StringUtils.isNotBlank(param.getSceneName())){ wrapper.like(Scene::getTitle,param.getSceneName()); } if(param.getIsObj() != null && param.getIsObj() == 0){ //点云场景 wrapper.in(Scene::getSceneSource,SceneTypeUtil.getSceneSourceList(0)); } if(param.getIsObj() != null && param.getIsObj() == 1){ //mesh场景 wrapper.and((wq)-> wq.notIn(Scene::getBuildObjStatus,0) .or() .notIn(Scene::getSceneSource,SceneTypeUtil.getSceneSourceList(0))); } if(param.getNumList() != null && !param.getNumList().isEmpty()){ wrapper.in(Scene::getSceneCode,param.getNumList()); } if(param.getStatus() != null){ wrapper.eq(Scene::getStatus,param.getStatus()); } wrapper.orderByDesc(Scene::getId); Page page = sceneService.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper); List numList = page.getRecords().parallelStream().map(Scene::getSceneCode).collect(Collectors.toList()); HashMap mapByNumList = caseNumService.getMapByNumList(numList); HashMap buildTimeByScene = sceneFileBuildService.getBuildTimeByScene(numList); List sceneVoList = new ArrayList<>(); for (Scene scene : page.getRecords()) { SceneVo vo = new SceneVo(); vo.setId(scene.getId()); vo.setBuildObjStatus(scene.getBuildObjStatus()); vo.setCreateTime(scene.getCreateTime()); vo.setShootTime(scene.getShootStartTime()); vo.setName(scene.getTitle()); vo.setNum(scene.getSceneCode()); vo.setPayStatus(1); vo.setSceneName(scene.getTitle()); vo.setSnCode(scene.getSnCode().toUpperCase()); vo.setThumb(scene.getInitPic()); vo.setTitle(scene.getTitle()); vo.setViewCount(scene.getViewCount()); vo.setType(setSceneType(scene.getSceneSource(),param.getIsObj())); vo.setIsLaser(SceneTypeUtil.isLaser(vo.getType())); vo.setPhone(scene.getUserName()); vo.setBind(true); vo.setLocation(scene.getLocation()); vo.setInFusion(false); vo.setSceneSize(scene.getSpace()); vo.setMapping(scene.getMapping()); vo.setWebPath(scene.getWebPath()); //vo.setOrientation(); //vo.setRtkLocation(); if(mapByNumList.get(vo.getNum() +"_"+ vo.getType())!=null){ vo.setInCase(true); } // "buildScene":"buildObj"; SceneFileBuild sceneFileBuild = null; if(!vo.getIsLaser()){ sceneFileBuild = buildTimeByScene.get(vo.getNum() + "buildScene"); }else { String buildType = param.getIsObj() == null || param.getIsObj() == 0 ? "buildScene" : "buildObj"; sceneFileBuild = buildTimeByScene.get(vo.getNum() + buildType); } if(sceneFileBuild!= null && sceneFileBuild.getEndBuildTime()!=null){ vo.setAlgorithmTime(sceneFileBuild.getEndBuildTime()); } //状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3待计算 4生成OBJ中 5 暂停 6排队中 7,复制中 if(vo.getIsLaser() && param.getIsObj() != null && param.getIsObj() == 0){ vo.setStatus(scene.getStatus() ); }else { //生成OBJ状态,-1失败 0,未生成 1完成,2计算中 3,排队中 4,暂停 if(SceneTypeUtil.isLaserMesh(vo.getType()) && scene.getBuildObjStatus() != null){ switch (scene.getBuildObjStatus()){ case -1: vo.setStatus(1); break; case 0: vo.setStatus(3); break; case 1: vo.setStatus(2); break; case 2: vo.setStatus(0); break; case 3: vo.setStatus(6); break; case 4: vo.setStatus(5); break; default: vo.setStatus(scene.getStatus() ); } }else { vo.setStatus(scene.getStatus() ); } } sceneVoList.add(vo); } Page voPage = new Page<>(param.getPageNum(),param.getPageSize()); voPage.setRecords(sceneVoList); voPage.setTotal(page.getTotal()); return PageInfo.PageInfo(voPage); } private Integer setSceneType(Integer sceneSource,Integer isObj) { if(sceneSource == 3 ){ return 1; } if(sceneSource == 4 && isObj ==0){ return 2; } if(sceneSource == 4 && isObj ==1){ return 4; } if(sceneSource == 5 && isObj ==0){ return 5; } if(sceneSource == 5 && isObj ==1){ return 6; } return 0; } /** * 四维看看返回数据格式转换 */ private List overSceneVo(JSONArray list,Integer type) { List sceneVoList = new ArrayList<>(); for (Object obj : list) { String res = JSONObject.toJSONString(obj); SceneProEntityVo fdkkScenePlusVo = JSONObject.parseObject(res, SceneProEntityVo.class); SceneVo sceneVo = new SceneVo(); sceneVo.setId(fdkkScenePlusVo.getId()); sceneVo.setBuildObjStatus(0); sceneVo.setCreateTime(fdkkScenePlusVo.getCreateTime()); sceneVo.setName(fdkkScenePlusVo.getSceneName()); sceneVo.setNum(fdkkScenePlusVo.getNum()); sceneVo.setPayStatus(1); sceneVo.setSceneName(fdkkScenePlusVo.getSceneName()); sceneVo.setSnCode(fdkkScenePlusVo.getSnCode()); sceneVo.setStatus(setLaserStatus(fdkkScenePlusVo.getStatus(),fdkkScenePlusVo.getPayStatus())); sceneVo.setThumb(fdkkScenePlusVo.getThumb()); sceneVo.setTitle(fdkkScenePlusVo.getSceneName()); sceneVo.setViewCount(fdkkScenePlusVo.getViewCount()); sceneVo.setIsLaser(false); sceneVo.setType(type); sceneVo.setOrientation(fdkkScenePlusVo.getOrientation()); sceneVo.setRtkLocation(fdkkScenePlusVo.getRtkLocation()); if(fdkkScenePlusVo.getUserId()== null){ sceneVo.setBind(false); } sceneVoList.add(sceneVo); } return sceneVoList; } /** * 四维看看返回数据格式转换 private List overSceneVo(JSONArray list) { List sceneVoList = new ArrayList<>(); for (Object obj : list) { String res = JSONObject.toJSONString(obj); FdkkScenePlusVo fdkkScenePlusVo = JSONObject.parseObject(res,FdkkScenePlusVo.class); SceneVo sceneVo = new SceneVo(); sceneVo.setId(fdkkScenePlusVo.getId()); sceneVo.setBuildObjStatus(0); sceneVo.setCreateTime(fdkkScenePlusVo.getCreateTime()); sceneVo.setName(fdkkScenePlusVo.getTitle()); sceneVo.setNum(fdkkScenePlusVo.getNum()); sceneVo.setPayStatus(1); sceneVo.setSceneName(fdkkScenePlusVo.getTitle()); sceneVo.setSnCode(fdkkScenePlusVo.getSnCode()); sceneVo.setStatus(setLaserStatus(fdkkScenePlusVo.getSceneStatus(),fdkkScenePlusVo.getPayStatus())); sceneVo.setThumb(fdkkScenePlusVo.getPlusExt().getThumb()); sceneVo.setTitle(fdkkScenePlusVo.getTitle()); sceneVo.setViewCount(fdkkScenePlusVo.getPlusExt().getViewCount()); sceneVo.setIsLaser(false); sceneVo.setType(fdkkScenePlusVo.getSceneType()); sceneVoList.add(sceneVo); } return sceneVoList; } */ private Integer setLaserStatus(Integer status,Integer payStatus){ //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中 if(status == 0){ return 0; } if(payStatus != 1){ //封存 return 3; } if(status == -1){ return 1; } if(status == -2){ return 2; } return status; } @Override public Object getFdTokenByNum(String num) { if(StringUtils.isBlank(num)){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } return fdService.getFdTokenByNum(num); } @Override public void deleteNum(String num) { if(StringUtils.isBlank(num)){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } List caseNumEntities = caseNumService.getByNum(num); if(caseNumEntities.size() >0){ CaseNumEntity caseNumEntity = caseNumEntities.get(0); CaseEntity caseEntity = caseService.getById(caseNumEntity.getCaseId()); throw new BusinessException(ResultCode.CASE_USE.code, String.format(ResultCode.CASE_USE.msg,caseEntity.getCaseTitle())); } fdService.deleteNum(num); } @Override public void buildSceneObj(LaserSceneParam param) { fdService.buildSceneObj(param); } @Override public Object sceneDetail(LaserSceneParam param) { return fdService.sceneDetail(param); } @Override public void copyScene(ScenePram param) { if(StringUtils.isEmpty(param.getNum())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } fdService.copyScene(param.getNum()); } }