跟进任务新增通知
This commit is contained in:
@@ -26,6 +26,8 @@ public class CommonConstants {
|
|||||||
|
|
||||||
public static final int NORMAL_LOCK_TIMES = 60 * 1000;
|
public static final int NORMAL_LOCK_TIMES = 60 * 1000;
|
||||||
|
|
||||||
|
public static final int AN_HOUR_SECONDS = 3600;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 企业开通锁存活时间
|
* 企业开通锁存活时间
|
||||||
*/
|
*/
|
||||||
@@ -101,6 +103,7 @@ public class CommonConstants {
|
|||||||
public static final int EIGHTY = 80;
|
public static final int EIGHTY = 80;
|
||||||
public static final int NINETY = 90;
|
public static final int NINETY = 90;
|
||||||
public static final int HUNDRED = 100;
|
public static final int HUNDRED = 100;
|
||||||
|
public static final int ONE_THOUSAND = 1000;
|
||||||
|
|
||||||
|
|
||||||
public static final String ONE_STR = "1";
|
public static final String ONE_STR = "1";
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.cool.store.constants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author zhangchenbiao
|
||||||
|
* @FileName: MessageConstants
|
||||||
|
* @Description:通知消息常量
|
||||||
|
* @date 2023-08-14 14:41
|
||||||
|
*/
|
||||||
|
public class MessageConstants {
|
||||||
|
|
||||||
|
public static final String FOLLOW_TASK_MESSAGE_TITLE = "线索跟进任务";
|
||||||
|
public static final String FOLLOW_TASK_MESSAGE_CONTENT = "您有一个线索跟进任务将于{0}截止 ,线索信息{1}手机号{2},请及时跟进";
|
||||||
|
public static final String FOLLOW_TASK_MESSAGE_CONTENT_1 = "您有{0}个线索跟进任务将于今日截止,及{1}个跟进任务已逾期,请及时跟进";
|
||||||
|
public static final String FOLLOW_TASK_MESSAGE_CONTENT_2 = "您有{0}个跟进任务已逾期,请及时跟进";
|
||||||
|
public static final String FOLLOW_TASK_MESSAGE_CONTENT_3 = "您有{1}个线索跟进任务将于今日截止,请及时跟进";
|
||||||
|
|
||||||
|
}
|
||||||
@@ -63,6 +63,7 @@ public enum ErrorCodeEnum {
|
|||||||
PARTNER_BASE_INFO_NOT_EXIST(500009, "加盟商信息不存在!", null),
|
PARTNER_BASE_INFO_NOT_EXIST(500009, "加盟商信息不存在!", null),
|
||||||
LINE_STATUS_NOT_ALLOW_OPERATE(500010, "当前线索状态不允许该操作!", null),
|
LINE_STATUS_NOT_ALLOW_OPERATE(500010, "当前线索状态不允许该操作!", null),
|
||||||
TASK_STATUS_NOT_ALLOW_OPERATE(500011, "当前任务状态不允许该操作!", null),
|
TASK_STATUS_NOT_ALLOW_OPERATE(500011, "当前任务状态不允许该操作!", null),
|
||||||
|
DATELINE_BEFORE_NOW(500012, "截止时间不能早于当前时间!", null),
|
||||||
|
|
||||||
INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null),
|
INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null),
|
||||||
DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null),
|
DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null),
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
package com.cool.store.utils;
|
package com.cool.store.utils;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
|
||||||
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.*;
|
import java.time.*;
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.cool.store.dao;
|
package com.cool.store.dao;
|
||||||
|
|
||||||
import cn.hutool.core.map.MapUtil;
|
import cn.hutool.core.map.MapUtil;
|
||||||
|
import com.cool.store.constants.CommonConstants;
|
||||||
import com.cool.store.dto.partner.PartnerBlackListDTO;
|
import com.cool.store.dto.partner.PartnerBlackListDTO;
|
||||||
import com.cool.store.dto.partner.PartnerLineInfoAndBaseInfoDTO;
|
import com.cool.store.dto.partner.PartnerLineInfoAndBaseInfoDTO;
|
||||||
import com.cool.store.dto.partner.StageCountDTO;
|
import com.cool.store.dto.partner.StageCountDTO;
|
||||||
@@ -15,10 +16,7 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -199,4 +197,12 @@ public class HyPartnerLineInfoDAO {
|
|||||||
return ListUtils.emptyIfNull(partnerList).stream().collect(Collectors.toMap(k->k.getPartnerLineId(), Function.identity(), (k1, k2)->k1));
|
return ListUtils.emptyIfNull(partnerList).stream().collect(Collectors.toMap(k->k.getPartnerLineId(), Function.identity(), (k1, k2)->k1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PartnerSimpleInfoDTO getPartnerSimpleInfoByLineId(Long partnerLineId){
|
||||||
|
if(Objects.isNull(partnerLineId)){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
List<PartnerSimpleInfoDTO> partnerList = hyPartnerLineInfoMapper.getPartnerSimpleInfoByLineIds(Arrays.asList(partnerLineId));
|
||||||
|
return CollectionUtils.isEmpty(partnerList) ? null : partnerList.get(CommonConstants.ZERO);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,12 +85,6 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im
|
|||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(calculateJavaClientImplementationPackage());
|
|
||||||
sb.append('.');
|
|
||||||
sb.append(getTableNameFromConfigFile());
|
|
||||||
sb.append("DAOImpl"); //$NON-NLS-1$
|
|
||||||
setDAOImplementationType(sb.toString());
|
|
||||||
|
|
||||||
sb.setLength(0);
|
sb.setLength(0);
|
||||||
sb.append(calculateJavaClientInterfacePackage());
|
sb.append(calculateJavaClientInterfacePackage());
|
||||||
sb.append('.');
|
sb.append('.');
|
||||||
|
|||||||
@@ -45,9 +45,10 @@ public class UpdateFollowTaskRequest {
|
|||||||
@ApiModelProperty("任务截止时间")
|
@ApiModelProperty("任务截止时间")
|
||||||
private Date deadline;
|
private Date deadline;
|
||||||
|
|
||||||
public static HyFollowTaskDO convertDO(UpdateFollowTaskRequest request){
|
public static HyFollowTaskDO convertDO(Long partnerLineId, UpdateFollowTaskRequest request){
|
||||||
HyFollowTaskDO result = new HyFollowTaskDO();
|
HyFollowTaskDO result = new HyFollowTaskDO();
|
||||||
result.setId(request.getFollowTaskId());
|
result.setId(request.getFollowTaskId());
|
||||||
|
result.setPartnerLineId(partnerLineId);
|
||||||
result.setTaskTitle(request.getTaskTitle());
|
result.setTaskTitle(request.getTaskTitle());
|
||||||
result.setCommunicationType(request.getCommunicationType());
|
result.setCommunicationType(request.getCommunicationType());
|
||||||
result.setDeadline(request.getDeadline());
|
result.setDeadline(request.getDeadline());
|
||||||
|
|||||||
@@ -1,31 +1,42 @@
|
|||||||
package com.cool.store.service.impl;
|
package com.cool.store.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.cool.store.constants.CommonConstants;
|
import com.cool.store.constants.CommonConstants;
|
||||||
|
import com.cool.store.constants.MessageConstants;
|
||||||
import com.cool.store.dao.EnterpriseUserDAO;
|
import com.cool.store.dao.EnterpriseUserDAO;
|
||||||
import com.cool.store.dao.HyFollowTaskDAO;
|
import com.cool.store.dao.HyFollowTaskDAO;
|
||||||
import com.cool.store.dao.HyPartnerLineInfoDAO;
|
import com.cool.store.dao.HyPartnerLineInfoDAO;
|
||||||
import com.cool.store.dao.HyPartnerTaskInfoLogDAO;
|
import com.cool.store.dao.HyPartnerTaskInfoLogDAO;
|
||||||
import com.cool.store.dto.log.LineLogInfo;
|
import com.cool.store.dto.log.LineLogInfo;
|
||||||
|
import com.cool.store.dto.message.SendCardMessageDTO;
|
||||||
import com.cool.store.dto.partner.PartnerSimpleInfoDTO;
|
import com.cool.store.dto.partner.PartnerSimpleInfoDTO;
|
||||||
import com.cool.store.entity.HyFollowTaskDO;
|
import com.cool.store.entity.HyFollowTaskDO;
|
||||||
import com.cool.store.entity.HyPartnerLineInfoDO;
|
import com.cool.store.entity.HyPartnerLineInfoDO;
|
||||||
import com.cool.store.enums.*;
|
import com.cool.store.enums.*;
|
||||||
|
import com.cool.store.exception.ApiException;
|
||||||
import com.cool.store.exception.ServiceException;
|
import com.cool.store.exception.ServiceException;
|
||||||
|
import com.cool.store.http.ISVHttpRequest;
|
||||||
import com.cool.store.request.follow.AddFollowLogRequest;
|
import com.cool.store.request.follow.AddFollowLogRequest;
|
||||||
import com.cool.store.request.follow.AddFollowTaskRequest;
|
import com.cool.store.request.follow.AddFollowTaskRequest;
|
||||||
import com.cool.store.request.follow.FollowTaskIdRequest;
|
import com.cool.store.request.follow.FollowTaskIdRequest;
|
||||||
import com.cool.store.request.follow.UpdateFollowTaskRequest;
|
import com.cool.store.request.follow.UpdateFollowTaskRequest;
|
||||||
import com.cool.store.service.FollowTaskService;
|
import com.cool.store.service.FollowTaskService;
|
||||||
|
import com.cool.store.utils.CoolDateUtils;
|
||||||
import com.cool.store.vo.follow.FollowTaskLogVO;
|
import com.cool.store.vo.follow.FollowTaskLogVO;
|
||||||
import com.cool.store.vo.follow.FollowTaskPageVO;
|
import com.cool.store.vo.follow.FollowTaskPageVO;
|
||||||
import com.github.pagehelper.Page;
|
import com.github.pagehelper.Page;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
|
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.apache.commons.lang3.time.DateUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -37,6 +48,7 @@ import java.util.stream.Collectors;
|
|||||||
* @Description:
|
* @Description:
|
||||||
* @date 2023-08-10 11:10
|
* @date 2023-08-10 11:10
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class FollowTaskServiceImpl implements FollowTaskService {
|
public class FollowTaskServiceImpl implements FollowTaskService {
|
||||||
|
|
||||||
@@ -48,6 +60,10 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
|||||||
private HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO;
|
private HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO;
|
||||||
@Resource
|
@Resource
|
||||||
private EnterpriseUserDAO enterpriseUserDAO;
|
private EnterpriseUserDAO enterpriseUserDAO;
|
||||||
|
@Resource
|
||||||
|
private ISVHttpRequest isvHttpRequest;
|
||||||
|
@Value("${feishu.notice.link.url:null}")
|
||||||
|
private String linkUrl;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageInfo<FollowTaskPageVO> getFollowTaskPage(Integer pageNum, Integer pageSize, Integer taskStatus, String queryDate, String followUserId) {
|
public PageInfo<FollowTaskPageVO> getFollowTaskPage(Integer pageNum, Integer pageSize, Integer taskStatus, String queryDate, String followUserId) {
|
||||||
@@ -87,6 +103,9 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long addFollowTask(AddFollowTaskRequest request, String userId) {
|
public Long addFollowTask(AddFollowTaskRequest request, String userId) {
|
||||||
|
if(request.getDeadline().getTime() < System.currentTimeMillis()){
|
||||||
|
throw new ServiceException(ErrorCodeEnum.DATELINE_BEFORE_NOW);
|
||||||
|
}
|
||||||
HyPartnerLineInfoDO lineInfo = checkLine(request.getPartnerLineId());
|
HyPartnerLineInfoDO lineInfo = checkLine(request.getPartnerLineId());
|
||||||
HyFollowTaskDO task = AddFollowTaskRequest.convertDO(request);
|
HyFollowTaskDO task = AddFollowTaskRequest.convertDO(request);
|
||||||
task.setFollowUserId(lineInfo.getInvestmentManager());
|
task.setFollowUserId(lineInfo.getInvestmentManager());
|
||||||
@@ -97,6 +116,10 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
|||||||
jsonObject.put(OperateLogFieldValueEnum.FOLLOW_TASK_ID.getCode(), followTaskId);
|
jsonObject.put(OperateLogFieldValueEnum.FOLLOW_TASK_ID.getCode(), followTaskId);
|
||||||
lineLogInfo.setData(jsonObject);
|
lineLogInfo.setData(jsonObject);
|
||||||
hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo);
|
hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo);
|
||||||
|
if((request.getDeadline().getTime() - System.currentTimeMillis()) /CommonConstants.ONE_THOUSAND < CommonConstants.AN_HOUR_SECONDS){
|
||||||
|
//一小时内的任务立即发送通知
|
||||||
|
sendMessage(task);
|
||||||
|
}
|
||||||
return followTaskId;
|
return followTaskId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,8 +129,15 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
|||||||
if(!FollowTaskStatusEnum.TODO.getCode().equals(followTask.getTaskStatus())){
|
if(!FollowTaskStatusEnum.TODO.getCode().equals(followTask.getTaskStatus())){
|
||||||
throw new ServiceException(ErrorCodeEnum.TASK_STATUS_NOT_ALLOW_OPERATE);
|
throw new ServiceException(ErrorCodeEnum.TASK_STATUS_NOT_ALLOW_OPERATE);
|
||||||
}
|
}
|
||||||
|
if(Objects.nonNull(request.getDeadline()) && request.getDeadline().getTime() < System.currentTimeMillis()){
|
||||||
|
throw new ServiceException(ErrorCodeEnum.DATELINE_BEFORE_NOW);
|
||||||
|
}
|
||||||
checkLine(followTask.getPartnerLineId());
|
checkLine(followTask.getPartnerLineId());
|
||||||
HyFollowTaskDO task = UpdateFollowTaskRequest.convertDO(request);
|
HyFollowTaskDO task = UpdateFollowTaskRequest.convertDO(followTask.getPartnerLineId(), request);
|
||||||
|
if(!request.getDeadline().equals(followTask.getDeadline()) && (request.getDeadline().getTime() - System.currentTimeMillis()) / CommonConstants.ONE_THOUSAND < CommonConstants.AN_HOUR_SECONDS){
|
||||||
|
//一小时内的任务立即发送通知
|
||||||
|
sendMessage(task);
|
||||||
|
}
|
||||||
return hyFollowTaskDAO.updateFollowTask(task);
|
return hyFollowTaskDAO.updateFollowTask(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,7 +166,7 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
|||||||
* @param partnerLineId
|
* @param partnerLineId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public HyPartnerLineInfoDO checkLine(Long partnerLineId){
|
private HyPartnerLineInfoDO checkLine(Long partnerLineId){
|
||||||
HyPartnerLineInfoDO lineInfo = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(partnerLineId);
|
HyPartnerLineInfoDO lineInfo = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(partnerLineId);
|
||||||
if(Objects.isNull(lineInfo) || lineInfo.getDeleted()){
|
if(Objects.isNull(lineInfo) || lineInfo.getDeleted()){
|
||||||
throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST);
|
throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST);
|
||||||
@@ -147,4 +177,24 @@ public class FollowTaskServiceImpl implements FollowTaskService {
|
|||||||
}
|
}
|
||||||
return lineInfo;
|
return lineInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void sendMessage(HyFollowTaskDO task){
|
||||||
|
PartnerSimpleInfoDTO partnerInfo = hyPartnerLineInfoDAO.getPartnerSimpleInfoByLineId(task.getPartnerLineId());
|
||||||
|
if(Objects.isNull(partnerInfo)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String dateline = DateUtil.format(task.getDeadline(), CoolDateUtils.DATE_FORMAT_SEC_2);
|
||||||
|
String content = MessageFormat.format(MessageConstants.FOLLOW_TASK_MESSAGE_CONTENT, dateline, partnerInfo.getUsername(), partnerInfo.getMobile());
|
||||||
|
SendCardMessageDTO sendCardMessage = new SendCardMessageDTO();
|
||||||
|
sendCardMessage.setMessageUrl(linkUrl);
|
||||||
|
sendCardMessage.setMessageType(MessageTypeEnum.SCHEDULE_REMINDER);
|
||||||
|
sendCardMessage.setContent(content);
|
||||||
|
sendCardMessage.setTitle(MessageConstants.FOLLOW_TASK_MESSAGE_TITLE);
|
||||||
|
sendCardMessage.setUserIds(Arrays.asList(task.getFollowUserId()));
|
||||||
|
try {
|
||||||
|
isvHttpRequest.sendFeiShuCardMessage(sendCardMessage);
|
||||||
|
} catch (ApiException e) {
|
||||||
|
log.error("跟进任务发送通知失败, {}", JSONObject.toJSONString(task));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user