206 lines
11 KiB
SQL
206 lines
11 KiB
SQL
-- 采购主链 RPA 一期 · 状态中心建库脚本
|
||
-- 库里只存"流程状态 + 对码累积别名 + 证据",不存对码表本身(对码表在 Oracle,直连查)。
|
||
-- 目标库:MySQL 8
|
||
|
||
CREATE DATABASE IF NOT EXISTS rpa_center DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||
USE rpa_center;
|
||
|
||
-- ============================================================
|
||
-- job:一次流程实例 = 同供应商 + 同订单日期 + 同来源 = 一条合同
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS job (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
job_id VARCHAR(64) NOT NULL UNIQUE COMMENT '对外流程单号',
|
||
business_key VARCHAR(160) NOT NULL COMMENT '来源+供应商+订单日期,幂等用',
|
||
parent_job_id VARCHAR(64) NULL COMMENT '重跑/加单来源',
|
||
source_type VARCHAR(16) NOT NULL COMMENT 'YYC医药城/XYY小药药/OFFLINE线下单',
|
||
order_date DATE NOT NULL COMMENT '订单日期=合同签约日期',
|
||
supplier_name VARCHAR(128) NOT NULL COMMENT '供应商/商家',
|
||
order_no_list_json JSON NULL COMMENT '该批订单号数组',
|
||
contract_template VARCHAR(16) NULL COMMENT 'FORMAT格式/NON_FORMAT非格式承兑',
|
||
need_pdf_upload TINYINT NOT NULL DEFAULT 0 COMMENT '医药城=1,小药药=0',
|
||
planner_name VARCHAR(64) NULL COMMENT '计划员',
|
||
current_node_code VARCHAR(64) NOT NULL COMMENT '当前节点',
|
||
status VARCHAR(24) NOT NULL COMMENT 'PENDING/RUNNING/WAITING_USER/WAITING_EXTERNAL/SUCCESS/FAILED_RETRYABLE/FAILED_MANUAL/CANCELLED',
|
||
mapping_version VARCHAR(64) NULL COMMENT '绑定的对码累积版本',
|
||
needs_source_add TINYINT NOT NULL DEFAULT 0 COMMENT '对码后判定是否缺货源,决定是否走 SOURCE_ADD 条件节点',
|
||
executor_platform VARCHAR(16) NULL COMMENT '默认执行平台,如 ISRPA',
|
||
contract_system_no VARCHAR(64) NULL COMMENT '合同系统编号(钥匙1)',
|
||
rebate_order_no VARCHAR(64) NULL COMMENT '返利中心总单号',
|
||
m5_order_no VARCHAR(64) NULL COMMENT 'M5采购订单号',
|
||
receipt_notice_no VARCHAR(64) NULL COMMENT '收货通知单号',
|
||
current_role VARCHAR(16) NULL COMMENT '当前责任角色',
|
||
current_assignee VARCHAR(64) NULL COMMENT '当前责任人',
|
||
auto_save_enabled TINYINT NOT NULL DEFAULT 0 COMMENT 'M5自动保存开关,一期=0',
|
||
next_check_at DATETIME NULL COMMENT '等待态(如合同审批)下次检查时间,调度器扫这个',
|
||
wait_check_count INT NOT NULL DEFAULT 0 COMMENT '当前等待态已检查次数,超上限升级OPS',
|
||
created_by VARCHAR(64) NOT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
finished_at DATETIME NULL,
|
||
KEY idx_business_status (business_key, status),
|
||
KEY idx_supplier_date (supplier_name, order_date),
|
||
KEY idx_status (status),
|
||
KEY idx_next_check (status, next_check_at),
|
||
KEY idx_created_at (created_at)
|
||
) COMMENT='流程实例主表';
|
||
|
||
-- ============================================================
|
||
-- order_item:订单明细行(对码前的原始数据)
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS order_item (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
job_id VARCHAR(64) NOT NULL,
|
||
order_no VARCHAR(64) NOT NULL COMMENT '订单号(贯穿追溯)',
|
||
parent_order_no VARCHAR(64) NULL COMMENT '父订单号(加单/拆单)',
|
||
raw_product_name VARCHAR(255) NOT NULL COMMENT '平台品名',
|
||
platform_product_code VARCHAR(64) NULL COMMENT '平台产品编码',
|
||
spec VARCHAR(128) NULL COMMENT '规格(对码痛点:15×2 vs 30片)',
|
||
manufacturer VARCHAR(255) NULL COMMENT '厂家(含进口英文)',
|
||
approval_no VARCHAR(64) NULL COMMENT '国药准字/批准文号',
|
||
qty DECIMAL(14,2) NOT NULL COMMENT '数量',
|
||
unit_price DECIMAL(14,4) NULL COMMENT '单价',
|
||
source_row_no INT NULL COMMENT '原始Excel行号',
|
||
created_at DATETIME NOT NULL,
|
||
KEY idx_job (job_id),
|
||
KEY idx_order_no (order_no)
|
||
) COMMENT='订单明细行';
|
||
|
||
-- ============================================================
|
||
-- product_match:对码结果(核心难点落库)
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS product_match (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
job_id VARCHAR(64) NOT NULL,
|
||
order_item_id BIGINT NOT NULL COMMENT '对应订单行',
|
||
match_key VARCHAR(512) NOT NULL COMMENT '四要素拼接键:通用名+批准文号+规格+厂家',
|
||
match_status VARCHAR(16) NOT NULL COMMENT 'EXACT精确/ALIAS别名命中/MULTI一对多/NONE未命中(无FUZZY)',
|
||
goods_id VARCHAR(64) NULL COMMENT '命中的M5货品ID(来自Oracle)',
|
||
goods_code VARCHAR(64) NULL COMMENT '货品编码',
|
||
base_unit VARCHAR(32) NULL COMMENT '基本单位',
|
||
candidates_json JSON NULL COMMENT '一对多候选列表(供H5选择)',
|
||
source_add_needed TINYINT NOT NULL DEFAULT 0 COMMENT '是否需M5新增货源',
|
||
confirmed_by VARCHAR(64) NULL COMMENT '人工确认人',
|
||
confirmed_at DATETIME NULL,
|
||
mapping_version VARCHAR(64) NULL COMMENT '使用的对码累积版本',
|
||
created_at DATETIME NOT NULL,
|
||
UNIQUE KEY uniq_job_order_item (job_id, order_item_id),
|
||
KEY idx_job (job_id),
|
||
KEY idx_status (match_status)
|
||
) COMMENT='对码结果';
|
||
|
||
-- ============================================================
|
||
-- job_node:节点执行(每节点每次尝试一行,不覆盖历史)
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS job_node (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
job_id VARCHAR(64) NOT NULL,
|
||
node_code VARCHAR(64) NOT NULL COMMENT 'ORDER_FETCH/PRODUCT_MATCH/...',
|
||
executor_type VARCHAR(16) NOT NULL DEFAULT 'RPA' COMMENT '执行方:STATE_CENTER编排/RPA执行/HUMAN人工挂起',
|
||
attempt_no INT NOT NULL DEFAULT 1 COMMENT '第几次尝试',
|
||
status VARCHAR(24) NOT NULL COMMENT '节点状态',
|
||
executor_platform VARCHAR(16) NULL COMMENT '实际执行平台',
|
||
executor_run_id VARCHAR(64) NULL COMMENT '平台侧任务号',
|
||
started_at DATETIME NULL,
|
||
ended_at DATETIME NULL,
|
||
duration_ms BIGINT NULL,
|
||
error_code VARCHAR(64) NULL,
|
||
error_summary VARCHAR(500) NULL,
|
||
role_at_failure VARCHAR(16) NULL,
|
||
output_json JSON NULL COMMENT '节点输出(业务编号等)',
|
||
callback_idempotency_key VARCHAR(128) NULL COMMENT '回调幂等键',
|
||
created_at DATETIME NOT NULL,
|
||
UNIQUE KEY uniq_job_node_attempt (job_id, node_code, attempt_no),
|
||
KEY idx_status (status)
|
||
) COMMENT='节点执行记录';
|
||
|
||
-- ============================================================
|
||
-- user_task:人工待办
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS user_task (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
task_id VARCHAR(64) NOT NULL UNIQUE,
|
||
job_id VARCHAR(64) NOT NULL,
|
||
node_code VARCHAR(64) NOT NULL,
|
||
order_item_id BIGINT NULL COMMENT '对应订单行(对码类待办用)',
|
||
product_match_id BIGINT NULL COMMENT '对应对码结果行(对码类待办精确关联,confirm 时按它关闭)',
|
||
role_code VARCHAR(16) NOT NULL COMMENT 'PLANNER/PURCHASER/QC/OPS',
|
||
assignee_user_id VARCHAR(64) NULL,
|
||
title VARCHAR(255) NOT NULL,
|
||
reason_type VARCHAR(32) NOT NULL COMMENT 'MATCH_MULTI/MATCH_NONE/SOURCE_ADD/OCR_LOW_CONF/REBATE_DUP/QC_MISSING/CONTRACT_DISABLED',
|
||
reason_user_friendly VARCHAR(500) NULL COMMENT '人话说明',
|
||
why_me_text VARCHAR(255) NULL COMMENT '为什么派给你',
|
||
editable_fields_json JSON NULL COMMENT '白名单字段',
|
||
action_schema_json JSON NULL COMMENT '允许动作',
|
||
comparison_snapshot_json JSON NULL COMMENT '原值/建议/当前对比',
|
||
candidates_json JSON NULL COMMENT '一对多对码候选',
|
||
status VARCHAR(16) NOT NULL DEFAULT 'OPEN' COMMENT 'OPEN/SUBMITTED/CANCELLED/EXPIRED',
|
||
submit_token VARCHAR(64) NULL COMMENT '防重复提交',
|
||
submitted_action VARCHAR(24) NULL,
|
||
submitted_payload_json JSON NULL,
|
||
submitted_result_json JSON NULL COMMENT '提交结果,同 submit_token 重放时返回',
|
||
submitted_by VARCHAR(64) NULL,
|
||
submitted_at DATETIME NULL,
|
||
due_at DATETIME NULL COMMENT '超时升级',
|
||
created_at DATETIME NOT NULL,
|
||
KEY idx_job (job_id),
|
||
KEY idx_role_status (role_code, status),
|
||
KEY idx_product_match (product_match_id)
|
||
) COMMENT='人工待办';
|
||
|
||
-- ============================================================
|
||
-- mapping_config:对码累积别名 + 供应商对照等映射(版本化)
|
||
-- 注意:这不是对码表的拷贝!对码表在 Oracle。
|
||
-- 这里存的是"平台奇葩写法 → 货品ID"的人工确认记录,以及供应商对照。
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS mapping_config (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
config_type VARCHAR(24) NOT NULL COMMENT 'PRODUCT对码别名/SUPPLIER供应商对照/SETTLEMENT/PAYMENT_TERM/PLANNER_ROUTE',
|
||
config_key VARCHAR(512) NOT NULL COMMENT '对码时=四要素拼接键或平台写法',
|
||
source_value VARCHAR(512) NULL COMMENT '来源值',
|
||
target_value VARCHAR(512) NULL COMMENT '目标值(对码=货品ID+编码+单位JSON)',
|
||
extra_json JSON NULL,
|
||
version_no VARCHAR(64) NULL COMMENT '版本号',
|
||
is_active TINYINT NOT NULL DEFAULT 1,
|
||
effective_from DATETIME NULL,
|
||
effective_to DATETIME NULL,
|
||
updated_by VARCHAR(64) NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
KEY idx_type_key (config_type, config_key),
|
||
KEY idx_type_key_active (config_type, config_key, is_active, updated_at, id),
|
||
KEY idx_active (is_active)
|
||
) COMMENT='映射/对码累积别名(非对码表拷贝)';
|
||
|
||
-- ============================================================
|
||
-- job_artifact:证据元数据(文件落对象存储,这里存元数据)
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS job_artifact (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
job_id VARCHAR(64) NOT NULL,
|
||
node_code VARCHAR(64) NULL,
|
||
attempt_no INT NULL,
|
||
artifact_type VARCHAR(32) NOT NULL COMMENT 'SOURCE_EXCEL/SOURCE_IMAGE/OCR_JSON/CONTRACT_PDF/MERGED_PDF/SCREENSHOT/TEMPLATE/LOG',
|
||
storage_path VARCHAR(500) NOT NULL,
|
||
file_hash VARCHAR(128) NULL,
|
||
visible_roles VARCHAR(128) NULL COMMENT '可见角色',
|
||
is_masked TINYINT NOT NULL DEFAULT 0 COMMENT '脱敏标记',
|
||
created_at DATETIME NOT NULL,
|
||
KEY idx_job (job_id)
|
||
) COMMENT='证据元数据';
|
||
|
||
-- ============================================================
|
||
-- job_event:事件流(审计留痕)
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS job_event (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
||
job_id VARCHAR(64) NOT NULL,
|
||
event_type VARCHAR(32) NOT NULL COMMENT 'JOB_CREATED/NODE_STARTED/NODE_SUCCESS/NODE_FAILED/TASK_CREATED/TASK_SUBMITTED/MANUAL_HANDOFF/JOB_FINISHED',
|
||
node_code VARCHAR(64) NULL,
|
||
operator_type VARCHAR(16) NOT NULL COMMENT 'SYSTEM/ROBOT/USER',
|
||
operator VARCHAR(64) NULL,
|
||
detail_json JSON NULL,
|
||
created_at DATETIME NOT NULL,
|
||
KEY idx_job (job_id),
|
||
KEY idx_type (event_type)
|
||
) COMMENT='事件流';
|