-- 同一申报项目「进行中」只允许一条申报(见 docs/adr/0005-declare-uniqueness.md) -- 1) 申报项目上配置是否允许重复提交、最多同时几条 ALTER TABLE gxmu_declare ADD COLUMN allow_repeat TINYINT NOT NULL DEFAULT 0 COMMENT '是否允许重复提交 0否 1是', ADD COLUMN max_pending INT NOT NULL DEFAULT 1 COMMENT '最多同时进行中的申报条数'; -- 2) 9 张申报表补充申报项目归属与状态 -- declare_status: 0草稿 1待审核 2通过 3驳回 4作废 ALTER TABLE gxmu_sjqn ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_sjtbzbsj ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_wshqtw ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_wshqtzb ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_yxgqtdgb ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_yxgqty ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_tzbcy_form ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_qmgc_form ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_wxxzx_project ADD COLUMN declare_id INT NULL, ADD COLUMN declare_status TINYINT NOT NULL DEFAULT 1, ADD COLUMN declare_remark VARCHAR(500) NULL; ALTER TABLE gxmu_sjqn ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); ALTER TABLE gxmu_sjtbzbsj ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); ALTER TABLE gxmu_wshqtw ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); ALTER TABLE gxmu_wshqtzb ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); ALTER TABLE gxmu_yxgqtdgb ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); ALTER TABLE gxmu_yxgqty ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); ALTER TABLE gxmu_tzbcy_form ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); ALTER TABLE gxmu_qmgc_form ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); ALTER TABLE gxmu_wxxzx_project ADD KEY idx_declare_user_status (declare_id, user_id, declare_status); -- 3) 存量回填 declare_id:只在「模块 + 年度」能唯一对应到一条申报项目时回填,其余留空 -- (留空的记录不参与判重,另见 docs/adr/0005-declare-uniqueness.md 的存量处置) UPDATE gxmu_sjqn t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_sjqn' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; UPDATE gxmu_sjtbzbsj t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_sjtbzbsj' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; UPDATE gxmu_wshqtw t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_wshqtw' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; UPDATE gxmu_wshqtzb t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_wshqtzb' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; UPDATE gxmu_yxgqtdgb t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_yxgqtdgb' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; UPDATE gxmu_yxgqty t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_yxgqty' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; UPDATE gxmu_tzbcy_form t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_tzbcy_form' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; UPDATE gxmu_qmgc_form t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_qmgc_form' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; UPDATE gxmu_wxxzx_project t JOIN ( SELECT module, year, MIN(id) AS id FROM gxmu_declare WHERE deleted = 0 GROUP BY module, year HAVING COUNT(*) = 1 ) d ON d.module = 'gxmu_wxxzx_project' AND d.year = t.year SET t.declare_id = d.id WHERE t.declare_id IS NULL; -- 4) 存量回填 declare_status:按最新一条审核节点推断(0待审核 1通过 2不通过 -> 1待审核 2通过 3驳回) UPDATE gxmu_sjqn t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_sjqn' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; UPDATE gxmu_sjtbzbsj t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_sjtbzbsj' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; UPDATE gxmu_wshqtw t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_wshqtw' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; UPDATE gxmu_wshqtzb t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_wshqtzb' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; UPDATE gxmu_yxgqtdgb t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_yxgqtdgb' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; UPDATE gxmu_yxgqty t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_yxgqty' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; UPDATE gxmu_tzbcy_form t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_tzbcy_form' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; UPDATE gxmu_qmgc_form t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_qmgc_form' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; UPDATE gxmu_wxxzx_project t JOIN ( SELECT pk, SUBSTRING_INDEX(GROUP_CONCAT(status ORDER BY id DESC), ',', 1) AS latest FROM gxmu_review_list WHERE module = 'gxmu_wxxzx_project' AND deleted = 0 GROUP BY pk ) r ON r.pk = t.id SET t.declare_status = CASE WHEN r.latest = '2' THEN 3 WHEN r.latest = '1' THEN 2 ELSE 1 END; -- 5) 存量重复清单(人工清理用,不自动处理) -- SELECT 'gxmu_tzbcy_form' AS module, declare_id, user_id, COUNT(*) AS cnt -- FROM gxmu_tzbcy_form WHERE declare_status = 1 AND deleted = 0 GROUP BY declare_id, user_id HAVING cnt > 1;