package com.fdkankan.site.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fdkankan.site.common.PageInfo; import com.fdkankan.site.common.ResultCode; import com.fdkankan.site.common.util.JwtUtil; import com.fdkankan.site.common.util.VUtils; import com.fdkankan.site.entity.Project; import com.fdkankan.site.entity.ProjectBim; import com.fdkankan.site.entity.ProjectNum; import com.fdkankan.site.entity.ProjectTeam; import com.fdkankan.site.exception.BusinessException; import com.fdkankan.site.httpClient.bim.BusinessStatus; import com.fdkankan.site.httpClient.client.FdKKClient; import com.fdkankan.site.httpClient.response.FdkkResponse; import com.fdkankan.site.mapper.IProjectMapper; import com.fdkankan.site.request.ProjectAddSceneParam; import com.fdkankan.site.request.ProjectDelSceneParam; import com.fdkankan.site.request.ProjectListParam; import com.fdkankan.site.request.SceneNumParam; import com.fdkankan.site.response.ProjectInfoVo; import com.fdkankan.site.response.ProjectVo; import com.fdkankan.site.response.SceneVo; import com.fdkankan.site.response.UserData; import com.fdkankan.site.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 javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author * @since 2022-10-10 */ @Service public class ProjectServiceImpl extends ServiceImpl implements IProjectService { @Autowired IProjectNumService projectNumService; @Autowired IProjectTeamService projectTeamService; @Autowired IProjectBimService projectBimService; @Autowired ISceneService sceneService; @Autowired IProjectLogService projectLogService; @Override public Object getUserData(String token) { UserData userData = new UserData(); String userName = JwtUtil.getUserName(token); List teamList = projectTeamService.getListByUserName(userName); Set projectIds = teamList.parallelStream().map(ProjectTeam::getProjectId).collect(Collectors.toSet()); List numList = projectNumService.getListByProjectIds(projectIds); long count = 0L; if(projectIds.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(Project::getProjectId,projectIds); wrapper.eq(Project::getProjectStatus,1); count = this.count(wrapper); } userData.setProjectCount((long) projectIds.size()); userData.setProjectSceneCount((long) numList.size()); userData.setProjectOverCount(count); return userData; } @Override public Object pageList(ProjectListParam param, String token) { String userName = JwtUtil.getUserName(token); List projectTeamList = projectTeamService.getListByUserName(userName); Set projectIdSet = projectTeamList.stream().map(ProjectTeam::getProjectId).collect(Collectors.toSet()); if(projectIdSet.size() <=0){ Page voPage = new Page<>(param.getPageNum(), param.getPageSize()); voPage.setTotal(0); voPage.setRecords(new ArrayList<>()); return PageInfo.PageInfo(voPage); } LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(Project::getProjectId,projectIdSet); if(StringUtils.isNotBlank(param.getProjectName())){ wrapper.like(Project::getProjectName,param.getProjectName()); } if(StringUtils.isNotBlank(param.getStartTime())){ wrapper.ge(Project::getCreateTime,param.getStartTime()); } if(StringUtils.isNotBlank(param.getEndTime())){ wrapper.le(Project::getCreateTime,param.getEndTime()); } if(param.getProjectStatus() !=null){ wrapper.eq(Project::getProjectStatus,param.getProjectStatus()); } if(StringUtils.isNotBlank(param.getProjectCreater())){ Set projectIds = projectTeamService.getProjectIdByCreater(param.getProjectCreater()); if(projectIds.size() >0){ wrapper.in(Project::getProjectId,projectIds); } } wrapper.orderByDesc(Project::getCreateTime); Page page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper); Set projectIds = page.getRecords().stream().map(Project::getProjectId).collect(Collectors.toSet()); HashMap createrMap = projectTeamService.getProjectCreaterMap(projectIds); List voList = new ArrayList<>(); for (Project record : page.getRecords()) { ProjectVo projectVo = new ProjectVo(); BeanUtils.copyProperties(record,projectVo); projectVo.setProjectCreater(createrMap.get(record.getProjectId())); voList.add(projectVo); } Page voPage = new Page<>(param.getPageNum(), param.getPageSize()); voPage.setTotal(page.getTotal()); voPage.setRecords(voList); return PageInfo.PageInfo(voPage); } @Override public ProjectInfoVo getProjectInfo(Integer projectId) { VUtils.isTure(projectId == null).throwMessage(ResultCode.PARAM_MISS); Project project = this.getById(projectId); VUtils.isTure(project == null).throwMessage(ResultCode.PROJECT_NOT_EXIST); ProjectInfoVo infoVo = new ProjectInfoVo(); BeanUtils.copyProperties(project,infoVo); ProjectTeam projectCreater = projectTeamService.getProjectCreater(projectId); if(projectCreater!= null){ infoVo.setProjectCreater(projectCreater.getUserName()); } infoVo.setSceneList(this.getSceneList(projectId)); ProjectBim bim = null; List projectBims = projectBimService.getByProjectId(projectId); for (ProjectBim projectBim : projectBims) { if(projectBim.getBimStatus().equals(BusinessStatus.DONE.getInfo()) || projectBim.getBimStatus().equals(BusinessStatus.UPLOAD.getInfo())){ bim = projectBim; } } infoVo.setBimData(bim); return infoVo; } @Override public void over(Project param) { VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS); LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(Project::getProjectId,param.getProjectId()) .set(Project::getProjectStatus,1); this.update(wrapper); } @Override public List getSceneList(Integer projectId) { Set projectIds = new HashSet<>(Arrays.asList(projectId)); List projectNums = projectNumService.getListByProjectIds(projectIds); HashMap> typeMap = projectNumService.getTypeMap(projectNums); List list = new ArrayList<>(); if(typeMap.size() >0){ list = sceneService.getListByNumMap(typeMap); } return list; } @Override public Project addProject(Project param, String token) { VUtils.isTure(StringUtils.isBlank(param.getProjectName()) ).throwMessage(ResultCode.PARAM_MISS); Project project = new Project(); BeanUtils.copyProperties(param,project); this.save(project); projectTeamService.addProject(project.getProjectId(),token); return project; } @Override public void addScene(ProjectAddSceneParam param) { Project project = this.getById(param.getProjectId()); VUtils.isTure(project == null).throwMessage(ResultCode.PARAM_MISS); Set projectIds = new HashSet<>(Arrays.asList(param.getProjectId())); List projectNums = projectNumService.getListByProjectIds(projectIds); List hasNumList = projectNums.stream().map(ProjectNum::getNum).collect(Collectors.toList()); List paramNumList = new ArrayList<>(); HashMap numType = new HashMap<>(); List sceneNumParam = param.getSceneNumParam(); for (SceneNumParam numParam : sceneNumParam) { if(numParam.getNumList() == null || numParam.getNumList().size() <=0){ continue; } for (String num : numParam.getNumList()) { numType.put(num,numParam.getType()); } paramNumList.addAll(numParam.getNumList()); } List delNumList = new ArrayList<>(); for (String num : hasNumList) { if(!paramNumList.contains(num)){ delNumList.add(num); } } List addNumList = new ArrayList<>(); for (String num : paramNumList) { if(!hasNumList.contains(num)){ addNumList.add(num); } } Set numList = projectNumService.getNumList(); for (String num : addNumList) { if(numList.contains(num)){ throw new BusinessException(ResultCode.SCENE_BIND.code,num +ResultCode.SCENE_BIND.msg); } } if(delNumList.size() >0){ projectNumService.delByNumList(param.getProjectId(),delNumList); projectLogService.addLog(param.getProjectId(),"删除场景",param.getToken(),delNumList); } if(addNumList.size() >0){ projectNumService.addByNumList(param.getProjectId(),numType,addNumList); projectLogService.addLog(param.getProjectId(),"添加场景",param.getToken(),addNumList); } project.setUpdateTime(null); this.updateById(project); } @Override public void delScene(ProjectDelSceneParam param) { Project project = this.getById(param.getProjectId()); VUtils.isTure(project == null).throwMessage(ResultCode.PARAM_MISS); VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS); VUtils.isTure(StringUtils.isBlank(param.getNum())).throwMessage(ResultCode.PARAM_MISS); projectNumService.delByNumList(param.getProjectId(),Arrays.asList(param.getNum())); projectLogService.addLog(param.getProjectId(),"删除场景",param.getToken(),Arrays.asList(param.getNum())); project.setUpdateTime(null); this.updateById(project); } @Override public void deleteBim(Integer bimId,String token) { ProjectBim bim = projectBimService.getById(bimId); if(bim != null){ projectLogService.addLog(bim.getProjectId(),"删除BIM:"+bim.getBimName(),token,null); projectBimService.removeById(bimId); } } @Override public HashMap getByIds(Set projectIds) { HashMap map = new HashMap<>(); if(projectIds.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(Project::getProjectId,projectIds); List list = this.list(wrapper); list.forEach(entity -> map.put(entity.getProjectId(),entity)); } return map; } @Override public HashMap getAndDelByIds(Set projectIds) { HashMap map = new HashMap<>(); if(projectIds.size() >0){ List list = this.getBaseMapper().getAndDelByIds(projectIds); list.forEach(entity -> map.put(entity.getProjectId(),entity)); } return map; } @Override public void updateName(Project param) { VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS); LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(Project::getProjectId,param.getProjectId()); if(StringUtils.isNotBlank(param.getProjectName())){ wrapper.set(Project::getProjectName,param.getProjectName()); } if(StringUtils.isNotBlank(param.getProjectMsg())){ wrapper.set(Project::getProjectMsg,param.getProjectMsg()); } if(StringUtils.isNotBlank(param.getProjectImg())){ wrapper.set(Project::getProjectImg,param.getProjectImg()); } this.update(wrapper); } @Override public void updateBimName(ProjectBim projectBim,String token) { projectBimService.updateBimName(projectBim); projectLogService.addLog(projectBim.getProjectId(),"修改BIM名称:"+projectBim.getBimName(),token,null); } @Override public void updatePanos(Project param) { VUtils.isTure(param.getProjectId() == null).throwMessage(ResultCode.PARAM_MISS); VUtils.isTure(StringUtils.isBlank(param.getPanos())).throwMessage(ResultCode.PARAM_MISS); LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(Project::getProjectId,param.getProjectId()); if(StringUtils.isNotBlank(param.getPanos())){ wrapper.set(Project::getPanos,param.getPanos()); } this.update(wrapper); } }