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:
@@ -172,7 +172,7 @@ public class ManageOrderServiceImpl implements ManageOrderService {
|
||||
public List<OrderDetailInfoResponse> 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<OrderDetail> orderDetailList = orderService.getDetailList(orderNo, systemAdmin);
|
||||
|
||||
@@ -288,7 +288,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> 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<OrderDao, Order> 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<OrderDao, Order> 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<OrderDao, Order> 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<OrderDao, Order> 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<OrderDao, Order> 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<OrderDao, Order> implements Or
|
||||
merchantOrder.setUpdateTime(DateUtil.date());
|
||||
// 预约订单-到店核销订单-若工单开关开启,自动生成工单
|
||||
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)
|
||||
&& 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, "请输入正确的核销码");
|
||||
}
|
||||
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<OrderDao, Order> implements Or
|
||||
merchantOrder.setUpdateTime(DateUtil.date());
|
||||
// 预约订单-到店核销订单-若工单开关开启,自动生成工单
|
||||
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());
|
||||
OrderDetail orderDetail = merOrderDetailList.get(0);
|
||||
@@ -1426,12 +1435,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> 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<OrderDao, Order> 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);
|
||||
|
||||
@@ -151,7 +151,10 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
|
||||
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.getRefundOrderNo())) {
|
||||
map.put("refundOrderNo", request.getRefundOrderNo());
|
||||
}
|
||||
@@ -195,7 +198,7 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
|
||||
@Override
|
||||
public Boolean mark(RefundOrderRemarkRequest request, SystemAdmin systemAdmin) {
|
||||
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);
|
||||
}
|
||||
refundOrder.setMerRemark(request.getRemark());
|
||||
@@ -335,7 +338,7 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
|
||||
public RefundOrderAdminDetailResponse getMerchantDetail(String refundOrderNo, SystemAdmin systemAdmin) {
|
||||
|
||||
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);
|
||||
}
|
||||
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)) {
|
||||
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);
|
||||
}
|
||||
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)) {
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -877,7 +880,7 @@ public class RefundOrderServiceImpl extends ServiceImpl<RefundOrderDao, RefundOr
|
||||
@Override
|
||||
public Boolean receivingReject(RejectReceivingRequest request, SystemAdmin systemAdmin) {
|
||||
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);
|
||||
}
|
||||
if (!refundOrder.getRefundStatus().equals(OrderConstants.MERCHANT_REFUND_ORDER_STATUS_AWAIT_RECEIVING)) {
|
||||
|
||||
@@ -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
|
||||
<if test="merId != null">
|
||||
and o.mer_id = #{merId}
|
||||
</if>
|
||||
and o.second_type in (0,2,5,6,7,8)
|
||||
<choose>
|
||||
<when test='status == "unPaid"'>
|
||||
|
||||
@@ -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
|
||||
<if test="merId != null">
|
||||
and ro.mer_id = #{merId}
|
||||
</if>
|
||||
<if test="orderNo != null and orderNo !=''">
|
||||
and ro.order_no like CONCAT('%',#{orderNo},'%')
|
||||
</if>
|
||||
|
||||
Reference in New Issue
Block a user