审批超时提醒
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.cool.store.mapper;
|
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.PartnerInterviewInfoDTO;
|
||||||
import com.cool.store.dto.partner.SpecialDateRangeInterviewCountDTO;
|
import com.cool.store.dto.partner.SpecialDateRangeInterviewCountDTO;
|
||||||
import com.cool.store.entity.HyPartnerInterviewPlanDO;
|
import com.cool.store.entity.HyPartnerInterviewPlanDO;
|
||||||
@@ -157,4 +158,9 @@ public interface HyPartnerInterviewPlanMapper {
|
|||||||
|
|
||||||
HyPartnerInterviewPlanDO getInterviewPlanByLineId(Long lineId);
|
HyPartnerInterviewPlanDO getInterviewPlanByLineId(Long lineId);
|
||||||
|
|
||||||
|
List<RemindInterviewMsgDTO> selectRemindInterviewPlan(@Param("startTime") Date startTime,
|
||||||
|
@Param("endTime") Date endTime,
|
||||||
|
@Param("workflowStage") String workflowStage,
|
||||||
|
@Param("workflowStatus") String workflowStatus);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -498,4 +498,24 @@
|
|||||||
from hy_partner_interview_plan
|
from hy_partner_interview_plan
|
||||||
where partner_line_id = #{lineId} and deleted = 0
|
where partner_line_id = #{lineId} and deleted = 0
|
||||||
</select>
|
</select>
|
||||||
|
<select id="selectRemindInterviewPlan" resultType="com.cool.store.dto.message.RemindInterviewMsgDTO">
|
||||||
|
select hpip.partner_id as partnerId,
|
||||||
|
hpip.interviewer as interviewerId,
|
||||||
|
hpui.username as partnerName,
|
||||||
|
hpui.mobile as partnerMobile,
|
||||||
|
hpip.start_time as startTime
|
||||||
|
from hy_partner_interview_plan hpip
|
||||||
|
left join hy_partner_line_info hpll on hpip.partner_line_id = hpll.id
|
||||||
|
left join hy_partner_interview hpi on hpip.id = hpi.interview_plan_id
|
||||||
|
left join hy_partner_user_info hpui on hpui.partner_id = hpip.partner_id
|
||||||
|
where hpip.deleted = 0
|
||||||
|
and hpi.deleted = 0
|
||||||
|
and hpll.deleted = 0
|
||||||
|
and hpip.start_time >= #{startTime}
|
||||||
|
and hpip.start_time <= #{endTime}
|
||||||
|
and hpll.workflow_stage = #{workflowStage}
|
||||||
|
and hpll.workflow_status = #{workflowStatus}
|
||||||
|
|
||||||
|
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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")
|
@XxlJob("approvalReminder")
|
||||||
public void approvalReminder(){
|
public void approvalReminder(){
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -69,4 +69,6 @@ public interface InterviewService {
|
|||||||
|
|
||||||
public void rejectInterviewAndSuspendLine(Long iterviewId,Long interviewPlanId,String certifyFile);
|
public void rejectInterviewAndSuspendLine(Long iterviewId,Long interviewPlanId,String certifyFile);
|
||||||
|
|
||||||
|
public String generateFeiShuInterviewMsg(String partnerName, String partnerMobile, String interviewTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ public class CommonServiceImpl implements CommonService {
|
|||||||
String workflowStage = hyPartnerLineInfoDO.getWorkflowStage();
|
String workflowStage = hyPartnerLineInfoDO.getWorkflowStage();
|
||||||
String workflowStatus = hyPartnerLineInfoDO.getWorkflowStatus();
|
String workflowStatus = hyPartnerLineInfoDO.getWorkflowStatus();
|
||||||
Long partnerLineId = hyPartnerLineInfoDO.getId();
|
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, "提交面试预约时间");
|
return getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "提交面试预约时间");
|
||||||
} else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_3.getCode())) {
|
} else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_3.getCode())) {
|
||||||
String tips = getInterviewTips(partnerLineId, OperateTypeEnum.MODIFY_INTERVIEW_TIME, "");
|
String tips = getInterviewTips(partnerLineId, OperateTypeEnum.MODIFY_INTERVIEW_TIME, "");
|
||||||
|
|||||||
@@ -3,12 +3,16 @@ package com.cool.store.service.impl;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.cool.store.constants.CommonConstants;
|
import com.cool.store.constants.CommonConstants;
|
||||||
import com.cool.store.dao.*;
|
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.dto.partner.PartnerInterviewInfoDTO;
|
||||||
import com.cool.store.entity.*;
|
import com.cool.store.entity.*;
|
||||||
|
import com.cool.store.enums.MessageTypeEnum;
|
||||||
import com.cool.store.enums.RoomStatus;
|
import com.cool.store.enums.RoomStatus;
|
||||||
import com.cool.store.enums.WorkflowStageEnum;
|
import com.cool.store.enums.WorkflowStageEnum;
|
||||||
import com.cool.store.enums.WorkflowStatusEnum;
|
import com.cool.store.enums.WorkflowStatusEnum;
|
||||||
import com.cool.store.exception.ApiException;
|
import com.cool.store.exception.ApiException;
|
||||||
|
import com.cool.store.http.ISVHttpRequest;
|
||||||
import com.cool.store.mapper.HyPartnerInterviewMapper;
|
import com.cool.store.mapper.HyPartnerInterviewMapper;
|
||||||
import com.cool.store.mapper.HyPartnerInterviewPlanMapper;
|
import com.cool.store.mapper.HyPartnerInterviewPlanMapper;
|
||||||
import com.cool.store.mapper.HyPartnerLineInfoMapper;
|
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.request.GetInterviewListReq;
|
||||||
import com.cool.store.service.HyPartnerInterviewPlanService;
|
import com.cool.store.service.HyPartnerInterviewPlanService;
|
||||||
import com.cool.store.service.HyPartnerLineInfoService;
|
import com.cool.store.service.HyPartnerLineInfoService;
|
||||||
|
import com.cool.store.service.InterviewService;
|
||||||
import com.cool.store.utils.CoolDateUtils;
|
import com.cool.store.utils.CoolDateUtils;
|
||||||
import com.cool.store.vo.InterviewDetailInfoVO;
|
import com.cool.store.vo.InterviewDetailInfoVO;
|
||||||
import com.cool.store.vo.PartnerInterviewInfoVO;
|
import com.cool.store.vo.PartnerInterviewInfoVO;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
@@ -40,6 +47,7 @@ import java.util.stream.Collectors;
|
|||||||
* @Date 2023/6/8 19:32
|
* @Date 2023/6/8 19:32
|
||||||
* @Version 1.0
|
* @Version 1.0
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlanService {
|
public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlanService {
|
||||||
|
|
||||||
@@ -68,8 +76,15 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan
|
|||||||
@Resource
|
@Resource
|
||||||
EnterpriseUserDAO enterpriseUserDAO;
|
EnterpriseUserDAO enterpriseUserDAO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private InterviewService interviewService;
|
||||||
|
|
||||||
|
|
||||||
|
@Value("${feishu.notice.link.url:null}")
|
||||||
|
private String linkUrl;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ISVHttpRequest isvHttpRequest;
|
||||||
@Override
|
@Override
|
||||||
public List<InterviewDetailInfoVO> getInterviewPlanList(String userId,Date dateTime) {
|
public List<InterviewDetailInfoVO> getInterviewPlanList(String userId,Date dateTime) {
|
||||||
String currentDay = DateUtil.format(dateTime, CoolDateUtils.DATE_FORMAT_DAY);
|
String currentDay = DateUtil.format(dateTime, CoolDateUtils.DATE_FORMAT_DAY);
|
||||||
@@ -227,11 +242,28 @@ public class HyPartnerInterviewPlanServiceImpl implements HyPartnerInterviewPlan
|
|||||||
@Override
|
@Override
|
||||||
public void approvalReminder() throws ApiException {
|
public void approvalReminder() throws ApiException {
|
||||||
//查询即将超时但未审批的面试
|
//查询即将超时但未审批的面试
|
||||||
HyPartnerInterviewPlanDO hyPartnerInterviewPlanDO = new HyPartnerInterviewPlanDO();
|
Date startTime = new Date();
|
||||||
hyPartnerInterviewPlanDO.setDeleted(Boolean.FALSE);
|
Date endTime = DateUtil.offsetMinute(startTime,30);
|
||||||
hyPartnerInterviewPlanDO.setApplicationApproved(0);
|
List<RemindInterviewMsgDTO> remindInterviewMsgDTOS = hyPartnerInterviewPlanMapper.selectRemindInterviewPlan(startTime, endTime, WorkflowStageEnum.RESERVATION.getCode(), WorkflowStatusEnum.RESERVATION_1.getCode());
|
||||||
// hyPartnerInterviewPlanDO.setStartTime();
|
if(CollectionUtils.isEmpty(remindInterviewMsgDTOS)){
|
||||||
List<HyPartnerInterviewPlanDO> hyPartnerInterviewPlanDOS = hyPartnerInterviewPlanMapper.selectBySelective(hyPartnerInterviewPlanDO);
|
return;
|
||||||
|
}
|
||||||
|
//发送消息
|
||||||
|
remindInterviewMsgDTOS.stream().forEach(interviewMsgDTO->{
|
||||||
|
try {
|
||||||
|
List<String> 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);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -570,12 +570,13 @@ public class InterviewServiceImpl implements InterviewService {
|
|||||||
// hyPartnerLineInfoService.closeOrPassFollow(request.getOperatorId(),closeFollowRequest);
|
// hyPartnerLineInfoService.closeOrPassFollow(request.getOperatorId(),closeFollowRequest);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@Override
|
||||||
public String generateFeiShuInterviewMsg(String partnerName, String partnerMobile, String interviewTime){
|
public String generateFeiShuInterviewMsg(String partnerName, String partnerMobile, String interviewTime){
|
||||||
//"您有一个【面试预约申请】待处理,预约人【姓名】手机号【13xxxxxxxxx】,预约面试时间【YYYY年MM月DD日 hh:mm】,请及时处理】"
|
//"您有一个【面试预约申请】待处理,预约人【姓名】手机号【13xxxxxxxxx】,预约面试时间【YYYY年MM月DD日 hh:mm】,请及时处理】"
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
sb.append("您有一个【面试预约申请】待处理,预约人")
|
sb.append("您有一个【面试预约申请】待处理,预约人 ")
|
||||||
.append(partnerName)
|
.append(partnerName)
|
||||||
.append("手机号")
|
.append(" 手机号 ")
|
||||||
.append(partnerMobile)
|
.append(partnerMobile)
|
||||||
.append(",预约面试时间")
|
.append(",预约面试时间")
|
||||||
.append(DateUtil.format(DateUtil.parse(interviewTime), "yyyy年MM月dd日 HH:mm"));
|
.append(DateUtil.format(DateUtil.parse(interviewTime), "yyyy年MM月dd日 HH:mm"));
|
||||||
|
|||||||
@@ -83,4 +83,6 @@ xxl.job.executor.logpath = logs/xxl-job/jobhandler
|
|||||||
xxl.job.executor.logretentiondays = 30
|
xxl.job.executor.logretentiondays = 30
|
||||||
xxl.job.accessToken =
|
xxl.job.accessToken =
|
||||||
|
|
||||||
ec.baseUrl=http://127.0.0.1:8017
|
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
|
||||||
Reference in New Issue
Block a user