package com.fdkankan.fusion.service.impl; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; 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.fusion.common.PageInfo; import com.fdkankan.fusion.common.ResultCode; import com.fdkankan.fusion.common.enums.IdPreEnum; import com.fdkankan.fusion.common.util.IdUtils; import com.fdkankan.fusion.common.util.PatternEnum; import com.fdkankan.fusion.common.util.RedisKeyUtil; import com.fdkankan.fusion.entity.*; import com.fdkankan.fusion.exception.BusinessException; import com.fdkankan.fusion.mapper.ITmProjectMapper; import com.fdkankan.fusion.request.CommonDto; import com.fdkankan.fusion.request.ProjectRandCodeDto; import com.fdkankan.fusion.request.ProjectRequest; import com.fdkankan.fusion.request.ProjectRequestDto; import com.fdkankan.fusion.response.ProjectRandCodeVo; import com.fdkankan.fusion.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.redis.util.RedisUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.Period; import java.util.*; import java.util.stream.Collectors; /** *

* 火调项目信息表 服务实现类 *

* * @author * @since 2023-07-28 */ @Service public class TmProjectServiceImpl extends ServiceImpl implements ITmProjectService { @Autowired ITmDepartmentService tmDepartmentService; @Autowired ITmUserService tmUserService; @Autowired ICaseService caseService; @Autowired ICaseNumService caseNumService; @Autowired ITmAttachmentService tmAttachmentService; @Autowired RedisUtil redisUtil; @Override public Object pageList(ProjectRequestDto tmProject) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); //教学场景 List deptIds; if(tmProject.getQueryType() == 2){ wrapper.eq(TmProject::getIsTeached,1); deptIds = tmDepartmentService.getByZdDeptIds(); }else { deptIds = tmDepartmentService.getDeptIds(); } if(deptIds.size() <=0){ throw new BusinessException(ResultCode.NOT_DEPT); } //承办单位 if(StringUtils.isNotBlank(tmProject.getOrganizerDeptName())){ List list = tmDepartmentService.getLikeName(tmProject.getOrganizerDeptName()); if(list.size() <=0){ return PageInfo.PageInfo(new Page<>(tmProject.getPageNum(),tmProject.getPageSize())); } List collect = list.stream().map(TmDepartment::getId).collect(Collectors.toList()); deptIds = deptIds.stream().filter(collect::contains).collect(Collectors.toList()); } wrapper.in(TmProject::getDeptId,deptIds); //起火项目对象 if(StringUtils.isNotBlank(tmProject.getProjectSn())){ wrapper.like(TmProject::getProjectSn , tmProject.getProjectSn()); } //起火对象 if(StringUtils.isNotBlank(tmProject.getProjectName())){ wrapper.like(TmProject::getProjectName , tmProject.getProjectName()); } //起火地址 if(StringUtils.isNotBlank(tmProject.getProjectAdrress())){ wrapper.like(TmProject::getProjectAddress , tmProject.getProjectAdrress()); } //起火场所 if(StringUtils.isNotBlank(tmProject.getProjectSiteCode())){ if(!StringUtils.equals("0" , tmProject.getProjectSiteCode())){ wrapper.likeRight(TmProject::getProjectSiteCode , tmProject.getProjectSiteCode()); } } //起火对象 if(StringUtils.isNotBlank(tmProject.getOrganizerUsers())){ wrapper.like(TmProject::getOrganizerUsers , tmProject.getOrganizerUsers()); } if(StringUtils.isNotBlank(tmProject.getDeptId())){ wrapper.eq(TmProject::getDeptId , tmProject.getDeptId()); } //事故日期 if(null != tmProject.getAccidentDate()){ wrapper.ge(TmProject::getAccidentDate,tmProject.getAccidentDateStart()); wrapper.le(TmProject::getAccidentDate,tmProject.getAccidentDateEnd()); } //起火原因 if(StringUtils.isNotBlank(tmProject.getFireReason())){ wrapper.like(TmProject::getFireReason , tmProject.getFireReason()); } //是否是教学项目列表 if(null != tmProject.getIsTeached()){ wrapper.eq(TmProject::getIsTeached , tmProject.getIsTeached()); } //项目状态 if(StringUtils.isNotBlank(tmProject.getStatus())){ wrapper.eq(TmProject::getStatus , tmProject.getStatus()); } wrapper.orderByDesc(TmProject::getCreateTime); Page page = this.page(new Page<>(tmProject.getPageNum(), tmProject.getPageSize()), wrapper); List ids = page.getRecords().stream().map(TmProject::getId).collect(Collectors.toList()); Set deptDbIds = page.getRecords().stream().map(TmProject::getDeptId).collect(Collectors.toSet()); HashMap mapByDeptIds = tmDepartmentService.getMapByDeptIds(deptDbIds); HashMap map = this.getCaseMap(ids); for (TmProject record : page.getRecords()) { CaseEntity caseEntity = map.get(record.getId()); if(caseEntity != null){ record.setCaseId(caseEntity.getCaseId()); } TmDepartment tmDepartment = mapByDeptIds.get(record.getDeptId()); if(tmDepartment != null){ record.setOrganizerDeptName(tmDepartment.getName()); } } return PageInfo.PageInfo(page); } @Override public Object getDetailWithoutAuth(ProjectRequest param) { if (ObjectUtil.isNotNull(param.getCaseId()) && StringUtils.isBlank(param.getRandCode())) { throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } String redisKey = String.format(RedisKeyUtil.RAND_CODE_KEY,param.getCaseId()); if(!redisUtil.hasKey(redisKey)){ throw new BusinessException(ResultCode.PROJECT_KEY_NOT_EXITS); } if (StringUtils.isBlank(param.getRandCode())) { throw new BusinessException(ResultCode.PROJECT_PASSWORD_NOT_EXITS); } String redisRandCode = redisUtil.get(redisKey); if(!StringUtils.equals(redisRandCode , param.getRandCode())){ throw new BusinessException(ResultCode.PROJECT_PASSWORD_ERROR); } return true; } @Override public Object getRandCode(String caseId) { if(StringUtils.isBlank(caseId) ){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } String redisKey = String.format(RedisKeyUtil.RAND_CODE_KEY,caseId); if(redisUtil.hasKey(redisKey)){ redisUtil.expire(redisKey,RedisKeyUtil.projectRandCodeKeyTime); return redisUtil.get(redisKey); } CaseEntity caseEntity = caseService.getById(caseId); if(caseEntity ==null){ throw new BusinessException(ResultCode.CASE_NOT_EXITS); } redisUtil.set(redisKey, RandomUtil.randomString(4)); return RandomUtil.randomString(4); } @Override public void updateRandomCode(ProjectRandCodeDto projectRandCodeDto) { if(StringUtils.isBlank(projectRandCodeDto.getCaseId()) || StringUtils.isBlank(projectRandCodeDto.getRandCode())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if(!projectRandCodeDto.getRandCode().matches(PatternEnum.RAND_CODE_PATTERN)){ throw new BusinessException(ResultCode.RAND_ERROR); } String redisKey = String.format(RedisKeyUtil.RAND_CODE_KEY,projectRandCodeDto.getCaseId()); if(!redisUtil.hasKey(redisKey)){ throw new BusinessException(ResultCode.RAND_NOT_EXIST); } redisUtil.set(redisKey,projectRandCodeDto.getRandCode(),RedisKeyUtil.projectRandCodeKeyTime); } @Override public void addNewProject(TmProject tmProject) { if(StringUtils.isBlank(tmProject.getProjectSn())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } TmProject project = this.getByProjectSn(tmProject.getProjectSn()); if(project != null){ throw new BusinessException(ResultCode.PROJECT_EXITS); } TmUser tmUser = tmUserService.getLoginUser(); if(tmUser == null || StringUtils.isBlank(tmUser.getDeptId())){ throw new BusinessException(ResultCode.DEPT_NOT_EXITS); } TmDepartment tmDepartment = tmDepartmentService.getById(tmUser.getDeptId()); if(tmDepartment == null){ throw new BusinessException(ResultCode.DEPT_NOT_EXITS); } tmProject.setId(IdUtils.genId(IdPreEnum.PROJECT_PRE.getPre())); tmProject.setDeptId(tmUser.getDeptId()); tmProject.setCreatorId(tmUser.getId()); tmProject.setCreatorName(tmUser.getNickName()); tmProject.setCreatorDeptId(tmUser.getDeptId()); tmProject.setEditorId(tmUser.getId()); tmProject.setEditorName(tmUser.getNickName()); tmProject.setOrganizerDeptName(tmDepartment.getName()); this.save(tmProject); CaseEntity caseEntity = new CaseEntity(); caseEntity.setCaseTitle(tmProject.getProjectName()); caseEntity.setUserName(tmUser.getUserName()); caseEntity.setType(1); caseEntity.setTmProjectId(tmProject.getId()); caseService.save(caseEntity); } @Override public void updateProject(TmProject tmProject) { if(StringUtils.isBlank(tmProject.getId())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } if(tmProject.getIsDelete() == 1){ CaseEntity caseEntity = caseService.getByTmProjectId(tmProject.getId()); if(caseEntity == null){ throw new BusinessException(ResultCode.PROJECT_CASE_NOT_EXITS); } caseService.delete(caseEntity.getCaseId()); tmAttachmentService.deleteByProjectId(tmProject.getId()); this.removeById(tmProject.getId()); return; } TmUser tmUser = tmUserService.getLoginUser(); tmProject.setEditorId(tmUser.getId()); tmProject.setEditorName(tmUser.getNickName()); this.updateById(tmProject); } @Override public void setOrUnTeach(CommonDto commonDto) { if(null == commonDto || StringUtils.isBlank(commonDto.getIds())){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } List idList = Arrays.asList(commonDto.getIds().split(",")); if(CollectionUtils.isEmpty(idList)){ throw new BusinessException(ResultCode.MISSING_REQUIRED_PARAMETERS); } LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.in(TmProject::getId,idList); wrapper.set(TmProject::getIsTeached,commonDto.getStatus()); this.update(wrapper); } @Override public TmProject getByProjectSn(String projectSn) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TmProject::getProjectSn,projectSn); return this.getOne(wrapper); } @Override public HashMap getCaseMap(List ids) { HashMap map = new HashMap<>(); if(ids.size() >0){ LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.in(CaseEntity::getTmProjectId,ids); List list = caseService.list(wrapper); if(list !=null && list.size() >0){ list.forEach(entity -> map.put(entity.getTmProjectId(),entity)); } } return map; } @Override public void updateIdenTityStatus(String tmProjectId, Integer status) { if(StringUtils.isNotBlank(tmProjectId)){ LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(TmProject::getId,tmProjectId); wrapper.set(TmProject::getStatus,status); this.update(wrapper); } } }