package cn.cslg.pas.service.report; import cn.cslg.pas.common.model.cronModel.PersonnelVO; import cn.cslg.pas.common.model.cronModel.SystemFile; import cn.cslg.pas.common.model.report.MailMessageDTO; import cn.cslg.pas.common.model.report.QueryMatchCasePersonVO; import cn.cslg.pas.common.model.report.UpdateIprPersonDTO; import cn.cslg.pas.common.model.report.UpdateMatchCasePersonDTO; import cn.cslg.pas.common.utils.CacheUtils; import cn.cslg.pas.common.utils.LoginUtils; import cn.cslg.pas.domain.business.Project; import cn.cslg.pas.domain.business.ReportProject; import cn.cslg.pas.domain.report.AssoIprReportType; import cn.cslg.pas.domain.report.IprPerson; import cn.cslg.pas.exception.ExceptionEnum; import cn.cslg.pas.exception.XiaoShiException; import cn.cslg.pas.service.business.ProjectService; import cn.cslg.pas.service.business.ReportProjectService; import cn.cslg.pas.service.permissions.PermissionService; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.cslg.pas.domain.report.MatchCasePerson; import cn.cslg.pas.mapper.report.MatchCasePersonMapper; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors; /** * @author admin * @description 针对表【match_case_person(配案人员)】的数据库操作Service实现 * @createDate 2024-12-24 13:56:43 */ @Service @RequiredArgsConstructor public class MatchCasePersonService extends ServiceImpl { private final LoginUtils loginUtils; private final CacheUtils cacheUtils; @Autowired @Lazy private SendReportMailService sendReportMailService; @Autowired @Lazy private IprPersonService iprPersonService; public Integer updateMatchCasePerson(UpdateMatchCasePersonDTO updateMatchCasePersonDTO) { Integer id = updateMatchCasePersonDTO.getId(); String name = updateMatchCasePersonDTO.getName(); String email = updateMatchCasePersonDTO.getEmail(); Integer iprPersonId = null; // 邮箱传入 即先添加ipr人员 再与报告关联 // 判断邮箱是否存在 // 邮箱不为空 则去新增ipr人员 并判断邮箱是否存在 if (email != null) { Boolean isValid = this.isValidEmail(email); if (!isValid) { throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "邮箱格式不正确"); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(IprPerson::getEmail, email); IprPerson iprPerson = iprPersonService.getOne(queryWrapper, false); if (iprPerson != null) { iprPersonId = iprPerson.getId(); } else { PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); String personId = personnelVO.getId(); Integer tenantId = personnelVO.getTenantId(); IprPerson iprPerson1 = new IprPerson(); iprPerson1.setName(updateMatchCasePersonDTO.getName()); iprPerson1.setEmail(email); iprPerson1.setIfDefault(false); iprPerson1.setCreateId(personId); iprPerson1.setTenantId(tenantId); iprPerson1.insert(); iprPersonId = iprPerson1.getId(); } } else { throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "邮箱不能为空"); } updateMatchCasePersonDTO.setName(name); updateMatchCasePersonDTO.setIprPersonId(iprPersonId); MatchCasePerson matchCasePerson = this.addMatchCasePersonDB(updateMatchCasePersonDTO); sendReportMailService.sendMatchCasePersonMail(matchCasePerson.getProjectId(), name, email); return matchCasePerson.getId(); } public MatchCasePerson addMatchCasePersonDB(UpdateMatchCasePersonDTO updateMatchCasePersonDTO) { MatchCasePerson matchCasePerson = new MatchCasePerson(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(MatchCasePerson::getProjectId, updateMatchCasePersonDTO.getReportId()); if (this.count(queryWrapper) > 1) { throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "该报告已有多个配案人员,错误!"); } else if (this.count(queryWrapper) == 1) { matchCasePerson = this.getOne(queryWrapper, false); if (matchCasePerson != null) { matchCasePerson.setIprPersonId(updateMatchCasePersonDTO.getIprPersonId()); matchCasePerson.updateById(); } } else if (this.count(queryWrapper) == 0) { PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); String personId = personnelVO.getId(); Integer tenantId = personnelVO.getTenantId(); matchCasePerson.setProjectId(updateMatchCasePersonDTO.getReportId()); matchCasePerson.setIprPersonId(updateMatchCasePersonDTO.getIprPersonId()); matchCasePerson.setCreateId(personId); matchCasePerson.setTenantId(tenantId); matchCasePerson.setId(null); matchCasePerson.insert(); } return matchCasePerson; } public QueryMatchCasePersonVO getReportMatchCasePerson(Integer reportId) { QueryMatchCasePersonVO queryMatchCasePersonVO = new QueryMatchCasePersonVO(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(MatchCasePerson::getProjectId, reportId); MatchCasePerson matchCasePerson = this.getOne(queryWrapper, false); if (matchCasePerson != null) { BeanUtils.copyProperties(matchCasePerson, queryMatchCasePersonVO); this.loadQueryMatchCasePersonVO(queryMatchCasePersonVO); } return queryMatchCasePersonVO; } public void loadQueryMatchCasePersonVO(QueryMatchCasePersonVO queryMatchCasePersonVO) { // 邮箱装载 IprPerson iprPerson = iprPersonService.getById(queryMatchCasePersonVO.getIprPersonId()); if (iprPerson != null) { queryMatchCasePersonVO.setName(iprPerson.getName()); queryMatchCasePersonVO.setEmail(iprPerson.getEmail()); } // 人员信息装载 } public Boolean isValidEmail(String email) { if ((email != null) && (!email.isEmpty())) { return Pattern.matches("^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$", email); } return false; } public void delete(List ids) { this.removeBatchByIds(ids); } public void deleteByIprIds(List iprPersonIds) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.in(MatchCasePerson::getIprPersonId, iprPersonIds); this.remove(queryWrapper); } }