From c7791d87e84ac27b1c28dc406f46a17ea1f5abd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BF=9E=E6=89=AC?= Date: Fri, 30 Jun 2023 11:47:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A1=E6=89=B9=E8=B6=85=E6=97=B6=E6=8F=90?= =?UTF-8?q?=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/HyPartnerInterviewPlanMapper.java | 6 +++ .../mapper/HyPartnerInterviewPlanMapper.xml | 20 +++++++++ .../dto/message/RemindInterviewMsgDTO.java | 17 ++++++++ .../java/com/cool/store/job/JobHandler.java | 13 ------ .../cool/store/service/InterviewService.java | 2 + .../store/service/impl/CommonServiceImpl.java | 3 +- .../HyPartnerInterviewPlanServiceImpl.java | 42 ++++++++++++++++--- .../service/impl/InterviewServiceImpl.java | 5 ++- .../resources/application-local.properties | 4 +- 9 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 coolstore-partner-model/src/main/java/com/cool/store/dto/message/RemindInterviewMsgDTO.java 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 026de0d9a..77887f261 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 @@ -1,5 +1,6 @@ package com.cool.store.mapper; +import com.cool.store.dto.message.RemindInterviewMsgDTO; import com.cool.store.dto.partner.PartnerInterviewInfoDTO; import com.cool.store.dto.partner.SpecialDateRangeInterviewCountDTO; import com.cool.store.entity.HyPartnerInterviewPlanDO; @@ -157,4 +158,9 @@ public interface HyPartnerInterviewPlanMapper { HyPartnerInterviewPlanDO getInterviewPlanByLineId(Long lineId); + List selectRemindInterviewPlan(@Param("startTime") Date startTime, + @Param("endTime") Date endTime, + @Param("workflowStage") String workflowStage, + @Param("workflowStatus") String workflowStatus); + } \ 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 0ea3b747f..35e9dc71d 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerInterviewPlanMapper.xml @@ -498,4 +498,24 @@ from hy_partner_interview_plan where partner_line_id = #{lineId} and deleted = 0 + \ No newline at end of file diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/message/RemindInterviewMsgDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/message/RemindInterviewMsgDTO.java new file mode 100644 index 000000000..8191c1ecd --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/message/RemindInterviewMsgDTO.java @@ -0,0 +1,17 @@ +package com.cool.store.dto.message; + +import lombok.Data; + +/** + * @Author: young.yu + * @Date: 2023-06-30 11:02 + * @Description: + */ +@Data +public class RemindInterviewMsgDTO { + private String partnerId; + private String interviewerId; + private String partnerName; + private String partnerMobile; + private String startTime; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/job/JobHandler.java b/coolstore-partner-service/src/main/java/com/cool/store/job/JobHandler.java index 183974e29..63255b250 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/job/JobHandler.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/job/JobHandler.java @@ -63,19 +63,6 @@ public class JobHandler { } } -// @XxlJob("updateAbsentInterview") -// public void updateAbsentInterview(){ -// try { -// log.info("面试缺席定时任务开始"); -// hyPartnerInterviewPlanService.updateAbsentInterview(); -// log.info("面试缺席定时任务结束"); -// XxlJobHelper.handleSuccess(); -// }catch (Exception e){ -// log.error("面试缺席定时任务异常",e); -// XxlJobHelper.log("面试缺席定时任务异常"+e.getMessage()); -// } -// } - @XxlJob("approvalReminder") public void approvalReminder(){ try { 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 4678533e5..819c12804 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 @@ -69,4 +69,6 @@ public interface InterviewService { public void rejectInterviewAndSuspendLine(Long iterviewId,Long interviewPlanId,String certifyFile); + public String generateFeiShuInterviewMsg(String partnerName, String partnerMobile, String interviewTime); + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonServiceImpl.java index 83b82e4f7..2da05b5d6 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/CommonServiceImpl.java @@ -55,7 +55,8 @@ public class CommonServiceImpl implements CommonService { String workflowStage = hyPartnerLineInfoDO.getWorkflowStage(); String workflowStatus = hyPartnerLineInfoDO.getWorkflowStatus(); Long partnerLineId = hyPartnerLineInfoDO.getId(); - if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_2.getCode())) { + if ((workflowStage.equals(WorkflowStageEnum.RESERVATION.getCode()) && workflowStatus.equals(WorkflowStatusEnum.RESERVATION_1.getCode()))|| + (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_2.getCode()))) { return getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间"); } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_3.getCode())) { String tips = getInterviewTips(partnerLineId, OperateTypeEnum.MODIFY_INTERVIEW_TIME, ""); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java index f4aae65c8..1825f61bf 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/HyPartnerInterviewPlanServiceImpl.java @@ -3,12 +3,16 @@ package com.cool.store.service.impl; import cn.hutool.core.date.DateUtil; import com.cool.store.constants.CommonConstants; import com.cool.store.dao.*; +import com.cool.store.dto.message.RemindInterviewMsgDTO; +import com.cool.store.dto.message.SendCardMessageDTO; import com.cool.store.dto.partner.PartnerInterviewInfoDTO; import com.cool.store.entity.*; +import com.cool.store.enums.MessageTypeEnum; import com.cool.store.enums.RoomStatus; import com.cool.store.enums.WorkflowStageEnum; import com.cool.store.enums.WorkflowStatusEnum; import com.cool.store.exception.ApiException; +import com.cool.store.http.ISVHttpRequest; import com.cool.store.mapper.HyPartnerInterviewMapper; import com.cool.store.mapper.HyPartnerInterviewPlanMapper; import com.cool.store.mapper.HyPartnerLineInfoMapper; @@ -16,15 +20,18 @@ import com.cool.store.request.CloseFollowRequest; import com.cool.store.request.GetInterviewListReq; import com.cool.store.service.HyPartnerInterviewPlanService; import com.cool.store.service.HyPartnerLineInfoService; +import com.cool.store.service.InterviewService; import com.cool.store.utils.CoolDateUtils; import com.cool.store.vo.InterviewDetailInfoVO; import com.cool.store.vo.PartnerInterviewInfoVO; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -40,6 +47,7 @@ import java.util.stream.Collectors; * @Date 2023/6/8 19:32 * @Version 1.0 */ +@Slf4j @Service public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlanService { @@ -68,8 +76,15 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan @Resource EnterpriseUserDAO enterpriseUserDAO; + @Autowired + private InterviewService interviewService; + @Value("${feishu.notice.link.url:null}") + private String linkUrl; + + @Autowired + private ISVHttpRequest isvHttpRequest; @Override public List getInterviewPlanList(String userId,Date dateTime) { String currentDay = DateUtil.format(dateTime, CoolDateUtils.DATE_FORMAT_DAY); @@ -227,11 +242,28 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan @Override public void approvalReminder() throws ApiException { //查询即将超时但未审批的面试 - HyPartnerInterviewPlanDO hyPartnerInterviewPlanDO = new HyPartnerInterviewPlanDO(); - hyPartnerInterviewPlanDO.setDeleted(Boolean.FALSE); - hyPartnerInterviewPlanDO.setApplicationApproved(0); -// hyPartnerInterviewPlanDO.setStartTime(); - List hyPartnerInterviewPlanDOS = hyPartnerInterviewPlanMapper.selectBySelective(hyPartnerInterviewPlanDO); + Date startTime = new Date(); + Date endTime = DateUtil.offsetMinute(startTime,30); + List remindInterviewMsgDTOS = hyPartnerInterviewPlanMapper.selectRemindInterviewPlan(startTime, endTime, WorkflowStageEnum.RESERVATION.getCode(), WorkflowStatusEnum.RESERVATION_1.getCode()); + if(CollectionUtils.isEmpty(remindInterviewMsgDTOS)){ + return; + } + //发送消息 + remindInterviewMsgDTOS.stream().forEach(interviewMsgDTO->{ + try { + List userIds = new ArrayList<>(); + userIds.add(interviewMsgDTO.getInterviewerId()); + SendCardMessageDTO sendCardMessageDTO = new SendCardMessageDTO(); + sendCardMessageDTO.setUserIds(userIds); + sendCardMessageDTO.setMessageType(MessageTypeEnum.SCHEDULE_REMINDER); + sendCardMessageDTO.setMessageUrl(linkUrl); + sendCardMessageDTO.setTitle("面试预约申请"); + sendCardMessageDTO.setContent(interviewService.generateFeiShuInterviewMsg(interviewMsgDTO.getPartnerName(), interviewMsgDTO.getPartnerMobile(), interviewMsgDTO.getStartTime())); + isvHttpRequest.sendFeiShuCardMessage(sendCardMessageDTO); + } catch (ApiException e) { + log.error("发送面试提醒消息失败",e); + } + }); } /** 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 ee6018f7c..3ad3ee612 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 @@ -570,12 +570,13 @@ public class InterviewServiceImpl implements InterviewService { // hyPartnerLineInfoService.closeOrPassFollow(request.getOperatorId(),closeFollowRequest); // } + @Override public String generateFeiShuInterviewMsg(String partnerName, String partnerMobile, String interviewTime){ //"您有一个【面试预约申请】待处理,预约人【姓名】手机号【13xxxxxxxxx】,预约面试时间【YYYY年MM月DD日 hh:mm】,请及时处理】" StringBuffer sb = new StringBuffer(); - sb.append("您有一个【面试预约申请】待处理,预约人") + sb.append("您有一个【面试预约申请】待处理,预约人 ") .append(partnerName) - .append("手机号") + .append(" 手机号 ") .append(partnerMobile) .append(",预约面试时间") .append(DateUtil.format(DateUtil.parse(interviewTime), "yyyy年MM月dd日 HH:mm")); diff --git a/coolstore-partner-webb/src/main/resources/application-local.properties b/coolstore-partner-webb/src/main/resources/application-local.properties index 23cb1713f..3778e03d3 100644 --- a/coolstore-partner-webb/src/main/resources/application-local.properties +++ b/coolstore-partner-webb/src/main/resources/application-local.properties @@ -83,4 +83,6 @@ xxl.job.executor.logpath = logs/xxl-job/jobhandler xxl.job.executor.logretentiondays = 30 xxl.job.accessToken = -ec.baseUrl=http://127.0.0.1:8017 \ No newline at end of file +ec.baseUrl=http://127.0.0.1:8017 +#飞书通知 +feishu.notice.link.url = https://applink.feishu.cn/client/web_app/open?appId=cli_a4f3e24dc73a100c&lk_target_url=https%3A%2F%2Ftest-hsay-web.coolstore.cn%2F%23%2Fwork%2Fbench \ No newline at end of file