From 0e6519b1765b7aa22dc9f4535b8d034dd48c4adf Mon Sep 17 00:00:00 2001 From: AriadenCaseblg Date: Fri, 10 Apr 2026 12:03:38 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=B9=B3=E5=8F=B0?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98(mer=5Fid=3D0)=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B=E5=95=86=E6=88=B7=E8=AE=A2=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:商户订单相关Service方法中使用systemAdmin.getMerId()做数据过滤, 平台管理员mer_id=0导致SQL查询条件o.mer_id=0匹配不到任何商户订单。 修复内容(共19处): - OrderServiceImpl.java: 订单列表、详情、发货、物流、核销、发货单修改等 10处merId过滤增加平台管理员判断(mer_id>0时才过滤) - RefundOrderServiceImpl.java: 退款列表、详情、备注、审核、收货、拒绝收货 6处merId过滤增加平台管理员判断 - ManageOrderServiceImpl.java: 订单详情列表1处 - OrderMapper.xml: getMerchantAdminPage查询中mer_id改为条件判断 - RefundOrderMapper.xml: getMerchantAdminPage查询中mer_id改为条件判断 修复逻辑:当systemAdmin.getMerId()==0(平台管理员)时跳过商户ID过滤, 允许查看所有商户的订单数据;当mer_id>0(商户管理员)时保持原有过滤逻辑。 Co-Authored-By: Claude Opus 4.6 --- .../service/impl/ManageOrderServiceImpl.java | 2 +- .../service/impl/OrderServiceImpl.java | 41 +++++++++++++------ .../service/impl/RefundOrderServiceImpl.java | 15 ++++--- .../resources/mapper/order/OrderMapper.xml | 5 ++- .../mapper/order/RefundOrderMapper.xml | 5 ++- 5 files changed, 46 insertions(+), 22 deletions(-) diff --git a/mer_java/crmeb-admin/src/main/java/com/zbkj/admin/service/impl/ManageOrderServiceImpl.java b/mer_java/crmeb-admin/src/main/java/com/zbkj/admin/service/impl/ManageOrderServiceImpl.java index 6224778..fa6fdfb 100644 --- a/mer_java/crmeb-admin/src/main/java/com/zbkj/admin/service/impl/ManageOrderServiceImpl.java +++ b/mer_java/crmeb-admin/src/main/java/com/zbkj/admin/service/impl/ManageOrderServiceImpl.java @@ -172,7 +172,7 @@ public class ManageOrderServiceImpl implements ManageOrderService { public List getDetailList(String orderNo) { SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser(); Order order = orderService.getByOrderNo(orderNo); - if (!order.getMerId().equals(systemAdmin.getMerId())) { + if (systemAdmin.getMerId() > 0 && !order.getMerId().equals(systemAdmin.getMerId())) { throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST); } List orderDetailList = orderService.getDetailList(orderNo, systemAdmin); diff --git a/mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java b/mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java index 4f6b23b..6245495 100644 --- a/mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java +++ b/mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/OrderServiceImpl.java @@ -288,7 +288,10 @@ public class OrderServiceImpl extends ServiceImpl implements Or map.put("endTime", dateLimit.getEndTime()); } } - map.put("merId", systemAdmin.getMerId()); + // 平台管理员(mer_id=0)查看全部商户订单,商户管理员只查看自己的订单 + if (systemAdmin.getMerId() > 0) { + map.put("merId", systemAdmin.getMerId()); + } if (StrUtil.isNotBlank(request.getOrderNo())) { map.put("orderNo", URLUtil.decode(request.getOrderNo())); } @@ -354,7 +357,8 @@ public class OrderServiceImpl extends ServiceImpl implements Or @Override public OrderAdminDetailResponse adminDetail(String orderNo, SystemAdmin systemAdmin) { Order order = getByOrderNo(orderNo); - if (order.getIsMerchantDel() || !order.getMerId().equals(systemAdmin.getMerId())) { + // 平台管理员(mer_id=0)可查看所有商户订单,商户管理员只能查看自己的订单 + if (order.getIsMerchantDel() || (systemAdmin.getMerId() > 0 && !order.getMerId().equals(systemAdmin.getMerId()))) { throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST); } OrderAdminDetailResponse orderAdminDetailResponse = new OrderAdminDetailResponse(); @@ -487,7 +491,7 @@ public class OrderServiceImpl extends ServiceImpl implements Or public Boolean send(OrderSendRequest request, SystemAdmin systemAdmin) { validateOrderSend(request); Order order = getByOrderNo(request.getOrderNo()); - if (!order.getMerId().equals(systemAdmin.getMerId())) { + if (systemAdmin.getMerId() > 0 && !order.getMerId().equals(systemAdmin.getMerId())) { throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST); } if (order.getIsUserDel() || order.getIsMerchantDel()) { @@ -828,10 +832,12 @@ public class OrderServiceImpl extends ServiceImpl implements Or @Override public void printReceipt(String orderNo, SystemAdmin systemAdmin) { MerchantOrder merchantOrder = merchantOrderService.getOneByOrderNo(orderNo); - if (!systemAdmin.getMerId().equals(merchantOrder.getMerId())) { + if (systemAdmin.getMerId() > 0 && !systemAdmin.getMerId().equals(merchantOrder.getMerId())) { throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST); } - Merchant merchant = merchantService.getByIdException(systemAdmin.getMerId()); + // 平台管理员使用订单所属商户信息 + Integer effectiveMerId = systemAdmin.getMerId() > 0 ? systemAdmin.getMerId() : merchantOrder.getMerId(); + Merchant merchant = merchantService.getByIdException(effectiveMerId); // 小票打印开关:0关闭,1=手动打印,2=自动打印,3=自动和手动 if (merchant.getReceiptPrintingSwitch() == 0) { throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "小票打印功能未开启"); @@ -1094,7 +1100,7 @@ public class OrderServiceImpl extends ServiceImpl implements Or throw new CrmebException(OrderResultCode.ORDER_INVOICE_LOGISTICS_NOT_EXIST); } MerchantOrder merchantOrder = merchantOrderService.getOneByOrderNo(orderInvoice.getOrderNo()); - if (ObjectUtil.isNull(merchantOrder) || !systemAdmin.getMerId().equals(merchantOrder.getMerId())) { + if (ObjectUtil.isNull(merchantOrder) || (systemAdmin.getMerId() > 0 && !systemAdmin.getMerId().equals(merchantOrder.getMerId()))) { throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST); } return logisticService.info(orderInvoice.getTrackingNumber(), null, Optional.ofNullable(orderInvoice.getExpressCode()).orElse(""), merchantOrder.getUserPhone()); @@ -1133,7 +1139,7 @@ public class OrderServiceImpl extends ServiceImpl implements Or throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); } Order order = getByOrderNo(merchantOrder.getOrderNo()); - if (!systemAdmin.getMerId().equals(order.getMerId())) { + if (systemAdmin.getMerId() > 0 && !systemAdmin.getMerId().equals(order.getMerId())) { throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); } if (!order.getStatus().equals(OrderConstants.ORDER_STATUS_AWAIT_VERIFICATION)) { @@ -1152,7 +1158,9 @@ public class OrderServiceImpl extends ServiceImpl implements Or merchantOrder.setUpdateTime(DateUtil.date()); // 预约订单-到店核销订单-若工单开关开启,自动生成工单 List workOrderList = new ArrayList<>(); - MerchantInfo merchantInfo = merchantInfoService.getByMerId(systemAdmin.getMerId()); + // 平台管理员使用订单所属商户信息 + Integer effectiveMerId = systemAdmin.getMerId() > 0 ? systemAdmin.getMerId() : order.getMerId(); + MerchantInfo merchantInfo = merchantInfoService.getByMerId(effectiveMerId); if (merchantOrder.getSecondType().equals(OrderConstants.ORDER_SECOND_TYPE_RESERVATION) && merchantOrder.getShippingType().equals(OrderConstants.ORDER_SHIPPING_TYPE_TO_STORE) @@ -1267,7 +1275,7 @@ public class OrderServiceImpl extends ServiceImpl implements Or throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); } Order order = getByOrderNo(merchantOrder.getOrderNo()); - if (!systemAdmin.getMerId().equals(order.getMerId())) { + if (systemAdmin.getMerId() > 0 && !systemAdmin.getMerId().equals(order.getMerId())) { throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); } if (!order.getStatus().equals(OrderConstants.ORDER_STATUS_AWAIT_VERIFICATION)) { @@ -1290,7 +1298,8 @@ public class OrderServiceImpl extends ServiceImpl implements Or merchantOrder.setUpdateTime(DateUtil.date()); // 预约订单-到店核销订单-若工单开关开启,自动生成工单 List workOrderList = new ArrayList<>(); - MerchantInfo merchantInfo = merchantInfoService.getByMerId(systemAdmin.getMerId()); + Integer effectiveMerId = systemAdmin.getMerId() > 0 ? systemAdmin.getMerId() : order.getMerId(); + MerchantInfo merchantInfo = merchantInfoService.getByMerId(effectiveMerId); List merOrderDetailList = orderDetailService.getByOrderNo(order.getOrderNo()); OrderDetail orderDetail = merOrderDetailList.get(0); @@ -1426,12 +1435,18 @@ public class OrderServiceImpl extends ServiceImpl implements Or */ @Override public MerchantOrderPageResponse getVerificationOrderByCode(String verifyCode, SystemAdmin systemAdmin) { - MerchantOrder merchantOrder = merchantOrderService.getByVerifyCodeForMerchant(verifyCode, systemAdmin.getMerId()); + // 平台管理员(mer_id=0)传0到商户核销码查询,需要特殊处理 + MerchantOrder merchantOrder; + if (systemAdmin.getMerId() > 0) { + merchantOrder = merchantOrderService.getByVerifyCodeForMerchant(verifyCode, systemAdmin.getMerId()); + } else { + merchantOrder = merchantOrderService.getOneByVerifyCode(verifyCode); + } if (ObjectUtil.isNull(merchantOrder)) { throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); } Order order = getByOrderNo(merchantOrder.getOrderNo()); - if (!systemAdmin.getMerId().equals(order.getMerId())) { + if (systemAdmin.getMerId() > 0 && !systemAdmin.getMerId().equals(order.getMerId())) { throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); } MerchantOrderPageResponse merchantOrderPageResponse = new MerchantOrderPageResponse(); @@ -1967,7 +1982,7 @@ public class OrderServiceImpl extends ServiceImpl implements Or @Override public Boolean updateInvoice(OrderInvoiceUpdateRequest request, SystemAdmin systemAdmin) { OrderInvoice invoice = orderInvoiceService.getById(request.getId()); - if (ObjectUtil.isNull(invoice) || !invoice.getMerId().equals(systemAdmin.getMerId())) { + if (ObjectUtil.isNull(invoice) || (systemAdmin.getMerId() > 0 && !invoice.getMerId().equals(systemAdmin.getMerId()))) { throw new CrmebException(OrderResultCode.ORDER_INVOICE_NOT_EXIST); } validateUpdateInvoice(invoice.getDeliveryType(), request); diff --git a/mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/RefundOrderServiceImpl.java b/mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/RefundOrderServiceImpl.java index 9a1f360..e494229 100644 --- a/mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/RefundOrderServiceImpl.java +++ b/mer_java/crmeb-service/src/main/java/com/zbkj/service/service/impl/RefundOrderServiceImpl.java @@ -151,7 +151,10 @@ public class RefundOrderServiceImpl extends ServiceImpl 0) { + map.put("merId", systemAdmin.getMerId()); + } if (StrUtil.isNotBlank(request.getRefundOrderNo())) { map.put("refundOrderNo", request.getRefundOrderNo()); } @@ -195,7 +198,7 @@ public class RefundOrderServiceImpl extends ServiceImpl 0 && !refundOrder.getMerId().equals(systemAdmin.getMerId())) { throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); } refundOrder.setMerRemark(request.getRemark()); @@ -335,7 +338,7 @@ public class RefundOrderServiceImpl extends ServiceImpl 0 && !systemAdmin.getMerId().equals(refundOrder.getMerId())) { throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); } RefundOrderInfo refundOrderInfo = refundOrderInfoService.getByRefundOrderNo(refundOrderNo); @@ -759,7 +762,7 @@ public class RefundOrderServiceImpl extends ServiceImpl 0 && !refundOrder.getMerId().equals(systemAdmin.getMerId())) { throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); } Order order = orderService.getByOrderNo(refundOrder.getOrderNo()); @@ -837,7 +840,7 @@ public class RefundOrderServiceImpl extends ServiceImpl 0 && !refundOrder.getMerId().equals(systemAdmin.getMerId())) { throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); } @@ -877,7 +880,7 @@ public class RefundOrderServiceImpl extends ServiceImpl 0 && !refundOrder.getMerId().equals(systemAdmin.getMerId())) { throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); } if (!refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_AWAIT_RECEIVING)) { diff --git a/mer_java/crmeb-service/src/main/resources/mapper/order/OrderMapper.xml b/mer_java/crmeb-service/src/main/resources/mapper/order/OrderMapper.xml index 6cd6e70..516ff14 100644 --- a/mer_java/crmeb-service/src/main/resources/mapper/order/OrderMapper.xml +++ b/mer_java/crmeb-service/src/main/resources/mapper/order/OrderMapper.xml @@ -132,7 +132,10 @@ from eb_order o left join eb_merchant_order as mo on o.order_no = mo.order_no left join eb_user as u on o.uid = u.id - where o.is_del = 0 and o.is_merchant_del = 0 and o.level = 1 and o.mer_id = #{merId} + where o.is_del = 0 and o.is_merchant_del = 0 and o.level = 1 + + and o.mer_id = #{merId} + and o.second_type in (0,2,5,6,7,8) diff --git a/mer_java/crmeb-service/src/main/resources/mapper/order/RefundOrderMapper.xml b/mer_java/crmeb-service/src/main/resources/mapper/order/RefundOrderMapper.xml index 8ddfe4d..d8e8626 100644 --- a/mer_java/crmeb-service/src/main/resources/mapper/order/RefundOrderMapper.xml +++ b/mer_java/crmeb-service/src/main/resources/mapper/order/RefundOrderMapper.xml @@ -103,7 +103,10 @@ u.nickname as userNickName from eb_refund_order ro left join eb_user u on ro.uid = u.id - where ro.mer_id = #{merId} + where 1=1 + + and ro.mer_id = #{merId} + and ro.order_no like CONCAT('%',#{orderNo},'%')