国际货运代理 SaaS 平台 - 完整技术架构设计
版本: v1.0 | 日期: 2026-06-01 | 适用规模: 中大型多租户 SaaS 平台(支持数千商家入驻)
1. 系统整体架构
1.1 架构总览图(文字描述)
1.2 架构分层说明
| 层级 |
组件 |
核心职责 |
| 接入层 |
CDN / WAF / DNS / API Gateway |
流量接入、DDoS防护、路由分发、负载均衡、限流熔断、统一鉴权 |
| 应用层 |
Vue3/React前端 + Java/Go微服务 |
业务逻辑处理,按领域(DDD)拆分为独立微服务 |
| 中间件层 |
Nacos / RocketMQ / Redis / ES / Sentinel |
服务发现、配置中心、异步解耦、分布式缓存、全文检索、流量控制 |
| 数据层 |
MySQL / MongoDB / MinIO / ClickHouse / Redis |
结构化主数据、文档日志、文件对象、OLAP分析、高速缓存 |
| 基础设施 |
K8s / Docker / Jenkins / Prometheus / Grafana / ELK |
容器编排、持续集成部署、全链路监控告警、集中日志 |
1.3 多租户架构模式
采用 共享数据库 + 共享Schema + TenantId行级隔离 方案:
- 所有业务表均包含
tenant_id 字段
- 每条SQL查询自动追加
WHERE tenant_id = ? 条件(MyBatis拦截器实现)
- 敏感财务数据支持VIP租户独立物理库隔离
- 适用规模:数千租户级别,运维成本低,资源共享率高
2. 微服务拆分方案(共11个核心服务)
2.1 服务清单
| # |
服务名 |
端口 |
核心职责 |
关键依赖 |
| 1 |
logistics-tenant-service |
8001 |
商家入驻审核、租户信息CRUD、套餐订阅、RBAC权限、组织架构 |
MySQL, Redis, OSS, MQ |
| 2 |
logistics-order-service |
8002 |
运单全生命周期、多运输方式(FCL/LCL/空运/陆运/联运)、状态机管理、费用项、物流轨迹 |
MySQL, Redis, MQ, ES |
| 3 |
logistics-freight-service |
8003 |
船期维护、海运费率体系(基价+附加费BAF/CAF/DDC/THC等)、询价报价流程、合约特价管理 |
MySQL, Redis, ES, MQ |
| 4 |
logistics-customs-duty-service |
8004 |
HS编码库(中英模糊匹配)、各国税率表(关税/VAT/消费税/反倾销税)、关税预估计算引擎、退税管理、保税政策适配 |
MySQL, Redis, ES(全文检索HS) |
| 5 |
logistics-warehouse-service |
8005 |
仓库/库区/货位基础数据、入库(收货预约/检验/上架)、出库(拣货策略/复核打包)、库存(实时/冻结/调整)、盘点、装箱打托 |
MySQL, Redis(热点库存), MQ |
| 6 |
logistics-clearance-service |
8006 |
报关单(进口/出口/转关/退运)、报关要素采集、单证管理(发票/箱单/合同/CO)、商检、海关单一窗口对接(预留)、异常处理(改单删单担保放行) |
MySQL, Redis, OSS, MQ |
| 7 |
logistics-finance-service |
8007 |
应收AR/应付AP、对账单生成(月结/票票对账)、发票管理(开票/作废/红冲)、收付款核销(部分核销/预收款)、成本利润核算 |
MySQL, Redis, MQ(事件驱动对账) |
| 8 |
logistics-notification-service |
8008 |
站内消息、短信验证码/业务通知、邮件对账单/回执、微信钉钉推送、消息模板变量替换、投递状态追踪 |
MySQL, Redis, MQ(异步发送) |
| 9 |
logistics-dashboard-service |
8009 |
业务统计看板(订单量/收入/利润趋势)、运营监控大屏、客户画像(TOP客户/流失预警/RFM)、自定义报表拖拽引擎、Excel/PDF导出 |
ClickHouse, MySQL, Redis缓存, ES |
| 10 |
logistics-file-service |
8010 |
文件上传下载(单证/合同/资质)、在线预览(PDF/Office/图片)、版本管理、报表模板(JasperReports)、异步批量导出、图片压缩缩略图 |
MinIO/Aliyun-OSS, Redis |
| 11 |
logistics-auth-service |
8011 |
注册登录(密码/手机/OAuth)、JWT签发校验、多租户身份注入TenantContext、RBAC接口鉴权、SSO单点登录、操作审计 |
MySQL, Redis(Token黑名单) |
2.2 服务间调用关系
2.3 通信规范
| 场景 |
方式 |
协议 |
说明 |
| 同步调用(服务间) |
OpenFeign / gRPC |
HTTP2 / Protocol Buffers |
核心链路同步调用 |
| 异步事件 |
RocketMQ |
AMQP |
状态变更通知、对账触发、消息解耦 |
| 前后端通信 |
HTTP RESTful |
JSON |
通过API网关统一入口 |
3. 数据库核心表设计
3.1 ER 关系总览
3.2 核心表 DDL
以下为所有核心业务表的完整 DDL 定义,涵盖8大模块。
(A) 商家/租户模块
-- ========================================
-- 租户主表
-- ========================================
CREATE TABLE tenant (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_code VARCHAR(32) NOT NULL UNIQUE COMMENT '租户唯一编码',
company_name VARCHAR(200) NOT NULL COMMENT '公司名称',
company_name_en VARCHAR(200) DEFAULT NULL COMMENT '公司英文名',
uniform_credit_code VARCHAR(50) DEFAULT NULL COMMENT '统一社会信用代码',
contact_person VARCHAR(50) DEFAULT NULL COMMENT '联系人',
contact_phone VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
contact_email VARCHAR(100) DEFAULT NULL,
address VARCHAR(500) DEFAULT NULL,
business_license_url VARCHAR(500) DEFAULT NULL COMMENT '营业执照URL',
status TINYINT NOT NULL DEFAULT 0 COMMENT '0待审核 1正常 2停用 3注销',
tier TINYINT NOT NULL DEFAULT 0 COMMENT '0免费 1标准 2专业 3企业',
expire_time DATETIME DEFAULT NULL COMMENT '套餐到期时间',
max_users INT NOT NULL DEFAULT 10 COMMENT '最大用户数',
timezone VARCHAR(32) DEFAULT 'Asia/Shanghai',
locale VARCHAR(16) DEFAULT 'zh_CN',
config_json JSON DEFAULT NULL COMMENT '扩展配置JSON',
remark VARCHAR(500) DEFAULT NULL,
created_by BIGINT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT NOT NULL DEFAULT 0,
INDEX idx_tenant_code (tenant_code),
INDEX idx_status (status),
INDEX idx_tier (tier)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户主表';
-- ========================================
-- 租户用户表
-- ========================================
CREATE TABLE tenant_user (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL COMMENT '归属租户ID',
username VARCHAR(64) NOT NULL COMMENT '登录名',
password_hash VARCHAR(256) NOT NULL COMMENT 'BCrypt密码哈希',
real_name VARCHAR(50) DEFAULT NULL,
phone VARCHAR(20) DEFAULT NULL,
email VARCHAR(100) DEFAULT NULL,
avatar_url VARCHAR(500) DEFAULT NULL,
role_id BIGINT DEFAULT NULL COMMENT '角色ID',
dept_id BIGINT DEFAULT NULL COMMENT '部门ID',
status TINYINT NOT NULL DEFAULT 1 COMMENT '0禁用 1正常',
last_login_at DATETIME DEFAULT NULL,
last_login_ip VARCHAR(45) DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT NOT NULL DEFAULT 0,
UNIQUE KEY uk_tenant_username (tenant_id, username),
INDEX idx_tenant_id (tenant_id),
INDEX idx_phone (phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户用户表';
-- RBAC角色与菜单关联表略(tenant_role, tenant_role_menu)
(B) 运单/订单模块(核心大表)
-- ========================================
-- 运单主表 (系统最核心的表)
-- ========================================
CREATE TABLE shipment_order (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
order_no VARCHAR(40) NOT NULL COMMENT '运单编号(业务单号)',
reference_no VARCHAR(100) DEFAULT NULL COMMENT '客户参考号',
transport_mode TINYINT NOT NULL COMMENT '1海运整箱 2海运拼箱 3空运 4陆运 5多式联运',
business_type TINYINT NOT NULL COMMENT '1进口 2出口 3内贸',
-- 发货方信息
shipper_name VARCHAR(200) NOT NULL,
shipper_address VARCHAR(500) DEFAULT NULL,
shipper_contact VARCHAR(50) DEFAULT NULL,
shipper_phone VARCHAR(20) DEFAULT NULL,
-- 收货方信息
consignee_name VARCHAR(200) NOT NULL,
consignee_address VARCHAR(500) DEFAULT NULL,
consignee_contact VARCHAR(50) DEFAULT NULL,
consignee_phone VARCHAR(20) DEFAULT NULL,
-- 港口/航站
pol VARCHAR(20) DEFAULT NULL COMMENT '装货港 POL',
pod VARCHAR(20) DEFAULT NULL COMMENT '卸货港 POD',
place_of_receipt VARCHAR(20) DEFAULT NULL COMMENT '收货地',
place_of_delivery VARCHAR(20) DEFAULT NULL COMMENT '最终目的地',
-- 时间节点
etd DATE DEFAULT NULL COMMENT '预计出发 ETD',
eta DATE DEFAULT NULL COMMENT '预计到达 ETA',
atd DATE DEFAULT NULL COMMENT '实际出发 ATD',
ata DATE DEFAULT NULL COMMENT '实际到达 ATA',
-- 船舶航班信息
vessel_name VARCHAR(100) DEFAULT NULL COMMENT '船名/航班号',
voyage_no VARCHAR(30) DEFAULT NULL COMMENT '航次号',
mbl_no VARCHAR(50) DEFAULT NULL COMMENT '主提单号 MBL',
hbl_no VARCHAR(50) DEFAULT NULL COMMENT '分提单号 HBL',
-- 货物概要
container_count INT DEFAULT 0 COMMENT '箱量',
container_type VARCHAR(20) DEFAULT NULL COMMENT '箱型 20GP/40GP/40HC等',
gross_weight DECIMAL(14,4) DEFAULT NULL COMMENT '总毛重KG',
volume DECIMAL(14,4) DEFAULT NULL COMMENT '总体积CBM',
package_count INT DEFAULT 0 COMMENT '总件数',
-- 费用汇总
total_revenue DECIMAL(14,2) DEFAULT 0.00 COMMENT '应收总额',
total_cost DECIMAL(14,2) DEFAULT 0.00 COMMENT '应付总额',
estimated_profit DECIMAL(14,2) DEFAULT 0.00 COMMENT '预估毛利',
currency CHAR(3) DEFAULT 'CNY' COMMENT '币种',
-- 状态字段
order_status TINYINT NOT NULL DEFAULT 0 COMMENT '0草稿 1已确认 2已订舱 3已报关 4运输中 5到港待提 6已完成 7已取消',
payment_status TINYINT DEFAULT 0 COMMENT '0未结清 1部分结清 2已结清',
priority TINYINT DEFAULT 0 COMMENT '0普通 1紧急 2加急',
-- 人员关联
salesman_id BIGINT DEFAULT NULL COMMENT '销售员ID',
operator_id BIGINT DEFAULT NULL COMMENT '操作员ID',
customer_id BIGINT DEFAULT NULL COMMENT '客户档案ID',
-- 备注
internal_remark VARCHAR(1000) DEFAULT NULL,
customer_remark VARCHAR(1000) DEFAULT NULL,
tags JSON DEFAULT NULL COMMENT '标签JSON数组',
created_by BIGINT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT NOT NULL DEFAULT 0,
UNIQUE KEY uk_tenant_order (tenant_id, order_no),
INDEX idx_status (order_status),
INDEX idx_customer (customer_id),
INDEX idx_etd_eta (etd, eta),
INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='运单主表';
-- ========================================
-- 运单货物明细表
-- ========================================
CREATE TABLE order_item (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_id BIGINT NOT NULL,
item_no INT NOT NULL COMMENT '序号',
hs_code VARCHAR(20) DEFAULT NULL COMMENT 'HS编码',
description_cn VARCHAR(500) NOT NULL COMMENT '中文品名',
description_en VARCHAR(500) DEFAULT NULL COMMENT '英文品名',
material VARCHAR(100) DEFAULT NULL COMMENT '材质',
usage VARCHAR(200) DEFAULT NULL COMMENT '用途',
brand_model VARCHAR(200) DEFAULT NULL COMMENT '品牌型号',
package_type VARCHAR(20) DEFAULT NULL COMMENT '包装类型 CTN/PAL/SKID',
quantity DECIMAL(14,2) NOT NULL COMMENT '数量',
unit VARCHAR(10) DEFAULT 'PCS' COMMENT '单位',
unit_price DECIMAL(14,4) DEFAULT NULL COMMENT '单价USD',
total_value DECIMAL(14,2) DEFAULT NULL COMMENT '总价申报价值',
currency CHAR(3) DEFAULT 'USD',
gross_weight DECIMAL(14,4) DEFAULT NULL COMMENT '毛重KG',
net_weight DECIMAL(14,4) DEFAULT NULL COMMENT '净重KG',
volume DECIMAL(14,4) DEFAULT NULL COMMENT '体积CBM',
marks_numbers VARCHAR(500) DEFAULT NULL COMMENT '唛头',
origin_country VARCHAR(10) DEFAULT NULL COMMENT '原产国',
remark VARCHAR(500) DEFAULT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_order_id (order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='运单货物明细';
-- ========================================
-- 运单集装箱明细
-- ========================================
CREATE TABLE order_container (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_id BIGINT NOT NULL,
container_no VARCHAR(20) NOT NULL COMMENT '柜号',
container_type VARCHAR(10) NOT NULL COMMENT '箱型',
seal_no VARCHAR(20) DEFAULT NULL COMMENT '封条号',
pkg_count INT DEFAULT 0 COMMENT '件数',
gross_weight DECIMAL(14,4) DEFAULT NULL COMMENT '毛重',
volume DECIMAL(14,4) DEFAULT NULL COMMENT '体积CBM',
cargo_desc VARCHAR(500) DEFAULT NULL COMMENT '货物品名描述',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_order_id (order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='运单集装箱明细';
-- ========================================
-- 物流轨迹表
-- ========================================
CREATE TABLE order_tracking (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
order_id BIGINT NOT NULL,
track_time DATETIME NOT NULL COMMENT '轨迹时间',
track_status VARCHAR(30) NOT NULL COMMENT '状态码',
track_desc VARCHAR(500) NOT NULL COMMENT '轨迹描述',
track_location VARCHAR(100) DEFAULT NULL COMMENT '地点',
track_source VARCHAR(20) DEFAULT NULL COMMENT '来源 MANUAL/API/CARRIER',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_order_id (order_id),
INDEX idx_track_time (track_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='物流轨迹表';
(C) 报关单模块
-- ========================================
-- 报关单主表
-- ========================================
CREATE TABLE customs_declaration (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
decl_no VARCHAR(40) NOT NULL COMMENT '报关单号预录入号',
order_id BIGINT DEFAULT NULL COMMENT '关联运单',
decl_type TINYINT NOT NULL COMMENT '1进口 2出口 3转关 4退运',
trade_mode VARCHAR(10) DEFAULT NULL COMMENT '贸易方式 一般贸易/加工贸易/保税',
tax_mode VARCHAR(10) DEFAULT NULL COMMENT '征免性质',
ie_port VARCHAR(10) DEFAULT NULL COMMENT '进出境口岸',
destination_country VARCHAR(10) DEFAULT NULL COMMENT '运抵国/运往国',
license_no VARCHAR(50) DEFAULT NULL COMMENT '许可证号',
contract_no VARCHAR(50) DEFAULT NULL COMMENT '合同协议号',
invoice_no VARCHAR(50) DEFAULT NULL COMMENT '发票号码',
bill_lading_no VARCHAR(50) DEFAULT NULL COMMENT '提运单号',
-- 货物汇总
total_packages INT DEFAULT 0,
package_type VARCHAR(10) DEFAULT NULL COMMENT '包装种类',
gross_weight DECIMAL(14,4) DEFAULT NULL COMMENT '毛重KG',
net_weight DECIMAL(14,4) DEFAULT NULL COMMENT '净重KG',
total_value_usd DECIMAL(14,2) DEFAULT NULL COMMENT '总价USD',
-- 税费
customs_duty DECIMAL(14,2) DEFAULT 0.00 COMMENT '关税额',
value_added_tax DECIMAL(14,2) DEFAULT 0.00 COMMENT '增值税额',
consumption_tax DECIMAL(14,2) DEFAULT 0.00 COMMENT '消费税额',
total_tax DECIMAL(14,2) DEFAULT 0.00 COMMENT '税费合计',
-- 状态
decl_status TINYINT DEFAULT 0 COMMENT '0草稿 1待申报 2已申报 3审单通过 4布控查验 5放行 6异常',
customs_entry_id VARCHAR(50) DEFAULT NULL COMMENT '海关通关编号',
decl_date DATE DEFAULT NULL COMMENT '申报日期',
release_date DATE DEFAULT NULL COMMENT '放行日期',
-- 申报单位
declarer_company VARCHAR(200) DEFAULT NULL,
declarer_contact VARCHAR(50) DEFAULT NULL COMMENT '申报员',
remark VARCHAR(1000) DEFAULT NULL,
created_by BIGINT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT DEFAULT 0,
UNIQUE KEY uk_tenant_decl (tenant_id, decl_no),
INDEX idx_order_id (order_id),
INDEX idx_status (decl_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报关单主表';
-- 报关单货物明细(customs_decl_item)和附件表(customs_decl_document)DDL略
(D) 仓库作业模块
-- ========================================
-- 仓库主表 & 库位表
-- ========================================
CREATE TABLE warehouse (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
warehouse_code VARCHAR(32) NOT NULL,
warehouse_name VARCHAR(100) NOT NULL,
warehouse_type TINYINT DEFAULT 1 COMMENT '1普通仓 2保税仓 3监管仓 4冷藏仓',
address VARCHAR(500) DEFAULT NULL,
area_sqm DECIMAL(12,2) DEFAULT NULL COMMENT '面积平方米',
status TINYINT DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT DEFAULT 0,
UNIQUE KEY uk_tenant_wh (tenant_id, warehouse_code)
);
CREATE TABLE warehouse_location (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
warehouse_id BIGINT NOT NULL,
zone_code VARCHAR(20) DEFAULT NULL COMMENT '库区',
shelf_code VARCHAR(20) DEFAULT NULL COMMENT '货架',
location_code VARCHAR(32) NOT NULL COMMENT '库位编码唯一',
location_type TINYINT DEFAULT 1 COMMENT '1地面 2货架 3拣货位 4存储位',
length_mm INT DEFAULT NULL,
width_mm INT DEFAULT NULL,
height_mm INT DEFAULT NULL,
max_weight_kg DECIMAL(10,2) DEFAULT NULL COMMENT '最大承重KG',
status TINYINT DEFAULT 1 COMMENT '0占用 1可用 2锁定 3故障',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_wh_loc (warehouse_id, location_code)
);
-- ========================================
-- 商品SKU主档
-- ========================================
CREATE TABLE product_sku (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
sku_code VARCHAR(64) NOT NULL,
sku_name VARCHAR(200) NOT NULL,
category_id BIGINT DEFAULT NULL,
hs_code VARCHAR(20) DEFAULT NULL,
brand VARCHAR(100) DEFAULT NULL,
specification VARCHAR(300) DEFAULT NULL,
length_mm INT DEFAULT NULL,
width_mm INT DEFAULT NULL,
height_mm INT DEFAULT NULL,
weight_kg DECIMAL(10,4) DEFAULT NULL,
volume_cbm DECIMAL(10,6) DEFAULT NULL,
barcode VARCHAR(64) DEFAULT NULL,
image_url VARCHAR(500) DEFAULT NULL,
status TINYINT DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT DEFAULT 0,
UNIQUE KEY uk_tenant_sku (tenant_id, sku_code)
);
-- ========================================
-- 库存表 (高频读写核心表)
-- ========================================
CREATE TABLE inventory (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
warehouse_id BIGINT NOT NULL,
location_id BIGINT NOT NULL COMMENT '库位ID',
sku_id BIGINT NOT NULL,
batch_no VARCHAR(50) DEFAULT NULL COMMENT '批次号',
qty_available DECIMAL(14,4) NOT NULL DEFAULT 0 COMMENT '可用数量',
qty_frozen DECIMAL(14,4) NOT NULL DEFAULT 0 COMMENT '冻结数量',
qty_total DECIMAL(14,4) NOT NULL DEFAULT 0 COMMENT '总数量',
production_date DATE DEFAULT NULL COMMENT '生产日期',
expiry_date DATE DEFAULT NULL COMMENT '过期日期',
unit_cost DECIMAL(14,4) DEFAULT NULL COMMENT '单位成本',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY uk_inv_batch (tenant_id, warehouse_id, location_id, sku_id, batch_no),
INDEX idx_sku (sku_id),
INDEX idx_warehouse (warehouse_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='库存表';
-- ========================================
-- 入库单 & 出库单 (warehouse_receipt / warehouse_shipment 及其明细表 DDL略)
-- ========================================
-- ========================================
-- 库存变动流水表 (只追加不修改)
-- ========================================
CREATE TABLE inventory_transaction (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
inventory_id BIGINT NOT NULL,
tran_type VARCHAR(20) NOT NULL COMMENT 'RECEIPT/SHIPMENT/ADJUST/FROZEN/UNFROZEN/COUNT',
ref_no VARCHAR(40) DEFAULT NULL COMMENT '关联单号',
qty_before DECIMAL(14,4) NOT NULL,
qty_change DECIMAL(14,4) NOT NULL COMMENT '变动数量正负',
qty_after DECIMAL(14,4) NOT NULL,
cost_before DECIMAL(14,4) DEFAULT 0,
cost_change DECIMAL(14,4) DEFAULT 0,
cost_after DECIMAL(14,4) DEFAULT 0,
remark VARCHAR(255) DEFAULT NULL,
created_by BIGINT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_inventory_id (inventory_id),
INDEX idx_ref_no (ref_no),
INDEX idx_created (created_at)
);
(E) 海运费模块
-- 港口基础数据(base_port), 航线(shipping_route) DDL略
-- ========================================
-- 海运费率表 (核心定价表)
-- ========================================
CREATE TABLE freight_rate (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL COMMENT '所属租户 全局价为0',
rate_name VARCHAR(100) NOT NULL,
rate_type TINYINT NOT NULL COMMENT '1合约价 2市场价 3特价',
carrier_id BIGINT DEFAULT NULL,
carrier_name VARCHAR(100) DEFAULT NULL,
pol VARCHAR(10) NOT NULL COMMENT '起运港',
pod VARCHAR(10) NOT NULL COMMENT '目的港',
route_id BIGINT DEFAULT NULL,
container_type VARCHAR(10) NOT NULL COMMENT '20GP/40GP/40HC/40NR/45HC',
base_rate DECIMAL(12,2) NOT NULL COMMENT '基础运价USD',
currency CHAR(3) DEFAULT 'USD',
effective_from DATE NOT NULL COMMENT '生效起始',
effective_to DATE DEFAULT NULL COMMENT '生效截止NULL长期',
cut_off_day INT DEFAULT 0 COMMENT '截关天数开船前N天',
transit_days INT DEFAULT NULL COMMENT '航程天',
schedule VARCHAR(200) DEFAULT NULL COMMENT '船期频率',
status TINYINT DEFAULT 1 COMMENT '0停用 1启用 2已过期',
priority INT DEFAULT 0 COMMENT '优先级越大越优先',
remark VARCHAR(500) DEFAULT NULL,
created_by BIGINT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT DEFAULT 0,
INDEX idx_pol_pod (pol, pod),
INDEX idx_container (container_type),
INDEX idx_effective (effective_from, effective_to),
INDEX idx_tenant_carrier (tenant_id, carrier_id)
) COMMENT='海运费率表';
-- ========================================
-- 附加费率表 (BAF/CAF/THC/DDC/DOC/WRS/SEAL等)
-- ========================================
CREATE TABLE surcharge (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
freight_rate_id BIGINT NOT NULL,
surcharge_code VARCHAR(20) NOT NULL COMMENT '附加费代码',
surcharge_name VARCHAR(50) NOT NULL,
calc_method TINYINT NOT NULL DEFAULT 1 COMMENT '1固定金额 2按箱 3按吨 4按运价百分比',
amount DECIMAL(12,4) DEFAULT 0,
currency CHAR(3) DEFAULT 'USD',
effective_from DATE NOT NULL,
effective_to DATE DEFAULT NULL,
status TINYINT DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_freight_rate_id (freight_rate_id)
) COMMENT='附加费率表';
-- 询价报价单(freight_quote)和承运商供应商(carrier_supplier)表DDL略
(F) 关税模块
-- ========================================
-- HS编码主表 (支持全文检索)
-- ========================================
CREATE TABLE hs_code (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
hs_code VARCHAR(20) NOT NULL COMMENT '如 6109.10.00',
version_year VARCHAR(4) DEFAULT '2026',
description_cn VARCHAR(500) NOT NULL COMMENT '中文名称',
description_en VARCHAR(500) DEFAULT NULL COMMENT '英文名称',
unit_1 VARCHAR(20) DEFAULT NULL COMMENT '法定第一计量单位',
unit_2 VARCHAR(20) DEFAULT NULL COMMENT '法定第二计量单位',
elements TEXT DEFAULT NULL COMMENT '申报要素JSON结构化',
ciq_elements TEXT DEFAULT NULL COMMENT 'CIQ申报要素',
supervision_cond VARCHAR(200) DEFAULT NULL COMMENT '监管条件A入境B出境等',
category_path VARCHAR(200) DEFAULT NULL COMMENT '分类路径',
import_tax_note VARCHAR(500) DEFAULT NULL,
export_tax_note VARCHAR(500) DEFAULT NULL,
status TINYINT DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FULLTEXT INDEX ft_hs_desc (description_cn, description_en),
UNIQUE KEY uk_hs_version (hs_code, version_year)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='HS编码主表';
-- ========================================
-- 关税税率表
-- ========================================
CREATE TABLE customs_tariff (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
hs_code VARCHAR(20) NOT NULL,
version_year VARCHAR(4) DEFAULT '2026',
country_code VARCHAR(10) NOT NULL COMMENT '目标国家地区',
country_name VARCHAR(50) DEFAULT NULL,
trade_type VARCHAR(10) DEFAULT 'IMPORT' COMMENT 'IMPORT/EXPORT',
mfn_duty_rate DECIMAL(8,6) DEFAULT 0 COMMENT '最惠国税率',
general_duty_rate DECIMAL(8,6) DEFAULT 0 COMMENT '普通税率',
preferential_duty_rate DECIMAL(8,6) DEFAULT 0 COMMENT '协定优惠税率',
vat_rate DECIMAL(8,6) DEFAULT 0 COMMENT '增值税率',
consumption_tax_rate DECIMAL(8,6) DEFAULT 0 COMMENT '消费税税率',
anti_dumping_duty DECIMAL(8,6) DEFAULT 0 COMMENT '反倾销税税率',
effective_from DATE NOT NULL,
effective_to DATE DEFAULT NULL,
policy_note VARCHAR(500) DEFAULT NULL COMMENT 'FTA优惠安排等',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_hs_country (hs_code, country_code),
INDEX idx_country (country_code)
) COMMENT='关税税率表';
-- 关税预估记录(duty_estimate)表DDL略
(G) 财务结算模块
-- ========================================
-- 财务账单主表 (AR/AP)
-- ========================================
CREATE TABLE finance_bill (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
bill_no VARCHAR(40) NOT NULL COMMENT '账单编号',
bill_type TINYINT NOT NULL COMMENT '1应收AR 2应付AP',
bill_category VARCHAR(20) DEFAULT NULL COMMENT 'FREIGHT/CUSTOMS/WAREHOUSE/SURCHARGE/OTHER',
order_id BIGINT DEFAULT NULL COMMENT '关联运单',
partner_id BIGINT NOT NULL COMMENT '往来单位ID',
partner_name VARCHAR(200) DEFAULT NULL,
partner_type TINYINT DEFAULT 1 COMMENT '1客户 2供应商',
subtotal DECIMAL(14,2) DEFAULT 0.00,
tax_amount DECIMAL(14,2) DEFAULT 0.00,
total_amount DECIMAL(14,2) NOT NULL,
currency CHAR(3) DEFAULT 'CNY',
exchange_rate DECIMAL(12,6) DEFAULT 1.000000,
cny_amount DECIMAL(14,2) DEFAULT NULL COMMENT '折合人民币',
billing_period_start DATE DEFAULT NULL,
billing_period_end DATE DEFAULT NULL,
due_date DATE DEFAULT NULL COMMENT '到期日',
bill_status TINYINT DEFAULT 0 COMMENT '0待审核 1已确认 2部分结清 3已结清 4作废',
paid_amount DECIMAL(14,2) DEFAULT 0.00,
unpaid_amount DECIMAL(14,2) GENERATED ALWAYS AS (total_amount - paid_amount) STORED,
invoice_no VARCHAR(50) DEFAULT NULL,
remark VARCHAR(500) DEFAULT NULL,
confirmed_by BIGINT DEFAULT NULL,
confirmed_at DATETIME DEFAULT NULL,
created_by BIGINT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT DEFAULT 0,
UNIQUE KEY uk_tenant_bill (tenant_id, bill_no),
INDEX idx_partner (partner_id),
INDEX idx_status (bill_status),
INDEX idx_due_date (due_date)
) COMMENT='财务账单主表';
-- ========================================
-- 结算核销记录表
-- ========================================
CREATE TABLE finance_settlement (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
settlement_no VARCHAR(40) NOT NULL,
settlement_type TINYINT NOT NULL COMMENT '1收款 2付款 3退款 4调整',
bill_id BIGINT DEFAULT NULL,
partner_id BIGINT NOT NULL,
partner_name VARCHAR(200) DEFAULT NULL,
settlement_amount DECIMAL(14,2) NOT NULL,
currency CHAR(3) DEFAULT 'CNY',
payment_method VARCHAR(20) DEFAULT NULL COMMENT 'CASH/BANK_TRANSFER/CHECK/ALIPAY/WECHAT',
account_name VARCHAR(100) DEFAULT NULL,
account_number VARCHAR(50) DEFAULT NULL,
bank_name VARCHAR(100) DEFAULT NULL,
transaction_ref VARCHAR(50) DEFAULT NULL COMMENT '交易流水号',
transaction_date DATE DEFAULT NULL,
settlement_status TINYINT DEFAULT 0 COMMENT '0待审核 1已审核 2已驳回',
attachment_url VARCHAR(500) DEFAULT NULL COMMENT '凭证附件',
remark VARCHAR(500) DEFAULT NULL,
approved_by BIGINT DEFAULT NULL,
approved_at DATETIME DEFAULT NULL,
created_by BIGINT DEFAULT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT DEFAULT 0,
UNIQUE KEY uk_tenant_settle (tenant_id, settlement_no),
INDEX idx_bill_id (bill_id)
) COMMENT='结算核销记录表';
-- 发票(finance_invoice)和账单明细(finance_bill_item)表DDL略
3.3 分库分表策略
4. 核心业务流程
4.1 商家入驻流程
4.2 一票货运完整流程(海运出口为例)-- 最核心流程
4.3 运单状态机定义
4.4 财务结算流程
4.5 关税预估流程
5. 技术选型建议
5.1 技术选型总览
| 层级 |
技术选型 |
备选方案 |
选型理由 |
| 前端框架 |
Vue 3 + TypeScript + Vite |
React + Next.js |
国内货代行业Vue生态更成熟,学习曲线平缓 |
| UI组件库 |
Element Plus |
Ant Design Vue |
企业级后台首选,组件丰富 |
| 移动端 |
uni-app (Vue3) |
Flutter/Taro |
一套代码多端发布(小程序/H5/App) |
| 构建工具 |
Vite 5.x |
Webpack |
开发体验好,HMR极快 |
| 后端框架 |
Spring Boot 3.2 + Spring Cloud Alibaba 2023 |
Go (Gin/Kratos) |
生态成熟,微服务体系完善,团队易招聘 |
| ORM框架 |
MyBatis-Plus |
JPA/Hibernate |
SQL灵活可控,适合复杂业务查询 |
| API网关 |
Spring Cloud Gateway |
Kong / APISIX |
与Spring Cloud生态无缝集成 |
| 注册/配置中心 |
Nacos 2.x |
Consul / Eureka |
阿里开源,功能全面,中文社区活跃 |
| 消息队列 |
RocketMQ 5.x |
Kafka / RabbitMQ |
事务消息支持,适合金融场景 |
| 分布式缓存 |
Redis 7.x Cluster |
Hazelcast |
数据结构丰富,性能卓越 |
| 搜索引擎 |
Elasticsearch 8.x |
OpenSearch |
HS编码全文检索、日志检索必备 |
| 关系数据库 |
PostgreSQL / MySQL 8.0 |
TiDB |
成熟稳定,分库分表方案成熟 |
| 时序/OLAP |
ClickHouse |
Druid/Doris |
报表聚合分析,查询速度极快 |
| 对象存储 |
MinIO (私有化) / Aliyun OSS (云端) |
AWS S3 |
文档单证存储 |
| 文档数据库 |
MongoDB |
- |
存储非结构化日志和文件元数据 |
| 容器编排 |
Kubernetes 1.28+ |
Docker Swarm |
行业标准,云原生必备 |
| CI/CD |
GitLab CI / Jenkins |
GitHub Actions |
流水线自动化 |
| 监控 |
Prometheus + Grafana |
Datadog |
开源标配,指标采集丰富 |
| 日志 |
PLFK (Loki) 或 ELK (Elasticsearch+Logstash+Kibana) |
日志集中收集与分析 |
|
| 链路追踪 |
SkyWalking / Zipkin |
Jaeger |
分布式调用链路可视化 |
5.2 前端技术栈详细说明
5.3 后端技术栈详细说明
6. API 设计概要
6.1 API 设计规范
6.2 各模块 API 清单
(A) 认证模块 /auth
| 方法 |
路径 |
说明 |
| POST |
/auth/login |
用户登录(账号密码) |
| POST |
/auth/login/sms |
手机验证码登录 |
| POST |
/auth/register |
商家注册(提交入驻申请) |
| POST |
/auth/logout |
登出(Token加入黑名单) |
| POST |
/auth/token/refresh |
刷新Token |
| POST |
/auth/password/reset |
重置密码 |
| GET |
/auth/captcha |
获取图形验证码 |
| POST |
/auth/sms/code |
发送短信验证码 |
| GET |
/auth/user/info |
获取当前用户信息 |
| PUT |
/auth/user/password |
修改密码 |
| GET |
/auth/user/menus |
获取当前用户菜单权限 |
| POST |
/auth/oauth/{provider} |
第三方OAuth登录(微信/钉钉) |
(B) 租户/商家模块 /tenant
| 方法 |
路径 |
说明 |
| GET |
/tenant/profile |
获取当前租户信息 |
| PUT |
/tenant/profile |
更新租户信息 |
| POST |
/tenant/upload/license |
上传营业执照 |
| GET |
/tenant/users |
用户列表(分页) |
| POST |
/tenant/users |
新增用户 |
| PUT |
/tenant/users/{id} |
编辑用户 |
| DELETE |
/tenant/users/{id} |
删除用户(禁用) |
| PUT |
/tenant/users/{id}/password |
重置用户密码 |
| PUT |
/tenant/users/{id}/status |
启用/禁用用户 |
| GET |
/tenant/roles |
角色列表 |
| POST |
/tenant/roles |
新增角色 |
| PUT |
/tenant/roles/{id} |
编辑角色 |
| DELETE |
/tenant/roles/{id} |
删除角色 |
| PUT |
/tenant/roles/{id}/menus |
分配角色菜单权限 |
| GET |
/tenant/depts |
组织架构树 |
| POST |
/tenant/depts |
新增部门 |
| PUT |
/tenant/depts/{id} |
编辑部门 |
| GET |
/tenant/packages |
可用套餐列表 |
| POST |
/tenant/upgrade |
升级/续费套餐 |
| GET |
/tenant/usage |
租户用量统计 |
| GET |
/tenant/config |
获取租户配置 |
| PUT |
/tenant/config |
更新租户配置 |
(C) 运单/订单模块 /orders
| 方法 |
路径 |
说明 |
| GET |
/orders |
运单列表(多条件筛选分页) |
| POST |
/orders |
创建运单 |
| GET |
/orders/{orderId} |
运单详情(含货物明细/集装箱/费用) |
| PUT |
/orders/{orderId} |
更新运单 |
| DELETE |
/orders/{orderId} |
取消运单 |
| POST |
/orders/{orderId}/submit |
提交确认运单 |
| POST |
/orders/{orderId}/copy |
复制运单 |
| POST |
/orders/{orderId}/items |
添加货物明细 |
| PUT |
/orders/{orderId}/items/{itemId} |
编辑货物明细 |
| DELETE |
/orders/{orderId}/items/{itemId} |
删除货物明细 |
| POST |
/orders/{orderId}/containers |
添加集装箱 |
| PUT |
/orders/{orderId}/containers/{cId} |
编辑集装箱信息 |
| DELETE |
/orders/{orderId}/containers/{cId} |
删除集装箱 |
| POST |
/orders/{orderId}/status/change |
状态变更(驱动工作流) |
| GET |
/orders/{orderId}/tracking |
物流轨迹 |
| POST |
/orders/{orderId}/tracking |
手动添加轨迹 |
| GET |
/orders/{orderId}/timeline |
运单时间轴(关键节点) |
| GET |
/orders/export |
导出运单列表(Excel) |
| POST |
/orders/batch/status |
批量更新状态 |
| GET |
/orders/statistics |
运单统计数据 |
| POST |
/orders/{orderId}/attach |
|
| ments |
上传运单附件 |
|
| GET |
/orders/{orderId}/fees |
运单费用列表(应收/应付) |
| POST |
/orders/{orderId}/fees |
添加费用项 |
(D) 海运费管理模块 /freight
| 方法 |
路径 |
说明 |
| GET |
/freight/rates |
费率列表查询(多条件筛选) |
| POST |
/freight/rates |
新增费率 |
| PUT |
/freight/rates/{rateId} |
编辑费率 |
| DELETE |
/freight/rates/{rateId} |
删除/停用费率 |
| GET |
/freight/rates/{rateId}/surcharges |
费率关联的附加费列表 |
| POST |
/freight/rates/{rateId}/surcharges |
添加附加费 |
| PUT |
/freight/surcharges/{id} |
编辑附加费 |
| DELETE |
/freight/surcharges/{id} |
删除附加费 |
| GET |
/freight/quotes |
询价/报价单列表 |
| POST |
/freight/quotes |
创建询价单 |
| POST |
/freight/quotes/{quoteId}/quote |
执行核价并生成报价 |
| POST |
/freight/quotes/{quoteId}/accept |
客户接受报价 |
| POST |
/freight/quotes/{quoteId}/reject |
客户拒绝报价 |
| GET |
/freight/quotes/{quoteId}/convert-to-order |
将报价转为正式运单 |
| GET |
/freight/schedules |
船期查询(船名航次/截关日等) |
| POST |
/freight/schedules |
维护船期信息 |
| GET |
/freight/ports |
港口列表(支持模糊搜索) |
| GET |
/freight/routes |
航线列表 |
| GET |
/freight/carriers |
承运商/供应商列表 |
| POST |
/freight/carriers |
新增承运商 |
| PUT |
/freight/carriers/{id} |
编辑承运商 |
| GET |
/freight/quick-quote |
快速询价接口(输入POL/POD/箱型->返回参考价) |
(E) 关税管理模块 /customs-duty
| 方法 |
路径 |
说明 |
| GET |
/customs-duty/hs-codes |
HS编码查询(关键词模糊搜索) |
| GET |
/customs-duty/hs-codes/{hsCode} |
HS编码详情(含申报要素) |
| GET |
/customs-duty/hs-codes/search/fulltext |
HS编码全文检索(ES) |
| GET |
/customs-duty/tariffs |
税率表查询(HS+国家) |
| GET |
/customs-duty/tariffs/{country} |
某国税率总览 |
| POST |
/customs-duty/tariffs |
新增/导入税率数据 |
| POST |
/customs-duty/estimate |
关税预估计算 |
| GET |
/customs-duty/estimates |
预估记录列表 |
| GET |
/customs-duty/estimates/{id} |
预估详情报告 |
| POST |
/customs-duty/estimates/{id}/confirm |
确认预估结果 |
| GET |
/customs-duty/exchange-rate |
获取汇率(央行中间价) |
| POST |
/customs-duty/policies |
税率政策变更录入 |
| GET |
/customs-duty/policies/alerts |
政策变更预警列表 |
(F) 仓库作业模块 /warehouse
| 方法 |
路径 |
说明 |
| GET |
/warehouse/list |
仓库列表 |
| POST |
/warehouse |
新增仓库 |
| PUT |
/warehouse/{whId} |
编辑仓库 |
| GET |
/warehouse/{whId}/locations |
库位列表 |
| POST |
/warehouse/{whId}/locations |
批量新增库位 |
| PUT |
/warehouse/locations/{locId} |
编辑库位状态 |
| GET |
/warehouse/skus |
商品SKU列表 |
| POST |
/warehouse/skus |
新增SKU |
| PUT |
/warehouse/skus/{skuId} |
编辑SKU |
| GET |
/warehouse/inventory |
库存查询(多条件) |
| GET |
/warehouse/inventory/{invId} |
库存详情(含批次) |
| POST |
/warehouse/inventory/adjust |
库存调整(盘点差异) |
| POST |
/warehouse/inventory/freeze |
冻结库存 |
| POST |
/warehouse/inventory/unfreeze |
解冻库存 |
| GET |
/warehouse/receipts |
入库单列表 |
| POST |
/warehouse/receipts |
创建入库单 |
| POST |
/warehouse/receipts/{receiptId}/receive |
执行收货操作 |
| POST |
/warehouse/receipts/{receiptId}/putaway |
执行上架操作 |
| GET |
/warehouse/receipts/{receiptId}/items |
入库明细 |
| GET |
/warehouse/shipments |
出库单列表 |
| POST |
/warehouse/shipments |
创建出库单 |
| POST |
/warehouse/shipments/{shipmentId}/pick |
执行拣货 |
| POST |
/warehouse/shipments/{shipmentId}/pack |
执行复核打包 |
| POST |
/warehouse/shipments/{shipmentId}/ship |
确认出库 |
| GET |
/warehouse/shipments/{shipmentId}/items |
出库明细 |
| GET |
/warehouse/transactions |
库存变动流水 |
| POST |
/warehouse/count-sheets |
创建盘点单 |
| POST |
/warehouse/count-sheets/{sheetId}/execute |
执行盘点 |
| GET |
/warehouse/statistics |
仓库统计(利用率/周转率等) |
(G) 清关管理模块 /clearance
| 方法 |
路径 |
说明 |
| GET |
/clearance/declarations |
报关单列表 |
| POST |
/clearance/declarations |
创建报关单 |
| GET |
/clearance/declarations/{declId} |
报关单详情 |
| PUT |
/clearance/declarations/{declId} |
编辑报关单 |
| DELETE |
/clearance/declarations/{declId} |
删除报关单 |
| POST |
/clearance/declarations/{declId}/submit |
提交申报 |
| POST |
/clearance/declarations/{declId}/items |
添加报关商品 |
| PUT |
/clearance/declaration-items/{itemId} |
编辑报关商品 |
| DELETE |
/clearance/declaration-items/{itemId} |
删除报关商品 |
| GET |
/clearance/declarations/{declId}/documents |
报关附件列表 |
| POST |
/clearance/declarations/{declId}/documents |
上报报关单证 |
| DELETE |
/clearance/documents/{docId} |
删除附件 |
| POST |
/clearance/declarations/{declId}/sync-status |
同步海关状态(对接单一窗口时) |
| POST |
/clearance/declarations/{declId}/amend |
申请改单 |
| POST |
/clearance/declarations/{declId}/cancel |
申请删单 |
| GET |
/clearance/inspections |
布控查验记录 |
| POST |
/clearance/inspections |
录入查验结果 |
| GET |
/clearance/templates |
报关单模板(常用申报要素) |
(H) 财务结算模块 /finance
| 方法 |
路径 |
说明 |
| GET |
/finance/bills |
账单列表(AR/AP) |
| POST |
/finance/bills |
创建账单 |
| GET |
/finance/bills/{billId} |
账单详情(含明细) |
| PUT |
/finance/bills/{billId} |
编辑账单 |
| POST |
/finance/bills/{billId}/confirm |
确认账单 |
| POST |
/finance/bills/{billId}/void |
作废账单 |
| POST |
/finance/bills/{billId}/items |
添加账单费用项 |
| PUT |
/finance/bill-items/{itemId} |
编辑费用项 |
| DELETE |
/finance/bill-items/{itemId} |
删除费用项 |
| POST |
/finance/bills/generate/auto |
自动对账生成账单 |
| POST |
/finance/bills/generate/from-order |
从运单生成账单 |
| GET |
/finance/settlements |
结算记录列表 |
| POST |
/finance/settlements |
创建结算(收/付款) |
| POST |
/finance/settlements/{setId}/approve |
审核结算 |
| POST |
/finance/settlements/{setId}/reject |
驳回结算 |
| GET |
/finance/invoices |
发票列表 |
| POST |
/finance/invoices |
开具发票 |
| POST |
/finance/invoices/{invoiceId}/cancel |
作废发票 |
| POST |
/finance/invoices/{invoiceId}/credit-note |
红冲发票 |
| GET |
/finance/invoices/{invoiceId}/pdf |
获取发票PDF |
| GET |
/finance/receivables |
应收汇总(按客户/账龄) |
| GET |
/finance/payables |
应付汇总(按供应商/账龄) |
| GET |
/finance/profit-analysis |
利润分析(按运单/客户/时间段) |
| GET |
/finance/reports/trial-balance |
试算平衡表 |
| GET |
/finance/reports/aging |
账龄分析报表 |
| GET |
/finance/reports/revenue |
收入报表 |
(I) 数据看板模块 /dashboard
| 方法 |
路径 |
说明 |
| GET |
/dashboard/overview |
总览面板(今日/本周/本月核心指标) |
| GET |
/dashboard/order-trends |
订单量趋势图 |
| GET |
/dashboard/revenue-trends |
收入趋势图 |
| GET |
/dashboard/profit-trends |
利润趋势图 |
| GET |
/dashboard/order-status-dist |
运单状态分布 |
| GET |
/dashboard/top-customers |
TOP客户排行 |
| GET |
/dashboard/top-routes |
热门航线排行 |
| GET |
/dashboard/port-throughput |
港口吞吐量统计 |
| GET |
/dashboard/alerts |
业务预警(即将到期/异常订单等) |
| GET |
/dashboard/kpi |
KPI指标卡集合 |
| POST |
/dashboard/reports/custom |
自定义报表查询 |
| GET |
/dashboard/reports/{reportId} |
获取报表数据 |
| GET |
/dashboard/customer-portrait |
客户画像分析 |
| GET |
/dashboard/churn-prediction |
流失预警 |
(J) 文件服务模块 /files
| 方法 |
路径 |
说明 |
| POST |
/files/upload |
文件上传(分片/断点续传) |
| GET |
/files/{fileId} |
文件下载 |
| GET |
/files/{fileId}/preview |
在线预览 |
| GET |
/files/{fileId}/info |
文件信息(元数据) |
| DELETE |
/files/{fileId} |
删除文件 |
| POST |
/files/{fileId}/thumbnail |
获取缩略图 |
| GET |
/files/list |
文件列表(按业务对象) |
| POST |
/files/batch-upload |
批量上传 |
| GET |
/files/report-templates |
报表模板列表 |
| POST |
/files/reports/generate |
触发报表生成任务 |
| GET |
/files/reports/tasks/{taskId} |
查询导出任务进度 |
| GET |
/files/reports/tasks/{taskId}/download |
下载生成的报表 |
(K) 消息通知模块 /notifications
| 方法 |
路径 |
说明 |
| GET |
/notifications |
当前用户消息列表(分页,未读优先) |
| GET |
/notifications/{msgId} |
消息详情 |
| PUT |
/notifications/{msgId}/read |
标记已读 |
| PUT |
/notifications/read-all |
全部标记已读 |
| GET |
/notifications/unread-count |
未读消息数量 |
| POST |
/notifications/send |
发送消息(管理员用) |
| GET |
/notification-templates |
消息模板列表 |
| POST |
/notification-templates |
新增消息模板 |
| PUT |
/notification-templates/{tplId} |
编辑模板 |
| GET |
/notification-settings |
用户通知偏好设置 |
| PUT |
/notification-settings |
更新通知偏好 |
| GET |
/notifications/sms/logs |
短信发送记录 |
| GET |
/notifications/email/logs |
邮件发送记录 |
7. 部署架构与运维
7.1 Kubernetes 部署拓扑
7.2 环境规划
| 环境 |
用途 |
K8s集群 |
数据库 |
配置 |
| dev |
开发环境 |
单节点(minikube) |
MySQL单机 |
dev profile |
| test |
测试环境 |
3节点集群 |
MySQL主从 |
test profile |
| staging |
预发布环境 |
5节点集群 |
与生产同构(小规格) |
staging profile |
| prod |
生产环境 |
多AZ高可用集群 |
MySQL主从+分库分表 |
prod profile |
7.3 CI/CD 流水线
7.4 监控告警体系
8. 安全设计
8.1 安全架构层次
8.2 多租户安全措施
9. 非功能性需求
9.1 性能指标
| 指标 |
目标值 |
说明 |
| API平均响应时间 |
< 200ms (P50) |
一般接口 |
| API响应时间P99 |
< 1000ms |
99分位 |
| 并发用户数 |
支持 5000+ 在线 |
数千商家同时使用 |
| QPS |
核心接口 > 5000 QPS |
峰值承载能力 |
| 页面加载时间 |
< 2s (首屏) |
前端渲染完成 |
| 文件上传 |
支持断点续传, 单文件最大 200MB |
单证/图片上传 |
| 批量导出 |
10万行以内 Excel < 30秒 |
异步生成 + 下载通知 |
9.2 可用性指标
| 指标 |
目标值 |
措施 |
| 系统可用性 |
>= 99.9% (年宕机 < 8.76小时) |
多AZ部署, 服务自愈, 故障转移 |
| RTO (恢复时间目标) |
< 30分钟 |
灾备切换, 快速回滚 |
| RPO (恢复点目标) |
< 5分钟 |
实时Binlog备份 |
| 计划内维护 |
不影响业务(滚动升级) |
零停机部署 |
| 数据可靠性 |
99.999999% (11个9) |
多副本存储 + 跨机架 |
9.3 可扩展性
9.4 数据容量规划(初期~3年)
| 数据类型 |
初期(1年内) |
1年后 |
3年后 |
存储方案 |
| 租户数据 |
~1000家 |
~3000家 |
~8000家 |
MySQL (分库) |
| 运单数据 |
~10万票 |
~80万票 |
~300万票 |
MySQL (16分表) |
| 货物明细 |
~50万行 |
~400万行 |
~1500万行 |
MySQL (分表) |
| 报关单 |
~8万份 |
~60万份 |
~200万份 |
MySQL (分表) |
| 库存记录 |
~20万条 |
~150万条 |
~500万条 |
MySQL + Redis热数据 |
| 库存流水 |
~100万条 |
~800万条 |
~3000万条 |
MySQL (32分表) |
| 物流轨迹 |
~50万条 |
~400万条 |
~1500万条 |
MySQL (分表) + ES |
| 财务账单 |
~15万张 |
~120万张 |
~400万张 |
MySQL |
| 操作日志 |
~500万条 |
~4000万条 |
~1.5亿条 |
MongoDB / ClickHouse |
| 文件存储 |
~500GB |
~3TB |
~10TB |
MinIO/OSS |
| HS编码数据 |
~12万条 |
~15万条 |
~18万条 |
MySQL + ES全文索引 |
9.5 合规与审计
附录:项目实施路线建议
Phase 1 - MVP原型(第1-2个月)
- 搭建基础框架:Spring Cloud Alibaba + Vue3 脚手架
- 实现核心模块:租户管理 + 运单CRUD + 基础海运费查询
- 数据库初始化脚本 + 种子数据
- 基础认证与RBAC
Phase 2 - 核心业务闭环(第3-4个月)
- 完整运单生命周期(接单 -> 完成)
- 海运费报价完整流程(询价 -> 核价 -> 报价)
- 仓库基础作业(入库 + 出库 + 库存)
- 基础财务(应收应付 + 账单)
Phase 3 - 专业功能(第5-6个月)
- 清关管理(报关单 + 单证)
- 关税管理(HS编码 + 税率 + 预估引擎)
- 数据看板(统计图表 + 导出)
- 消息通知(站内信 + 短信 + 邮件)
Phase 4 - 运营优化(第7-8个月)
- 高级BI分析(自定义报表 + 客户画像)
- 开放平台(API对外开放)
- 移动端适配(小程序 + App)
- 性能优化 + 压力测试
文档结束
本架构设计文档涵盖国际货运代理 SaaS 平台的完整技术方案,包括:
- 5层系统架构(接入/应用/中间件/数据/基础设施)
- 11个微服务的职责边界与调用关系
- 30+ 张核心数据库表的完整 DDL(覆盖商家/运单/报关/仓库/海运费/关税/财务 8大领域)
- 5个核心业务流程(入驻 / 一票货全程 / 结算 / 关税预估 / 状态机)
- 完整技术选型(前后端 / 中间件 / 数据库 / DevOps)
- 150+ 个 RESTful API 接口(覆盖全部 11 个业务模块)
- 部署/K8s/监控/安全/非功能性需求全套方案
- 4阶段实施路线图