Sfoglia il codice sorgente

1、增加小程序订阅消息的提示

rayson 7 mesi fa
parent
commit
8b6a6ed92f

+ 15 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/CommonConstants.java

@@ -1,7 +1,9 @@
 package com.citu.module.menduner.system.enums;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 公共常量
@@ -43,4 +45,17 @@ public class CommonConstants {
     /** 企业开票提醒,发送给企业 **/
     public static final String IM_SYS_ENTERPRISE_INVOICE_TEMPLATE = "您申请的发票已开具完成,请前往“财务中心-订单管理-交易订单”查看详情。";
 
+    /** ========== 小程序订阅 消息模版 ========== **/
+    /** 简历投递反馈通知,发送给投递者 **/
+    public static final Map<String,String> WX_SUBSCRIBE_TEMPLATE_PAGE = new HashMap<>() {{
+        put(WX_SUBSCRIBE_CV_FEEDBACK_TEMPLATE,WX_SUBSCRIBE_CV_FEEDBACK_TEMPLATE_PAGE );
+        put(WX_SUBSCRIBE_INTERVIEW_REMIND_TEMPLATE,WX_SUBSCRIBE_INTERVIEW_REMIND_TEMPLATE_PAGE );
+    }};
+    public static final String WX_SUBSCRIBE_CV_FEEDBACK_TEMPLATE = "简历投递反馈通知";
+    public static final String WX_SUBSCRIBE_CV_FEEDBACK_TEMPLATE_PAGE = "pages/index/my";
+    /** 线下面试提醒,发送给投递者 **/
+    public static final String WX_SUBSCRIBE_INTERVIEW_REMIND_TEMPLATE = "线下面试提醒";
+    public static final String WX_SUBSCRIBE_INTERVIEW_REMIND_TEMPLATE_PAGE = "pages/index/my";
+
+
 }

+ 28 - 13
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/interview/InterviewInviteServiceImpl.java

@@ -5,17 +5,16 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.citu.framework.common.pojo.PageResult;
-import com.citu.framework.common.util.date.DateUtils;
 import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.framework.security.core.LoginUser;
 import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.system.controller.app.jobhunt.interview.vo.AppInterviewInvitePageReqVO;
-import com.citu.module.menduner.system.controller.base.interview.InterviewInviteDetailRespVO;
 import com.citu.module.menduner.system.controller.app.recruit.interview.vo.*;
 import com.citu.module.menduner.system.controller.base.CommonRespVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisPageReqVO;
 import com.citu.module.menduner.system.controller.base.analysis.RecruitInterviewInviteAnalysisRespVO;
 import com.citu.module.menduner.system.controller.base.contact.EnterpriseUserContactRespVO;
+import com.citu.module.menduner.system.controller.base.interview.InterviewInviteDetailRespVO;
 import com.citu.module.menduner.system.controller.base.interview.InterviewInvitePageReqVO;
 import com.citu.module.menduner.system.controller.base.interview.InterviewInviteSaveReqVO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
@@ -24,7 +23,6 @@ import com.citu.module.menduner.system.dal.dataobject.interview.InterviewInviteD
 import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobCvRelDO;
 import com.citu.module.menduner.system.dal.dataobject.person.PersonInfoDO;
-import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseMapper;
 import com.citu.module.menduner.system.dal.mysql.interview.InterviewInviteMapper;
 import com.citu.module.menduner.system.enums.cv.ConversationStatusEnum;
 import com.citu.module.menduner.system.enums.interview.InterviewInviteStatusEnum;
@@ -39,6 +37,7 @@ import com.citu.module.menduner.system.util.RedisUtils;
 import com.citu.module.pay.api.wallet.PayWalletApi;
 import com.citu.module.pay.api.wallet.dto.PayWalletAddBalanceDTO;
 import com.citu.module.pay.enums.wallet.PayWalletBizTypeEnum;
+import com.citu.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
@@ -55,9 +54,9 @@ import java.util.stream.Collectors;
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY3;
 import static com.citu.framework.common.util.validation.ValidationUtils.isMobile;
+import static com.citu.module.menduner.common.util.TimeUtils.generateDateTimeRange;
 import static com.citu.module.menduner.system.enums.CommonConstants.*;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
-import static com.citu.module.menduner.common.util.TimeUtils.generateDateTimeRange;
 
 /**
  * 面试邀请 Service 实现类
@@ -179,7 +178,7 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
                 StrUtil.format(IM_SYS_INTERVIEW_INVITE_AGREE_TEMPLATE,
                         personInfoDO.getName(),
                         jobAdvertisedService.getJobAdvertised(interviewInvite.getJobId()).getName())
-                );
+        );
     }
 
     @Override
@@ -188,7 +187,7 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         // 设置状态
         setStatus(interviewInvite, InterviewInviteStatusEnum.REJECTED);
         mapper.updateById(interviewInvite);
-             PersonInfoDO personInfoDO = personInfoService.getUserInfoByUserId(interviewInvite.getUserId());
+        PersonInfoDO personInfoDO = personInfoService.getUserInfoByUserId(interviewInvite.getUserId());
         // 发送给职位发布者
         messageUtils.sendSystemImMessage(
                 interviewInvite.getInviteUserId(),
@@ -214,7 +213,7 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
     }
 
     @Override
-    public PageResult<InterviewInviteDetailRespVO> page(AppInterviewInvitePageReqVO reqVO,Long userId) {
+    public PageResult<InterviewInviteDetailRespVO> page(AppInterviewInvitePageReqVO reqVO, Long userId) {
         PageResult<InterviewInviteDetailRespVO> result = mapper.page(reqVO, userId);
         result.getList().forEach(resp -> {
             EnterpriseUserContactRespVO contactRespVO = userBindService
@@ -246,7 +245,7 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
     @Override
     public PageResult<AppRecruitInterviewInviteRespVO> page(AppRecruitInterviewInviteReqPageVO reqVO) {
         LoginUser loginUser = LoginUserContext.get();
-        PageResult<AppRecruitInterviewInviteRespVO> result= mapper.page(
+        PageResult<AppRecruitInterviewInviteRespVO> result = mapper.page(
                 reqVO,
                 LoginUserContext.getEnterpriseId(loginUser),
                 LoginUserContext.getUserId(loginUser)
@@ -285,27 +284,43 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         interviewInvite.setEnterpriseId(enterpriseId);
         interviewInvite.setInviteUserId(userId);
         JobAdvertisedDO job = jobAdvertisedService.getJobAdvertised(interviewInvite.getJobId());
-        EnterpriseDO enterprise =enterpriseService.getEnterprise(interviewInvite.getEnterpriseId());
+        EnterpriseDO enterprise = enterpriseService.getEnterprise(interviewInvite.getEnterpriseId());
+        // 构建消息体
+        SocialWxaSubscribeMessageSendReqDTO reqDTO =
+                messageUtils.buildWxSubscribeMessage(reqVO.getUserId(), WX_SUBSCRIBE_INTERVIEW_REMIND_TEMPLATE);
+        reqDTO = messageUtils.buildWxSubscribeMessageByInterview(reqDTO,
+                job.getName(),
+                interviewInvite.getTime().format(DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY3)),
+                interviewInvite.getInvitePhone(),
+                interviewInvite.getAddress(),
+                interviewInvite.getRemark()
+        );
         if (null == reqVO.getId()) {
             mapper.insert(interviewInvite);
             // 发送给求职者
-            messageUtils.sendSystemImMessage(reqVO.getUserId(),
+            messageUtils.sendSystemImAndWxSubscribeMessage(reqVO.getUserId(),
                     null,
                     StrUtil.format(IM_SYS_INTERVIEW_INVITE_TEMPLATE,
                             enterprise.getName(),
                             job.getName(),
                             interviewInvite.getTime().format(DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY3))
-                            )
+                    ),
+                    reqDTO
+
             );
+
+
+
         } else {
             mapper.updateById(interviewInvite);
-            messageUtils.sendSystemImMessage(reqVO.getUserId(),
+            messageUtils.sendSystemImAndWxSubscribeMessage(reqVO.getUserId(),
                     null,
                     StrUtil.format(IM_SYS_INTERVIEW_INVITE_MODIFY_TEMPLATE,
                             enterprise.getName(),
                             job.getName(),
                             interviewInvite.getTime().format(DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY3))
-                    )
+                    ),
+                    reqDTO
             );
         }
 

+ 24 - 7
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobCvRelServiceImpl.java

@@ -17,31 +17,34 @@ import com.citu.module.menduner.system.controller.base.analysis.RecruitAnalysisP
 import com.citu.module.menduner.system.controller.base.analysis.RecruitJobCvRelAnalysisRespVO;
 import com.citu.module.menduner.system.controller.base.job.cv.JobCvRelPageReqVO;
 import com.citu.module.menduner.system.controller.base.job.cv.JobCvRelSaveReqVO;
+import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobAdvertisedDO;
 import com.citu.module.menduner.system.dal.dataobject.job.JobCvRelDO;
-import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseMapper;
 import com.citu.module.menduner.system.dal.mysql.job.JobCvRelMapper;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import com.citu.module.menduner.system.enums.cv.JobCvRelStatusEnum;
 import com.citu.module.menduner.system.enums.eduexp.EducationTypeEnum;
 import com.citu.module.menduner.system.enums.person.PersonSexEnum;
 import com.citu.module.menduner.system.enums.workexp.ExpTypeEnum;
+import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
 import com.citu.module.menduner.system.util.MessageUtils;
+import com.citu.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY3;
 import static com.citu.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 import static com.citu.module.menduner.common.util.TimeUtils.generateDateTimeRange;
-import static com.citu.module.menduner.system.enums.CommonConstants.IM_SYS_CV_LOOK_TEMPLATE;
-import static com.citu.module.menduner.system.enums.CommonConstants.IM_SYS_JOB_CV_REL_TEMPLATE;
+import static com.citu.module.menduner.system.enums.CommonConstants.*;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
 import static com.citu.module.menduner.system.util.RecruitAnalysisUtils.packBarCount;
 
@@ -61,7 +64,7 @@ public class JobCvRelServiceImpl implements JobCvRelService {
     private JobAdvertisedService jobAdvertisedService;
 
     @Resource
-    private EnterpriseMapper enterpriseMapper;
+    private EnterpriseService enterpriseService;
 
     @Resource
     private MessageUtils messageUtils;
@@ -223,13 +226,27 @@ public class JobCvRelServiceImpl implements JobCvRelService {
         }
         jobCvRel.setStatus(JobCvRelStatusEnum.LOOK.getStatus());
         boolean result = jobCvRelMapper.updateById(jobCvRel) == 1;
+
+
+        // 构建消息体
+        JobAdvertisedDO job = jobAdvertisedService.getJobAdvertised(jobCvRel.getJobId());
+        EnterpriseDO enterprise = enterpriseService.getEnterprise(job.getEnterpriseId());
+        SocialWxaSubscribeMessageSendReqDTO reqDTO =
+                messageUtils.buildWxSubscribeMessage(jobCvRel.getUserId(), WX_SUBSCRIBE_CV_FEEDBACK_TEMPLATE);
+        reqDTO = messageUtils.buildWxSubscribeMessageByJobCvRelFeedBack(reqDTO,
+                enterprise.getName(),
+                job.getName(),
+                "您的简历已被HR查看",
+                jobCvRel.getUpdateTime().format(DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY3))
+        );
         // 发送系统消息给投递者
-        messageUtils.sendSystemImMessage(
+        messageUtils.sendSystemImAndWxSubscribeMessage(
                 jobCvRel.getUserId(),
                 null,
                 StrUtil.format(IM_SYS_CV_LOOK_TEMPLATE,
-                        enterpriseMapper.selectById(jobCvRel.getEnterpriseId()).getName()
-                )
+                        enterprise.getName()
+                ),
+                reqDTO
         );
         return result;
     }

+ 97 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/util/MessageUtils.java

@@ -1,18 +1,22 @@
 package com.citu.module.menduner.system.util;
 
+import com.citu.framework.common.enums.UserTypeEnum;
 import com.citu.module.menduner.im.api.ImCollectMessageReqVo;
 import com.citu.module.menduner.im.api.ImCollectUserReqVo;
 import com.citu.module.menduner.im.api.ImMessageApi;
 import com.citu.module.menduner.system.enums.CommonConstants;
 import com.citu.module.system.api.notify.NotifyMessageSendApi;
 import com.citu.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
+import com.citu.module.system.api.social.SocialClientApi;
+import com.citu.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
+
+import static com.citu.module.menduner.system.enums.CommonConstants.WX_SUBSCRIBE_TEMPLATE_PAGE;
 
 /**
  * 消息通知
@@ -26,6 +30,9 @@ public class MessageUtils {
     @Resource
     private ImMessageApi imMessageApi;
 
+    @Resource
+    private SocialClientApi socialClientApi;
+
 
     /**
      * 发送后台管理系统消息通知
@@ -45,9 +52,9 @@ public class MessageUtils {
     /**
      * 发送im系统消息通知
      *
-     * @param userId      用户id
+     * @param userId       用户id
      * @param enterpriseId 企业id
-     * @param message     消息内容
+     * @param message      消息内容
      */
     @Async
     public void sendSystemImMessage(Long userId, Long enterpriseId, String message) {
@@ -62,4 +69,91 @@ public class MessageUtils {
         imMessageApi.systemMessage(reqVo);
     }
 
+    @Async
+    public void sendSystemImAndWxSubscribeMessage(Long userId,
+                                                  Long enterpriseId,
+                                                  String message,
+                                                  SocialWxaSubscribeMessageSendReqDTO wxReq) {
+        ImCollectMessageReqVo reqVo = new ImCollectMessageReqVo();
+        List<ImCollectUserReqVo> userVoList = new ArrayList<>();
+        ImCollectUserReqVo userVo = new ImCollectUserReqVo();
+        userVo.setUserId(userId);
+        userVo.setEnterpriseId(enterpriseId);
+        userVoList.add(userVo);
+        reqVo.setUserVoList(userVoList);
+        reqVo.setMessage(message);
+        imMessageApi.systemMessage(reqVo);
+
+        sendWxSubscribeMessage(wxReq);
+    }
+
+    /**
+     * 发送微信订阅消息
+     *
+     * @param reqDTO 请求参数
+     */
+    @Async
+    public void sendWxSubscribeMessage(SocialWxaSubscribeMessageSendReqDTO reqDTO) {
+        socialClientApi.sendWxaSubscribeMessage(reqDTO);
+    }
+
+    /**
+     * 构建微信订阅消息
+     *
+     * @param userId        用户id
+     * @param templateTitle 模板标题
+     */
+    public SocialWxaSubscribeMessageSendReqDTO buildWxSubscribeMessage(Long userId, String templateTitle) {
+        return new SocialWxaSubscribeMessageSendReqDTO()
+                .setUserId(userId)
+                .setUserType(UserTypeEnum.MEMBER.getValue())
+                .setTemplateTitle(templateTitle)
+                .setPage(WX_SUBSCRIBE_TEMPLATE_PAGE.get(templateTitle));
+    }
+
+
+    /**
+     * 构建微信订阅消息-面试
+     *
+     * @param jobName  职位名称
+     * @param time     时间
+     * @param contacts 联系人
+     * @param address  地址
+     * @param remind   温馨提醒
+     */
+    public SocialWxaSubscribeMessageSendReqDTO buildWxSubscribeMessageByInterview(SocialWxaSubscribeMessageSendReqDTO reqDTO,
+                                                                                  String jobName,
+                                                                                  String time,
+                                                                                  String contacts,
+                                                                                  String address,
+                                                                                  String remind) {
+        reqDTO.addMessage("thing1", jobName);
+        reqDTO.addMessage("time3", time);
+        reqDTO.addMessage("name6", contacts);
+        reqDTO.addMessage("thing2", address);
+        reqDTO.addMessage("thing4", remind);
+        return reqDTO;
+    }
+
+    /**
+     * 构建微信订阅消息-简历反馈
+     *
+     * @param enterpriseName 公司名称
+     * @param jobName        职位名称
+     * @param feedback       反馈内容
+     * @param time           时间
+     */
+    public SocialWxaSubscribeMessageSendReqDTO buildWxSubscribeMessageByJobCvRelFeedBack(SocialWxaSubscribeMessageSendReqDTO reqDTO,
+                                                                                         String enterpriseName,
+                                                                                         String jobName,
+                                                                                         String feedback,
+                                                                                         String time) {
+        reqDTO.addMessage("thing3", enterpriseName);
+        reqDTO.addMessage("thing2", jobName);
+        reqDTO.addMessage("thing1", feedback);
+        reqDTO.addMessage("time4", time);
+        return reqDTO;
+    }
+
+
 }