通知站内信

This commit is contained in:
ran.shang
2025-06-26 17:36:59 +08:00
parent 8a77c9179b
commit 881f196ef1
8 changed files with 507 additions and 79 deletions

View File

@@ -7,6 +7,7 @@ import com.newyetai.recruit.position.entity.PositionRegistration;
import com.newyetai.recruit.position.dto.PositionRegistrationDTO;
import com.newyetai.recruit.position.dto.PositionRegistrationPageQueryDTO;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -27,4 +28,7 @@ public interface PositionRegistrationMapper extends MyMapper<PositionRegistratio
List<UserPositionRegistrationResDTO> userPage(@Param("param") UserPositionRegistrationPageQueryDTO queryDTO);
Map<String, Object> noticeInvite(Long positionRegistrationId, Long orgUserId);
Map<String, Object> noticeInterview(Long positionRegistrationId, Long orgUserId);
}

View File

@@ -244,4 +244,46 @@
</if>
ORDER BY t.id DESC
</sql>
<select id="noticeInvite" resultType="map">
select p.position_name positionName,
pr.create_time createTime,
pr.interview_time interviewTime,
pr.interview_location interviewLocation,
ou.phone interviewPhone,
o.org_name orgName,
u.real_name realName
from hr_position_registration pr
inner join hr_position p on pr.position_id = p.id and p.deleted = 0
inner join xs_org o on p.org_id = o.id and o.deleted = 0
inner join uc_user u on pr.user_id = u.id and u.deleted = 0
inner join uc_user ou on ou.id = #{orgUserId}
where pr.id = #{positionRegistrationId}
and pr.deleted = 0
</select>
<select id="noticeInterview" resultType="map">
select p.position_name positionName,
pr.create_time createTime,
pr.interview_time interviewTime,
pr.interview_location interviewLocation,
pr.induction_time inductionTime,
pr.remark,
ou.phone interviewPhone,
pa.detail_address positionAddress,
o.org_name orgName,
u.real_name realName
from hr_position_registration pr
inner join hr_position p on pr.position_id = p.id and p.deleted = 0
inner join xs_org o on p.org_id = o.id and o.deleted = 0
inner join uc_user u on pr.user_id = u.id and u.deleted = 0
inner join uc_user ou on ou.id = #{orgUserId}
left join hr_position_address pa on p.address_id = pa.id and pa.deleted = 0
where pr.id = #{positionRegistrationId}
and pr.deleted = 0
</select>
</mapper>

View File

@@ -4,6 +4,10 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import cn.hutool.core.date.DateUtil;
import com.newyetai.usercenter.notice.constant.NoticeChannelTypeEnum;
import com.newyetai.usercenter.notice.constant.NoticeTemplateCodeEnum;
import com.newyetai.usercenter.notice.dto.NoticeSendRecordOperateDTO;
import com.newyetai.usercenter.notice.service.NoticeSendRecordService;
import lombok.extern.slf4j.Slf4j;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -97,6 +101,8 @@ public class PositionRegistrationServiceImpl implements PositionRegistrationServ
@Autowired
private OrgService orgService;
@Autowired
private NoticeSendRecordService noticeSendRecordService;
@AutoUnLock
@@ -325,8 +331,11 @@ public class PositionRegistrationServiceImpl implements PositionRegistrationServ
ActionUtils.diff(operatorDTO.getId(), PositionRegistration.builder().status(PositionRegistrationStatusEnum.ALREADY_REGISTERED.getStatus()).build()
, PositionRegistration.builder().status(PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus()).build());
// 发送通知
sendNotice(NoticeTemplateCodeEnum.POSITION_INVITE, positionRegistrationMapper.noticeInvite(operatorDTO.getId(), UserContextHolder.getLoginUserId()));
}
@Override
public void termination(PositionRegistrationOperatorDTO operatorDTO) {
Assert.notNull(operatorDTO.getId(), "id不能为空");
@@ -376,7 +385,27 @@ public class PositionRegistrationServiceImpl implements PositionRegistrationServ
ActionUtils.diff(operatorDTO.getId(), PositionRegistration.builder().status(PositionRegistrationStatusEnum.WAIT_FOR_AN_INTERVIEW.getStatus()).build()
, PositionRegistration.builder().status(operatorDTO.getStatus()).build());
// 发送通知
if (PositionRegistrationStatusEnum.FAIL_THE_INTERVIEW.getStatus().equals(operatorDTO.getStatus())){
sendNotice(NoticeTemplateCodeEnum.POSITION_INTERVIEW_FAIL, positionRegistrationMapper.noticeInterview(operatorDTO.getId(), UserContextHolder.getLoginUserId()));
} else {
sendNotice(NoticeTemplateCodeEnum.POSITION_INTERVIEW_PASS, positionRegistrationMapper.noticeInterview(operatorDTO.getId(), UserContextHolder.getLoginUserId()));
}
}
//发送站内信
private void sendNotice(NoticeTemplateCodeEnum templateCodeEnum, Map<String, Object> contentParamDataMap) {
String templateCode = templateCodeEnum.getType();
try {
NoticeSendRecordOperateDTO sendRecordOperateDTO = NoticeSendRecordOperateDTO.builder()
.templateCode(templateCode)
.channelType(NoticeChannelTypeEnum.SITE.getType())
.contentParamDataMap(contentParamDataMap)
.build();
noticeSendRecordService.create(sendRecordOperateDTO);
} catch (Exception e) {
log.info("发送[{}]站内信失败:{}", templateCode, e.getMessage());
}
}
@Transactional(rollbackFor = Exception.class)

View File

@@ -1,21 +0,0 @@
package com.newyetai.usercenter.notice.constant;
public enum NoticeBizTypeEnum {
/** 岗位报名-邀请面试 */
POSITION_INVITE("position_invite"),
/** 岗位报名-面试结果 */
POSITION_INVITE_result("position_invite_result"),
;
private String type;
NoticeBizTypeEnum(String type) {
this.type = type;
}
public String getType() {
return type;
}
}

View File

@@ -0,0 +1,23 @@
package com.newyetai.usercenter.notice.constant;
public enum NoticeTemplateCodeEnum {
/** 岗位报名-邀请面试 */
POSITION_INVITE("position_invite"),
/** 岗位报名-面试通过 */
POSITION_INTERVIEW_PASS("position_interview_pass"),
/** 岗位报名-面试不通过 */
POSITION_INTERVIEW_FAIL("position_interview_fail"),
;
private String type;
NoticeTemplateCodeEnum(String type) {
this.type = type;
}
public String getType() {
return type;
}
}

View File

@@ -90,6 +90,7 @@ public class NoticeSendRecordServiceImpl implements NoticeSendRecordService {
noticeTemplateMapper.listNoticeTemplateDTO(noticeTemplateQueryDTO);
Assert.isTrue(!noticeTemplateDTOs.isEmpty(), "未找到对应通知模版");
NoticeTemplateDTO noticeTemplateDTO = noticeTemplateDTOs.get(0);
Assert.isTrue(noticeTemplateDTO.getEnabled(), "通知模版未开启");
tempOperateDto.setTemplateId(noticeTemplateDTO.getId());
// 平台模版指定接收人机构为平台
Long receiverOrgId =