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.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.fusion.common.FilePath; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.util.*; 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.LaserService; 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 { @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 ISceneDeptShareService sceneDeptShareService; @Autowired IScenePlusService scenePlusService; @Autowired ICameraService cameraService; @Autowired ITmRoleService tmRoleService; @Autowired LaserService laserService; @Override public PageInfo pageList(ScenePram param) { String deptId = tmDepartmentService.getDeptId(); HashMap shareHashMap = new HashMap<>(); List deptIds = new ArrayList<>(); if(param.getSearchType() == 0){ //当前组织下场景 deptIds.add(deptId); } if(param.getSearchType() == 1){ //下级共享给上级场景 List numList = sceneDeptShareService.getNumListByDeptId(deptId,param.getIsObj()); if(numList == null || numList.isEmpty()){ return PageInfo.PageInfoEmpty(); } numList.forEach(e -> shareHashMap.put(e.getNum()+e.getIsObj(),e)); param.setNumList(numList.stream().map(SceneDeptShare::getNum).collect(Collectors.toList())); List sonByDeptId = tmDepartmentService.getSonByDeptId(deptId); deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList()); if(deptIds.isEmpty()){ return PageInfo.PageInfoEmpty(); } } if(param.getSearchType() == 2){ //当前组织及下级组织的数据 List sonByDeptId = tmDepartmentService.getSonByDeptId(deptId); deptIds.add(deptId); deptIds.addAll(sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList())); } if(StringUtils.isNotBlank(param.getDeptId())){ if(!deptIds.contains(param.getDeptId())){ return PageInfo.PageInfoEmpty(); }else { deptIds = Arrays.asList(param.getDeptId()); } } if(deptIds.isEmpty()){ return PageInfo.PageInfoEmpty(); } List tmCameraList = tmCameraService.getByDeptIds(deptIds); List collect = tmCameraList.stream().map(TmCamera::getCameraSn).collect(Collectors.toList()); param.setSnCodes(collect); if(param.getSnCodes().isEmpty() ){ return PageInfo.PageInfoEmpty(); } Page sceneVoPage = scenePlusService.sceneList(param); HashMap laserMap = new HashMap<>(); if(param.getIsObj() == 0){ HashMap> numMap = new HashMap<>(); for (SceneVo record : sceneVoPage.getRecords()) { numMap.computeIfAbsent(record.getSceneSource(), k -> new ArrayList<>()); numMap.get(record.getSceneSource()).add(record.getNum()); } for (Integer sceneSource : numMap.keySet()) { HashMap map = laserService.list(numMap.get(sceneSource),sceneSource); for (String key : map.keySet()) { laserMap.put(key,map.get(key)); } } } List sceneVoList = sceneVoPage.getRecords(); Set snCodes = sceneVoList.stream().map(SceneVo::getSnCode).collect(Collectors.toSet()); List modelingScene = sceneVoList.stream().filter(e -> e.getStatus() == 0).collect(Collectors.toList()); List numList = modelingScene.stream().map(SceneVo::getNum).collect(Collectors.toList()); HashMap modelingMap = mqSendLogService.getMapByNumList(numList); HashMap map = tmCameraService.getMapBySnCodes(snCodes); for (SceneVo sceneVo : sceneVoList) { if(param.getIsObj() == 0){ JSONObject ssObj = laserMap.get(sceneVo.getNum()); if(ssObj!=null) { sceneVo.setSceneName(sceneVo.getLaserTitle()); sceneVo.setThumb(ssObj.getString("thumb")); sceneVo.setWebSite(ssObj.getString("webSite")); sceneVo.setViewCount(ssObj.getInteger("viewCount")); sceneVo.setStatus(ssObj.getInteger("status")); sceneVo.setName(sceneVo.getSceneName()); sceneVo.setTitle(sceneVo.getSceneName()); sceneVo.setId(ssObj.getLong("id")); }else if(sceneVo.getStatus() != 0){ sceneVo.setStatus(-1); sceneVo.setWebSite(null); } }else { sceneVo.setStatus(setLaserStatus(sceneVo.getStatus(),sceneVo.getPayStatus())); } sceneVo.setIsObj(param.getIsObj()); TmDepartment tmDepartment = map.get(sceneVo.getSnCode().toUpperCase()); if(tmDepartment != null){ sceneVo.setDeptId(tmDepartment.getId()); sceneVo.setDeptName(tmDepartment.getName()); } sceneVo.setType(CameraUtil.getTypeByCameraType(sceneVo.getCameraType(),param.getIsObj())); if(sceneVo.getStatus() == 0 && modelingMap.get(sceneVo.getNum()) != null && !modelingMap.get(sceneVo.getNum())){ sceneVo.setStatus(5); } if(param.getSearchType() == 1){ SceneDeptShare sceneDeptShare = shareHashMap.get(sceneVo.getNum() + sceneVo.getIsObj()); if(sceneDeptShare != null){ sceneVo.setIsAuth(sceneDeptShare.getIsAuth()); } }else { sceneVo.setIsAuth(2); } } return PageInfo.PageInfo(sceneVoPage); } private Integer setLaserStatus(Integer status,Integer payStatus){ //深时状态,-1:场景被删 0:计算中 1计算失败 2计算成功 3封存 4生成OBJ中 ,5排队 if(status == 0){ return 0; } if(status == -1){ return 1; } if(payStatus != 1){ //封存 return 3; } if(status == -2){ return 2; } return status; } @Override public Object getFdTokenByNum(String num,Integer isObj) { if(StringUtils.isBlank(num)){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } sceneDeptShareService.checkNum(num,isObj); 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); for (CaseNumEntity caseNumEntity : caseNumEntities) { CaseEntity caseEntity = caseService.getById(caseNumEntity.getCaseId()); if(caseEntity == null){ continue; } if( caseEntity.getTmProjectId() != null){ TmProject tmProject = tmProjectService.getById(caseEntity.getTmProjectId()); if(tmProject!=null){ throw new BusinessException(ResultCode.CASE_USE.code, String.format(ResultCode.CASE_USE.msg,tmProject.getProjectName())); } }else { throw new BusinessException(ResultCode.CASE_USE.code, String.format(ResultCode.CASE_USE.msg,caseEntity.getCaseTitle())); } } fdService.deleteNum(num); } @Override public void buildSceneObj(LaserSceneParam param) { // ScenePlus scenePlus = scenePlusService.getById(param.getId()); // if(scenePlus == null){ // throw new BusinessException(ResultCode.SCENE_NOT_EXIST); // } // if(scenePlus.getSceneStatus() !=-2){ // throw new BusinessException(ResultCode.SCENE_BUILDING); // } // if(!NumTypeUtils.isLaserBySceneSource(scenePlus.getSceneSource())){ // throw new BusinessException(ResultCode.SCENE_TYPE_ERROR); // } // JSONObject object = fdService.sceneInfo(scenePlus.getNum()); // Integer id = object.getInteger("id"); // param.setId(id); fdService.buildSceneObj(param); } @Override public Object sceneDetail(LaserSceneParam param) { // ScenePlus scenePlus = scenePlusService.getById(param.getId()); // if(scenePlus == null){ // throw new BusinessException(ResultCode.SCENE_NOT_EXIST); // } // if(scenePlus.getSceneStatus() !=-2){ // throw new BusinessException(ResultCode.SCENE_BUILDING); // } // if(!NumTypeUtils.isLaserBySceneSource(scenePlus.getSceneSource())){ // throw new BusinessException(ResultCode.SCENE_TYPE_ERROR); // } // JSONObject object = fdService.sceneInfo(scenePlus.getNum()); // Integer id = object.getInteger("id"); // param.setId(id); 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()); } }