From 634d6ec24edc356f0cff59a1faf465276d3a8758 Mon Sep 17 00:00:00 2001 From: zhangchenbiao Date: Mon, 14 Aug 2023 15:03:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=9F=E8=BF=9B=E4=BB=BB=E5=8A=A1=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cool/store/constants/CommonConstants.java | 3 ++ .../store/constants/MessageConstants.java | 17 ++++++ .../com/cool/store/enums/ErrorCodeEnum.java | 1 + .../com/cool/store/utils/CoolDateUtils.java | 3 -- .../cool/store/dao/HyPartnerLineInfoDAO.java | 14 +++-- .../MyIntrospectedTableMyBatis3Impl.java | 6 --- .../follow/UpdateFollowTaskRequest.java | 3 +- .../service/impl/FollowTaskServiceImpl.java | 54 ++++++++++++++++++- 8 files changed, 85 insertions(+), 16 deletions(-) create mode 100644 coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java index a5fed5def..fb7c92c84 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/CommonConstants.java @@ -26,6 +26,8 @@ public class CommonConstants { 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 NINETY = 90; public static final int HUNDRED = 100; + public static final int ONE_THOUSAND = 1000; public static final String ONE_STR = "1"; diff --git a/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java b/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java new file mode 100644 index 000000000..6e01878be --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/constants/MessageConstants.java @@ -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}个线索跟进任务将于今日截止,请及时跟进"; + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java index 35097472e..f392f0ebd 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ErrorCodeEnum.java @@ -63,6 +63,7 @@ public enum ErrorCodeEnum { PARTNER_BASE_INFO_NOT_EXIST(500009, "加盟商信息不存在!", null), LINE_STATUS_NOT_ALLOW_OPERATE(500010, "当前线索状态不允许该操作!", null), TASK_STATUS_NOT_ALLOW_OPERATE(500011, "当前任务状态不允许该操作!", null), + DATELINE_BEFORE_NOW(500012, "截止时间不能早于当前时间!", null), INTERVIEW_ENTER_FAIL(1021101, "进入面试间失败", null), DINGDING_USER_NOT_EXIST(1021102, "用户钉钉信息不存在,无法发起资质审核!", null), diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java index 06d0446a3..40329511e 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/CoolDateUtils.java @@ -1,12 +1,9 @@ package com.cool.store.utils; -import cn.hutool.core.date.DateUtil; - import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; -import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java index b80f041dc..262448e81 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/HyPartnerLineInfoDAO.java @@ -1,6 +1,7 @@ package com.cool.store.dao; 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.PartnerLineInfoAndBaseInfoDTO; import com.cool.store.dto.partner.StageCountDTO; @@ -15,10 +16,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Repository; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; 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)); } + public PartnerSimpleInfoDTO getPartnerSimpleInfoByLineId(Long partnerLineId){ + if(Objects.isNull(partnerLineId)){ + return null; + } + List partnerList = hyPartnerLineInfoMapper.getPartnerSimpleInfoByLineIds(Arrays.asList(partnerLineId)); + return CollectionUtils.isEmpty(partnerList) ? null : partnerList.get(CommonConstants.ZERO); + } + } diff --git a/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java b/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java index 56b016ba0..3b759f68a 100644 --- a/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java +++ b/coolstore-partner-dao/src/test/java/generator/defined/MyIntrospectedTableMyBatis3Impl.java @@ -85,12 +85,6 @@ public class MyIntrospectedTableMyBatis3Impl extends IntrospectedTableMyBatis3Im } 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.append(calculateJavaClientInterfacePackage()); sb.append('.'); diff --git a/coolstore-partner-model/src/main/java/com/cool/store/request/follow/UpdateFollowTaskRequest.java b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/UpdateFollowTaskRequest.java index c1ca46308..b19484cf3 100644 --- a/coolstore-partner-model/src/main/java/com/cool/store/request/follow/UpdateFollowTaskRequest.java +++ b/coolstore-partner-model/src/main/java/com/cool/store/request/follow/UpdateFollowTaskRequest.java @@ -45,9 +45,10 @@ public class UpdateFollowTaskRequest { @ApiModelProperty("任务截止时间") private Date deadline; - public static HyFollowTaskDO convertDO(UpdateFollowTaskRequest request){ + public static HyFollowTaskDO convertDO(Long partnerLineId, UpdateFollowTaskRequest request){ HyFollowTaskDO result = new HyFollowTaskDO(); result.setId(request.getFollowTaskId()); + result.setPartnerLineId(partnerLineId); result.setTaskTitle(request.getTaskTitle()); result.setCommunicationType(request.getCommunicationType()); result.setDeadline(request.getDeadline()); diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java index 5d1efc47d..d5035177f 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/FollowTaskServiceImpl.java @@ -1,31 +1,42 @@ package com.cool.store.service.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.MessageConstants; import com.cool.store.dao.EnterpriseUserDAO; import com.cool.store.dao.HyFollowTaskDAO; import com.cool.store.dao.HyPartnerLineInfoDAO; import com.cool.store.dao.HyPartnerTaskInfoLogDAO; 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.entity.HyFollowTaskDO; import com.cool.store.entity.HyPartnerLineInfoDO; import com.cool.store.enums.*; +import com.cool.store.exception.ApiException; 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.AddFollowTaskRequest; import com.cool.store.request.follow.FollowTaskIdRequest; import com.cool.store.request.follow.UpdateFollowTaskRequest; 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.FollowTaskPageVO; import com.github.pagehelper.Page; import com.github.pagehelper.PageInfo; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; 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 javax.annotation.Resource; +import java.text.MessageFormat; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; @@ -37,6 +48,7 @@ import java.util.stream.Collectors; * @Description: * @date 2023-08-10 11:10 */ +@Slf4j @Service public class FollowTaskServiceImpl implements FollowTaskService { @@ -48,6 +60,10 @@ public class FollowTaskServiceImpl implements FollowTaskService { private HyPartnerTaskInfoLogDAO hyPartnerTaskInfoLogDAO; @Resource private EnterpriseUserDAO enterpriseUserDAO; + @Resource + private ISVHttpRequest isvHttpRequest; + @Value("${feishu.notice.link.url:null}") + private String linkUrl; @Override public PageInfo getFollowTaskPage(Integer pageNum, Integer pageSize, Integer taskStatus, String queryDate, String followUserId) { @@ -87,6 +103,9 @@ public class FollowTaskServiceImpl implements FollowTaskService { @Override 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()); HyFollowTaskDO task = AddFollowTaskRequest.convertDO(request); task.setFollowUserId(lineInfo.getInvestmentManager()); @@ -97,6 +116,10 @@ public class FollowTaskServiceImpl implements FollowTaskService { jsonObject.put(OperateLogFieldValueEnum.FOLLOW_TASK_ID.getCode(), followTaskId); lineLogInfo.setData(jsonObject); hyPartnerTaskInfoLogDAO.addOperateLog(lineLogInfo); + if((request.getDeadline().getTime() - System.currentTimeMillis()) /CommonConstants.ONE_THOUSAND < CommonConstants.AN_HOUR_SECONDS){ + //一小时内的任务立即发送通知 + sendMessage(task); + } return followTaskId; } @@ -106,8 +129,15 @@ public class FollowTaskServiceImpl implements FollowTaskService { if(!FollowTaskStatusEnum.TODO.getCode().equals(followTask.getTaskStatus())){ 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()); - 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); } @@ -136,7 +166,7 @@ public class FollowTaskServiceImpl implements FollowTaskService { * @param partnerLineId * @return */ - public HyPartnerLineInfoDO checkLine(Long partnerLineId){ + private HyPartnerLineInfoDO checkLine(Long partnerLineId){ HyPartnerLineInfoDO lineInfo = hyPartnerLineInfoDAO.selectByPrimaryKeySelective(partnerLineId); if(Objects.isNull(lineInfo) || lineInfo.getDeleted()){ throw new ServiceException(ErrorCodeEnum.LINE_ID_IS_NOT_EXIST); @@ -147,4 +177,24 @@ public class FollowTaskServiceImpl implements FollowTaskService { } 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)); + } + } }