From da32a67d7fcf30437ebbe01a4d137133c1898ba7 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Fri, 28 Aug 2026 23:01:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 3 + audit-service/AGENTS.md | 1 + .../baiyue/audit/BaiyueAuditApplication.java | 3 +- .../baiyue/audit/mapper/AuditLogMapper.java | 3 + auth/AGENTS.md | 1 + .../baiyue/auth/BaiyueAuthApplication.java | 3 +- .../baiyue/auth/mapper/AuthAccountMapper.java | 3 + .../auth/mapper/AuthRefreshTokenMapper.java | 3 + event-bridge-service/AGENTS.md | 1 + .../eventbridge/EventBridgeApplication.java | 3 +- file/AGENTS.md | 1 + .../baiyue/file/FileServiceApplication.java | 3 + firstleg/AGENTS.md | 1 + .../firstleg/BaiyueFirstlegApplication.java | 14 +- .../mapper/AssignmentHistoryMapper.java | 8 +- .../firstleg/mapper/CarrierFbaRateMapper.java | 3 + .../mapper/CustomerChargeRuleMapper.java | 3 + .../mapper/CustomerDimensionConfigMapper.java | 3 + .../mapper/FulfillmentTaskMapper.java | 8 +- .../firstleg/mapper/InboundFeeItemMapper.java | 3 + .../mapper/InboundOrderLookupMapper.java | 3 + .../mapper/InboundPickupSnapshotMapper.java | 3 + .../InboundPricingIdempotencyMapper.java | 3 + .../firstleg/mapper/InboundPricingMapper.java | 3 + .../mapper/PriceBookChannelMapper.java | 3 + .../mapper/PriceBookVersionMapper.java | 3 + .../mapper/PriceChannelCatalogMapper.java | 3 + .../mapper/PriceOriginAliasMapper.java | 3 + .../mapper/PriceWarehouseMappingMapper.java | 3 + .../mapper/ThirdPartyCallLogMapper.java | 3 + ...BaiyueFirstlegApplicationContractTest.java | 18 +-- .../MapperRegistrationArchitectureTest.java | 21 +++ iam/AGENTS.md | 1 + .../com/baiyue/iam/BaiyueIamApplication.java | 3 +- .../iam/BaiyueIamApplicationContractTest.java | 8 +- lastleg-service/AGENTS.md | 1 + .../lastleg/BaiyueLastlegApplication.java | 3 +- .../delivery/DeliveryMapperConfiguration.java | 9 -- .../discard/DiscardMapperConfiguration.java | 9 -- .../dispatch/DispatchMapperConfiguration.java | 9 -- .../pda/DispatchPdaMapperConfiguration.java | 8 -- .../dropship/DropshipMapperConfiguration.java | 9 -- .../mapper/DropshipCartonLedgerMapper.java | 3 + .../dropship/mapper/DropshipCartonMapper.java | 3 + .../mapper/DropshipOrderProfileMapper.java | 3 + .../mapper/DropshipSkuInventoryMapper.java | 3 + .../InboundPlanMapperConfiguration.java | 9 -- .../pda/mapper/InboundStockReceiptMapper.java | 3 + .../InventoryMapperConfiguration.java | 9 -- .../InventoryCommandMapperConfiguration.java | 9 -- .../mapper/InventoryBalanceMapper.java | 3 + .../mapper/InventoryLedgerMapper.java | 3 + .../mapper/InventoryOperationMapper.java | 3 + .../mapper/InventoryPositionMapper.java | 3 + .../InventoryQueryMapperConfiguration.java | 9 -- .../query/mapper/InventoryQueryMapper.java | 3 + .../LooseboardMapperConfiguration.java | 9 -- .../MasterDataMapperConfiguration.java | 10 -- .../pda/PdaOperationsMapperConfiguration.java | 15 --- .../ProcurementMapperConfiguration.java | 9 -- .../relabel/RelabelMapperConfiguration.java | 9 -- .../pda/PdaRelabelMapperConfiguration.java | 9 -- .../shipping/ShippingMapperConfiguration.java | 10 -- .../transfer/TransferMapperConfiguration.java | 4 - .../trucking/TruckingMapperConfiguration.java | 9 -- .../MapperRegistrationArchitectureTest.java | 30 +++++ .../MasterDataMapperConfigurationTest.java | 25 ---- .../PdaOperationsMapperConfigurationTest.java | 20 --- .../ShippingMapperConfigurationTest.java | 15 --- order/AGENTS.md | 1 + .../baiyue/order/BaiyueOrderApplication.java | 3 +- .../baiyue/order/mapper/OrderCargoMapper.java | 8 +- .../order/mapper/OrderChildPurgeMapper.java | 3 + .../mapper/OrderIdempotencyRecordMapper.java | 3 + .../order/mapper/OrderInternalNoteMapper.java | 8 +- .../com/baiyue/order/mapper/OrderMapper.java | 7 +- .../baiyue/order/mapper/OrderPartyMapper.java | 8 +- .../mapper/OrderStatusHistoryMapper.java | 8 +- .../order/mapper/OutboxEventMapper.java | 8 +- scripts/README.md | 1 + scripts/agents-index-contract.ps1 | 28 ++++ scripts/backend-full-regression.ps1 | 8 ++ .../full-regression-entry-contract.test.mjs | 5 + scripts/mapper-scan-contract.mjs | 122 ++++++++++++++++++ scripts/mapper-scan-contract.test.mjs | 10 ++ warehouse-overseas-service/AGENTS.md | 1 + .../BaiyueWarehouseOverseasApplication.java | 3 +- .../mapper/WarehouseLocationMapper.java | 3 + .../mapper/WarehousePalletBindingMapper.java | 3 + .../mapper/WarehousePalletMapper.java | 3 + .../WarehousePalletTransitionMapper.java | 3 + .../mapper/WarehouseResourceLockMapper.java | 3 + warehouse/AGENTS.md | 1 + .../warehouse/BaiyueWarehouseApplication.java | 3 +- .../DomesticContainerIdempotencyMapper.java | 3 + .../DomesticContainerInventoryMapper.java | 3 + .../mapper/DomesticContainerOrderMapper.java | 3 + .../DomesticContainerTransactionMapper.java | 3 + .../mapper/ExpressCompanyMapper.java | 3 + .../mapper/OverseasStorageFeeRuleMapper.java | 3 + .../mapper/OverseasStorageFeeTierMapper.java | 3 + .../baiyue/warehouse/mapper/PalletMapper.java | 3 + .../warehouse/mapper/PartnerMapper.java | 3 + .../mapper/ServiceCapabilityMapper.java | 3 + .../warehouse/mapper/SupplierMapper.java | 3 + .../mapper/WarehouseAddressMapper.java | 3 + .../warehouse/mapper/WarehouseMapper.java | 6 +- 107 files changed, 465 insertions(+), 271 deletions(-) create mode 100644 firstleg/src/test/java/com/baiyue/firstleg/MapperRegistrationArchitectureTest.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/delivery/DeliveryMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/discard/DiscardMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/dispatch/DispatchMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/dispatch/pda/DispatchPdaMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/dropship/DropshipMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/inboundplan/InboundPlanMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/inventory/InventoryMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/inventory/command/InventoryCommandMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/inventory/query/InventoryQueryMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/looseboard/LooseboardMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/masterdata/MasterDataMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/pda/PdaOperationsMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/procurement/ProcurementMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/relabel/RelabelMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/relabel/pda/PdaRelabelMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/shipping/ShippingMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/transfer/TransferMapperConfiguration.java delete mode 100644 lastleg-service/src/main/java/com/baiyue/lastleg/trucking/TruckingMapperConfiguration.java create mode 100644 lastleg-service/src/test/java/com/baiyue/lastleg/MapperRegistrationArchitectureTest.java delete mode 100644 lastleg-service/src/test/java/com/baiyue/lastleg/masterdata/MasterDataMapperConfigurationTest.java delete mode 100644 lastleg-service/src/test/java/com/baiyue/lastleg/pda/PdaOperationsMapperConfigurationTest.java delete mode 100644 lastleg-service/src/test/java/com/baiyue/lastleg/shipping/ShippingMapperConfigurationTest.java create mode 100644 scripts/mapper-scan-contract.mjs create mode 100644 scripts/mapper-scan-contract.test.mjs diff --git a/AGENTS.md b/AGENTS.md index d7c89d668..9718027b2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,6 +25,7 @@ | 订单、货物、快照、状态、幂等、Outbox | `order/` | `order/AGENTS.md` | | 履约分配、入库、测量、审核、FBA 计费 | `firstleg/` | `firstleg/AGENTS.md` | | Firstleg 内部模块化与依赖基线 | `firstleg/` | `firstleg/docs/firstleg-internal-modularization-baseline.md`、`firstleg/scripts/analyze-firstleg-dependencies.mjs`;价格簿查询和客户统计按端口/适配器切片,不改变服务与数据库边界 | +| Mapper 新增、移动、Bean 缺失与扫描遗漏 | 目标持久化服务 | 所有 Mapper 显式 `@Mapper`,启动类按服务根包注解过滤扫描;先运行 `node scripts/mapper-scan-contract.mjs`,再按目标模块执行 `test-compile/test`,不得等部署启动发现 | | 分柜、柜次、智能排柜、预装/装柜清单、PDA | `firstleg/` | `firstleg/AGENTS.md`,再按 `split/`、`loading/`、`outbound/` 定位 | | 智能装柜入仓码候选与箱数分配 | `firstleg/` | `controller/PlatformSmartLoadingController.java` 的 `/inbound-candidates`、`/plans/{planId}/inbound-assignments`,业务编排 `service/SmartLoadingService.java` | | 订舱、船期、拖车、报关 | `firstleg/` | `oceanbooking/`、`portschedule/`、`outbound/dispatch/`、`customs/` | @@ -78,6 +79,7 @@ - 跨服务修改先检查调用方 `client/`、被调用方 Controller/DTO、`src/main/resources/openapi/` 和双方契约测试;禁止共享领域 Entity。 - 修改 Java 方法、构造器、Controller、Client、DTO 或 Mapper 参数签名时,先用 `rg` 定向查找符号及旧参数形态,并同步更新 `src/main/`、`src/test/`、Mock、Fixture、契约测试和脚本中的全部调用点。新增可选参数也必须补齐旧测试调用,不能因生产调用已更新就视为完成。 +- 所有生产 MyBatis Mapper 接口必须显式标记 `@Mapper`;每个持久化服务只允许在启动类使用一次服务根包 `@MapperScan(..., annotationClass = Mapper.class)`,不得新增子域包白名单或分散的 `*MapperConfiguration`。新增或移动 Mapper 后先运行 `node scripts/mapper-scan-contract.mjs`,全量后端回归也会在 Maven 前执行该门禁。 - 平台后台存在正式列表页时,`*:list` 同时授权列表、详情及只读辅助接口;`create`、`edit`、`delete`、`status`、`approve`、`review`、`export`、`upload`、`complete` 等操作保持独立。当前未上线,不兼容旧独立 `*:view`,Controller 不得使用 `hasAnyAuthority(list, view)`,OpenAPI 和角色初始化只保留 `*:list`。 - 供应商查询接口固定只使用 `platform:supplier:list`;IAM 中 `platform:supplier:list` 是正式菜单资源,`platform:supplier:view` 必须停用/移除,不得重新提升或兼容。 - 权限语义变更必须同步 Controller `@PreAuthorize`、OpenAPI、模块权限 SQL、IAM 菜单资源、统一增量脚本和契约测试。并行模块任务不得覆盖菜单与权限总控已写入共享 SQL 或权限契约的改动。 @@ -86,6 +88,7 @@ - 通用配置在 `config/nacos/{local,cn}/`;服务日志、上传文件、`target/`、`reports/` 不属于源码。 - Java 签名变更的最低编译门禁是 `mvn -pl -am test-compile`,它必须在部署前完成并覆盖测试源码;有行为变化时继续运行 `mvn -pl -am test`。`-DskipTests` 可跳过测试执行但仍须保留测试编译,`-Dmaven.test.skip=true` 会跳过测试编译,不得作为签名变更的交付验证。全量验证仍使用 `mvn -DskipTests validate`、`mvn test`;不要在本地启动 Java/Nacos/数据库,除非用户明确要求。 - `AGENTS.md` 索引维护完成后运行 `./scripts/agents-index-contract.ps1`;脚本只读源码目录和指定指引,验证根快速表唯一性、部署单元、Client active 路由、四期范围漂移、仓库主档唯一权威、订舱关联候选与柜量语义、整柜出仓与船节点单调性、海外 Gateway 覆盖、PDA 运行配置/独立更新/语言预留、人工分段验收链、Lastleg 海外安全投影、同步 Trace、模块覆盖、关键入口与排除目录,不访问 HTTP、数据库或部署环境。 +- Mapper 注册静态合同为 `scripts/mapper-scan-contract.mjs`、`mapper-scan-contract.test.mjs`:自动发现聚合模块、生产 `*Mapper` 接口、服务启动类和分散扫描配置,不启动 Spring、不连接数据库;遗漏注解、扫描根漂移或重新引入子域扫描时直接失败并输出类与文件路径。 - 单服务镜像构建/部署从 `Jenkinsfile.service`、`deploy/docker/Dockerfile`、`deploy/scripts/deploy-built-service.sh` 进入;新镜像启动失败或健康检查失败时只允许回滚到同服务先前镜像,并保持任务失败,离线合同见 `scripts/deploy-built-service-rollback.test.mjs`。实际部署仍须当前对话明确授权。 ## 全量 HTTP 验收脚本路由 diff --git a/audit-service/AGENTS.md b/audit-service/AGENTS.md index be9510510..3f9ba8e89 100644 --- a/audit-service/AGENTS.md +++ b/audit-service/AGENTS.md @@ -2,6 +2,7 @@ ## 职责边界 +- Mapper 只由 `BaiyueAuditApplication.java` 对 `com.baiyue.audit` 根包按 `@Mapper` 过滤扫描;新增或移动 Mapper 后从后端根运行 `node scripts/mapper-scan-contract.mjs`,不得增加子域扫描配置。 - 负责接收 `common-audit` 产生的审计事件并持久化到 `baiyue_audit`。 - 审计注解、切面、脱敏和发送策略在 `common-audit/`;本服务不复制业务服务的审计采集逻辑。 diff --git a/audit-service/src/main/java/com/baiyue/audit/BaiyueAuditApplication.java b/audit-service/src/main/java/com/baiyue/audit/BaiyueAuditApplication.java index 4c9070ed9..8a80f655c 100644 --- a/audit-service/src/main/java/com/baiyue/audit/BaiyueAuditApplication.java +++ b/audit-service/src/main/java/com/baiyue/audit/BaiyueAuditApplication.java @@ -1,6 +1,7 @@ package com.baiyue.audit; import com.baiyue.common.core.mybatis.MybatisPlusConfiguration; +import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -10,7 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; /** * 审计微服务启动入口,初始化 Spring Boot 应用并扫描审计日志 Mapper。 */ -@MapperScan("com.baiyue.audit.mapper") +@MapperScan(basePackages = "com.baiyue.audit", annotationClass = Mapper.class) @EnableScheduling @Import(MybatisPlusConfiguration.class) @SpringBootApplication diff --git a/audit-service/src/main/java/com/baiyue/audit/mapper/AuditLogMapper.java b/audit-service/src/main/java/com/baiyue/audit/mapper/AuditLogMapper.java index 612c0e5cc..6d403debf 100644 --- a/audit-service/src/main/java/com/baiyue/audit/mapper/AuditLogMapper.java +++ b/audit-service/src/main/java/com/baiyue/audit/mapper/AuditLogMapper.java @@ -1,10 +1,13 @@ package com.baiyue.audit.mapper; +import org.apache.ibatis.annotations.Mapper; + import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baiyue.audit.entity.AuditLogEntity; /** * 审计日志 MyBatis-Plus Mapper,提供 {@code sys_audit_log} 表的单表写入和查询能力。 */ +@Mapper public interface AuditLogMapper extends BaseMapper { } diff --git a/auth/AGENTS.md b/auth/AGENTS.md index b36bad7b2..59c7b03d3 100644 --- a/auth/AGENTS.md +++ b/auth/AGENTS.md @@ -2,6 +2,7 @@ ## 职责与边界 +- Mapper 只由 `BaiyueAuthApplication.java` 对 `com.baiyue.auth` 根包按 `@Mapper` 过滤扫描;新增或移动 Mapper 后从后端根运行 `node scripts/mapper-scan-contract.mjs`,不得增加子域扫描配置。 - 负责登录、注册、账号凭据、Access/Refresh Token、退出、密码和账号归属范围。 - 客户主档、成员、角色权限归 `iam/`;Auth 通过 IAM 客户端获取授权快照,不跨库写 IAM。 - 修改国内/海外 Token、Audience、JWKS 或跨区域身份边界前,先读 `../../docs/跨区域认证与服务通信契约.md`。 diff --git a/auth/src/main/java/com/baiyue/auth/BaiyueAuthApplication.java b/auth/src/main/java/com/baiyue/auth/BaiyueAuthApplication.java index ad3d69c33..681e2de9d 100644 --- a/auth/src/main/java/com/baiyue/auth/BaiyueAuthApplication.java +++ b/auth/src/main/java/com/baiyue/auth/BaiyueAuthApplication.java @@ -1,5 +1,6 @@ package com.baiyue.auth; +import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -8,7 +9,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; /** * 认证服务启动入口,负责装配统一登录、令牌签发与会话管理相关组件。 */ -@MapperScan("com.baiyue.auth.mapper") +@MapperScan(basePackages = "com.baiyue.auth", annotationClass = Mapper.class) @EnableFeignClients(basePackages = "com.baiyue.auth.client") @SpringBootApplication(scanBasePackages = "com.baiyue") public class BaiyueAuthApplication { diff --git a/auth/src/main/java/com/baiyue/auth/mapper/AuthAccountMapper.java b/auth/src/main/java/com/baiyue/auth/mapper/AuthAccountMapper.java index 5b43f3d1d..2bae4dc75 100644 --- a/auth/src/main/java/com/baiyue/auth/mapper/AuthAccountMapper.java +++ b/auth/src/main/java/com/baiyue/auth/mapper/AuthAccountMapper.java @@ -1,9 +1,12 @@ package com.baiyue.auth.mapper; +import org.apache.ibatis.annotations.Mapper; + import com.baiyue.auth.entity.AuthAccount; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * 认证账号 MyBatis-Plus 数据访问接口,负责 {@code auth_account} 表的基础持久化操作。 */ +@Mapper public interface AuthAccountMapper extends BaseMapper { } diff --git a/auth/src/main/java/com/baiyue/auth/mapper/AuthRefreshTokenMapper.java b/auth/src/main/java/com/baiyue/auth/mapper/AuthRefreshTokenMapper.java index 7704add04..20b5a3647 100644 --- a/auth/src/main/java/com/baiyue/auth/mapper/AuthRefreshTokenMapper.java +++ b/auth/src/main/java/com/baiyue/auth/mapper/AuthRefreshTokenMapper.java @@ -1,9 +1,12 @@ package com.baiyue.auth.mapper; +import org.apache.ibatis.annotations.Mapper; + import com.baiyue.auth.entity.AuthRefreshToken; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * 刷新令牌 MyBatis-Plus 数据访问接口,负责 {@code auth_refresh_token} 表的基础持久化操作。 */ +@Mapper public interface AuthRefreshTokenMapper extends BaseMapper { } diff --git a/event-bridge-service/AGENTS.md b/event-bridge-service/AGENTS.md index 99d0553fb..71f749459 100644 --- a/event-bridge-service/AGENTS.md +++ b/event-bridge-service/AGENTS.md @@ -2,6 +2,7 @@ ## 职责边界 +- Mapper 只由 `EventBridgeApplication.java` 对 `com.baiyue.eventbridge` 根包按 `@Mapper` 过滤扫描;新增或移动 Mapper 后从后端根运行 `node scripts/mapper-scan-contract.mjs`,不得增加子域扫描配置。 - 负责跨区事件接收、Inbox 持久化、按目标区域向海外尾程或国内头程投递、失败重试、投递记录和人工补投。 - 只承载可靠传输,不执行尾程建单逻辑,不查询头程或尾程业务表。 - 事件结构和 Payload 哈希以 `common-event-contract` 为准。 diff --git a/event-bridge-service/src/main/java/com/baiyue/eventbridge/EventBridgeApplication.java b/event-bridge-service/src/main/java/com/baiyue/eventbridge/EventBridgeApplication.java index a79fbbeb9..de2dd96ba 100644 --- a/event-bridge-service/src/main/java/com/baiyue/eventbridge/EventBridgeApplication.java +++ b/event-bridge-service/src/main/java/com/baiyue/eventbridge/EventBridgeApplication.java @@ -1,6 +1,7 @@ package com.baiyue.eventbridge; import com.baiyue.eventbridge.config.EventDispatcherProperties; +import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -10,7 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; /** * 跨区域事件桥启动入口。 */ -@MapperScan("com.baiyue.eventbridge.mapper") +@MapperScan(basePackages = "com.baiyue.eventbridge", annotationClass = Mapper.class) @SpringBootApplication @EnableScheduling @EnableConfigurationProperties(EventDispatcherProperties.class) diff --git a/file/AGENTS.md b/file/AGENTS.md index e48b1b0a3..2e99c5889 100644 --- a/file/AGENTS.md +++ b/file/AGENTS.md @@ -2,6 +2,7 @@ ## 职责与边界 +- Mapper 只由 `FileServiceApplication.java` 对 `com.baiyue.file` 根包按 `@Mapper` 过滤扫描;新增或移动 Mapper 后从后端根运行 `node scripts/mapper-scan-contract.mjs`,不得增加子域扫描配置。 - 负责企业资质文件、公共导出、二期入库测量图片的上传、存储、读取和鉴权。 - 资质审核元数据归 `iam/`,入库状态归 `firstleg/`,OCR 适配归 `integration-service/`;不跨库读取业务表。 diff --git a/file/src/main/java/com/baiyue/file/FileServiceApplication.java b/file/src/main/java/com/baiyue/file/FileServiceApplication.java index 4c3deb716..9bdb9a83d 100644 --- a/file/src/main/java/com/baiyue/file/FileServiceApplication.java +++ b/file/src/main/java/com/baiyue/file/FileServiceApplication.java @@ -1,5 +1,7 @@ package com.baiyue.file; +import org.apache.ibatis.annotations.Mapper; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; @@ -9,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; * 文件中心服务启动入口。 */ @SpringBootApplication(scanBasePackages = "com.baiyue") +@MapperScan(basePackages = "com.baiyue.file", annotationClass = Mapper.class) @EnableFeignClients(basePackages = "com.baiyue.file.client") @EnableScheduling public class FileServiceApplication { diff --git a/firstleg/AGENTS.md b/firstleg/AGENTS.md index a6469d505..660334ebe 100644 --- a/firstleg/AGENTS.md +++ b/firstleg/AGENTS.md @@ -2,6 +2,7 @@ ## 职责与边界 +- Mapper 统一显式使用 `@Mapper`,仅由 `BaiyueFirstlegApplication.java` 对 `com.baiyue.firstleg` 根包按 `annotationClass = Mapper.class` 扫描;禁止恢复业务子域 Mapper 包白名单。静态门禁见根 `scripts/mapper-scan-contract.mjs`,模块内编译门禁见 `MapperRegistrationArchitectureTest.java`、`BaiyueFirstlegApplicationContractTest.java`。 - 负责履约任务/分配、入库单、测量/OCR、审核后初始计价、FBA 计费、客户在途柜量统计、国内出仓履约链路,以及四期国内出仓后的船节点查询任务和节点事实。 - 订单主数据归 `order/`,托盘/库位归 `warehouse/`,文件对象归 `file/`,OCR 供应商归 `integration-service/`;通过客户端 DTO 和内部令牌协作。 - 入库、分柜、装柜、PDA 和出仓能力均在本模块按对应服务端契约协作;`WAIT_SPLIT + APPROVED + CONFIRMED` 是入库链路状态节点,不是全量验收的范围终点。财务状态仍归 `finance`,本模块只生产不可变费用来源和柜次成本快照。 diff --git a/firstleg/src/main/java/com/baiyue/firstleg/BaiyueFirstlegApplication.java b/firstleg/src/main/java/com/baiyue/firstleg/BaiyueFirstlegApplication.java index 6804e4994..f3a095053 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/BaiyueFirstlegApplication.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/BaiyueFirstlegApplication.java @@ -1,5 +1,6 @@ package com.baiyue.firstleg; +import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,18 +10,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; /** * 头程履约微服务启动入口,负责装配履约任务组件并扫描 MyBatis-Plus Mapper。 */ -@MapperScan(basePackages = { - "com.baiyue.firstleg.mapper", - "com.baiyue.firstleg.split.mapper", - "com.baiyue.firstleg.loading.mapper", - "com.baiyue.firstleg.loading.bridge.mapper", - "com.baiyue.firstleg.oceanbooking.mapper", - "com.baiyue.firstleg.outbound.dispatch.mapper", - "com.baiyue.firstleg.portschedule.mapper", - "com.baiyue.firstleg.customs.container.mapper", - "com.baiyue.firstleg.customerstatistics.adapter.out.persistence", - "com.baiyue.firstleg.pricebookquery.adapter.out.persistence" -}) +@MapperScan(basePackages = "com.baiyue.firstleg", annotationClass = Mapper.class) @EnableFeignClients(basePackages = "com.baiyue.firstleg") @EnableScheduling @SpringBootApplication(scanBasePackages = "com.baiyue") diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/AssignmentHistoryMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/AssignmentHistoryMapper.java index dde8754ec..58fe1ca3c 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/AssignmentHistoryMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/AssignmentHistoryMapper.java @@ -1,4 +1,10 @@ -package com.baiyue.firstleg.mapper; import com.baiyue.firstleg.entity.AssignmentHistoryEntity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** +package com.baiyue.firstleg.mapper; +import org.apache.ibatis.annotations.Mapper; +import com.baiyue.firstleg.entity.AssignmentHistoryEntity; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** * 头程任务指派历史 Mapper,提供 {@code fl_assignment_history} 的 MyBatis-Plus 基础数据访问能力。 */ +@Mapper public interface AssignmentHistoryMapper extends BaseMapper{} diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/CarrierFbaRateMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/CarrierFbaRateMapper.java index b0d32f7a4..5d8427635 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/CarrierFbaRateMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/CarrierFbaRateMapper.java @@ -1,9 +1,12 @@ package com.baiyue.firstleg.mapper; + +import org.apache.ibatis.annotations.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baiyue.firstleg.entity.CarrierFbaRateEntity; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Param; +@Mapper public interface CarrierFbaRateMapper extends BaseMapper { @Delete("DELETE FROM fl_carrier_fba_rate WHERE price_book_version_id = #{versionId} AND status = 'PENDING_CONFIRMATION'") int physicallyDeletePendingByPriceBookVersionId(@Param("versionId") long versionId); diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/CustomerChargeRuleMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/CustomerChargeRuleMapper.java index e84d8c940..2f0c59d9e 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/CustomerChargeRuleMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/CustomerChargeRuleMapper.java @@ -1,4 +1,7 @@ package com.baiyue.firstleg.mapper; + +import org.apache.ibatis.annotations.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baiyue.firstleg.entity.CustomerChargeRuleEntity; +@Mapper public interface CustomerChargeRuleMapper extends BaseMapper {} diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/CustomerDimensionConfigMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/CustomerDimensionConfigMapper.java index dced299bf..92fdfb98b 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/CustomerDimensionConfigMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/CustomerDimensionConfigMapper.java @@ -1,5 +1,7 @@ package com.baiyue.firstleg.mapper; +import org.apache.ibatis.annotations.Mapper; + import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baiyue.firstleg.entity.CustomerDimensionConfigEntity; import org.apache.ibatis.annotations.Delete; @@ -9,6 +11,7 @@ import org.apache.ibatis.annotations.Select; import java.util.List; +@Mapper public interface CustomerDimensionConfigMapper extends BaseMapper { @Insert("""