|
|
@@ -1,21 +1,38 @@
|
|
|
package org.dromara.main.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import org.dromara.common.core.exception.ServiceException;
|
|
|
+import org.dromara.common.core.utils.StringUtils;
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
import org.dromara.main.domain.MainBackCandidate;
|
|
|
+import org.dromara.main.domain.MainBackCheckData;
|
|
|
+import org.dromara.main.domain.MainBackInterview;
|
|
|
+import org.dromara.main.domain.MainBackOrder;
|
|
|
import org.dromara.main.domain.MainBackRecord;
|
|
|
import org.dromara.main.domain.MainStudent;
|
|
|
+import org.dromara.main.domain.bo.BackCheckReportSubmitBo;
|
|
|
import org.dromara.main.domain.bo.MainBackRecordBo;
|
|
|
+import org.dromara.main.domain.vo.BackCheckReportVo;
|
|
|
import org.dromara.main.domain.vo.MainBackRecordVo;
|
|
|
import org.dromara.main.mapper.MainBackCandidateMapper;
|
|
|
+import org.dromara.main.mapper.MainBackCheckDataMapper;
|
|
|
+import org.dromara.main.mapper.MainBackInterviewMapper;
|
|
|
+import org.dromara.main.mapper.MainBackOrderMapper;
|
|
|
import org.dromara.main.mapper.MainBackRecordMapper;
|
|
|
import org.dromara.main.mapper.MainStudentMapper;
|
|
|
import org.dromara.main.service.IMainBackRecordService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 背调执行记录Service业务层处理
|
|
|
@@ -27,6 +44,9 @@ public class MainBackRecordServiceImpl implements IMainBackRecordService {
|
|
|
private final MainBackRecordMapper baseMapper;
|
|
|
private final MainStudentMapper studentMapper;
|
|
|
private final MainBackCandidateMapper candidateMapper;
|
|
|
+ private final MainBackCheckDataMapper checkDataMapper;
|
|
|
+ private final MainBackInterviewMapper interviewMapper;
|
|
|
+ private final MainBackOrderMapper backOrderMapper;
|
|
|
|
|
|
|
|
|
@Override
|
|
|
@@ -65,4 +85,171 @@ public class MainBackRecordServiceImpl implements IMainBackRecordService {
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BackCheckReportVo getBackCheckReport(Long recordId) {
|
|
|
+ BackCheckReportVo vo = new BackCheckReportVo();
|
|
|
+
|
|
|
+ // 1. 查询表单数据
|
|
|
+ MainBackCheckData checkData = checkDataMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<MainBackCheckData>()
|
|
|
+ .eq(MainBackCheckData::getRecordId, recordId)
|
|
|
+ .last("limit 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ if (checkData != null) {
|
|
|
+ BeanUtil.copyProperties(checkData, vo);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 查询访谈记录
|
|
|
+ List<MainBackInterview> interviews = interviewMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<MainBackInterview>()
|
|
|
+ .eq(MainBackInterview::getRecordId, recordId)
|
|
|
+ .orderByAsc(MainBackInterview::getId)
|
|
|
+ );
|
|
|
+
|
|
|
+ List<BackCheckReportVo.InterviewVo> interviewVos = new ArrayList<>();
|
|
|
+ for (MainBackInterview interview : interviews) {
|
|
|
+ BackCheckReportVo.InterviewVo iv = new BackCheckReportVo.InterviewVo();
|
|
|
+ BeanUtil.copyProperties(interview, iv);
|
|
|
+ interviewVos.add(iv);
|
|
|
+ }
|
|
|
+ vo.setInterviews(interviewVos);
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public Boolean submitBackCheckReport(Long recordId, BackCheckReportSubmitBo bo) {
|
|
|
+ // 1. 校验 record 存在
|
|
|
+ MainBackRecord record = baseMapper.selectById(recordId);
|
|
|
+ if (record == null) {
|
|
|
+ throw new ServiceException("背调记录不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 校验候选人
|
|
|
+ MainBackCandidate candidate = candidateMapper.selectById(record.getCandidateId());
|
|
|
+ if (candidate == null) {
|
|
|
+ throw new ServiceException("候选人记录不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 组装 MainBackCheckData 并保存
|
|
|
+ MainBackCheckData checkData = new MainBackCheckData();
|
|
|
+ checkData.setRecordId(recordId);
|
|
|
+ checkData.setCandidateId(candidate.getId());
|
|
|
+ MainBackOrder backOrder = backOrderMapper.selectById(record.getOrderId());
|
|
|
+ checkData.setTenantId(backOrder == null ? null : backOrder.getTenantId());
|
|
|
+
|
|
|
+ // 候选人基本信息
|
|
|
+ checkData.setCandidateName(bo.getCandidateName());
|
|
|
+ checkData.setApplyPosition(bo.getApplyPosition());
|
|
|
+ if (StringUtils.isNotBlank(bo.getCheckTime())) {
|
|
|
+ try {
|
|
|
+ checkData.setCheckTime(new java.text.SimpleDateFormat("yyyy-MM-dd").parse(bo.getCheckTime()));
|
|
|
+ } catch (Exception ignored) {}
|
|
|
+ }
|
|
|
+
|
|
|
+ // 学历核实(含核实结果)
|
|
|
+ checkData.setGradSchool(bo.getGradSchool());
|
|
|
+ checkData.setEduCertNo(bo.getEduCertNo());
|
|
|
+ checkData.setEduVerifyStatus(bo.getEduVerifyStatus());
|
|
|
+ checkData.setEduCheckResult(bo.getEduCheckResult());
|
|
|
+
|
|
|
+ // 最近工作单位(含核实结果)
|
|
|
+ checkData.setCompanyName(bo.getCompanyName());
|
|
|
+ if (bo.getWorkPeriod() != null && bo.getWorkPeriod().size() >= 2) {
|
|
|
+ checkData.setWorkStartTime(bo.getWorkPeriod().get(0));
|
|
|
+ checkData.setWorkEndTime(bo.getWorkPeriod().get(1));
|
|
|
+ }
|
|
|
+ checkData.setJobTitle(bo.getPosition());
|
|
|
+ checkData.setLastSalary(bo.getLastSalary());
|
|
|
+ checkData.setLeaveReasonVerify(bo.getLeaveReasonVerify());
|
|
|
+ checkData.setCompanyCheckRemark(bo.getCompanyCheckRemark());
|
|
|
+ checkData.setCompanyCheckResult(bo.getCompanyCheckResult());
|
|
|
+
|
|
|
+ // 工作表现 - 上级
|
|
|
+ checkData.setLeaderEvalAdvantage(bo.getLeaderEvalAdvantage());
|
|
|
+ checkData.setLeaderEvalImprove(bo.getLeaderEvalImprove());
|
|
|
+ checkData.setLeaderEvalProf(bo.getLeaderEvalProf());
|
|
|
+ checkData.setLeaderEvalAttitude(bo.getLeaderEvalAttitude());
|
|
|
+ checkData.setLeaderEvalTeam(bo.getLeaderEvalTeam());
|
|
|
+ checkData.setLeaderEvalMorals(bo.getLeaderEvalMorals());
|
|
|
+
|
|
|
+ // 工作表现 - 同事
|
|
|
+ checkData.setColleagueEvalTeamwork(bo.getColleagueEvalTeamwork());
|
|
|
+ checkData.setColleagueEvalProf(bo.getColleagueEvalProf());
|
|
|
+
|
|
|
+ // 工作表现 - HR(含核实结果)
|
|
|
+ checkData.setHrEvalDispute(bo.getHrEvalDispute());
|
|
|
+ checkData.setHrEvalTransfer(bo.getHrEvalTransfer());
|
|
|
+ checkData.setPerformCheckRemark(bo.getPerformCheckRemark());
|
|
|
+ checkData.setPerformCheckResult(bo.getPerformCheckResult());
|
|
|
+
|
|
|
+ // 法务风险
|
|
|
+ checkData.setHasNonCompete(bo.getHasNonCompete() != null && bo.getHasNonCompete() ? 1 : 0);
|
|
|
+ checkData.setHasNda(bo.getHasNda() != null && bo.getHasNda() ? 1 : 0);
|
|
|
+ checkData.setAgreementRemark(bo.getAgreementRemark());
|
|
|
+ checkData.setHasDispute(bo.getHasDisputeStatus() != null && bo.getHasDisputeStatus() ? 1 : 0);
|
|
|
+ checkData.setDisputeRemark(bo.getDisputeRemark());
|
|
|
+
|
|
|
+ // 调查结论
|
|
|
+ checkData.setConclusion(bo.getConclusion());
|
|
|
+ checkData.setConclusionReason(bo.getConclusionReason());
|
|
|
+ checkData.setInvestigatorName(bo.getInvestigatorName());
|
|
|
+ if (StringUtils.isNotBlank(bo.getInvestigatorDate())) {
|
|
|
+ try {
|
|
|
+ checkData.setInvestigatorDate(new java.text.SimpleDateFormat("yyyy-MM-dd").parse(bo.getInvestigatorDate()));
|
|
|
+ } catch (Exception ignored) {}
|
|
|
+ }
|
|
|
+
|
|
|
+ // saveOrUpdate(按recordId去重)
|
|
|
+ MainBackCheckData existing = checkDataMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<MainBackCheckData>()
|
|
|
+ .eq(MainBackCheckData::getRecordId, recordId)
|
|
|
+ .last("limit 1")
|
|
|
+ );
|
|
|
+ if (existing == null) {
|
|
|
+ checkDataMapper.insert(checkData);
|
|
|
+ } else {
|
|
|
+ checkData.setId(existing.getId());
|
|
|
+ checkDataMapper.updateById(checkData);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 保存访谈记录(先删旧的,再插入新的)
|
|
|
+ interviewMapper.delete(
|
|
|
+ Wrappers.<MainBackInterview>lambdaQuery()
|
|
|
+ .eq(MainBackInterview::getRecordId, recordId)
|
|
|
+ );
|
|
|
+ BackCheckReportSubmitBo.InterviewInfo[] interviews = {
|
|
|
+ bo.getInterviewSupervisor(), bo.getInterviewHR(), bo.getInterviewColleague()
|
|
|
+ };
|
|
|
+ for (BackCheckReportSubmitBo.InterviewInfo info : interviews) {
|
|
|
+ if (info != null && info.hasContent()) {
|
|
|
+ MainBackInterview interview = new MainBackInterview();
|
|
|
+ interview.setCandidateId(candidate.getId());
|
|
|
+ interview.setRecordId(recordId);
|
|
|
+ interview.setIntervieweeName(info.getName());
|
|
|
+ interview.setIntervieweeRelation(info.getRelationship());
|
|
|
+ interview.setIntervieweeContact(info.getContact());
|
|
|
+ interview.setQa1(info.getQ1());
|
|
|
+ interview.setQa2(info.getQ2());
|
|
|
+ interview.setQa3(info.getQ3());
|
|
|
+ interview.setQa4(info.getQ4());
|
|
|
+ interview.setQa5(info.getQ5());
|
|
|
+ interview.setTenantId(backOrder == null ? null : backOrder.getTenantId());
|
|
|
+ interviewMapper.insert(interview);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 更新 record 状态为 2(已提交)
|
|
|
+ MainBackRecord update = new MainBackRecord();
|
|
|
+ update.setId(recordId);
|
|
|
+ update.setReportStatus(2);
|
|
|
+ update.setReportUrl(null);
|
|
|
+ update.setFinishTime(LocalDateTime.now());
|
|
|
+ baseMapper.updateById(update);
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|