diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java
index 8a55371ab..2d8335042 100644
--- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewMapper.java
@@ -83,4 +83,10 @@ public interface HyPartnerInterviewMapper {
*/
String getLineId(@Param("interviewPlanId") String interviewPlanId);
+ /**
+ * 获取面试流程状态
+ * @param interviewPlanId
+ * @return
+ */
+ String getStatus(String interviewPlanId);
}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java
index 71280f73f..da1d3bb2d 100644
--- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerInterviewPlanMapper.java
@@ -142,4 +142,15 @@ public interface HyPartnerInterviewPlanMapper {
*/
Integer getRoomStatus(@Param("interviewPlanId") String interviewPlanId);
+ /**
+ * 获取面试开始时间
+ */
+ String getInterviewStartTime(String interviewPlanId);
+
+ /**
+ * 根据面试计划id获取面试计划信息
+ * @param interviewPlanId
+ * @return
+ */
+ HyPartnerInterviewPlanDO getInterviewPlanById(String interviewPlanId);
}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml
index 29edaeaa1..46523fb8d 100644
--- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml
+++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewMapper.xml
@@ -436,4 +436,11 @@
WHERE interview_plan_id = #{interviewPlanId}
+
+
+
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml
index 994cb0277..4c9c19a5d 100644
--- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml
+++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml
@@ -465,4 +465,18 @@
from hy_partner_interview_plan
where id = #{interviewPlanId}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java
index 1429c7bd9..493075ac4 100644
--- a/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java
+++ b/coolstore-partner-service/src/main/java/com/cool/store/service/InterviewService.java
@@ -47,7 +47,7 @@ public interface InterviewService {
* 最后返回 userSign 用于进入腾讯云音视频房间
* @return userSign 进入视频所需签名
*/
- EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto);
+ EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) throws ApiException;
/**
* 创建面试预约信息
diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java
index 6364931cb..85c24fed1 100644
--- a/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java
+++ b/coolstore-partner-service/src/main/java/com/cool/store/service/PartnerInterviewService.java
@@ -22,7 +22,7 @@ public interface PartnerInterviewService {
* 最后返回 userSign 用于进入腾讯云音视频房间
* @return userSign 进入视频所需签名
*/
- EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto);
+ EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) throws ApiException;
/**
* 获取通知函详情
diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java
index f052a8aa9..12c1ddca9 100644
--- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java
+++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/InterviewServiceImpl.java
@@ -2,6 +2,8 @@ package com.cool.store.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
@@ -251,18 +253,33 @@ public class InterviewServiceImpl implements InterviewService {
*/
@Override
@Transactional
- public EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) {
+ public EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) throws ApiException {
try {
- //如果面试间状态不是已开放,就不让进
+ //房间状态
Integer roomStatus = hyPartnerInterviewPlanMapper.getRoomStatus(dto.getInterviewPlanId());
- if (!roomStatus.equals(RoomStatus.OPEN.getCode())) {
- throw new RuntimeException();
+ //面试流程状态
+ String status = hyPartnerInterviewMapper.getStatus(dto.getInterviewPlanId());
+ //如果面试间状态是 0 待开放或者面试流程状态是 2 待面试,就不让进
+ //再判断时间是否是正确的时间
+ if (roomStatus.equals(RoomStatus.WAIT_FOR_OPEN.getCode()) || WorkflowStatusEnum.INTERVIEW_2.getCode().equals(status)) {
+ HyPartnerInterviewPlanDO interviewPlan = hyPartnerInterviewPlanMapper.getInterviewPlanById(dto.getInterviewPlanId());
+ //面试预期开始时间
+ DateTime exceptTime = DateUtil.offsetMinute(interviewPlan.getStartTime(), -5);
+ //面试结束时间
+ DateTime endTime = DateUtil.parseDateTime(DateUtil.formatDateTime(interviewPlan.getEndTime()));
+ DateTime now = DateUtil.date();
+ //如果当前时间在预期开始时间和结束时间之间
+ //修改面试状态和房间状态(修改房间状态在后面 hyPartnerInterviewPlanDO 中一并修改)
+ if (exceptTime.isBefore(now) && now.isBefore(endTime)) {
+ //1. 将面试状态改为 --> 2 已开始
+ interviewDAO.updateInterviewWorkflowStatus(dto.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_3);
+ //hyPartnerInterviewDO.setStatus(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_3.getCode()));
+ } else {
+ throw new ApiException(ErrorCodeEnum.ROOM_STATUS_ERROR);
+ }
}
HyPartnerInterviewDO hyPartnerInterviewDO = new HyPartnerInterviewDO();
hyPartnerInterviewDO.setInterviewPlanId(Long.parseLong(dto.getInterviewPlanId()));
- //1. 将面试状态改为 --> 2已开始
- interviewDAO.updateInterviewWorkflowStatus(dto.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_3);
-// hyPartnerInterviewDO.setStatus(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_3.getCode()));
//2. 修改加盟商或面试官进入面试时间
//加盟商
if (dto.getUserType().equals(2)) {
@@ -274,21 +291,25 @@ public class InterviewServiceImpl implements InterviewService {
hyPartnerInterviewMapper.updateByPrimaryKeySelective(hyPartnerInterviewDO);
HyPartnerInterviewPlanDO hyPartnerInterviewPlanDO = new HyPartnerInterviewPlanDO();
hyPartnerInterviewPlanDO.setId(Long.parseLong(dto.getInterviewPlanId()));
+ //修改面试房间状态
+ hyPartnerInterviewPlanDO.setRoomStatus(RoomStatus.OPEN.getCode());
//3. TODO(待确认) 修改面试实际开始时间,以第一个人进来的时间为准,后续不再修改
hyPartnerInterviewPlanMapper.updateActualStartTime(hyPartnerInterviewPlanDO.getId(), DateUtil.now());
//4. 加盟商如果进入了,就修改面试计划表 is_partner_interview 字段
if (dto.getUserType().equals(2)) {
hyPartnerInterviewPlanDO.setIsPartnerInterview(1);
- hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(hyPartnerInterviewPlanDO);
}
+ hyPartnerInterviewPlanMapper.updateByPrimaryKeySelective(hyPartnerInterviewPlanDO);
//5. 查询对应的面试官id、姓名及加盟商姓名
EnterInterviewVO vo = hyPartnerInterviewMapper.getInterviewerByInterviewPlanId(dto.getInterviewPlanId());
//6. 生成 userSign
String userSig = TRTCUtils.genUserSig(sdkAppId, key, dto.getUserId());
vo.setUserSign(userSig);
return vo;
+ } catch (ApiException apiException) {
+ throw apiException;
} catch (Exception e) {
- throw new ServiceException(ErrorCodeEnum.INTERVIEW_ENTER_FAIL);
+ throw new ApiException(ErrorCodeEnum.INTERVIEW_ENTER_FAIL);
}
}
diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java
index 6893d66fd..a56a8c229 100644
--- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java
+++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/PartnerInterviewServiceImpl.java
@@ -2,6 +2,7 @@ package com.cool.store.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.cool.store.dao.HyInterviewDAO;
import com.cool.store.dto.partner.EnterInterviewDto;
@@ -69,18 +70,33 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService {
*/
@Override
@Transactional
- public EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) {
+ public EnterInterviewVO enterInterviewRoom(EnterInterviewDto dto) throws ApiException {
try {
- //如果面试间状态不是已开放,就不让进
+ //房间状态
Integer roomStatus = interviewPlanMapper.getRoomStatus(dto.getInterviewPlanId());
- if (!roomStatus.equals(RoomStatus.OPEN.getCode())) {
- throw new RuntimeException();
+ //面试流程状态
+ String status = interviewMapper.getStatus(dto.getInterviewPlanId());
+ //如果面试间状态是 0 待开放或者面试流程状态是 2 待面试,就不让进
+ //再判断时间是否是正确的时间
+ if (roomStatus.equals(RoomStatus.WAIT_FOR_OPEN.getCode()) || WorkflowStatusEnum.INTERVIEW_2.getCode().equals(status)) {
+ HyPartnerInterviewPlanDO interviewPlan = interviewPlanMapper.getInterviewPlanById(dto.getInterviewPlanId());
+ //面试预期开始时间
+ DateTime exceptTime = DateUtil.offsetMinute(interviewPlan.getStartTime(), -5);
+ //面试结束时间
+ DateTime endTime = DateUtil.parseDateTime(DateUtil.formatDateTime(interviewPlan.getEndTime()));
+ DateTime now = DateUtil.date();
+ //如果当前时间在预期开始时间和结束时间之间
+ //修改面试状态和房间状态(修改房间状态在后面 hyPartnerInterviewPlanDO 中一并修改)
+ if (exceptTime.isBefore(now) && now.isBefore(endTime)) {
+ //1. 将面试状态改为 --> 2 已开始
+ interviewDAO.updateInterviewWorkflowStatus(dto.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_3);
+ //hyPartnerInterviewDO.setStatus(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_3.getCode()));
+ } else {
+ throw new ApiException(ErrorCodeEnum.ROOM_STATUS_ERROR);
+ }
}
HyPartnerInterviewDO hyPartnerInterviewDO = new HyPartnerInterviewDO();
hyPartnerInterviewDO.setInterviewPlanId(Long.parseLong(dto.getInterviewPlanId()));
- //1. 将面试状态改为 --> 2已开始
- interviewDAO.updateInterviewWorkflowStatus(dto.getInterviewPlanId(), WorkflowStatusEnum.INTERVIEW_3);
-// hyPartnerInterviewDO.setStatus(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_3.getCode()));
//2. 修改加盟商或面试官进入面试时间
//加盟商
if (dto.getUserType().equals(2)) {
@@ -92,21 +108,25 @@ public class PartnerInterviewServiceImpl implements PartnerInterviewService {
interviewMapper.updateByPrimaryKeySelective(hyPartnerInterviewDO);
HyPartnerInterviewPlanDO hyPartnerInterviewPlanDO = new HyPartnerInterviewPlanDO();
hyPartnerInterviewPlanDO.setId(Long.parseLong(dto.getInterviewPlanId()));
+ //修改面试房间状态
+ hyPartnerInterviewPlanDO.setRoomStatus(RoomStatus.OPEN.getCode());
//3. TODO(待确认) 修改面试实际开始时间,以第一个人进来的时间为准,后续不再修改
interviewPlanMapper.updateActualStartTime(hyPartnerInterviewPlanDO.getId(), DateUtil.now());
//4. 加盟商如果进入了,就修改面试计划表 is_partner_interview 字段
if (dto.getUserType().equals(2)) {
hyPartnerInterviewPlanDO.setIsPartnerInterview(1);
- interviewPlanMapper.updateByPrimaryKeySelective(hyPartnerInterviewPlanDO);
}
+ interviewPlanMapper.updateByPrimaryKeySelective(hyPartnerInterviewPlanDO);
//5. 查询对应的面试官id、姓名及加盟商姓名
EnterInterviewVO vo = interviewMapper.getInterviewerByInterviewPlanId(dto.getInterviewPlanId());
//6. 生成 userSign
String userSig = TRTCUtils.genUserSig(sdkAppId, key, dto.getUserId());
vo.setUserSign(userSig);
return vo;
+ } catch (ApiException apiException) {
+ throw apiException;
} catch (Exception e) {
- throw new ServiceException(ErrorCodeEnum.INTERVIEW_ENTER_FAIL);
+ throw new ApiException(ErrorCodeEnum.INTERVIEW_ENTER_FAIL);
}
}
diff --git a/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java b/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java
index 5be60d4e1..26a7421e9 100644
--- a/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java
+++ b/coolstore-partner-webb/src/main/java/com/cool/store/controller/InterviewController.java
@@ -70,7 +70,7 @@ public class InterviewController {
@PostMapping("/enter")
@ApiOperation("进入面试房间")
- public ResponseResult enterInterviewRoom(@RequestBody EnterInterviewDto dto) {
+ public ResponseResult enterInterviewRoom(@RequestBody EnterInterviewDto dto) throws ApiException {
return ResponseResult.success(interviewService.enterInterviewRoom(dto));
}
diff --git a/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java b/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java
index 9bcdd298e..fd4ae835a 100644
--- a/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java
+++ b/coolstore-partner-webc/src/main/java/com/cool/store/controller/InterviewController.java
@@ -38,7 +38,7 @@ public class InterviewController {
@PostMapping("/enter")
@ApiOperation("进入面试间")
- public ResponseResult enterInterviewRoom(@RequestBody EnterInterviewDto dto) {
+ public ResponseResult enterInterviewRoom(@RequestBody EnterInterviewDto dto) throws ApiException {
return ResponseResult.success(interviewService.enterInterviewRoom(dto));
}