feat(bid): 新增基于甲方报价快速创建RFQ功能

本次提交完成以下核心变更:
1. 新增RFQ编号自动生成逻辑,添加selectNextRfqNo方法获取月度递增的RFQ编号
2. 在biz_rfq表新增client_quote_id关联字段,添加索引并完善实体类映射
3. 实现基于甲方报价复制物料快速创建RFQ的业务逻辑,包括事务处理和明细复制
4. 新增RFQ列表页关联甲方报价展示,支持点击跳转查看甲方报价详情
5. 在RFQ编辑页新增甲方报价选择器,选中后自动填充对应物料和标题
6. 优化甲方报价单页面,新增生成RFQ按钮和已生成RFQ列表展示
7. 调整RFQ详情页,新增编辑模式支持草稿状态修改
8. 修复路由跳转路径,统一RFQ相关页面路由到/bid/rfq路径组
This commit is contained in:
2026-06-02 18:44:44 +08:00
parent a75589018f
commit 9db84336bc
12 changed files with 514 additions and 70 deletions

View File

@@ -9,6 +9,9 @@
<result property="rfqTitle" column="rfq_title"/>
<result property="deadline" column="deadline"/>
<result property="deliveryAddr" column="delivery_addr"/>
<result property="clientQuoteId" column="client_quote_id"/>
<result property="clientQuoteNo" column="clientQuoteNo"/>
<result property="clientName" column="clientName"/>
<result property="status" column="status"/>
<result property="remark" column="remark"/>
<result property="createBy" column="create_by"/>
@@ -17,22 +20,40 @@
<result property="updateTime" column="update_time"/>
</resultMap>
<sql id="selectRfqSql">
SELECT r.*,
cq.quote_no AS clientQuoteNo,
cq.client_name AS clientName
FROM biz_rfq r
LEFT JOIN biz_client_quote cq ON r.client_quote_id = cq.quote_id
</sql>
<select id="selectBizRfqList" resultMap="BaseRM">
SELECT * FROM biz_rfq
<include refid="selectRfqSql"/>
<where>
<if test="tenantId != null"> AND tenant_id=#{tenantId}</if>
<if test="rfqNo != null and rfqNo != ''"> AND rfq_no LIKE CONCAT('%',#{rfqNo},'%')</if>
<if test="rfqTitle != null and rfqTitle != ''"> AND rfq_title LIKE CONCAT('%',#{rfqTitle},'%')</if>
<if test="status != null and status != ''"> AND status=#{status}</if>
<if test="tenantId != null"> AND r.tenant_id=#{tenantId}</if>
<if test="rfqNo != null and rfqNo != ''"> AND r.rfq_no LIKE CONCAT('%',#{rfqNo},'%')</if>
<if test="rfqTitle != null and rfqTitle != ''"> AND r.rfq_title LIKE CONCAT('%',#{rfqTitle},'%')</if>
<if test="status != null and status != ''"> AND r.status=#{status}</if>
<if test="clientQuoteId != null"> AND r.client_quote_id=#{clientQuoteId}</if>
</where>
ORDER BY rfq_id DESC
ORDER BY r.rfq_id DESC
</select>
<select id="selectBizRfqById" resultMap="BaseRM">SELECT * FROM biz_rfq WHERE rfq_id=#{id}</select>
<select id="selectBizRfqById" resultMap="BaseRM">
<include refid="selectRfqSql"/>
WHERE r.rfq_id=#{id}
</select>
<select id="selectNextRfqNo" resultType="String">
SELECT CONCAT('RFQ-', DATE_FORMAT(NOW(),'%Y%m'), '-',
LPAD(IFNULL(MAX(CAST(SUBSTRING_INDEX(rfq_no,'-',-1) AS UNSIGNED)),0)+1,3,'0'))
FROM biz_rfq WHERE rfq_no LIKE CONCAT('RFQ-', DATE_FORMAT(NOW(),'%Y%m'), '%')
</select>
<insert id="insertBizRfq" useGeneratedKeys="true" keyProperty="rfqId">
INSERT INTO biz_rfq(tenant_id,rfq_no,rfq_title,deadline,delivery_addr,status,remark,create_by,create_time)
VALUES(#{tenantId},#{rfqNo},#{rfqTitle},#{deadline},#{deliveryAddr},#{status},#{remark},#{createBy},NOW())
INSERT INTO biz_rfq(tenant_id,rfq_no,rfq_title,deadline,delivery_addr,client_quote_id,status,remark,create_by,create_time)
VALUES(#{tenantId},#{rfqNo},#{rfqTitle},#{deadline},#{deliveryAddr},#{clientQuoteId},#{status},#{remark},#{createBy},NOW())
</insert>
<update id="updateBizRfq">
@@ -41,6 +62,7 @@
<if test="rfqTitle != null">rfq_title=#{rfqTitle},</if>
<if test="deadline != null">deadline=#{deadline},</if>
<if test="deliveryAddr != null">delivery_addr=#{deliveryAddr},</if>
<if test="clientQuoteId != null">client_quote_id=#{clientQuoteId},</if>
<if test="status != null">status=#{status},</if>
<if test="remark != null">remark=#{remark},</if>
update_by=#{updateBy}, update_time=NOW()