diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java index b5f46e902..83b02d491 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/OperateTypeEnum.java @@ -21,6 +21,7 @@ public enum OperateTypeEnum { CLOSE_FOLLOW("close_follow", "结束跟进", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, REJECT_PUBLIC_REASON, REJECT_REAL_REASON, CERTIFY_FILE)), TRANSFER_INVESTMENT_MANAGER("transfer_investment_manager", "转让招商经理", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_INVESTMENT_MANAGER_USERNAME, BEFORE_INVESTMENT_MANAGER_MOBILE, AFTER_INVESTMENT_MANAGER_USERNAME, AFTER_INVESTMENT_MANAGER_MOBILE)), INTERVIEW_APPOINTMENT("interview_appointment", "预约面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)), + INTERVIEWER_BOOK_INTERVIEW("interviewer_book_interview", "招商经理主动预约面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME)), MODIFY_INTERVIEW_TIME("modify_interview_time", "修改面试时间", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, OPERATE_TIME, BEFORE_INTERVIEW_TIME, AFTER_INTERVIEW_TIME)), ENTRUST_OTHERS("entrust_others", "委托他人", Arrays.asList(OPERATE_USER_ID,OPERATE_USER_NAME, MOBILE, BEFORE_INTERVIEWR_NAME, AFTER_INTERVIEWR_NAME, BEFORE_INTERVIEWR_MOBILE, AFTER_INTERVIEWR_MOBILE)), diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/CreateAppointmentReq.java b/coolstore-partner-model/src/main/java/com/cool/store/request/CreateAppointmentReq.java index 8b07dd714..a9c238c42 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/CreateAppointmentReq.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/CreateAppointmentReq.java @@ -7,7 +7,7 @@ import io.swagger.annotations.ApiModelProperty; public class CreateAppointmentReq { @ApiModelProperty(value = "加盟商用户ID", required = true) private String partnerId; - @ApiModelProperty(value = "面试官id") + @ApiModelProperty(value = "面试官id,PC 端招商经理主动预约可以不传") private String interviewerId; @ApiModelProperty(value = "预约开始时间 (YYYY-MM-DD hh:mm:ss)", required = true) diff --git a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CreateAppointmentVO.java b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CreateAppointmentVO.java index 0042e04b4..0d4e28f9a 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CreateAppointmentVO.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/vo/interview/CreateAppointmentVO.java @@ -13,6 +13,13 @@ public class CreateAppointmentVO { @ApiModelProperty("面试安排id") private String interviewPlanId; + public CreateAppointmentVO() { + } + + public CreateAppointmentVO(String interviewPlanId) { + this.interviewPlanId = interviewPlanId; + } + public String getInterviewPlanId() { return interviewPlanId; } 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 df727c1ec..d4c76f3c0 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 @@ -78,4 +78,10 @@ public interface InterviewService { * @return {@link GetFreeBusyListVO} */ GetFreeBusyListVO getFreeBusyList(GetFreeBusyListReq request); + + /** + * 招商经理主动预约面试 + * @param request {@link com.cool.store.request.CreateAppointmentReq} + */ + CreateAppointmentVO bookInterview(CreateAppointmentReq request) 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 3cf1fb57f..fcc7e2650 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 @@ -79,7 +79,6 @@ public class InterviewServiceImpl implements InterviewService { @Autowired private EnterpriseUserService enterpriseUserService; - // @Autowired // private SmsService smsService; @@ -770,4 +769,81 @@ public class InterviewServiceImpl implements InterviewService { return freeBusyListVO; } + @Transactional + @Override + public CreateAppointmentVO bookInterview(CreateAppointmentReq request) throws ApiException { + if(request.getPartnerLineId() == null || request.getPartnerLineId()<=0){ + throw new ApiException(ErrorCodeEnum.INTERVIEW_LINE_ID_IS_NULL); + } + //如果开始时间小于当前时间需要报错 + if(DateUtil.date().isAfter(DateUtil.parse(request.getStartBookingTime()))){ + throw new ApiException(ErrorCodeEnum.CREATE_APPOINTMENT_TIME_ERROR); + } + HyPartnerInterviewPlanDO hyPartnerInterviewPlanDO = new HyPartnerInterviewPlanDO(); + hyPartnerInterviewPlanDO.setPartnerLineId(request.getPartnerLineId()); + hyPartnerInterviewPlanDO.setDeleted(false); + List hyPartnerInterviewPlanDOS = hyPartnerInterviewPlanMapper.selectBySelective(hyPartnerInterviewPlanDO); + if(CollectionUtils.isNotEmpty(hyPartnerInterviewPlanDOS)&&hyPartnerInterviewPlanDOS.get(0).getId()!=null){ + throw new ApiException(ErrorCodeEnum.INTERVIEW_PLAN_ALREADY_EXIST); + } + String interviewrId = request.getInterviewerId(); + if(StringUtils.isEmpty(interviewrId)){ + interviewrId = getInterviewerByPartner(request.getPartnerId(),String.valueOf(request.getPartnerLineId())); + } + //1.创建面试计划 + Date now = new Date(); + HyPartnerInterviewPlanDO interviewPlanDO = new HyPartnerInterviewPlanDO(); + String startBookingTime = request.getStartBookingTime(); + String startDate = startBookingTime.substring(0, 10); + interviewPlanDO.setInterviewDate(Convert.toDate(startDate)); + interviewPlanDO.setCreateTime(now); + interviewPlanDO.setUpdateTime(now); + interviewPlanDO.setStartTime(Convert.toDate(request.getStartBookingTime())); + interviewPlanDO.setEndTime(Convert.toDate(request.getEndBookingTime())); + interviewPlanDO.setPartnerId(request.getPartnerId()); + interviewPlanDO.setPartnerLineId(request.getPartnerLineId()); + interviewPlanDO.setInterviewer(interviewrId); + interviewPlanDO.setIsPartnerInterview(0); + interviewPlanDO.setApplicationApproved(1); + //1.2 生成房间号 + interviewPlanDO.setRoomId(StringUtil.generateRoomId(startBookingTime)); + interviewPlanDO.setRoomStatus(RoomStatus.WAIT_FOR_OPEN.getCode()); + hyPartnerInterviewPlanMapper.insertSelective(interviewPlanDO); + + //2.创建面试信息 + HyPartnerInterviewDO hyPartnerInterviewDO = new HyPartnerInterviewDO(); + hyPartnerInterviewDO.setInterviewPlanId(interviewPlanDO.getId()); + hyPartnerInterviewDO.setStatus(Integer.parseInt(WorkflowStatusEnum.INTERVIEW_2.getCode())); + hyPartnerInterviewDO.setPartnerLineId(request.getPartnerLineId()); + hyPartnerInterviewDO.setPartnerId(request.getPartnerId()); + hyPartnerInterviewDO.setInterviewer(interviewrId); + hyPartnerInterviewDO.setCreateTime(now); + hyPartnerInterviewDO.setUpdateTime(now); + hyPartnerInterviewDO.setDeleted(false); + HyPartnerLineInfoDO hyPartnerLineDO = new HyPartnerLineInfoDO(); + hyPartnerInterviewDO.setUpdateTime(now); + hyPartnerInterviewMapper.insertSelective(hyPartnerInterviewDO); + + //3. 修改线索流程状态 + hyPartnerLineDO.setId(request.getPartnerLineId()); + hyPartnerLineDO.setUpdateTime(now); + hyPartnerLineDO.setWorkflowStage(WorkflowStageEnum.INTERVIEW.getCode()); + hyPartnerLineDO.setWorkflowStatus(WorkflowStatusEnum.INTERVIEW_2.getCode()); + hyPartnerLineInfoMapper.updateByPrimaryKeySelective(hyPartnerLineDO); + + //4. 异步发送短信给加盟商 + HyPartnerBaseInfoDO partnerBaseInfo = hyPartnerBaseInfoMapper.getByPartnerLineId(request.getPartnerLineId()); + if(partnerBaseInfo == null){ + throw new ServiceException(ErrorCodeEnum.INTERVIEW_PARTNER_NOT_EXIST); + } + eventCenterHttpRequest.sendSmsVariable(partnerBaseInfo.getMobile(), SMSMsgEnum.INTERVIEW_APPOINTMENT_PASS, DateUtil.format(DateUtil.parseDateTime(request.getStartBookingTime()), DatePattern.NORM_DATETIME_MINUTE_PATTERN), wechatMiniAppService.getMiniAppUrl()); + + //5. 记录日志 + PartnerUserInfoVO operator = PartnerUserHolder.getUser(); + LogBasicDTO log = LogBasicDTO.builder().mobile(operator.getMobile()).operateUserId(operator.getPartnerId()).operateUsername(operator.getUsername()).operateTime(DateUtil.format(new Date(), CoolDateUtils.DATE_FORMAT_SEC)).mobile(operator.getMobile()).build(); + logService.recordPartnerBizLog(operator, request.getPartnerLineId(), OperateTypeEnum.INTERVIEWER_BOOK_INTERVIEW,log); + + return new CreateAppointmentVO(interviewPlanDO.getId().toString()); + } + } 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 52e2d093f..793299e75 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 @@ -7,6 +7,7 @@ import com.cool.store.response.ResponseResult; import com.cool.store.service.FeiShuService; import com.cool.store.service.InterviewService; import com.cool.store.vo.EnterInterviewVO; +import com.cool.store.vo.interview.CreateAppointmentVO; import com.cool.store.vo.interview.GetFreeBusyListVO; import com.cool.store.vo.interview.InterviewVO; import com.github.pagehelper.PageHelper; @@ -56,13 +57,19 @@ public class InterviewController { return ResponseResult.success(); } - @PostMapping("/interviewer/freebusy/list") + @PostMapping("/freebusy/list") @ApiOperation("查询各预约时间段情况") public ResponseResult getFreeBusyList(@RequestBody GetFreeBusyListReq request) throws ApiException { GetFreeBusyListVO getFreeBusyListVO= interviewService.getFreeBusyList(request); return ResponseResult.success(getFreeBusyListVO); } + @PostMapping("/appointment/booking") + @ApiOperation("招商经理主动预约面试") + public ResponseResult bookInterview(@RequestBody CreateAppointmentReq request) throws ApiException { + return ResponseResult.success(interviewService.bookInterview(request)); + } + @PostMapping("/modifyInterviewTime") @ApiOperation("修改面试时间") public ResponseResult modifyInterviewTime(@RequestBody ModifyInterviewTimeReq request) throws ApiException {