refactor: 页面+规则存七牛云本地缓存+版本历史接口
This commit is contained in:
@@ -73,6 +73,44 @@ public class RiskRuleController {
|
|||||||
return ApiResponse.success();
|
return ApiResponse.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 获取风险规则版本历史 */
|
||||||
|
@GetMapping("/api/v1/admin/risk-rules/{siteType}/versions")
|
||||||
|
public ApiResponse<List<Map<String, Object>>> versions(@PathVariable String siteType, HttpServletRequest request) {
|
||||||
|
checkAdmin(request);
|
||||||
|
var mapper = ((com.par.core.service.impl.RiskRuleServiceImpl) riskRuleService).mapper;
|
||||||
|
var list = mapper.selectList(
|
||||||
|
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.par.core.entity.RiskRule>()
|
||||||
|
.eq(com.par.core.entity.RiskRule::getSiteType, siteType)
|
||||||
|
.eq(com.par.core.entity.RiskRule::getDeleted, 0)
|
||||||
|
.orderByDesc(com.par.core.entity.RiskRule::getId));
|
||||||
|
List<Map<String, Object>> result = new ArrayList<>();
|
||||||
|
for (var r : list) {
|
||||||
|
Map<String, Object> m = new LinkedHashMap<>();
|
||||||
|
m.put("id", r.getId()); m.put("version", r.getVersion());
|
||||||
|
m.put("createdAt", r.getCreatedAt()); m.put("updatedAt", r.getUpdatedAt());
|
||||||
|
result.add(m);
|
||||||
|
}
|
||||||
|
return ApiResponse.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取指定版本风险规则内容 */
|
||||||
|
@GetMapping("/api/v1/admin/risk-rules/{siteType}/version/{version}")
|
||||||
|
public ApiResponse<Map<String, Object>> getVersion(
|
||||||
|
@PathVariable String siteType, @PathVariable int version, HttpServletRequest request) {
|
||||||
|
checkAdmin(request);
|
||||||
|
var mapper = ((com.par.core.service.impl.RiskRuleServiceImpl) riskRuleService).mapper;
|
||||||
|
var r = mapper.selectOne(
|
||||||
|
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.par.core.entity.RiskRule>()
|
||||||
|
.eq(com.par.core.entity.RiskRule::getSiteType, siteType)
|
||||||
|
.eq(com.par.core.entity.RiskRule::getVersion, version)
|
||||||
|
.eq(com.par.core.entity.RiskRule::getDeleted, 0));
|
||||||
|
if (r == null) return ApiResponse.error(404, "版本不存在");
|
||||||
|
Map<String, Object> result = new LinkedHashMap<>();
|
||||||
|
result.put("siteType", siteType); result.put("version", r.getVersion());
|
||||||
|
result.put("content", r.getRulesJson());
|
||||||
|
return ApiResponse.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
private void checkAdmin(HttpServletRequest request) {
|
private void checkAdmin(HttpServletRequest request) {
|
||||||
var level = request.getAttribute("trustLevel");
|
var level = request.getAttribute("trustLevel");
|
||||||
if (level == null || !"ADMIN".equals(level.toString())) {
|
if (level == null || !"ADMIN".equals(level.toString())) {
|
||||||
|
|||||||
@@ -75,6 +75,47 @@ public class SitePagesController {
|
|||||||
return ApiResponse.success();
|
return ApiResponse.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 获取页面配置版本历史 */
|
||||||
|
@GetMapping("/api/v1/admin/site-pages/{siteId}/versions")
|
||||||
|
public ApiResponse<List<Map<String, Object>>> versions(@PathVariable String siteId, HttpServletRequest request) {
|
||||||
|
checkAdmin(request);
|
||||||
|
var mapper = ((com.par.core.service.impl.SitePagesServiceImpl) sitePagesService).mapper;
|
||||||
|
var list = mapper.selectList(
|
||||||
|
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.par.core.entity.SitePages>()
|
||||||
|
.eq(com.par.core.entity.SitePages::getSiteId, siteId)
|
||||||
|
.eq(com.par.core.entity.SitePages::getDeleted, 0)
|
||||||
|
.orderByDesc(com.par.core.entity.SitePages::getId));
|
||||||
|
List<Map<String, Object>> result = new ArrayList<>();
|
||||||
|
for (var p : list) {
|
||||||
|
Map<String, Object> m = new LinkedHashMap<>();
|
||||||
|
m.put("id", p.getId());
|
||||||
|
m.put("version", p.getVersion());
|
||||||
|
m.put("createdAt", p.getCreatedAt());
|
||||||
|
m.put("updatedAt", p.getUpdatedAt());
|
||||||
|
result.add(m);
|
||||||
|
}
|
||||||
|
return ApiResponse.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 获取指定版本页面配置内容 */
|
||||||
|
@GetMapping("/api/v1/admin/site-pages/{siteId}/version/{version}")
|
||||||
|
public ApiResponse<Map<String, Object>> getVersion(
|
||||||
|
@PathVariable String siteId, @PathVariable String version, HttpServletRequest request) {
|
||||||
|
checkAdmin(request);
|
||||||
|
var mapper = ((com.par.core.service.impl.SitePagesServiceImpl) sitePagesService).mapper;
|
||||||
|
var p = mapper.selectOne(
|
||||||
|
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.par.core.entity.SitePages>()
|
||||||
|
.eq(com.par.core.entity.SitePages::getSiteId, siteId)
|
||||||
|
.eq(com.par.core.entity.SitePages::getVersion, version)
|
||||||
|
.eq(com.par.core.entity.SitePages::getDeleted, 0));
|
||||||
|
if (p == null) return ApiResponse.error(404, "版本不存在");
|
||||||
|
Map<String, Object> result = new LinkedHashMap<>();
|
||||||
|
result.put("siteId", siteId);
|
||||||
|
result.put("version", p.getVersion());
|
||||||
|
result.put("content", p.getEntriesJson());
|
||||||
|
return ApiResponse.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
private void checkAdmin(HttpServletRequest request) {
|
private void checkAdmin(HttpServletRequest request) {
|
||||||
var level = request.getAttribute("trustLevel");
|
var level = request.getAttribute("trustLevel");
|
||||||
if (level == null || !"ADMIN".equals(level.toString())) {
|
if (level == null || !"ADMIN".equals(level.toString())) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import java.util.*;
|
|||||||
public class RiskRuleServiceImpl implements RiskRuleService {
|
public class RiskRuleServiceImpl implements RiskRuleService {
|
||||||
|
|
||||||
private final RiskRuleMapper mapper;
|
private final RiskRuleMapper mapper;
|
||||||
|
private final com.par.core.storage.CachedStorageService storageService;
|
||||||
private static final ObjectMapper om = new ObjectMapper();
|
private static final ObjectMapper om = new ObjectMapper();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -50,14 +51,18 @@ public class RiskRuleServiceImpl implements RiskRuleService {
|
|||||||
@Override
|
@Override
|
||||||
public void saveRules(String siteType, List<Map<String, Object>> rules) {
|
public void saveRules(String siteType, List<Map<String, Object>> rules) {
|
||||||
try {
|
try {
|
||||||
String json = om.writeValueAsString(rules);
|
String json = om.writerWithDefaultPrettyPrinter().writeValueAsString(rules);
|
||||||
int nextVer = getVersion(siteType) + 1;
|
int nextVer = getVersion(siteType) + 1;
|
||||||
|
// 存 DB
|
||||||
RiskRule rr = new RiskRule();
|
RiskRule rr = new RiskRule();
|
||||||
rr.setSiteType(siteType);
|
rr.setSiteType(siteType);
|
||||||
rr.setVersion(nextVer);
|
rr.setVersion(nextVer);
|
||||||
rr.setRulesJson(json);
|
rr.setRulesJson(json);
|
||||||
mapper.insert(rr);
|
mapper.insert(rr);
|
||||||
log.info("风险规则已保存: siteType={}, version={}", siteType, nextVer);
|
// 存七牛云 + 本地缓存
|
||||||
|
String storagePath = String.format("rules/%s/v%d.json", siteType, nextVer);
|
||||||
|
storageService.store(storagePath, json);
|
||||||
|
log.info("风险规则已保存: siteType={}, version={}, path={}", siteType, nextVer, storagePath);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("保存风险规则失败 siteType={}", siteType, e);
|
log.error("保存风险规则失败 siteType={}", siteType, e);
|
||||||
throw new RuntimeException("保存失败: " + e.getMessage());
|
throw new RuntimeException("保存失败: " + e.getMessage());
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import java.util.*;
|
|||||||
public class SitePagesServiceImpl implements SitePagesService {
|
public class SitePagesServiceImpl implements SitePagesService {
|
||||||
|
|
||||||
private final SitePagesMapper mapper;
|
private final SitePagesMapper mapper;
|
||||||
|
private final com.par.core.storage.CachedStorageService storageService;
|
||||||
private static final ObjectMapper om = new ObjectMapper();
|
private static final ObjectMapper om = new ObjectMapper();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -51,19 +52,24 @@ public class SitePagesServiceImpl implements SitePagesService {
|
|||||||
@Override
|
@Override
|
||||||
public void savePages(String siteId, List<Map<String, Object>> entries) {
|
public void savePages(String siteId, List<Map<String, Object>> entries) {
|
||||||
try {
|
try {
|
||||||
String json = om.writeValueAsString(entries);
|
String json = om.writerWithDefaultPrettyPrinter().writeValueAsString(entries);
|
||||||
// 版本号递增
|
// 版本号递增
|
||||||
String currentVer = getVersion(siteId);
|
String currentVer = getVersion(siteId);
|
||||||
int nextVer = 1;
|
int nextVer = 1;
|
||||||
if (currentVer != null) {
|
if (currentVer != null) {
|
||||||
try { nextVer = Integer.parseInt(currentVer) + 1; } catch (NumberFormatException e) { /* keep 1 */ }
|
try { nextVer = Integer.parseInt(currentVer) + 1; } catch (NumberFormatException e) { /* keep 1 */ }
|
||||||
}
|
}
|
||||||
|
String version = String.valueOf(nextVer);
|
||||||
|
// 存 DB
|
||||||
SitePages sp = new SitePages();
|
SitePages sp = new SitePages();
|
||||||
sp.setSiteId(siteId);
|
sp.setSiteId(siteId);
|
||||||
sp.setVersion(String.valueOf(nextVer));
|
sp.setVersion(version);
|
||||||
sp.setEntriesJson(json);
|
sp.setEntriesJson(json);
|
||||||
mapper.insert(sp);
|
mapper.insert(sp);
|
||||||
log.info("页面配置已保存: siteId={}, version={}", siteId, nextVer);
|
// 存七牛云 + 本地缓存
|
||||||
|
String storagePath = String.format("pages/%s/v%s.json", siteId, version);
|
||||||
|
storageService.store(storagePath, json);
|
||||||
|
log.info("页面配置已保存: siteId={}, version={}, path={}", siteId, version, storagePath);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("保存页面配置失败 siteId={}", siteId, e);
|
log.error("保存页面配置失败 siteId={}", siteId, e);
|
||||||
throw new RuntimeException("保存页面配置失败: " + e.getMessage());
|
throw new RuntimeException("保存页面配置失败: " + e.getMessage());
|
||||||
|
|||||||
Reference in New Issue
Block a user