fix: 修复平台端商户订单与打印页测试问题

修复平台管理员在商户订单页查看详情等操作时出现“订单不存在”的问题,并完善商户订单查询筛选逻辑。同步修复商户订单打印页电话展示与积分信息展示,满足测试项要求。

Made-with: Cursor
This commit is contained in:
AriadenCaseblg
2026-04-12 10:46:37 +08:00
parent 37e08a5a14
commit b3d80c3c50
6 changed files with 73 additions and 18 deletions

View File

@@ -11,3 +11,9 @@
- **已修复**1. 新增“订单打印”功能点击订单打印按钮不同于打印小票新打开一个订单详情含商品信息收货信息的单独页面不需要页面layout点击页面上的“打印”按钮可以直接使用浏览器打印
- **已修复**2. 订单打印详情页中的商品相关信息使用eb_sync_order_detail_staging中的product_nameinfo字段的商品详细信息
## 测试问题(平台管理后台)
- **已修复**商户订单页面order/merchantList点击详情等按钮提示“订单不存在”
- **已修复**商户订单页面order/merchantList不显示订单数据
- **已修复**平台管理后台商户订单打印页(/order/merchantPrint中的收货信息中电话显示全部电话号码不使用maskedUserPhone

View File

@@ -45,6 +45,8 @@ public class ManageOrderServiceImpl implements ManageOrderService {
@Autowired
private OrderService orderService;
@Autowired
private com.zbkj.service.service.MerchantOrderService merchantOrderService;
@Autowired
private ReservationWorkOrderService reservationWorkOrderService;
@Autowired
private SyncOrderDetailStagingDao syncOrderDetailStagingDao;
@@ -241,6 +243,11 @@ public class ManageOrderServiceImpl implements ManageOrderService {
if (orderInfo == null) {
throw new CrmebException("订单不存在");
}
// 打印页要求展示完整收货电话,不走全局手机号脱敏展示
com.zbkj.common.model.order.MerchantOrder merchantOrder = merchantOrderService.getOneByOrderNo(orderNo);
if (merchantOrder != null) {
orderInfo.setUserPhone(merchantOrder.getUserPhone());
}
// 从staging表查询商品详情
LambdaQueryWrapper<SyncOrderDetailStaging> queryWrapper = new LambdaQueryWrapper<>();

View File

@@ -288,11 +288,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
map.put("endTime", dateLimit.getEndTime());
}
}
// 平台管理员(mer_id=0)可按商户筛选或查看全部,商户管理员只查看自己的订单
if (systemAdmin.getMerId() > 0) {
map.put("merId", systemAdmin.getMerId());
} else if (ObjectUtil.isNotNull(request.getMerId()) && request.getMerId() > 0) {
map.put("merId", request.getMerId());
Integer effectiveMerId = resolveMerchantFilterMerId(systemAdmin.getMerId(), request.getMerId());
if (ObjectUtil.isNotNull(effectiveMerId)) {
map.put("merId", effectiveMerId);
}
if (StrUtil.isNotBlank(request.getOrderNo())) {
map.put("orderNo", URLUtil.decode(request.getOrderNo()));
@@ -858,7 +856,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
*/
@Override
public Boolean merchantDeleteByOrderNo(String orderNo, SystemAdmin systemAdmin) {
Order order = getByOrderNoAndMerId(orderNo, systemAdmin.getMerId());
Order order = getByOrderNoForAdminScope(orderNo, systemAdmin);
if (!order.getIsUserDel()) {
throw new CrmebException(OrderResultCode.ORDER_USER_NOT_DELETE);
}
@@ -875,7 +873,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
*/
@Override
public Boolean merchantMark(OrderRemarkRequest request, SystemAdmin systemAdmin) {
Order order = getByOrderNoAndMerId(request.getOrderNo(), systemAdmin.getMerId());
Order order = getByOrderNoForAdminScope(request.getOrderNo(), systemAdmin);
MerchantOrder merchantOrder = merchantOrderService.getOneByOrderNo(order.getOrderNo());
merchantOrder.setMerchantRemark(request.getRemark());
merchantOrder.setUpdateTime(DateUtil.date());
@@ -1584,7 +1582,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
*/
@Override
public List<OrderInvoiceResponse> getInvoiceListByMerchant(String orderNo, SystemAdmin systemAdmin) {
getByOrderNoAndMerId(orderNo, systemAdmin.getMerId());
getByOrderNoForAdminScope(orderNo, systemAdmin);
return getInvoiceList(orderNo);
}
@@ -1909,7 +1907,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
if (request.getReturnType().equals(2) && CollUtil.isEmpty(request.getDetailList())) {
throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请选择要退款的商品");
}
Order order = getByOrderNoAndMerId(request.getOrderNo(), systemAdmin.getMerId());
Order order = getByOrderNoForAdminScope(request.getOrderNo(), systemAdmin);
if (order.getRefundStatus().equals(OrderConstants.ORDER_REFUND_STATUS_ALL)) {
throw new CrmebException(OrderResultCode.ORDER_REFUND_ED);
}
@@ -2603,6 +2601,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
return order;
}
/**
* 商户订单操作范围校验
* 平台管理员可操作任意商户订单,商户管理员仅可操作自己商户订单
*/
private Order getByOrderNoForAdminScope(String orderNo, SystemAdmin systemAdmin) {
Order order = getByOrderNo(orderNo);
if (order.getIsMerchantDel() || (systemAdmin.getMerId() > 0 && !order.getMerId().equals(systemAdmin.getMerId()))) {
throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST);
}
return order;
}
/**
* 拆单发货
*
@@ -2944,10 +2954,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
map.put("endTime", dateLimit.getEndTime());
}
}
if (merId > 0) {
map.put("merId", merId);
} else if (ObjectUtil.isNotNull(request.getMerId()) && request.getMerId() > 0) {
map.put("merId", request.getMerId());
Integer effectiveMerId = resolveMerchantFilterMerId(merId, request.getMerId());
if (ObjectUtil.isNotNull(effectiveMerId)) {
map.put("merId", effectiveMerId);
}
if (StrUtil.isNotBlank(request.getOrderNo())) {
map.put("orderNo", URLUtil.decode(request.getOrderNo()));
@@ -2958,6 +2967,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
return dao.getMerchantAdminPageCount(map);
}
/**
* 商户订单筛选归一化:
* - 商户管理员始终锁定当前商户;
* - 平台管理员仅在显式选择有效商户ID时按商户过滤
* - 非法或空商户ID不参与过滤。
*/
private Integer resolveMerchantFilterMerId(Integer loginMerId, Integer requestMerId) {
if (ObjectUtil.isNotNull(loginMerId) && loginMerId > 0) {
return loginMerId;
}
if (ObjectUtil.isNotNull(requestMerId) && requestMerId > 0) {
return requestMerId;
}
return null;
}
/**
* 获取订单总数(平台端)
*

View File

@@ -134,7 +134,7 @@
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_merchant as m on o.mer_id = m.id
where o.is_del = 0 and o.is_merchant_del = 0 and o.level = 1
where o.is_del = 0 and o.is_merchant_del = 0 and o.mer_id > 0
<if test="merId != null">
and o.mer_id = #{merId}
</if>
@@ -317,7 +317,7 @@
select count(*)
from eb_order o
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
where o.is_del = 0 and o.is_merchant_del = 0 and o.mer_id > 0
and o.second_type in (0,2,5,6,7,8)
<if test="merId != null">
and o.mer_id = #{merId}

View File

@@ -10,6 +10,17 @@
import request from '@/utils/request';
function normalizeMerchantOrderParams(params = {}) {
const normalized = { ...params };
const merId = Number(normalized.merId);
if (!Number.isFinite(merId) || merId <= 0) {
delete normalized.merId;
} else {
normalized.merId = merId;
}
return normalized;
}
/**
* 商户订单 列表
* @param params
@@ -18,7 +29,7 @@ export function merchantOrderListApi(params) {
return request({
url: '/admin/merchant/order/list',
method: 'get',
params,
params: normalizeMerchantOrderParams(params),
});
}
@@ -30,7 +41,7 @@ export function merchantOrderStatusNumApi(params) {
return request({
url: '/admin/merchant/order/status/num',
method: 'get',
params,
params: normalizeMerchantOrderParams(params),
});
}

View File

@@ -33,6 +33,12 @@
<td class="label">支付时间</td>
<td>{{ orderData.payTime || '-' }}</td>
</tr>
<tr>
<td class="label">使用积分</td>
<td>{{ orderData.useIntegral || 0 }}</td>
<td class="label">积分抵扣</td>
<td>¥ {{ orderData.integralPrice || '0.00' }}</td>
</tr>
</table>
</div>
@@ -44,7 +50,7 @@
<td class="label">收货人</td>
<td>{{ orderData.realName }}</td>
<td class="label">联系电话</td>
<td>{{ orderData.userPhone }}</td>
<td>{{ orderData.userPhone || '-' }}</td>
</tr>
<tr>
<td class="label">收货地址</td>