RuoYi-Vue/ruoyi-quartz/src/main/resources/mapper/quartz/DailySaleProductMapper.xml

187 lines
6.4 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.ruoyi.xkt.mapper.DailySaleProductMapper">
<select id="selectDailySale" resultType="com.ruoyi.xkt.dto.dailySale.DailySaleProdDTO">
SELECT
sp.store_id,
sp.id AS store_prod_id,
sp.prod_art_num,
COALESCE ( SUM( CASE WHEN ssd.sale_type = 1 THEN ssd.amount ELSE 0 END ), 0 ) AS saleAmount,
COALESCE ( SUM( CASE WHEN ssd.sale_type = 2 THEN ssd.amount ELSE 0 END ), 0 ) AS refundAmount,
COALESCE ( SUM( CASE WHEN ssd.sale_type = 1 THEN ssd.quantity ELSE 0 END ), 0 ) AS saleNum,
COALESCE ( SUM( CASE WHEN ssd.sale_type = 2 THEN ssd.quantity ELSE 0 END ), 0 ) AS refundNum
FROM
store_sale_detail ssd
LEFT JOIN store_product sp ON ssd.store_prod_id = sp.id
WHERE
ssd.del_flag = 0
AND ssd.voucher_date = #{voucherDate}
GROUP BY
sp.store_id,
sp.id
</select>
<select id="selectSaleRankList" resultType="com.ruoyi.xkt.dto.dailySale.CateSaleRankDTO">
SELECT
dsp.store_prod_id,
dsp.prod_art_num,
dsp.store_id,
s.store_name,
sp.prod_cate_id,
spc.`name` AS prodCateName,
SUM(dsp.sale_num) AS saleNum
FROM
daily_sale_product dsp
LEFT JOIN store_product sp ON dsp.store_prod_id = sp.id
LEFT JOIN store s ON dsp.store_id = s.id
LEFT JOIN sys_product_category spc ON sp.prod_cate_id = spc.id
WHERE
dsp.del_flag = 0
AND dsp.voucher_date BETWEEN #{oneMonthAgo} AND #{now}
GROUP BY
dsp.store_prod_id,
dsp.prod_art_num,
dsp.store_id,
sp.prod_cate_id,
spc.`name`
</select>
<select id="selectTop10SaleList" resultType="com.ruoyi.xkt.dto.store.StoreIndexSaleTop10ResDTO">
SELECT
dsp.store_prod_id,
dsp.prod_art_num,
sf.file_url AS mainPic,
SUM(IFNULL( dsp.sale_amount, 0 )) AS saleAmount,
SUM(IFNULL( dsp.refund_amount, 0 )) AS refundAmount,
SUM(IFNULL( dsp.sale_num, 0 )) AS saleNum,
SUM(IFNULL( dsp.refund_num, 0 )) AS refundNum,
CASE
WHEN SUM( IFNULL( dsp.sale_num, 0 )) = 0 THEN '0%'
ELSE CONCAT( ROUND( ABS( SUM( IFNULL( dsp.refund_num, 0 ))) * 1.0 / SUM( IFNULL( dsp.sale_num, 0 )) * 100, 2 ), '%')
END AS refundRate
FROM
daily_sale_product dsp
LEFT JOIN store_product_file spf ON dsp.store_prod_id = spf.store_prod_id AND spf.file_type = 1 AND spf.order_num = 1
LEFT JOIN sys_file sf ON spf.file_id = sf.id
WHERE
dsp.store_id = #{storeId}
AND dsp.del_flag = 0
AND dsp.voucher_date BETWEEN #{voucherDateStart} AND #{voucherDateEnd}
GROUP BY
dsp.store_prod_id,
dsp.prod_art_num,
sf.file_url
ORDER BY
saleAmount DESC
LIMIT 10
</select>
<select id="selectTop50ProdList" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
store_prod_id,
store_id
FROM
daily_sale_product
WHERE
voucher_date BETWEEN #{oneMonthAgo} AND #{yesterday}
GROUP BY
store_prod_id,
store_id
ORDER BY
SUM(IFNULL( sale_num, 0 )) DESC
LIMIT 50
</select>
<select id="prodSale1000List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
store_prod_id,
SUM(IFNULL( sale_num, 0 )) AS count
FROM
daily_sale_product
WHERE
voucher_date BETWEEN #{oneMonthAgo} AND #{yesterday}
GROUP BY
store_prod_id
HAVING
count >= 1000
ORDER BY
count DESC
</select>
<select id="prodSaleTop10List" resultType="com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO">
SELECT
store_id,
store_prod_id,
SUM(IFNULL( sale_num, 0 )) AS count
FROM
daily_sale_product
WHERE
voucher_date BETWEEN #{oneMonthAgo} AND #{yesterday}
GROUP BY
store_prod_id,
store_id
ORDER BY
count DESC
LIMIT 10
</select>
<select id="prodSaleTop50List" resultType="com.ruoyi.xkt.dto.dailyStoreProd.DailyStoreProdSaleDTO">
SELECT
dsp.store_id,
dsp.store_prod_id,
COALESCE ( SUM( dsp.sale_num ), 0 ) AS count
FROM
daily_sale_product dsp
JOIN store_product sp ON dsp.store_prod_id = sp.id
WHERE
dsp.del_flag = 0
AND dsp.voucher_date BETWEEN #{oneMonthAgo} AND #{yesterday}
GROUP BY
dsp.store_id,
dsp.store_prod_id
ORDER BY
count DESC
LIMIT 50
</select>
<select id="prodCateSaleTop50List" resultType="com.ruoyi.xkt.dto.dailyStoreProd.DailyStoreProdSaleDTO">
WITH ranked_products AS (
SELECT
dsp.store_id,
sp.prod_cate_id,
dsp.store_prod_id,
spc.`name` AS prodCateName,
COALESCE ( SUM( dsp.sale_num ), 0 ) AS count,
ROW_NUMBER() OVER ( PARTITION BY sp.prod_cate_id ORDER BY COALESCE ( SUM( dsp.sale_num ), 0 ) DESC ) AS rank_in_category
FROM
daily_sale_product dsp
LEFT JOIN store_product sp ON dsp.store_prod_id = sp.id
LEFT JOIN sys_product_category spc ON sp.prod_cate_id = spc.id
WHERE
dsp.del_flag = 0
GROUP BY
sp.prod_cate_id,
dsp.store_prod_id,
dsp.store_id,
spc.`name`
) SELECT
store_id,
prod_cate_id,
store_prod_id,
prodCateName,
count
FROM
ranked_products
WHERE
rank_in_category &lt;= 50
ORDER BY
prod_cate_id,
count DESC;
</select>
</mapper>