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

70 lines
2.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ═══════════════════════════════════════════════════════════
-- 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;