refactor: use only siteId for risk rule storage, drop type-level fallback
This commit is contained in:
@@ -22,16 +22,9 @@ public class RiskRuleServiceImpl implements RiskRuleService {
|
|||||||
private final com.par.core.storage.CachedStorageService storageService;
|
private final com.par.core.storage.CachedStorageService storageService;
|
||||||
private static final ObjectMapper om = new ObjectMapper();
|
private static final ObjectMapper om = new ObjectMapper();
|
||||||
|
|
||||||
/** Find by siteId first, fallback to siteType for backward compat */
|
|
||||||
private RiskRule findByIdentifier(String identifier) {
|
private RiskRule findByIdentifier(String identifier) {
|
||||||
// Try siteId first
|
|
||||||
RiskRule rr = mapper.selectOne(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
|
||||||
.eq(RiskRule::getSiteId, identifier).eq(RiskRule::getDeleted, 0)
|
|
||||||
.orderByDesc(RiskRule::getId).last("limit 1"));
|
|
||||||
if (rr != null) return rr;
|
|
||||||
// Fallback to siteType
|
|
||||||
return mapper.selectOne(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
return mapper.selectOne(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
||||||
.eq(RiskRule::getSiteType, identifier).eq(RiskRule::getDeleted, 0)
|
.eq(RiskRule::getSiteId, identifier).eq(RiskRule::getDeleted, 0)
|
||||||
.orderByDesc(RiskRule::getId).last("limit 1"));
|
.orderByDesc(RiskRule::getId).last("limit 1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,11 +77,6 @@ public class RiskRuleServiceImpl implements RiskRuleService {
|
|||||||
var list = mapper.selectList(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
var list = mapper.selectList(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
||||||
.eq(RiskRule::getSiteId, siteType).eq(RiskRule::getDeleted, 0)
|
.eq(RiskRule::getSiteId, siteType).eq(RiskRule::getDeleted, 0)
|
||||||
.orderByDesc(RiskRule::getId));
|
.orderByDesc(RiskRule::getId));
|
||||||
if (list.isEmpty()) {
|
|
||||||
list = mapper.selectList(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
|
||||||
.eq(RiskRule::getSiteType, siteType).eq(RiskRule::getDeleted, 0)
|
|
||||||
.orderByDesc(RiskRule::getId));
|
|
||||||
}
|
|
||||||
List<Map<String, Object>> result = new ArrayList<>();
|
List<Map<String, Object>> result = new ArrayList<>();
|
||||||
for (var r : list) {
|
for (var r : list) {
|
||||||
result.add(Map.of("version", r.getVersion(), "createdAt", r.getCreatedAt() != null ? r.getCreatedAt().toString() : ""));
|
result.add(Map.of("version", r.getVersion(), "createdAt", r.getCreatedAt() != null ? r.getCreatedAt().toString() : ""));
|
||||||
@@ -101,11 +89,6 @@ public class RiskRuleServiceImpl implements RiskRuleService {
|
|||||||
var r = mapper.selectOne(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
var r = mapper.selectOne(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
||||||
.eq(RiskRule::getSiteId, siteType).eq(RiskRule::getVersion, version)
|
.eq(RiskRule::getSiteId, siteType).eq(RiskRule::getVersion, version)
|
||||||
.eq(RiskRule::getDeleted, 0));
|
.eq(RiskRule::getDeleted, 0));
|
||||||
if (r == null) {
|
|
||||||
r = mapper.selectOne(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
|
||||||
.eq(RiskRule::getSiteType, siteType).eq(RiskRule::getVersion, version)
|
|
||||||
.eq(RiskRule::getDeleted, 0));
|
|
||||||
}
|
|
||||||
return r != null ? r.getRulesJson() : null;
|
return r != null ? r.getRulesJson() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,8 +96,6 @@ public class RiskRuleServiceImpl implements RiskRuleService {
|
|||||||
public void deleteRules(String siteType) {
|
public void deleteRules(String siteType) {
|
||||||
mapper.delete(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
mapper.delete(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
||||||
.eq(RiskRule::getSiteId, siteType).eq(RiskRule::getDeleted, 0));
|
.eq(RiskRule::getSiteId, siteType).eq(RiskRule::getDeleted, 0));
|
||||||
mapper.delete(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<RiskRule>()
|
|
||||||
.eq(RiskRule::getSiteType, siteType).eq(RiskRule::getDeleted, 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -11,9 +11,6 @@
|
|||||||
<template #default="s">{{ (s.row.names||[]).join('/') || '-' }}</template>
|
<template #default="s">{{ (s.row.names||[]).join('/') || '-' }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="siteType" label="类型" width="100" />
|
<el-table-column prop="siteType" label="类型" width="100" />
|
||||||
<el-table-column label="来源" width="80" align="center">
|
|
||||||
<template #default="s">{{ s.row.source || '—' }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="规则数" width="80" align="center">
|
<el-table-column label="规则数" width="80" align="center">
|
||||||
<template #default="s"><el-tag size="small">{{ s.row.ruleCount || 0 }}</el-tag></template>
|
<template #default="s"><el-tag size="small">{{ s.row.ruleCount || 0 }}</el-tag></template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -336,13 +333,11 @@ const ruleText = (r) => {
|
|||||||
return `${typeLabel(r.type)}:${val} → <span style="color:#f56c6c;font-weight:500">封号/删除账号</span>${appText}`
|
return `${typeLabel(r.type)}:${val} → <span style="color:#f56c6c;font-weight:500">封号/删除账号</span>${appText}`
|
||||||
}
|
}
|
||||||
const merged = computed(() => (Array.isArray(sites.value)?sites.value:[]).map(s => {
|
const merged = computed(() => (Array.isArray(sites.value)?sites.value:[]).map(s => {
|
||||||
// 优先站点级,兜底类型级
|
const entry = rulesMap.value[s.siteId] || {}
|
||||||
const entry = rulesMap.value[s.siteId] || rulesMap.value[s.siteType] || {}
|
|
||||||
return {
|
return {
|
||||||
siteId: s.siteId, names: s.names, siteType: s.siteType,
|
siteId: s.siteId, names: s.names, siteType: s.siteType,
|
||||||
ruleCount: entry.ruleCount || 0, version: entry.version || null,
|
ruleCount: entry.ruleCount || 0, version: entry.version || null,
|
||||||
updatedAt: entry.updatedAt || null, rulesJson: entry.rulesJson || null,
|
updatedAt: entry.updatedAt || null, rulesJson: entry.rulesJson || null,
|
||||||
source: rulesMap.value[s.siteId] ? '站点级' : entry.ruleCount ? '类型级' : null,
|
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
@@ -356,7 +351,8 @@ const fetchAll = async () => {
|
|||||||
const map = {}
|
const map = {}
|
||||||
for (const r of rulesData) {
|
for (const r of rulesData) {
|
||||||
const cnt = (() => { try { return JSON.parse(r.rulesJson||'[]').length } catch { return 0 } })()
|
const cnt = (() => { try { return JSON.parse(r.rulesJson||'[]').length } catch { return 0 } })()
|
||||||
const key = r.siteId || r.siteType // siteId is the new key, fallback to siteType
|
const key = r.siteId
|
||||||
|
if (!key) continue
|
||||||
if (!map[key] || r.version > map[key].version)
|
if (!map[key] || r.version > map[key].version)
|
||||||
map[key] = { ruleCount: cnt, version: r.version, updatedAt: r.updatedAt, rulesJson: r.rulesJson }
|
map[key] = { ruleCount: cnt, version: r.version, updatedAt: r.updatedAt, rulesJson: r.rulesJson }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user