Browse Source

1、增加im系统消息推送

rayson 7 months ago
parent
commit
a2c024dbf7
16 changed files with 217 additions and 29 deletions
  1. 2 0
      citu-framework/citu-common/src/main/java/com/citu/framework/common/util/date/DateUtils.java
  2. 7 7
      menduner/menduner-im-api/src/main/java/com/citu/module/menduner/im/api/ImMessageApi.java
  3. 1 1
      menduner/menduner-im-api/src/main/java/com/citu/module/menduner/im/enums/ApiConstants.java
  4. 22 0
      menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/api/ImMessageApiImpl.java
  5. 18 1
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/CommonConstants.java
  6. 7 0
      menduner/menduner-system-biz/pom.xml
  7. 25 6
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/test/TestController.java
  8. 5 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/workexp/WorkExpDO.java
  9. 2 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/framework/rpc/config/RpcConfiguration.java
  10. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeEnterpriseAuthServiceImpl.java
  11. 2 3
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/register/EnterpriseRegisterServiceImpl.java
  12. 55 0
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/interview/InterviewInviteServiceImpl.java
  13. 32 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/job/JobCvRelServiceImpl.java
  14. 2 2
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/redeem/RedeemServiceImpl.java
  15. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/task/EnterpriseEmailNoticeTask.java
  16. 35 4
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/util/MessageUtils.java

+ 2 - 0
citu-framework/citu-common/src/main/java/com/citu/framework/common/util/date/DateUtils.java

@@ -28,6 +28,8 @@ public class DateUtils {
 
     public static final String FORMAT_YEAR_MONTH_DAY2= "yyyyMMdd";
 
+    public static final String FORMAT_YEAR_MONTH_DAY3= "yyyy-MM-dd HH:mm";
+
     public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
 
     public static final String FORMAT_YEAR_MONTH_DAY_CHINESE = "yyyy年MM月dd日";

+ 7 - 7
menduner/menduner-im-api/src/main/java/com/citu/module/menduner/im/api/ImMessageApi.java

@@ -2,21 +2,21 @@ package com.citu.module.menduner.im.api;
 
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.module.menduner.im.enums.ApiConstants;
+import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 @FeignClient(name = ApiConstants.NAME)
-@Tag(name = "RPC 服务 - 用户账户")
+@Tag(name = "RPC 服务 - wukong系统消息")
 public interface ImMessageApi {
 
-    /**
-     * 发送系统消息
-     * @param reqVo
-     * @return
-     */
-    @PostMapping("/im/messages/system")
+    String PREFIX = ApiConstants.PREFIX + "/message";
+
+
+    @PostMapping(PREFIX + "/system")
+    @Operation(summary = "发送系统消息")
     public CommonResult systemMessage(@RequestBody ImCollectMessageReqVo reqVo);
 
 

+ 1 - 1
menduner/menduner-im-api/src/main/java/com/citu/module/menduner/im/enums/ApiConstants.java

@@ -14,7 +14,7 @@ public class ApiConstants {
      *
      * 注意,需要保证和 spring.application.name 保持一致
      */
-    public static final String NAME = "menduner-im-server";
+    public static final String NAME = "im-server";
 
     public static final String PREFIX = RpcConstants.RPC_API_PREFIX +  "/menduner/im";
 

+ 22 - 0
menduner/menduner-im-biz/src/main/java/com/citu/module/menduner/im/api/ImMessageApiImpl.java

@@ -0,0 +1,22 @@
+package com.citu.module.menduner.im.api;
+
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.module.menduner.im.service.wukong.WuKongMessageService;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController // 提供 RESTful API 接口,给 Feign 调用
+@Validated
+public class ImMessageApiImpl implements ImMessageApi {
+
+    @Resource
+    private WuKongMessageService wuKongMessageService;
+
+
+    @Override
+    public CommonResult systemMessage(ImCollectMessageReqVo reqVo) {
+        return wuKongMessageService.systemMessage(reqVo);
+    }
+}

+ 18 - 1
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/CommonConstants.java

@@ -1,4 +1,4 @@
-package com.citu.module.menduner.common.enums;
+package com.citu.module.menduner.system.enums;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -25,5 +25,22 @@ public class CommonConstants {
     /** 系统提示-企业申请注册 1-{企业}**/
     public static final String NOTIFY_SYS_ENTERPRISE_REGISTER = "menduner_sys_enterprise_register";
 
+    /** ========== im 消息模版 ========== **/
+    /** 投递简历时,发送给职位发布者 **/
+    public static final String IM_SYS_JOB_CV_REL_TEMPLATE = "您发布的职位:【{}】 ,收到新的简历,请查收。";
+    /** 简历被查看时,发送给投递者 **/
+    public static final String IM_SYS_CV_LOOK_TEMPLATE = "您投递的简历,已被【{}】查看。";
+    /** 面试邀约,发送给投递者 **/
+    public static final String IM_SYS_INTERVIEW_INVITE_TEMPLATE = "【{}】邀约您参加面试,职位:【{}】 ,面试时间:【{}】, 请前往“个人中心-求职反馈”中查看最新信息。";
+    /** 面试邀约修改,发送给投递者 **/
+    public static final String IM_SYS_INTERVIEW_INVITE_MODIFY_TEMPLATE = "【{}】修改了面试邀约信息,职位:【{}】 ,面试时间:【{}】, 请前往“个人中心-求职反馈”中查看最新信息。";
+    /** 面试进度提醒,发送给投递者 **/
+    public static final String IM_SYS_INTERVIEW_PROGRESS_TEMPLATE = "【{}】已更新面试进度,职位:【{}】 ,面试进度:【{}】, 请前往“个人中心-求职反馈”中查看最新信息。";
+    /** 同意面试邀约,发送给职位发布者 **/
+    public static final String IM_SYS_INTERVIEW_INVITE_AGREE_TEMPLATE = "【{}】用户同意了您发起的【{}】职位面试邀请,请前往“人才招聘-面试”中查看。";
+    /** 拒绝面试邀约,发送给职位发布者 **/
+    public static final String IM_SYS_INTERVIEW_INVITE_REJECT_TEMPLATE = "【{}】用户拒绝了您发起的【{}】职位面试邀请,请前往“人才招聘-面试”中查看。";
+    /** 企业开票提醒,发送给企业 **/
+    public static final String IM_SYS_ENTERPRISE_INVOICE_TEMPLATE = "您申请的发票已开具完成,请前往“财务中心-订单管理-交易订单”查看详情。";
 
 }

+ 7 - 0
menduner/menduner-system-biz/pom.xml

@@ -38,6 +38,13 @@
             <version>${revision}</version>
         </dependency>
 
+        <!-- 依赖服务 -->
+        <dependency>
+            <groupId>com.citu</groupId>
+            <artifactId>menduner-im-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
         <dependency>
             <groupId>com.citu</groupId>
             <artifactId>citu-spring-boot-starter-es</artifactId>

+ 25 - 6
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/app/common/test/TestController.java

@@ -2,9 +2,11 @@ package com.citu.module.menduner.system.controller.app.common.test;
 
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.signature.core.annotation.ApiSignature;
+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 io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.MessageSource;
 import org.springframework.security.crypto.password.PasswordEncoder;
@@ -13,6 +15,8 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
@@ -32,6 +36,9 @@ public class TestController {
     @Resource
     private PasswordEncoder passwordEncoder;
 
+    @Resource
+    private ImMessageApi imMessageApi;
+
 
     @PostMapping("/validation")
     public CommonResult<String> test(@RequestBody @Valid TestReqVO reqVO) {
@@ -55,29 +62,41 @@ public class TestController {
     @Operation(summary = "防篡改签名测试POST")
     @PostMapping("/post/signature")
     @ApiSignature(timeout = 30)
-    public String signatureTest(@RequestBody @Valid Map<String,Object> test) {
-        return "我是POST:"+test;
+    public String signatureTest(@RequestBody @Valid Map<String, Object> test) {
+        return "我是POST:" + test;
     }
 
     @Operation(summary = "防篡改签名测试POST")
     @PostMapping("/post/signature2")
     @ApiSignature(timeout = 30)
     public String signatureTest(@RequestParam("name") String name) {
-        return "我是POST2:"+name;
+        return "我是POST2:" + name;
     }
 
     @Operation(summary = "防篡改签名测试GET")
     @GetMapping("/get/signature")
     @ApiSignature(timeout = 30)
     public String signatureTest2(@RequestParam("name") String name) {
-        return "我是GET:"+name;
+        return "我是GET:" + name;
     }
 
     @Operation(summary = "防篡改签名测试GET2")
     @GetMapping("/get/signature2")
     @ApiSignature(timeout = 30)
     public String signatureTest3(@Valid TestReqVO reqVO) {
-        return "我是GET2:"+reqVO;
+        return "我是GET2:" + reqVO;
+    }
+
+    @GetMapping("/im/test")
+    public CommonResult im() {
+        ImCollectMessageReqVo reqVo = new ImCollectMessageReqVo();
+        List<ImCollectUserReqVo> userVoList = new ArrayList<>();
+        ImCollectUserReqVo userVo = new ImCollectUserReqVo();
+        userVo.setUserId(1L);
+        userVoList.add(userVo);
+        reqVo.setUserVoList(userVoList);
+        reqVo.setMessage("测试231232343253");
+        return imMessageApi.systemMessage(reqVo);
     }
 
 }

+ 5 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/dal/dataobject/workexp/WorkExpDO.java

@@ -1,19 +1,21 @@
 package com.citu.module.menduner.system.dal.dataobject.workexp;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.citu.framework.tenant.core.db.TenantBaseDO;
 import com.citu.module.menduner.system.enums.job.PayTypeEnum;
 import lombok.*;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 工作经历 DO
  *
  * @author Rayson
  */
-@TableName("mde_work_exp")
+@TableName(value = "mde_work_exp", autoResultMap = true)
 @KeySequence("mde_work_exp_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)
@@ -94,6 +96,7 @@ public class WorkExpDO extends TenantBaseDO {
     /**
      * 技能
      */
-    private String skillList;
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<String> skillList;
 
 }

+ 2 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/framework/rpc/config/RpcConfiguration.java

@@ -1,6 +1,7 @@
 package com.citu.module.menduner.system.framework.rpc.config;
 
 import com.citu.module.infra.api.file.FileApi;
+import com.citu.module.menduner.im.api.ImMessageApi;
 import com.citu.module.menduner.system.api.python.GraphApi;
 import com.citu.module.pay.api.order.PayOrderApi;
 import com.citu.module.pay.api.refund.PayRefundApi;
@@ -23,6 +24,7 @@ import org.springframework.context.annotation.Configuration;
         SocialClientApi.class,
         MailSendApi.class,
         NotifyMessageSendApi.class,
+        ImMessageApi.class,
         PayOrderApi.class,
         PayRefundApi.class,
         PayWalletApi.class,

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/auth/MdeEnterpriseAuthServiceImpl.java

@@ -16,7 +16,7 @@ import com.citu.module.menduner.system.controller.app.common.auth.vo.AppMdeAuthL
 import com.citu.module.menduner.system.convert.MdeAuthConvert;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseUserBindDO;
 import com.citu.module.menduner.system.dal.dataobject.user.MdeUserDO;
-import com.citu.module.menduner.common.enums.CommonConstants;
+import com.citu.module.menduner.system.enums.CommonConstants;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
 import com.citu.module.menduner.system.service.enterprise.register.EnterpriseRegisterService;

+ 2 - 3
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/register/EnterpriseRegisterServiceImpl.java

@@ -43,8 +43,7 @@ import java.util.ArrayList;
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.citu.framework.common.util.servlet.ServletUtils.getClientIP;
 import static com.citu.framework.web.core.util.WebFrameworkUtils.getTerminal;
-import static com.citu.module.menduner.common.enums.CommonConstants.NOTIFY_SYS_ENTERPRISE_REGISTER;
-import static com.citu.module.menduner.common.enums.CommonConstants.NOTIFY_SYS_POINT_REDEEM;
+import static com.citu.module.menduner.system.enums.CommonConstants.NOTIFY_SYS_ENTERPRISE_REGISTER;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
 
 /**
@@ -286,7 +285,7 @@ public class EnterpriseRegisterServiceImpl implements EnterpriseRegisterService
         }
 
         // 发送系统消息
-        messageUtils.sendSystemMessage(
+        messageUtils.sendPlatformSystemNotifyMessage(
                 new NotifySendSingleToUserReqDTO()
                         .setTemplateCode(NOTIFY_SYS_ENTERPRISE_REGISTER)
                         .setTemplateParams(

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

@@ -2,8 +2,10 @@ package com.citu.module.menduner.system.service.interview;
 
 
 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;
@@ -16,17 +18,23 @@ import com.citu.module.menduner.system.controller.base.analysis.RecruitInterview
 import com.citu.module.menduner.system.controller.base.contact.EnterpriseUserContactRespVO;
 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;
 import com.citu.module.menduner.system.dal.dataobject.hire.HireCommissionRatioDO;
 import com.citu.module.menduner.system.dal.dataobject.interview.InterviewInviteDO;
 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;
+import com.citu.module.menduner.system.service.enterprise.EnterpriseService;
 import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
 import com.citu.module.menduner.system.service.hire.HireCommissionRatioService;
 import com.citu.module.menduner.system.service.job.JobAdvertisedService;
 import com.citu.module.menduner.system.service.job.JobCvRelService;
+import com.citu.module.menduner.system.service.person.info.PersonInfoService;
+import com.citu.module.menduner.system.util.MessageUtils;
 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;
@@ -39,12 +47,15 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Collections;
 import java.util.List;
 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.system.enums.CommonConstants.*;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.*;
 import static com.citu.module.menduner.common.util.TimeUtils.generateDateTimeRange;
 
@@ -75,7 +86,13 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
     @Resource
     private JobAdvertisedService jobAdvertisedService;
     @Resource
+    private EnterpriseService enterpriseService;
+    @Resource
+    private PersonInfoService personInfoService;
+    @Resource
     private RedisUtils redisUtils;
+    @Resource
+    private MessageUtils messageUtils;
 
     /**
      * 计算佣金
@@ -153,6 +170,16 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         setStatus(interviewInvite, InterviewInviteStatusEnum.PENDING_INTERVIEW);
         interviewInvite.setPhone(reqVO.getPhone());
         mapper.updateById(interviewInvite);
+
+        PersonInfoDO personInfoDO = personInfoService.getUserInfoByUserId(interviewInvite.getUserId());
+        // 发送给职位发布者
+        messageUtils.sendSystemImMessage(
+                interviewInvite.getInviteUserId(),
+                interviewInvite.getEnterpriseId(),
+                StrUtil.format(IM_SYS_INTERVIEW_INVITE_AGREE_TEMPLATE,
+                        personInfoDO.getName(),
+                        jobAdvertisedService.getJobAdvertised(interviewInvite.getJobId()).getName())
+                );
     }
 
     @Override
@@ -161,6 +188,15 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         // 设置状态
         setStatus(interviewInvite, InterviewInviteStatusEnum.REJECTED);
         mapper.updateById(interviewInvite);
+             PersonInfoDO personInfoDO = personInfoService.getUserInfoByUserId(interviewInvite.getUserId());
+        // 发送给职位发布者
+        messageUtils.sendSystemImMessage(
+                interviewInvite.getInviteUserId(),
+                interviewInvite.getEnterpriseId(),
+                StrUtil.format(IM_SYS_INTERVIEW_INVITE_REJECT_TEMPLATE,
+                        personInfoDO.getName(),
+                        jobAdvertisedService.getJobAdvertised(interviewInvite.getJobId()).getName())
+        );
     }
 
     public void setStatus(InterviewInviteDO interviewInvite, InterviewInviteStatusEnum statusEnum) {
@@ -248,10 +284,29 @@ public class InterviewInviteServiceImpl implements InterviewInviteService {
         setStatus(interviewInvite, InterviewInviteStatusEnum.PENDING_ACCEPTANCE);
         interviewInvite.setEnterpriseId(enterpriseId);
         interviewInvite.setInviteUserId(userId);
+        JobAdvertisedDO job = jobAdvertisedService.getJobAdvertised(interviewInvite.getJobId());
+        EnterpriseDO enterprise =enterpriseService.getEnterprise(interviewInvite.getEnterpriseId());
         if (null == reqVO.getId()) {
             mapper.insert(interviewInvite);
+            // 发送给求职者
+            messageUtils.sendSystemImMessage(reqVO.getUserId(),
+                    null,
+                    StrUtil.format(IM_SYS_INTERVIEW_INVITE_TEMPLATE,
+                            enterprise.getName(),
+                            job.getName(),
+                            interviewInvite.getTime().format(DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY3))
+                            )
+            );
         } else {
             mapper.updateById(interviewInvite);
+            messageUtils.sendSystemImMessage(reqVO.getUserId(),
+                    null,
+                    StrUtil.format(IM_SYS_INTERVIEW_INVITE_MODIFY_TEMPLATE,
+                            enterprise.getName(),
+                            job.getName(),
+                            interviewInvite.getTime().format(DateTimeFormatter.ofPattern(FORMAT_YEAR_MONTH_DAY3))
+                    )
+            );
         }
 
     }

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

@@ -1,5 +1,6 @@
 package com.citu.module.menduner.system.service.job;
 
+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.object.BeanUtils;
@@ -18,12 +19,14 @@ 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.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.util.MessageUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -37,6 +40,8 @@ import java.util.stream.Collectors;
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
 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.ErrorCodeConstants.*;
 import static com.citu.module.menduner.system.util.RecruitAnalysisUtils.packBarCount;
 
@@ -55,6 +60,11 @@ public class JobCvRelServiceImpl implements JobCvRelService {
     @Resource
     private JobAdvertisedService jobAdvertisedService;
 
+    @Resource
+    private EnterpriseMapper enterpriseMapper;
+
+    @Resource
+    private MessageUtils messageUtils;
 
     @Override
     public Long createJobCvRel(JobCvRelSaveReqVO createReqVO) {
@@ -130,6 +140,12 @@ public class JobCvRelServiceImpl implements JobCvRelService {
         jobCvRel.setStatus(JobCvRelStatusEnum.NEW.getStatus());
         // 保存
         jobCvRelMapper.insert(jobCvRel);
+        // 发送系统消息给发布者
+        messageUtils.sendSystemImMessage(
+                job.getUserId(),
+                job.getEnterpriseId(),
+                StrUtil.format(IM_SYS_JOB_CV_REL_TEMPLATE, job.getName())
+        );
         return jobCvRel.getId();
     }
 
@@ -163,6 +179,12 @@ public class JobCvRelServiceImpl implements JobCvRelService {
         cvRelDO.setStatus(JobCvRelStatusEnum.NEW.getStatus());
         // 保存
         jobCvRelMapper.insert(cvRelDO);
+        // 发送系统消息给发布者
+        messageUtils.sendSystemImMessage(
+                job.getUserId(),
+                job.getEnterpriseId(),
+                StrUtil.format(IM_SYS_JOB_CV_REL_TEMPLATE, job.getName())
+        );
         return cvRelDO.getId();
     }
 
@@ -200,7 +222,16 @@ public class JobCvRelServiceImpl implements JobCvRelService {
             return true;
         }
         jobCvRel.setStatus(JobCvRelStatusEnum.LOOK.getStatus());
-        return jobCvRelMapper.updateById(jobCvRel) == 1;
+        boolean result = jobCvRelMapper.updateById(jobCvRel) == 1;
+        // 发送系统消息给投递者
+        messageUtils.sendSystemImMessage(
+                jobCvRel.getUserId(),
+                null,
+                StrUtil.format(IM_SYS_CV_LOOK_TEMPLATE,
+                        enterpriseMapper.selectById(jobCvRel.getEnterpriseId()).getName()
+                )
+        );
+        return result;
     }
 
     @Override

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/redeem/RedeemServiceImpl.java

@@ -24,7 +24,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static com.citu.module.menduner.common.enums.CommonConstants.NOTIFY_SYS_POINT_REDEEM;
+import static com.citu.module.menduner.system.enums.CommonConstants.NOTIFY_SYS_POINT_REDEEM;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.MDE_REQUEST_ILLEGAL;
 import static com.citu.module.menduner.system.enums.ErrorCodeConstants.REDEEM_NOT_EXISTS;
 
@@ -118,7 +118,7 @@ public class RedeemServiceImpl implements RedeemService {
         );
 
         // 发送系统消息
-        messageUtils.sendSystemMessage(
+        messageUtils.sendPlatformSystemNotifyMessage(
                 new NotifySendSingleToUserReqDTO()
                         .setTemplateCode(NOTIFY_SYS_POINT_REDEEM)
                         .setTemplateParams(

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/task/EnterpriseEmailNoticeTask.java

@@ -6,7 +6,7 @@ import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseDO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseEntitlementDO;
 import com.citu.module.menduner.system.dal.dataobject.enterprise.EnterpriseUserBindDO;
 import com.citu.module.menduner.system.dal.mysql.enterprise.EnterpriseMapper;
-import com.citu.module.menduner.common.enums.CommonConstants;
+import com.citu.module.menduner.system.enums.CommonConstants;
 import com.citu.module.menduner.system.service.enterprise.bind.EnterpriseUserBindService;
 import com.citu.module.menduner.system.service.enterprise.vip.EnterpriseEntitlementService;
 import com.citu.module.system.api.mail.MailSendApi;

+ 35 - 4
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/util/MessageUtils.java

@@ -1,11 +1,17 @@
 package com.citu.module.menduner.system.util;
 
-import com.citu.module.menduner.common.enums.CommonConstants;
+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 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;
 
 /**
@@ -17,12 +23,17 @@ public class MessageUtils {
     @Resource
     private NotifyMessageSendApi notifyMessageSendApi;
 
+    @Resource
+    private ImMessageApi imMessageApi;
+
 
     /**
-     * 发送系统消息通知
-     * @param reqDTO       请求参数
+     * 发送后台管理系统消息通知
+     *
+     * @param reqDTO 请求参数
      */
-    public void sendSystemMessage(NotifySendSingleToUserReqDTO reqDTO) {
+    @Async
+    public void sendPlatformSystemNotifyMessage(NotifySendSingleToUserReqDTO reqDTO) {
         // 参数不变,更改方法
         // 发送系统消息
         CommonConstants.notifySysUserId.stream()
@@ -30,4 +41,24 @@ public class MessageUtils {
                 .collect(Collectors.toList());
     }
 
+    /**
+     * 发送im系统消息通知
+     *
+     * @param userId      用户id
+     * @param enterpriseId 企业id
+     * @param message     消息内容
+     */
+    @Async
+    public void sendSystemImMessage(Long userId, Long enterpriseId, String message) {
+        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);
+    }
+
 }