rev:添加手持功能

This commit is contained in:
zhangzq
2024-07-16 19:47:35 +08:00
parent 1817b9b693
commit f4398bcd77
17 changed files with 728 additions and 9 deletions

View File

@@ -0,0 +1,140 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.nl.common.domain.aspect;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import io.netty.util.internal.ThrowableUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.nl.common.utils.*;
import org.nl.config.lucene.LuceneAppender;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Zheng Jie
* @date 2018-11-24
*/
@Component
@Aspect
@Slf4j
public class LogAspect {
/**
* 配置环绕通知,使用在方法logPointcut()上注册的切入点
*
* @param joinPoint join point for advice
*/
@Around("@annotation(logInfo)")
public Object logAround(ProceedingJoinPoint joinPoint,org.nl.common.anno.Log logInfo) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
String params = getParameter(method, joinPoint.getArgs());
HttpServletRequest request = RequestHolder.getHttpServletRequest();
String url = request.getRequestURI();
String requestIp = IPUtil.getIp(request);
MDC.put("requestMethod",url);
MDC.put("requestIp", requestIp);
MDC.put("requestTime", DateUtil.now());
LuceneAppender.traceIdTL.set(BaseCode.intToChars(IdUtil.getLongId()));
Object result = null;
long comming = System.currentTimeMillis();
try {
log.info("[--request--][请求接口:{}][请求参数:{}]",url,params);
result = joinPoint.proceed();
// //是否把日志存到日志表
// if (logInfo.isAddLogTable()) {
// Log log = new Log("INFO", System.currentTimeMillis() - comming);
// logService.save(getUsername(), StringUtils.getBrowser(request), requestIp, joinPoint, log);
// }
}catch (Exception ex){
StringBuffer errorStack = new StringBuffer();
errorStack.append("<br/>【异常堆栈:");
String errorMsg = ex.getMessage();
int x = 0;
StackTraceElement[] stackTrace = ex.getStackTrace();
if (stackTrace!=null && stackTrace.length>0){
for (StackTraceElement stack : stackTrace) {
x++;errorStack.append(stack.toString().replaceAll("<",">")).append("<br/>");
if (x>10){ break; }
}
}
log.error("[-requestError-][请求接口:{}]【异常信息:{}】[请求参数:{}] {}", url,errorMsg,params, errorStack.append("").toString());
throw ex;
}finally {
log.info("[--response--][请求接口:{} 执行结束][耗时:{}s]",url,(System.currentTimeMillis() - comming)/1000);
MDC.clear();
LuceneAppender.traceIdTL.remove();
}
return result;
}
/**
* 根据方法和传入的参数获取请求参数
*/
private String getParameter(Method method, Object[] args) {
List<Object> argList = new ArrayList<>();
Parameter[] parameters = method.getParameters();
for (int i = 0; i < parameters.length; i++) {
//将RequestBody注解修饰的参数作为请求参数
RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class);
if (requestBody != null) {
argList.add(args[i]);
}
//将RequestParam注解修饰的参数作为请求参数
RequestParam requestParam = parameters[i].getAnnotation(RequestParam.class);
if (requestParam != null) {
Map<String, Object> map = new HashMap<>();
String key = parameters[i].getName();
if (!StrUtil.isEmpty(requestParam.value())) {
key = requestParam.value();
}
map.put(key, args[i]);
argList.add(map);
}
}
if (argList.size() == 0) {
return "";
}
return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList);
}
public String getUsername() {
try {
return SecurityUtils.getCurrentUsername();
} catch (Exception e) {
return "";
}
}
}

View File

@@ -0,0 +1,34 @@
/*
* Copyright 2019-2020 Zheng Jie
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.nl.common.utils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Objects;
/**
* 获取 HttpServletRequest
* @author Zheng Jie
* @date 2018-11-24
*/
public class RequestHolder {
public static HttpServletRequest getHttpServletRequest() {
return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
}
}

View File

@@ -47,7 +47,7 @@ public class HeartClientServer extends AbstraceServer {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline()
.addLast("client-idle-handler", new IdleStateHandler(0, 5,0 , TimeUnit.SECONDS))
.addLast("client-idle-handler", new IdleStateHandler(8, 0,0 , TimeUnit.SECONDS))
.addLast( new StringEncoder())
.addLast( new StringDecoder())
.addLast(new HeartConsumerHandler(body));
@@ -85,6 +85,7 @@ public class HeartClientServer extends AbstraceServer {
channelFuture.channel().eventLoop().schedule(() -> doConnect(),6,TimeUnit.SECONDS);
}
});
connect.channel().closeFuture().sync();
} catch (Exception t){
t.getStackTrace();
this.doDestroy();
@@ -93,6 +94,7 @@ public class HeartClientServer extends AbstraceServer {
public void pingpong() {
new Thread(()->{
while (channel!=null && channel.isActive()){
System.out.println("----ppp-----");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {

View File

@@ -28,8 +28,7 @@ public class HeartConsumerHandler extends SimpleChannelInboundHandler {
System.out.println("断开连接---");
//重新建立
ctx.close();
server.channel.close();
server.channel.flush();
server.doConnect();
}
@Override
@@ -50,10 +49,10 @@ public class HeartConsumerHandler extends SimpleChannelInboundHandler {
if (evt instanceof IdleStateEvent){
IdleStateEvent stateEvent = (IdleStateEvent) evt;
System.out.println(((IdleStateEvent) evt).state().toString());
if (stateEvent.state() == IdleState.WRITER_IDLE) {
if (stateEvent.state() == IdleState.READER_IDLE) {
//如果五秒内写失败,说明服务网络异常
ctx.close();
server.doDisConnect();
server.doConnect();
}
}
}

View File

@@ -15,6 +15,6 @@ import java.nio.charset.StandardCharsets;
*/
public class RunClientHeartMain {
public static void main(String[] args) throws InterruptedException {
HeartClientServer heartServer = new HeartClientServer(new InetSocketAddress("192.168.10.48", 20889));
HeartClientServer heartServer = new HeartClientServer(new InetSocketAddress("192.168.10.60", 20889));
}
}

View File

@@ -15,7 +15,7 @@ import java.nio.charset.StandardCharsets;
*/
public class RunHeartMain {
public static void main(String[] args) throws InterruptedException {
HeartServer heartServer = new HeartServer(new InetSocketAddress("192.168.10.57", 20889));
HeartServer heartServer = new HeartServer(new InetSocketAddress("192.168.10.60", 20889));
// while (true){
// Thread.sleep(5000);
// for (Channel value : HeartServer.Heart_Connection.values()) {

View File

@@ -1,5 +1,6 @@
package org.nl.wms.base_manage.supplier.service.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -22,6 +23,7 @@ public class BmSupplier implements Serializable {
/**
* 供应商标识
*/
@TableId
private Long supp_id;
/**

View File

@@ -1,6 +1,7 @@
package org.nl.wms.early_manage.service.early_deferral.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
@@ -8,7 +9,7 @@ import lombok.EqualsAndHashCode;
/**
* <p>
*
*
* </p>
*
* @author generator
@@ -20,7 +21,7 @@ import lombok.EqualsAndHashCode;
public class AlmEarlyDeferralDetail implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
private String detail_id;
private String deferral_id;

View File

@@ -1,5 +1,6 @@
package org.nl.wms.early_manage.service.early_dtl.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;
@@ -23,6 +24,7 @@ public class AlmEarlyDtl implements Serializable {
/**
* 安全库存方案id
*/
@TableId
private String alm_id;
/**

View File

@@ -0,0 +1,74 @@
package org.nl.wms.pda_manage.devicemanage;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.domain.exception.handler.ApiError;
import org.nl.wms.dispatch_manage.point.service.ISchBasePointService;
import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint;
import org.nl.wms.external_system.acs.service.AcsToWmsService;
import org.nl.wms.external_system.acs.service.WmsToAcsService;
import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.Format;
/**
* <p>
* 出入库单主表 前端控制器
* </p>
*
* @author generator
* @since 2024-03-28
*/
@RestController
@RequestMapping("api/deviceManage")
public class DeviceManageController {
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private ISchBasePointService iSchBasePointService;
@PostMapping("/changeMode/switchInOut")
@SaIgnore
@Log("切换出入库模式")
public ResponseEntity<Object> changeModeIO(@RequestBody JSONObject form) {
wmsToAcsService.changeMode(form.getString("device_code"),"switchInOut",form.getString("mode"));
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/changeMode/pinkStartStop")
@SaIgnore
@Log("切换拣选工位启停模式")
public ResponseEntity<Object> changeModePick(@RequestBody JSONObject form) {
wmsToAcsService.changeMode(form.getString("device_code"),"pinkStartStop",form.getString("mode"));
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/toCommandTP")
@SaIgnore
@Log("下发输送线运动命令")
public ResponseEntity<Object> toCommandTP(@RequestBody JSONObject form) {
String device_code = form.getString("device_code");
SchBasePoint code = iSchBasePointService.getOne(new QueryWrapper<SchBasePoint>().eq("code", device_code));
if (code!=null && !code.getIs_used()){
return new ResponseEntity<>(ApiError.error(String.format("输送线%s模式不正确不允许下发运动",device_code)),HttpStatus.OK);
}
wmsToAcsService.toCommand(device_code,form.getString("cmd"));
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
}

View File

@@ -0,0 +1,49 @@
package org.nl.wms.pda_manage.group;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 出入库单主表 前端控制器
* </p>
*
* @author generator
* @since 2024-03-28
*/
@RestController
@RequestMapping("api/group")
public class GroupController {
@Autowired
private PalletIostorinvService palletIostorinvService;
@PostMapping("in")
@SaIgnore
@Log("手持托盘入库")
public ResponseEntity<Object> inStorage(@RequestBody JSONObject form) {
palletIostorinvService.inStorage(form);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("out")
@SaIgnore
@Log("手持托盘出库")
public ResponseEntity<Object> outStorage(@RequestBody JSONObject form) {
palletIostorinvService.outStorage(form);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -0,0 +1,68 @@
package org.nl.wms.pda_manage.iostorage;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService;
import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 出入库单主表 前端控制器
* </p>
*
* @author generator
* @since 2024-03-28
*/
@RestController
@RequestMapping("api/ioStorage")
public class IOStorageController {
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Autowired
private IActRuExecutionService iActRuExecutionService;
@PostMapping("out")
@SaIgnore
@Log("出库却润")
public ResponseEntity<Object> outStorage(@RequestBody JSONObject form) {
String vehicle_code = form.getString("vehicle_code");
MdPbVehicleMater one = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>()
.eq("vehicle_code", vehicle_code).eq("is_delete", false));
String proc_inst_id = one.getProc_inst_id();
if (!StringUtils.isEmpty(proc_inst_id)){
String parent_id = iActRuExecutionService.getParentByChild(proc_inst_id);
ActRuExecution ruExecution = iActRuExecutionService.getOne(new QueryWrapper<ActRuExecution>()
.eq("proc_inst_id",parent_id)
.lt("status", StatusEnum.FLOW_STATUS.code("完成")));
if (ruExecution!=null){
throw new BadRequestException(String.format("当前载具%s业务流程%s未完成",vehicle_code,parent_id));
}
}
iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
.set("is_delete",true)
.eq("id",one.getId()));
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
}

View File

@@ -0,0 +1,70 @@
package org.nl.wms.system_manage.controller.logserver;
import cn.dev33.satoken.annotation.SaIgnore;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.anno.Log;
import org.nl.wms.system_manage.service.logserver.LogQuery;
import org.nl.wms.system_manage.service.logserver.LuceneLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @author ldjun
* @version 1.0
* @date 2023年01月29日 18:55
* @desc desc
*/
@RestController
@RequestMapping("/api/esLog")
@Slf4j
public class LuceneLogController {
@Autowired
private LuceneLogService luceneLogService;
@GetMapping("/labels/{type}")
//("获取标签")
public ResponseEntity<Object> labelsValues(@PathVariable String type) {
return new ResponseEntity<>(luceneLogService.getLabelsValues(type), HttpStatus.OK);
}
@PostMapping("/query")
//("日志查询")
public ResponseEntity<Object> queryAll(@RequestBody LogQuery query) {
return new ResponseEntity<>(luceneLogService.query(query), HttpStatus.OK);
}
@DeleteMapping("/clearLogs")
//("清空日志")
public ResponseEntity<Object> clearLogs(@RequestBody LogQuery query) {
luceneLogService.clearLogs(query);
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/thread")
@SaIgnore
@Log("线程追踪测试")
//("清空日志")
public ResponseEntity<Object> thread(@RequestBody LogQuery query) {
log.info("线程链路测试"+Thread.currentThread().getName());
log.error("线程链路测试"+Thread.currentThread().getName());
luceneLogService.syncdemo();
Thread thread = new Thread(()->{
try {
Thread.sleep(5000);
log.info("线程链路测试"+Thread.currentThread().getName());
log.error("线程链路测试"+Thread.currentThread().getName());
log.info("线程链路测试"+Thread.currentThread().getName());
}catch (Exception ex){
ex.printStackTrace();
}
});
thread.start();
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -0,0 +1,47 @@
package org.nl.wms.system_manage.service.logserver;
import lombok.Data;
import java.util.Date;
/*
* @author ZZQ
* @Date 2023/2/8 5:18 下午
*/
@Data
public class LogQuery {
/**
* 创建时间范围查询
*/
private Date startTime;
private Date endTime;
/**
* 追踪id
*/
private String traceId;
private String requestMethod;
/**
* 日志内容模糊匹配
*/
private String message;
/**
* 日志级别
*/
private String logLevel;
/**
* 系统标签
*/
private String system;
/**
* 是否只查询Http相关请求
*/
private Boolean isRequest = Boolean.TRUE;
/**
* 是否过滤wql日志
*/
private Boolean filterSql = Boolean.TRUE;
private Integer size = 20;
private Integer page = 1;
}

View File

@@ -0,0 +1,27 @@
package org.nl.wms.system_manage.service.logserver;
import lombok.Data;
import org.springframework.data.annotation.Id;
/*
* @author ZZQ
* @Date 2023/2/8 4:06 下午
*/
//@Document(indexName = "#{@ESConfig.index}", type = "mes_log")
@Data
public class LogRepositoryDTO {
private String message;
private String host;
private String logLevel;
private String logger;
private String requestTime;
private String requestIp;
@Id
private String id;
private String traceId;
private String requestMethod;
private String thread;
private String system;
}

View File

@@ -0,0 +1,32 @@
package org.nl.wms.system_manage.service.logserver;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* @author ldjun
* @version 1.0
* @date 2023年02月07日 14:34
* @desc desc
*/
public interface LuceneLogService {
/**
* 清空日志
*/
void clearLogs(LogQuery query);
/**
* 获取labels和values树
* @return
*/
JSONArray getLabelsValues(String type);
/**
* 日志查询
* @param logQuery
* @return
*/
JSONObject query(LogQuery logQuery);
void syncdemo();
}

View File

@@ -0,0 +1,172 @@
package org.nl.wms.system_manage.service.logserver;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.db.PageResult;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.*;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.BytesRef;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.config.lucene.LuceneAppender;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.wltea.analyzer.lucene.IKAnalyzer;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Service
@Slf4j
public class LuceneLogServiceImpl implements LuceneLogService {
static String[] INFO_LEVEL = new String[]{"DEBUG","INFO","WARN","ERROR"};
@Value("${lucene.index.path}")
private String indexUrl;
@Override
public void clearLogs(LogQuery query) {
try {
IndexWriter indexWriter = LuceneAppender.indexWriter;
if (indexWriter != null){
BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
DateTime offset = DateUtil.offset(new Date(), DateField.HOUR_OF_DAY, -10);
TermRangeQuery termRangeQuery = new TermRangeQuery(
"requestTime",null,
new BytesRef(DateUtil.format(offset, "yyyy-MM-dd HH:mm:ss.SSS")), true, true);
booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST);
indexWriter.deleteDocuments(termRangeQuery);
indexWriter.commit();
}
}catch (Exception ex){
throw new BadRequestException("删除失败:"+ex.getMessage());
}
}
@Override
public JSONArray getLabelsValues(String type) {
JSONArray result = new JSONArray();
for (String v : INFO_LEVEL) {
JSONObject item = new JSONObject();
item.put("label", v);
item.put("value", v);
result.add(item);
}
return result;
}
@Override
public JSONObject query(LogQuery logQuery) {
JSONObject res = new JSONObject();
PageResult page = new PageResult();
page.setPage(logQuery.getPage());
page.setPageSize(logQuery.getSize());
try {
FSDirectory directory = FSDirectory.open(Paths.get(indexUrl));
DirectoryReader open = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(open);
// 创建排序对象,需要排序字段SortField参数字段的名称、字段的类型、是否反转如果是false升序。true降序
BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
//时间范围查询
Date startDate = logQuery.getStartTime();
Date endDate = logQuery.getEndTime();
if (startDate == null){
Calendar calendar=Calendar.getInstance();
calendar.set(1970, 0, 1);
startDate = calendar.getTime(); }
if (endDate == null){ endDate = new DateTime(); }
TermRangeQuery termRangeQuery = new TermRangeQuery(
"requestTime",
new BytesRef(DateUtil.format(startDate, "yyyy-MM-dd HH:mm:ss.SSS")),
new BytesRef(DateUtil.format(endDate, "yyyy-MM-dd HH:mm:ss.SSS")), true, true);
booleanQueryBuilder.add(termRangeQuery,BooleanClause.Occur.MUST);
// 字段之间的与或非关系MUST表示andMUST_NOT表示notSHOULD表示or有几个fields就必须有几个clauses
if (ObjectUtil.isNotEmpty(logQuery.getTraceId())){
TermQuery termQuery = new TermQuery(new Term("traceId", logQuery.getTraceId()));
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
}
if (ObjectUtil.isNotEmpty(logQuery.getLogLevel())){
TermQuery termQuery = new TermQuery(new Term("logLevel", logQuery.getLogLevel()));
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
}
if (ObjectUtil.isNotEmpty(logQuery.getSystem())) {
TermQuery termQuery = new TermQuery(new Term("system", logQuery.getSystem()));
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
}
if (ObjectUtil.isNotEmpty(logQuery.getRequestMethod())) {
TermQuery termQuery = new TermQuery(new Term("requestMethod", logQuery.getRequestMethod()));
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST);
}
if (Boolean.TRUE.equals(logQuery.getIsRequest())) {
Term traceid = new Term("traceId");
TermQuery termQuery = new TermQuery(traceid);
booleanQueryBuilder.add(termQuery, BooleanClause.Occur.MUST_NOT);
}
if (ObjectUtil.isNotEmpty(logQuery.getMessage())){
//查询解析器
QueryParser queryParser = new QueryParser("message", new IKAnalyzer(true));
Query query = queryParser.parse(logQuery.getMessage());
booleanQueryBuilder.add(query, BooleanClause.Occur.MUST);
}
TopFieldCollector collector = TopFieldCollector.create(new Sort(new SortField("time", SortField.Type.LONG,true)), 20000, 0);
searcher.search(booleanQueryBuilder.build(), collector);
TopDocs topDocs = collector.topDocs((logQuery.getPage()-1)*logQuery.getSize(), logQuery.getSize());
int totalSize = collector.getTotalHits();
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
List<LogRepositoryDTO> list = new ArrayList<>();
for (ScoreDoc scoreDoc : scoreDocs) {
Document doc = open.document(scoreDoc.doc);
LogRepositoryDTO dto = new LogRepositoryDTO();
dto.setSystem(doc.get("system"));
dto.setTraceId(doc.get("traceId"));
dto.setLogger(doc.get("logger"));
dto.setLogLevel(doc.get("logLevel"));
dto.setMessage(doc.get("message"));
dto.setRequestIp(doc.get("requestIp"));
dto.setRequestMethod(doc.get("requestMethod"));
dto.setRequestTime(doc.get("requestTime"));
dto.setThread(doc.get("thread"));
list.add(dto);
}
open.close();
directory.close();
page.addAll(list);
page.setTotal(scoreDocs.length);
res.put("total", totalSize);
}catch (Exception ex){
ex.printStackTrace();
}
res.put("page",page);
return res;
}
@Override
@Async
public void syncdemo() {
log.info("Async线程链路测试"+Thread.currentThread().getName());
log.error("Async线程链路测试"+Thread.currentThread().getName());
log.info("Async线程链路测试"+Thread.currentThread().getName());
log.info("线程链路测试"+Thread.currentThread().getName());
}
}