面试/面谈

This commit is contained in:
zhangchenbiao
2024-03-26 11:25:17 +08:00
parent 29bbbe5847
commit 903afe7b90
8 changed files with 55 additions and 10 deletions

View File

@@ -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),

View File

@@ -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;
}
/**

View File

@@ -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()){

View File

@@ -16,12 +16,14 @@ public interface LineCalendarsEventMapper extends Mapper<LineCalendarsEventDO> {
* 被占用次数
* @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);
}

View File

@@ -40,5 +40,8 @@
<if test="regionId == 1">
and region_id = #{regionId}
</if>
<if test="excludeInterviewId != null">
and id != #{excludeInterviewId}
</if>
</select>
</mapper>

View File

@@ -71,6 +71,9 @@
<if test="lineSource != null and lineSource != ''">
and b.line_source = #{lineSource}
</if>
<if test="interviewStartTime != null and interviewEndTime != null ">
and a.start_time between #{interviewStartTime} and #{interviewEndTime}
</if>
<if test="interviewerUserId != null and interviewerUserId != ''">
and a.interviewer_user_id = #{interviewerUserId}
</if>

View File

@@ -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();
}
}

View File

@@ -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<AppointmentTimeVO> 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);