init_pd_schema.sql 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. -- =====================================================
  2. -- 信息工程院日常绩效分配管理系统 - 数据库初始化脚本
  3. -- Schema: pd
  4. -- =====================================================
  5. -- 1. 项目表
  6. CREATE TABLE IF NOT EXISTS pd.pd_project (
  7. project_id BIGSERIAL PRIMARY KEY,
  8. project_name VARCHAR(200) NOT NULL,
  9. project_type VARCHAR(50),
  10. contract_amount DECIMAL(18,4) DEFAULT 0,
  11. estimated_output DECIMAL(18,4) DEFAULT 0,
  12. external_cost DECIMAL(18,4) DEFAULT 0,
  13. actual_output DECIMAL(18,4) DEFAULT 0,
  14. total_output DECIMAL(18,4) DEFAULT 0,
  15. project_status VARCHAR(20) DEFAULT '前期策划但未开工',
  16. risk_level VARCHAR(10),
  17. success_rate DECIMAL(5,2),
  18. lead_dept_id BIGINT,
  19. start_date DATE,
  20. end_date DATE,
  21. is_reviewed CHAR(1) DEFAULT '0',
  22. review_status VARCHAR(20),
  23. del_flag CHAR(1) DEFAULT '0',
  24. remark VARCHAR(500),
  25. create_by VARCHAR(64),
  26. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  27. update_by VARCHAR(64),
  28. update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  29. );
  30. COMMENT ON TABLE pd.pd_project IS '项目信息表';
  31. COMMENT ON COLUMN pd.pd_project.project_id IS '项目ID';
  32. COMMENT ON COLUMN pd.pd_project.project_name IS '项目名称(唯一)';
  33. COMMENT ON COLUMN pd.pd_project.project_type IS '项目类型';
  34. COMMENT ON COLUMN pd.pd_project.contract_amount IS '合同额(万元,4位小数)';
  35. COMMENT ON COLUMN pd.pd_project.estimated_output IS '预估产值(万元)';
  36. COMMENT ON COLUMN pd.pd_project.external_cost IS '外协成本(万元)';
  37. COMMENT ON COLUMN pd.pd_project.actual_output IS '实际产值(合同额-外协成本)';
  38. COMMENT ON COLUMN pd.pd_project.total_output IS '项目总产值';
  39. COMMENT ON COLUMN pd.pd_project.project_status IS '项目状态:前期策划但未开工/前期策划并且同步开工/已完成招投标在建/完工/作废';
  40. COMMENT ON COLUMN pd.pd_project.risk_level IS '风险等级:高/中/低';
  41. COMMENT ON COLUMN pd.pd_project.success_rate IS '立项成功率(%)';
  42. COMMENT ON COLUMN pd.pd_project.lead_dept_id IS '牵头部门ID';
  43. COMMENT ON COLUMN pd.pd_project.start_date IS '立项时间';
  44. COMMENT ON COLUMN pd.pd_project.end_date IS '完工时间';
  45. COMMENT ON COLUMN pd.pd_project.is_reviewed IS '是否已审核确认(0否 1是)';
  46. COMMENT ON COLUMN pd.pd_project.review_status IS '审核状态';
  47. COMMENT ON COLUMN pd.pd_project.del_flag IS '删除标志(0正常 1作废)';
  48. COMMENT ON COLUMN pd.pd_project.remark IS '备注(立项风险说明等)';
  49. -- 2. 项目协作部门关联表
  50. CREATE TABLE IF NOT EXISTS pd.pd_project_collaboration (
  51. collaboration_id BIGSERIAL PRIMARY KEY,
  52. project_id BIGINT NOT NULL,
  53. dept_id BIGINT NOT NULL,
  54. is_confirmed CHAR(1) DEFAULT '0',
  55. confirm_by VARCHAR(64),
  56. confirm_time TIMESTAMP,
  57. create_by VARCHAR(64),
  58. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  59. update_by VARCHAR(64),
  60. update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  61. );
  62. COMMENT ON TABLE pd.pd_project_collaboration IS '项目协作部门关联表';
  63. COMMENT ON COLUMN pd.pd_project_collaboration.project_id IS '关联项目ID';
  64. COMMENT ON COLUMN pd.pd_project_collaboration.dept_id IS '协作部门ID';
  65. COMMENT ON COLUMN pd.pd_project_collaboration.is_confirmed IS '协作部门是否确认(0否 1是)';
  66. COMMENT ON COLUMN pd.pd_project_collaboration.confirm_by IS '确认人';
  67. COMMENT ON COLUMN pd.pd_project_collaboration.confirm_time IS '确认时间';
  68. -- 3. 月度产值填报记录表
  69. CREATE TABLE IF NOT EXISTS pd.pd_output_value (
  70. output_id BIGSERIAL PRIMARY KEY,
  71. project_id BIGINT NOT NULL,
  72. dept_id BIGINT NOT NULL,
  73. output_month VARCHAR(7) NOT NULL,
  74. actual_progress DECIMAL(5,1) DEFAULT 0,
  75. output_value DECIMAL(18,4) DEFAULT 0,
  76. is_collaboration CHAR(1) DEFAULT '0',
  77. collaboration_id BIGINT,
  78. progress_note VARCHAR(500),
  79. submit_status VARCHAR(20) DEFAULT 'draft',
  80. review_status VARCHAR(20) DEFAULT 'pending',
  81. review_comment VARCHAR(500),
  82. reviewed_by VARCHAR(64),
  83. reviewed_time TIMESTAMP,
  84. create_by VARCHAR(64),
  85. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  86. update_by VARCHAR(64),
  87. update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  88. );
  89. COMMENT ON TABLE pd.pd_output_value IS '月度产值填报记录表';
  90. COMMENT ON COLUMN pd.pd_output_value.project_id IS '关联项目ID';
  91. COMMENT ON COLUMN pd.pd_output_value.dept_id IS '填报部门ID';
  92. COMMENT ON COLUMN pd.pd_output_value.output_month IS '产值月份(YYYY-MM)';
  93. COMMENT ON COLUMN pd.pd_output_value.actual_progress IS '当月实际进度(%)';
  94. COMMENT ON COLUMN pd.pd_output_value.output_value IS '当月产值(万元)';
  95. COMMENT ON COLUMN pd.pd_output_value.is_collaboration IS '是否协作部分产值(0否 1是)';
  96. COMMENT ON COLUMN pd.pd_output_value.collaboration_id IS '协作申请ID';
  97. COMMENT ON COLUMN pd.pd_output_value.progress_note IS '进度说明';
  98. COMMENT ON COLUMN pd.pd_output_value.submit_status IS '提交状态:draft/提交/已确认/逾期';
  99. COMMENT ON COLUMN pd.pd_output_value.review_status IS '审核状态:pending/通过/不通过';
  100. COMMENT ON COLUMN pd.pd_output_value.review_comment IS '审核意见';
  101. COMMENT ON COLUMN pd.pd_output_value.reviewed_by IS '审核人';
  102. COMMENT ON COLUMN pd.pd_output_value.reviewed_time IS '审核时间';
  103. -- 4. 绩效核算表
  104. CREATE TABLE IF NOT EXISTS pd.pd_performance (
  105. performance_id BIGSERIAL PRIMARY KEY,
  106. dept_id BIGINT NOT NULL,
  107. perf_month VARCHAR(7) NOT NULL,
  108. total_output_value DECIMAL(18,4) DEFAULT 0,
  109. performance_amount DECIMAL(18,4) DEFAULT 0,
  110. calculation_ratio DECIMAL(5,4) DEFAULT 0.2000,
  111. create_by VARCHAR(64),
  112. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  113. update_by VARCHAR(64),
  114. update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  115. );
  116. COMMENT ON TABLE pd.pd_performance IS '绩效核算表';
  117. COMMENT ON COLUMN pd.pd_performance.dept_id IS '部门ID';
  118. COMMENT ON COLUMN pd.pd_performance.perf_month IS '绩效月份(YYYY-MM)';
  119. COMMENT ON COLUMN pd.pd_performance.total_output_value IS '当月审核通过产值总和(万元)';
  120. COMMENT ON COLUMN pd.pd_performance.performance_amount IS '绩效总额(万元)';
  121. COMMENT ON COLUMN pd.pd_performance.calculation_ratio IS '核算比例(默认0.20即20%)';
  122. -- 5. 通知消息表
  123. CREATE TABLE IF NOT EXISTS pd.pd_notification (
  124. notification_id BIGSERIAL PRIMARY KEY,
  125. title VARCHAR(200) NOT NULL,
  126. content TEXT,
  127. notify_type VARCHAR(50),
  128. target_user_id BIGINT,
  129. is_read CHAR(1) DEFAULT '0',
  130. read_time TIMESTAMP,
  131. send_status VARCHAR(20) DEFAULT 'pending',
  132. create_by VARCHAR(64),
  133. create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  134. );
  135. COMMENT ON TABLE pd.pd_notification IS '通知消息表';
  136. COMMENT ON COLUMN pd.pd_notification.title IS '通知标题';
  137. COMMENT ON COLUMN pd.pd_notification.content IS '通知内容';
  138. COMMENT ON COLUMN pd.pd_notification.notify_type IS '通知类型:填报提醒/审核提醒/逾期提醒/协作提醒/结果反馈';
  139. COMMENT ON COLUMN pd.pd_notification.target_user_id IS '接收用户ID';
  140. COMMENT ON COLUMN pd.pd_notification.is_read IS '是否已读(0未读 1已读)';
  141. COMMENT ON COLUMN pd.pd_notification.read_time IS '阅读时间';
  142. COMMENT ON COLUMN pd.pd_notification.send_status IS '发送状态:pending/已发送/失败';
  143. -- 创建索引
  144. CREATE INDEX IF NOT EXISTS idx_project_lead_dept ON pd.pd_project(lead_dept_id);
  145. CREATE INDEX IF NOT EXISTS idx_project_status ON pd.pd_project(project_status);
  146. CREATE INDEX IF NOT EXISTS idx_project_del_flag ON pd.pd_project(del_flag);
  147. CREATE INDEX IF NOT EXISTS idx_collaboration_project ON pd.pd_project_collaboration(project_id);
  148. CREATE INDEX IF NOT EXISTS idx_collaboration_dept ON pd.pd_project_collaboration(dept_id);
  149. CREATE INDEX IF NOT EXISTS idx_output_project ON pd.pd_output_value(project_id);
  150. CREATE INDEX IF NOT EXISTS idx_output_dept ON pd.pd_output_value(dept_id);
  151. CREATE INDEX IF NOT EXISTS idx_output_month ON pd.pd_output_value(output_month);
  152. CREATE INDEX IF NOT EXISTS idx_output_submit_status ON pd.pd_output_value(submit_status);
  153. CREATE INDEX IF NOT EXISTS idx_output_review_status ON pd.pd_output_value(review_status);
  154. CREATE INDEX IF NOT EXISTS idx_performance_dept ON pd.pd_performance(dept_id);
  155. CREATE INDEX IF NOT EXISTS idx_performance_month ON pd.pd_performance(perf_month);
  156. CREATE INDEX IF NOT EXISTS idx_notification_user ON pd.pd_notification(target_user_id);
  157. CREATE INDEX IF NOT EXISTS idx_notification_type ON pd.pd_notification(notify_type);
  158. CREATE INDEX IF NOT EXISTS idx_notification_read ON pd.pd_notification(is_read);
  159. -- 插入初始系统配置数据(使用 RuoYi 已有的 sys_config 表,放在 ry schema)
  160. INSERT INTO ry.sys_config (config_name, config_key, config_value, config_type, create_by, create_time)
  161. VALUES
  162. ('绩效核算比例(%)', 'perf.calculation_ratio', '20', 'Y', 'admin', CURRENT_TIMESTAMP),
  163. ('月度填报开始日', 'perf.fill_start_day', '1', 'Y', 'admin', CURRENT_TIMESTAMP),
  164. ('月度填报截止日', 'perf.fill_end_day', '12', 'Y', 'admin', CURRENT_TIMESTAMP),
  165. ('月度审核开始日', 'perf.review_start_day', '13', 'Y', 'admin', CURRENT_TIMESTAMP),
  166. ('月度审核截止日', 'perf.review_end_day', '16', 'Y', 'admin', CURRENT_TIMESTAMP)
  167. ON CONFLICT DO NOTHING;
  168. -- 插入默认6个部门数据
  169. INSERT INTO ry.sys_dept (parent_id, ancestors, dept_name, order_num, leader, status, del_flag, create_by, create_time)
  170. VALUES
  171. (0, '0', '数智房地事业部', 1, '', '0', '0', 'admin', CURRENT_TIMESTAMP),
  172. (0, '0', '数字孪生事业部', 2, '', '0', '0', 'admin', CURRENT_TIMESTAMP),
  173. (0, '0', '策划研发运维部', 3, '', '0', '0', 'admin', CURRENT_TIMESTAMP),
  174. (0, '0', '综合战略事业部', 4, '', '0', '0', 'admin', CURRENT_TIMESTAMP),
  175. (0, '0', '商务拓展运营部', 5, '', '0', '0', 'admin', CURRENT_TIMESTAMP),
  176. (0, '0', '国土空间数据部', 6, '', '0', '0', 'admin', CURRENT_TIMESTAMP)
  177. ON CONFLICT DO NOTHING;