diff --git a/src/main/java/com/gaotao/modules/base/dao/PrintTaskDao.java b/src/main/java/com/gaotao/modules/base/dao/PrintTaskDao.java index eb53db0..1fe9e2c 100644 --- a/src/main/java/com/gaotao/modules/base/dao/PrintTaskDao.java +++ b/src/main/java/com/gaotao/modules/base/dao/PrintTaskDao.java @@ -24,5 +24,21 @@ public interface PrintTaskDao extends BaseMapper { "WHERE task_status = 'PENDING' " + "ORDER BY created_date ASC") List selectPendingTasksWithReadPast(@Param("limit") int limit); + + /** + * 将已完成的打印任务插入到历史表 + * + * @param archiveDays 归档天数(归档N天之前的数据) + * @return 插入的数据量 + */ + int insertIntoHistory(@Param("archiveDays") Integer archiveDays); + + /** + * 删除已归档的打印任务 + * + * @param archiveDays 归档天数(删除N天之前的数据) + * @return 删除的数据量 + */ + int deleteArchivedTasks(@Param("archiveDays") Integer archiveDays); } diff --git a/src/main/java/com/gaotao/modules/base/service/Impl/PrintTaskServiceImpl.java b/src/main/java/com/gaotao/modules/base/service/Impl/PrintTaskServiceImpl.java index 6a582c1..fe04283 100644 --- a/src/main/java/com/gaotao/modules/base/service/Impl/PrintTaskServiceImpl.java +++ b/src/main/java/com/gaotao/modules/base/service/Impl/PrintTaskServiceImpl.java @@ -22,6 +22,11 @@ public class PrintTaskServiceImpl extends ServiceImpl i private static final Gson gson = new Gson(); + /** + * 归档天数:固定归档10天前的历史数据 + */ + private static final int ARCHIVE_DAYS = 10; + @Override @Transactional public Long addPrintTask(String printerIp, String zplCode, String rfidFlag, @@ -90,5 +95,45 @@ public class PrintTaskServiceImpl extends ServiceImpl i .eq(PrintTask::getId, taskId) .update(); } + + /** + * 归档打印任务历史数据 + * + *

执行步骤:

+ *
    + *
  1. 将已完成的打印任务(SUCCESS/FAILED状态)插入到 print_task_history 表
  2. + *
  3. 删除 print_task 表中已归档的数据
  4. + *
  5. 固定归档10天之前的历史数据
  6. + *
+ * + * @return 归档的任务数量 + */ + @Override + @Transactional + public int archivePrintTaskHistory() { + log.info("开始归档打印任务历史数据,归档天数: {} 天", ARCHIVE_DAYS); + + try { + // 1. 执行归档操作(插入到历史表) + int insertCount = this.baseMapper.insertIntoHistory(ARCHIVE_DAYS); + log.info("步骤1:插入历史数据完成,插入数量: {}", insertCount); + + if (insertCount > 0) { + // 2. 删除已归档的数据 + int deleteCount = this.baseMapper.deleteArchivedTasks(ARCHIVE_DAYS); + log.info("步骤2:删除已归档数据完成,删除数量: {}", deleteCount); + + if (insertCount != deleteCount) { + log.warn("警告:插入数量({}) 与删除数量({}) 不一致", insertCount, deleteCount); + } + } + + return insertCount; + + } catch (Exception e) { + log.error("归档打印任务历史数据失败: {}", e.getMessage(), e); + throw new RuntimeException("归档失败: " + e.getMessage(), e); + } + } } diff --git a/src/main/java/com/gaotao/modules/base/service/PrintTaskService.java b/src/main/java/com/gaotao/modules/base/service/PrintTaskService.java index f7e3fdf..da045e0 100644 --- a/src/main/java/com/gaotao/modules/base/service/PrintTaskService.java +++ b/src/main/java/com/gaotao/modules/base/service/PrintTaskService.java @@ -59,5 +59,19 @@ public interface PrintTaskService extends IService { * @return 是否成功 */ boolean markAsFailed(Long taskId, String errorMessage); + + /** + * 归档打印任务历史数据 + * + *

功能说明:

+ *
    + *
  • 将已完成的打印任务(SUCCESS/FAILED状态)备份到 print_task_history 表
  • + *
  • 删除 print_task 表中已归档的数据
  • + *
  • 默认归档30天之前的历史数据
  • + *
+ * + * @return 归档的任务数量 + */ + int archivePrintTaskHistory(); } diff --git a/src/main/java/com/gaotao/modules/base/task/PrintTaskScheduler.java b/src/main/java/com/gaotao/modules/base/task/PrintTaskScheduler.java index fcf3511..cce9cc4 100644 --- a/src/main/java/com/gaotao/modules/base/task/PrintTaskScheduler.java +++ b/src/main/java/com/gaotao/modules/base/task/PrintTaskScheduler.java @@ -171,5 +171,38 @@ public class PrintTaskScheduler { } } } + + /** + * 归档打印任务历史数据 + * + *

功能说明:

+ *
    + *
  • 每天凌晨5点自动执行
  • + *
  • 将已完成的打印任务备份到 print_task_history 表
  • + *
  • 清理10天之前的历史数据
  • + *
+ * + *

执行时间:每天凌晨5点(固定)

+ *

归档规则:归档10天前的已完成任务(固定)

+ */ + @Scheduled(cron = "0 0 5 * * ?") + public void archivePrintTaskHistory() { + // 检查定时任务开关 + if (!dashboardPushEnabled) { + return; + } + + log.info("=== 开始归档打印任务历史数据 ==="); + + try { + // 调用Service层执行归档操作 + int archivedCount = printTaskService.archivePrintTaskHistory(); + + log.info("=== 打印任务历史数据归档完成:归档任务数量={} ===", archivedCount); + + } catch (Exception e) { + log.error("=== 打印任务历史数据归档失败 ===", e); + } + } } diff --git a/src/main/resources/mapper/base/PrintTaskDao.xml b/src/main/resources/mapper/base/PrintTaskDao.xml new file mode 100644 index 0000000..fee1efc --- /dev/null +++ b/src/main/resources/mapper/base/PrintTaskDao.xml @@ -0,0 +1,50 @@ + + + + + + + + INSERT INTO print_task_history ( + site, + printer_ip, + zpl_code, + rfid_flag, + copies, + label_data, + task_status, + retry_count, + error_message, + created_by, + created_date, + started_date, + completed_date + ) + SELECT + site, + printer_ip, + zpl_code, + rfid_flag, + copies, + label_data, + task_status, + retry_count, + error_message, + created_by, + created_date, + started_date, + completed_date + FROM print_task + WHERE task_status IN ('SUCCESS', 'FAILED') + AND created_date < DATEADD(DAY, -#{archiveDays}, GETDATE()) + + + + + DELETE FROM print_task + WHERE task_status IN ('SUCCESS', 'FAILED') + AND created_date < DATEADD(DAY, -#{archiveDays}, GETDATE()) + + + +