增加延期信息
This commit is contained in:
parent
38cbdf6c04
commit
73b1085925
@ -13,7 +13,7 @@ services:
|
||||
environment:
|
||||
- TZ=Asia/Shanghai
|
||||
volumes:
|
||||
- ./logs:/app/logs
|
||||
- /opt/task-reminder/logs:/app/logs
|
||||
networks:
|
||||
default:
|
||||
external: true
|
||||
24
pom.xml
24
pom.xml
@ -102,6 +102,10 @@
|
||||
<argument>stop</argument>
|
||||
<argument>task-reminder-app</argument>
|
||||
</arguments>
|
||||
<successCodes>
|
||||
<successCode>0</successCode>
|
||||
<successCode>1</successCode>
|
||||
</successCodes>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
@ -118,6 +122,10 @@
|
||||
<argument>remove</argument>
|
||||
<argument>task-reminder-app</argument>
|
||||
</arguments>
|
||||
<successCodes>
|
||||
<successCode>0</successCode>
|
||||
<successCode>1</successCode>
|
||||
</successCodes>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
@ -134,6 +142,10 @@
|
||||
<argument>rmi</argument>
|
||||
<argument>172.22.222.100:28082/task-reminder:1.0.0</argument>
|
||||
</arguments>
|
||||
<successCodes>
|
||||
<successCode>0</successCode>
|
||||
<successCode>1</successCode>
|
||||
</successCodes>
|
||||
</configuration>
|
||||
</execution>
|
||||
<!-- 在install阶段构建Docker镜像 -->
|
||||
@ -153,6 +165,10 @@
|
||||
<argument>172.22.222.100:28082/task-reminder:1.0.0</argument>
|
||||
<argument>.</argument>
|
||||
</arguments>
|
||||
<successCodes>
|
||||
<successCode>0</successCode>
|
||||
<successCode>1</successCode>
|
||||
</successCodes>
|
||||
</configuration>
|
||||
</execution>
|
||||
<!-- 在install阶段推送Docker镜像 -->
|
||||
@ -170,6 +186,10 @@
|
||||
<argument>push</argument>
|
||||
<argument>172.22.222.100:28082/task-reminder:1.0.0</argument>
|
||||
</arguments>
|
||||
<successCodes>
|
||||
<successCode>0</successCode>
|
||||
<successCode>1</successCode>
|
||||
</successCodes>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
@ -187,6 +207,10 @@
|
||||
<argument>up</argument>
|
||||
<argument>-d</argument>
|
||||
</arguments>
|
||||
<successCodes>
|
||||
<successCode>0</successCode>
|
||||
<successCode>1</successCode>
|
||||
</successCodes>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
|
||||
@ -188,27 +188,39 @@ public class ZentaoTaskReminderService {
|
||||
// 显示真实姓名
|
||||
String displayName = getDisplayName(items, assignedTo);
|
||||
int totalItems = items.tasks.size() + items.bugs.size();
|
||||
message.append(displayName).append(" (").append(totalItems).append("个事项)\n");
|
||||
message.append("## ").append(displayName).append(" (").append(totalItems).append("个事项)\n");
|
||||
|
||||
// 显示任务
|
||||
for (ZentaoTask task : items.tasks) {
|
||||
String statusIcon = task.isOverdue() ? "<font color=\"warning\">" : "<font color=\"info\">";
|
||||
String statusIcon = task.isOverdue() ? "<font color=\"warning\">" : "<font color=\"common\">";
|
||||
message.append(statusIcon).append(" [TASK-").append(task.getId()).append("] ").append(task.getName());
|
||||
if (task.getDeadline() != null && !task.getDeadline().isEmpty() && !"0000-00-00".equals(task.getDeadline())) {
|
||||
message.append(" \n截止日期:").append(task.getDeadline());
|
||||
if (task.isOverdue()) {
|
||||
long overdueDays = getOverdueDays(task.getDeadline());
|
||||
if (overdueDays > 0) {
|
||||
message.append(",已延期").append(overdueDays).append("天");
|
||||
}
|
||||
}
|
||||
}
|
||||
message.append("</font>\n");
|
||||
}
|
||||
|
||||
// 显示BUG
|
||||
for (ZentaoBug bug : items.bugs) {
|
||||
String statusIcon = bug.isOverdue() ? "<font color=\"warning\">🔴" : "<font color=\"info\">🐛";
|
||||
String statusIcon = bug.isOverdue() ? "<font color=\"warning\">🔴" : "<font color=\"common\">🐛";
|
||||
message.append(statusIcon).append(" [BUGFIX-").append(bug.getId()).append("] ").append(bug.getTitle());
|
||||
if (bug.getSeverity() != null && !bug.getSeverity().isEmpty()) {
|
||||
message.append(" [").append(bug.getSeverityDesc()).append("]");
|
||||
}
|
||||
if (bug.getDeadline() != null && !bug.getDeadline().isEmpty() && !"0000-00-00".equals(bug.getDeadline())) {
|
||||
message.append(" \n截止日期:").append(bug.getDeadline());
|
||||
if (bug.isOverdue()) {
|
||||
long overdueDays = getOverdueDays(bug.getDeadline());
|
||||
if (overdueDays > 0) {
|
||||
message.append(",已延期").append(overdueDays).append("天");
|
||||
}
|
||||
}
|
||||
}
|
||||
message.append("</font>\n");
|
||||
}
|
||||
@ -216,11 +228,29 @@ public class ZentaoTaskReminderService {
|
||||
}
|
||||
|
||||
// 提示信息
|
||||
message.append("请及时登录禅道系统更新状态");
|
||||
message.append("\n请及时登录禅道系统更新状态");
|
||||
|
||||
return message.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算延期天数
|
||||
*/
|
||||
private long getOverdueDays(String deadline) {
|
||||
if (deadline == null || deadline.isEmpty() || "0000-00-00".equals(deadline)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
try {
|
||||
LocalDate deadlineDate = LocalDate.parse(deadline);
|
||||
LocalDate today = LocalDate.now();
|
||||
return today.toEpochDay() - deadlineDate.toEpochDay();
|
||||
} catch (Exception e) {
|
||||
logger.debug("Failed to parse deadline: {}", deadline);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 合并任务和BUG按负责人分组
|
||||
*/
|
||||
@ -325,7 +355,14 @@ public class ZentaoTaskReminderService {
|
||||
// 截止日期
|
||||
if (task.getDeadline() != null && !task.getDeadline().isEmpty() &&
|
||||
!"0000-00-00".equals(task.getDeadline())) {
|
||||
message.append(" (").append(task.getDeadline()).append(")");
|
||||
message.append(" (").append(task.getDeadline());
|
||||
if (task.isOverdue()) {
|
||||
long overdueDays = getOverdueDays(task.getDeadline());
|
||||
if (overdueDays > 0) {
|
||||
message.append(",已延期").append(overdueDays).append("天");
|
||||
}
|
||||
}
|
||||
message.append(")");
|
||||
}
|
||||
|
||||
message.append("\n");
|
||||
@ -392,7 +429,14 @@ public class ZentaoTaskReminderService {
|
||||
// 截止日期
|
||||
if (bug.getDeadline() != null && !bug.getDeadline().isEmpty() &&
|
||||
!"0000-00-00".equals(bug.getDeadline())) {
|
||||
message.append(" (").append(bug.getDeadline()).append(")");
|
||||
message.append(" (").append(bug.getDeadline());
|
||||
if (bug.isOverdue()) {
|
||||
long overdueDays = getOverdueDays(bug.getDeadline());
|
||||
if (overdueDays > 0) {
|
||||
message.append(",已延期").append(overdueDays).append("天");
|
||||
}
|
||||
}
|
||||
message.append(")");
|
||||
}
|
||||
|
||||
message.append("\n");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
server:
|
||||
port: 8080
|
||||
port: 8081
|
||||
|
||||
spring:
|
||||
application:
|
||||
|
||||
@ -18,7 +18,7 @@ task:
|
||||
- id: "chainhub"
|
||||
name: "一站式平台"
|
||||
webhook:
|
||||
url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=614b110b-8957-4be8-95b9-4eca84c15028"
|
||||
url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=6c33fed6-c883-493d-a1c3-a7a23b9b4175"
|
||||
task-system: "zentao" # 任务管理系统类型:zentao, smartsheet, jira, trello 等
|
||||
# 禅道配置
|
||||
zentao:
|
||||
|
||||
@ -95,7 +95,7 @@ class TaskReminderServiceTest {
|
||||
when(reminderHandlerFactory.getHandler(ScheduleType.MORNING, TaskSystemType.ZENTAO)).thenReturn(reminderHandler);
|
||||
|
||||
// 执行测试
|
||||
taskReminderService.sendReminder("test-group", "morning");
|
||||
taskReminderService.sendReminder("test-group", ScheduleType.MORNING);
|
||||
|
||||
// 验证
|
||||
verify(reminderHandler, times(1)).handleReminder(eq(testGroup), eq(ScheduleType.MORNING), any(TaskReminderConfig.Schedule.class));
|
||||
@ -107,7 +107,7 @@ class TaskReminderServiceTest {
|
||||
when(holidayUtil.isWeekend(any(LocalDate.class))).thenReturn(true);
|
||||
|
||||
// 执行测试
|
||||
taskReminderService.sendReminder("test-group", "morning");
|
||||
taskReminderService.sendReminder("test-group", ScheduleType.MORNING);
|
||||
|
||||
// 验证不发送消息
|
||||
verify(wechatWebhookService, never()).sendMarkdownMessage(anyString(), anyString());
|
||||
@ -120,7 +120,7 @@ class TaskReminderServiceTest {
|
||||
when(holidayUtil.isHoliday(any(LocalDate.class))).thenReturn(true);
|
||||
|
||||
// 执行测试
|
||||
taskReminderService.sendReminder("test-group", "morning");
|
||||
taskReminderService.sendReminder("test-group", ScheduleType.MORNING);
|
||||
|
||||
// 验证不发送消息
|
||||
verify(wechatWebhookService, never()).sendMarkdownMessage(anyString(), anyString());
|
||||
@ -171,7 +171,7 @@ class TaskReminderServiceTest {
|
||||
when(taskReminderConfig.getGroupById("invalid-group")).thenReturn(null);
|
||||
|
||||
// 执行测试
|
||||
taskReminderService.sendReminder("invalid-group", "morning");
|
||||
taskReminderService.sendReminder("invalid-group", ScheduleType.MORNING);
|
||||
|
||||
// 验证不发送消息
|
||||
verify(wechatWebhookService, never()).sendMarkdownMessage(anyString(), anyString());
|
||||
@ -184,7 +184,7 @@ class TaskReminderServiceTest {
|
||||
when(enabledCheckService.isReminderEnabled(testGroup, "morning")).thenReturn(false);
|
||||
|
||||
// 执行测试
|
||||
taskReminderService.sendReminder("test-group", "morning");
|
||||
taskReminderService.sendReminder("test-group", ScheduleType.MORNING);
|
||||
|
||||
// 验证不发送消息
|
||||
verify(wechatWebhookService, never()).sendMarkdownMessage(anyString(), anyString());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user