2
0

fix: stat traffic

This commit is contained in:
caiyuchao
2024-12-25 18:35:22 +08:00
parent 1e4b518f48
commit 219c104355

View File

@@ -3,56 +3,65 @@
<mapper namespace="org.wfc.user.mapper.UCdrMapper">
<select id="getByUser" resultType="org.wfc.user.domain.vo.UCdrUserVo">
SELECT
cdr.user_id id,
min( ch.start_time ) start_time,
max( cdr.last_seen_time ) end_time,
max( cdr.activity ) activity,
<choose>
<when test="endTime != null">
sum(
if(cdr.last_seen_time &lt;= #{endTime}, ifnull( cdr.up_time, 0 ), 0))+ sum(
ifnull( ch.duration, 0 )) duration,
sum(
if(cdr.last_seen_time &lt;= #{endTime}, ifnull( cdr.traffic_down, 0 ), 0)) + sum(
ifnull( ch.traffic_down, 0 )) traffic_down,
sum(
if(cdr.last_seen_time &lt;= #{endTime}, ifnull( cdr.traffic_up, 0 ), 0)) + sum(
ifnull( ch.traffic_up, 0 )) traffic_up
</when>
<otherwise>
sum(
ifnull( cdr.up_time, 0 ))+ sum(
ifnull( ch.duration, 0 )) duration,
sum(
ifnull( cdr.traffic_down, 0 )) + sum(
ifnull( ch.traffic_down, 0 )) traffic_down,
sum(
ifnull( cdr.traffic_up, 0 )) + sum(
ifnull( ch.traffic_up, 0 )) traffic_up
</otherwise>
</choose>
t.id,
max( t.activity ) activity,
sum( t.duration ) duration,
sum( t.traffic_down ) traffic_down,
sum( t.traffic_up ) traffic_up
FROM
u_cdr cdr
LEFT JOIN u_cdr_history ch ON cdr.id = ch.cdr_id
AND ch.del_flag = 0
WHERE
cdr.del_flag = 0
AND cdr.last_seen_time != ifnull( ch.end_time, 0 )
<if test="userId != null and userId != ''">
AND cdr.user_id = #{userId}
</if>
<if test="endTime != null">
AND ch.start_time &lt;= #{endTime}
</if>
<if test="startTime != null">
AND ch.start_time >= #{startTime}
</if>
(
SELECT
cdr.user_id id,
max( cdr.activity ) activity,
sum(
ifnull( ch.duration, 0 )) duration,
sum(
ifnull( ch.traffic_down, 0 )) traffic_down,
sum(
ifnull( ch.traffic_up, 0 )) traffic_up
FROM
u_cdr cdr
LEFT JOIN u_cdr_history ch ON cdr.id = ch.cdr_id
AND ch.del_flag = 0
WHERE
cdr.del_flag = 0
AND cdr.last_seen_time != ifnull( ch.end_time, 0 )
<if test="userId != null and userId != ''">
AND cdr.user_id = #{userId}
</if>
<if test="endTime != null">
AND ch.start_time &lt;= #{endTime}
</if>
<if test="startTime != null">
AND ch.start_time >= #{startTime}
</if>
GROUP BY
cdr.user_id UNION
SELECT
cdr.user_id id,
max( cdr.activity ) activity,
sum(
ifnull( cdr.up_time, 0 )) duration,
sum(
ifnull( cdr.traffic_down, 0 )) traffic_down,
sum(
ifnull( cdr.traffic_up, 0 )) traffic_up
FROM
u_cdr cdr
WHERE
cdr.del_flag = 0
<if test="userId != null and userId != ''">
AND cdr.user_id = #{userId}
</if>
<if test="endTime != null">
AND cdr.last_seen_time &lt;= #{endTime}
</if>
GROUP BY
cdr.user_id
) t
GROUP BY
cdr.user_id
t.id
</select>
<select id="getByClient" resultType="org.wfc.user.domain.vo.UCdrClientVo">