feat(bid): 新增历史报价参考功能并修复多租户与数据库约束问题

1.  为比价功能新增历史报价查询逻辑,当物料无当前RFQ报价时补充同物料其他RFQ的最近报价
2.  修复BizComparisonController的多租户ID获取逻辑,兼容无租户场景
3.  扩展报价单状态范围,将draft状态纳入有效报价统计
4.  新增发货单相关数据库表与修复脚本,修正biz_delivery_order的非空约束问题
5.  优化前端比价页面布局,移除旧的卡片式报价展示,统一使用表格展示
6.  修复类型转换与空指针风险,完善工具类方法的兼容性处理
7.  优化评分排序与徽章标记逻辑,避免覆盖自定义徽章
This commit is contained in:
2026-06-17 02:54:35 +08:00
parent f5b91c3bd0
commit 38f6246090
7 changed files with 204 additions and 21 deletions

View File

@@ -0,0 +1,69 @@
-- ═══════════════════════════════════════════════════════════
-- Fix: 发货单(biz_delivery_order) rfq_id 非空约束修复
--
-- 问题描述:
-- client 类型发货单不关联 RFQ(询价单)rfq_id 应为 NULL
-- 若表存在 NOT NULL 约束,会导致 SQLIntegrityConstraintViolationException
--
-- 修复:
-- 1) 确保 rfq_id 列允许 NULL
-- 2) 补充缺失的 DDL该表在项目中无建表脚本
-- ═══════════════════════════════════════════════════════════
SET NAMES utf8mb4;
-- 1. 检查并移除 rfq_id 上的 NOT NULL 约束
-- (MySQL 中通过 MODIFY COLUMN 去掉 NOT NULL)
DROP PROCEDURE IF EXISTS fix_rfq_nullable;
DELIMITER //
CREATE PROCEDURE fix_rfq_nullable()
BEGIN
DECLARE col_is_nullable VARCHAR(3);
SELECT IS_NULLABLE INTO col_is_nullable
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'biz_delivery_order'
AND COLUMN_NAME = 'rfq_id';
IF col_is_nullable = 'NO' THEN
ALTER TABLE biz_delivery_order MODIFY COLUMN rfq_id BIGINT DEFAULT NULL COMMENT '关联RFQ ID(client类型可为空)';
SELECT 'rfq_id 已从 NOT NULL 改为 NULL' AS info;
ELSE
SELECT 'rfq_id 已经是可空状态' AS info;
END IF;
END //
DELIMITER ;
CALL fix_rfq_nullable();
DROP PROCEDURE IF EXISTS fix_rfq_nullable;
-- 2. 同理确保 supplier_id 允许 NULLclient 类型没有供应商)
DROP PROCEDURE IF EXISTS fix_supplier_nullable;
DELIMITER //
CREATE PROCEDURE fix_supplier_nullable()
BEGIN
DECLARE col_is_nullable VARCHAR(3);
SELECT IS_NULLABLE INTO col_is_nullable
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'biz_delivery_order'
AND COLUMN_NAME = 'supplier_id';
IF col_is_nullable = 'NO' THEN
ALTER TABLE biz_delivery_order MODIFY COLUMN supplier_id BIGINT DEFAULT NULL COMMENT '供应商ID(client类型可为空)';
SELECT 'supplier_id 已从 NOT NULL 改为 NULL' AS info;
ELSE
SELECT 'supplier_id 已经是可空状态' AS info;
END IF;
END //
DELIMITER ;
CALL fix_supplier_nullable();
DROP PROCEDURE IF EXISTS fix_supplier_nullable;
-- 3. 验证结果
SELECT COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE, COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'biz_delivery_order'
AND COLUMN_NAME IN ('rfq_id', 'supplier_id', 'quotation_id', 'client_quote_id');
SELECT '修复完成' AS result;