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.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; @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; } @Override public PageInfo pageList(ScenePram param) { if (param.getType() == null) { throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if (StringUtils.isBlank(param.getShare()) && StringUtils.isNotBlank(StpUtil.getTokenValue())) { param.setDeptId(tmUserService.getLoginUser().getDeptId()); } if (param.getCaseId() != null) { String deptId = caseService.getDeptId(param.getCaseId()); param.setDeptId(deptId); } if (StringUtils.isNotBlank(param.getDeptId())) { List sonByDeptId = tmDepartmentService.getSonByDeptId(param.getDeptId()); List deptIds = sonByDeptId.stream().map(TmDepartment::getId).collect(Collectors.toList()); deptIds.add(param.getDeptId()); List byDeptIds = tmUserService.getByDeptIds(deptIds); List userNames = byDeptIds.stream().map(TmUser::getUserName).collect(Collectors.toList()); param.setUserNames(userNames); } Page sceneVoPage = scenePlusService.pageList(new Page<>(param.getPageNum(), param.getPageSize()), param); // List laserNumList = sceneVoPage.getRecords().stream().filter(e-> e.getType() == 2 || e.getType() == 4) // .map(SceneVo::getNum).collect(Collectors.toList()); List modelingScene = sceneVoPage.getRecords().stream().filter(e -> e.getStatus() == 0).map(SceneVo::getNum).collect(Collectors.toList()); HashMap modelingMap = mqSendLogService.getMapByNumList(modelingScene); List userNameList = sceneVoPage.getRecords().stream().map(Model::getUserName).collect(Collectors.toList()); HashMap map = tmUserService.getMapByUserNames(userNameList); for (SceneVo sceneVo : sceneVoPage.getRecords()) { TmDepartment tmDepartment = map.get(sceneVo.getUserName()); if (tmDepartment != null) { sceneVo.setDeptId(tmDepartment.getId()); sceneVo.setDeptName(tmDepartment.getName()); } 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.setStatus(setLaserStatus(sceneVo.getStatus(),sceneVo.getPayStatus())); } return PageInfo.PageInfo(sceneVoPage); } // List sceneVoList = new ArrayList<>(); // long total = 0; // if(param.getType() == 0 || param.getType() == 1 || param.getType() == 4 || param.getType() == 6){ //看看,看见 ,深时obj // //获取四维(看看,看见)场景数据 // FdkkResponse fdkkResponse = fdKKClient.sceneList(param); // if(fdkkResponse.getCode() !=0){ // throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg()); // } // PageInfo pageInfo = JSONObject.parseObject(JSONObject.toJSONString(fdkkResponse.getData()), PageInfo.class); // total = pageInfo.getTotal(); // JSONArray list = JSONArray.parseArray(JSONObject.toJSONString( pageInfo.getList())); // sceneVoList = overSceneVo(list,param.getType()); // // } // if(param.getType() == 2 || param.getType() == 5){ //深时 // //获取激光(深时)场景数据 // LaserSceneParam laserSceneParam = new LaserSceneParam(); // laserSceneParam.setPageNum(param.getPageNum()); // laserSceneParam.setPageSize(param.getPageSize()); // laserSceneParam.setStatus(param.getStatus()); // laserSceneParam.setSnCodes(param.getSnCodes()); // if(param.getType() == 5){ // laserSceneParam.setSceneSource(5); // } // if(StringUtils.isNotBlank(param.getSceneName())){ // laserSceneParam.setTitle(param.getSceneName()); // } // if(param.getNumList() != null && param.getNumList().size() >0){ // laserSceneParam.setSceneCodes(param.getNumList()); // } // FdkkResponse fdkkResponse = laserClient.sceneList(laserSceneParam); // if(fdkkResponse.getCode() !=200){ // throw new BusinessException(fdkkResponse.getCode(),fdkkResponse.getMsg()); // } // JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(fdkkResponse.getData())); // JSONArray list = jsonObject.getJSONArray("list"); // total =jsonObject.getLong("total"); // for (Object o : list) { // String res = JSONObject.toJSONString(o); // SceneVo vo = JSONObject.parseObject(res,SceneVo.class); // if( StringUtils.isEmpty(vo.getPhone())){ // vo.setBind(false); // } // if(vo.getStatus() == 4){ //4生成OBJ中设置为计算中 // vo.setStatus(0); // } // vo.setType(param.getType()); // sceneVoList.add(vo); // } // } // Set snCodes = sceneVoList.stream().map(SceneVo::getSnCode).collect(Collectors.toSet()); // // } // Page voPage = new Page<>(param.getPageNum(),param.getPageSize()); // voPage.setRecords(sceneVoList); // voPage.setTotal(total); // return PageInfo.PageInfo(voPage); // } /** * 四维看看返回数据格式转换 */ 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 == 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()); } }