package com.fdkankan.fusion.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONPObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.fusion.common.FilePath; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.util.FileWriterUtil; import com.fdkankan.fusion.common.util.RedisKeyUtil; import com.fdkankan.fusion.common.util.ShellUtil; 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.httpClient.response.FdkkScenePlusVo; 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.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.File; import java.security.Security; import java.util.*; import java.util.stream.Collectors; @Service @Slf4j public class SceneService implements ISceneService { @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; @Autowired IScenePlusService scenePlusService; @Autowired ITmUserService tmUserService; @Autowired IUploadChunkService uploadChunkService; @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 ITmUserRoleService tmUserRoleService; @Autowired ITmRoleService tmRoleService; @Override public PageInfo pageList(ScenePram param) { if (param.getType() == null) { throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } Boolean hasSon = false; if (StringUtils.isBlank(param.getShare()) && StringUtils.isNotBlank(StpUtil.getTokenValue())) { TmUser loginUser = tmUserService.getLoginUser(); TmRole byUserId = tmRoleService.getByUserId(loginUser.getId()); if(!byUserId.getRoleKey().equals("admin-ordinary")){ hasSon = true; } if(StringUtils.isBlank(param.getDeptId())){ param.setDeptId(tmUserService.getLoginUser().getDeptId()); } } if (param.getCaseId() != null) { hasSon = false; String deptId = caseService.getDeptId(param.getCaseId()); param.setDeptId(deptId); } if (StringUtils.isNotBlank(param.getDeptId())) { List deptIds = new ArrayList<>(); if(hasSon){ List sonByDeptId = tmDepartmentService.getSonByDeptId(param.getDeptId()); deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList()); } deptIds.add(param.getDeptId()); List byDeptIds = tmUserService.getByDeptIds(deptIds); if(byDeptIds.isEmpty()){ return PageInfo.PageInfo(new Page<>(param.getPageNum(),param.getPageSize())); } List userNames = byDeptIds.stream().map(TmUser::getUserName).collect(Collectors.toList()); if(userNames.isEmpty()){ return PageInfo.PageInfo(new Page<>(param.getPageNum(),param.getPageSize())); } param.setUserNames(userNames); } if((param.getType() == 2 || param.getType() == 5 || param.getType() == 7) && StringUtils.isNotBlank(param.getSceneName())){ List laserList = scenePlusService.getLaserSceneByName(param.getSceneName()); List numList = new ArrayList<>(); for (JSONObject jsonObject : laserList) { numList.add(jsonObject.getString("scene_code")); } if(!numList.isEmpty()){ param.setNumList(numList); } } //上传的场景 Page sceneVoPage; if(param.getType() == 7 || param.getType() == 8 ){ sceneVoPage = uploadChunkService.getScenePageList(new Page<>(param.getPageNum(),param.getPageSize()),param); for (SceneVo record : sceneVoPage.getRecords()) { if(record.getSceneId() != null){ record.setTitle(record.getSceneName()); } record.setIsLaser(param.getType() == 7); } }else { sceneVoPage = scenePlusService.pageList(new Page<>(param.getPageNum(), param.getPageSize()), param); } HashMap laserMap = new HashMap<>(); if(param.getType() == 2 || param.getType() == 5 || param.getType() == 7){ List laserNumList = sceneVoPage.getRecords().stream().filter(e->e.getSceneSource() != null && ( e.getSceneSource() == 4 || e.getSceneSource() == 5 || e.getSceneSource() == 57)) .map(SceneVo::getNum).collect(Collectors.toList()); if(!laserNumList.isEmpty()){ List laserList = scenePlusService.getLaserScene(laserNumList); laserList.forEach(e->laserMap.put(e.getString("scene_code"),e)); } } HashMap modelingMap = new HashMap<>(); List modelingScene = sceneVoPage.getRecords().stream().filter(e -> e.getStatus() != null && e.getStatus() == 0).map(SceneVo::getNum).collect(Collectors.toList()); modelingMap = mqSendLogService.getMapByNumList(modelingScene); List userNameList = sceneVoPage.getRecords().stream().map(Model::getUserName).collect(Collectors.toList()); HashMap map = tmUserService.getMapByUserNames(userNameList); HashMap mapUser = tmUserService.getUserMapByUserNames(userNameList); for (SceneVo sceneVo : sceneVoPage.getRecords()) { TmUser tmUser = mapUser.get(sceneVo.getUserName()); if(tmUser != null){ sceneVo.setNickName(tmUser.getNickName()); } TmDepartment tmDepartment = map.get(sceneVo.getUserName()); if (tmDepartment != null) { sceneVo.setDeptId(tmDepartment.getId()); sceneVo.setDeptName(tmDepartment.getName()); } if(param.getType() == 2 || param.getType() == 5 || param.getType() == 7){ // JSONObject jsonObject = laserMap.get(sceneVo.getNum()); if(jsonObject != null){ sceneVo.setTitle(jsonObject.getString("title")); sceneVo.setStatus(jsonObject.getInteger("status")); } }else { sceneVo.setStatus(setLaserStatus(sceneVo.getStatus(),sceneVo.getPayStatus())); } if(modelingMap.get(sceneVo.getNum()) != null && !modelingMap.get(sceneVo.getNum())){ sceneVo.setStatus(5); } sceneVo.setPayStatus(1); sceneVo.setSceneName(sceneVo.getTitle()); sceneVo.setName(sceneVo.getTitle()); sceneVo.setType(param.getType()); if(StringUtils.isNotBlank(sceneVo.getFileSize())){ sceneVo.setFileSize(FileWriterUtil.setFileSize(Long.valueOf(sceneVo.getFileSize()))); } } return PageInfo.PageInfo(sceneVoPage); } /** * 四维看看返回数据格式转换 */ 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); 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 == null){ return null; } if(status == 0){ return 0; } if(payStatus != null && 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,Integer uploadId) { if(StringUtils.isBlank(num) && uploadId == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if(StringUtils.isNotBlank(num)){ 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())); } ScenePlus byNum = scenePlusService.getByNum(num); if(byNum.getSourceId() != null){ scenePlusService.updateSourceId(byNum.getId(),null); } fdService.deleteNum(num); } if( uploadId != null){ UploadChunk uploadChunk = uploadChunkService.getById(uploadId); if(uploadChunk != null){ uploadChunkService.removeById(uploadId); } } } @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); } ScenePlus byNum = scenePlusService.getByNum(param.getNum()); Integer sourceId = null; if(byNum.getSourceId() != null){ UploadChunk uploadChunk = uploadChunkService.getById(byNum.getSourceId()); uploadChunk.setId(null); uploadChunk.setTitle(uploadChunk.getTitle() +"(copy)"); uploadChunkService.save(uploadChunk); sourceId = uploadChunk.getId(); } fdService.copyScene(param.getNum(),sourceId); } }