package com.fdkankan.fusion.service.impl; import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.ResultData; import com.fdkankan.fusion.common.util.NumTypeUtils; import com.fdkankan.fusion.entity.*; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.common.PageInfo; import com.fdkankan.fusion.mapper.ICaseMapper; import com.fdkankan.fusion.request.CaseParam; import com.fdkankan.fusion.request.ScenePram; import com.fdkankan.fusion.response.CaseVo; import com.fdkankan.fusion.response.HotVo; import com.fdkankan.fusion.response.SceneVo; import com.fdkankan.fusion.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.Period; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author * @since 2022-07-27 */ @Service public class CaseServiceImpl extends ServiceImpl implements ICaseService { @Autowired ISceneService sceneService; @Autowired ICaseNumService caseNumService; @Autowired ICaseFilesService caseFilesService; @Autowired IModelService modelService; @Autowired IFusionNumService fusionNumService; @Autowired ITmProjectService tmProjectService; @Autowired ITmDepartmentService tmDepartmentService; @Autowired ITmUserService tmUserService; @Autowired ITmCameraService tmCameraService; @Autowired ICaseSettingsService caseSettingsService; @Autowired IMapConfigService mapConfigService; @Autowired IScenePlusService scenePlusService; @Override public PageInfo pageList(CaseParam param,String userName) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if(StringUtils.isNotBlank(param.getCaseTitle())){ wrapper.like(CaseEntity::getCaseTitle,param.getCaseTitle()); } List deptIds = new ArrayList<>(); String share = SaHolder.getRequest().getHeader("share"); if(StringUtils.isNotBlank(share) && "1".equals(share)){ //分享请求头 deptIds = tmDepartmentService.list().stream().map(TmDepartment::getId).collect(Collectors.toList()); wrapper.eq(CaseEntity::getMapShow,true); }else { deptIds = tmDepartmentService.getDeptIds(); } if(deptIds.size() <=0){ return PageInfo.PageInfo(new Page<>(param.getPageNum(),param.getPageSize())); } List deptIds2 = tmDepartmentService.getSonByDeptIdAndDeptIds(deptIds, param.getDeptId()); wrapper.in(CaseEntity::getDeptId,deptIds2); //wrapper.eq(CaseEntity::getUserName,userName); wrapper.eq(CaseEntity::getType,0); wrapper.orderByDesc(CaseEntity::getCreateTime); Page page = this.page( new Page<>(param.getPageNum(), param.getPageSize()), wrapper); Set tmProIds = page.getRecords().stream().filter(entity -> StringUtils.isNotBlank(entity.getTmProjectId())) .map(CaseEntity::getTmProjectId).collect(Collectors.toSet()); HashMap proMap = tmProjectService.getMapByIds(tmProIds); for (CaseEntity record : page.getRecords()) { if(StringUtils.isNotBlank(record.getTmProjectId())){ TmProject project = proMap.get(record.getTmProjectId()); if(project != null){ record.setDeptId(project.getDeptId()); } } } List mapIds = page.getRecords().stream().map(CaseEntity::getMapId).collect(Collectors.toList()); if(!mapIds.isEmpty()){ HashMap map = mapConfigService.getMapByIds(mapIds); for (CaseEntity caseEntity : page.getRecords()) { if(caseEntity.getMapId() != null && map.get(caseEntity.getMapId()) != null){ MapConfig mapConfig = map.get(caseEntity.getMapId()); caseEntity.setMapConfig(mapConfig); } } } Set deptIds1 = page.getRecords().stream().filter(entity -> StringUtils.isNotBlank(entity.getDeptId())) .map(CaseEntity::getDeptId).collect(Collectors.toSet()); HashMap mapByDeptIds = tmDepartmentService.getMapByDeptIds(deptIds1); for (CaseEntity record : page.getRecords()) { TmDepartment department = mapByDeptIds.get(record.getDeptId()); if(department != null){ record.setDeptName(department.getName()); } List caseSettings = caseSettingsService.getByCaseId(record.getCaseId()); if(!caseSettings.isEmpty()){ CaseSettings caseSettings1 = caseSettings.get(0); if(caseSettings1 != null){ record.setCover(caseSettings1.getCover()); } } } return PageInfo.PageInfo(page); } @Override public List sceneList(CaseParam param) { if(param.getCaseId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } List numListByCase = caseNumService.getByCaseId(param.getCaseId()); List laserNumList = numListByCase.stream().filter(e -> NumTypeUtils.isLaser(e.getNumType())).map(CaseNumEntity::getNum).collect(Collectors.toList()); List meshNumList = numListByCase.stream().filter(e ->! NumTypeUtils.isLaser(e.getNumType())).map(CaseNumEntity::getNum).collect(Collectors.toList()); List meshSceneList = scenePlusService.getMeshList(meshNumList); List laserSceneList = scenePlusService.getLaserList(laserNumList); HashMap laserModelMap = modelService.getMapByNum(laserNumList,0); HashMap meshModelMap = modelService.getMapByNum(meshNumList,1); for (SceneVo sceneVo : laserSceneList) { Model model = laserModelMap.get(sceneVo.getNum()); if(model != null){ BeanUtils.copyProperties(model,sceneVo); } } for (SceneVo sceneVo : meshSceneList) { Model model = meshModelMap.get(sceneVo.getNum()); if(model != null){ BeanUtils.copyProperties(model,sceneVo); } } List listAll = new ArrayList<>(); listAll.addAll(meshSceneList); listAll.addAll(laserSceneList); return listAll; } @Override public void addOrUpdate(CaseParam param, String userName) { if(StringUtils.isEmpty(param.getCaseTitle())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } CaseEntity caseEntity ; if(param.getCaseId() == null){ caseEntity = new CaseEntity(); TmUser tmUser = tmUserService.getByUserName(userName); caseEntity.setDeptId(tmUser.getDeptId()); caseEntity.setUserName(userName); }else { caseEntity = this.getById(param.getCaseId()); } caseEntity.setCaseTitle(param.getCaseTitle()); caseEntity.setMapShow(param.getMapShow()); caseEntity.setLatAndLong(param.getLatAndLong()); caseEntity.setMapUrl(param.getMapUrl()); caseEntity.setUpdateTime(null); this.saveOrUpdate(caseEntity); } @Override public void addScene(CaseParam param) { if(param.getCaseId() == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } CaseEntity caseEntity = this.getById(param.getCaseId()); if(caseEntity == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } caseNumService.addBatch(param.getCaseId(),param.getSceneNumParam()); } @Override public void delete(Integer caseId) { if(caseId == null){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } //删除关联的场景 caseNumService.deleteByCaseId(caseId); caseFilesService.deleteByCaseId(caseId); this.removeById(caseId); } @Override public List getByIds(List caseIdIds) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(CaseEntity::getCaseId,caseIdIds); return this.list(wrapper); } @Override public CaseEntity getByTmProjectId(String projectId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(CaseEntity::getTmProjectId,projectId); return this.getOne(wrapper); } @Override public void updateIdenTityStatus(Integer caseId, Integer status) { CaseEntity caseEntity = this.getById(caseId); if(caseEntity != null && StringUtils.isNotBlank(caseEntity.getTmProjectId())){ tmProjectService.updateIdenTityStatus(caseEntity.getTmProjectId(),status); } } @Override public String getDeptId(Integer caseId) { CaseEntity caseEntity = this.getById(caseId); String deptId = caseEntity.getDeptId(); if(caseEntity.getType() ==1){ deptId = tmProjectService.getById(caseEntity.getTmProjectId()).getDeptId(); } return deptId; } @Override public CaseVo getInfo(Integer caseId,Boolean isLogin) { CaseEntity caseEntity = this.getById(caseId); if(caseEntity == null){ return null; } CaseVo caseVo = new CaseVo(); BeanUtil.copyProperties(caseEntity,caseVo); if(caseEntity.getTmProjectId() != null){ TmProject tmProject = tmProjectService.getById(caseEntity.getTmProjectId()); if(tmProject!= null && tmProject.getIsDelete()!=0){ throw new BusinessException(ResultCode.CASE_NOT_EXITS); } caseVo.setTmProject(tmProject); caseVo.setCaseTitle(tmProject.getProjectName()); } if(isLogin){ checkCaseAuth(caseVo); } return caseVo; } private void checkCaseAuth(CaseVo caseVo) { String share = SaHolder.getRequest().getHeader("share"); if(StringUtils.isNotBlank(share) && "1".equals(share)) { //分享请求头 return; } if(!StpUtil.isLogin()){ throw new BusinessException(ResultCode.USER_NOT_LOGIN); } List deptIds = tmDepartmentService.getDeptIds(); if(deptIds.size() <=0){ throw new BusinessException(ResultCode.NOT_PERMISSION); } String caseDeptId = caseVo.getDeptId(); if(caseVo.getTmProject() != null){ caseDeptId = caseVo.getTmProject().getDeptId(); } String deptId =(String) StpUtil.getExtra("deptId"); List deptIds2 = tmDepartmentService.getSonByDeptIdAndDeptIds(deptIds, deptId); if(!deptIds2.contains(caseDeptId)){ throw new BusinessException(ResultCode.NOT_PERMISSION); } } }