2026-06-09 21:44:31 +08:00
<?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.BizDeliveryOrderMapper" >
<resultMap id= "BaseRM" type= "com.ruoyi.system.domain.bid.BizDeliveryOrder" >
<id property= "doId" column= "do_id" />
<result property= "tenantId" column= "tenant_id" />
<result property= "doNo" column= "do_no" />
<result property= "rfqId" column= "rfq_id" />
<result property= "quotationId" column= "quotation_id" />
<result property= "supplierId" column= "supplier_id" />
<result property= "totalAmount" column= "total_amount" />
<result property= "currency" column= "currency" />
<result property= "deliveryDate" column= "delivery_date" />
<result property= "delayDate" column= "delay_date" />
<result property= "actualCloseDate" column= "actual_close_date" />
<result property= "closeDateSetBy" column= "close_date_set_by" />
<result property= "deliveryStatus" column= "delivery_status" />
<result property= "remark" column= "remark" />
<result property= "createBy" column= "create_by" />
<result property= "createTime" column= "create_time" />
<result property= "updateBy" column= "update_by" />
<result property= "updateTime" column= "update_time" />
<result property= "supplierName" column= "supplier_name" />
2026-06-11 22:45:31 +08:00
<result property= "itemCount" column= "item_count" />
2026-06-09 21:44:31 +08:00
</resultMap>
<select id= "selectBizDeliveryOrderList" resultMap= "BaseRM" >
2026-06-11 22:45:31 +08:00
SELECT d.*, s.supplier_name,
(SELECT COUNT(*) FROM biz_delivery_order_item WHERE do_id = d.do_id) AS item_count
2026-06-09 21:44:31 +08:00
FROM biz_delivery_order d
LEFT JOIN biz_supplier s ON d.supplier_id=s.supplier_id
<where >
<if test= "tenantId != null" > AND d.tenant_id=#{tenantId}</if>
<if test= "doNo != null and doNo != ''" > AND d.do_no LIKE CONCAT('%',#{doNo},'%')</if>
<if test= "supplierId != null" > AND d.supplier_id=#{supplierId}</if>
<if test= "deliveryStatus != null and deliveryStatus != ''" > AND d.delivery_status=#{deliveryStatus}</if>
<if test= "supplierName != null and supplierName != ''" > AND s.supplier_name LIKE CONCAT('%',#{supplierName},'%')</if>
</where>
ORDER BY d.create_time DESC
</select>
<select id= "selectBizDeliveryOrderById" resultMap= "BaseRM" >
SELECT d.*, s.supplier_name
FROM biz_delivery_order d
LEFT JOIN biz_supplier s ON d.supplier_id=s.supplier_id
WHERE d.do_id=#{id}
</select>
<insert id= "insertBizDeliveryOrder" useGeneratedKeys= "true" keyProperty= "doId" >
INSERT INTO biz_delivery_order(tenant_id,do_no,rfq_id,quotation_id,supplier_id,total_amount,currency,delivery_date,delay_date,actual_close_date,close_date_set_by,delivery_status,remark,create_by,create_time)
VALUES(#{tenantId},#{doNo},#{rfqId},#{quotationId},#{supplierId},#{totalAmount},#{currency},#{deliveryDate},#{delayDate},#{actualCloseDate},#{closeDateSetBy},#{deliveryStatus},#{remark},#{createBy},NOW())
</insert>
<update id= "updateBizDeliveryOrder" >
UPDATE biz_delivery_order
<set >
<if test= "doNo != null" > do_no=#{doNo},</if>
<if test= "supplierId != null" > supplier_id=#{supplierId},</if>
<if test= "totalAmount != null" > total_amount=#{totalAmount},</if>
<if test= "deliveryDate != null" > delivery_date=#{deliveryDate},</if>
<if test= "delayDate != null" > delay_date=#{delayDate},</if>
<if test= "actualCloseDate != null" > actual_close_date=#{actualCloseDate},</if>
<if test= "closeDateSetBy != null" > close_date_set_by=#{closeDateSetBy},</if>
<if test= "deliveryStatus != null" > delivery_status=#{deliveryStatus},</if>
<if test= "remark != null" > remark=#{remark},</if>
update_by=#{updateBy}, update_time=NOW()
</set>
WHERE do_id=#{doId}
</update>
2026-06-12 10:12:19 +08:00
<select id= "selectTransitStats" resultType= "java.util.Map" >
SELECT
COUNT(*) AS totalTransit,
SUM(CASE WHEN DATEDIFF(delivery_date, CURDATE()) BETWEEN 0 AND 3 THEN 1 ELSE 0 END) AS expiringSoon,
SUM(CASE WHEN DATEDIFF(delivery_date, CURDATE()) < 0 THEN 1 ELSE 0 END) AS overdue
FROM biz_delivery_order
WHERE delivery_status = 'transit'
</select>
2026-06-09 21:44:31 +08:00
<delete id= "deleteBizDeliveryOrderById" > DELETE FROM biz_delivery_order WHERE do_id=#{id}</delete>
<delete id= "deleteBizDeliveryOrderByIds" >
DELETE FROM biz_delivery_order WHERE do_id IN
<foreach collection= "array" item= "id" open= "(" separator= "," close= ")" > #{id}</foreach>
</delete>
2026-06-10 20:47:14 +08:00
<!-- 状态流转更新( 直接设置字段, 不受动态SQL null判断影响) -->
<update id= "updateDeliveryStatus" >
UPDATE biz_delivery_order
SET delivery_status=#{deliveryStatus},
delay_date=#{delayDate},
actual_close_date=#{actualCloseDate},
close_date_set_by=#{closeDateSetBy},
update_time=NOW()
WHERE do_id=#{doId}
</update>
<!-- 物料发货记录( 多表JOIN追溯) -->
<select id= "selectMaterialRecords" resultType= "java.util.Map" >
SELECT d.do_no,
s.supplier_name,
cl.client_name,
di.quantity,
di.unit_price,
di.total_price,
d.delivery_date,
d.actual_close_date,
d.delivery_status
FROM biz_delivery_order_item di
JOIN biz_delivery_order d ON di.do_id = d.do_id
LEFT JOIN biz_supplier s ON d.supplier_id = s.supplier_id
LEFT JOIN biz_rfq r ON d.rfq_id = r.rfq_id
LEFT JOIN biz_client_quote cq ON r.client_quote_id = cq.quote_id
LEFT JOIN biz_client cl ON cq.client_id = cl.client_id
WHERE di.material_id = #{materialId}
ORDER BY d.create_time DESC
</select>
2026-06-09 21:44:31 +08:00
</mapper>