diff --git a/src/main/java/com/gaotao/modules/base/entity/PrintTask.java b/src/main/java/com/gaotao/modules/base/entity/PrintTask.java
index 5c8bc76..0f891c3 100644
--- a/src/main/java/com/gaotao/modules/base/entity/PrintTask.java
+++ b/src/main/java/com/gaotao/modules/base/entity/PrintTask.java
@@ -11,14 +11,14 @@ import java.util.Date;
/**
* 打印任务队列实体类
- *
+ *
*
核心字段说明:
*
* - printer_ip:打印机IP地址
* - zpl_code:ZPL打印代码
* - task_status:任务状态(PENDING=待执行, PROCESSING=执行中, SUCCESS=成功, FAILED=失败)
*
- *
+ *
* 使用说明:
*
* - 所有打印任务先插入此表,不直接打印
@@ -115,5 +115,8 @@ public class PrintTask implements Serializable {
*/
@TableField("completed_date")
private Date completedDate;
+
+ @TableField("unit_id")
+ private String unitId;
}
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 fe04283..abd98ba 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
@@ -43,6 +43,8 @@ public class PrintTaskServiceImpl extends ServiceImpl i
task.setRetryCount(0);
task.setCreatedBy(createdBy);
task.setCreatedDate(new Date());
+ task.setUnitId(labelData != null && labelData.get("unit_id") != null
+ ? labelData.get("unit_id").toString() : null);
boolean saved = this.save(task);
if (!saved) {
@@ -135,5 +137,79 @@ public class PrintTaskServiceImpl extends ServiceImpl i
throw new RuntimeException("归档失败: " + e.getMessage(), e);
}
}
+
+ /**
+ * 获取失败的打印任务列表
+ *
+ * @param site 站点编码
+ * @return 失败的任务列表
+ */
+ @Override
+ public List getFailedTasks(String site) {
+ log.info("查询失败的打印任务,站点: {}", site);
+
+ return this.lambdaQuery()
+ .eq(PrintTask::getSite, site)
+ .eq(PrintTask::getTaskStatus, "FAILED")
+ .orderByDesc(PrintTask::getCreatedDate)
+ .list();
+ }
+
+ /**
+ * 重试失败的打印任务
+ *
+ * 功能说明:
+ *
+ * - 查询所有状态为FAILED的打印任务
+ * - 将这些任务的状态重置为PENDING
+ * - 清空错误信息
+ * - 重新加入打印队列
+ *
+ *
+ * @param site 站点编码
+ * @return 重试的任务数量
+ */
+ @Override
+ @Transactional
+ public int retryFailedTasks(String site) {
+ log.info("=== 开始重试失败的打印任务 === 站点: {}", site);
+
+ try {
+ // 1. 查询所有失败的任务
+ List failedTasks = this.lambdaQuery()
+ .eq(PrintTask::getSite, site)
+ .eq(PrintTask::getTaskStatus, "FAILED")
+ .list();
+
+ if (failedTasks.isEmpty()) {
+ log.info("没有需要重试的失败任务");
+ return 0;
+ }
+
+ log.info("找到 {} 个失败的打印任务", failedTasks.size());
+
+ // 2. 将失败任务状态重置为PENDING
+ boolean updated = this.lambdaUpdate()
+ .set(PrintTask::getTaskStatus, "PENDING")
+ .set(PrintTask::getErrorMessage, null)
+ .set(PrintTask::getStartedDate, null)
+ .set(PrintTask::getCompletedDate, null)
+ .eq(PrintTask::getSite, site)
+ .eq(PrintTask::getTaskStatus, "FAILED")
+ .update();
+
+ if (updated) {
+ log.info("=== 重试失败任务完成 === 成功将 {} 个任务重新加入打印队列", failedTasks.size());
+ return failedTasks.size();
+ } else {
+ log.warn("重试失败任务时更新状态失败");
+ return 0;
+ }
+
+ } 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 da045e0..62ce694 100644
--- a/src/main/java/com/gaotao/modules/base/service/PrintTaskService.java
+++ b/src/main/java/com/gaotao/modules/base/service/PrintTaskService.java
@@ -73,5 +73,29 @@ public interface PrintTaskService extends IService {
* @return 归档的任务数量
*/
int archivePrintTaskHistory();
+
+ /**
+ * 获取失败的打印任务列表
+ *
+ * @param site 站点编码
+ * @return 失败的任务列表
+ */
+ List getFailedTasks(String site);
+
+ /**
+ * 重试失败的打印任务
+ *
+ * 功能说明:
+ *
+ * - 查询所有状态为FAILED的打印任务
+ * - 将这些任务的状态重置为PENDING
+ * - 清空错误信息
+ * - 重新加入打印队列
+ *
+ *
+ * @param site 站点编码
+ * @return 重试的任务数量
+ */
+ int retryFailedTasks(String site);
}
diff --git a/src/main/java/com/gaotao/modules/warehouse/controller/LabelQueryController.java b/src/main/java/com/gaotao/modules/warehouse/controller/LabelQueryController.java
index 4419b39..aa59a8d 100644
--- a/src/main/java/com/gaotao/modules/warehouse/controller/LabelQueryController.java
+++ b/src/main/java/com/gaotao/modules/warehouse/controller/LabelQueryController.java
@@ -3,6 +3,8 @@ package com.gaotao.modules.warehouse.controller;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.common.utils.R;
import com.gaotao.modules.base.entity.PrintLabelRequest;
+import com.gaotao.modules.base.entity.PrintTask;
+import com.gaotao.modules.base.service.PrintTaskService;
import com.gaotao.modules.base.service.ReportLabelListService;
import com.gaotao.modules.handlingunit.dao.HandlingUnitMapper;
import com.gaotao.modules.handlingunit.entity.dto.HandlingUnitDto;
@@ -11,6 +13,9 @@ import com.gaotao.modules.sys.controller.AbstractController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import java.util.List;
+import java.util.Map;
+
/**
* 标签查询控制器
*/
@@ -27,6 +32,9 @@ public class LabelQueryController extends AbstractController {
@Autowired
private HandlingUnitMapper handlingUnitMapper;
+ @Autowired
+ private PrintTaskService printTaskService;
+
/**
* 分页查询HandlingUnit标签信息
*/
@@ -103,4 +111,42 @@ public class LabelQueryController extends AbstractController {
labelQueryService.updateLabelLocation(data);
return R.ok();
}
+
+ /**
+ * @Description 获取失败的打印任务列表
+ * @Title getFailedPrintTasks
+ * @param params 查询参数
+ * @return R
+ * @author System
+ * @date 2025/12/12
+ */
+ @PostMapping("getFailedPrintTasks")
+ public R getFailedPrintTasks(@RequestBody Map params) {
+ try {
+ String site = (String) params.get("site");
+ List failedTasks = printTaskService.getFailedTasks(site);
+ return R.ok().put("rows", failedTasks);
+ } catch (Exception e) {
+ return R.error("查询失败: " + e.getMessage());
+ }
+ }
+
+ /**
+ * @Description 重试失败的打印任务
+ * @Title retryFailedPrintTasks
+ * @param params 重试参数
+ * @return R
+ * @author System
+ * @date 2025/12/12
+ */
+ @PostMapping("retryFailedPrintTasks")
+ public R retryFailedPrintTasks(@RequestBody Map params) {
+ try {
+ String site = (String) params.get("site");
+ int count = printTaskService.retryFailedTasks(site);
+ return R.ok().put("count", count).put("msg", "成功将 " + count + " 个任务重新加入打印队列");
+ } catch (Exception e) {
+ return R.error("重试失败: " + e.getMessage());
+ }
+ }
}