|
|
@@ -15,7 +15,10 @@ import org.springblade.u9cloud.domain.SyncOrderRequest;
|
|
|
import org.springblade.u9cloud.entity.CreateOrderSo;
|
|
|
import org.springblade.u9cloud.service.PcBladeOrderItemService;
|
|
|
import org.springblade.u9cloud.service.PcBladeOrderService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.http.*;
|
|
|
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
|
|
@@ -256,35 +259,37 @@ public class SalesOrderSyncController {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 查询本地订单明细表(带校验)- 核心修复方法
|
|
|
+ * 查询本地订单明细表(带全量防护+兜底方案)
|
|
|
*/
|
|
|
- private List<PcBladeOrderItem> getLocalOrderItemsByCode(String orderCode) {
|
|
|
- // 新增:校验入参
|
|
|
- if (orderCode == null || orderCode.trim().isEmpty()) {
|
|
|
- throw new RuntimeException("查询订单明细失败:订单编号为空");
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 查询本地订单明细表(带全量防护+兜底方案)
|
|
|
+ */
|
|
|
+// 在Service中注入JdbcTemplate
|
|
|
+ @Autowired
|
|
|
+ private JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
- List<PcBladeOrderItem> localOrderItems;
|
|
|
+ private List<PcBladeOrderItem> getLocalOrderItemsByCode(String orderCode) {
|
|
|
try {
|
|
|
- // 核心修复:增加try-catch捕获数据权限拦截器的空指针异常
|
|
|
- localOrderItems = pcBladeOrderItemService.list(
|
|
|
- Wrappers.<PcBladeOrderItem>lambdaQuery()
|
|
|
- .eq(PcBladeOrderItem::getOrderCode, orderCode)
|
|
|
- );
|
|
|
- } catch (NullPointerException e) {
|
|
|
- // 捕获数据权限相关的空指针异常,记录日志并抛出明确异常
|
|
|
- log.error("查询订单明细时数据权限校验异常,订单编号:{}", orderCode, e);
|
|
|
- throw new RuntimeException("查询订单明细失败:数据权限校验异常", e);
|
|
|
- } catch (Exception e) {
|
|
|
- // 捕获其他查询异常
|
|
|
- log.error("查询订单明细失败,订单编号:{}", orderCode, e);
|
|
|
- throw new RuntimeException("查询订单明细失败,订单编号:" + orderCode + ",原因:" + e.getMessage(), e);
|
|
|
- }
|
|
|
+ // 1. 查询订单ID
|
|
|
+ String orderIdSql = "SELECT id FROM pc_blade_order WHERE order_code = ?";
|
|
|
+ Long orderId = jdbcTemplate.queryForObject(orderIdSql, Long.class, orderCode);
|
|
|
|
|
|
- if (CollectionUtils.isEmpty(localOrderItems)) {
|
|
|
- throw new RuntimeException("订单无明细数据,无法同步到U9C,订单编号:" + orderCode);
|
|
|
+ if (orderId == null) {
|
|
|
+ throw new RuntimeException("订单不存在:" + orderCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 直接查询明细
|
|
|
+ String detailSql = "SELECT * FROM pc_blade_order_item WHERE order_id = ? AND is_deleted = 0";
|
|
|
+
|
|
|
+ List<PcBladeOrderItem> items = jdbcTemplate.query(detailSql,
|
|
|
+ new BeanPropertyRowMapper<>(PcBladeOrderItem.class),
|
|
|
+ orderId);
|
|
|
+
|
|
|
+ return items;
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException("查询订单明细失败:" + e.getMessage(), e);
|
|
|
}
|
|
|
- return localOrderItems;
|
|
|
}
|
|
|
|
|
|
/**
|