修改项目1

This commit is contained in:
wangran
2026-01-12 09:18:06 +08:00
parent e793ab4fa8
commit af92fd25e8
3 changed files with 110 additions and 73 deletions

View File

@@ -41,11 +41,12 @@ public class NWQualityController {
}
if (request.getStartDate() != null && !request.getStartDate().trim().isEmpty()) {
startDate = request.getStartDate().trim();
// 转换为 yyyyMMdd 形式,便于与 DAYTIME 的日期部分比较
startDate = request.getStartDate().trim().replace("-", "");
}
if (request.getEndDate() != null && !request.getEndDate().trim().isEmpty()) {
endDate = request.getEndDate().trim();
endDate = request.getEndDate().trim().replace("-", "");
}
// 按条件查询
@@ -62,6 +63,48 @@ public class NWQualityController {
return list;
}
/**
* 查询网络质量数据(支持 ALL 或指定运营商 + 时间范围),返回所有满足条件的数据
* operator 传 ALL不区分大小写或不传则不过滤运营商
*/
@PostMapping("/nwQuality/all")
public List<NWQuality> queryAll(@RequestBody(required = false) NWQualityQueryRequest request) {
if (request == null) {
request = new NWQualityQueryRequest();
}
String operator = null;
String startDate = null;
String endDate = null;
if (request.getOperator() != null && !request.getOperator().trim().isEmpty()) {
String op = request.getOperator().trim();
// 传 ALL 时视为不过滤运营商
if (!"ALL".equalsIgnoreCase(op)) {
operator = op;
}
}
if (request.getStartDate() != null && !request.getStartDate().trim().isEmpty()) {
startDate = request.getStartDate().trim().replace("-", "");
}
if (request.getEndDate() != null && !request.getEndDate().trim().isEmpty()) {
endDate = request.getEndDate().trim().replace("-", "");
}
List<NWQuality> list = nwQualityService.getByCondition(operator, startDate, endDate);
System.out.println("====== nw_quality all query ======");
System.out.println("Operator: " + (operator != null ? operator : "ALL"));
System.out.println("Start Date: " + (startDate != null ? startDate : "ALL"));
System.out.println("End Date: " + (endDate != null ? endDate : "ALL"));
System.out.println("Total records: " + list.size());
System.out.println("================================================");
return list;
}
/**
* 统计各地区数量,支持按运营商和时间范围筛选
* @param request 查询请求参数,包含 operator运营商和 startDate、endDate时间范围字段均为可选
@@ -83,11 +126,12 @@ public class NWQualityController {
}
if (request.getStartDate() != null && !request.getStartDate().trim().isEmpty()) {
startDate = request.getStartDate().trim();
// 转换为 yyyyMMdd 形式
startDate = request.getStartDate().trim().replace("-", "");
}
if (request.getEndDate() != null && !request.getEndDate().trim().isEmpty()) {
endDate = request.getEndDate().trim();
endDate = request.getEndDate().trim().replace("-", "");
}
// 按条件查询地区统计

View File

@@ -67,9 +67,9 @@
SELECT
"NETWORK_NAME" AS operator,
CAST(COUNT(*) AS BIGINT) AS totalCount,
CAST(SUM(CASE WHEN "PING_VALUE" IS NOT NULL AND "PING_VALUE" != '' THEN 1 ELSE 0 END) AS BIGINT) AS successCount,
CAST(SUM(CASE WHEN "PING_VALUE" = '11111' THEN 1 ELSE 0 END) AS BIGINT) AS successCount,
CAST(ROUND(
SUM(CASE WHEN "PING_VALUE" IS NOT NULL AND "PING_VALUE" != '' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
SUM(CASE WHEN "PING_VALUE" = '11111' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
2
) AS DOUBLE) AS connectionRate
FROM "DATACONNECTION"
@@ -91,9 +91,9 @@
SELECT
"NETWORK_NAME" AS operator,
CAST(COUNT(*) AS BIGINT) AS totalCount,
CAST(SUM(CASE WHEN "PING_VALUE" IS NOT NULL AND "PING_VALUE" != '' THEN 1 ELSE 0 END) AS BIGINT) AS successCount,
CAST(SUM(CASE WHEN "PING_VALUE" = '11111' THEN 1 ELSE 0 END) AS BIGINT) AS successCount,
CAST(ROUND(
SUM(CASE WHEN "PING_VALUE" IS NOT NULL AND "PING_VALUE" != '' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
SUM(CASE WHEN "PING_VALUE" = '11111' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
2
) AS DOUBLE) AS connectionRate
FROM "DATACONNECTION"

View File

@@ -2,36 +2,33 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bigdata.dao.NWQualityMapper">
<!--
查询 Phoenix 表 NWQUALITY
表名在 Phoenix 中是大写JDBC URL 中已指定 schema
-->
<!-- 按条件查询网络质量数据 -->
<select id="selectByCondition" resultType="com.bigdata.entity.NWQuality">
SELECT
"ID" AS id,
"GPSLAT" AS gpsLat,
"GPSLON" AS gpsLon,
"NWOPERATOR" AS nwOperator,
"ULSPEED" AS ulSpeed,
"DLSPEED" AS dlSpeed,
"LATENCY" AS latency,
"PROVINCE" AS province,
"DAYTIME" AS daytime,
"NWTYPE" AS nwType,
"LANDMARK" AS landmark,
"COMPANYMODEL" AS companyModel
"ID" AS id,
"GPSLAT" AS gpsLat,
"GPSLON" AS gpsLon,
"NWOPERATOR" AS nwOperator,
"ULSPEED" AS ulSpeed,
"DLSPEED" AS dlSpeed,
"LATENCY" AS latency,
"PROVINCE" AS province,
"DAYTIME" AS daytime,
"NWTYPE" AS nwType,
"LANDMARK" AS landmark,
"COMPANYMODEL" AS companyModel
FROM "NWQUALITY"
<where>
<!-- 核心修正OGNL表达式中用 and 替代 && -->
<if test="operator != null and operator != ''">
AND "PROVINCE" LIKE CONCAT('%', #{operator})
AND "NWOPERATOR" = #{operator}
</if>
<!-- DAYTIME 为 BIGINTyyyyMMddHHmmss按日期部分 yyyyMMdd 比较 -->
<if test="startDate != null and startDate != ''">
AND "DAYTIME" &gt;= TO_NUMBER(CONCAT(REPLACE(#{startDate}, '-', ''), '000000'))
AND ("DAYTIME" / 1000000) &gt;= TO_NUMBER(#{startDate})
</if>
<if test="endDate != null and endDate != ''">
AND "DAYTIME" &lt;= TO_NUMBER(CONCAT(REPLACE(#{endDate}, '-', ''), '235959'))
AND ("DAYTIME" / 1000000) &lt;= TO_NUMBER(#{endDate})
</if>
</where>
ORDER BY "DAYTIME" DESC
@@ -39,50 +36,46 @@
<!-- 统计各地区数量 -->
<select id="selectRegionStatistics" resultType="com.bigdata.dto.RegionStatisticsDTO">
SELECT
CASE
WHEN "PROVINCE" LIKE '%电信%' THEN REPLACE("PROVINCE", '电信', '')
WHEN "PROVINCE" LIKE '%移动%' THEN REPLACE("PROVINCE", '移动', '')
WHEN "PROVINCE" LIKE '%联通%' THEN REPLACE("PROVINCE", '联通', '')
WHEN "PROVINCE" LIKE '%铁通%' THEN REPLACE("PROVINCE", '铁通', '')
ELSE "PROVINCE"
END AS region,
CASE
WHEN "PROVINCE" LIKE '%电信%' THEN '电信'
WHEN "PROVINCE" LIKE '%移动%' THEN '移动'
WHEN "PROVINCE" LIKE '%联通%' THEN '联通'
WHEN "PROVINCE" LIKE '%铁通%' THEN '铁通'
ELSE '未知'
END AS operator,
CAST(COUNT(*) AS BIGINT) AS count
FROM "NWQUALITY"
<where>
<if test="operator != null and operator != ''">
AND "PROVINCE" LIKE CONCAT('%', #{operator})
</if>
<if test="startDate != null and startDate != ''">
AND "DAYTIME" &gt;= TO_NUMBER(CONCAT(REPLACE(#{startDate}, '-', ''), '000000'))
</if>
<if test="endDate != null and endDate != ''">
AND "DAYTIME" &lt;= TO_NUMBER(CONCAT(REPLACE(#{endDate}, '-', ''), '235959'))
</if>
</where>
GROUP BY
CASE
WHEN "PROVINCE" LIKE '%电信%' THEN REPLACE("PROVINCE", '电信', '')
WHEN "PROVINCE" LIKE '%移动%' THEN REPLACE("PROVINCE", '移动', '')
WHEN "PROVINCE" LIKE '%联通%' THEN REPLACE("PROVINCE", '联通', '')
WHEN "PROVINCE" LIKE '%铁通%' THEN REPLACE("PROVINCE", '铁通', '')
ELSE "PROVINCE"
END,
CASE
WHEN "PROVINCE" LIKE '%电信%' THEN '电信'
WHEN "PROVINCE" LIKE '%移动%' THEN '移动'
WHEN "PROVINCE" LIKE '%联通%' THEN '联通'
WHEN "PROVINCE" LIKE '%铁通%' THEN '铁通'
ELSE '未知'
END
ORDER BY count DESC, region
<choose>
<when test="operator != null and operator != ''">
SELECT
"PROVINCE" AS region,
"NWOPERATOR" AS operator,
CAST(COUNT(*) AS BIGINT) AS count
FROM "NWQUALITY"
<where>
"NWOPERATOR" = #{operator}
<if test="startDate != null and startDate != ''">
AND ("DAYTIME" / 1000000) &gt;= TO_NUMBER(#{startDate})
</if>
<if test="endDate != null and endDate != ''">
AND ("DAYTIME" / 1000000) &lt;= TO_NUMBER(#{endDate})
</if>
</where>
GROUP BY "PROVINCE", "NWOPERATOR"
ORDER BY count DESC, region
</when>
<otherwise>
SELECT
"PROVINCE" AS region,
"NWOPERATOR" AS operator,
CAST(COUNT(*) AS BIGINT) AS count
FROM "NWQUALITY"
<where>
"NWOPERATOR" IN ('CMCC','CUCC','CTCC')
<if test="startDate != null and startDate != ''">
AND ("DAYTIME" / 1000000) &gt;= TO_NUMBER(#{startDate})
</if>
<if test="endDate != null and endDate != ''">
AND ("DAYTIME" / 1000000) &lt;= TO_NUMBER(#{endDate})
</if>
</where>
GROUP BY "PROVINCE", "NWOPERATOR"
ORDER BY count DESC
LIMIT 10
</otherwise>
</choose>
</select>
</mapper>