元数据驱动的多域配置化设计方案

一、配置化架构总体设计

1. 核心架构模式

sql
-- 统一元数据表结构(跨域通用)
CREATE TABLE metadata_fields (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    domain VARCHAR(50) NOT NULL COMMENT '业务域: product/purchase/warehouse/sales/finance',
    entity_type VARCHAR(100) NOT NULL COMMENT '实体类型: product/order/inventory等',
    field_code VARCHAR(100) NOT NULL COMMENT '字段编码',
    field_name VARCHAR(200) NOT NULL COMMENT '字段名称',
    field_type ENUM('string', 'number', 'date', 'datetime', 'boolean', 'enum', 'json') DEFAULT 'string',
    data_type VARCHAR(50) COMMENT '数据类型',
    
    -- 配置控制
    is_required BOOLEAN DEFAULT FALSE COMMENT '是否必填',
    is_system BOOLEAN DEFAULT FALSE COMMENT '是否系统字段',
    is_searchable BOOLEAN DEFAULT TRUE COMMENT '是否可搜索',
    is_exportable BOOLEAN DEFAULT TRUE COMMENT '是否可导出',
    
    -- 验证规则
    validation_rules JSON COMMENT '验证规则',
    default_value VARCHAR(500) COMMENT '默认值',
    enum_values JSON COMMENT '枚举值列表',
    
    -- 显示配置
    display_order INT DEFAULT 0 COMMENT '显示顺序',
    display_group VARCHAR(100) COMMENT '显示分组',
    placeholder VARCHAR(200) COMMENT '占位文本',
    help_text VARCHAR(500) COMMENT '帮助文本',
    
    -- 多租户隔离
    customer_id BIGINT COMMENT '客户ID(为空表示公共字段)',
    tenant_id VARCHAR(50) COMMENT '租户标识',
    
    created_by VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_domain_entity_field (domain, entity_type, field_code, tenant_id),
    INDEX idx_domain_entity (domain, entity_type),
    INDEX idx_tenant (tenant_id)
) COMMENT '元数据字段表';

-- 扩展数据存储表(按域分表)
CREATE TABLE purchase_extension_data (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    entity_id BIGINT NOT NULL COMMENT '业务实体ID',
    entity_type VARCHAR(100) NOT NULL COMMENT '实体类型',
    field_code VARCHAR(100) NOT NULL COMMENT '字段编码',
    field_value TEXT COMMENT '字段值',
    
    tenant_id VARCHAR(50) NOT NULL COMMENT '租户标识',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_entity_field (entity_id, entity_type, field_code, tenant_id),
    INDEX idx_entity (entity_id, entity_type),
    INDEX idx_field (field_code)
) COMMENT '采购域扩展数据表';

-- 其他域类似结构
CREATE TABLE sales_extension_data (...);
CREATE TABLE warehouse_extension_data (...);
CREATE TABLE finance_extension_data (...);

二、采购域配置化设计

1. 采购域基础表结构

sql
-- 采购订单基础表(固定核心字段)
CREATE TABLE purchase_orders_base (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    order_no VARCHAR(50) NOT NULL UNIQUE,
    supplier_id BIGINT NOT NULL,
    total_amount DECIMAL(15,2) NOT NULL,
    order_status ENUM('draft', 'pending', 'approved', 'completed', 'cancelled') DEFAULT 'draft',
    
    -- 核心业务字段
    order_date DATE NOT NULL,
    expected_delivery_date DATE,
    warehouse_id BIGINT,
    buyer_id BIGINT,
    
    tenant_id VARCHAR(50) NOT NULL,
    created_by VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_order_no (order_no),
    INDEX idx_tenant (tenant_id)
) COMMENT '采购订单基础表';

-- 供应商基础表
CREATE TABLE suppliers_base (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    supplier_code VARCHAR(50) NOT NULL UNIQUE,
    supplier_name VARCHAR(200) NOT NULL,
    supplier_type VARCHAR(50),
    contact_person VARCHAR(100),
    contact_phone VARCHAR(20),
    
    tenant_id VARCHAR(50) NOT NULL,
    status ENUM('active', 'inactive') DEFAULT 'active',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_supplier_code (supplier_code),
    INDEX idx_tenant (tenant_id)
) COMMENT '供应商基础表';

2. 采购域配置样例

场景1:不同行业的采购特性配置

sql
-- 生鲜超市A配置
INSERT INTO metadata_fields (domain, entity_type, field_code, field_name, field_type, is_required, tenant_id) VALUES
('purchase', 'purchase_order', 'freshness_level', '新鲜度等级', 'enum', FALSE, 'tenant_A'),
('purchase', 'purchase_order', 'temperature_control', '温控要求', 'string', FALSE, 'tenant_A'),
('purchase', 'supplier', 'food_safety_cert', '食品安全认证', 'string', TRUE, 'tenant_A'),
('purchase', 'supplier', 'delivery_frequency', '配送频次', 'enum', FALSE, 'tenant_A');

-- 电子零售商B配置
INSERT INTO metadata_fields (domain, entity_type, field_code, field_name, field_type, is_required, tenant_id) VALUES
('purchase', 'purchase_order', 'warranty_period', '保修期限', 'number', FALSE, 'tenant_B'),
('purchase', 'purchase_order', 'technical_support', '技术支持要求', 'string', FALSE, 'tenant_B'),
('purchase', 'supplier', 'tech_certification', '技术认证', 'string', TRUE, 'tenant_B');

场景2:采购审批流程配置

sql
-- 审批流程元数据配置
CREATE TABLE purchase_approval_config (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    config_name VARCHAR(200) NOT NULL COMMENT '配置名称',
    business_type VARCHAR(100) NOT NULL COMMENT '业务类型',
    
    -- 条件配置
    condition_rules JSON COMMENT '条件规则',
    amount_ranges JSON COMMENT '金额区间配置',
    
    -- 审批流程配置
    approval_flow JSON NOT NULL COMMENT '审批流程配置',
    auto_approval_limit DECIMAL(15,2) COMMENT '自动审批限额',
    
    tenant_id VARCHAR(50) NOT NULL,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_business_type (business_type),
    INDEX idx_tenant (tenant_id)
) COMMENT '采购审批配置表';

-- 样例配置:不同金额级别的审批流程
INSERT INTO purchase_approval_config VALUES (
    1, '普通采购审批', 'general_purchase',
    '{"departments": ["采购部", "财务部"]}',
    '[{"min": 0, "max": 5000}, {"min": 5000, "max": 50000}, {"min": 50000, "max": null}]',
    '{
        "0-5000": ["department_manager"],
        "5000-50000": ["department_manager", "finance_manager"],
        "50000+": ["department_manager", "finance_director", "general_manager"]
    }',
    1000, 'tenant_A', TRUE, NOW()
);

3. 配置化带来的价值

  • 场景适配:生鲜行业关注温控、食品认证,电子行业关注保修、技术认证

  • 流程灵活:不同金额、不同部门的审批流程可配置

  • 快速交付:新客户需求通过配置而非代码实现

三、仓储域配置化设计

1. 仓储域基础表结构

sql
-- 库存基础表
CREATE TABLE inventory_base (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    product_id BIGINT NOT NULL,
    warehouse_id BIGINT NOT NULL,
    quantity DECIMAL(12,2) NOT NULL DEFAULT 0,
    available_quantity DECIMAL(12,2) NOT NULL DEFAULT 0,
    locked_quantity DECIMAL(12,2) NOT NULL DEFAULT 0,
    
    tenant_id VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_product_warehouse (product_id, warehouse_id, tenant_id),
    INDEX idx_warehouse (warehouse_id)
) COMMENT '库存基础表';

-- 仓库基础表
CREATE TABLE warehouses_base (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    warehouse_code VARCHAR(50) NOT NULL UNIQUE,
    warehouse_name VARCHAR(200) NOT NULL,
    warehouse_type VARCHAR(50),
    address VARCHAR(500),
    
    tenant_id VARCHAR(50) NOT NULL,
    status ENUM('active', 'inactive') DEFAULT 'active',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_warehouse_code (warehouse_code),
    INDEX idx_tenant (tenant_id)
) COMMENT '仓库基础表';

2. 仓储域配置样例

场景1:不同仓储类型的特性配置

sql
-- 冷链仓储配置
INSERT INTO metadata_fields (domain, entity_type, field_code, field_name, field_type, tenant_id) VALUES
('warehouse', 'inventory', 'temperature_zone', '温区', 'enum', 'tenant_A'),
('warehouse', 'inventory', 'humidity_control', '湿度要求', 'string', 'tenant_A'),
('warehouse', 'inventory', 'shelf_life_alert', '保质期预警天数', 'number', 'tenant_A'),
('warehouse', 'warehouse', 'refrigeration_type', '制冷方式', 'enum', 'tenant_A');

-- 电商仓储配置
INSERT INTO metadata_fields (domain, entity_type, field_code, field_name, field_type, tenant_id) VALUES
('warehouse', 'inventory', 'pick_zone', '拣货区域', 'string', 'tenant_B'),
('warehouse', 'inventory', 'packing_requirements', '包装要求', 'string', 'tenant_B'),
('warehouse', 'warehouse', 'automation_level', '自动化程度', 'enum', 'tenant_B');

场景2:库存策略配置

sql
-- 库存策略配置表
CREATE TABLE inventory_strategy_config (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    strategy_name VARCHAR(200) NOT NULL,
    product_category_id BIGINT COMMENT '商品分类',
    
    -- 库存策略参数
    safety_stock_days INT COMMENT '安全库存天数',
    reorder_point DECIMAL(12,2) COMMENT '再订货点',
    max_stock_level DECIMAL(12,2) COMMENT '最大库存水平',
    review_period INT COMMENT '盘点周期(天)',
    
    -- 预警配置
    alert_rules JSON COMMENT '预警规则',
    
    tenant_id VARCHAR(50) NOT NULL,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_category (product_category_id),
    INDEX idx_tenant (tenant_id)
) COMMENT '库存策略配置表';

-- 样例配置:不同品类的库存策略
INSERT INTO inventory_strategy_config VALUES 
(1, '生鲜品策略', 1, 2, 100, 500, 7, 
 '{"low_stock_alert": 0.2, "expiry_alert_days": 3}', 'tenant_A', TRUE, NOW()),
 
(2, '电子产品策略', 2, 7, 50, 200, 30, 
 '{"low_stock_alert": 0.1, "slow_moving_days": 90}', 'tenant_A', TRUE, NOW());

3. 配置化带来的价值

  • 品类差异化:生鲜和电子产品的库存管理策略完全不同

  • 自动化管理:库存预警、补货策略可配置化

  • 运营效率:根据不同商品特性制定最优仓储策略

四、销售域配置化设计

1. 销售域基础表结构

sql
-- 销售订单基础表
CREATE TABLE sales_orders_base (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    order_no VARCHAR(50) NOT NULL UNIQUE,
    customer_id BIGINT NOT NULL,
    total_amount DECIMAL(15,2) NOT NULL,
    order_status ENUM('pending', 'confirmed', 'shipped', 'completed', 'cancelled') DEFAULT 'pending',
    
    -- 核心业务字段
    order_date DATETIME NOT NULL,
    sales_channel VARCHAR(50) COMMENT '销售渠道',
    salesperson_id BIGINT COMMENT '销售人员',
    
    tenant_id VARCHAR(50) NOT NULL,
    created_by VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_order_no (order_no),
    INDEX idx_tenant (tenant_id)
) COMMENT '销售订单基础表';

-- 客户基础表
CREATE TABLE customers_base (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    customer_code VARCHAR(50) NOT NULL UNIQUE,
    customer_name VARCHAR(200) NOT NULL,
    customer_type VARCHAR(50),
    contact_phone VARCHAR(20),
    
    tenant_id VARCHAR(50) NOT NULL,
    status ENUM('active', 'inactive') DEFAULT 'active',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_customer_code (customer_code),
    INDEX idx_tenant (tenant_id)
) COMMENT '客户基础表';

2. 销售域配置样例

场景1:多渠道销售特性配置

sql
-- 线下门店销售配置
INSERT INTO metadata_fields (domain, entity_type, field_code, field_name, field_type, tenant_id) VALUES
('sales', 'sales_order', 'store_code', '门店编码', 'string', 'tenant_A'),
('sales', 'sales_order', 'cashier_id', '收银员', 'string', 'tenant_A'),
('sales', 'sales_order', 'pos_terminal', 'POS终端', 'string', 'tenant_A'),
('sales', 'customer', 'member_level', '会员等级', 'enum', 'tenant_A');

-- 电商平台销售配置
INSERT INTO metadata_fields (domain, entity_type, field_code, field_name, field_type, tenant_id) VALUES
('sales', 'sales_order', 'platform_order_no', '平台订单号', 'string', 'tenant_B'),
('sales', 'sales_order', 'shipping_address', '收货地址', 'string', 'tenant_B'),
('sales', 'sales_order', 'payment_method', '支付方式', 'enum', 'tenant_B'),
('sales', 'customer', 'platform_user_id', '平台用户ID', 'string', 'tenant_B');

场景2:价格策略配置

sql
-- 价格策略配置表
CREATE TABLE pricing_strategy_config (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    strategy_name VARCHAR(200) NOT NULL,
    strategy_type ENUM('discount', 'tiered', 'promotional', 'seasonal') DEFAULT 'discount',
    
    -- 条件配置
    condition_rules JSON COMMENT '适用条件',
    
    -- 价格计算规则
    calculation_rules JSON NOT NULL COMMENT '价格计算规则',
    valid_period JSON COMMENT '有效期配置',
    
    tenant_id VARCHAR(50) NOT NULL,
    priority INT DEFAULT 0 COMMENT '优先级',
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_strategy_type (strategy_type),
    INDEX idx_tenant (tenant_id)
) COMMENT '价格策略配置表';

-- 样例配置:会员折扣策略
INSERT INTO pricing_strategy_config VALUES (
    1, '会员等级折扣', 'tiered', 'tenant_A',
    '{
        "customer_types": ["member"],
        "channels": ["store", "online"]
    }',
    '{
        "bronze": 0.98,
        "silver": 0.95,
        "gold": 0.9,
        "platinum": 0.85
    }',
    '{"start_date": "2024-01-01", "end_date": "2024-12-31"}',
    0, 1, NOW()
);

-- 促销活动配置
INSERT INTO pricing_strategy_config VALUES (
    2, '春节促销', 'promotional', 'tenant_A',
    '{
        "date_range": ["2024-01-20", "2024-02-10"],
        "product_categories": [1, 2, 3]
    }',
    '{
        "type": "percentage",
        "value": 0.8,
        "max_discount_amount": 100
    }',
    '{"start_date": "2024-01-20", "end_date": "2024-02-10"}',
    1, 1, NOW()
);

3. 配置化带来的价值

  • 渠道适配:线下门店和电商平台的销售流程差异通过配置实现

  • 营销灵活:促销活动、会员体系可快速配置上线

  • 价格策略:复杂的定价规则通过配置而非硬编码实现

五、财务域配置化设计

1. 财务域基础表结构

sql
-- 财务凭证基础表
CREATE TABLE financial_vouchers_base (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    voucher_no VARCHAR(50) NOT NULL UNIQUE,
    voucher_date DATE NOT NULL,
    voucher_type VARCHAR(50) NOT NULL,
    total_amount DECIMAL(15,2) NOT NULL,
    
    -- 核心业务字段
    business_type VARCHAR(100) COMMENT '业务类型',
    reference_no VARCHAR(100) COMMENT '参考单据号',
    
    tenant_id VARCHAR(50) NOT NULL,
    created_by VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_voucher_no (voucher_no),
    INDEX idx_tenant (tenant_id)
) COMMENT '财务凭证基础表';

-- 科目余额基础表
CREATE TABLE account_balances_base (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    account_code VARCHAR(50) NOT NULL,
    account_name VARCHAR(200) NOT NULL,
    period VARCHAR(10) NOT NULL COMMENT '会计期间',
    
    -- 余额信息
    opening_balance DECIMAL(15,2) DEFAULT 0,
    debit_amount DECIMAL(15,2) DEFAULT 0,
    credit_amount DECIMAL(15,2) DEFAULT 0,
    ending_balance DECIMAL(15,2) DEFAULT 0,
    
    tenant_id VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_account_period (account_code, period, tenant_id),
    INDEX idx_period (period)
) COMMENT '科目余额基础表';

2. 财务域配置样例

场景1:不同行业的核算需求

sql
-- 零售行业财务配置
INSERT INTO metadata_fields (domain, entity_type, field_code, field_name, field_type, tenant_id) VALUES
('finance', 'financial_voucher', 'store_department', '门店部门', 'string', 'tenant_A'),
('finance', 'financial_voucher', 'sales_channel', '销售渠道', 'enum', 'tenant_A'),
('finance', 'financial_voucher', 'promotion_activity', '促销活动', 'string', 'tenant_A');

-- 制造行业财务配置
INSERT INTO metadata_fields (domain, entity_type, field_code, field_name, field_type, tenant_id) VALUES
('finance', 'financial_voucher', 'cost_center', '成本中心', 'string', 'tenant_B'),
('finance', 'financial_voucher', 'production_order', '生产订单', 'string', 'tenant_B'),
('finance', 'financial_voucher', 'project_code', '项目编码', 'string', 'tenant_B');

场景2:会计科目配置

sql
-- 会计科目配置表
CREATE TABLE accounting_subject_config (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    subject_code VARCHAR(50) NOT NULL,
    subject_name VARCHAR(200) NOT NULL,
    subject_level INT DEFAULT 1,
    parent_code VARCHAR(50),
    
    -- 科目属性
    subject_type ENUM('asset', 'liability', 'equity', 'income', 'cost') NOT NULL,
    balance_direction ENUM('debit', 'credit') NOT NULL,
    is_detail BOOLEAN DEFAULT FALSE COMMENT '是否明细科目',
    
    -- 辅助核算
    auxiliary_accounting JSON COMMENT '辅助核算配置',
    
    tenant_id VARCHAR(50) NOT NULL,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_subject_code (subject_code, tenant_id),
    INDEX idx_parent (parent_code),
    INDEX idx_tenant (tenant_id)
) COMMENT '会计科目配置表';

-- 样例配置:零售行业科目体系
INSERT INTO accounting_subject_config VALUES 
(1, '1001', '现金', 1, NULL, 'asset', 'debit', FALSE, NULL, 'tenant_A', TRUE, NOW()),
(2, '100101', '库存现金', 2, '1001', 'asset', 'debit', TRUE, '{"stores": true}', 'tenant_A', TRUE, NOW()),
(3, '100102', '银行存款', 2, '1001', 'asset', 'debit', TRUE, NULL, 'tenant_A', TRUE, NOW()),
(4, '6001', '主营业务收入', 1, NULL, 'income', 'credit', FALSE, NULL, 'tenant_A', TRUE, NOW()),
(5, '600101', '商品销售收入', 2, '6001', 'income', 'credit', TRUE, '{"channels": true, "products": true}', 'tenant_A', TRUE, NOW());

场景3:凭证生成规则配置

sql
-- 凭证生成规则配置表
CREATE TABLE voucher_generation_rules (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    rule_name VARCHAR(200) NOT NULL,
    source_system VARCHAR(50) NOT NULL COMMENT '来源系统',
    business_type VARCHAR(100) NOT NULL COMMENT '业务类型',
    
    -- 凭证模板
    voucher_template JSON NOT NULL COMMENT '凭证模板',
    condition_rules JSON COMMENT '条件规则',
    
    -- 生成时机
    generation_timing ENUM('immediate', 'daily', 'monthly') DEFAULT 'immediate',
    
    tenant_id VARCHAR(50) NOT NULL,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    INDEX idx_source_business (source_system, business_type),
    INDEX idx_tenant (tenant_id)
) COMMENT '凭证生成规则配置表';

-- 样例配置:采购入库凭证规则
INSERT INTO voucher_generation_rules VALUES (
    1, '采购入库凭证', 'purchase', 'purchase_acceptance', 'tenant_A',
    '{
        "voucher_type": "记",
        "entries": [
            {
                "subject_code": "1405",
                "subject_name": "库存商品",
                "direction": "debit",
                "amount_rule": "accepted_amount",
                "auxiliary_rules": {
                    "product": "product_id",
                    "warehouse": "warehouse_id"
                }
            },
            {
                "subject_code": "2202",
                "subject_name": "应付账款",
                "direction": "credit", 
                "amount_rule": "accepted_amount",
                "auxiliary_rules": {
                    "supplier": "supplier_id"
                }
            }
        ]
    }',
    '{"status": "completed"}',
    'immediate', 1, NOW()
);

3. 配置化带来的价值

  • 行业适配:零售、制造等不同行业的核算需求通过科目配置实现

  • 核算维度:辅助核算配置满足多维度财务分析需求

  • 自动化程度:凭证自动生成规则减少人工干预

六、配置化渲染引擎设计

1. 统一配置化服务

java
// 配置化服务接口
public interface MetadataDrivenService {
    
    // 获取实体类型的字段配置
    List<FieldConfig> getEntityFields(String domain, String entityType, String tenantId);
    
    // 动态生成表单配置
    FormConfig generateFormConfig(String domain, String entityType, String tenantId);
    
    // 动态生成列表配置
    ListConfig generateListConfig(String domain, String entityType, String tenantId);
    
    // 验证扩展字段数据
    ValidationResult validateExtensionData(String domain, String entityType, 
                                         Map<String, Object> data, String tenantId);
    
    // 保存扩展数据
    void saveExtensionData(String domain, String entityType, Long entityId,
                          Map<String, Object> data, String tenantId);
}

// 字段配置DTO
@Data
public class FieldConfig {
    private String fieldCode;
    private String fieldName;
    private String fieldType;
    private String dataType;
    private boolean required;
    private Object defaultValue;
    private Map<String, Object> validationRules;
    private List<Map<String, Object>> enumOptions;
    private Integer displayOrder;
    private String displayGroup;
    private String placeholder;
    private String helpText;
}

2. 动态查询引擎

sql
-- 通用扩展数据查询视图
CREATE VIEW purchase_order_view AS
SELECT 
    base.*,
    -- 动态扩展字段
    MAX(CASE WHEN ext.field_code = 'freshness_level' THEN ext.field_value END) as freshness_level,
    MAX(CASE WHEN ext.field_code = 'temperature_control' THEN ext.field_value END) as temperature_control
FROM purchase_orders_base base
LEFT JOIN purchase_extension_data ext ON base.id = ext.entity_id AND ext.entity_type = 'purchase_order'
WHERE base.tenant_id = ?
GROUP BY base.id;

3. 前端配置化组件

javascript
// 动态表单组件
const DynamicForm = ({ domain, entityType, tenantId, onSubmit }) => {
    const [fieldConfigs, setFieldConfigs] = useState([]);
    const [formData, setFormData] = useState({});
    
    useEffect(() => {
        // 从后端获取字段配置
        loadFieldConfigs(domain, entityType, tenantId).then(setFieldConfigs);
    }, [domain, entityType, tenantId]);
    
    const renderField = (fieldConfig) => {
        switch (fieldConfig.fieldType) {
            case 'string':
                return <Input fieldConfig={fieldConfig} />;
            case 'number':
                return <InputNumber fieldConfig={fieldConfig} />;
            case 'enum':
                return <Select fieldConfig={fieldConfig} />;
            case 'date':
                return <DatePicker fieldConfig={fieldConfig} />;
            default:
                return <Input fieldConfig={fieldConfig} />;
        }
    };
    
    return (
        <Form onFinish={onSubmit}>
            {fieldConfigs.map(fieldConfig => (
                <Form.Item
                    key={fieldConfig.fieldCode}
                    label={fieldConfig.fieldName}
                    required={fieldConfig.required}
                >
                    {renderField(fieldConfig)}
                </Form.Item>
            ))}
        </Form>
    );
};

七、配置化带来的总体收益

1. 对乙方的价值

  • 开发成本降低60%+:将定制需求转化为配置工作

  • 交付周期缩短80%+:新客户上线从月级降到天级

  • 产品标准化:建立可复用的行业解决方案库

  • 维护复杂度降低:统一代码分支,减少版本碎片化

2. 对客户的价值

  • 业务自主权:字段、流程、策略可自主调整

  • 快速响应市场:营销活动、价格策略可快速配置

  • 个性化深度:满足行业特殊需求的深度定制

  • 成本透明:按配置复杂度收费,避免定制开发的高成本

3. 技术架构优势

  • 扩展性:新业务域可快速接入配置化体系

  • 一致性:统一的配置管理、验证、渲染机制

  • 性能:基础表保证核心业务性能,扩展表保证灵活性

  • 数据分析:统一的宽表设计支持个性化数据分析

这套配置化体系通过元数据驱动,实现了多业务域的标准化与个性化的完美平衡,真正做到了"一次开发,处处配置"的产品化目标。

 posted on 2025-10-22 20:57  xibuhaohao  阅读(1)  评论(0)    收藏  举报