|
|
@@ -2,12 +2,16 @@ package com.yimeng.okr.service;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.yimeng.okr.entity.AssessmentPeriod;
|
|
|
+import com.yimeng.okr.entity.SysUser;
|
|
|
import com.yimeng.okr.enums.PeriodStatus;
|
|
|
import com.yimeng.okr.enums.PeriodType;
|
|
|
+import com.yimeng.okr.event.NotificationEvent;
|
|
|
import com.yimeng.okr.exception.BusinessException;
|
|
|
import com.yimeng.okr.mapper.AssessmentPeriodMapper;
|
|
|
+import com.yimeng.okr.mapper.SysUserMapper;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.context.ApplicationEventPublisher;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@@ -22,6 +26,8 @@ import java.util.Map;
|
|
|
public class AssessmentPeriodService {
|
|
|
|
|
|
private final AssessmentPeriodMapper periodMapper;
|
|
|
+ private final SysUserMapper userMapper;
|
|
|
+ private final ApplicationEventPublisher publisher;
|
|
|
|
|
|
public List<AssessmentPeriod> list(boolean isAdmin) {
|
|
|
LambdaQueryWrapper<AssessmentPeriod> wrapper = new LambdaQueryWrapper<AssessmentPeriod>()
|
|
|
@@ -80,6 +86,38 @@ public class AssessmentPeriodService {
|
|
|
period.setStatus(targetStatus);
|
|
|
periodMapper.updateById(period);
|
|
|
log.info("Period {} status: {} -> {}", id, current.getLabel(), targetStatus.getLabel());
|
|
|
+
|
|
|
+ notifyPeriodTransition(period, targetStatus);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void notifyPeriodTransition(AssessmentPeriod period, PeriodStatus target) {
|
|
|
+ String title;
|
|
|
+ String content;
|
|
|
+ switch (target) {
|
|
|
+ case OKR_ALIGN -> {
|
|
|
+ title = "考核周期已发布";
|
|
|
+ content = "「" + period.getName() + "」已发布,请进入 OKR 对齐阶段,制定目标并完成对齐";
|
|
|
+ }
|
|
|
+ case EXECUTING -> {
|
|
|
+ title = "OKR 已锁定,开始执行";
|
|
|
+ content = "「" + period.getName() + "」OKR 已锁定,进入执行追踪阶段,请定期更新 KR 进度";
|
|
|
+ }
|
|
|
+ case ASSESSING -> {
|
|
|
+ title = "考评阶段已开始";
|
|
|
+ content = "「" + period.getName() + "」进入考评阶段,请前往「我的绩效」完成自评";
|
|
|
+ }
|
|
|
+ case ARCHIVED -> {
|
|
|
+ title = "考核周期已归档";
|
|
|
+ content = "「" + period.getName() + "」已完成并归档,可在历史绩效中查看结果";
|
|
|
+ }
|
|
|
+ default -> { return; }
|
|
|
+ }
|
|
|
+ List<SysUser> users = userMapper.selectList(null);
|
|
|
+ for (SysUser u : users) {
|
|
|
+ publisher.publishEvent(new NotificationEvent(
|
|
|
+ this, u.getId(), "PERIOD_" + target.name(),
|
|
|
+ title, content, "period", period.getId()));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
public void delete(Long id) {
|
|
|
@@ -133,6 +171,7 @@ public class AssessmentPeriodService {
|
|
|
p.setStatus(PeriodStatus.ASSESSING);
|
|
|
periodMapper.updateById(p);
|
|
|
log.info("Auto transition period {} to ASSESSING", p.getId());
|
|
|
+ notifyPeriodTransition(p, PeriodStatus.ASSESSING);
|
|
|
}
|
|
|
}
|
|
|
}
|