✨ 新增项目预付核销,并修复平台公司多选、常用线路组织过滤与登录 IP 连坐锁

结算附件支持项目预付核销并扣减可付款金额;加固项目平台公司多选字段扩容脚本;常用线路新增归属组织与列表筛选对齐;登录失败仅按账号锁定,取消 IP 级连坐。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-16 02:01:58 +08:00
parent 0657cfe69f
commit 93a6555293
24 changed files with 817 additions and 29 deletions
@@ -1,4 +1,64 @@
-- 平台公司支持多选:ID 逗号分隔,名称顿号分隔
ALTER TABLE `blade_project_apply`
MODIFY COLUMN `undertake_dept_id` varchar(500) DEFAULT NULL COMMENT '平台公司ID,多个逗号分隔',
MODIFY COLUMN `undertake_dept_name` varchar(500) DEFAULT NULL COMMENT '平台公司,多个顿号分隔';
-- 项目立项平台公司多选:ID 逗号分隔,名称顿号分隔
-- 原字段:undertake_dept_id bigint、undertake_dept_name varchar(100)
-- 选择 2 个及以上平台公司时,若未扩容会报 Incorrect integer value / Data truncation
-- 整列索引挂在 varchar(500) 上可能因键长超限导致 ALTER 失败,故先删索引再改前缀索引
DELIMITER $$
DROP PROCEDURE IF EXISTS `upgrade_project_apply_undertake_dept_multi_20261014`$$
CREATE PROCEDURE `upgrade_project_apply_undertake_dept_multi_20261014`()
BEGIN
DECLARE db_name varchar(128);
DECLARE need_modify tinyint DEFAULT 0;
SET db_name = DATABASE();
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = db_name
AND table_name = 'blade_project_apply'
AND column_name = 'undertake_dept_id'
AND (
data_type IN ('bigint', 'int', 'integer')
OR (data_type IN ('varchar', 'char') AND IFNULL(character_maximum_length, 0) < 500)
)
) OR EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = db_name
AND table_name = 'blade_project_apply'
AND column_name = 'undertake_dept_name'
AND data_type IN ('varchar', 'char')
AND IFNULL(character_maximum_length, 0) < 500
) THEN
SET need_modify = 1;
END IF;
IF need_modify = 1 THEN
IF EXISTS (
SELECT 1 FROM information_schema.statistics
WHERE table_schema = db_name
AND table_name = 'blade_project_apply'
AND index_name = 'idx_project_apply_dept'
) THEN
ALTER TABLE `blade_project_apply` DROP INDEX `idx_project_apply_dept`;
END IF;
ALTER TABLE `blade_project_apply`
MODIFY COLUMN `undertake_dept_id` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '平台公司ID,多个逗号分隔',
MODIFY COLUMN `undertake_dept_name` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '平台公司,多个顿号分隔';
END IF;
IF NOT EXISTS (
SELECT 1 FROM information_schema.statistics
WHERE table_schema = db_name
AND table_name = 'blade_project_apply'
AND index_name = 'idx_project_apply_dept'
) THEN
ALTER TABLE `blade_project_apply`
ADD INDEX `idx_project_apply_dept` (`undertake_dept_id`(191)) USING BTREE;
END IF;
END$$
CALL `upgrade_project_apply_undertake_dept_multi_20261014`()$$
DROP PROCEDURE `upgrade_project_apply_undertake_dept_multi_20261014`$$
DELIMITER ;
@@ -60,7 +60,7 @@ CREATE TABLE `blade_project_apply` (
`void_reason` varchar(500) DEFAULT NULL COMMENT '作废原因',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_project_apply_name` (`project_name`, `is_deleted`) USING BTREE,
KEY `idx_project_apply_dept` (`undertake_dept_id`) USING BTREE,
KEY `idx_project_apply_dept` (`undertake_dept_id`(191)) USING BTREE,
KEY `idx_project_apply_status` (`approval_status`) USING BTREE,
KEY `idx_project_apply_create_time` (`create_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目立项';
@@ -80,8 +80,8 @@ CREATE TABLE `blade_temporary_credit_limit` (
`project_id` bigint(20) DEFAULT NULL COMMENT '项目ID',
`project_code` varchar(100) DEFAULT NULL COMMENT '项目编号',
`project_name` varchar(100) DEFAULT NULL COMMENT '项目名称',
`undertake_dept_id` varchar(500) DEFAULT NULL COMMENT '平台公司ID,多个逗号分隔',
`undertake_dept_name` varchar(500) DEFAULT NULL COMMENT '平台公司,多个顿号分隔',
`undertake_dept_id` bigint(20) DEFAULT NULL COMMENT '承办部门ID',
`undertake_dept_name` varchar(100) DEFAULT NULL COMMENT '承办部门',
`project_fund_limit` decimal(18,2) DEFAULT NULL COMMENT '项目资金使用额度(万元)',
`used_fund_limit` decimal(18,2) DEFAULT NULL COMMENT '已使用项目资金额度(万元)',
`remaining_fund_limit` decimal(18,2) DEFAULT NULL COMMENT '剩余项目资金使用额度(万元)',
@@ -0,0 +1,23 @@
-- 结算单项目预付核销明细
CREATE TABLE IF NOT EXISTS `blade_settlement_project_advance_write_off` (
`id` bigint NOT NULL COMMENT '主键',
`tenant_id` varchar(12) NOT NULL DEFAULT '000000' COMMENT '租户ID',
`settlement_type` varchar(20) NOT NULL COMMENT '结算单类型 pre/formal',
`settlement_id` bigint NOT NULL COMMENT '预结算/正式结算单ID',
`payment_application_id` bigint NOT NULL COMMENT '项目预付付款申请ID',
`payment_no` varchar(64) DEFAULT NULL COMMENT '预付单号',
`project_advance_amount` decimal(18,2) DEFAULT 0.00 COMMENT '项目预付金额',
`write_off_amount` decimal(18,2) NOT NULL DEFAULT 0.00 COMMENT '本次核销金额',
`kingdee_bill_no` varchar(100) DEFAULT NULL COMMENT '金蝶预付单号',
`create_user` bigint DEFAULT NULL COMMENT '创建人',
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_user` bigint DEFAULT NULL COMMENT '更新人',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`status` int DEFAULT 1 COMMENT '业务状态',
`is_deleted` int DEFAULT 0 COMMENT '是否已删除',
PRIMARY KEY (`id`),
KEY `idx_spa_write_off_settlement` (`settlement_type`,`settlement_id`),
KEY `idx_spa_write_off_payment` (`payment_application_id`),
KEY `idx_spa_write_off_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='结算单项目预付核销';