Browse Source

失败打印任务重试

master
han\hanst 1 month ago
parent
commit
f77cf29f3b
  1. 3
      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

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

@ -115,5 +115,8 @@ public class PrintTask implements Serializable {
*/
@TableField("completed_date")
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.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<PrintTaskDao, PrintTask> i
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 归档的任务数量
*/
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.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<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