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.ResultCode; 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 org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.security.Security; import java.util.*; import java.util.stream.Collectors; @Service 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; @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); } List tmCameraList = null; String tokenValue = StpUtil.getTokenValue(); if(StringUtils.isNotBlank(tokenValue) && StringUtils.isBlank(param.getShare()) ){ tmCameraList = tmCameraService.getByDeptIds(); List snCodes = tmCameraList.stream().map(TmCamera::getCameraSn).collect(Collectors.toList()); if(CollectionUtil.isNotEmpty(snCodes)){ param.setSnCodes(snCodes); } } if(StringUtils.isNotBlank(param.getDeptId())){ List tmCameras = tmCameraService.getByDeptIds(Arrays.asList(param.getDeptId())); Set snCodeSet = tmCameras.parallelStream().map(TmCamera::getCameraSn).collect(Collectors.toSet()); List snCodes = param.getSnCodes(); if(snCodes == null){ snCodes = new ArrayList<>(snCodeSet); }else { snCodes = snCodes.stream().filter(snCodeSet::contains).collect(Collectors.toList()); } param.setSnCodes(snCodes); } if(StringUtils.isNotBlank(param.getSnCode())){ List snCodes = param.getSnCodes(); List snCodes1 = new ArrayList<>(); snCodes1.add(param.getSnCode()); if(snCodes == null){ snCodes = snCodes1; }else { snCodes = snCodes.stream().filter(snCodes1::contains).collect(Collectors.toList()); } param.setSnCodes(snCodes); } if(param.getCaseId() !=null){ String deptId = caseService.getDeptId(param.getCaseId()); List tmCameras = tmCameraService.getByDeptIds(Arrays.asList(deptId)); List snCodes = param.getSnCodes(); List snCodes1 = tmCameras.stream().map(TmCamera::getCameraSn).collect(Collectors.toList()); snCodes1.add(param.getSnCode()); if(snCodes == null){ snCodes = snCodes1; }else { snCodes = snCodes.stream().filter(snCodes1::contains).collect(Collectors.toList()); } param.setSnCodes(snCodes); } if(CollectionUtil.isEmpty(param.getSnCodes()) && CollectionUtil.isEmpty(param.getNumList())){ return PageInfo.PageInfoEmpty(); } 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()); HashMap map = tmCameraService.getMapBySnCodes(snCodes); for (SceneVo sceneVo : sceneVoList) { TmDepartment tmDepartment = map.get(sceneVo.getSnCode().toUpperCase()); if(tmDepartment != null){ sceneVo.setDeptId(tmDepartment.getId()); sceneVo.setDeptName(tmDepartment.getName()); } } 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); } }