From 9b9e69cf524eac99d05c2a36cc8badfedba3dbd9 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sat, 15 Nov 2025 14:05:37 +0800 Subject: [PATCH] feat(printer): add print task review and reprint functionality - Add reprint endpoint with printer name update - Implement pending review task query and management - Add task URL update for pending review tasks - Support bulk approve/reject of pending tasks - Extend task status enum with review-related states - Create ReprintRequest DTO for printer information - Update mapper to handle status transitions and queries - Modify service layer to support review workflow - Adjust XML mapper for new database operations --- .../controller/pc/PrinterController.java | 52 ++++++++++++++- .../ycwl/basic/mapper/PrintTaskMapper.java | 32 ++++++++++ .../pc/printer/req/PrintTaskReqQuery.java | 2 +- .../model/pc/printer/req/ReprintRequest.java | 14 ++++ .../basic/service/printer/PrinterService.java | 38 +++++++++-- .../printer/impl/PrinterServiceImpl.java | 64 ++++++++++++++++++- src/main/resources/mapper/PrintTaskMapper.xml | 37 +++++++++++ 7 files changed, 230 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/model/pc/printer/req/ReprintRequest.java diff --git a/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java b/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java index 050bf69b..b17e4afd 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/PrinterController.java @@ -6,6 +6,7 @@ import com.ycwl.basic.mapper.PrintTaskMapper; import com.ycwl.basic.model.pc.printer.entity.PrintTaskEntity; import com.ycwl.basic.model.pc.printer.entity.PrinterEntity; import com.ycwl.basic.model.pc.printer.req.PrintTaskReqQuery; +import com.ycwl.basic.model.pc.printer.req.ReprintRequest; import com.ycwl.basic.service.printer.PrinterService; import com.ycwl.basic.utils.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; @@ -67,10 +68,55 @@ public class PrinterController { return ApiResponse.success(pageInfo); } - // 重新打印(将状态设置为0-未开始) + // 重新打印(将状态设置为0-未开始,并更新打印机名称) @PostMapping("/task/reprint/{id}") - public ApiResponse reprint(@PathVariable("id") Integer id) { - int result = printTaskMapper.updateStatus(id, 0); + public ApiResponse reprint(@PathVariable("id") Integer id, @RequestBody ReprintRequest request) { + int result = printTaskMapper.updateStatusAndPrinter(id, 0, request.getPrinterName()); return ApiResponse.success(result); } + + /** + * 查询待审核的打印任务 + * @param printerId 打印机ID(可选) + * @return 待审核任务列表 + */ + @GetMapping("/task/pending-review") + public ApiResponse> getPendingReviewTasks(Integer printerId) { + List tasks = printerService.getPendingReviewTasks(printerId); + return ApiResponse.success(tasks); + } + + /** + * 更新待审核任务的URL(重新处理水印等) + * @param taskId 任务ID + * @param url 新的打印URL + * @return 操作结果 + */ + @PostMapping("/task/{taskId}/url") + public ApiResponse updateTaskUrl(@PathVariable("taskId") Integer taskId, @RequestBody String url) { + boolean success = printerService.updatePendingReviewTaskUrl(taskId, url); + return ApiResponse.success(success); + } + + /** + * 批准待审核任务,下发到打印队列 + * @param taskIds 任务ID列表 + * @return 成功数量 + */ + @PostMapping("/task/approve") + public ApiResponse approveTasks(@RequestBody List taskIds) { + int count = printerService.approvePrintTasks(taskIds); + return ApiResponse.success(count); + } + + /** + * 拒绝待审核任务 + * @param taskIds 任务ID列表 + * @return 成功数量 + */ + @PostMapping("/task/reject") + public ApiResponse rejectTasks(@RequestBody List taskIds) { + int count = printerService.rejectPrintTasks(taskIds); + return ApiResponse.success(count); + } } \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/mapper/PrintTaskMapper.java b/src/main/java/com/ycwl/basic/mapper/PrintTaskMapper.java index 81585ff8..85506f8b 100644 --- a/src/main/java/com/ycwl/basic/mapper/PrintTaskMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/PrintTaskMapper.java @@ -14,4 +14,36 @@ public interface PrintTaskMapper extends BaseMapper { List queryByCondition(@Param("printerId") Integer printerId, @Param("status") Integer status); int updateStatus(@Param("id") Integer id, @Param("status") Integer status); + + /** + * 更新任务状态和打印机名称 + * @param id 任务ID + * @param status 新状态 + * @param printerName 打印机名称 + * @return 更新行数 + */ + int updateStatusAndPrinter(@Param("id") Integer id, @Param("status") Integer status, @Param("printerName") String printerName); + + /** + * 查询待审核的打印任务 + * @param printerId 打印机ID(可选) + * @return 待审核任务列表 + */ + List queryPendingReviewTasks(@Param("printerId") Integer printerId); + + /** + * 更新任务URL + * @param id 任务ID + * @param url 新的打印URL + * @return 更新行数 + */ + int updateTaskUrl(@Param("id") Integer id, @Param("url") String url); + + /** + * 批量更新任务状态 + * @param ids 任务ID列表 + * @param status 新状态 + * @return 更新行数 + */ + int batchUpdateStatus(@Param("ids") List ids, @Param("status") Integer status); } diff --git a/src/main/java/com/ycwl/basic/model/pc/printer/req/PrintTaskReqQuery.java b/src/main/java/com/ycwl/basic/model/pc/printer/req/PrintTaskReqQuery.java index 3d0479ea..ba4c90b2 100644 --- a/src/main/java/com/ycwl/basic/model/pc/printer/req/PrintTaskReqQuery.java +++ b/src/main/java/com/ycwl/basic/model/pc/printer/req/PrintTaskReqQuery.java @@ -13,7 +13,7 @@ public class PrintTaskReqQuery extends BaseQueryParameterReq { private Integer printerId; /** - * 状态:0未开始,1已完成,2正在处理,3已失败 + * 状态:0待处理,1已完成,2已失败,3处理中,4待审核,5已取消 */ private Integer status; } diff --git a/src/main/java/com/ycwl/basic/model/pc/printer/req/ReprintRequest.java b/src/main/java/com/ycwl/basic/model/pc/printer/req/ReprintRequest.java new file mode 100644 index 00000000..f072f390 --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/printer/req/ReprintRequest.java @@ -0,0 +1,14 @@ +package com.ycwl.basic.model.pc.printer.req; + +import lombok.Data; + +/** + * 重新打印请求 + */ +@Data +public class ReprintRequest { + /** + * 打印机名称 + */ + private String printerName; +} diff --git a/src/main/java/com/ycwl/basic/service/printer/PrinterService.java b/src/main/java/com/ycwl/basic/service/printer/PrinterService.java index 85b5c734..bdccbf50 100644 --- a/src/main/java/com/ycwl/basic/service/printer/PrinterService.java +++ b/src/main/java/com/ycwl/basic/service/printer/PrinterService.java @@ -2,6 +2,7 @@ package com.ycwl.basic.service.printer; import com.ycwl.basic.model.mobile.face.FaceRecognizeResp; import com.ycwl.basic.model.mobile.order.PriceObj; +import com.ycwl.basic.model.pc.printer.entity.PrintTaskEntity; import com.ycwl.basic.model.pc.printer.entity.PrinterEntity; import com.ycwl.basic.model.pc.printer.resp.MemberPrintResp; import com.ycwl.basic.model.pc.printer.resp.PrinterResp; @@ -18,13 +19,13 @@ public interface PrinterService { List listByScenicId(Long scenicId); ApiResponse> list(PrinterEntity condition); - + ApiResponse get(Integer id); - + ApiResponse add(PrinterEntity entity); - + ApiResponse update(PrinterEntity entity); - + ApiResponse delete(Integer id); List sync(PrinterSyncReq req); @@ -60,4 +61,33 @@ public interface PrinterService { FaceRecognizeResp useSample(Long userId, Long sampleId); void autoAddPhotosToPreferPrint(Long faceId); + + /** + * 查询待审核的打印任务 + * @param printerId 打印机ID(可选) + * @return 待审核任务列表 + */ + List getPendingReviewTasks(Integer printerId); + + /** + * 更新待审核任务的URL + * @param taskId 任务ID + * @param url 新的打印URL + * @return 是否成功 + */ + boolean updatePendingReviewTaskUrl(Integer taskId, String url); + + /** + * 批准待审核任务,下发到打印队列 + * @param taskIds 任务ID列表 + * @return 成功数量 + */ + int approvePrintTasks(List taskIds); + + /** + * 拒绝待审核任务 + * @param taskIds 任务ID列表 + * @return 成功数量 + */ + int rejectPrintTasks(List taskIds); } \ No newline at end of file diff --git a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java index e37ce810..1d028117 100644 --- a/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/printer/impl/PrinterServiceImpl.java @@ -598,6 +598,7 @@ public class PrinterServiceImpl implements PrinterService { private static final int PRINTER_INDEX_EXPIRE_MINUTES = 5; private static final int TASK_STATUS_PENDING = 0; private static final int TASK_STATUS_PROCESSING = 3; + private static final int TASK_STATUS_PENDING_REVIEW = 4; // 待审核 private final Lock syncTaskLock = new ReentrantLock(); @Override @@ -736,12 +737,20 @@ public class PrinterServiceImpl implements PrinterService { for (int i = 0; i < quantity; i++) { // 获取打印机名称(支持轮询) String selectedPrinter = getNextPrinter(printer); + + // 根据景区配置决定任务初始状态 + ScenicConfigManager scenicConfig = scenicRepository.getScenicConfigManager(order.getScenicId()); + Boolean purchaseNeedReview = scenicConfig.getBoolean("printer_manual_approve"); + int initialStatus = (purchaseNeedReview != null && purchaseNeedReview) + ? TASK_STATUS_PENDING_REVIEW + : TASK_STATUS_PENDING; + PrintTaskEntity task = new PrintTaskEntity(); task.setPrinterId(printer.getId()); task.setPrinterName(selectedPrinter); task.setMpId(item.getId()); task.setPaper(printer.getPreferPaper()); - task.setStatus(0); + task.setStatus(initialStatus); task.setUrl(printUrl); task.setHeight(printer.getPreferH()); task.setWidth(printer.getPreferW()); @@ -752,6 +761,59 @@ public class PrinterServiceImpl implements PrinterService { }); } + /** + * 查询待审核的打印任务 + * @param printerId 打印机ID(可选) + * @return 待审核任务列表 + */ + @Override + public List getPendingReviewTasks(Integer printerId) { + return printTaskMapper.queryPendingReviewTasks(printerId); + } + + /** + * 更新待审核任务的URL(可用于重新添加水印等操作) + * @param taskId 任务ID + * @param url 新的打印URL + * @return 是否成功 + */ + @Override + public boolean updatePendingReviewTaskUrl(Integer taskId, String url) { + if (taskId == null || url == null || url.trim().isEmpty()) { + return false; + } + int rows = printTaskMapper.updateTaskUrl(taskId, url); + return rows > 0; + } + + /** + * 批准待审核任务,下发到打印队列 + * @param taskIds 任务ID列表 + * @return 成功数量 + */ + @Override + public int approvePrintTasks(List taskIds) { + if (taskIds == null || taskIds.isEmpty()) { + return 0; + } + // 将状态从4(待审核)改为0(待处理) + return printTaskMapper.batchUpdateStatus(taskIds, TASK_STATUS_PENDING); + } + + /** + * 拒绝待审核任务(取消打印) + * @param taskIds 任务ID列表 + * @return 成功数量 + */ + @Override + public int rejectPrintTasks(List taskIds) { + if (taskIds == null || taskIds.isEmpty()) { + return 0; + } + // 将状态从4(待审核)改为5(已取消) + return printTaskMapper.batchUpdateStatus(taskIds, 5); + } + @Override public FaceRecognizeResp useSample(Long userId, Long sampleId) { // 1. 查询 faceSample 获取其 URL diff --git a/src/main/resources/mapper/PrintTaskMapper.xml b/src/main/resources/mapper/PrintTaskMapper.xml index 427a694a..b693a6aa 100644 --- a/src/main/resources/mapper/PrintTaskMapper.xml +++ b/src/main/resources/mapper/PrintTaskMapper.xml @@ -24,4 +24,41 @@ set status = #{status}, update_time = NOW() where id = #{id} + + + update print_task + + status = #{status}, + + printer_name = #{printerName}, + + update_time = NOW() + + where id = #{id} + + + + + + update print_task + set url = #{url}, update_time = NOW() + where id = #{id} and status = 4 + + + + update print_task + set status = #{status}, update_time = NOW() + where id in + + #{id} + + \ No newline at end of file