Pārlūkot izejas kodu

新增测评的时候选择岗位->审核岗位的时候选择测评

jialuyu 1 mēnesi atpakaļ
vecāks
revīzija
9bc55068bd

+ 6 - 2
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/controller/MainAuditController.java

@@ -65,8 +65,12 @@ public class MainAuditController extends BaseController {
      * 审核通过
      */
     @PutMapping("/pass/{id}")
-    public R<Void> auditPass(@PathVariable Long id, @RequestParam(required = false) String remark) {
-        return toAjax(mainAuditService.auditPass(id, remark));
+    public R<Void> auditPass(@PathVariable Long id,
+                              @RequestParam(required = false) String remark,
+                              @RequestParam(required = false) Long evaluationId,
+                              @RequestParam(required = false) java.math.BigDecimal deposit,
+                              @RequestParam(required = false) java.math.BigDecimal finalPayment) {
+        return toAjax(mainAuditService.auditPass(id, remark, evaluationId, deposit, finalPayment));
     }
 
     /**

+ 1 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/MainAudit.java

@@ -29,6 +29,7 @@ public class MainAudit extends BaseEntity {
     private Date auditTime;
     private Long auditBy;
     private String tenantId;
+    private Long evaluationId;
 
     @TableLogic
     private String delFlag;

+ 1 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/bo/MainAuditBo.java

@@ -21,4 +21,5 @@ public class MainAuditBo extends BaseEntity {
     private String auditRemark;
     private BigDecimal deposit;
     private BigDecimal finalPayment;
+    private Long evaluationId;
 }

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/domain/vo/MainAuditVo.java

@@ -121,6 +121,8 @@ public class MainAuditVo implements Serializable {
     private BigDecimal gradeC;
     private String auditByName;
 
+    private Long evaluationId;
+
 
 //    @ExcelProperty(value = "最小工资")
     private BigDecimal minSalary;

+ 1 - 1
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/IMainAuditService.java

@@ -38,7 +38,7 @@ public interface IMainAuditService {
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     /** 审核通过 */
-    Boolean auditPass(Long id, String remark);
+    Boolean auditPass(Long id, String remark, Long evaluationId, java.math.BigDecimal deposit, java.math.BigDecimal finalPayment);
 
     /** 审核驳回 */
     Boolean auditReject(Long id, String remark);

+ 98 - 5
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/MainAuditServiceImpl.java

@@ -15,12 +15,16 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.main.domain.MainAudit;
 import org.dromara.main.domain.MainCompanyApply;
+import org.dromara.main.domain.MainExamApply;
+import org.dromara.main.domain.MainExamEvaluation;
 import org.dromara.main.domain.MainPosition;
 import org.dromara.main.domain.MainPostApply;
 import org.dromara.main.domain.bo.MainAuditBo;
 import org.dromara.main.domain.vo.MainAuditVo;
 import org.dromara.main.mapper.MainAuditMapper;
 import org.dromara.main.mapper.MainCompanyApplyMapper;
+import org.dromara.main.mapper.MainExamApplyMapper;
+import org.dromara.main.mapper.MainExamEvaluationMapper;
 import org.dromara.main.mapper.MainPostApplyMapper;
 import org.dromara.main.service.IMainAuditService;
 import org.dromara.main.service.IMainPositionService;
@@ -44,6 +48,8 @@ public class MainAuditServiceImpl implements IMainAuditService {
     private final MainAuditMapper baseMapper;
     private final MainCompanyApplyMapper companyApplyMapper;
     private final MainPostApplyMapper postApplyMapper;
+    private final MainExamApplyMapper examApplyMapper;
+    private final MainExamEvaluationMapper examEvaluationMapper;
     private final ISysTenantService tenantService;
     private final ISysPostService sysPostService;
     private final IMainPositionService mainPositionService;
@@ -109,12 +115,24 @@ public class MainAuditServiceImpl implements IMainAuditService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean auditPass(Long id, String remark) {
+    public Boolean auditPass(Long id, String remark, Long evaluationId, java.math.BigDecimal deposit, java.math.BigDecimal finalPayment) {
         MainAudit audit = baseMapper.selectById(id);
         if (audit == null) {
             return false;
         }
 
+        // 保存 evaluationId 到审核记录
+        if (evaluationId != null) {
+            audit.setEvaluationId(evaluationId);
+        }
+        // 保存定金和尾款
+        if (deposit != null) {
+            audit.setDeposit(deposit);
+        }
+        if (finalPayment != null) {
+            audit.setFinalPayment(finalPayment);
+        }
+
         // 更新审核状态
         audit.setAuditResult(1);
         audit.setAuditRemark(remark);
@@ -132,8 +150,14 @@ public class MainAuditServiceImpl implements IMainAuditService {
                 // 企业审核通过 - 同步到 sys_tenant 表
                 syncCompanyToTenant(audit.getTargetId());
             } else if (audit.getAuditType() == 2) {
-                // 岗位审核通过 - 保存到 main_post_apply 表(标记为已通过)
-                syncPostApplyToMainPosition(audit.getTargetId());
+                // 岗位审核通过 - 保存到 main_position 表(标记为已通过)
+                Long positionId = syncPostApplyToMainPosition(audit.getTargetId());
+
+                // 如果选择了测评,绑定公司与测评关系,并更新测评的 position_id
+                if (evaluationId != null) {
+                    bindEvaluationToCompany(audit, evaluationId);
+                    updateEvaluationPositionId(evaluationId, positionId);
+                }
             }
         } catch (Exception e) {
             log.error("审核通过后数据同步失败", e);
@@ -143,6 +167,73 @@ public class MainAuditServiceImpl implements IMainAuditService {
         return true;
     }
 
+    /**
+     * 绑定测评与公司关系(插入 main_exam_apply 表)
+     */
+    private void bindEvaluationToCompany(MainAudit audit, Long evaluationId) {
+        // 从岗位申请中获取 tenantId
+        MainPostApply postApply = postApplyMapper.selectById(audit.getTargetId());
+        if (postApply == null) {
+            log.warn("岗位申请信息不存在,无法绑定测评,targetId: " + audit.getTargetId());
+            return;
+        }
+        String tenantId = postApply.getTenantId();
+        if (StringUtils.isBlank(tenantId)) {
+            log.warn("岗位申请的 tenantId 为空,无法绑定测评");
+            return;
+        }
+
+        // 检查是否已存在绑定关系(避免重复)
+        LambdaQueryWrapper<MainExamApply> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MainExamApply::getEvaluationId, evaluationId)
+                   .eq(MainExamApply::getTenantId, tenantId)
+                   .eq(MainExamApply::getDelFlag, "0");
+        MainExamApply existing = examApplyMapper.selectOne(queryWrapper);
+        if (existing != null) {
+            log.debug("公司与测评绑定关系已存在,跳过创建,tenantId: " + tenantId + ", evaluationId: " + evaluationId);
+            return;
+        }
+
+        // 创建公司与测评的绑定记录
+        MainExamApply examApply = new MainExamApply();
+        examApply.setEvaluationId(evaluationId);
+        examApply.setTenantId(tenantId);
+        examApply.setStudentId(0L); // 公司级别绑定,无具体学生
+        examApply.setApplySource("2"); // 来源:2-后台审核绑定
+        examApply.setApplyStatus("0"); // 状态:待开始
+        examApply.setScheduleStartTime(new Date());
+        examApply.setMaxAttemptCount(1);
+        examApply.setDelFlag("0");
+
+        // 设置截止时间(默认30天后)
+        Date deadlineTime = new Date(System.currentTimeMillis() + 30L * 24 * 60 * 60 * 1000);
+        examApply.setDeadlineTime(deadlineTime);
+
+        int result = examApplyMapper.insert(examApply);
+        if (result > 0) {
+            log.debug("公司与测评绑定成功,tenantId: " + tenantId + ", evaluationId: " + evaluationId + ", applyId: " + examApply.getId());
+        } else {
+            throw new ServiceException("公司与测评绑定失败");
+        }
+    }
+
+    /**
+     * 更新测评的 position_id(关联岗位)
+     */
+    private void updateEvaluationPositionId(Long evaluationId, Long positionId) {
+        if (evaluationId == null || positionId == null) {
+            return;
+        }
+        MainExamEvaluation evaluation = examEvaluationMapper.selectById(evaluationId);
+        if (evaluation == null) {
+            log.warn("测评不存在,无法更新 position_id,evaluationId: " + evaluationId);
+            return;
+        }
+        evaluation.setPositionId(positionId);
+        examEvaluationMapper.updateById(evaluation);
+        log.debug("测评 position_id 更新成功,evaluationId: " + evaluationId + ", positionId: " + positionId);
+    }
+
     /**
      * 将企业申请数据同步到租户表
      */
@@ -198,7 +289,7 @@ public class MainAuditServiceImpl implements IMainAuditService {
     /**
      * 将岗位申请数据同步到 sys_post 表
      */
-    private void syncPostApplyToMainPosition(Long applyId) {
+    private Long syncPostApplyToMainPosition(Long applyId) {
         // 1. 查询岗位申请信息
         MainPostApply postApply = postApplyMapper.selectById(applyId);
         if (postApply == null) {
@@ -207,7 +298,7 @@ public class MainAuditServiceImpl implements IMainAuditService {
 
         // 2. 检查是否已经同步过(避免重复)
         if (postApply.getPostId() != null) {
-            return; // 已经有岗位ID,说明已同步过
+            return postApply.getPostId(); // 已经有岗位ID,说明已同步过,返回已有的岗位ID
         }
 
         // 3. 构建 MainPosition 对象,从 MainPostApply 复制数据
@@ -253,6 +344,8 @@ public class MainAuditServiceImpl implements IMainAuditService {
         postApply.setPostId(position.getId()); // 保存新创建的岗位ID
         postApply.setApplyStatus(2); // 已通过
         postApplyMapper.updateById(postApply);
+
+        return position.getId();
     }
 
     @Override

+ 2 - 0
ruoyi-modules/ruoyi-main/src/main/resources/mapper/MainAuditMapper.xml

@@ -59,6 +59,7 @@
         <result property="gradeA"         column="grade_a"         />
         <result property="gradeB"         column="grade_b"         />
         <result property="gradeC"         column="grade_c"         />
+        <result property="evaluationId"   column="evaluation_id"   />
     </resultMap>
 
     <sql id="selectAuditDetailVo">
@@ -72,6 +73,7 @@
             a.final_payment,
             a.audit_time,
             a.audit_by,
+            a.evaluation_id,
             a.create_time,
 
             CASE