创建报销多级审批流程表.sql
4.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
-- 报销多级审批流程改造 - 数据库表结构
-- 执行时间:2024年
-- 说明:支持3-5个动态审批节点,每个报销申请在创建时设置节点和审批人,支持通过/不通过/退回操作
-- 1. 报销申请节点表(每个报销申请的节点配置)
CREATE TABLE IF NOT EXISTS `lq_reimbursement_application_node` (
`F_Id` varchar(50) NOT NULL COMMENT '节点编号',
`F_ApplicationId` varchar(50) NOT NULL COMMENT '报销申请ID',
`F_NodeOrder` int NOT NULL COMMENT '节点顺序(1,2,3,4,5)',
`F_NodeName` varchar(100) DEFAULT NULL COMMENT '节点名称',
`F_ApprovalType` varchar(20) DEFAULT '会签' COMMENT '审批类型(会签/或签)',
`F_IsRequired` int DEFAULT 1 COMMENT '是否必审(1-必审,0-可选)',
`F_CreateTime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`F_Id`),
KEY `idx_application_id` (`F_ApplicationId`),
KEY `idx_node_order` (`F_ApplicationId`, `F_NodeOrder`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='报销申请节点表';
-- 2. 报销申请节点审批人表(每个节点的审批人,在创建报销申请时指定)
CREATE TABLE IF NOT EXISTS `lq_reimbursement_application_node_user` (
`F_Id` varchar(50) NOT NULL COMMENT '记录编号',
`F_ApplicationId` varchar(50) NOT NULL COMMENT '报销申请ID',
`F_NodeId` varchar(50) NOT NULL COMMENT '节点编号',
`F_NodeOrder` int NOT NULL COMMENT '节点顺序(1,2,3,4,5)',
`F_UserId` varchar(50) NOT NULL COMMENT '审批人ID',
`F_UserName` varchar(100) DEFAULT NULL COMMENT '审批人姓名',
`F_SortOrder` int DEFAULT 0 COMMENT '排序',
`F_CreateTime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`F_Id`),
KEY `idx_application_id` (`F_ApplicationId`),
KEY `idx_node_id` (`F_NodeId`),
KEY `idx_user_id` (`F_UserId`),
KEY `idx_node_order` (`F_ApplicationId`, `F_NodeOrder`),
UNIQUE KEY `uk_application_node_user` (`F_ApplicationId`, `F_NodeId`, `F_UserId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='报销申请节点审批人表';
-- 3. 审批记录表
CREATE TABLE IF NOT EXISTS `lq_reimbursement_approval_record` (
`F_Id` varchar(50) NOT NULL COMMENT '记录编号',
`F_ApplicationId` varchar(50) NOT NULL COMMENT '报销申请ID',
`F_NodeId` varchar(50) NOT NULL COMMENT '节点编号',
`F_NodeOrder` int NOT NULL COMMENT '节点顺序(1,2,3,4,5)',
`F_ApproverId` varchar(50) NOT NULL COMMENT '审批人ID',
`F_ApproverName` varchar(100) DEFAULT NULL COMMENT '审批人姓名',
`F_ApprovalResult` varchar(20) NOT NULL COMMENT '审批结果(通过/不通过/退回)',
`F_ApprovalOpinion` varchar(500) DEFAULT NULL COMMENT '审批意见',
`F_ApprovalTime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '审批时间',
`F_IsCurrentNode` int DEFAULT 0 COMMENT '是否当前节点(1-是,0-否)',
PRIMARY KEY (`F_Id`),
KEY `idx_application_id` (`F_ApplicationId`),
KEY `idx_node_id` (`F_NodeId`),
KEY `idx_approver_id` (`F_ApproverId`),
KEY `idx_node_order` (`F_ApplicationId`, `F_NodeOrder`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='审批记录表';
-- 4. 修改报销申请表,添加新字段
ALTER TABLE `lq_reimbursement_application`
ADD COLUMN `F_NodeCount` int DEFAULT 0 COMMENT '节点数量(3,4,5)' AFTER `F_PurchaseRecordsId`,
ADD COLUMN `F_CurrentNodeOrder` int DEFAULT 0 COMMENT '当前审批节点(0-待审批,1-N节点,N+1-已完成)' AFTER `F_NodeCount`,
ADD COLUMN `F_CurrentNodeId` varchar(50) DEFAULT NULL COMMENT '当前节点ID' AFTER `F_CurrentNodeOrder`,
ADD COLUMN `F_ApprovalStatus` varchar(20) DEFAULT '待审批' COMMENT '审批状态(待审批/审批中/已通过/未通过/已退回)' AFTER `F_CurrentNodeId`,
ADD COLUMN `F_ReturnedNodeOrder` int DEFAULT NULL COMMENT '退回节点' AFTER `F_ApprovalStatus`,
ADD COLUMN `F_ReturnedReason` varchar(500) DEFAULT NULL COMMENT '退回原因' AFTER `F_ReturnedNodeOrder`,
ADD KEY `idx_current_node` (`F_CurrentNodeId`),
ADD KEY `idx_approval_status` (`F_ApprovalStatus`),
ADD KEY `idx_node_count` (`F_NodeCount`);
-- 5. 数据迁移:更新已有数据的审批状态
-- 已审批的数据(假设为4个节点)
UPDATE `lq_reimbursement_application`
SET `F_NodeCount` = 4,
`F_CurrentNodeOrder` = 5,
`F_ApprovalStatus` = '已通过'
WHERE `F_ApproveStatus` = '已审批';
-- 未通过的数据(假设为4个节点)
UPDATE `lq_reimbursement_application`
SET `F_NodeCount` = 4,
`F_CurrentNodeOrder` = 1,
`F_ApprovalStatus` = '未通过'
WHERE `F_ApproveStatus` = '未通过';
-- 待审批的数据
UPDATE `lq_reimbursement_application`
SET `F_NodeCount` = 4, -- 默认4个节点,实际使用时需要根据具体情况设置
`F_CurrentNodeOrder` = 0,
`F_ApprovalStatus` = '待审批'
WHERE `F_ApproveStatus` = '待审批' OR `F_ApproveStatus` IS NULL;