diff --git a/src/main/java/com/rj/config/MybatisPlusConfig.java b/src/main/java/com/rj/config/MybatisPlusConfig.java index bd57276..9261343 100644 --- a/src/main/java/com/rj/config/MybatisPlusConfig.java +++ b/src/main/java/com/rj/config/MybatisPlusConfig.java @@ -62,7 +62,6 @@ public class MybatisPlusConfig { ignoreTables.add("ai_prompts"); // AI 提示词全局配置,表无 tenant_id 字段 ignoreTables.add("lb_third_integration_config"); // 每租户一条,按 tenant_id 显式查询,不走插件自动拼接 ignoreTables.add("lb_buy_account"); // 抢单账号跨租户管理;分页/批量抢单按记录 tenant_id 业务处理 - ignoreTables.add("lb_buyer_shopping"); // 买方购物表无 tenant_id 字段 return new TenantLineHandler() { diff --git a/src/main/java/com/rj/entity/LbBuyerShopping.java b/src/main/java/com/rj/entity/LbBuyerShopping.java index 1dda9c9..4947c1d 100644 --- a/src/main/java/com/rj/entity/LbBuyerShopping.java +++ b/src/main/java/com/rj/entity/LbBuyerShopping.java @@ -30,6 +30,10 @@ public class LbBuyerShopping implements Serializable { @Schema(description = "订单ID(外部系统主键)") private Long id; + @TableField("tenant_id") + @Schema(description = "租户ID") + private String tenantId; + @TableField("seller_id") @Schema(description = "卖家ID") private Long sellerId; diff --git a/src/main/java/com/rj/service/impl/LbBuyerShoppingServiceImpl.java b/src/main/java/com/rj/service/impl/LbBuyerShoppingServiceImpl.java index a3e80ba..5e0670e 100644 --- a/src/main/java/com/rj/service/impl/LbBuyerShoppingServiceImpl.java +++ b/src/main/java/com/rj/service/impl/LbBuyerShoppingServiceImpl.java @@ -13,6 +13,7 @@ import com.rj.service.HxrAdminBuyerOrderSelectService; import com.rj.service.HxrAdminUserLoginService; import com.rj.service.ILbBuyerShoppingService; import com.rj.service.ILbThirdIntegrationConfigService; +import com.rj.tenant.TenantContextHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; @@ -81,6 +82,13 @@ public class LbBuyerShoppingServiceImpl return result; } trimStringFields(entity); + fillTenantIdIfAbsent(entity); + if (entity.getTenantId() == null || entity.getTenantId().isBlank()) { + result.put("success", false); + result.put("message", "tenantId不能为空"); + return result; + } + entity.setTenantId(entity.getTenantId().trim()); if (this.getById(entity.getId()) != null) { result.put("success", false); result.put("message", "该订单 id 已存在"); @@ -133,6 +141,7 @@ public class LbBuyerShoppingServiceImpl if (entity.getDataType() == null || entity.getDataType().isBlank()) { entity.setDataType(existing.getDataType()); } + entity.setTenantId(existing.getTenantId()); boolean ok = this.updateById(entity); result.put("success", ok); @@ -291,8 +300,7 @@ public class LbBuyerShoppingServiceImpl queryWrapper.le(LbBuyerShopping::getConfirmTime, confirmEnd); } - queryWrapper.orderByDesc(LbBuyerShopping::getBuyTime) - .orderByDesc(LbBuyerShopping::getCreatedAt); + queryWrapper.orderByDesc(LbBuyerShopping::getBuyTime) ; Page page = this.page(new Page<>(current, size), queryWrapper); result.put("success", true); @@ -342,6 +350,9 @@ public class LbBuyerShoppingServiceImpl } HxrUserLoginApiContext loginCtx = loginCtxOpt.get(); + String previousTenantId = TenantContextHolder.getTenantId(); + TenantContextHolder.setTenantId(tenantId); + try { Set cacheSellerPhones = new LinkedHashSet<>(); Set processedMobiles = new LinkedHashSet<>(); @@ -442,6 +453,13 @@ public class LbBuyerShoppingServiceImpl result.put("processedMobiles", new ArrayList<>(processedMobiles)); result.put("loginApiUrl", loginCtx.loginApiUrl()); return result; + } finally { + if (previousTenantId != null) { + TenantContextHolder.setTenantId(previousTenantId); + } else { + TenantContextHolder.clear(); + } + } } catch (Exception e) { log.error("买方购物第三方拉取异常", e); result.put("success", false); @@ -502,7 +520,7 @@ public class LbBuyerShoppingServiceImpl item.put("buyerOrderListUrl", orderCtx.buyerOrderListBaseUrl()); Map fetchResult = - fetchAndSaveBuyerOrders(orderCtx, mobile, sellerPhoneCollector, processedMobiles); + fetchAndSaveBuyerOrders(orderCtx, tenantId, mobile, sellerPhoneCollector, processedMobiles); item.putAll(fetchResult); } catch (Exception e) { log.warn("买方购物第三方拉取异常 mobile={} tenantId={}", mobile, tenantId, e); @@ -516,6 +534,7 @@ public class LbBuyerShoppingServiceImpl private Map fetchAndSaveBuyerOrders( HxrBuyerOrderApiContext ctx, + String tenantId, String loginMobile, Set sellerPhoneCollector, Set processedMobiles) { @@ -576,6 +595,7 @@ public class LbBuyerShoppingServiceImpl if (entity.getBuyerMobile() == null || entity.getBuyerMobile().isBlank()) { entity.setBuyerMobile(loginMobile); } + entity.setTenantId(tenantId); applyDefaults(entity); if (entity.getCreatedAt() == null) { entity.setCreatedAt(LocalDateTime.now()); @@ -809,6 +829,7 @@ public class LbBuyerShoppingServiceImpl } target.setBuyerNickname(sample.getBuyerNickname()); target.setBuyerMobile(sample.getBuyerMobile()); + target.setTenantId(sample.getTenantId()); } private Long resolveDayStatRowId(Long buyerId, LocalDate day) { @@ -908,7 +929,19 @@ public class LbBuyerShoppingServiceImpl } } + private void fillTenantIdIfAbsent(LbBuyerShopping entity) { + if (entity.getTenantId() == null || entity.getTenantId().isBlank()) { + String tenantId = TenantContextHolder.getTenantId(); + if (tenantId != null && !tenantId.isBlank()) { + entity.setTenantId(tenantId.trim()); + } + } + } + private void trimStringFields(LbBuyerShopping entity) { + if (entity.getTenantId() != null) { + entity.setTenantId(entity.getTenantId().trim()); + } if (entity.getOrderSn() != null) { entity.setOrderSn(entity.getOrderSn().trim()); }