zhwl/zhwl-business/zhwl-statistics/target/classes/mapper/statistics/VerificationStaticsMapper.xml
2025-07-01 17:54:58 +08:00

265 lines
12 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.zhwl.statistics.mapper.VerificationStaticsMapper">
<select id="touristSourcesStatistics" resultType="com.zhwl.statistics.domain.vo.ECharsVO">
SELECT za.`name`,
t.verification_num as `value`
FROM (SELECT LEFT
(zut.id_card, 2) short_code,
COUNT(DISTINCT ztod.id) AS verification_num
FROM zdy_ticket_order_detail ztod
LEFT JOIN zdy_ticket_order_detail_child ztodc ON ztod.id = ztodc.order_detail_id
LEFT JOIN zdy_ticket_order_item ztoi ON ztod.order_item_id = ztoi.id
LEFT JOIN zdy_user_tourist zut ON zut.id = ztod.user_tourist_id
WHERE ztod.del_flag = 0
AND ztod.payment_type = 200
AND (ztod.verification_time IS NOT NULL OR ztodc.verification_time IS NOT NULL)
AND zut.id_card IS NOT NULL
AND zut.id_card != ''
${params.dataScope}
GROUP BY LEFT(zut.id_card, 2)) t
LEFT JOIN zdy_area za ON za.short_code = t.short_code
ORDER BY t.verification_num desc
</select>
<select id="touristSumGroupByGender"
parameterType="com.zhwl.common.core.domain.BaseEntity"
resultType="com.zhwl.statistics.domain.vo.verification.ParkEntranceGenderDataVO">
SELECT IF(SUBSTR(zut.id_card, -2, 1) % 2 = 1, '1', '2') AS gender,
COUNT(DISTINCT ztod.id) AS verificationNum
FROM zdy_ticket_order_detail ztod
LEFT JOIN
zdy_ticket_order_detail_child ztodc ON ztod.id = ztodc.order_detail_id
LEFT JOIN
zdy_ticket_order_item ztoi ON ztod.order_item_id = ztoi.id
LEFT JOIN
zdy_user_tourist zut ON zut.id = ztod.user_tourist_id
WHERE ztod.del_flag = 0
AND ztod.payment_type = 200
AND (ztod.verification_time IS NOT NULL OR ztodc.verification_time IS NOT NULL)
AND zut.id_card IS NOT NULL
AND zut.id_card != ''
${params.dataScope}
GROUP BY IF(SUBSTR(zut.id_card, -2, 1) % 2 = 1, '1', '2')
</select>
<select id="touristSum"
parameterType="com.zhwl.common.core.domain.BaseEntity"
resultType="java.lang.Long">
SELECT COUNT(DISTINCT ztod.id)
FROM zdy_ticket_order_detail ztod
LEFT JOIN
zdy_ticket_order_detail_child ztodc ON ztod.id = ztodc.order_detail_id
LEFT JOIN
zdy_ticket_order_item ztoi ON ztod.order_item_id = ztoi.id
LEFT JOIN
zdy_user_tourist zut ON zut.id = ztod.user_tourist_id
<where>
ztod.del_flag = 0
AND ztod.payment_type = 200
AND (ztod.verification_time IS NOT NULL OR ztodc.verification_time IS NOT NULL)
${params.dataScope}
</where>
</select>
<select id="touristAgeSegment"
parameterType="com.zhwl.statistics.domain.dto.AgeGroupQueryDTO"
resultType="com.zhwl.statistics.domain.vo.verification.ParkEntranceAgeGroupDataVO">
SELECT
CASE
<foreach collection="ageGroupList" item="item">
WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(SUBSTRING(zut.id_card, 7, 8), '%Y%m%d'), CURDATE())
<choose>
<when test="item.ageMin != null and item.ageMax != null">
BETWEEN #{item.ageMin} AND #{item.ageMax}
</when>
<otherwise>
<if test="item.ageMin != null">
&gt;= #{item.ageMin}
</if>
<if test="item.ageMax != null">
&lt;= #{item.ageMax}
</if>
</otherwise>
</choose>
THEN
#{item.value}
</foreach>
ELSE ''
END AS ageGroup,
COUNT(DISTINCT ztod.id) AS verificationNum
FROM zdy_ticket_order_detail ztod
LEFT JOIN
zdy_ticket_order_detail_child ztodc ON ztod.id = ztodc.order_detail_id
LEFT JOIN
zdy_ticket_order_item ztoi ON ztod.order_item_id = ztoi.id
LEFT JOIN
zdy_user_tourist zut ON zut.id = ztod.user_tourist_id
WHERE ztod.del_flag = 0
AND ztod.payment_type = 200
AND (ztod.verification_time IS NOT NULL OR ztodc.verification_time IS NOT NULL)
AND zut.id_card IS NOT NULL
AND zut.id_card != ''
${params.dataScope}
GROUP BY CASE
<foreach collection="ageGroupList" item="item">
WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(SUBSTRING(zut.id_card, 7, 8), '%Y%m%d'), CURDATE())
<choose>
<when test="item.ageMin != null and item.ageMax != null">
BETWEEN #{item.ageMin} AND #{item.ageMax}
</when>
<otherwise>
<if test="item.ageMin != null">
&gt;= #{item.ageMin}
</if>
<if test="item.ageMax != null">
&lt;= #{item.ageMax}
</if>
</otherwise>
</choose>
THEN
#{item.value}
</foreach>
ELSE ''
END
</select>
<select id="touristCategorizeStatistics"
parameterType="com.zhwl.common.core.domain.BaseEntity"
resultType="com.zhwl.statistics.domain.vo.verification.TouristClassifyDataVO">
SELECT zt.classify,
COUNT(DISTINCT ztod.id) AS sum
FROM zdy_ticket_order_detail ztod
LEFT JOIN
zdy_ticket_order_detail_child ztodc ON ztod.id = ztodc.order_detail_id
LEFT JOIN
zdy_ticket_order_item ztoi ON ztod.order_item_id = ztoi.id
LEFT JOIN
zdy_ticket zt on zt.id = ztoi.ticket_id
<where>
ztod.del_flag = 0
AND ztod.payment_type = 200
AND (ztod.verification_time IS NOT NULL OR ztodc.verification_time IS NOT NULL)
${params.dataScope}
</where>
GROUP BY zt.classify
</select>
<select id="saleTicketCountAndSaleAmount" resultType="com.zhwl.statistics.domain.vo.verification.SaleDataVO"
parameterType="com.zhwl.statistics.domain.dto.SaleTimeDTO">
SELECT SUM(ztoi.buy_quantity) AS todaySaleNum,
SUM(ztoi.total_price) AS todaySaleAmount
FROM zdy_ticket_order zto
LEFT JOIN zdy_ticket_order_item ztoi ON zto.id = ztoi.order_id
where zto.payment_type = '200'
and zto.create_time between #{startDateTime} and #{endDateTime}
${params.dataScope}
</select>
<!--核销次数不为0 即为已核销,考虑套票和年卡情况-->
<select id="verificationOrderCount" resultType="Long"
parameterType="com.zhwl.statistics.domain.dto.SaleTimeDTO">
SELECT
COUNT( DISTINCT ztod_tmp.id )
FROM
zdy_ticket_order_detail ztod_tmp
LEFT JOIN zdy_ticket_order_detail_child ztodc_tmp ON ztodc_tmp.order_detail_id = ztod_tmp.id
LEFT JOIN zdy_ticket_order_item ztoi ON ztod_tmp.order_item_id = ztoi.id
<where>
IF( isnull( ztod_tmp.verification_time ), ztodc_tmp.verification_time, ztod_tmp.verification_time )
between #{startDateTime} and #{endDateTime}
${params.dataScope}
</where>
</select>
<select id="touristSourceStatics" resultType="com.zhwl.statistics.domain.dto.OrderSourceStaticsDTO"
parameterType="com.zhwl.statistics.domain.dto.SaleTimeDTO">
SELECT zto.order_source AS orderSource,
SUM(ztoi.buy_quantity) AS buyQuantity
FROM zdy_ticket_order_item ztoi
left join zdy_ticket_order zto on zto.id = ztoi.order_id
where zto.payment_type = '200'
and zto.create_time between #{startDateTime} and #{endDateTime}
${params.dataScope}
GROUP BY zto.order_source
</select>
<select id="checkPointVerificationStatics"
parameterType="com.zhwl.statistics.domain.dto.SaleTimeDTO"
resultType="com.zhwl.statistics.domain.vo.ECharsVO">
SELECT ifnull(SUM(ztovh.verification_num), 0) AS `value`,
zcp.point_name as `name`,
zcp.id
FROM zdy_ticket_order_verification_history ztovh
LEFT JOIN zdy_check_point_device zcpd ON zcpd.device_sn = ztovh.serial_no
LEFT JOIN zdy_check_point zcp ON zcpd.check_point_id = zcp.id
WHERE ztovh.serial_no IS NOT NULL
and ztovh.create_time between #{startDateTime} and #{endDateTime}
${params.dataScope}
GROUP BY zcp.id
</select>
<select id="todayTicketVerificationStatics"
resultType="com.zhwl.statistics.domain.vo.verification.SaleVerificationVo"
parameterType="com.zhwl.statistics.domain.dto.SaleTimeDTO">
SELECT
COUNT( DISTINCT ztod_tmp.id ) as verificationNum,
ztod_tmp.ticket_id as ticketId,
zt.name as ticketName
FROM
zdy_ticket_order_detail ztod_tmp
LEFT JOIN zdy_ticket_order_detail_child ztodc_tmp ON ztodc_tmp.order_detail_id = ztod_tmp.id
LEFT JOIN zdy_ticket_order_item ztoi ON ztod_tmp.order_item_id = ztoi.id
LEFT JOIN zdy_ticket zt ON zt.id = ztod_tmp.ticket_id
<where>
IF( isnull( ztod_tmp.verification_time ), ztodc_tmp.verification_time, ztod_tmp.verification_time )
between #{startDateTime} and #{endDateTime}
${params.dataScope}
</where>
GROUP BY ztod_tmp.ticket_id
</select>
<select id="todayTicketSaleStatics" resultType="com.zhwl.statistics.domain.vo.verification.SaleVerificationVo"
parameterType="com.zhwl.statistics.domain.dto.SaleTimeDTO">
SELECT ztoi.ticket_id as ticketId,
zt.name as ticketName,
SUM(ztoi.buy_quantity) AS buyQuantity
FROM zdy_ticket_order zto
LEFT JOIN zdy_ticket_order_item ztoi ON zto.id = ztoi.order_id
LEFT JOIN zdy_ticket zt ON zt.id = ztoi.ticket_id
where zto.payment_type = '200'
and zto.create_time between #{startDateTime} and #{endDateTime}
${params.dataScope}
group by ztoi.ticket_id
</select>
<select id="todayOtaSaleStatics" resultType="com.zhwl.statistics.domain.vo.verification.OtaSaleDataVO">
SELECT
zto.order_source AS orderSource,
SUM( ztoi.buy_quantity ) AS buyQuantity
FROM
zdy_ticket_order zto
LEFT JOIN zdy_ticket_order_item ztoi ON zto.id = ztoi.order_id
where
zto.payment_type = '200'
and zto.create_time between #{saleTimeDTO.startDateTime} and #{saleTimeDTO.endDateTime}
and zto.order_source in
<foreach item="otaOrderSource" collection="otaOrderSourceList" open="(" separator="," close=")">
#{otaOrderSource}
</foreach>
${saleTimeDTO.params.dataScope}
group by
zto.order_source
</select>
<select id="todayTimeVerificationStatics"
parameterType="com.zhwl.statistics.domain.dto.SaleTimeDTO"
resultType="com.zhwl.statistics.domain.vo.verification.ParkEntranceDataVO">
SELECT HOUR(ztovh.create_time) as hourValue,
ifnull(SUM(ztovh.verification_num), 0) as verificationNum
FROM zdy_ticket_order_verification_history ztovh
where ztovh.create_time between #{startDateTime} and #{endDateTime}
${params.dataScope}
group by HOUR(ztovh.create_time)
</select>
</mapper>