From a74f480916ddce9488c9c1226caa053694d118a4 Mon Sep 17 00:00:00 2001 From: "feng.li" Date: Thu, 14 Dec 2023 19:22:46 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E7=94=A8=E4=BF=A1=E6=81=AF=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cool/store/enums/OperateTypeEnum.java | 15 +++ .../mapper/HyPartnerTaskInfoLogMapper.java | 7 + .../mapper/HyPartnerTaskInfoLogMapper.xml | 17 +++ .../store/service/impl/CommonServiceImpl.java | 126 +++++++++++++++--- 4 files changed, 148 insertions(+), 17 deletions(-) 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 6b298e000..c9d50e645 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 @@ -1,7 +1,9 @@ package com.cool.store.enums; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static com.cool.store.enums.OperateLogFieldValueEnum.*; @@ -54,6 +56,15 @@ public enum OperateTypeEnum { private List filedList; + private static Map operateTypeEnumMap; + + static { + operateTypeEnumMap = new HashMap<>(); + for (OperateTypeEnum operateTypeEnum : OperateTypeEnum.values()) { + operateTypeEnumMap.put(operateTypeEnum.getCode(), operateTypeEnum); + } + } + OperateTypeEnum(String code, String name, List filedList) { this.code = code; this.name = name; @@ -71,4 +82,8 @@ public enum OperateTypeEnum { public List getFiledList() { return filedList; } + + public static OperateTypeEnum getOperateTypeEnum(String code) { + return operateTypeEnumMap.get(code); + } } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerTaskInfoLogMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerTaskInfoLogMapper.java index b053561ed..f199e3811 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerTaskInfoLogMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/HyPartnerTaskInfoLogMapper.java @@ -49,4 +49,11 @@ public interface HyPartnerTaskInfoLogMapper { * @return */ int deleteByLineId(@Param("partnerLineId") Long partnerLineId, @Param("message") String message); + + /** + * 获取通用信息需要的最新一条线索操作日志 + * @param partnerLineId + * @return + */ + HyPartnerTaskInfoLogDO getLastTipsLog(Long partnerLineId); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerTaskInfoLogMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerTaskInfoLogMapper.xml index 4c4df0388..14df1102a 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/HyPartnerTaskInfoLogMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/HyPartnerTaskInfoLogMapper.xml @@ -164,4 +164,21 @@ update hy_partner_task_info_log set deleted = '1', message = #{message} where partner_line_id= #{partnerLineId} + + \ No newline at end of file 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 3fd093178..6a1c0b64e 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 @@ -1,16 +1,15 @@ package com.cool.store.service.impl; import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.cool.store.dao.HyPartnerExhibitionDAO; import com.cool.store.dto.log.LogFieldDTO; -import com.cool.store.entity.HyPartnerCertificationInfoDO; -import com.cool.store.entity.HyPartnerExhibitionDO; -import com.cool.store.entity.HyPartnerLineInfoDO; -import com.cool.store.entity.HyPartnerTaskInfoLogDO; +import com.cool.store.entity.*; import com.cool.store.enums.*; import com.cool.store.exception.ApiException; import com.cool.store.mapper.HyPartnerCertificationInfoMapper; +import com.cool.store.mapper.HyPartnerInterviewPlanMapper; import com.cool.store.mapper.HyPartnerLineInfoMapper; import com.cool.store.mapper.HyPartnerTaskInfoLogMapper; import com.cool.store.request.GetTipsInfoReq; @@ -47,12 +46,17 @@ public class CommonServiceImpl implements CommonService { @Autowired private HyPartnerExhibitionDAO partnerExhibitionDAO; + @Autowired + private HyPartnerInterviewPlanMapper partnerInterviewPlanMapper; + @Override public String getTipsInfo(GetTipsInfoReq request) throws ApiException { List lineInfoList = hyPartnerLineInfoMapper.getHyPartnerLineInfoListByIds(Arrays.asList(Long.parseLong(request.getPartnerLineId()))); if (CollectionUtils.isEmpty(lineInfoList)) { return null; } + //获取面试计划 id 信息 + HyPartnerInterviewPlanDO interviewPlanByLineId = partnerInterviewPlanMapper.getInterviewPlanByLineId(Long.parseLong(request.getPartnerLineId())); HyPartnerLineInfoDO hyPartnerLineInfoDO = lineInfoList.get(0); String workflowStage = hyPartnerLineInfoDO.getWorkflowStage(); String workflowStatus = hyPartnerLineInfoDO.getWorkflowStatus(); @@ -60,40 +64,126 @@ public class CommonServiceImpl implements CommonService { //会销面试信息 HyPartnerExhibitionDO partnerExhibitionDO = new HyPartnerExhibitionDO(); partnerExhibitionDO.setPartnerLineId(hyPartnerLineInfoDO.getId()); + partnerExhibitionDO.setInterviewPlanId(interviewPlanByLineId.getId()); partnerExhibitionDO.setDeleted(Boolean.FALSE); partnerExhibitionDO.setParticipationStatus(ExhibitionPartnerStatus.INTERVIEWING.getCode()); partnerExhibitionDO = partnerExhibitionDAO.querySelective(partnerExhibitionDO); //是否是会销面试 if (partnerExhibitionDO == null || partnerExhibitionDO.getParticipationStatus().compareTo(ExhibitionPartnerStatus.INTERVIEWING.getCode()) < 0) { - return getCommonTipsInfo(workflowStage, workflowStatus, partnerLineId); + return getCommonTipsFix(Long.parseLong(request.getPartnerLineId())); } else { return getExhibitionTipsInfo(workflowStage, workflowStatus, partnerLineId); } } - //普通线索 + private String getCommonTipsFix(Long partnerLineId) { + String interviewTips = ""; + //1. 查询需要展示的操作类型最新一条 + HyPartnerTaskInfoLogDO lastLog = hyPartnerTaskInfoLogMapper.getLastTipsLog(partnerLineId); + //2. 判断类型并返回对应的tips + OperateTypeEnum operateType = OperateTypeEnum.getOperateTypeEnum(lastLog.getOperateType()); + switch (operateType) { + case INTERVIEWER_BOOK_INTERVIEW: + interviewTips = getInterviewTipsFix(lastLog, "通过操作后台于", "主动为客户预约面试时间"); + break; + case INTERVIEW_APPOINTMENT: + interviewTips = getInterviewTipsFix(lastLog, "通过合伙人小程序于", "发起预约面试申请"); + break; + case MODIFY_INTERVIEW_TIME: + interviewTips = getInterviewTipsFix(lastLog, "于", "修改面试预约时间"); + break; + case INTERVIEW_APPOINTMENT_AGREEMENT: + interviewTips = getInterviewTipsFix(lastLog, "于", "同意面试预约申请"); + break; + case AUTO_OPEN_INTERVIEW: + interviewTips = getInterviewTipsFix(lastLog, "面试房间于", "正式开放"); + break; + case FINISH_INTERVIEW: + interviewTips = getInterviewTipsFix(lastLog, "于", "结束面试"); + break; + case QUALIFYVERIFY_PASS: + interviewTips = getInterviewTipsFix(lastLog, "于", "审核通过"); + break; + case QUALIFYVERIFY_REJECT: + interviewTips = getInterviewTipsFix(lastLog, "于", "审核拒绝"); + break; + default: + break; + } + return interviewTips; + } + + public String getInterviewTipsFix(HyPartnerTaskInfoLogDO lastLog, String middleInfo, String action) { + StringBuilder sb = new StringBuilder(); + sb.append(StringUtil.REPLACE_0) + .append(" ") + .append(StringUtil.REPLACE_1) + .append(" ") + .append(middleInfo) + .append(" ") + .append(StringUtil.REPLACE_2) + .append(" ").append(action); + String content = sb.toString(); + String fieldCopy = lastLog.getFieldCopy(); + List logFieldDTOS = JSON.parseArray(fieldCopy, LogFieldDTO.class); + List params = new ArrayList<>(); + String[] replaceKeys = new String[]{ + OperateLogFieldValueEnum.OPERATE_USER_NAME.getCode(), + OperateLogFieldValueEnum.MOBILE.getCode(), + OperateLogFieldValueEnum.OPERATE_TIME.getCode() + }; + for (String replaceKey : replaceKeys) { + String value = ""; + Optional logFieldDTOOptional = logFieldDTOS.stream().filter(l -> l.getCode().equals(replaceKey)).findFirst(); + if (logFieldDTOOptional.isPresent()) { + value = logFieldDTOOptional.get().getValue(); + try { + value = DateUtil.format(DateUtil.parseDateTime(value), "yyyy/MM/dd HH:mm:ss"); + } catch (Exception e) { + //异常代表不是时间格式,不做处理 + } + } + params.add(value); + } + return MessageFormat.format(content, params.toArray()); + } + + //普通线索 private String getCommonTipsInfo(String workflowStage, String workflowStatus, Long partnerLineId) { String interviewTips = ""; //1. 预约面试待审核 if ((workflowStage.equals(WorkflowStageEnum.RESERVATION.getCode()) && workflowStatus.equals(WorkflowStatusEnum.RESERVATION_1.getCode()))) { - interviewTips = getInterviewTips(partnerLineId, OperateTypeEnum.MODIFY_INTERVIEW_TIME, "于", "修改面试预约时间"); - if (StringUtils.isEmpty(interviewTips)) { - interviewTips = getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "通过合伙人小程序于", "发起预约面试申请"); - } + //该阶段既可能是预约面试提醒的 tip,也可能是修改面试时间的 tip,按照操作时间先后顺序判断 + String interviewTipsOne = getInterviewTips(partnerLineId, OperateTypeEnum.MODIFY_INTERVIEW_TIME, "于", "修改面试预约时间"); + String interviewTipsTwo = getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT, "通过合伙人小程序于", "发起预约面试申请"); + String[] tipsOneSplit = interviewTipsOne.split(" "); + String[] tipsTwoSplit = interviewTipsTwo.split(" "); + interviewTips = (tipsOneSplit[3] + tipsOneSplit[4]).compareTo(tipsTwoSplit[3] + tipsTwoSplit[4]) > 0 ? interviewTipsOne : interviewTipsTwo; //2. 待面试 } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_2.getCode())) { - interviewTips = getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT_AGREEMENT, "于", "同意了客户的预约面试申请"); + String interviewTipsLocal = getInterviewTips(partnerLineId, OperateTypeEnum.INTERVIEW_APPOINTMENT_AGREEMENT, "于", "同意了客户的预约面试申请"); + if (interviewTipsLocal!= null &&!interviewTipsLocal.isEmpty()) { + interviewTips = interviewTipsLocal; + } //3. 面试已开始 } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_3.getCode())) { - interviewTips = getInterviewTips(partnerLineId, OperateTypeEnum.AUTO_OPEN_INTERVIEW, "面试房间于", "正式开放"); - interviewTips = interviewTips.trim(); + String interviewTipsLocal = getInterviewTips(partnerLineId, OperateTypeEnum.AUTO_OPEN_INTERVIEW, "面试房间于", "正式开放"); + if (interviewTipsLocal != null && !interviewTipsLocal.isEmpty()) { + interviewTips = interviewTips.trim(); + } //4. 面试已结束 } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_4.getCode())) { - interviewTips = getInterviewTips(partnerLineId, OperateTypeEnum.FINISH_INTERVIEW, "于", "结束面试"); + String interviewTipsLocal = getInterviewTips(partnerLineId, OperateTypeEnum.FINISH_INTERVIEW, "于", "结束面试"); + if (interviewTipsLocal!= null &&!interviewTipsLocal.isEmpty()) { + interviewTips = interviewTipsLocal; + } //5. 发起资质审批 } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_5.getCode())) { - interviewTips = getInterviewTips(partnerLineId, OperateTypeEnum.CREATE_QUALIFYVERIFY, "于","发起加盟商资质审核"); + String interviewTipsLocal = getInterviewTips(partnerLineId, OperateTypeEnum.CREATE_QUALIFYVERIFY, "于","发起加盟商资质审核"); + if (interviewTipsLocal!= null &&!interviewTipsLocal.isEmpty()) { + interviewTips = interviewTipsLocal; + } //6. 资质审批通过 } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_6.getCode())) { HyPartnerCertificationInfoDO partnerCertificationInfoDO = hyPartnerCertificationInfoMapper.selectByPartnerLineId(partnerLineId); @@ -101,7 +191,10 @@ public class CommonServiceImpl implements CommonService { if(partnerCertificationInfoDO != null){ intentionContractNo = partnerCertificationInfoDO.getIntentionContractNo(); } - interviewTips = getVerifyResultTips(partnerLineId, OperateTypeEnum.QUALIFYVERIFY_PASS, "审核通过 | " + intentionContractNo); + String interviewTipsLocal = getVerifyResultTips(partnerLineId, OperateTypeEnum.QUALIFYVERIFY_PASS, "审核通过 | " + intentionContractNo); + if (interviewTipsLocal!= null &&!interviewTipsLocal.isEmpty()) { + interviewTips = interviewTipsLocal; + } } return interviewTips; } @@ -117,7 +210,6 @@ public class CommonServiceImpl implements CommonService { interviewTips = getInterviewTips(partnerLineId, OperateTypeEnum.FINISH_INTERVIEW, "通过展会于", "结束面试"); //3. 发起资质审批 } else if (workflowStage.equals(WorkflowStageEnum.INTERVIEW.getCode()) && workflowStatus.equals(WorkflowStatusEnum.INTERVIEW_5.getCode())) { - // TODO 判断是否是通过会销发起的 interviewTips = getInterviewTips(partnerLineId, OperateTypeEnum.EXHIBITION_CREATE_QUALIFYVERIFY, "通过展会于", "发起加盟商资质审核"); if (interviewTips == null) { getInterviewTips(partnerLineId, OperateTypeEnum.CREATE_QUALIFYVERIFY, "于", "发起加盟商资质审核");