This commit is contained in:
@@ -1,39 +0,0 @@
|
||||
const isEmptyValue = (value) => value === null || value === undefined || value === '' || value === '-';
|
||||
|
||||
const toFiniteNumber = (value) => {
|
||||
if (isEmptyValue(value)) return null;
|
||||
|
||||
const numericValue = Number(value);
|
||||
return Number.isFinite(numericValue) ? numericValue : null;
|
||||
};
|
||||
|
||||
const clampScore = (value) => Math.min(Math.max(value, 0), 100);
|
||||
|
||||
export const getNetworkScore = (rsrp, rsrq, sinr) => {
|
||||
const rsrpValue = toFiniteNumber(rsrp);
|
||||
const rsrqValue = toFiniteNumber(rsrq);
|
||||
const sinrValue = toFiniteNumber(sinr);
|
||||
|
||||
const metrics = [
|
||||
{ score: rsrpValue === null ? null : clampScore((rsrpValue + 120) * 2), weight: 0.5 },
|
||||
{ score: sinrValue === null ? null : clampScore(sinrValue * 5), weight: 0.3 },
|
||||
{ score: rsrqValue === null ? null : clampScore((rsrqValue + 20) * 5), weight: 0.2 }
|
||||
].filter(item => item.score !== null);
|
||||
|
||||
if (!metrics.length) return null;
|
||||
|
||||
const totalWeight = metrics.reduce((sum, item) => sum + item.weight, 0);
|
||||
return metrics.reduce((sum, item) => sum + item.score * item.weight, 0) / totalWeight;
|
||||
};
|
||||
|
||||
export const getNetworkLevel = (score) => {
|
||||
if (score === null || score === undefined || !Number.isFinite(score)) return '-';
|
||||
if (score >= 85) return '极好';
|
||||
if (score >= 70) return '良好';
|
||||
if (score >= 50) return '一般';
|
||||
if (score >= 30) return '较差';
|
||||
return '很差';
|
||||
};
|
||||
|
||||
export const getNetworkLevelByMetrics = (rsrp, rsrq, sinr) =>
|
||||
getNetworkLevel(getNetworkScore(rsrp, rsrq, sinr));
|
||||
Reference in New Issue
Block a user