feat(bid): 新增历史报价参考功能并修复多租户与数据库约束问题
1. 为比价功能新增历史报价查询逻辑,当物料无当前RFQ报价时补充同物料其他RFQ的最近报价 2. 修复BizComparisonController的多租户ID获取逻辑,兼容无租户场景 3. 扩展报价单状态范围,将draft状态纳入有效报价统计 4. 新增发货单相关数据库表与修复脚本,修正biz_delivery_order的非空约束问题 5. 优化前端比价页面布局,移除旧的卡片式报价展示,统一使用表格展示 6. 修复类型转换与空指针风险,完善工具类方法的兼容性处理 7. 优化评分排序与徽章标记逻辑,避免覆盖自定义徽章
This commit is contained in:
@@ -222,6 +222,47 @@ CREATE TABLE IF NOT EXISTS biz_transaction (
|
||||
PRIMARY KEY (tx_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易记录';
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════
|
||||
-- 发货单(注:该表需手动创建,此前未包含在 DDL 中)
|
||||
-- ═══════════════════════════════════════════════════════════════
|
||||
CREATE TABLE IF NOT EXISTS biz_delivery_order (
|
||||
do_id BIGINT NOT NULL AUTO_INCREMENT,
|
||||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||||
do_no VARCHAR(50) NOT NULL COMMENT '发货单号',
|
||||
type VARCHAR(20) DEFAULT NULL COMMENT '类型(supplier/client)',
|
||||
rfq_id BIGINT DEFAULT NULL COMMENT '关联RFQ ID(client类型可为空)',
|
||||
quotation_id BIGINT DEFAULT NULL COMMENT '关联报价单ID',
|
||||
client_quote_id BIGINT DEFAULT NULL COMMENT '关联甲方报价单ID',
|
||||
supplier_id BIGINT DEFAULT NULL COMMENT '供应商ID(client类型可为空)',
|
||||
total_amount DECIMAL(15,4) DEFAULT 0 COMMENT '总金额',
|
||||
currency VARCHAR(10) DEFAULT 'CNY',
|
||||
delivery_date DATE DEFAULT NULL COMMENT '交货日期',
|
||||
delay_date DATE DEFAULT NULL COMMENT '延期日期',
|
||||
actual_close_date DATE DEFAULT NULL COMMENT '实际结单日期',
|
||||
close_date_set_by VARCHAR(64) DEFAULT '' COMMENT '结单设置人',
|
||||
delivery_status VARCHAR(20) DEFAULT 'pending' COMMENT '状态(pending/transit/history/confirmed/rejected)',
|
||||
remark VARCHAR(500) DEFAULT NULL,
|
||||
create_by VARCHAR(64) DEFAULT '',
|
||||
create_time DATETIME,
|
||||
update_by VARCHAR(64) DEFAULT '',
|
||||
update_time DATETIME,
|
||||
PRIMARY KEY (do_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发货单';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS biz_delivery_order_item (
|
||||
item_id BIGINT NOT NULL AUTO_INCREMENT,
|
||||
do_id BIGINT NOT NULL COMMENT '发货单ID',
|
||||
material_id BIGINT DEFAULT 0,
|
||||
material_name VARCHAR(200) DEFAULT '',
|
||||
spec VARCHAR(500) DEFAULT '',
|
||||
unit VARCHAR(50) DEFAULT '',
|
||||
quantity DECIMAL(15,4) DEFAULT 0,
|
||||
unit_price DECIMAL(15,4) DEFAULT 0,
|
||||
total_price DECIMAL(15,4) DEFAULT 0,
|
||||
remark VARCHAR(500) DEFAULT '',
|
||||
PRIMARY KEY (item_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发货单明细';
|
||||
|
||||
INSERT IGNORE INTO sys_menu(menu_id,menu_name,parent_id,order_num,path,component,query,is_frame,is_cache,menu_type,visible,status,perms,icon,create_by,create_time,update_by,update_time,remark)
|
||||
VALUES
|
||||
(2000,'智慧报价',0,5,'bid',NULL,NULL,1,0,'M','0','0','','#','admin',NOW(),'','',''),
|
||||
|
||||
69
sql/fix_delivery_order_rfq_null.sql
Normal file
69
sql/fix_delivery_order_rfq_null.sql
Normal 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 允许 NULL(client 类型没有供应商)
|
||||
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;
|
||||
Reference in New Issue
Block a user