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.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; @Override public PageInfo pageList(ScenePram param) { String deptId = tmDepartmentService.getDeptId(); if(param.getSearchType() == 0){ //当前组织下场景 List tmCameraList = tmCameraService.getByDeptIds(Arrays.asList(deptId)); List collect = tmCameraList.stream().map(TmCamera::getCameraSn).collect(Collectors.toList()); param.setSnCodes(collect); } if(param.getSearchType() == 1){ //下级共享给上级场景 List numList = sceneDeptShareService.getNumListByDeptId(deptId,param.getIsObj()); param.setNumList(numList); } if(param.getSearchType() == 2){ //当前组织及下级组织的数据 List sonByDeptId = tmDepartmentService.getSonByDeptId(deptId); List deptIds = new ArrayList<>(); deptIds.add(deptId); deptIds.addAll(sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList())); List tmCameraList = tmCameraService.getByDeptIds(deptIds); List collect = tmCameraList.stream().map(TmCamera::getCameraSn).collect(Collectors.toList()); param.setSnCodes(collect); } if(param.getSnCodes().isEmpty() && param.getNumList().isEmpty()){ return PageInfo.PageInfoEmpty(); } Page sceneVoPage = scenePlusService.sceneList(param); 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) { sceneVo.setIsObj(param.getIsObj()); TmDepartment tmDepartment = map.get(sceneVo.getSnCode().toUpperCase()); if(tmDepartment != null){ sceneVo.setDeptId(tmDepartment.getId()); sceneVo.setDeptName(tmDepartment.getName()); } sceneVo.setStatus(setLaserStatus(sceneVo.getStatus(),sceneVo.getPayStatus())); sceneVo.setType(CameraUtil.getTypeByCameraType(sceneVo.getCameraType(),param.getIsObj())); if(modelingMap.get(sceneVo.getNum()) != null && !modelingMap.get(sceneVo.getNum())){ sceneVo.setStatus(5); } } 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(payStatus != 1){ //封存 return 3; } if(status == -1){ return 1; } 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); 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) { 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()); } }