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