生成通知文案

This commit is contained in:
2026-05-15 16:50:48 +08:00
parent bfef628ea6
commit f654180148
3 changed files with 111 additions and 0 deletions

View File

@@ -109,6 +109,19 @@ public class LbAssessmentApplyController {
return ResponseEntity.internalServerError().body(result);
}
@GetMapping("/notificationText")
@Operation(summary = "生成评估会议通知文案", description = "根据租户ID与记录ID查询申请评估记录拼接并返回格式化通知文本")
public ResponseEntity<Map<String, Object>> getNotificationText(
@Parameter(description = "租户ID", required = true) @RequestParam String tenantId,
@Parameter(description = "申请评估记录ID(UUID)", required = true) @RequestParam String id) {
Map<String, Object> result = lbAssessmentApplyService.buildAssessmentNotificationText(tenantId, id);
Boolean success = (Boolean) result.get("success");
if (success != null && success) {
return ResponseEntity.ok(result);
}
return ResponseEntity.badRequest().body(result);
}
@GetMapping("/export")
@Operation(summary = "导出申请评估Excel", description = "按租户ID与申请日期时间范围导出申请评估列表")
public void export(

View File

@@ -36,4 +36,9 @@ public interface ILbAssessmentApplyService extends IService<LbAssessmentApply> {
String applicationDatetimeEnd,
HttpServletResponse response);
/**
* 根据记录ID生成评估会议通知文案。
*/
Map<String, Object> buildAssessmentNotificationText(String tenantId, String id);
}

View File

@@ -31,6 +31,7 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -286,6 +287,98 @@ public class LbAssessmentApplyServiceImpl
}
}
private static final DateTimeFormatter NOTIFICATION_DATE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("M月d日 HH:mm");
private static final DateTimeFormatter MODERATOR_DATE_TIME_FORMATTER =
DateTimeFormatter.ofPattern("M月d日 H:mm");
private static final long MODERATOR_CONNECT_MINUTES_BEFORE = 20L;
@Override
public Map<String, Object> buildAssessmentNotificationText(String tenantId, String id) {
Map<String, Object> result = new HashMap<>();
try {
if (tenantId == null || tenantId.trim().isEmpty()) {
result.put("success", false);
result.put("message", "tenantId不能为空");
return result;
}
if (id == null || id.trim().isEmpty()) {
result.put("success", false);
result.put("message", "id不能为空");
return result;
}
LambdaQueryWrapper<LbAssessmentApply> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(LbAssessmentApply::getTenantId, tenantId.trim())
.eq(LbAssessmentApply::getId, id.trim());
LbAssessmentApply record = this.getOne(queryWrapper);
if (record == null) {
result.put("success", false);
result.put("message", "未找到对应的申请评估记录");
return result;
}
String text = formatAssessmentNotificationText(record);
result.put("success", true);
result.put("message", "生成成功");
result.put("data", text);
return result;
} catch (Exception e) {
log.error("生成评估会议通知文案失败, tenantId={}, id={}", tenantId, id, e);
result.put("success", false);
result.put("message", "生成失败:" + e.getMessage());
return result;
}
}
private static String formatAssessmentNotificationText(LbAssessmentApply record) {
String teacherName = nullToEmpty(record.getAssessmentTeacherName());
String applicantName = nullToEmpty(record.getApplicantName());
String colleagueName = nullToEmpty(record.getColleagueName());
String teamLeaderName = nullToEmpty(record.getTeamLeaderName());
String moderatorName = nullToEmpty(record.getModeratorName());
String meetingNumber = nullToEmpty(record.getMeetingNumber());
String assessmentDateTimeText = formatNotificationDateTime(record.getApplicationDatetime());
String moderatorDateTimeText = formatModeratorConnectDateTime(record.getApplicationDatetime());
StringBuilder sb = new StringBuilder();
sb.append(teacherName).append(" 老师,您好!\n");
if (!assessmentDateTimeText.isEmpty()) {
sb.append(assessmentDateTimeText).append("由您主评\n");
} else {
sb.append("由您主评\n");
}
sb.append("申评人: ").append(applicantName).append('\n');
sb.append("同事: ").append(colleagueName).append('\n');
sb.append("团队长: ").append(teamLeaderName).append('\n');
sb.append("评估老师: ").append(teacherName).append("老师\n");
sb.append("主持人: ").append(moderatorName);
if (!moderatorDateTimeText.isEmpty()) {
sb.append(" ").append(moderatorDateTimeText);
}
sb.append("连线☎\n\n");
sb.append("#腾讯会议: ").append(meetingNumber).append('\n');
sb.append("❤旁听学习须关麦静场\n");
sb.append("❤影响干扰会被移出");
return sb.toString();
}
private static String formatNotificationDateTime(LocalDateTime datetime) {
if (datetime == null) {
return "";
}
return datetime.format(NOTIFICATION_DATE_TIME_FORMATTER);
}
private static String formatModeratorConnectDateTime(LocalDateTime applicationDatetime) {
if (applicationDatetime == null) {
return "";
}
LocalDateTime connectTime = applicationDatetime.minus(MODERATOR_CONNECT_MINUTES_BEFORE, ChronoUnit.MINUTES);
return connectTime.format(MODERATOR_DATE_TIME_FORMATTER);
}
@Override
public void exportExcel(String tenantId,
String applicationDatetimeStart,