diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopPayTypeController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopPayTypeController.java index 7ac7190c8..5dd34f52e 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopPayTypeController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopPayTypeController.java @@ -2,6 +2,7 @@ package com.czg.controller.admin; import cn.hutool.core.bean.BeanUtil; import com.czg.account.dto.ShopPayTypeDTO; +import com.czg.account.dto.paytype.ShopPayTypeAddDTO; import com.czg.account.entity.ShopPayType; import com.czg.account.service.ShopPayTypeService; import com.czg.annotation.SaAdminCheckPermission; @@ -56,8 +57,8 @@ public class ShopPayTypeController { */ @SaAdminCheckPermission(value = "shopPayType:save", name = "支付方式添加") @PostMapping - public CzgResult add(@RequestBody ShopPayTypeDTO shopPayTypeDTO) { - ShopPayType shopPayType = BeanUtil.copyProperties(shopPayTypeDTO, ShopPayType.class); + public CzgResult add(@RequestBody ShopPayTypeAddDTO shopPayTypeAddDTO) { + ShopPayType shopPayType = BeanUtil.copyProperties(shopPayTypeAddDTO, ShopPayType.class); return CzgResult.success(shopPayTypeService.add(StpKit.USER.getShopId(),shopPayType)); } diff --git a/cash-api/account-server/src/main/java/com/czg/mq/PrintMqListener.java b/cash-api/account-server/src/main/java/com/czg/mq/PrintMqListener.java index b9474a328..c384d0ca7 100644 --- a/cash-api/account-server/src/main/java/com/czg/mq/PrintMqListener.java +++ b/cash-api/account-server/src/main/java/com/czg/mq/PrintMqListener.java @@ -52,7 +52,7 @@ public class PrintMqListener { throw new RuntimeException("订单信息不存在"); } - getPrintMachine(1L, "cash", "one", "one").forEach(machine -> { + getPrintMachine(1L, "cash", "one", "order").forEach(machine -> { printerHandler.handleRequest(machine, orderInfo, null); // printPlaceTicket(isReturn, machine, orderInfo, shopInfo); }); diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/paytype/ShopPayTypeAddDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/paytype/ShopPayTypeAddDTO.java index ec0d86ffc..ab6baaeac 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/dto/paytype/ShopPayTypeAddDTO.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/dto/paytype/ShopPayTypeAddDTO.java @@ -21,6 +21,15 @@ import java.io.Serializable; @AllArgsConstructor public class ShopPayTypeAddDTO { + /** + * 支付类型 cash,alipay,weixin,deposit,arrears,virtual,member-account + */ + private String payType; + /** + * 支付名称 + */ + private String payName; + /** * 是否快捷展示1是0否 */ diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderDetail.java b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderDetail.java index 9995e11c3..291e5eeaa 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderDetail.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/entity/OrderDetail.java @@ -84,6 +84,7 @@ public class OrderDetail implements Serializable { * 数量 */ private BigDecimal num; + /** * 打包数量 */ diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/enums/OrderStatusEnums.java b/cash-service/account-service/src/main/java/com/czg/service/account/enums/OrderStatusEnums.java new file mode 100644 index 000000000..737328d55 --- /dev/null +++ b/cash-service/account-service/src/main/java/com/czg/service/account/enums/OrderStatusEnums.java @@ -0,0 +1,30 @@ +package com.czg.service.account.enums; + + +import lombok.Getter; + +/** + * 订单状态枚举类 + */ +@Getter +public enum OrderStatusEnums { + + + UNPAID("unpaid", "待支付"), + IN_PRODUCTION("in_production", "制作中"), + WAIT_OUT("wait_out", "待取餐"), + DONE("done", "订单完成"), + REFUNDING("refunding", "申请退单"), + REFUND("refund", "退单"), + PART_REFUND("part_refund", "部分退单"), + CANCELLED("cancelled", "取消订单"); + + + private final String code; + private final String msg; + + OrderStatusEnums(String code, String msg) { + this.code = code; + this.msg = msg; + } +} diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/print/FeiPrinter.java b/cash-service/account-service/src/main/java/com/czg/service/account/print/FeiPrinter.java index 981e1245d..03d8af83c 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/print/FeiPrinter.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/print/FeiPrinter.java @@ -97,7 +97,7 @@ public class FeiPrinter extends PrinterHandler implements PrinterImpl{ protected void returnDishesPrint(OrderInfo orderInfo, OrderDetail orderDetail, PrintMachine machine) { String remark = orderDetail.getRemark(); String content = buildDishPrintData(true, getPickupNum(orderInfo), orderInfo.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), - orderDetail.getProductName(), orderDetail.getSkuName(), orderDetail.getNum(), remark, orderDetail.getProGroupInfo()); + orderDetail.getProductName(), orderDetail.getSkuName(), orderDetail.getReturnNum(), remark, orderDetail.getProGroupInfo()); sendPrintRequest(machine.getAddress(), content, null,"1"); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/print/PrinterHandler.java b/cash-service/account-service/src/main/java/com/czg/service/account/print/PrinterHandler.java index a07c3e987..4a7a9a551 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/print/PrinterHandler.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/print/PrinterHandler.java @@ -25,6 +25,7 @@ import com.czg.product.service.ProdSkuService; import com.czg.product.service.ProductService; import com.czg.resp.CzgResult; import com.czg.service.RedisService; +import com.czg.service.account.enums.OrderStatusEnums; import com.czg.system.dto.SysParamsDTO; import com.czg.system.service.SysParamsService; import com.mybatisflex.core.query.QueryWrapper; @@ -74,12 +75,14 @@ public abstract class PrinterHandler { protected ProdSkuService prodSkuService; @Data + @Accessors(chain = true) public static class PrintDetailInfo { private boolean isPrint; - private boolean isReturn; +// private boolean isReturn; private long orderId; private long detailId; private BigDecimal printNum; + private BigDecimal printReturnNum; } @Data @@ -143,9 +146,9 @@ public abstract class PrinterHandler { protected List getCanPrintOrderDetails(boolean partPrint, Long orderId, List tbOrderDetailList, List categoryIds) { List detailList = redisService.lGet(RedisCst.getPrintOrderDetailKey(orderId), 0, -1); - Map detailMap = detailList.stream().collect(Collectors.toMap(i -> { + Map detailMap = detailList.stream().collect(Collectors.toMap(i -> { if (i instanceof PrintDetailInfo i2) { - return i2.getDetailId() + "_" + i2.isReturn; + return i2.getDetailId(); } throw new RuntimeException("转换orderDetail失败"); }, i -> (PrintDetailInfo) i)); @@ -157,14 +160,14 @@ public abstract class PrinterHandler { .stream().collect(Collectors.toMap(com.czg.product.entity.Product::getId, i -> true)); ArrayList orderDetails = new ArrayList<>(); - ArrayList status = CollectionUtil.newArrayList("refunding", "part-refund", "refund"); tbOrderDetailList.forEach(item -> { - boolean isReturn = status.contains(item.getStatus()); - PrintDetailInfo printDetailInfo = detailMap.get(item.getId() + "_" + isReturn); + PrintDetailInfo printDetailInfo = detailMap.get(item.getId()); if (item.getIsPrint() != null && item.getIsPrint() == 1 && (canPrintProMap.get(item.getProductId()) != null || !partPrint) && (printDetailInfo == null || item.getNum().subtract(printDetailInfo.getPrintNum()).compareTo(BigDecimal.ZERO) > 0)) { + item.setReturnNum(item.getReturnNum() == null ? BigDecimal.ZERO : item.getReturnNum()); if (printDetailInfo != null) { item.setNum(item.getNum().subtract(printDetailInfo.getPrintNum())); + item.setReturnNum(item.getReturnNum().subtract(printDetailInfo.getPrintNum())); } orderDetails.add(item); } @@ -225,13 +228,23 @@ public abstract class PrinterHandler { * 仅打印制作单「厨房」 */ private void onlyKitchen(PrintMachine machine, OrderInfo orderInfo, List tbOrderDetailList) { + // 判断订单是否是先付费或者已结算 + if (!"after-pay".equals(orderInfo.getPayMode()) && (OrderStatusEnums.UNPAID.getCode().equals(orderInfo.getStatus()) || OrderStatusEnums.CANCELLED.getCode().equals(orderInfo.getStatus()))) { + log.warn("此订单未支付, 订单信息: {}", orderInfo); + return; + } + List categoryIds = JSONObject.parseObject(StrUtil.emptyToDefault(machine.getCategoryIds(), "[]"), List.class); if (StrUtil.isEmpty(machine.getClassifyPrint())) { log.error("分类打印是空, classifyPrint: {}", machine.getClassifyPrint()); return; } + // 已打印详情信息 + ArrayList printDetailInfos = new ArrayList<>(); + Map detailMap = tbOrderDetailList.stream().collect(Collectors.toMap(OrderDetail::getId, i -> i)); tbOrderDetailList = getCanPrintOrderDetails("1".equals(machine.getClassifyPrint()), orderInfo.getId(), tbOrderDetailList, categoryIds); + String printKey = RedisCst.getPrintOrderDetailKey(orderInfo.getId()); tbOrderDetailList.parallelStream().filter(o -> ObjectUtil.defaultIfNull(o.getIsPrint(), 0) == 1).forEach(item -> { log.info("开始打印菜品,商品名:{}", item.getProductName()); Integer isWaitCall = ObjectUtil.defaultIfNull(item.getIsWaitCall(), 0); @@ -268,18 +281,33 @@ public abstract class PrinterHandler { // String remark = StrUtil.isNotBlank(sku.getSpecInfo()) ? sku.getSpecInfo() : ""; // item.setRemark(remark); - if (ArrayUtil.contains(new String[]{"refunding", "part-refund", "refund"}, item.getStatus())) { + if (item.getReturnNum().compareTo(BigDecimal.ZERO) > 0) { returnDishesPrint(orderInfo, item, machine); - } else { + } + + if (item.getNum().compareTo(BigDecimal.ZERO) > 0) { normalDishesPrint(orderInfo, item, machine); } + + // 保存已打印信息 + OrderDetail orderDetail = detailMap.get(item.getId()); + redisService.leftPush(printKey, new PrintDetailInfo().setPrint(item.getIsPrint() == 1).setDetailId(item.getId()) + .setPrintNum(orderDetail.getNum()).setPrintReturnNum(orderDetail.getReturnNum())); + }); + } /** * 仅打印结算单「前台」 */ private void onlyFrontDesk(PrintMachine machine, OrderInfo orderInfo, List tbOrderDetailList) { + // 判断订单是否是先付费或者已结算 + if (OrderStatusEnums.UNPAID.getCode().equals(orderInfo.getStatus()) || OrderStatusEnums.CANCELLED.getCode().equals(orderInfo.getStatus())) { + log.warn("此订单未支付或已取消, 订单信息: {}", orderInfo); + return; + } + if (tbOrderDetailList.isEmpty()) { log.info("待打印列表为空"); return; diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/print/YxyPrinter.java b/cash-service/account-service/src/main/java/com/czg/service/account/print/YxyPrinter.java index 3f41f4c15..54c283c59 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/print/YxyPrinter.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/print/YxyPrinter.java @@ -122,7 +122,7 @@ public class YxyPrinter extends PrinterHandler implements PrinterImpl { @Override protected void returnDishesPrint(OrderInfo orderInfo, OrderDetail orderDetail, PrintMachine machine) { String buildDishPrintData = buildDishPrintData(true, getPickupNum(orderInfo), DateUtil.format(orderDetail.getCreateTime(), "yyyy-MM-dd HH:mm:ss"), orderDetail.getProductName(), orderDetail.getSkuName(), - orderDetail.getNum(), orderDetail.getRemark(), orderDetail.getProGroupInfo()); + orderDetail.getReturnNum(), orderDetail.getRemark(), orderDetail.getProGroupInfo()); // String voiceJson = "{\"bizType\":\"2\",\"content\":\"您有一笔新的订单,请及时处理\"}"; String voiceJson = "{\"bizType\":\"2\",\"content\":\"\"}"; sendPrintRequest(machine.getAddress(), buildDishPrintData, voiceJson, "1");