From e44e80acd50b613e7c8cf98a7bfa2d5f303c5e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE?= <8605635+zhang3064194730@user.noreply.gitee.com> Date: Wed, 12 Mar 2025 18:57:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A5=A8=E6=89=93=E5=8D=B0=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/czg/mq/PrintMqListener.java | 79 +++---------------- .../service/order/print/PrinterHandler.java | 48 ++++++++++- 2 files changed, 56 insertions(+), 71 deletions(-) diff --git a/cash-api/order-server/src/main/java/com/czg/mq/PrintMqListener.java b/cash-api/order-server/src/main/java/com/czg/mq/PrintMqListener.java index f57e52644..0d60abb4c 100644 --- a/cash-api/order-server/src/main/java/com/czg/mq/PrintMqListener.java +++ b/cash-api/order-server/src/main/java/com/czg/mq/PrintMqListener.java @@ -21,6 +21,7 @@ import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.List; +import java.util.function.Consumer; /** * 打印mq消息处理器 @@ -30,30 +31,19 @@ import java.util.List; @Component @Slf4j public class PrintMqListener { - @DubboReference - private PrintMachineService printMachineService; - - @Resource - private OrderInfoService orderInfoService; @Resource private MqLogService mqLogService; @Lazy @Resource private PrinterHandler printerHandler; - @RabbitListener(queues = {"${spring.profiles.active}-" + RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE}) - public void orderPrint(String orderId) { + private void invokeFun(String type, String plat, T data, Consumer consumer) { long startTime = DateUtil.date().getTime(); - log.info("接收到订单打印消息:{}", orderId); - MqLog mqLog = new MqLog().setQueue(RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE).setMsg(orderId).setType("orderPrint").setPlat("java.order").setCreateTime(DateUtil.date().toLocalDateTime()); + log.info("接收到{}打印消息:{}", type, data); + MqLog mqLog = new MqLog().setQueue(RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE).setMsg(data.toString()) + .setType(type).setPlat(plat).setCreateTime(DateUtil.date().toLocalDateTime()); try { - OrderInfo orderInfo = orderInfoService.getById(orderId); - if (orderInfo == null) { - log.error("订单信息不存在, {}", orderId); - throw new RuntimeException("订单信息不存在"); - } - printerHandler.handler(orderId, PrinterHandler.PrintTypeEnum.ORDER); - + consumer.accept(data); } catch (Exception e) { log.error("订单打印失败", e); mqLog.setErrInfo(JSONObject.toJSONString(e)); @@ -63,61 +53,16 @@ public class PrintMqListener { } } + @RabbitListener(queues = {"${spring.profiles.active}-" + RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE}) + public void orderPrint(String orderId) { + invokeFun("orderPrint", "java.order", orderId, (data) -> printerHandler.handler(data, PrinterHandler.PrintTypeEnum.ONE_AND_ORDER)); + } + /** * 交班打印 */ @RabbitListener(queues = {"${spring.profiles.active}-" + RabbitConstants.Queue.ORDER_HANDOVER_PRINT_QUEUE}) public void handoverPrint(String id) { - long startTime = DateUtil.date().getTime(); - log.info("接收到交班打印消息:{}", id); - MqLog mqLog = new MqLog().setQueue(RabbitConstants.Queue.ORDER_MACHINE_PRINT_QUEUE).setMsg(id).setType("handoverPrint").setPlat("java.order").setCreateTime(DateUtil.date().toLocalDateTime()); - try { - printerHandler.handler(id, PrinterHandler.PrintTypeEnum.HANDOVER); - - } catch (Exception e) { - log.error("交班打印失败", e); - mqLog.setErrInfo(JSONObject.toJSONString(e)); - mqLog.setDuration(DateUtil.date().getTime() - startTime); - mqLog.setFailTime(DateUtil.date().toLocalDateTime()); - mqLogService.save(mqLog); - } - } - - /** - * 获取可用打印机 - * - * @param shopId 店铺id - * @param subType 打印类型(分类)label标签 cash小票 kitchen出品 - * @param printMethod 打印方式 all-全部打印 normal-仅打印结账单「前台」one-仅打印制作单「厨房」 - * @param printType 打印类型,JSON数组 refund-确认退款单 handover-交班单 queue-排队取号 - * @return 打印机列表 - */ - private List getPrintMachine(Long shopId, String subType, String printMethod, String printType) { - QueryWrapper wrapper = new QueryWrapper() - .eq(PrintMachine::getStatus, 1) - .eq(PrintMachine::getShopId, shopId) - .eq(PrintMachine::getSubType, subType) - .eq(PrintMachine::getConnectionType, "网络"); - if (StrUtil.isNotEmpty(printMethod)) { - wrapper.in(PrintMachine::getPrintMethod, Arrays.asList(printMethod, "all")); - } - if ("callTicket".equals(printType)) { - printType = "queue"; - } - if (StrUtil.isNotEmpty(printType)) { - wrapper.like(PrintMachine::getPrintType, printType); - } - List list = printMachineService.list(wrapper); - for (PrintMachine item : list) { - //实际打印以传递的参数为准 - item.setPrintMethod(printMethod); - } - if (list.isEmpty()) { - log.error("店铺未配置打印机,店铺id: {}", shopId); - return list; - } - - log.info("打印机列表: {}", list); - return list; + invokeFun("handoverPrint", "java.order", id, (data) -> printerHandler.handler(data, PrinterHandler.PrintTypeEnum.ONE_AND_ORDER)); } } diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterHandler.java b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterHandler.java index 8c60b4a1d..e155e05f8 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterHandler.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/print/PrinterHandler.java @@ -81,7 +81,7 @@ public abstract class PrinterHandler { @Getter public enum PrintTypeEnum { HANDOVER("交班", "handover"), - ORDER("订单", "order"), ONE("菜品", "one"), CALL("叫号", "call"); + ORDER("订单", "order"), ONE("菜品", "one"), CALL("叫号", "call"), ONE_AND_ORDER("菜品和结算单同时打印", "oneAndOrder"); private final String name; private final String code; @@ -178,7 +178,8 @@ public abstract class PrinterHandler { Long shopId = null; String printMethod = ""; String printType = ""; - Object obj = null; + Object obj; + OrderInfo orderInfo; switch (printTypeEnum) { case PrintTypeEnum.HANDOVER: HandoverRecordDTO record = handoverRecordService.getHandoverRecordById(Long.parseLong(data)); @@ -190,7 +191,7 @@ public abstract class PrinterHandler { printType = "handover"; break; case PrintTypeEnum.ORDER: - OrderInfo orderInfo = orderInfoService.getById(data); + orderInfo = orderInfoService.getById(data); if (orderInfo == null) { throw new RuntimeException("订单打印失败,订单不存在"); } @@ -199,6 +200,25 @@ public abstract class PrinterHandler { printMethod = "order"; printType = "order"; break; + case PrintTypeEnum.ONE: + orderInfo = orderInfoService.getById(data); + if (orderInfo == null) { + throw new RuntimeException("订单打印失败,订单不存在"); + } + obj = orderInfo; + printMethod = "one"; + break; + case PrintTypeEnum.ONE_AND_ORDER: + orderInfo = orderInfoService.getById(data); + if (orderInfo == null) { + throw new RuntimeException("订单打印失败,订单不存在"); + } + obj = orderInfo; + printMethod = "all"; + break; + + default: + throw new RuntimeException("未知打印类型"); } if (shopId == null) { @@ -278,6 +298,8 @@ public abstract class PrinterHandler { log.info("准备开始打印交班"); if (data instanceof HandoverRecordDTO record) { handoverPrint(machine, record); + }else { + throw new RuntimeException("传递数据类型有误"); } break; case PrintTypeEnum.ORDER: @@ -285,6 +307,8 @@ public abstract class PrinterHandler { if (data instanceof OrderInfo orderInfo) { List orderDetailList = orderDetailService.list(new QueryWrapper().eq(OrderDetail::getOrderId, orderInfo.getId())); onlyFrontDesk(machine, orderInfo, orderDetailList); + }else { + throw new RuntimeException("传递数据类型有误"); } break; case PrintTypeEnum.ONE: @@ -292,11 +316,27 @@ public abstract class PrinterHandler { if (data instanceof OrderInfo orderInfo) { List orderDetailList = orderDetailService.list(new QueryWrapper().eq(OrderDetail::getOrderId, orderInfo.getId())); onlyKitchen(machine, orderInfo, orderDetailList); + }else { + throw new RuntimeException("传递数据类型有误"); } break; case PrintTypeEnum.CALL: log.info("准备开始打印叫号单"); - onlyCallNumPrint(machine, null); + if (data instanceof Long id) { + onlyCallNumPrint(machine, id); + }else { + throw new RuntimeException("传递数据类型有误"); + } + break; + case PrintTypeEnum.ONE_AND_ORDER: + log.info("准备开始打印菜品以及结算单"); + if (data instanceof OrderInfo orderInfo) { + List orderDetailList = orderDetailService.list(new QueryWrapper().eq(OrderDetail::getOrderId, orderInfo.getId())); + onlyFrontDesk(machine, orderInfo, orderDetailList); + onlyKitchen(machine, orderInfo, orderDetailList); + }else { + throw new RuntimeException("传递数据类型有误"); + } }