Browse Source

失败打印任务重试

master
han\hanst 1 month ago
parent
commit
f77cf29f3b
  1. 7
      src/main/java/com/gaotao/modules/base/entity/PrintTask.java
  2. 76
      src/main/java/com/gaotao/modules/base/service/Impl/PrintTaskServiceImpl.java
  3. 24
      src/main/java/com/gaotao/modules/base/service/PrintTaskService.java
  4. 46
      src/main/java/com/gaotao/modules/warehouse/controller/LabelQueryController.java

7
src/main/java/com/gaotao/modules/base/entity/PrintTask.java

@ -11,14 +11,14 @@ import java.util.Date;
/** /**
* 打印任务队列实体类 * 打印任务队列实体类
*
*
* <p><b>核心字段说明</b></p> * <p><b>核心字段说明</b></p>
* <ul> * <ul>
* <li><b>printer_ip</b>打印机IP地址</li> * <li><b>printer_ip</b>打印机IP地址</li>
* <li><b>zpl_code</b>ZPL打印代码</li> * <li><b>zpl_code</b>ZPL打印代码</li>
* <li><b>task_status</b>任务状态PENDING=待执行, PROCESSING=执行中, SUCCESS=成功, FAILED=失败</li> * <li><b>task_status</b>任务状态PENDING=待执行, PROCESSING=执行中, SUCCESS=成功, FAILED=失败</li>
* </ul> * </ul>
*
*
* <p><b>使用说明</b></p> * <p><b>使用说明</b></p>
* <ul> * <ul>
* <li>所有打印任务先插入此表不直接打印</li> * <li>所有打印任务先插入此表不直接打印</li>
@ -115,5 +115,8 @@ public class PrintTask implements Serializable {
*/ */
@TableField("completed_date") @TableField("completed_date")
private Date completedDate; private Date completedDate;
@TableField("unit_id")
private String unitId;
} }

76
src/main/java/com/gaotao/modules/base/service/Impl/PrintTaskServiceImpl.java

@ -43,6 +43,8 @@ public class PrintTaskServiceImpl extends ServiceImpl<PrintTaskDao, PrintTask> i
task.setRetryCount(0); task.setRetryCount(0);
task.setCreatedBy(createdBy); task.setCreatedBy(createdBy);
task.setCreatedDate(new Date()); task.setCreatedDate(new Date());
task.setUnitId(labelData != null && labelData.get("unit_id") != null
? labelData.get("unit_id").toString() : null);
boolean saved = this.save(task); boolean saved = this.save(task);
if (!saved) { if (!saved) {
@ -135,5 +137,79 @@ public class PrintTaskServiceImpl extends ServiceImpl<PrintTaskDao, PrintTask> i
throw new RuntimeException("归档失败: " + e.getMessage(), e); throw new RuntimeException("归档失败: " + e.getMessage(), e);
} }
} }
/**
* 获取失败的打印任务列表
*
* @param site 站点编码
* @return 失败的任务列表
*/
@Override
public List<PrintTask> getFailedTasks(String site) {
log.info("查询失败的打印任务,站点: {}", site);
return this.lambdaQuery()
.eq(PrintTask::getSite, site)
.eq(PrintTask::getTaskStatus, "FAILED")
.orderByDesc(PrintTask::getCreatedDate)
.list();
}
/**
* 重试失败的打印任务
*
* <p><b>功能说明</b></p>
* <ul>
* <li>查询所有状态为FAILED的打印任务</li>
* <li>将这些任务的状态重置为PENDING</li>
* <li>清空错误信息</li>
* <li>重新加入打印队列</li>
* </ul>
*
* @param site 站点编码
* @return 重试的任务数量
*/
@Override
@Transactional
public int retryFailedTasks(String site) {
log.info("=== 开始重试失败的打印任务 === 站点: {}", site);
try {
// 1. 查询所有失败的任务
List<PrintTask> 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);
}
}
} }

24
src/main/java/com/gaotao/modules/base/service/PrintTaskService.java

@ -73,5 +73,29 @@ public interface PrintTaskService extends IService<PrintTask> {
* @return 归档的任务数量 * @return 归档的任务数量
*/ */
int archivePrintTaskHistory(); int archivePrintTaskHistory();
/**
* 获取失败的打印任务列表
*
* @param site 站点编码
* @return 失败的任务列表
*/
List<PrintTask> getFailedTasks(String site);
/**
* 重试失败的打印任务
*
* <p><b>功能说明</b></p>
* <ul>
* <li>查询所有状态为FAILED的打印任务</li>
* <li>将这些任务的状态重置为PENDING</li>
* <li>清空错误信息</li>
* <li>重新加入打印队列</li>
* </ul>
*
* @param site 站点编码
* @return 重试的任务数量
*/
int retryFailedTasks(String site);
} }

46
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.PageUtils;
import com.gaotao.common.utils.R; import com.gaotao.common.utils.R;
import com.gaotao.modules.base.entity.PrintLabelRequest; 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.base.service.ReportLabelListService;
import com.gaotao.modules.handlingunit.dao.HandlingUnitMapper; import com.gaotao.modules.handlingunit.dao.HandlingUnitMapper;
import com.gaotao.modules.handlingunit.entity.dto.HandlingUnitDto; 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.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/** /**
* 标签查询控制器 * 标签查询控制器
*/ */
@ -27,6 +32,9 @@ public class LabelQueryController extends AbstractController {
@Autowired @Autowired
private HandlingUnitMapper handlingUnitMapper; private HandlingUnitMapper handlingUnitMapper;
@Autowired
private PrintTaskService printTaskService;
/** /**
* 分页查询HandlingUnit标签信息 * 分页查询HandlingUnit标签信息
*/ */
@ -103,4 +111,42 @@ public class LabelQueryController extends AbstractController {
labelQueryService.updateLabelLocation(data); labelQueryService.updateLabelLocation(data);
return R.ok(); return R.ok();
} }
/**
* @Description 获取失败的打印任务列表
* @Title getFailedPrintTasks
* @param params 查询参数
* @return R
* @author System
* @date 2025/12/12
*/
@PostMapping("getFailedPrintTasks")
public R getFailedPrintTasks(@RequestBody Map<String, Object> params) {
try {
String site = (String) params.get("site");
List<PrintTask> 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<String, Object> 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());
}
}
} }
Loading…
Cancel
Save