296 lines
8.3 KiB
XML
296 lines
8.3 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.imyeyu.api.modules.gao.mapper.GaoEventRecordMapper">
|
|
<select id="count" resultType="java.lang.Long">
|
|
SELECT
|
|
COUNT(1)
|
|
FROM
|
|
`gao_event_record`
|
|
WHERE
|
|
TRUE
|
|
<if test="storeId != null">
|
|
AND `store_id` = #{storeId}
|
|
</if>
|
|
<if test="customerId != null">
|
|
AND `customer_id` = #{customerId}
|
|
</if>
|
|
<if test="eventId != null">
|
|
AND `event_id` = #{eventId}
|
|
</if>
|
|
<if test="beginAt != null">
|
|
AND `registered_at` >= #{beginAt}
|
|
</if>
|
|
<if test="endAt != null">
|
|
AND `registered_at` <= #{endAt}
|
|
</if>
|
|
AND `deleted_at` IS NULL
|
|
</select>
|
|
|
|
<select id="countByStoreIdAndRegisteredDateValue" resultType="java.lang.Long">
|
|
SELECT
|
|
COUNT(1)
|
|
FROM `gao_event_record`
|
|
WHERE
|
|
`store_id` = #{storeId}
|
|
AND `registered_date_value` = #{registeredDateValue}
|
|
AND `deleted_at` IS NULL
|
|
</select>
|
|
|
|
<update id="updateBusinessDayNoByStoreIdAndRegisteredDateValue">
|
|
UPDATE `gao_event_record`
|
|
SET
|
|
`business_day_no` = #{businessDayNo},
|
|
`updated_at` = ROUND(UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)) * 1000)
|
|
WHERE
|
|
`store_id` = #{storeId}
|
|
AND `registered_date_value` = #{registeredDateValue}
|
|
AND `deleted_at` IS NULL
|
|
</update>
|
|
|
|
<sql id="rangeFrom">
|
|
FROM `gao_event_record` r
|
|
LEFT JOIN `gao_customer` c ON r.`customer_id` = c.`id`
|
|
</sql>
|
|
<sql id="rangeWhere">
|
|
TRUE
|
|
<if test="beginAt != null">
|
|
AND r.`registered_at` >= #{beginAt}
|
|
</if>
|
|
<if test="endAt != null">
|
|
AND r.`registered_at` <= #{endAt}
|
|
</if>
|
|
AND r.`deleted_at` IS NULL
|
|
<if test="storeId != null and storeId != ''">
|
|
AND r.`store_id` = #{storeId}
|
|
</if>
|
|
<if test="customerId != null">
|
|
AND r.`customer_id` = #{customerId}
|
|
</if>
|
|
<if test="eventIdList != null and eventIdList.size() > 0">
|
|
AND r.`event_id` IN
|
|
<foreach collection="eventIdList" item="eventId" open="(" separator="," close=")">
|
|
#{eventId}
|
|
</foreach>
|
|
</if>
|
|
<if test="keyword != null and keyword.trim() != ''">
|
|
AND (
|
|
c.`code` LIKE CONCAT('%', #{keyword}, '%')
|
|
OR c.`name` LIKE CONCAT('%', #{keyword}, '%')
|
|
OR r.`remark` LIKE CONCAT('%', #{keyword}, '%')
|
|
OR r.`operator_user_id` LIKE CONCAT('%', #{keyword}, '%')
|
|
)
|
|
</if>
|
|
</sql>
|
|
<select id="countByRange" resultType="long">
|
|
SELECT
|
|
COUNT(1)
|
|
<include refid="rangeFrom"/>
|
|
WHERE
|
|
<include refid="rangeWhere"/>
|
|
</select>
|
|
<select id="selectByRange" resultType="com.imyeyu.api.modules.gao.entity.GaoEventRecord">
|
|
SELECT
|
|
r.*
|
|
<include refid="rangeFrom"/>
|
|
WHERE
|
|
<include refid="rangeWhere"/>
|
|
ORDER BY r.`registered_at` DESC, r.`created_at` DESC
|
|
LIMIT #{offset}, #{limit}
|
|
</select>
|
|
|
|
<sql id="rankWhere">
|
|
r.`deleted_at` IS NULL
|
|
AND c.`deleted_at` IS NULL
|
|
<if test="storeId != null and storeId != ''">
|
|
AND r.`store_id` = #{storeId}
|
|
</if>
|
|
<if test="customerId != null and customerId != ''">
|
|
AND r.`customer_id` = #{customerId}
|
|
</if>
|
|
<if test="beginAt != null">
|
|
AND r.`registered_at` >= #{beginAt}
|
|
</if>
|
|
<if test="endAt != null">
|
|
AND r.`registered_at` <= #{endAt}
|
|
</if>
|
|
<if test="eventIdList != null and eventIdList.size() > 0">
|
|
AND r.`event_id` IN
|
|
<foreach collection="eventIdList" item="eventId" open="(" separator="," close=")">
|
|
#{eventId}
|
|
</foreach>
|
|
</if>
|
|
</sql>
|
|
<select id="countRankByRange" resultType="long">
|
|
SELECT
|
|
COUNT(DISTINCT r.`customer_id`)
|
|
FROM `gao_event_record` r
|
|
LEFT JOIN `gao_customer` c ON r.`customer_id` = c.`id`
|
|
WHERE
|
|
<include refid="rankWhere"/>
|
|
</select>
|
|
<select id="selectRankByRange" resultType="com.imyeyu.api.modules.gao.vo.GaoCustomerEventRankView">
|
|
WITH `daily_stat` AS (
|
|
SELECT
|
|
r.`customer_id` AS `customerId`,
|
|
r.`business_day_no` AS `businessDayNo`,
|
|
COUNT(1) AS `dailyCount`,
|
|
MAX(r.`registered_at`) AS `latestRegisteredAt`
|
|
FROM `gao_event_record` r
|
|
LEFT JOIN `gao_customer` c ON r.`customer_id` = c.`id`
|
|
WHERE
|
|
<include refid="rankWhere"/>
|
|
GROUP BY
|
|
r.`customer_id`,
|
|
r.`business_day_no`
|
|
),
|
|
`rank_stat` AS (
|
|
SELECT
|
|
`customerId`,
|
|
COUNT(1) AS `totalEventDays`,
|
|
SUM(`dailyCount`) AS `totalEventCount`,
|
|
MAX(`latestRegisteredAt`) AS `latestRegisteredAt`
|
|
FROM `daily_stat`
|
|
GROUP BY `customerId`
|
|
),
|
|
`continuous_ordered` AS (
|
|
SELECT
|
|
`customerId`,
|
|
`businessDayNo`,
|
|
ROW_NUMBER() OVER (PARTITION BY `customerId` ORDER BY `businessDayNo` DESC) AS `dayIndex`
|
|
FROM `daily_stat`
|
|
),
|
|
`latest_date` AS (
|
|
SELECT
|
|
`customerId`,
|
|
MAX(`businessDayNo`) AS `latestBusinessDayNo`
|
|
FROM `daily_stat`
|
|
GROUP BY `customerId`
|
|
),
|
|
`continuous_stat` AS (
|
|
SELECT
|
|
o.`customerId`,
|
|
COUNT(1) AS `recentContinuousEventDays`
|
|
FROM `continuous_ordered` o
|
|
LEFT JOIN `latest_date` l ON o.`customerId` = l.`customerId`
|
|
WHERE o.`businessDayNo` + o.`dayIndex` = l.`latestBusinessDayNo` + 1
|
|
GROUP BY o.`customerId`
|
|
),
|
|
`ranked` AS (
|
|
SELECT
|
|
ROW_NUMBER() OVER (
|
|
ORDER BY
|
|
r.`totalEventDays` DESC,
|
|
r.`totalEventCount` DESC,
|
|
r.`latestRegisteredAt` DESC,
|
|
r.`customerId`
|
|
) AS `rank`,
|
|
r.`customerId`,
|
|
r.`totalEventDays`,
|
|
r.`totalEventCount`,
|
|
COALESCE(c.`recentContinuousEventDays`, 0) AS `recentContinuousEventDays`,
|
|
r.`latestRegisteredAt`
|
|
FROM `rank_stat` r
|
|
LEFT JOIN `continuous_stat` c ON r.`customerId` = c.`customerId`
|
|
)
|
|
SELECT
|
|
`rank`,
|
|
`customerId`,
|
|
`totalEventDays`,
|
|
`totalEventCount`,
|
|
`recentContinuousEventDays`,
|
|
`latestRegisteredAt`
|
|
FROM `ranked`
|
|
ORDER BY `rank`
|
|
LIMIT #{offset}, #{limit}
|
|
</select>
|
|
|
|
<sql id="storeChartRangeWhere">
|
|
r.`store_id` = #{storeId}
|
|
AND r.`registered_at` >= #{beginAt}
|
|
AND r.`registered_at` <= #{endAt}
|
|
AND r.`deleted_at` IS NULL
|
|
<if test="eventIdList != null and eventIdList.size() > 0">
|
|
AND r.`event_id` IN
|
|
<foreach collection="eventIdList" item="eventId" open="(" separator="," close=")">
|
|
#{eventId}
|
|
</foreach>
|
|
</if>
|
|
</sql>
|
|
<select id="stateDailyByRange" resultType="com.imyeyu.api.modules.gao.vo.GaoEventRecordDailyStatView">
|
|
SELECT
|
|
r.`event_id` AS `eventId`,
|
|
r.`registered_date_value` AS `dateValue`,
|
|
COUNT(1) AS `dailyCount`
|
|
FROM `gao_event_record` r
|
|
WHERE
|
|
<include refid="storeChartRangeWhere"/>
|
|
GROUP BY
|
|
r.`event_id`,
|
|
r.`registered_date_value`
|
|
ORDER BY
|
|
r.`registered_date_value` ASC,
|
|
r.`event_id` ASC
|
|
</select>
|
|
<select id="selectCalendarByRange" resultType="com.imyeyu.api.modules.gao.vo.GaoEventRecordCalendarView">
|
|
SELECT
|
|
r.`id`,
|
|
r.`customer_id` AS `customerId`,
|
|
c.`code` AS `customerCode`,
|
|
c.`name` AS `customerName`,
|
|
r.`event_id` AS `eventId`,
|
|
r.`registered_at` AS `registeredAt`
|
|
FROM `gao_event_record` r
|
|
LEFT JOIN `gao_customer` c ON r.`customer_id` = c.`id` AND c.`deleted_at` IS NULL
|
|
WHERE
|
|
<include refid="storeChartRangeWhere"/>
|
|
ORDER BY
|
|
r.`registered_at` ASC,
|
|
r.`created_at` ASC
|
|
</select>
|
|
|
|
<sql id="customerChartRangeWhere">
|
|
r.`store_id` = #{storeId}
|
|
AND r.`customer_id` = #{customerId}
|
|
AND r.`registered_at` >= #{beginAt}
|
|
AND r.`registered_at` <= #{endAt}
|
|
AND r.`deleted_at` IS NULL
|
|
<if test="eventIdList != null and eventIdList.size() > 0">
|
|
AND r.`event_id` IN
|
|
<foreach collection="eventIdList" item="eventId" open="(" separator="," close=")">
|
|
#{eventId}
|
|
</foreach>
|
|
</if>
|
|
</sql>
|
|
<select id="stateCustomerDailyByRange" resultType="com.imyeyu.api.modules.gao.vo.GaoEventRecordDailyStatView">
|
|
SELECT
|
|
r.`event_id` AS `eventId`,
|
|
r.`registered_date_value` AS `dateValue`,
|
|
COUNT(1) AS `dailyCount`
|
|
FROM `gao_event_record` r
|
|
WHERE
|
|
<include refid="customerChartRangeWhere"/>
|
|
GROUP BY
|
|
r.`event_id`,
|
|
r.`registered_date_value`
|
|
ORDER BY
|
|
r.`registered_date_value` ASC,
|
|
r.`event_id` ASC
|
|
</select>
|
|
<select id="selectCustomerCalendarByRange" resultType="com.imyeyu.api.modules.gao.vo.GaoEventRecordCalendarView">
|
|
SELECT
|
|
r.`id`,
|
|
r.`customer_id` AS `customerId`,
|
|
c.`code` AS `customerCode`,
|
|
c.`name` AS `customerName`,
|
|
r.`event_id` AS `eventId`,
|
|
r.`registered_at` AS `registeredAt`
|
|
FROM `gao_event_record` r
|
|
LEFT JOIN `gao_customer` c ON r.`customer_id` = c.`id` AND c.`deleted_at` IS NULL
|
|
WHERE
|
|
<include refid="customerChartRangeWhere"/>
|
|
ORDER BY
|
|
r.`registered_at` DESC,
|
|
r.`created_at` DESC
|
|
</select>
|
|
</mapper>
|