fix: 修复平台管理员(mer_id=0)无法查看商户订单数据的问题

根因:商户订单相关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 <noreply@anthropic.com>
This commit is contained in:
AriadenCaseblg
2026-04-10 12:03:38 +08:00
parent a9d56d595a
commit 0e6519b176
5 changed files with 46 additions and 22 deletions

View File

@@ -172,7 +172,7 @@ public class ManageOrderServiceImpl implements ManageOrderService {
public List<OrderDetailInfoResponse> getDetailList(String orderNo) { public List<OrderDetailInfoResponse> getDetailList(String orderNo) {
SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser(); SystemAdmin systemAdmin = SecurityUtil.getLoginUserVo().getUser();
Order order = orderService.getByOrderNo(orderNo); 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); throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST);
} }
List<OrderDetail> orderDetailList = orderService.getDetailList(orderNo, systemAdmin); List<OrderDetail> orderDetailList = orderService.getDetailList(orderNo, systemAdmin);

View File

@@ -288,7 +288,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
map.put("endTime", dateLimit.getEndTime()); map.put("endTime", dateLimit.getEndTime());
} }
} }
// 平台管理员(mer_id=0)查看全部商户订单,商户管理员只查看自己的订单
if (systemAdmin.getMerId() > 0) {
map.put("merId", systemAdmin.getMerId()); map.put("merId", systemAdmin.getMerId());
}
if (StrUtil.isNotBlank(request.getOrderNo())) { if (StrUtil.isNotBlank(request.getOrderNo())) {
map.put("orderNo", URLUtil.decode(request.getOrderNo())); map.put("orderNo", URLUtil.decode(request.getOrderNo()));
} }
@@ -354,7 +357,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
@Override @Override
public OrderAdminDetailResponse adminDetail(String orderNo, SystemAdmin systemAdmin) { public OrderAdminDetailResponse adminDetail(String orderNo, SystemAdmin systemAdmin) {
Order order = getByOrderNo(orderNo); 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); throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST);
} }
OrderAdminDetailResponse orderAdminDetailResponse = new OrderAdminDetailResponse(); OrderAdminDetailResponse orderAdminDetailResponse = new OrderAdminDetailResponse();
@@ -487,7 +491,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
public Boolean send(OrderSendRequest request, SystemAdmin systemAdmin) { public Boolean send(OrderSendRequest request, SystemAdmin systemAdmin) {
validateOrderSend(request); validateOrderSend(request);
Order order = getByOrderNo(request.getOrderNo()); 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); throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST);
} }
if (order.getIsUserDel() || order.getIsMerchantDel()) { if (order.getIsUserDel() || order.getIsMerchantDel()) {
@@ -828,10 +832,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
@Override @Override
public void printReceipt(String orderNo, SystemAdmin systemAdmin) { public void printReceipt(String orderNo, SystemAdmin systemAdmin) {
MerchantOrder merchantOrder = merchantOrderService.getOneByOrderNo(orderNo); 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); 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=自动和手动 // 小票打印开关0关闭1=手动打印2=自动打印3=自动和手动
if (merchant.getReceiptPrintingSwitch() == 0) { if (merchant.getReceiptPrintingSwitch() == 0) {
throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "小票打印功能未开启"); throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "小票打印功能未开启");
@@ -1094,7 +1100,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
throw new CrmebException(OrderResultCode.ORDER_INVOICE_LOGISTICS_NOT_EXIST); throw new CrmebException(OrderResultCode.ORDER_INVOICE_LOGISTICS_NOT_EXIST);
} }
MerchantOrder merchantOrder = merchantOrderService.getOneByOrderNo(orderInvoice.getOrderNo()); 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); throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST);
} }
return logisticService.info(orderInvoice.getTrackingNumber(), null, Optional.ofNullable(orderInvoice.getExpressCode()).orElse(""), merchantOrder.getUserPhone()); return logisticService.info(orderInvoice.getTrackingNumber(), null, Optional.ofNullable(orderInvoice.getExpressCode()).orElse(""), merchantOrder.getUserPhone());
@@ -1133,7 +1139,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码");
} }
Order order = getByOrderNo(merchantOrder.getOrderNo()); 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, "请输入正确的核销码"); throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码");
} }
if (!order.getStatus().equals(OrderConstants.ORDER_STATUS_AWAIT_VERIFICATION)) { if (!order.getStatus().equals(OrderConstants.ORDER_STATUS_AWAIT_VERIFICATION)) {
@@ -1152,7 +1158,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
merchantOrder.setUpdateTime(DateUtil.date()); merchantOrder.setUpdateTime(DateUtil.date());
// 预约订单-到店核销订单-若工单开关开启,自动生成工单 // 预约订单-到店核销订单-若工单开关开启,自动生成工单
List<ReservationWorkOrder> workOrderList = new ArrayList<>(); List<ReservationWorkOrder> 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) if (merchantOrder.getSecondType().equals(OrderConstants.ORDER_SECOND_TYPE_RESERVATION)
&& merchantOrder.getShippingType().equals(OrderConstants.ORDER_SHIPPING_TYPE_TO_STORE) && merchantOrder.getShippingType().equals(OrderConstants.ORDER_SHIPPING_TYPE_TO_STORE)
@@ -1267,7 +1275,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码");
} }
Order order = getByOrderNo(merchantOrder.getOrderNo()); 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, "请输入正确的核销码"); throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码");
} }
if (!order.getStatus().equals(OrderConstants.ORDER_STATUS_AWAIT_VERIFICATION)) { if (!order.getStatus().equals(OrderConstants.ORDER_STATUS_AWAIT_VERIFICATION)) {
@@ -1290,7 +1298,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
merchantOrder.setUpdateTime(DateUtil.date()); merchantOrder.setUpdateTime(DateUtil.date());
// 预约订单-到店核销订单-若工单开关开启,自动生成工单 // 预约订单-到店核销订单-若工单开关开启,自动生成工单
List<ReservationWorkOrder> workOrderList = new ArrayList<>(); List<ReservationWorkOrder> workOrderList = new ArrayList<>();
MerchantInfo merchantInfo = merchantInfoService.getByMerId(systemAdmin.getMerId()); Integer effectiveMerId = systemAdmin.getMerId() > 0 ? systemAdmin.getMerId() : order.getMerId();
MerchantInfo merchantInfo = merchantInfoService.getByMerId(effectiveMerId);
List<OrderDetail> merOrderDetailList = orderDetailService.getByOrderNo(order.getOrderNo()); List<OrderDetail> merOrderDetailList = orderDetailService.getByOrderNo(order.getOrderNo());
OrderDetail orderDetail = merOrderDetailList.get(0); OrderDetail orderDetail = merOrderDetailList.get(0);
@@ -1426,12 +1435,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
*/ */
@Override @Override
public MerchantOrderPageResponse getVerificationOrderByCode(String verifyCode, SystemAdmin systemAdmin) { 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)) { if (ObjectUtil.isNull(merchantOrder)) {
throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码"); throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码");
} }
Order order = getByOrderNo(merchantOrder.getOrderNo()); 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, "请输入正确的核销码"); throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请输入正确的核销码");
} }
MerchantOrderPageResponse merchantOrderPageResponse = new MerchantOrderPageResponse(); MerchantOrderPageResponse merchantOrderPageResponse = new MerchantOrderPageResponse();
@@ -1967,7 +1982,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
@Override @Override
public Boolean updateInvoice(OrderInvoiceUpdateRequest request, SystemAdmin systemAdmin) { public Boolean updateInvoice(OrderInvoiceUpdateRequest request, SystemAdmin systemAdmin) {
OrderInvoice invoice = orderInvoiceService.getById(request.getId()); 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); throw new CrmebException(OrderResultCode.ORDER_INVOICE_NOT_EXIST);
} }
validateUpdateInvoice(invoice.getDeliveryType(), request); validateUpdateInvoice(invoice.getDeliveryType(), request);

View File

@@ -151,7 +151,10 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
map.put("endTime", dateLimit.getEndTime()); map.put("endTime", dateLimit.getEndTime());
} }
} }
// 平台管理员(mer_id=0)查看全部商户退款订单
if (systemAdmin.getMerId() > 0) {
map.put("merId", systemAdmin.getMerId()); map.put("merId", systemAdmin.getMerId());
}
if (StrUtil.isNotBlank(request.getRefundOrderNo())) { if (StrUtil.isNotBlank(request.getRefundOrderNo())) {
map.put("refundOrderNo", request.getRefundOrderNo()); map.put("refundOrderNo", request.getRefundOrderNo());
} }
@@ -195,7 +198,7 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
@Override @Override
public Boolean mark(RefundOrderRemarkRequest request, SystemAdmin systemAdmin) { public Boolean mark(RefundOrderRemarkRequest request, SystemAdmin systemAdmin) {
RefundOrder refundOrder = getInfoException(request.getRefundOrderNo()); RefundOrder refundOrder = getInfoException(request.getRefundOrderNo());
if (!refundOrder.getMerId().equals(systemAdmin.getMerId())) { if (systemAdmin.getMerId() > 0 && !refundOrder.getMerId().equals(systemAdmin.getMerId())) {
throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST);
} }
refundOrder.setMerRemark(request.getRemark()); refundOrder.setMerRemark(request.getRemark());
@@ -335,7 +338,7 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
public RefundOrderAdminDetailResponse getMerchantDetail(String refundOrderNo, SystemAdmin systemAdmin) { public RefundOrderAdminDetailResponse getMerchantDetail(String refundOrderNo, SystemAdmin systemAdmin) {
RefundOrder refundOrder = getInfoException(refundOrderNo); RefundOrder refundOrder = getInfoException(refundOrderNo);
if (!systemAdmin.getMerId().equals(refundOrder.getMerId())) { if (systemAdmin.getMerId() > 0 && !systemAdmin.getMerId().equals(refundOrder.getMerId())) {
throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST);
} }
RefundOrderInfo refundOrderInfo = refundOrderInfoService.getByRefundOrderNo(refundOrderNo); RefundOrderInfo refundOrderInfo = refundOrderInfoService.getByRefundOrderNo(refundOrderNo);
@@ -759,7 +762,7 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
if (!refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_APPLY)) { if (!refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_APPLY)) {
throw new CrmebException(OrderResultCode.REFUND_ORDER_STATUS_ABNORMAL); throw new CrmebException(OrderResultCode.REFUND_ORDER_STATUS_ABNORMAL);
} }
if (!refundOrder.getMerId().equals(systemAdmin.getMerId())) { if (systemAdmin.getMerId() > 0 && !refundOrder.getMerId().equals(systemAdmin.getMerId())) {
throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST);
} }
Order order = orderService.getByOrderNo(refundOrder.getOrderNo()); Order order = orderService.getByOrderNo(refundOrder.getOrderNo());
@@ -837,7 +840,7 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
|| refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_REVOKE)) { || refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_REVOKE)) {
throw new CrmebException(OrderResultCode.REFUND_ORDER_STATUS_ABNORMAL); throw new CrmebException(OrderResultCode.REFUND_ORDER_STATUS_ABNORMAL);
} }
if (!refundOrder.getMerId().equals(systemAdmin.getMerId())) { if (systemAdmin.getMerId() > 0 && !refundOrder.getMerId().equals(systemAdmin.getMerId())) {
throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST);
} }
@@ -877,7 +880,7 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
@Override @Override
public Boolean receivingReject(RejectReceivingRequest request, SystemAdmin systemAdmin) { public Boolean receivingReject(RejectReceivingRequest request, SystemAdmin systemAdmin) {
RefundOrder refundOrder = getInfoException(request.getRefundOrderNo()); RefundOrder refundOrder = getInfoException(request.getRefundOrderNo());
if (!refundOrder.getMerId().equals(systemAdmin.getMerId())) { if (systemAdmin.getMerId() > 0 && !refundOrder.getMerId().equals(systemAdmin.getMerId())) {
throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST); throw new CrmebException(OrderResultCode.REFUND_ORDER_NOT_EXIST);
} }
if (!refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_AWAIT_RECEIVING)) { if (!refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_AWAIT_RECEIVING)) {

View File

@@ -132,7 +132,10 @@
from eb_order o from eb_order o
left join eb_merchant_order as mo on o.order_no = mo.order_no 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 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
<if test="merId != null">
and o.mer_id = #{merId}
</if>
and o.second_type in (0,2,5,6,7,8) and o.second_type in (0,2,5,6,7,8)
<choose> <choose>
<when test='status == "unPaid"'> <when test='status == "unPaid"'>

View File

@@ -103,7 +103,10 @@
u.nickname as userNickName u.nickname as userNickName
from eb_refund_order ro from eb_refund_order ro
left join eb_user u on ro.uid = u.id left join eb_user u on ro.uid = u.id
where ro.mer_id = #{merId} where 1=1
<if test="merId != null">
and ro.mer_id = #{merId}
</if>
<if test="orderNo != null and orderNo !=''"> <if test="orderNo != null and orderNo !=''">
and ro.order_no like CONCAT('%',#{orderNo},'%') and ro.order_no like CONCAT('%',#{orderNo},'%')
</if> </if>