From 2bc4537192a8299b3876c6daa40ae8579b879175 Mon Sep 17 00:00:00 2001 From: pserimal Date: Mon, 26 Jun 2023 13:29:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E5=85=A5=E9=9D=A2=E8=AF=95=E9=97=B4?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE=E9=9D=A2=E8=AF=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=92=8C=E6=97=B6=E9=97=B4=E6=A0=A1=E9=AA=8C=E5=92=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=9D=A2=E8=AF=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/HyPartnerInterviewMapper.java | 6 +++ .../mapper/HyPartnerInterviewPlanMapper.java | 11 ++++++ .../mapper/HyPartnerInterviewMapper.xml | 7 ++++ .../mapper/HyPartnerInterviewPlanMapper.xml | 14 +++++++ .../cool/store/service/InterviewService.java | 2 +- .../service/PartnerInterviewService.java | 2 +- .../service/impl/InterviewServiceImpl.java | 39 ++++++++++++++----- .../impl/PartnerInterviewServiceImpl.java | 38 +++++++++++++----- .../store/controller/InterviewController.java | 2 +- .../store/controller/InterviewController.java | 2 +- 10 files changed, 101 insertions(+), 22 deletions(-) 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)); }