Commit cd4e8948 by 黄明步

.

parent 5c732a67
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
<spring-cloud.version>Hoxton.SR11</spring-cloud.version> <spring-cloud.version>Hoxton.SR11</spring-cloud.version>
<elasticsearch.version>8.9.1</elasticsearch.version> <elasticsearch.version>8.9.1</elasticsearch.version>
<alibaba.druid.version>1.1.22</alibaba.druid.version> <alibaba.druid.version>1.1.22</alibaba.druid.version>
<jackson.version>2.12.3</jackson.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
...@@ -183,6 +184,12 @@ ...@@ -183,6 +184,12 @@
<groupId>co.elastic.clients</groupId> <groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId> <artifactId>elasticsearch-java</artifactId>
<version>${elasticsearch.version}</version> <version>${elasticsearch.version}</version>
<exclusions>
<exclusion>
<artifactId>jakarta.json-api</artifactId>
<groupId>jakarta.json</groupId>
</exclusion>
</exclusions>
</dependency> </dependency>
<dependency> <dependency>
......
package com.gxmailu.ocrCloudPlatform.constant;
/**
* @author: HuangHao
* @create: 2023-08-20 18:31
* @Description:
*/
public class RedisConstant {
/**
* redis key 用户法庭信息前缀
*/
public static final String COURT_INFO_USER_PREFIX = "court-role-user:";
/**
* redis key 法院列表
*/
public static final String COURT_LIST = "courtList";
/**
* redis key OCR服务器列表
*/
public static final String OCR_SERVER_LIST = "ocrServerList";
/**
* redis key 请求任务量
**/
public static final String SERVER_REQUEST_TASK = "server-request-task-";
/**
* redission 分布式锁名称
**/
public static final String LOCK_NAME = "server-task";
/**
* redis key 应用配置信息
**/
public static final String CONFIG_APPLICATION_ALL = "configApplication:all";
/**
* redis key 能力配置信息
**/
public static final String CONFIG_ABILITY_ALL = "configAbility:all";
}
...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.*; import java.util.*;
...@@ -192,9 +193,14 @@ public class AppAbilityRecordAllController { ...@@ -192,9 +193,14 @@ public class AppAbilityRecordAllController {
} }
@PostMapping("/getListByPage") @PostMapping("/getListByPage")
public Object getListByPage(RecordDto recordDto) { public Result getListByPage(@RequestBody RecordDto recordDto) {
Assert.notNull(recordDto, "参数不能为空"); Assert.notNull(recordDto, "参数不能为空");
return Result.success("",recordAllService.getList(recordDto)); try {
return Result.success("", recordAllService.getRecordList(recordDto));
} catch (IOException e) {
log.error("调用记录查询异常", e);
return Result.error("查询异常,请联系管理员");
}
} }
@PostMapping("/getById") @PostMapping("/getById")
public Object getById(Long id) { public Object getById(Long id) {
......
...@@ -23,74 +23,6 @@ public class CourtController { ...@@ -23,74 +23,6 @@ public class CourtController {
@Autowired @Autowired
private CourtService courtService; private CourtService courtService;
/*@RequestMapping("/getFile")
public ResponseEntity<Object> download(HttpServletRequest request,String filename) {
String path = "D:\\SDK\\nginx-1.19.9\\html\\"+filename;
String contentDisposition = ContentDisposition
.builder("attachment")
.filename(path)
.build().toString();
File file = new File(path);
if (file.exists()) {
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(new FileSystemResource(path));
} else {
JSONObject object = new JSONObject();
object.set("code",500);
object.set("mag","错误!");
return ResponseEntity.status(500)
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition + " Not Found")
.contentType(MediaType.APPLICATION_JSON)
.body(object.toJSONString(0));
}
}
@RequestMapping("one")
public void one(HttpServletRequest request, HttpServletResponse response){
System.out.println("接口11111111");
System.out.println("开始转发。。。。");
HttpResponse httpResponse = HttpRequest.post("http://192.168.13.38:9027/court/tow")
.header("appId",request.getHeader("appId"))
.execute();
System.out.println(httpResponse);
Map<String, List<String>> headers = httpResponse.headers();
System.out.println(headers.isEmpty());
for (Map.Entry<String, List<String>> entry : headers.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
response.setHeader(entry.getKey(),entry.getValue().get(0));
}
try {
IoUtil.copy(httpResponse.bodyStream(),response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@RequestMapping("tow")
public void tow(HttpServletRequest request, HttpServletResponse response){
System.out.println("接口2222222");
String appId = request.getHeader("appId");
System.out.println("appId:"+appId);
response.setStatus(200);
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.setCharacterEncoding("utf-8");
JSONObject object = new JSONObject();
object.set("code", 200);
object.set("message", "成功");
object.set("time", DateUtil.current());
try {
response.getWriter().write(object.toJSONString(0));
} catch (IOException ex) {
ex.printStackTrace();
}
}*/
/** /**
* 法院列表分页 * 法院列表分页
* *
......
...@@ -7,6 +7,7 @@ import org.springframework.format.annotation.DateTimeFormat; ...@@ -7,6 +7,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
@Data @Data
@ToString @ToString
...@@ -23,9 +24,9 @@ public class RecordDto implements Serializable { ...@@ -23,9 +24,9 @@ public class RecordDto implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endTime; private Date endTime;
private Long applicationId; private Long applicationId;
private String ipScope; private List<String> ipScopeList;
private Integer page; private Integer page;
private Integer size; private Integer limit;
private Integer network; private Integer network;
} }
...@@ -6,6 +6,7 @@ import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecordAll; ...@@ -6,6 +6,7 @@ import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecordAll;
import com.gxmailu.ocrCloudPlatform.entity.DeriveCallRecord; import com.gxmailu.ocrCloudPlatform.entity.DeriveCallRecord;
import com.gxmailu.ocrCloudPlatform.vo.Result; import com.gxmailu.ocrCloudPlatform.vo.Result;
import java.io.IOException;
import java.util.List; import java.util.List;
...@@ -36,4 +37,6 @@ public interface AppAbilityRecordAllService extends IService<AppAbilityRecordAll ...@@ -36,4 +37,6 @@ public interface AppAbilityRecordAllService extends IService<AppAbilityRecordAll
Result getCorrelationData(String day1, String day2); Result getCorrelationData(String day1, String day2);
Result getBrokenLineData(String date); Result getBrokenLineData(String date);
Object getRecordList(RecordDto recordDto) throws IOException;
} }
package com.gxmailu.ocrCloudPlatform.service; package com.gxmailu.ocrCloudPlatform.service;
import com.gxmailu.ocrCloudPlatform.entity.ConfigApplication;
import com.gxmailu.ocrCloudPlatform.vo.ConfigApplicationVO; import com.gxmailu.ocrCloudPlatform.vo.ConfigApplicationVO;
import com.gxmailu.ocrCloudPlatform.vo.Result; import com.gxmailu.ocrCloudPlatform.vo.Result;
import java.util.List;
public interface ConfigApplicationService { public interface ConfigApplicationService {
Result queryConfigAppById(String id); Result queryConfigAppById(String id);
...@@ -13,4 +16,6 @@ public interface ConfigApplicationService { ...@@ -13,4 +16,6 @@ public interface ConfigApplicationService {
Result insertConfigApp(ConfigApplicationVO configAppVo); Result insertConfigApp(ConfigApplicationVO configAppVo);
List<ConfigApplication> getConfigApplicationAll();
} }
package com.gxmailu.ocrCloudPlatform.service.impl; package com.gxmailu.ocrCloudPlatform.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxmailu.ocrCloudPlatform.constant.RedisConstant;
import com.gxmailu.ocrCloudPlatform.dto.RecordDto; import com.gxmailu.ocrCloudPlatform.dto.RecordDto;
import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecordAll; import com.gxmailu.ocrCloudPlatform.entity.*;
import com.gxmailu.ocrCloudPlatform.entity.Court;
import com.gxmailu.ocrCloudPlatform.entity.DeriveCallRecord;
import com.gxmailu.ocrCloudPlatform.entity.ServerInfo;
import com.gxmailu.ocrCloudPlatform.mapper.*; import com.gxmailu.ocrCloudPlatform.mapper.*;
import com.gxmailu.ocrCloudPlatform.service.AppAbilityRecordAllService; import com.gxmailu.ocrCloudPlatform.service.AppAbilityRecordAllService;
import com.gxmailu.ocrCloudPlatform.service.ConfigAbilityService;
import com.gxmailu.ocrCloudPlatform.service.ConfigApplicationService;
import com.gxmailu.ocrCloudPlatform.utils.SnowFlakeUtil; import com.gxmailu.ocrCloudPlatform.utils.SnowFlakeUtil;
import com.gxmailu.ocrCloudPlatform.vo.AppAbilityRecordVo;
import com.gxmailu.ocrCloudPlatform.vo.BrokenLineData; import com.gxmailu.ocrCloudPlatform.vo.BrokenLineData;
import com.gxmailu.ocrCloudPlatform.vo.Result; import com.gxmailu.ocrCloudPlatform.vo.Result;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -26,11 +27,10 @@ import org.springframework.stereotype.Service; ...@@ -26,11 +27,10 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.io.IOException;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
...@@ -65,6 +65,11 @@ public class AppAbilityRecordAllServiceImpl extends ServiceImpl<AppAbilityRecord ...@@ -65,6 +65,11 @@ public class AppAbilityRecordAllServiceImpl extends ServiceImpl<AppAbilityRecord
@Resource @Resource
private ElasticSearchService elasticSearchService; private ElasticSearchService elasticSearchService;
@Resource
private ConfigAbilityService configAbilityService;
@Resource
private ConfigApplicationService configApplicationService;
@Override @Override
...@@ -100,17 +105,17 @@ public class AppAbilityRecordAllServiceImpl extends ServiceImpl<AppAbilityRecord ...@@ -100,17 +105,17 @@ public class AppAbilityRecordAllServiceImpl extends ServiceImpl<AppAbilityRecord
serverIpList.add(serverInfo.getIp()); serverIpList.add(serverInfo.getIp());
} }
LambdaQueryWrapper<AppAbilityRecordAll> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<AppAbilityRecordAll> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.apply(recordDto.getStartTime() != null, // queryWrapper.apply(recordDto.getStartTime() != null,
"date_format (created_time,'%Y-%m-%d') >= date_format ({0},'%Y-%m-%d')", recordDto.getStartTime()) // "date_format (created_time,'%Y-%m-%d') >= date_format ({0},'%Y-%m-%d')", recordDto.getStartTime())
.apply(recordDto.getEndTime() != null, // .apply(recordDto.getEndTime() != null,
"date_format (created_time,'%Y-%m-%d') <= date_format ({0},'%Y-%m-%d')", recordDto.getEndTime()) // "date_format (created_time,'%Y-%m-%d') <= date_format ({0},'%Y-%m-%d')", recordDto.getEndTime())
.apply(recordDto.getApplicationId() != null, "application_id = {0}", recordDto.getApplicationId()) // .apply(recordDto.getApplicationId() != null, "application_id = {0}", recordDto.getApplicationId())
.apply(recordDto.getIpScope() != null, "ip like concat({0},'%')", recordDto.getIpScope()) // .apply(recordDto.getIpScope() != null, "ip like concat({0},'%')", recordDto.getIpScope())
.in(serverIpList.size() > 0, AppAbilityRecordAll::getServerIp, serverIpList) // .in(serverIpList.size() > 0, AppAbilityRecordAll::getServerIp, serverIpList)
.orderByDesc(AppAbilityRecordAll::getCreatedTime); // .orderByDesc(AppAbilityRecordAll::getCreatedTime);
if (recordDto.getPage() != null) { if (recordDto.getPage() != null) {
recordDto.setSize(recordDto.getSize() == null ? 10 : recordDto.getSize()); recordDto.setLimit(recordDto.getLimit() == null ? 10 : recordDto.getLimit());
Page<AppAbilityRecordAll> page = new Page<>(recordDto.getPage(), recordDto.getSize()); Page<AppAbilityRecordAll> page = new Page<>(recordDto.getPage(), recordDto.getLimit());
return recordAllMapper.selectPage(page, queryWrapper); return recordAllMapper.selectPage(page, queryWrapper);
} else { } else {
return recordAllMapper.selectList(queryWrapper); return recordAllMapper.selectList(queryWrapper);
...@@ -118,18 +123,68 @@ public class AppAbilityRecordAllServiceImpl extends ServiceImpl<AppAbilityRecord ...@@ -118,18 +123,68 @@ public class AppAbilityRecordAllServiceImpl extends ServiceImpl<AppAbilityRecord
} }
@Override @Override
public Page<AppAbilityRecordVo> getRecordList(RecordDto recordDto) throws IOException {
// 获取应用用户配置
List<ConfigAbility> configAbilityList = configAbilityService.selectAll();
Map<String, ConfigAbility> abilityMap = configAbilityList.stream().collect(Collectors.toMap(ConfigAbility::getId, obj -> obj));
// 获取应用识别能力配置
List<ConfigApplication> configApplicationList = configApplicationService.getConfigApplicationAll();
Map<Long, ConfigApplication> applicationMap = configApplicationList.stream().collect(Collectors.toMap(ConfigApplication::getId, obj -> obj));
// 获取法院列表
List<Court> courtList;
Object data = redisService.getValue(RedisConstant.COURT_LIST);
if (ObjUtil.isNotNull(data)) {
courtList = JSONUtil.toList(data.toString(), Court.class);
} else {
courtList = courtMapper.selectList(new LambdaQueryWrapper<Court>().isNotNull(Court::getIpScope));
redisService.set(RedisConstant.COURT_LIST, courtList, 1L, TimeUnit.DAYS);
}
Page<AppAbilityRecord> recordByPage = elasticSearchService.getRecordList(recordDto);
ArrayList<AppAbilityRecordVo> recordVoList = new ArrayList<>();
recordByPage.getRecords().forEach(abilityRecord -> {
AppAbilityRecordVo recordVo = new AppAbilityRecordVo();
BeanUtil.copyProperties(abilityRecord, recordVo);
recordVo.setIp(abilityRecord.getIp().split(",")[0]);
Optional<Court> first = courtList.stream().filter(court -> {
String ipScope = court.getIpScope();
String[] ipScopes = ipScope.split(";");
for (String scope : ipScopes) {
if (recordVo.getIp().startsWith(scope)) {
return true;
}
}
return false;
}).findFirst();
recordVo.setCourtName(first.isPresent() ? first.get().getName() : "未知");
recordVo.setBusinessVendors(applicationMap.get(abilityRecord.getApplicationId()).getDescription());
recordVo.setAppAbilityName(abilityMap.get(abilityRecord.getAbilityId().toString()).getName());
recordVo.setCallCount("1");
recordVoList.add(recordVo);
});
Page<AppAbilityRecordVo> page = new Page<>();
page.setTotal(recordByPage.getTotal());
page.setSize(recordByPage.getSize());
page.setCurrent(recordByPage.getCurrent());
page.setRecords(recordVoList);
return page;
}
@Override
public Object getCourtUseSum() { public Object getCourtUseSum() {
List<Court> courtList; List<Court> courtList;
Object data = redisService.getValue("courtList"); Object data = redisService.getValue(RedisConstant.COURT_LIST);
if (data != null) { if (data != null) {
JSONArray array = JSONUtil.parseArray(data); // JSONArray array = JSONUtil.parseArray(data);
courtList = new ArrayList<>(); // courtList = new ArrayList<>();
for (Object o : array) { // for (Object o : array) {
courtList.add(JSONUtil.parseObj(o).toBean(Court.class)); // courtList.add(JSONUtil.parseObj(o).toBean(Court.class));
} // }
courtList = JSONUtil.toList(data.toString(), Court.class);
} else { } else {
courtList = courtMapper.selectList(new LambdaQueryWrapper<Court>().isNotNull(Court::getIpScope)); courtList = courtMapper.selectList(new LambdaQueryWrapper<Court>().isNotNull(Court::getIpScope));
redisService.set("courtList", courtList, 5L, TimeUnit.MINUTES); redisService.set(RedisConstant.COURT_LIST, courtList, 1L, TimeUnit.DAYS);
} }
// JSONArray array = new JSONArray(); // JSONArray array = new JSONArray();
// try { // try {
......
package com.gxmailu.ocrCloudPlatform.service.impl; package com.gxmailu.ocrCloudPlatform.service.impl;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gxmailu.ocrCloudPlatform.constant.RedisConstant;
import com.gxmailu.ocrCloudPlatform.entity.ConfigAbility; import com.gxmailu.ocrCloudPlatform.entity.ConfigAbility;
import com.gxmailu.ocrCloudPlatform.mapper.ConfigAbilityMapper; import com.gxmailu.ocrCloudPlatform.mapper.ConfigAbilityMapper;
import com.gxmailu.ocrCloudPlatform.service.ConfigAbilityService; import com.gxmailu.ocrCloudPlatform.service.ConfigAbilityService;
...@@ -8,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -8,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
@Service @Service
public class ConfigAbilityServiceImpl implements ConfigAbilityService { public class ConfigAbilityServiceImpl implements ConfigAbilityService {
...@@ -15,6 +19,9 @@ public class ConfigAbilityServiceImpl implements ConfigAbilityService { ...@@ -15,6 +19,9 @@ public class ConfigAbilityServiceImpl implements ConfigAbilityService {
@Autowired @Autowired
private ConfigAbilityMapper configAbilityMapper; private ConfigAbilityMapper configAbilityMapper;
@Autowired
private RedisService redisService;
@Override @Override
public List<ConfigAbility> selectConfigAbilityByAppId(String appId) { public List<ConfigAbility> selectConfigAbilityByAppId(String appId) {
return this.configAbilityMapper.selectConfigAbilityByAppId(appId); return this.configAbilityMapper.selectConfigAbilityByAppId(appId);
...@@ -22,6 +29,13 @@ public class ConfigAbilityServiceImpl implements ConfigAbilityService { ...@@ -22,6 +29,13 @@ public class ConfigAbilityServiceImpl implements ConfigAbilityService {
@Override @Override
public List<ConfigAbility> selectAll() { public List<ConfigAbility> selectAll() {
return configAbilityMapper.selectList(Wrappers.lambdaQuery(ConfigAbility.class).isNotNull(ConfigAbility::getParentId)); Object obj = redisService.getValue(RedisConstant.CONFIG_ABILITY_ALL);
if (ObjUtil.isNotNull(obj)) {
return JSONUtil.toList(obj.toString(), ConfigAbility.class);
} else {
List<ConfigAbility> list = configAbilityMapper.selectList(Wrappers.lambdaQuery(ConfigAbility.class));
redisService.set(RedisConstant.CONFIG_ABILITY_ALL, list, 1, TimeUnit.DAYS);
return list;
}
} }
} }
package com.gxmailu.ocrCloudPlatform.service.impl; package com.gxmailu.ocrCloudPlatform.service.impl;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxmailu.ocrCloudPlatform.constant.RedisConstant;
import com.gxmailu.ocrCloudPlatform.entity.ConfigAppAbility; import com.gxmailu.ocrCloudPlatform.entity.ConfigAppAbility;
import com.gxmailu.ocrCloudPlatform.entity.ConfigApplication; import com.gxmailu.ocrCloudPlatform.entity.ConfigApplication;
import com.gxmailu.ocrCloudPlatform.mapper.ConfigAppAbilityMapper; import com.gxmailu.ocrCloudPlatform.mapper.ConfigAppAbilityMapper;
...@@ -21,6 +24,7 @@ import org.thymeleaf.util.ListUtils; ...@@ -21,6 +24,7 @@ import org.thymeleaf.util.ListUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
...@@ -33,6 +37,9 @@ public class ConfigApplicationServiceImpl implements ConfigApplicationService { ...@@ -33,6 +37,9 @@ public class ConfigApplicationServiceImpl implements ConfigApplicationService {
@Autowired @Autowired
private ConfigAppAbilityMapper configAppAbilityMapper; private ConfigAppAbilityMapper configAppAbilityMapper;
@Autowired
RedisService redisService;
@Override @Override
public Result queryConfigAppById(String id) { public Result queryConfigAppById(String id) {
try { try {
...@@ -68,6 +75,8 @@ public class ConfigApplicationServiceImpl implements ConfigApplicationService { ...@@ -68,6 +75,8 @@ public class ConfigApplicationServiceImpl implements ConfigApplicationService {
try { try {
int result = this.configApplicationMapper.updateById(info); int result = this.configApplicationMapper.updateById(info);
if (result > 0) { if (result > 0) {
redisService.remove(RedisConstant.CONFIG_APPLICATION_ALL);
//直接删掉旧的重新新增 //直接删掉旧的重新新增
//先删除 //先删除
this.configAppAbilityMapper.delete(new QueryWrapper<ConfigAppAbility>().eq("application_id", configAppVo.getId())); this.configAppAbilityMapper.delete(new QueryWrapper<ConfigAppAbility>().eq("application_id", configAppVo.getId()));
...@@ -148,6 +157,7 @@ public class ConfigApplicationServiceImpl implements ConfigApplicationService { ...@@ -148,6 +157,7 @@ public class ConfigApplicationServiceImpl implements ConfigApplicationService {
try { try {
result = this.configApplicationMapper.insert(info); result = this.configApplicationMapper.insert(info);
if (result >= 1) { if (result >= 1) {
redisService.remove(RedisConstant.CONFIG_APPLICATION_ALL);
//保存应用功能关联 //保存应用功能关联
this.batchSaveConfigAppAbility(configAppVo, info.getId()); this.batchSaveConfigAppAbility(configAppVo, info.getId());
} }
...@@ -158,4 +168,21 @@ public class ConfigApplicationServiceImpl implements ConfigApplicationService { ...@@ -158,4 +168,21 @@ public class ConfigApplicationServiceImpl implements ConfigApplicationService {
return result >= 1 ? Result.success("新增成功") : Result.error("新增失败"); return result >= 1 ? Result.success("新增成功") : Result.error("新增失败");
} }
@Override
public List<ConfigApplication> getConfigApplicationAll() {
try {
Object value = redisService.getValue(RedisConstant.CONFIG_APPLICATION_ALL);
if (ObjUtil.isNotNull(value)) {
return JSONUtil.toList(value.toString(), ConfigApplication.class);
} else {
List<ConfigApplication> list = this.configApplicationMapper.selectList(null);
redisService.set(RedisConstant.CONFIG_APPLICATION_ALL, list, 1, TimeUnit.DAYS);
return list;
}
} catch (Exception e) {
log.error("查询应用信息发生异常!", e);
return new ArrayList<>();
}
}
} }
...@@ -3,6 +3,7 @@ package com.gxmailu.ocrCloudPlatform.service.impl; ...@@ -3,6 +3,7 @@ package com.gxmailu.ocrCloudPlatform.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxmailu.ocrCloudPlatform.constant.RedisConstant;
import com.gxmailu.ocrCloudPlatform.entity.Court; import com.gxmailu.ocrCloudPlatform.entity.Court;
import com.gxmailu.ocrCloudPlatform.mapper.CourtMapper; import com.gxmailu.ocrCloudPlatform.mapper.CourtMapper;
import com.gxmailu.ocrCloudPlatform.service.CourtService; import com.gxmailu.ocrCloudPlatform.service.CourtService;
...@@ -22,7 +23,8 @@ public class CourtServiceImpl implements CourtService { ...@@ -22,7 +23,8 @@ public class CourtServiceImpl implements CourtService {
@Autowired @Autowired
private CourtMapper courtMapper; private CourtMapper courtMapper;
@Autowired
private RedisService redisService;
@Override @Override
public Result courtPage(CourtVO courtVO) { public Result courtPage(CourtVO courtVO) {
//设置分页信息 //设置分页信息
...@@ -74,6 +76,8 @@ public class CourtServiceImpl implements CourtService { ...@@ -74,6 +76,8 @@ public class CourtServiceImpl implements CourtService {
try { try {
int result = this.courtMapper.updateById(court); int result = this.courtMapper.updateById(court);
if (result >= 1) { if (result >= 1) {
redisService.removeByPrefix(RedisConstant.COURT_INFO_USER_PREFIX);
redisService.removeByPrefix(RedisConstant.COURT_LIST);
return Result.success("修改成功"); return Result.success("修改成功");
} }
} catch (Exception e) { } catch (Exception e) {
...@@ -91,6 +95,7 @@ public class CourtServiceImpl implements CourtService { ...@@ -91,6 +95,7 @@ public class CourtServiceImpl implements CourtService {
try { try {
int result = this.courtMapper.insert(court); int result = this.courtMapper.insert(court);
if (result >= 1) { if (result >= 1) {
redisService.removeByPrefix(RedisConstant.COURT_INFO_USER_PREFIX);
return Result.success("新增成功"); return Result.success("新增成功");
} }
} catch (Exception e) { } catch (Exception e) {
......
...@@ -5,10 +5,13 @@ import cn.hutool.core.collection.CollUtil; ...@@ -5,10 +5,13 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray; import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.FieldValue;
import co.elastic.clients.elasticsearch._types.SortOrder;
import co.elastic.clients.elasticsearch._types.aggregations.*; import co.elastic.clients.elasticsearch._types.aggregations.*;
import co.elastic.clients.elasticsearch.core.*; import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem; import co.elastic.clients.elasticsearch.core.bulk.BulkResponseItem;
...@@ -16,10 +19,15 @@ import co.elastic.clients.elasticsearch.core.search.TotalHits; ...@@ -16,10 +19,15 @@ import co.elastic.clients.elasticsearch.core.search.TotalHits;
import co.elastic.clients.elasticsearch.indices.DeleteIndexResponse; import co.elastic.clients.elasticsearch.indices.DeleteIndexResponse;
import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonData;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.gxmailu.ocrCloudPlatform.dto.RecordDto;
import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecord; import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecord;
import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecordAll; import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecordAll;
import com.gxmailu.ocrCloudPlatform.entity.Court; import com.gxmailu.ocrCloudPlatform.entity.Court;
import com.gxmailu.ocrCloudPlatform.mapper.*; import com.gxmailu.ocrCloudPlatform.entity.ServerInfo;
import com.gxmailu.ocrCloudPlatform.mapper.AppAbilityRecordAllMapper;
import com.gxmailu.ocrCloudPlatform.mapper.ServerInfoMapper;
import com.gxmailu.ocrCloudPlatform.vo.BrokenLineData; import com.gxmailu.ocrCloudPlatform.vo.BrokenLineData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -27,6 +35,7 @@ import org.springframework.stereotype.Service; ...@@ -27,6 +35,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Field;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -50,13 +59,7 @@ public class ElasticSearchService { ...@@ -50,13 +59,7 @@ public class ElasticSearchService {
@Resource @Resource
private AppAbilityRecordAllMapper recordAllMapper; private AppAbilityRecordAllMapper recordAllMapper;
@Resource @Resource
private AppAbilityRecord4Mapper record4Mapper; private ServerInfoMapper serverInfoMapper;
@Resource
private AppAbilityRecord3Mapper record3Mapper;
@Resource
private AppAbilityRecord5Mapper record5Mapper;
@Resource
private AppAbilityRecord7Mapper record7Mapper;
static { static {
SPECIAL_CHARACTERS_MAP.put('[', "\\["); SPECIAL_CHARACTERS_MAP.put('[', "\\[");
...@@ -292,4 +295,122 @@ public class ElasticSearchService { ...@@ -292,4 +295,122 @@ public class ElasticSearchService {
lastIndexTime = DateUtil.formatDateTime(new Date()); lastIndexTime = DateUtil.formatDateTime(new Date());
log.info("app_ability_record索引最后更新时间:{}", lastIndexTime); log.info("app_ability_record索引最后更新时间:{}", lastIndexTime);
} }
public Page<AppAbilityRecord> getRecordList(RecordDto recordDto) throws IOException {
Integer network = recordDto.getNetwork(); // 内网或内网,-1:全部,0:内网,1:外网
// 查询内外网机器的ip
List<ServerInfo> list = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class)
.eq(network != null && network != -1, ServerInfo::getNetwork, network));
List<String> serverIpList = list.stream().map(ServerInfo::getIp).collect(Collectors.toList());
// 限制查询数不超过10000,若超过随机查询一页
recordDto.setLimit(ObjUtil.isNull(recordDto.getLimit()) ? 10 : recordDto.getLimit());
int offset = (recordDto.getPage() - 1) * recordDto.getLimit() + recordDto.getLimit() > 10000 ? RandomUtil.randomInt(8000, 9000) : (recordDto.getPage() - 1) * recordDto.getLimit();
int size = recordDto.getLimit();
SearchResponse<AppAbilityRecord> searchResponse = client.search(srBuilder -> srBuilder
.index(APP_ABILITY_RECORD_INDEX)
.query(queryBuilder -> queryBuilder.bool(boolQuery -> {
// 时间范围查询
if (ObjUtil.isNotNull(recordDto.getStartTime()) && ObjUtil.isNotNull(recordDto.getEndTime())) {
String startTime = DateUtil.beginOfDay(recordDto.getStartTime()).toString("yyyy-MM-dd HH:mm:ss");
String endTime = DateUtil.endOfDay(recordDto.getEndTime()).toString("yyyy-MM-dd HH:mm:ss");
boolQuery.must(q -> q.range(rangeQueryBuilder -> rangeQueryBuilder
.field("callTime")
.gte(JsonData.of(startTime))
.lt(JsonData.of(endTime))));
}
if (CollUtil.isNotEmpty(serverIpList)) {
List<FieldValue> collect = serverIpList.stream().map(FieldValue::of).collect(Collectors.toList());
boolQuery.filter(mustQuery -> mustQuery.terms(tq -> tq.field("serverIp").terms(tqf -> tqf.value(collect))));
}
// // 多个法院ip前缀过滤
// if (CollUtil.isNotEmpty(recordDto.getIpScopeList())) {
// for (String ipScope : recordDto.getIpScopeList()) {
// if (StrUtil.isNotBlank(ipScope)) {
// boolQuery.filter(q -> q.prefix(pq -> pq.field("ip.keyword").value(ipScope)));
// }
// }
// }
boolQuery.must(mustQuery -> mustQuery.bool(bq -> {
// 多个法院ip过滤
// if (CollUtil.isNotEmpty(serverIpList)) {
// List<FieldValue> collect = serverIpList.stream().map(FieldValue::of).collect(Collectors.toList());
// bq.should(mq -> mq.terms(tq -> tq.field("serverIp").terms(tqf -> tqf.value(collect))));
// }
// 多个ip前缀过滤
if (CollUtil.isNotEmpty(recordDto.getIpScopeList())) {
for (String ipScope : recordDto.getIpScopeList()) {
if (StrUtil.isNotBlank(ipScope)) {
bq.should(q -> q.prefix(pq -> pq.field("ip.keyword").value(ipScope)));
}
}
}
return bq;
}));
if (ObjUtil.isNotNull(recordDto.getApplicationId())) {
boolQuery.must(mustQuery -> mustQuery.match(mq -> mq.field("applicationId").query(recordDto.getApplicationId().toString())));
}
return boolQuery;
}))
.from(offset)
.size(size)
.sort(s -> s.field(fs -> fs.field("callTime.keyword").order(SortOrder.Desc)))
.trackTotalHits(tb -> tb.enabled(true)), AppAbilityRecord.class);
return handlePageResultWithHighlight(searchResponse, AppAbilityRecord.class, recordDto);
}
/**
* 构建分页对象,包括高亮处理
*
* @param response es响应结果
* @param targetType 目标对象类型
*/
private <T> Page<T> handlePageResultWithHighlight(SearchResponse<?> response, Class<T> targetType, RecordDto dto) {
ObjectMapper objectMapper = new ObjectMapper();
TotalHits totalHits = response.hits().total();
long total = ObjUtil.isNull(totalHits) ? 0 : totalHits.value();
// 这是索引库中的总数
// total = total != 10000 ? total : client.count(req -> req.index(indexName)).count();
List<T> list = response.hits().hits().stream().map(hit -> {
// 对象转换
T obj = objectMapper.convertValue(hit.source(), targetType);
// 处理高亮
Map<String, List<String>> highlightFields = hit.highlight();
for (Map.Entry<String, List<String>> entry : highlightFields.entrySet()) {
String fieldName = entry.getKey();
List<String> highlightValues = entry.getValue();
if (highlightValues != null && !highlightValues.isEmpty()) {
// 使用反射或其他适当的方式将高亮文本赋值到对象的相应字段上
try {
Field field = targetType.getDeclaredField(fieldName);
field.setAccessible(true);
// 如果有多个高亮值,可以将它们连接成一个字符串,然后赋值
String highlightedText = String.join("", highlightValues);
// 重新赋值
field.set(obj, highlightedText);
} catch (NoSuchFieldException | IllegalAccessException e) {
log.error("构建分页对象出错:" + e);
}
}
}
return obj;
}).collect(Collectors.toList());
Page<T> page = new Page<>();
page.setTotal(total);
page.setRecords(list);
page.setSize(dto.getLimit());
page.setCurrent(dto.getPage());
return page;
// return PageVo.ofReqVo(vo, list, (int) total);
}
} }
package com.gxmailu.ocrCloudPlatform.service.impl; package com.gxmailu.ocrCloudPlatform.service.impl;
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
...@@ -172,6 +173,17 @@ public class RedisService { ...@@ -172,6 +173,17 @@ public class RedisService {
} }
} }
/**
* 根据前缀删除Redis中的键
* @param keyPrefix 键的前缀
*/
public void removeByPrefix(String keyPrefix) {
Set<Object> keys = redisTemplate.keys(keyPrefix + "*");
if (CollUtil.isNotEmpty(keys)) {
redisTemplate.delete(keys);
}
}
public boolean exists(String key) { public boolean exists(String key) {
return Boolean.TRUE.equals(redisTemplate.hasKey(key)); return Boolean.TRUE.equals(redisTemplate.hasKey(key));
} }
......
...@@ -16,6 +16,7 @@ import com.alibaba.fastjson.JSONArray; ...@@ -16,6 +16,7 @@ import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gxmailu.ocrCloudPlatform.config.DistributedRedisLock; import com.gxmailu.ocrCloudPlatform.config.DistributedRedisLock;
import com.gxmailu.ocrCloudPlatform.constant.RedisConstant;
import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecord; import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecord;
import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecordAll; import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecordAll;
import com.gxmailu.ocrCloudPlatform.entity.ServerInfo; import com.gxmailu.ocrCloudPlatform.entity.ServerInfo;
...@@ -99,11 +100,7 @@ public class RetransmissionService { ...@@ -99,11 +100,7 @@ public class RetransmissionService {
private final Random random = new Random(); private final Random random = new Random();
private final AtomicInteger counter = new AtomicInteger(0); private final AtomicInteger counter = new AtomicInteger(0);
/**
* redis key 请求任务量
**/
private static final String SERVER_REQUEST_TASK = "server-request-task-";
private static final String LOCK_NAME = "server-task";
/** /**
* 重试次数 * 重试次数
*/ */
...@@ -239,11 +236,22 @@ public class RetransmissionService { ...@@ -239,11 +236,22 @@ public class RetransmissionService {
} }
public Map<String, String> getHeaderMap(HttpServletRequest request) { public Map<String, String> getHeaderMap(HttpServletRequest request) {
Map<String, String> headerMap = new HashMap<>(); // Map<String, String> headerMap = new HashMap<>();
headerMap.put("Authorization", request.getHeader("Authorization")); // headerMap.put("Authorization", request.getHeader("Authorization"));
headerMap.put("X-Timestamp", request.getHeader("X-Timestamp")); // headerMap.put("X-Timestamp", request.getHeader("X-Timestamp"));
headerMap.put("X-Checksum", request.getHeader("X-Checksum")); // headerMap.put("X-Checksum", request.getHeader("X-Checksum"));
return headerMap; // headerMap.put("Accept", request.getHeader("Accept"));
// headerMap.put("User-Agent", request.getHeader("User-Agent"));
// return headerMap;
Map<String, String> map = new HashMap<>();
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = headerNames.nextElement();
String value = request.getHeader(key);
map.put(key, value);
}
return map;
} }
...@@ -888,17 +896,17 @@ public class RetransmissionService { ...@@ -888,17 +896,17 @@ public class RetransmissionService {
@Async("dataPersistThreadPoolTaskExecutor") @Async("dataPersistThreadPoolTaskExecutor")
public void addServerRequestCount(String ip, long delta) { public void addServerRequestCount(String ip, long delta) {
// 获取公平锁 // 获取公平锁
distributedRedisLock.getFairLock(LOCK_NAME); distributedRedisLock.getFairLock(RedisConstant.LOCK_NAME);
try { try {
Long incr = redisService.incr(SERVER_REQUEST_TASK + ip, delta); Long incr = redisService.incr(RedisConstant.SERVER_REQUEST_TASK + ip, delta);
if (incr < 0) { if (incr < 0) {
redisService.set(SERVER_REQUEST_TASK + ip, 0L, 30, TimeUnit.SECONDS); redisService.set(RedisConstant.SERVER_REQUEST_TASK + ip, 0L, 30, TimeUnit.SECONDS);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("缓存服务器请求量任务失败", e); log.error("缓存服务器请求量任务失败", e);
} finally { } finally {
// 释放锁 // 释放锁
distributedRedisLock.unlock(LOCK_NAME); distributedRedisLock.unlock(RedisConstant.LOCK_NAME);
} }
} }
...@@ -914,7 +922,7 @@ public class RetransmissionService { ...@@ -914,7 +922,7 @@ public class RetransmissionService {
if (ocrServerList == null) { if (ocrServerList == null) {
ocrServerList = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class) ocrServerList = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class)
.eq(ServerInfo::getAccessService, true)); .eq(ServerInfo::getAccessService, true));
redisService.set("ocrServerList", ocrServerList); redisService.set(RedisConstant.OCR_SERVER_LIST, ocrServerList);
} }
List<ServerInfo> notActiveServerList = new ArrayList<>(); List<ServerInfo> notActiveServerList = new ArrayList<>();
for (ServerInfo serverInfo : ocrServerList) { for (ServerInfo serverInfo : ocrServerList) {
...@@ -948,7 +956,7 @@ public class RetransmissionService { ...@@ -948,7 +956,7 @@ public class RetransmissionService {
ocrServerList = serverInfoService.getCacheList(); ocrServerList = serverInfoService.getCacheList();
if (CollUtil.isEmpty(ocrServerList)) { if (CollUtil.isEmpty(ocrServerList)) {
ocrServerList = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class).eq(ServerInfo::getAccessService, true)); ocrServerList = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class).eq(ServerInfo::getAccessService, true));
redisService.set("ocrServerList", ocrServerList, 60, TimeUnit.MINUTES); redisService.set(RedisConstant.OCR_SERVER_LIST, ocrServerList, 60, TimeUnit.MINUTES);
} }
} }
} }
...@@ -956,7 +964,7 @@ public class RetransmissionService { ...@@ -956,7 +964,7 @@ public class RetransmissionService {
// 获取空闲的服务器列表 // 获取空闲的服务器列表
List<ServerInfo> notActiveServerList = ocrServerList.stream() List<ServerInfo> notActiveServerList = ocrServerList.stream()
.filter(serverInfo -> { .filter(serverInfo -> {
Object obj = redisService.get(SERVER_REQUEST_TASK + serverInfo.getIp()); Object obj = redisService.get(RedisConstant.SERVER_REQUEST_TASK + serverInfo.getIp());
if (ObjUtil.isNotNull(obj) && obj instanceof Number) { if (ObjUtil.isNotNull(obj) && obj instanceof Number) {
return ((Number) obj).longValue() <= 0; return ((Number) obj).longValue() <= 0;
} }
...@@ -971,7 +979,7 @@ public class RetransmissionService { ...@@ -971,7 +979,7 @@ public class RetransmissionService {
} else { } else {
// 如果没有空闲的服务器,则从redis中根据服务器请求量选择一个请求量最少的服务器 // 如果没有空闲的服务器,则从redis中根据服务器请求量选择一个请求量最少的服务器
serverInfo = ocrServerList.stream().min(Comparator.comparingLong(server -> { serverInfo = ocrServerList.stream().min(Comparator.comparingLong(server -> {
Number value = (Number) redisService.getValue(SERVER_REQUEST_TASK + server.getIp()); Number value = (Number) redisService.getValue(RedisConstant.SERVER_REQUEST_TASK + server.getIp());
return (ObjUtil.isNotNull(value) ? value.longValue() : 0L); return (ObjUtil.isNotNull(value) ? value.longValue() : 0L);
})).orElse(null); })).orElse(null);
} }
......
...@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.AES; import com.baomidou.mybatisplus.core.toolkit.AES;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxmailu.ocrCloudPlatform.constant.RedisConstant;
import com.gxmailu.ocrCloudPlatform.entity.ServerInfo; import com.gxmailu.ocrCloudPlatform.entity.ServerInfo;
import com.gxmailu.ocrCloudPlatform.mapper.ServerInfoMapper; import com.gxmailu.ocrCloudPlatform.mapper.ServerInfoMapper;
import com.gxmailu.ocrCloudPlatform.service.ServerInfoService; import com.gxmailu.ocrCloudPlatform.service.ServerInfoService;
...@@ -134,7 +135,7 @@ public class ServerInfoServiceImpl implements ServerInfoService { ...@@ -134,7 +135,7 @@ public class ServerInfoServiceImpl implements ServerInfoService {
if (CollUtil.isEmpty(serverInfos)) { if (CollUtil.isEmpty(serverInfos)) {
return Result.error("OCR云平台未配置服务器信息"); return Result.error("OCR云平台未配置服务器信息");
} }
redisService.set("ocrServerList", serverInfos); redisService.set(RedisConstant.OCR_SERVER_LIST, serverInfos);
return Result.success("刷新缓存成功"); return Result.success("刷新缓存成功");
} catch (Exception e) { } catch (Exception e) {
log.error("刷新缓存失败", e); log.error("刷新缓存失败", e);
...@@ -145,11 +146,11 @@ public class ServerInfoServiceImpl implements ServerInfoService { ...@@ -145,11 +146,11 @@ public class ServerInfoServiceImpl implements ServerInfoService {
@Override @Override
public List<ServerInfo> getCacheList() { public List<ServerInfo> getCacheList() {
// return serverInfoMapper.selectList(new ServerInfo(true)); // return serverInfoMapper.selectList(new ServerInfo(true));
Object object = redisService.getValue("ocrServerList"); Object object = redisService.getValue(RedisConstant.OCR_SERVER_LIST);
if (object == null) { if (object == null) {
List<ServerInfo> serverInfos = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class) List<ServerInfo> serverInfos = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class)
.eq(ServerInfo::getAccessService,true)); .eq(ServerInfo::getAccessService,true));
redisService.set("ocrServerList", serverInfos); redisService.set(RedisConstant.OCR_SERVER_LIST, serverInfos);
return serverInfos; return serverInfos;
} else { } else {
return JSONArray.parseArray(object.toString(), ServerInfo.class); return JSONArray.parseArray(object.toString(), ServerInfo.class);
...@@ -282,7 +283,7 @@ public class ServerInfoServiceImpl implements ServerInfoService { ...@@ -282,7 +283,7 @@ public class ServerInfoServiceImpl implements ServerInfoService {
//修改成功后,查询整个列表并设置进redis //修改成功后,查询整个列表并设置进redis
List<ServerInfo> serverList = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class) List<ServerInfo> serverList = serverInfoMapper.selectList(Wrappers.lambdaQuery(ServerInfo.class)
.eq(ServerInfo::getAccessService, true)); .eq(ServerInfo::getAccessService, true));
redisService.set("ocrServerList", serverList); redisService.set(RedisConstant.OCR_SERVER_LIST, serverList);
} }
}); });
newThread.start(); newThread.start();
......
package com.gxmailu.ocrCloudPlatform.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* @author Hmb
* @since 2024/1/16 9:46
*/
@Data
public class AppAbilityRecordVo {
private String id;
/**
* 法院名称
*/
private String courtName;
/**
* 业务厂家
*/
private String businessVendors;
private String appAbilityName;
private String ip;
/**
* 文件页数
*/
private Integer fileCount;
/**
* 调用次数
*/
private String callCount;
/**
* 调用时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date callTime;
/**
* 调用服务器ip
*/
private String serverIp;
}
...@@ -71,3 +71,7 @@ elasticsearch: ...@@ -71,3 +71,7 @@ elasticsearch:
http: http http: http
username: elastic username: elastic
password: RQuT4eQIdIZ57waX9f87 password: RQuT4eQIdIZ57waX9f87
#
#eureka:
# client:
# enabled: false
\ No newline at end of file
...@@ -37,8 +37,8 @@ eureka: ...@@ -37,8 +37,8 @@ eureka:
instance: instance:
prefer-ip-address: true prefer-ip-address: true
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
lease-expiration-duration-in-seconds: 30 lease-expiration-duration-in-seconds: 6
lease-renewal-interval-in-seconds: 10 lease-renewal-interval-in-seconds: 2
logging: logging:
level: level:
......
...@@ -14,6 +14,10 @@ import co.elastic.clients.elasticsearch.core.SearchResponse; ...@@ -14,6 +14,10 @@ import co.elastic.clients.elasticsearch.core.SearchResponse;
import co.elastic.clients.elasticsearch.core.search.TotalHits; import co.elastic.clients.elasticsearch.core.search.TotalHits;
import co.elastic.clients.json.JsonData; import co.elastic.clients.json.JsonData;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gxmailu.ocrCloudPlatform.constant.RedisConstant;
import com.gxmailu.ocrCloudPlatform.dto.RecordDto;
import com.gxmailu.ocrCloudPlatform.entity.AppAbilityRecord;
import com.gxmailu.ocrCloudPlatform.entity.Court; import com.gxmailu.ocrCloudPlatform.entity.Court;
import com.gxmailu.ocrCloudPlatform.mapper.AppAbilityRecordAllMapper; import com.gxmailu.ocrCloudPlatform.mapper.AppAbilityRecordAllMapper;
import com.gxmailu.ocrCloudPlatform.mapper.CourtMapper; import com.gxmailu.ocrCloudPlatform.mapper.CourtMapper;
...@@ -21,7 +25,6 @@ import com.gxmailu.ocrCloudPlatform.service.AppAbilityRecordAllService; ...@@ -21,7 +25,6 @@ import com.gxmailu.ocrCloudPlatform.service.AppAbilityRecordAllService;
import com.gxmailu.ocrCloudPlatform.service.impl.ElasticSearchService; import com.gxmailu.ocrCloudPlatform.service.impl.ElasticSearchService;
import com.gxmailu.ocrCloudPlatform.service.impl.RedisService; import com.gxmailu.ocrCloudPlatform.service.impl.RedisService;
import com.gxmailu.ocrCloudPlatform.vo.BrokenLineData; import com.gxmailu.ocrCloudPlatform.vo.BrokenLineData;
import com.gxmailu.ocrCloudPlatform.vo.Result;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -93,7 +96,7 @@ public class ESTest { ...@@ -93,7 +96,7 @@ public class ESTest {
@Test @Test
public void getCourtUseSum() throws IOException { public void getCourtUseSum() throws IOException {
List<Court> courtList; List<Court> courtList;
Object data = redisService.getValue("courtList"); Object data = redisService.getValue(RedisConstant.COURT_LIST);
if (data != null) { if (data != null) {
JSONArray array = JSONUtil.parseArray(data); JSONArray array = JSONUtil.parseArray(data);
courtList = new ArrayList<>(); courtList = new ArrayList<>();
...@@ -102,7 +105,7 @@ public class ESTest { ...@@ -102,7 +105,7 @@ public class ESTest {
} }
} else { } else {
courtList = courtMapper.selectList(new LambdaQueryWrapper<Court>().isNotNull(Court::getIpScope)); courtList = courtMapper.selectList(new LambdaQueryWrapper<Court>().isNotNull(Court::getIpScope));
redisService.set("courtList", courtList, 5L, TimeUnit.MINUTES); redisService.set(RedisConstant.COURT_LIST, courtList, 1L, TimeUnit.DAYS);
} }
JSONArray array = new JSONArray(); JSONArray array = new JSONArray();
SearchResponse<Void> searchResponse = client.search(srBuilder -> srBuilder.index(APP_ABILITY_RECORD_INDEX).query(queryBuilder -> queryBuilder.bool(boolQuery -> { SearchResponse<Void> searchResponse = client.search(srBuilder -> srBuilder.index(APP_ABILITY_RECORD_INDEX).query(queryBuilder -> queryBuilder.bool(boolQuery -> {
...@@ -147,10 +150,20 @@ public class ESTest { ...@@ -147,10 +150,20 @@ public class ESTest {
} }
@Test @Test
public void afds() { public void afds() throws IOException {
Result brokenLineData = appAbilityRecordAllService.getCorrelationData("2023-12-10", "2023-12-09"); RecordDto recordDto = new RecordDto();
Result brokenLineData1 = appAbilityRecordAllService.getBrokenLineData("2023-12-10"); recordDto.setPage(1);
System.out.println(brokenLineData); recordDto.setLimit(10);
// recordDto.setIpScopeList(Arrays.asList("147.4."));
// recordDto.setApplicationId(5L);
// recordDto.setStartTime(DateUtil.parseDate("2023-05-11"));
// recordDto.setEndTime(DateUtil.parseDate("2023-05-11"));
Page<AppAbilityRecord> recordList = elasticSearchService.getRecordList(recordDto);
recordList.getRecords().forEach(System.out::println);
// Object recordList1 = appAbilityRecordAllService.getRecordList(recordDto);
// System.out.println(recordList1);
} }
......
package com.gxmailu.ocrCloudPlatform; package com.gxmailu.ocrCloudPlatform;
import com.gxmailu.ocrCloudPlatform.constant.RedisConstant;
import com.gxmailu.ocrCloudPlatform.entity.ConfigAbility; import com.gxmailu.ocrCloudPlatform.entity.ConfigAbility;
import com.gxmailu.ocrCloudPlatform.entity.ServerInfo; import com.gxmailu.ocrCloudPlatform.entity.ServerInfo;
import com.gxmailu.ocrCloudPlatform.mapper.ServerInfoMapper; import com.gxmailu.ocrCloudPlatform.mapper.ServerInfoMapper;
...@@ -71,7 +72,7 @@ class RetransmissionServiceTest { ...@@ -71,7 +72,7 @@ class RetransmissionServiceTest {
ocrServerList.add(serverInfo8); ocrServerList.add(serverInfo8);
ocrServerList.add(serverInfo9); ocrServerList.add(serverInfo9);
ocrServerList.add(serverInfo10); ocrServerList.add(serverInfo10);
redisService.set("ocrServerList", ocrServerList, 30, TimeUnit.MINUTES); redisService.set(RedisConstant.OCR_SERVER_LIST, ocrServerList, 30, TimeUnit.MINUTES);
} }
@Test @Test
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment