diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewTypeEnum.java index c70522904..75dd2d6dc 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/InterviewTypeEnum.java @@ -17,7 +17,7 @@ import java.util.List; */ public enum InterviewTypeEnum { - MEET(0, "面谈", 120, 8, 19), + MEET(0, "面谈", 120, 9, 19), INTERVIEW(1, "一面", 30, 9, 18), diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineCalendarsEventDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineCalendarsEventDAO.java index 48622a9c0..d37ea717c 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineCalendarsEventDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineCalendarsEventDAO.java @@ -49,8 +49,8 @@ public class LineCalendarsEventDAO { * @param endTime * @return */ - public Boolean isOccupied(Integer interviewType, Long regionId, String interviewerUserId, String startTime, String endTime){ - return lineCalendarsEventMapper.getOccupiedCount(interviewType, regionId, interviewerUserId, startTime, endTime) > 0; + public Boolean isOccupied(Integer interviewType, Long regionId, String interviewerUserId, String startTime, String endTime, Long excludeInterviewId){ + return lineCalendarsEventMapper.getOccupiedCount(interviewType, regionId, interviewerUserId, startTime, endTime, excludeInterviewId) > 0; } /** diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java index 1baf251e3..d9dc5abfc 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/LineInfoDAO.java @@ -55,6 +55,16 @@ public class LineInfoDAO { return lineInfoMapper.updateByPrimaryKeySelective(lineInfo); } + public Integer updateWorkflowStageAndInterviewer(Long lineId, WorkflowSubStageStatusEnum workflowSubStageStatus, String firstInterviewer, String secondInterviewer) { + LineInfoDO lineInfo = new LineInfoDO(); + lineInfo.setId(lineId); + lineInfo.setWorkflowSubStageStatus(workflowSubStageStatus.getCode()); + lineInfo.setFirstInterviewer(firstInterviewer); + lineInfo.setSecondInterviewer(secondInterviewer); + return lineInfoMapper.updateByPrimaryKeySelective(lineInfo); + } + + public LineInfoDO getByPartnerId(String partnerId) { LineInfoDO lineInfo = lineInfoMapper.getByPartnerId(partnerId); if(Objects.nonNull(lineInfo) && !lineInfo.getDeleted()){ diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineCalendarsEventMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineCalendarsEventMapper.java index a20f560d9..c43c6bd40 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineCalendarsEventMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/LineCalendarsEventMapper.java @@ -16,12 +16,14 @@ public interface LineCalendarsEventMapper extends Mapper { * 被占用次数 * @param interviewType * @param regionId - * @param interviewer + * @param interviewerUserId * @param startTime * @param endTime + * @param excludeInterviewId * @return */ - Integer getOccupiedCount(@Param("interviewType") Integer interviewType, @Param("regionId") Long regionId, @Param("interviewerUserId") String interviewerUserId, @Param("startTime") String startTime, @Param("endTime") String endTime); + Integer getOccupiedCount(@Param("interviewType") Integer interviewType, @Param("regionId") Long regionId, @Param("interviewerUserId") String interviewerUserId, + @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("excludeInterviewId")Long excludeInterviewId); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineCalendarsEventMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineCalendarsEventMapper.xml index d8fe1810e..4ccaa3a09 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/LineCalendarsEventMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/LineCalendarsEventMapper.xml @@ -40,5 +40,8 @@ and region_id = #{regionId} + + and id != #{excludeInterviewId} + \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml index 3bb5c3ded..cd04de858 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/LineInterviewMapper.xml @@ -71,6 +71,9 @@ and b.line_source = #{lineSource} + + and a.start_time between #{interviewStartTime} and #{interviewEndTime} + and a.interviewer_user_id = #{interviewerUserId} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java index da0ec6be1..f02063c96 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonService.java @@ -1,10 +1,14 @@ package com.cool.store.service.impl; +import com.cool.store.dao.EnterpriseUserDAO; +import com.cool.store.enums.UserRoleEnum; import com.cool.store.enums.WorkflowSubStageEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; +import javax.annotation.Resource; + /** * @author zhangchenbiao * @FileName: CommonService @@ -16,9 +20,22 @@ public class CommonService { @Autowired private ApplicationContext applicationContext; + @Resource + private EnterpriseUserDAO enterpriseUserDAO; public LineFlowService getLineFlowService(Integer workflowSubStage){ WorkflowSubStageEnum workflowSubStageEnum = WorkflowSubStageEnum.getWorkflowSubStageEnum(workflowSubStage); return (LineFlowService)applicationContext.getBean(workflowSubStageEnum.getClazz()); } + + /** + * 获取用户id + * @param areaId 城市id + * @param userRole + * @return + */ + public String getUserIdByAreaAndUserRole(Long areaId, UserRoleEnum userRole){ + //随机一个 + return enterpriseUserDAO.getUserInfoByUserIds(null).stream().findAny().get().getUserId(); + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineInterviewServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineInterviewServiceImpl.java index 5a6ae7a36..ff6b309a4 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineInterviewServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/LineInterviewServiceImpl.java @@ -64,6 +64,8 @@ public class LineInterviewServiceImpl extends LineFlowService implements LineInt private HyOpenAreaInfoDAO hyOpenAreaInfoDAO; @Resource private LineAuditInfoDAO lineAuditInfoDAO; + @Resource + private CommonService commonService; @Override public List getAppointmentTime(Long lineId, Integer interviewType, LocalDate appointmentDate) { @@ -99,18 +101,22 @@ public class LineInterviewServiceImpl extends LineFlowService implements LineInt throw new ServiceException(ErrorCodeEnum.LINE_STATUS_NOT_ALLOW_OPERATE); } InterviewTypeEnum interviewType = WorkflowSubStageEnum.getInterviewType(lineInfo.getWorkflowSubStage()); - String interviewer = InterviewTypeEnum.MEET.equals(interviewType) ? lineInfo.getInvestmentManager() : InterviewTypeEnum.INTERVIEW.equals(interviewType) ? lineInfo.getFirstInterviewer() : lineInfo.getSecondInterviewer(); - Boolean occupied = lineCalendarsEventDAO.isOccupied(interviewType.getCode(), lineInfo.getRegionId(), interviewer, request.getStartTime(), request.getEndTime()); + UserRoleEnum userRole = InterviewTypeEnum.MEET.equals(interviewType) ? UserRoleEnum.INVESTMENT_MANAGER : UserRoleEnum.REGION_MANAGER; + //获取面试官 + String interviewerUserId = InterviewTypeEnum.MEET.equals(interviewType) ? lineInfo.getInvestmentManager() : commonService.getUserIdByAreaAndUserRole(lineInfo.getWantShopAreaId(), userRole); + String firstInterviewer = InterviewTypeEnum.INTERVIEW.equals(interviewType) ? interviewerUserId : null; + String secondInterviewer = InterviewTypeEnum.SECOND_INTERVIEW.equals(interviewType) ? interviewerUserId : null; + Boolean occupied = lineCalendarsEventDAO.isOccupied(interviewType.getCode(), lineInfo.getRegionId(), interviewerUserId, request.getStartTime(), request.getEndTime(), null); if(occupied){ throw new ServiceException(ErrorCodeEnum.TIME_OCCUPIED); } Date startTime = DateUtils.strToDate(request.getStartTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); Date endTime = DateUtils.strToDate(request.getEndTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); - LineCalendarsEventDO calendarsEvent = LineCalendarsEventDO.convertDO(lineInfo, interviewType.getCode(), startTime, endTime, interviewer); + LineCalendarsEventDO calendarsEvent = LineCalendarsEventDO.convertDO(lineInfo, interviewType.getCode(), startTime, endTime, interviewerUserId); Long eventId = lineCalendarsEventDAO.addCalendarsEvent(calendarsEvent); WorkflowSubStageStatusEnum workflowSubStageStatus = InterviewTypeEnum.getWorkflowSubStageStatus(interviewType); //跟新线索状态为已预约 - lineInfoDAO.updateWorkflowStage(lineInfo.getId(), null, workflowSubStageStatus); + lineInfoDAO.updateWorkflowStageAndInterviewer(lineInfo.getId(), workflowSubStageStatus, firstInterviewer, secondInterviewer); LineInterviewDO interviewInfo = lineInterviewDAO.getInterviewInfo(lineInfo.getId(), interviewType); if(Objects.nonNull(interviewInfo)){ if(!WorkflowSubStageStatusEnum.isReappointmentStatus(lineInfo.getWorkflowSubStageStatus())){ @@ -120,7 +126,7 @@ public class LineInterviewServiceImpl extends LineFlowService implements LineInt //删除该面试记录 lineInterviewDAO.deleteInterviewInfo(interviewInfo.getId()); } - LineInterviewDO addInterview = LineInterviewDO.convertDO(lineInfo, startTime, endTime, UUIDUtils.get8UUID(), interviewer, interviewType.getCode(), eventId); + LineInterviewDO addInterview = LineInterviewDO.convertDO(lineInfo, startTime, endTime, UUIDUtils.get8UUID(), interviewerUserId, interviewType.getCode(), eventId); lineInterviewDAO.addInterviewInfo(addInterview); return Boolean.TRUE; } @@ -148,6 +154,10 @@ public class LineInterviewServiceImpl extends LineFlowService implements LineInt } Date startTime = DateUtils.strToDate(request.getStartTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); Date endTime = DateUtils.strToDate(request.getEndTime(), DateUtils.YYYY_MM_DD_HH_MM_SS); + Boolean occupied = lineCalendarsEventDAO.isOccupied(interviewType.getCode(), lineInfo.getRegionId(), interviewInfo.getInterviewerUserId(), request.getStartTime(), request.getEndTime(), interviewInfo.getId()); + if(occupied){ + throw new ServiceException(ErrorCodeEnum.TIME_OCCUPIED); + } interviewInfo.setInterviewDate(startTime); interviewInfo.setStartTime(startTime); interviewInfo.setEndTime(endTime);