GPU_GUARD_MONOREPO/docs/sql/audit-management.sql
2026-05-20 21:39:12 +08:00

202 lines
14 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 审核管理模块迁移 SQL
-- 适用MySQL 8 / InnoDB / utf8mb4
-- 说明:当前项目生产环境 typeorm.synchronize=false请先在目标库执行本文件。
-- 注意:本文件用于新库初始化;若目标库已存在旧版审核表,请按实际表结构另行补充 ALTER TABLE 升级语句。
CREATE TABLE IF NOT EXISTS `audit_order` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`createTime` varchar(255) NOT NULL COMMENT '创建时间',
`updateTime` varchar(255) NOT NULL COMMENT '更新时间',
`tenantId` int NULL COMMENT '租户ID',
`orderNo` varchar(64) NOT NULL COMMENT 'TYCM订单号',
`orderType` varchar(20) NOT NULL COMMENT '订单类型 insure=投保 claim=理赔',
`oemId` int NULL COMMENT '主机厂ID',
`agentId` int NULL COMMENT '使用的Agent ID关联netaclaw_agent',
`sessionId` varchar(64) NULL COMMENT 'Agent会话ID关联netaclaw会话',
`requestId` varchar(64) NOT NULL COMMENT '请求唯一标识',
`status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '审核状态 pending=待处理 processing=审核中 approved=通过 rejected=驳回 manual_review=转人工 failed=失败',
`inputData` json NULL COMMENT 'TYCM传入的原始订单数据证件URL、录入信息等',
`auditResult` json NULL COMMENT '最终审核结果(通过/驳回+原因+评分)',
`skillResults` json NULL COMMENT '各Skill执行结果汇总',
`oemName` varchar(50) NULL COMMENT '主机厂名称',
`productName` varchar(100) NULL COMMENT '产品名称',
`productNo` varchar(64) NULL COMMENT '产品编号',
`salesPrice` varchar(20) NULL COMMENT '销售价格',
`policyFee` varchar(20) NULL COMMENT '保费',
`insuranceCompany` varchar(50) NULL COMMENT '保险公司',
`dealerCode` varchar(64) NULL COMMENT '经销商代码',
`factoryName` varchar(100) NULL COMMENT '经销商名称',
`creator` varchar(50) NULL COMMENT '录单人',
`createPhone` varchar(20) NULL COMMENT '录单人手机号',
`orderSource` varchar(20) NULL COMMENT '订单来源',
`cardName` varchar(50) NULL COMMENT '车主姓名',
`cardNumber` varchar(30) NULL COMMENT '身份证号',
`phone` varchar(20) NULL COMMENT '手机号',
`carHost` varchar(50) NULL COMMENT '行驶证车主',
`carFrame` varchar(30) NULL COMMENT '车架号',
`carPlate` varchar(20) NULL COMMENT '车牌号',
`brandName` varchar(50) NULL COMMENT '品牌',
`modelName` varchar(100) NULL COMMENT '车型',
`vehiclePrice` varchar(20) NULL COMMENT '车辆价格',
`policyNo` varchar(64) NULL COMMENT '保单号',
`carPurchaseTime` varchar(30) NULL COMMENT '购车时间',
`serviceStart` varchar(30) NULL COMMENT '服务开始时间',
`auditScore` decimal(5,2) NULL COMMENT '审核评分',
`auditDecision` varchar(20) NULL COMMENT '审核结论',
`packageType` varchar(50) NULL COMMENT '套餐类型',
`serviceDuration` varchar(20) NULL COMMENT '服务期限(年)',
`serviceEnd` varchar(30) NULL COMMENT '服务结束时间',
`carPower` varchar(20) NULL COMMENT '动力类型',
`carType` varchar(10) NULL COMMENT '车辆类型(新车/在用车)',
`fee` varchar(20) NULL COMMENT '产品售价',
`claimAmount` decimal(12,2) NULL COMMENT '理赔金额',
`repairType` varchar(30) NULL COMMENT '理赔类型(维修/代步/置换)',
`relatedPolicyNo` varchar(64) NULL COMMENT '关联投保保单号',
`repairFactoryName` varchar(100) NULL COMMENT '报修机构',
`repairItems` varchar(200) NULL COMMENT '报修类型/项目',
`repairStatus` varchar(30) NULL COMMENT '报修状态',
`reportNo` varchar(64) NULL COMMENT '报案号',
`callbackUrl` varchar(500) NULL COMMENT 'TYCM回调地址',
`callbackStatus` varchar(20) NULL COMMENT '回调状态 pending/success/failed',
`callbackRetryCount` int NOT NULL DEFAULT 0 COMMENT '回调重试次数',
`duration` int NULL COMMENT '审核耗时(ms)',
`remark` text NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `IDX_audit_order_orderNo` (`orderNo`),
UNIQUE KEY `IDX_audit_order_requestId` (`requestId`),
KEY `IDX_audit_order_createTime` (`createTime`),
KEY `IDX_audit_order_updateTime` (`updateTime`),
KEY `IDX_audit_order_tenantId` (`tenantId`),
KEY `IDX_audit_order_status` (`status`),
KEY `IDX_audit_order_type_status_time` (`orderType`, `status`, `createTime`),
KEY `IDX_audit_order_oem_time` (`oemId`, `createTime`),
KEY `IDX_audit_order_agent_time` (`agentId`, `createTime`),
KEY `IDX_audit_order_decision_time` (`auditDecision`, `createTime`),
KEY `IDX_audit_order_policyNo` (`policyNo`),
KEY `IDX_audit_order_dealer_time` (`factoryName`, `createTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='审核订单主表';
CREATE TABLE IF NOT EXISTS `audit_order_detail` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`createTime` varchar(255) NOT NULL COMMENT '创建时间',
`updateTime` varchar(255) NOT NULL COMMENT '更新时间',
`tenantId` int NULL COMMENT '租户ID',
`orderId` int NOT NULL COMMENT '关联审核订单IDaudit_order.id',
`stepType` varchar(30) NOT NULL COMMENT '步骤类型 id_card_ocr/vehicle_invoice_ocr/driving_license_ocr/data_compare/rule_check/insure_audit/claim_audit/damage_detect/audit_report/oem_audit_router/llm_judge',
`stepName` varchar(100) NOT NULL COMMENT '步骤名称(中文展示用)',
`skillName` varchar(50) NULL COMMENT '调用的Skill标识',
`inputData` json NULL COMMENT 'Skill输入数据',
`outputData` json NULL COMMENT 'Skill输出结果OCR字段、比对结果等',
`score` decimal(5,2) NULL COMMENT '该步骤评分0-100',
`passed` tinyint NULL COMMENT '该步骤是否通过 0=否 1=是 2=警告',
`remark` text NULL COMMENT '备注/原因',
`duration` int NULL COMMENT '该步骤耗时(ms)',
PRIMARY KEY (`id`),
KEY `IDX_audit_order_detail_createTime` (`createTime`),
KEY `IDX_audit_order_detail_updateTime` (`updateTime`),
KEY `IDX_audit_order_detail_tenantId` (`tenantId`),
KEY `IDX_audit_order_detail_orderId` (`orderId`),
KEY `IDX_audit_order_detail_order_step` (`orderId`, `stepType`),
KEY `IDX_audit_order_detail_skill` (`skillName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='审核步骤明细表';
CREATE TABLE IF NOT EXISTS `audit_config` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`createTime` varchar(255) NOT NULL COMMENT '创建时间',
`updateTime` varchar(255) NOT NULL COMMENT '更新时间',
`tenantId` int NULL COMMENT '租户ID',
`name` varchar(100) NOT NULL COMMENT '规则名称',
`orderType` varchar(20) NULL COMMENT '订单类型 insure=投保 claim=理赔, 为空表示匹配所有',
`oemId` int NULL COMMENT '主机厂ID, 为空表示匹配所有',
`oemName` varchar(100) NULL COMMENT '主机厂名称(展示用)',
`productKeyword` varchar(200) NULL COMMENT '产品名称关键词, 为空表示匹配所有, 支持模糊匹配',
`productNo` varchar(100) NULL COMMENT '产品编号, 为空表示匹配所有',
`productName` varchar(200) NULL COMMENT '产品名称(展示用)',
`carType` varchar(10) NULL COMMENT '车辆类型 0=新车 1=在用车, 为空表示匹配所有',
`carPower` varchar(20) NULL COMMENT '动力类型 1=燃油 2=新能源, 长安专用, 为空表示匹配所有',
`agentId` int NOT NULL COMMENT '关联的Agent ID',
`agentIds` json NULL COMMENT '关联的Agent ID列表',
`agentName` varchar(200) NULL COMMENT 'Agent名称(展示用)',
`priority` int NOT NULL DEFAULT 0 COMMENT '优先级, 数字越大越优先',
`status` int NOT NULL DEFAULT 1 COMMENT '状态 0=禁用 1=启用',
`remark` text NULL COMMENT '备注',
PRIMARY KEY (`id`),
KEY `IDX_audit_config_createTime` (`createTime`),
KEY `IDX_audit_config_updateTime` (`updateTime`),
KEY `IDX_audit_config_tenantId` (`tenantId`),
KEY `IDX_audit_config_agentId` (`agentId`),
KEY `IDX_audit_config_priority` (`priority`),
KEY `IDX_audit_config_status` (`status`),
KEY `IDX_audit_config_match` (`status`, `orderType`, `oemId`, `carType`, `carPower`, `priority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='审核配置规则表';
-- 已存在 audit_config 表的升级 SQL
-- ALTER TABLE `audit_config` ADD COLUMN `carType` varchar(10) NULL COMMENT '车辆类型 0=新车 1=在用车, 为空表示匹配所有' AFTER `productKeyword`;
-- ALTER TABLE `audit_config` ADD COLUMN `productNo` varchar(100) NULL COMMENT '产品编号, 为空表示匹配所有' AFTER `productKeyword`;
-- ALTER TABLE `audit_config` ADD COLUMN `productName` varchar(200) NULL COMMENT '产品名称(展示用)' AFTER `productNo`;
-- ALTER TABLE `audit_config` ADD COLUMN `carPower` varchar(20) NULL COMMENT '动力类型 1=燃油 2=新能源, 长安专用, 为空表示匹配所有' AFTER `carType`;
-- ALTER TABLE `audit_config` ADD COLUMN `agentIds` json NULL COMMENT '关联的Agent ID列表' AFTER `agentId`;
-- ALTER TABLE `audit_config` DROP INDEX `IDX_audit_config_match`;
-- ALTER TABLE `audit_config` ADD INDEX `IDX_audit_config_match` (`status`, `orderType`, `oemId`, `carType`, `carPower`, `priority`);
-- 菜单权限:审核管理 / 审核订单 / 审核统计 / 审核配置 / 审核详情(隐藏)
-- 使用 router 做幂等判断;若已有同 router 菜单,本段不会重复插入。
SET @now = DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT NULL, '审核管理', NULL, NULL, 0, 'icon-dict', 95, NULL, 1, 1, @now, @now, NULL
WHERE NOT EXISTS (
SELECT 1 FROM `base_sys_menu` WHERE `name` = '审核管理' AND `parentId` IS NULL
);
SET @audit_parent_id = (
SELECT `id` FROM `base_sys_menu`
WHERE `name` = '审核管理' AND `parentId` IS NULL
ORDER BY `id` DESC LIMIT 1
);
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT @audit_parent_id, '审核订单', '/audit/orders', NULL, 1, 'icon-menu', 0, 'modules/audit/views/order-list.vue', 1, 1, @now, @now, NULL
WHERE NOT EXISTS (SELECT 1 FROM `base_sys_menu` WHERE `router` = '/audit/orders');
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT @audit_parent_id, '审核统计', '/audit/dashboard', NULL, 1, 'icon-count', 1, 'modules/audit/views/dashboard.vue', 1, 1, @now, @now, NULL
WHERE NOT EXISTS (SELECT 1 FROM `base_sys_menu` WHERE `router` = '/audit/dashboard');
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT @audit_parent_id, '审核配置', '/audit/config', NULL, 1, 'icon-params', 2, 'modules/audit/views/config.vue', 1, 1, @now, @now, NULL
WHERE NOT EXISTS (SELECT 1 FROM `base_sys_menu` WHERE `router` = '/audit/config');
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT @audit_parent_id, '审核详情', '/audit/detail', NULL, 1, 'icon-menu', 3, 'modules/audit/views/order-detail.vue', 0, 0, @now, @now, NULL
WHERE NOT EXISTS (SELECT 1 FROM `base_sys_menu` WHERE `router` = '/audit/detail');
SET @audit_order_menu_id = (SELECT `id` FROM `base_sys_menu` WHERE `router` = '/audit/orders' ORDER BY `id` DESC LIMIT 1);
SET @audit_dashboard_menu_id = (SELECT `id` FROM `base_sys_menu` WHERE `router` = '/audit/dashboard' ORDER BY `id` DESC LIMIT 1);
SET @audit_config_menu_id = (SELECT `id` FROM `base_sys_menu` WHERE `router` = '/audit/config' ORDER BY `id` DESC LIMIT 1);
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT @audit_order_menu_id, '查询', NULL, 'audit:audit:page,audit:audit:list,audit:audit:info,audit:audit:detail', 2, NULL, 0, NULL, 1, 1, @now, @now, NULL
WHERE NOT EXISTS (SELECT 1 FROM `base_sys_menu` WHERE `parentId` = @audit_order_menu_id AND `name` = '查询');
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT @audit_order_menu_id, '操作', NULL, 'audit:audit:retry,audit:audit:manual,audit:audit:remove,audit:audit:stats', 2, NULL, 1, NULL, 1, 1, @now, @now, NULL
WHERE NOT EXISTS (SELECT 1 FROM `base_sys_menu` WHERE `parentId` = @audit_order_menu_id AND `name` = '操作');
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT @audit_dashboard_menu_id, '查询', NULL, 'audit:audit:statsOverview,audit:audit:statsByProduct,audit:audit:statsByDealer,audit:audit:statsByOem,audit:audit:statsByInsurance,audit:audit:filterOptions,audit:audit:searchDealers,audit:audit:searchProducts,audit:audit:exportData', 2, NULL, 0, NULL, 1, 1, @now, @now, NULL
WHERE NOT EXISTS (SELECT 1 FROM `base_sys_menu` WHERE `parentId` = @audit_dashboard_menu_id AND `name` = '查询');
INSERT INTO `base_sys_menu`
(`parentId`, `name`, `router`, `perms`, `type`, `icon`, `orderNum`, `viewPath`, `keepAlive`, `isShow`, `createTime`, `updateTime`, `tenantId`)
SELECT @audit_config_menu_id, '管理', NULL, 'audit:config:add,audit:config:delete,audit:config:update,audit:config:info,audit:config:list,audit:config:page,audit:config:agents,audit:config:testMatch', 2, NULL, 0, NULL, 1, 1, @now, @now, NULL
WHERE NOT EXISTS (SELECT 1 FROM `base_sys_menu` WHERE `parentId` = @audit_config_menu_id AND `name` = '管理');