Files
erp-next/ruoyi-system/src/main/resources/mapper/bid/BizComparisonMapper.xml
王文昊 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

82 lines
3.3 KiB
XML
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.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.bid.BizComparisonMapper">
<!-- 核心比价数据:物料行 + 各供应商报价 + 历史评价均分 -->
<select id="selectComparisonData" resultType="java.util.HashMap">
SELECT
ri.item_id AS rfqItemId,
ri.material_name AS materialName,
ri.spec AS spec,
ri.unit AS unit,
ri.quantity AS quantity,
qi.unit_price AS unitPrice,
qi.total_price AS totalPrice,
qi.delivery_days AS deliveryDays,
q.quotation_id AS quotationId,
q.quote_no AS quoteNo,
q.supplier_id AS supplierId,
s.supplier_name AS supplierName,
s.contact AS contact,
s.phone AS phone,
COALESCE(ev.avg_quality, 3.0) AS avgQuality,
COALESCE(ev.avg_service, 3.0) AS avgService,
COALESCE(ev.eval_count, 0) AS historyCount
FROM biz_rfq_item ri
LEFT JOIN biz_quotation_item qi ON qi.rfq_item_id = ri.item_id
LEFT JOIN biz_quotation q ON q.quotation_id = qi.quotation_id
AND q.status IN ('draft','submitted','accepted')
LEFT JOIN biz_supplier s ON s.supplier_id = q.supplier_id
LEFT JOIN (
SELECT supplier_id,
AVG(quality_score) AS avg_quality,
AVG(service_score) AS avg_service,
COUNT(*) AS eval_count
FROM biz_supplier_evaluation
GROUP BY supplier_id
) ev ON ev.supplier_id = q.supplier_id
WHERE ri.rfq_id = #{rfqId}
ORDER BY ri.item_id, qi.unit_price ASC
</select>
<!-- RFQ基本信息 -->
<select id="selectRfqInfo" resultType="java.util.HashMap">
SELECT rfq_no AS rfqNo, rfq_title AS rfqTitle
FROM biz_rfq WHERE rfq_id = #{rfqId}
</select>
<!-- 历史报价参考当前RFQ无报价时查询同物料在其他RFQ中的最近报价 -->
<select id="selectHistoricalPrices" resultType="java.util.HashMap">
SELECT
qi.unit_price AS unitPrice,
qi.total_price AS totalPrice,
qi.delivery_days AS deliveryDays,
q.quotation_id AS quotationId,
q.quote_no AS quoteNo,
q.supplier_id AS supplierId,
s.supplier_name AS supplierName,
r.rfq_no AS rfqNo,
COALESCE(ev.avg_quality, 3.0) AS avgQuality,
COALESCE(ev.avg_service, 3.0) AS avgService,
COALESCE(ev.eval_count, 0) AS historyCount
FROM biz_quotation_item qi
JOIN biz_quotation q ON qi.quotation_id = q.quotation_id
AND q.status IN ('submitted','accepted')
JOIN biz_supplier s ON s.supplier_id = q.supplier_id
LEFT JOIN (
SELECT supplier_id,
AVG(quality_score) AS avg_quality,
AVG(service_score) AS avg_service,
COUNT(*) AS eval_count
FROM biz_supplier_evaluation
GROUP BY supplier_id
) ev ON ev.supplier_id = q.supplier_id
LEFT JOIN biz_rfq r ON q.rfq_id = r.rfq_id
WHERE qi.material_name = #{materialName}
AND q.rfq_id != #{excludeRfqId}
ORDER BY q.create_time DESC
LIMIT #{limit}
</select>
</mapper>