Files
klp-oa/klp-erp/src/main/resources/mapper/erp/ErpPurchaseReportMapper.xml
2025-11-18 16:45:05 +08:00

77 lines
3.1 KiB
XML

<?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.klp.erp.mapper.ErpPurchaseReportMapper">
<select id="sumTotalAmount" resultType="java.math.BigDecimal">
SELECT COALESCE(SUM(total_amount), 0)
FROM erp_purchase_order
WHERE del_flag = 0
<if test="beginTime != null and beginTime != ''">
AND create_time &gt;= #{beginTime}
</if>
<if test="endTime != null and endTime != ''">
AND create_time &lt;= #{endTime}
</if>
</select>
<select id="sumAmountBySupplier" resultType="java.util.HashMap">
SELECT supplier_id AS supplierId,
COALESCE(SUM(total_amount), 0) AS totalAmount,
COUNT(*) AS orderCount
FROM erp_purchase_order
WHERE del_flag = 0
<if test="beginTime != null and beginTime != ''">
AND create_time &gt;= #{beginTime}
</if>
<if test="endTime != null and endTime != ''">
AND create_time &lt;= #{endTime}
</if>
GROUP BY supplier_id
ORDER BY totalAmount DESC
</select>
<select id="selectPriceTrend" resultType="java.util.HashMap">
SELECT DATE_FORMAT(po.order_date, '%Y-%m') AS period,
poi.material_type_code AS materialCode,
COALESCE(AVG(poi.unit_price), 0) AS avgPrice
FROM erp_purchase_order po
JOIN erp_purchase_order_item poi ON po.order_id = poi.order_id
WHERE po.del_flag = 0
AND poi.del_flag = 0
<if test="beginTime != null and beginTime != ''">
AND po.order_date &gt;= #{beginTime}
</if>
<if test="endTime != null and endTime != ''">
AND po.order_date &lt;= #{endTime}
</if>
GROUP BY period, poi.material_type_code
ORDER BY period ASC
</select>
<select id="selectSupplierQuality" resultType="java.util.HashMap">
SELECT po.supplier_id AS supplierId,
COALESCE(SUM(pr.received_qty), 0) AS receivedQty,
COALESCE(SUM(CASE WHEN r.status = 1 THEN ri.return_qty ELSE 0 END), 0) AS returnQty,
COALESCE(SUM(CASE WHEN r.status = 1 THEN ri.return_qty ELSE 0 END), 0) /
NULLIF(COALESCE(SUM(pr.received_qty), 0), 0) AS returnRate
FROM erp_purchase_order po
LEFT JOIN erp_purchase_receipt pr
ON pr.order_id = po.order_id AND pr.del_flag = 0
LEFT JOIN erp_purchase_return r
ON r.order_id = po.order_id AND r.del_flag = 0
LEFT JOIN erp_purchase_return_item ri
ON ri.return_id = r.return_id AND ri.del_flag = 0
WHERE po.del_flag = 0
<if test="beginTime != null and beginTime != ''">
AND po.create_time &gt;= #{beginTime}
</if>
<if test="endTime != null and endTime != ''">
AND po.create_time &lt;= #{endTime}
</if>
GROUP BY po.supplier_id
</select>
</mapper>