fix: 日志bug修改
This commit is contained in:
@@ -18,6 +18,8 @@ import org.nl.acs.instruction.service.InstructionService;
|
||||
import org.nl.acs.opc.DeviceAppService;
|
||||
import org.nl.acs.task.enums.AgvSystemTypeEnum;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -41,6 +43,9 @@ public class AgvWaitUtil {
|
||||
@Autowired
|
||||
private DeviceAppService deviceAppService;
|
||||
|
||||
@Autowired
|
||||
private LuceneExecuteLogService luceneExecuteLogService;
|
||||
|
||||
//取货前等待
|
||||
public JSONObject waitInGet(String startDeviceCode, Instruction inst) {
|
||||
log.info("仙工AGV请求取货,设备号 - {}", startDeviceCode);
|
||||
@@ -52,7 +57,13 @@ public class AgvWaitUtil {
|
||||
manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) startDevice.getDeviceDriver();
|
||||
manipulatorAgvStationDeviceDriver.writing(2);
|
||||
if(manipulatorAgvStationDeviceDriver.getAction() != 1){
|
||||
throw new BadRequestException("上位系统不允许取货");
|
||||
LuceneLogDto logDto = LuceneLogDto.builder()
|
||||
.device_code(inst.getCarno())
|
||||
.content("agv诺宝对接位行架不允许取货:" + inst.getCarno()+ "点位号"+ manipulatorAgvStationDeviceDriver.getDevice_code())
|
||||
.build();
|
||||
logDto.setLog_level(4);
|
||||
luceneExecuteLogService.deviceExecuteLog(logDto);
|
||||
throw new BadRequestException("行架不允许取货");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -60,6 +71,12 @@ public class AgvWaitUtil {
|
||||
if(startDevice.getDeviceDriver() instanceof BoxSubvolumesConveyorDeviceDriver){
|
||||
boxSubvolumesConveyorDeviceDriver = (BoxSubvolumesConveyorDeviceDriver) startDevice.getDeviceDriver();
|
||||
if(boxSubvolumesConveyorDeviceDriver.getMode() != 2){
|
||||
LuceneLogDto logDto1 = LuceneLogDto.builder()
|
||||
.device_code(inst.getCarno())
|
||||
.content("agv叉车对接位输送线不允许取货:" + inst.getCarno()+ "点位号"+ boxSubvolumesConveyorDeviceDriver.getDevice_code())
|
||||
.build();
|
||||
logDto1.setLog_level(4);
|
||||
luceneExecuteLogService.deviceExecuteLog(logDto1);
|
||||
throw new BadRequestException("上位系统不允许取货");
|
||||
}
|
||||
}
|
||||
@@ -98,6 +115,12 @@ public class AgvWaitUtil {
|
||||
manipulatorAgvStationDeviceDriver = (ManipulatorAgvStationDeviceDriver) endDevice.getDeviceDriver();
|
||||
manipulatorAgvStationDeviceDriver.writing(2);
|
||||
if(manipulatorAgvStationDeviceDriver.getAction() != 1){
|
||||
LuceneLogDto logDto = LuceneLogDto.builder()
|
||||
.device_code(inst.getCarno())
|
||||
.content("agv诺宝对接位行架不允许放货:" + inst.getCarno()+ "点位号"+ manipulatorAgvStationDeviceDriver.getDevice_code())
|
||||
.build();
|
||||
logDto.setLog_level(4);
|
||||
luceneExecuteLogService.deviceExecuteLog(logDto);
|
||||
log.info("不允许仙工AGV取货,对接位有报警,设备号 - {}", endDevice);
|
||||
throw new BadRequestException("上位系统不允许取货");
|
||||
}
|
||||
|
||||
@@ -13,7 +13,10 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.acs.AcsConfig;
|
||||
import org.nl.acs.instruction.domain.Instruction;
|
||||
import org.nl.acs.instruction.service.InstructionService;
|
||||
import org.nl.acs.task.domain.Task;
|
||||
import org.nl.acs.task.enums.AgvSystemTypeEnum;
|
||||
import org.nl.acs.task.service.TaskService;
|
||||
import org.nl.acs.task.service.dto.TaskDto;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.param.ISysParamService;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -30,6 +33,7 @@ public class QueryAGVStatus {
|
||||
|
||||
public void run() {
|
||||
InstructionService instructionService = SpringContextHolder.getBean(InstructionService.class);
|
||||
TaskService taskService = SpringContextHolder.getBean(TaskService.class);
|
||||
ISysParamService paramService = SpringContextHolder.getBean(ISysParamService.class);
|
||||
List<Instruction> allInstFromCache = instructionService.findAllInstFromCache();
|
||||
List<Instruction> agvInstruction = allInstFromCache.stream().filter(item -> AgvSystemTypeEnum.One_NDC_System_Type.getIndex().equals(item.getAgv_system_type()) || AgvSystemTypeEnum.XG_System_Type.getIndex().equals(item.getAgv_system_type())).collect(Collectors.toList());
|
||||
@@ -59,9 +63,16 @@ public class QueryAGVStatus {
|
||||
// 等待=WAITING
|
||||
//执行中
|
||||
String state = json.getString("state");
|
||||
String carNo = json.getString("vehicle");
|
||||
if ("RUNNING".equals(state) || "CREATED".equals(state) || "TOBEDISPATCHED".equals(state) || "WAITING".equals(state)) {
|
||||
instruction.setInstruction_status("1");
|
||||
instruction.setCarno(carNo);
|
||||
TaskDto task = new TaskDto();
|
||||
instructionService.update(instruction);
|
||||
task.setCarno(carNo);
|
||||
task.setTask_id(instruction.getTask_id());
|
||||
instructionService.update(instruction);
|
||||
taskService.update(task);
|
||||
} else if ("FINISHED".equals(state)) {
|
||||
instruction.setInstruction_status("2");
|
||||
try {
|
||||
|
||||
@@ -745,7 +745,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService {
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("task_code", task_code);
|
||||
LuceneLogDto logDto = LuceneLogDto.builder()
|
||||
.device_code("追加动叉车作块:")
|
||||
.device_code(instructionDto.getCarno())
|
||||
.content("追加动叉车作块,参数:" + task_code )
|
||||
.build();
|
||||
logDto.setLog_level(4);
|
||||
@@ -754,7 +754,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService {
|
||||
JSONObject jo = JSON.parseObject(response);
|
||||
if (jo.getInteger("status") == 200) {
|
||||
LuceneLogDto logDto2 = LuceneLogDto.builder()
|
||||
.device_code("追加动叉车作块:")
|
||||
.device_code(instructionDto.getCarno())
|
||||
.content("追加动叉车作块,参数,接口返回:" + jo)
|
||||
.build();
|
||||
logDto2.setLog_level(4);
|
||||
@@ -765,7 +765,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService {
|
||||
|
||||
} else {
|
||||
LuceneLogDto logDto2 = LuceneLogDto.builder()
|
||||
.device_code("追加动叉车作块:")
|
||||
.device_code(instructionDto.getCarno())
|
||||
.content("追加动叉车作块失败,返回参数:" + jo.getString("body"))
|
||||
.build();
|
||||
logDto2.setLog_level(4);
|
||||
@@ -859,7 +859,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService {
|
||||
param.put("taskCode", task_code);
|
||||
param.put("actionType", actionType.toString());
|
||||
LuceneLogDto logDto = LuceneLogDto.builder()
|
||||
.device_code("追加动诺宝作块:")
|
||||
.device_code(instructionDto.getCarno())
|
||||
.content("追加动诺宝作块,参数:" + task_code + "--" + actionType)
|
||||
.build();
|
||||
logDto.setLog_level(4);
|
||||
@@ -868,7 +868,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService {
|
||||
JSONObject jo = JSON.parseObject(response);
|
||||
if (jo.getInteger("status") == 200) {
|
||||
LuceneLogDto logDto2 = LuceneLogDto.builder()
|
||||
.device_code("追加动诺宝作块:")
|
||||
.device_code(instructionDto.getCarno())
|
||||
.content("追加动诺宝作块,参数,接口返回:" + jo)
|
||||
.build();
|
||||
logDto2.setLog_level(4);
|
||||
@@ -881,7 +881,7 @@ public class XianGongAgvServiceImpl implements XianGongAgvService {
|
||||
|
||||
} else {
|
||||
LuceneLogDto logDto2 = LuceneLogDto.builder()
|
||||
.device_code("追加动诺宝作块:")
|
||||
.device_code(instructionDto.getCarno())
|
||||
.content("追加动诺宝作块失败,返回参数:" + jo.getString("body"))
|
||||
.build();
|
||||
logDto2.setLog_level(4);
|
||||
@@ -1343,16 +1343,16 @@ public class XianGongAgvServiceImpl implements XianGongAgvService {
|
||||
|
||||
JSONObject jo9 = new JSONObject();
|
||||
jo9.put("blockId", IdUtil.simpleUUID());
|
||||
jo9.put("location", inst.getNext_device_code() + "INPUT");
|
||||
jo9.put("location", inst.getNext_device_code());
|
||||
jo9.put("operation", "script");
|
||||
jo9.put("id", inst.getNext_device_code() + "INPUT");
|
||||
jo9.put("id", inst.getNext_device_code());
|
||||
jo9.put("script_name", "userpy/interact.py");
|
||||
JSONObject script_args5 = new JSONObject();
|
||||
script_args5.put("addr", addr);
|
||||
JSONObject data3 = new JSONObject();
|
||||
JSONObject reach3 = new JSONObject();
|
||||
reach3.put("task_code", inst.getInstruction_code());
|
||||
reach3.put("address", inst.getNext_device_code() + "INPUT");
|
||||
reach3.put("address", inst.getNext_device_code());
|
||||
data3.put("reach", reach3);
|
||||
script_args5.put("data", data3);
|
||||
script_args5.put("protocol", "HTTP");
|
||||
|
||||
@@ -240,7 +240,7 @@ public class BoxManipulatorSiteDeviceDriver extends AbstractOpcDeviceDriver impl
|
||||
|
||||
} catch (Exception var17) {
|
||||
var17.printStackTrace();
|
||||
feedMessage = var17.getMessage();
|
||||
// feedMessage = var17.getMessage();
|
||||
logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol));
|
||||
|
||||
}
|
||||
|
||||
@@ -209,6 +209,7 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
|
||||
JSONObject led_message = null;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public Device getDevice() {
|
||||
return this.device;
|
||||
@@ -237,12 +238,13 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
|
||||
to_container_no = this.itemProtocol.getContainer_direction();
|
||||
|
||||
|
||||
if (move != last_move && move == 0 && last_move == 1) {
|
||||
if (move != last_move) {
|
||||
requireSucess = false;
|
||||
clearWrite();
|
||||
}
|
||||
|
||||
if (move != 0 && task > 0) {
|
||||
inst_message = "指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() ;
|
||||
CompletableFuture.runAsync(() -> {
|
||||
// 异步更新指令状态
|
||||
try {
|
||||
@@ -826,6 +828,7 @@ public class BeltConveyorDeviceDriver extends AbstractOpcDeviceDriver implements
|
||||
jo.put("requireSucess", requireSucess);
|
||||
jo.put("hand_barcode", hand_barcode);
|
||||
jo.put("materiel", material_barcode);
|
||||
jo.put("inst_message", this.inst_message);
|
||||
jo.put("notCreateInstMessage", LangProcess.msg(notCreateInstMessage));
|
||||
return jo;
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
//
|
||||
// } catch (Exception var17) {
|
||||
// var17.printStackTrace();
|
||||
// feedMessage = var17.getMessage();
|
||||
// // feedMessage = var17.getMessage();
|
||||
// logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.standardItemProtocol));
|
||||
//
|
||||
// }
|
||||
|
||||
@@ -228,7 +228,7 @@
|
||||
//
|
||||
// } catch (Exception var17) {
|
||||
// var17.printStackTrace();
|
||||
// feedMessage = var17.getMessage();
|
||||
// // feedMessage = var17.getMessage();
|
||||
// logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.standardItemProtocol));
|
||||
//
|
||||
// }
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
//
|
||||
// } catch (Exception var17) {
|
||||
// var17.printStackTrace();
|
||||
// feedMessage = var17.getMessage();
|
||||
// // feedMessage = var17.getMessage();
|
||||
// logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.standardItemProtocol));
|
||||
//
|
||||
// }
|
||||
|
||||
@@ -167,6 +167,7 @@ public class BoxStorageOutConveyorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
String vehicle_code;
|
||||
String last_vehicle_code;
|
||||
|
||||
|
||||
@Override
|
||||
public Device getDevice() {
|
||||
return this.device;
|
||||
@@ -199,6 +200,7 @@ public class BoxStorageOutConveyorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
}
|
||||
|
||||
if (move != 0 && task > 0) {
|
||||
inst_message = "指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() ;
|
||||
update_instruction_status();
|
||||
}
|
||||
} catch (Exception var17) {
|
||||
|
||||
@@ -196,7 +196,7 @@ public class BoxSubvolumesConveyorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode);
|
||||
}
|
||||
if (move != 0 && task > 0) {
|
||||
|
||||
inst_message = "当前指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() + " 载具号:" + inst.getVehicle_code();
|
||||
update_instruction_status();
|
||||
}
|
||||
} catch (Exception var17) {
|
||||
@@ -737,7 +737,6 @@ public class BoxSubvolumesConveyorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
this.instruction_update_time = date;
|
||||
inst = checkInst();
|
||||
if (inst != null) {
|
||||
inst_message = "当前指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() + " 载具号:" + inst.getVehicle_code();
|
||||
vehicle_code = inst.getVehicle_code();
|
||||
task_code = inst.getTask_code();
|
||||
if (StrUtil.equals(inst.getInstruction_status(), "0") && StrUtil.equals(this.getDeviceCode(), inst.getStart_device_code())) {
|
||||
|
||||
@@ -199,7 +199,6 @@ public class FinishedProductOutBindLableDeviceDriver extends AbstractOpcDeviceDr
|
||||
|
||||
|
||||
if (move != 0 && task > 0) {
|
||||
|
||||
update_instruction_status();
|
||||
}
|
||||
|
||||
|
||||
@@ -680,6 +680,7 @@ public class FoldDiscSiteDeviceDriver extends AbstractOpcDeviceDriver implements
|
||||
jo.put("notCreateTaskMessage", notCreateTaskMessage);
|
||||
jo.put("notCreateInstMessage", LangProcess.msg(notCreateInstMessage));
|
||||
jo.put("feedMessage", LangProcess.msg(feedMessage));
|
||||
jo.put("inst_message", this.inst_message);
|
||||
jo.put("driver_type", "siemens_conveyor");
|
||||
jo.put("is_click", true);
|
||||
return jo;
|
||||
|
||||
@@ -1026,6 +1026,7 @@ public class ConveyorWithScannerWeightDeviceDriver extends AbstractOpcDeviceDriv
|
||||
jo.put("feedMessage", LangProcess.msg(feedMessage));
|
||||
jo.put("driver_type", "conveyor_with_scanner_weight");
|
||||
jo.put("is_click", true);
|
||||
jo.put("inst_message", this.inst_message);
|
||||
return jo;
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 装箱智能行架
|
||||
@@ -86,6 +87,7 @@ public class BoxPackageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
// y坐标
|
||||
float y = 0.0f;
|
||||
float last_y = 0.0f;
|
||||
String inst_message;
|
||||
|
||||
int heartbeat = 0;
|
||||
int last_heartbeat = 0;
|
||||
@@ -188,6 +190,7 @@ public class BoxPackageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
}
|
||||
// 更新指令状态
|
||||
if (mode == 3 && task > 0) {
|
||||
inst_message = "指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() ;
|
||||
updateInstrction();
|
||||
}
|
||||
|
||||
@@ -336,8 +339,9 @@ public class BoxPackageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
String startDeviceCode = getDeviceCodeList.get(i);
|
||||
//先查指令
|
||||
List<TaskDto> taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode);
|
||||
if (CollUtil.isNotEmpty(taskDtoInstruction)){
|
||||
TaskDto taskDtoIns = taskDtoInstruction.get(0);
|
||||
List<TaskDto> taskDtoStream = taskDtoInstruction.stream().sorted(Comparator.comparing(TaskDto::getCreate_time)).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(taskDtoStream)) {
|
||||
TaskDto taskDtoIns = taskDtoStream.get(0);
|
||||
if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) {
|
||||
Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code());
|
||||
String interactionJson = taskDtoIns.getInteraction_json();
|
||||
@@ -644,6 +648,7 @@ public class BoxPackageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
jo.put("is_click", true);
|
||||
jo.put("x", x);
|
||||
jo.put("y", y);
|
||||
jo.put("inst_message", this.inst_message);
|
||||
return jo;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 木箱入库行架
|
||||
@@ -106,6 +107,7 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
|
||||
int branchProtocol = 0;
|
||||
private String error_type = "hxhj_error_type";
|
||||
String inst_message;
|
||||
|
||||
//暂定 0就绪 1请求取货 2取货完成 3请求放货 4放货完成 5取货完成离开 6放货完成离开 7请求进入区域 8请求离开区域
|
||||
int flag;
|
||||
@@ -158,6 +160,7 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
}
|
||||
// 更新指令状态
|
||||
if (mode == 3 && task > 0 && !requireActionSucess) {
|
||||
inst_message = "指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() ;
|
||||
updateInstructionStatus();
|
||||
}
|
||||
|
||||
@@ -302,8 +305,9 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
String startDeviceCode = getDeviceCodeList.get(i);
|
||||
//先查指令
|
||||
List<TaskDto> taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode);
|
||||
if (CollUtil.isNotEmpty(taskDtoInstruction)) {
|
||||
TaskDto taskDtoIns = taskDtoInstruction.get(0);
|
||||
List<TaskDto> taskDtoStream = taskDtoInstruction.stream().sorted(Comparator.comparing(TaskDto::getCreate_time)).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(taskDtoStream)) {
|
||||
TaskDto taskDtoIns = taskDtoStream.get(0);
|
||||
if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) {
|
||||
Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code());
|
||||
String interactionJson = taskDtoIns.getInteraction_json();
|
||||
@@ -596,6 +600,7 @@ public class BoxStorageManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
jo.put("feedMessage", LangProcess.msg(feedMessage));
|
||||
jo.put("driver_type", "box_storage_manipulator");
|
||||
jo.put("is_click", true);
|
||||
jo.put("inst_message", this.inst_message);
|
||||
return jo;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 退货入库行架
|
||||
@@ -141,6 +142,7 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
List<String> getDeviceCodeList = null;
|
||||
|
||||
List<String> putDeviceCodeList = null;
|
||||
String inst_message;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -171,6 +173,8 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
|
||||
// 更新指令状态
|
||||
if (mode == 3 && task > 0) {
|
||||
inst_message = "指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() ;
|
||||
|
||||
updateInstructionStatus();
|
||||
}
|
||||
|
||||
@@ -319,8 +323,9 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
String startDeviceCode = getDeviceCodeList.get(i);
|
||||
//先查指令
|
||||
List<TaskDto> taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode);
|
||||
if (CollUtil.isNotEmpty(taskDtoInstruction)) {
|
||||
TaskDto taskDtoIns = taskDtoInstruction.get(0);
|
||||
List<TaskDto> taskDtoStream = taskDtoInstruction.stream().sorted(Comparator.comparing(TaskDto::getCreate_time)).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(taskDtoStream)) {
|
||||
TaskDto taskDtoIns = taskDtoStream.get(0);
|
||||
if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) {
|
||||
Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code());
|
||||
String interactionJson = taskDtoIns.getInteraction_json();
|
||||
@@ -610,6 +615,7 @@ public class ReturnGoodManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
jo.put("feedMessage", LangProcess.msg(feedMessage));
|
||||
jo.put("driver_type", "siemens_conveyor");
|
||||
jo.put("is_click", true);
|
||||
jo.put("inst_message", this.inst_message);
|
||||
return jo;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,8 @@ import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* 捆扎智能行架
|
||||
@@ -130,6 +132,7 @@ public class TrappedManipulatorManipulatorDeviceDriver extends AbstractOpcDevice
|
||||
String notCreateTaskMessage = "";
|
||||
String notCreateInstMessage = "";
|
||||
String feedMessage = "";
|
||||
String inst_message;
|
||||
|
||||
|
||||
List<String> getDeviceCodeList = null;
|
||||
@@ -165,12 +168,14 @@ public class TrappedManipulatorManipulatorDeviceDriver extends AbstractOpcDevice
|
||||
}
|
||||
// 更新指令状态
|
||||
if (mode == 3 && task > 0) {
|
||||
inst_message = "指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() ;
|
||||
|
||||
updateInstructionStatus();
|
||||
}
|
||||
|
||||
} catch (Exception var17) {
|
||||
var17.printStackTrace();
|
||||
feedMessage = var17.getMessage();
|
||||
// feedMessage = var17.getMessage();
|
||||
logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol));
|
||||
|
||||
}
|
||||
@@ -311,8 +316,9 @@ public class TrappedManipulatorManipulatorDeviceDriver extends AbstractOpcDevice
|
||||
String startDeviceCode = getDeviceCodeList.get(i);
|
||||
//先查指令
|
||||
List<TaskDto> taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode);
|
||||
if (CollUtil.isNotEmpty(taskDtoInstruction)) {
|
||||
TaskDto taskDtoIns = taskDtoInstruction.get(0);
|
||||
List<TaskDto> taskDtoStream = taskDtoInstruction.stream().sorted(Comparator.comparing(TaskDto::getCreate_time)).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(taskDtoStream)) {
|
||||
TaskDto taskDtoIns = taskDtoStream.get(0);
|
||||
if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) {
|
||||
Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code());
|
||||
String interactionJson = taskDtoIns.getInteraction_json();
|
||||
@@ -353,8 +359,19 @@ public class TrappedManipulatorManipulatorDeviceDriver extends AbstractOpcDevice
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
TaskDto taskDto = taskserver.findByStartCodeAndReady(startDeviceCode);
|
||||
if (ObjectUtil.isNotEmpty(taskDto) && TaskTypeEnum.Truss_Task.getIndex().equals(taskDto.getTask_type())) {
|
||||
List<TaskDto> taskDtos = taskserver.findByTrappedManipulatorReady();
|
||||
List<TaskDto> taskDtosReady = new ArrayList<>();
|
||||
TaskDto taskDto = new TaskDto();
|
||||
for (TaskDto taskDto1 : taskDtos) {
|
||||
if (getDeviceCodeList.contains(taskDto1.getStart_device_code())){
|
||||
taskDtosReady.add(taskDto1);
|
||||
}
|
||||
}
|
||||
if (CollUtil.isNotEmpty(taskDtosReady)) {
|
||||
List<TaskDto> taskDtoList = taskDtosReady.stream().sorted(Comparator.comparing(TaskDto::getCreate_time)).collect(Collectors.toList());
|
||||
taskDto = taskDtoList.get(0);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(taskDto)) {
|
||||
String interactionJson = taskDto.getInteraction_json();
|
||||
InteractionJsonDTO interactionJsonDTO = JSON.parseObject(interactionJson, InteractionJsonDTO.class);
|
||||
String start_device_code = taskDto.getStart_device_code();
|
||||
@@ -624,6 +641,7 @@ public class TrappedManipulatorManipulatorDeviceDriver extends AbstractOpcDevice
|
||||
jo.put("feedMessage", LangProcess.msg(feedMessage));
|
||||
jo.put("driver_type", "siemens_conveyor");
|
||||
jo.put("is_click", true);
|
||||
jo.put("inst_message", this.inst_message);
|
||||
return jo;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ import org.nl.config.lucene.service.LuceneExecuteLogService;
|
||||
import org.nl.config.lucene.service.dto.LuceneLogDto;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 捆扎智能行架
|
||||
@@ -151,6 +152,7 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi
|
||||
List<String> getDeviceCodeList = null;
|
||||
|
||||
List<String> putDeviceCodeList = null;
|
||||
String inst_message;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -185,6 +187,8 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi
|
||||
}
|
||||
// 更新指令状态
|
||||
if (mode == 3 && task > 0) {
|
||||
inst_message = "指令号:" + inst.getInstruction_code() + " " + inst.getStart_point_code() + "->" + inst.getNext_point_code() ;
|
||||
|
||||
updateInstructionStatus();
|
||||
}
|
||||
|
||||
@@ -335,8 +339,9 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi
|
||||
String startDeviceCode = getDeviceCodeList.get(i);
|
||||
//先查指令
|
||||
List<TaskDto> taskDtoInstruction = taskserver.queryTaskByDeviceCodeAndStatus2(startDeviceCode);
|
||||
if (CollUtil.isNotEmpty(taskDtoInstruction)) {
|
||||
TaskDto taskDtoIns = taskDtoInstruction.get(0);
|
||||
List<TaskDto> taskDtoStream = taskDtoInstruction.stream().sorted(Comparator.comparing(TaskDto::getCreate_time)).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(taskDtoStream)) {
|
||||
TaskDto taskDtoIns = taskDtoStream.get(0);
|
||||
if (TaskTypeEnum.Truss_Task.getIndex().equals(taskDtoIns.getTask_type())) {
|
||||
Instruction instruction = instructionService.findByTaskcodeAndStatus(taskDtoIns.getTask_code());
|
||||
String start_device_code = taskDtoIns.getStart_device_code();
|
||||
@@ -641,6 +646,7 @@ public class VolumeTwoManipulatorManipulatorDeviceDriver extends AbstractOpcDevi
|
||||
jo.put("feedMessage", LangProcess.msg(feedMessage));
|
||||
jo.put("driver_type", "siemens_conveyor");
|
||||
jo.put("is_click", true);
|
||||
jo.put("inst_message", this.inst_message);
|
||||
return jo;
|
||||
}
|
||||
|
||||
|
||||
@@ -343,7 +343,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
} else {
|
||||
this.instruction_update_time = date;
|
||||
//更改指令状态
|
||||
if (task > 0) {
|
||||
if (task > 0 && !Objects.equals(command, last_command)) {
|
||||
Instruction inst = checkInst();
|
||||
if (inst != null) {
|
||||
if (StrUtil.equals(inst.getInstruction_status(), "0")) {
|
||||
@@ -363,28 +363,27 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
|
||||
//不同任务限制清零
|
||||
if (!Objects.equals(task, last_task)) {
|
||||
this.isonline=true;
|
||||
count = 0;
|
||||
}
|
||||
|
||||
if (mode == 0) {
|
||||
this.setIsonline(false);
|
||||
message = "universal_off";
|
||||
} else if (error != 0) {
|
||||
}else {
|
||||
this.setIsonline(true);
|
||||
}
|
||||
if (error != 0) {
|
||||
this.setIserror(true);
|
||||
message = "universal_message3";
|
||||
} else {
|
||||
this.setIserror(false);
|
||||
}
|
||||
if (mode != 3 || requireSucess) {
|
||||
message = "one_message7";
|
||||
} else {
|
||||
if (error != 0) {
|
||||
|
||||
Date date = new Date();
|
||||
if (date.getTime() - this.instruction_update_time.getTime() < (long) this.instruction_update_time_out) {
|
||||
log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_update_time_out);
|
||||
} else {
|
||||
//满入空出或者浅货位阻挡
|
||||
erroBlock();
|
||||
}
|
||||
erroBlock();
|
||||
}
|
||||
List list = new ArrayList();
|
||||
switch (command) {
|
||||
@@ -402,6 +401,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
logDto.setLog_level(4);
|
||||
luceneExecuteLogService.deviceExecuteLog(logDto);
|
||||
message = "universal_delivery";
|
||||
|
||||
if (updateCommand("1")) break;
|
||||
break;
|
||||
case 2:
|
||||
@@ -592,6 +592,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
}
|
||||
instruction0.setExecute_message(string);
|
||||
instructionService.update(instruction0);
|
||||
|
||||
}
|
||||
|
||||
private static void packageDevicePoint(Device nextDevice, List list) {
|
||||
@@ -690,7 +691,7 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out);
|
||||
return;
|
||||
} else {
|
||||
Instruction instruction = instructionService.findByCode(String.valueOf(task));
|
||||
Instruction instruction = instructionService.findByDeviceCodeRunFromCache(String.valueOf(task));
|
||||
if (ObjectUtil.isEmpty(instruction)) {
|
||||
message = "one_message9";
|
||||
return;
|
||||
@@ -699,6 +700,12 @@ public class StandardStackerDeviceDriver extends AbstractOpcDeviceDriver impleme
|
||||
param.put("task_code", instruction.getTask_code());
|
||||
param.put("task_id", instruction.getTask_id());
|
||||
param.put("type", type);
|
||||
LuceneLogDto logDto1 = LuceneLogDto.builder()
|
||||
.device_code(device_code)
|
||||
.content("申请更新点位,参数:" + param)
|
||||
.build();
|
||||
logDto1.setLog_level(4);
|
||||
luceneExecuteLogService.deviceExecuteLog(logDto1);
|
||||
String response = acsToWmsService.applyUpdatePointCode(param);
|
||||
JSONObject jo = JSON.parseObject(response);
|
||||
if (StrUtil.isNotEmpty(jo.getString("body")) || jo.getInteger("status") == 200) {
|
||||
|
||||
@@ -198,7 +198,7 @@ public class OvenGantryManipulatorDeviceDriver extends AbstractOpcDeviceDriver i
|
||||
|
||||
} catch (Exception var17) {
|
||||
var17.printStackTrace();
|
||||
feedMessage = var17.getMessage();
|
||||
// feedMessage = var17.getMessage();
|
||||
logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol));
|
||||
}
|
||||
|
||||
|
||||
@@ -249,7 +249,7 @@ public class PullHeadManipulatorDeviceDriver extends AbstractOpcDeviceDriver imp
|
||||
|
||||
} catch (Exception var17) {
|
||||
var17.printStackTrace();
|
||||
feedMessage = var17.getMessage();
|
||||
// feedMessage = var17.getMessage();
|
||||
logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol));
|
||||
|
||||
}
|
||||
|
||||
@@ -274,7 +274,7 @@ public class PullTailManipulatorDeviceDriver extends AbstractOpcDeviceDriver imp
|
||||
|
||||
} catch (Exception var17) {
|
||||
var17.printStackTrace();
|
||||
feedMessage = var17.getMessage();
|
||||
// feedMessage = var17.getMessage();
|
||||
logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17.getMessage() + ",this.itemProtocol is null:" + ObjectUtil.isEmpty(this.itemProtocol));
|
||||
|
||||
}
|
||||
|
||||
@@ -601,7 +601,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
public String getBoxInfo(JSONObject param) {
|
||||
try {
|
||||
MDC.put(log_file_type, log_type);
|
||||
log.info("applyTaskToWms-----输入参数{}", param);
|
||||
log.info("getBoxInfo-----输入参数{}", param);
|
||||
String wmsurl = paramService.findByCode(AcsConfig.WMSURL).getValue();
|
||||
AddressDto addressDto = addressService.findByCode("getBoxInfo");
|
||||
String url = wmsurl + addressDto.getMethods_url();
|
||||
@@ -766,7 +766,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
public String applyUpdatePointCode(JSONObject param) {
|
||||
try {
|
||||
MDC.put(log_file_type, log_type);
|
||||
log.info("deviceApplyExceptional-----输入参数{}", param);
|
||||
log.info("applyUpdatePointCode-----输入参数{}", param);
|
||||
String wmsurl = paramService.findByCode(AcsConfig.WMSURL).getValue();
|
||||
AddressDto addressDto = addressService.findByCode("deviceApplyExceptional");
|
||||
String url = wmsurl + addressDto.getMethods_url();
|
||||
@@ -778,11 +778,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
.execute();
|
||||
} catch (Exception e) {
|
||||
String msg = e.getMessage();
|
||||
log.info("deviceApplyExceptional-----输出参数{}", msg);
|
||||
log.info("applyUpdatePointCode-----输出参数{}", msg);
|
||||
//网络不通
|
||||
}
|
||||
if (ObjectUtil.isEmpty(result2)) {
|
||||
log.info("deviceApplyExceptional-----输出参数{}", "返回结果为空");
|
||||
log.info("applyUpdatePointCode-----输出参数{}", "返回结果为空");
|
||||
return null;
|
||||
}
|
||||
String type = "";
|
||||
@@ -791,8 +791,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
} else {
|
||||
type = "error";
|
||||
}
|
||||
log.info("deviceApplyExceptional-----输出参数{}", result2.body());
|
||||
LuceneLogDto luceneLogDto = new LuceneLogDto(4,"deviceApplyExceptional", String.valueOf(result2.getStatus()),
|
||||
log.info("applyUpdatePointCode-----输出参数{}", result2.body());
|
||||
LuceneLogDto luceneLogDto = new LuceneLogDto(4,"applyUpdatePointCode", String.valueOf(result2.getStatus()),
|
||||
JSON.toJSONString(param), String.valueOf(result2.body()), "申请更新点位");
|
||||
luceneLogService.interfaceExecuteLog(luceneLogDto);
|
||||
return result2.body();
|
||||
|
||||
@@ -342,6 +342,14 @@ public interface InstructionService extends CommonService<InstructionMybatis> {
|
||||
*/
|
||||
Instruction findByStartCodeAndReady(String device_code);
|
||||
|
||||
/**
|
||||
* 根据起点设备编号查询当前是否有运行的指令
|
||||
*
|
||||
* @param device_code
|
||||
* @return
|
||||
*/
|
||||
Instruction findByDeviceCodeRunFromCache(String device_code);
|
||||
|
||||
/**
|
||||
* 根据终点设备编号查询当前是否有就绪指令
|
||||
*
|
||||
|
||||
@@ -1536,6 +1536,30 @@ public class InstructionServiceImpl extends CommonServiceImpl<InstructionMapper,
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Instruction findByDeviceCodeRunFromCache(String devicecode) {
|
||||
List<Instruction> instructionList = instructions;
|
||||
ListUtil.sort(
|
||||
instructionList,
|
||||
new Comparator<Instruction>() {
|
||||
@Override
|
||||
public int compare(Instruction o1, Instruction o2) {
|
||||
return o1.getCreate_time().compareTo(o2.getCreate_time());
|
||||
}
|
||||
});
|
||||
Iterator<Instruction> it = instructions.iterator();
|
||||
while (it.hasNext()) {
|
||||
Instruction inst = it.next();
|
||||
if (StrUtil.equals(devicecode, inst.getStart_device_code())
|
||||
&& inst.getInstruction_status().equals(InstructionStatusEnum.BUSY.getIndex())) {
|
||||
return inst;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Instruction findByNextDeviceCodeFromCache(String devicecode) {
|
||||
List<Instruction> instructionList = instructions;
|
||||
|
||||
@@ -19,7 +19,7 @@ public enum AgvActionTypeEnum {
|
||||
/**
|
||||
* 防货二次分配
|
||||
*/
|
||||
OUT_STOCK(3, "防货二次分配"),
|
||||
OUT_STOCK(3, "放货二次分配"),
|
||||
/**
|
||||
* 取放货二次分配
|
||||
*/
|
||||
|
||||
@@ -390,6 +390,13 @@ public interface TaskService extends CommonService<Task> {
|
||||
TaskDto findByStartCodeAndReady(String device_code);
|
||||
|
||||
|
||||
/**
|
||||
* 查找符合条件的堆叠行架任务
|
||||
* @return
|
||||
*/
|
||||
List<TaskDto> findByTrappedManipulatorReady();
|
||||
|
||||
|
||||
/**
|
||||
* 根据起载具号查询就绪任务
|
||||
*
|
||||
|
||||
@@ -1107,6 +1107,15 @@ public class TaskServiceImpl extends CommonServiceImpl<TaskMapper, Task> impleme
|
||||
return optionalTask.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskDto> findByTrappedManipulatorReady() {
|
||||
//根据时间升序取第一个
|
||||
List<TaskDto> taskDtoList = tasks.stream()
|
||||
.filter(task -> StrUtil.equals(task.getTask_type(), TaskTypeEnum.Truss_Task.getIndex())
|
||||
&& StrUtil.equals(task.getTask_status(), TaskStatusEnum.READY.getIndex())).collect(Collectors.toList());
|
||||
return taskDtoList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskDto findByVehicleCodeCodeAndReady(String vehicleCode) {
|
||||
Optional<TaskDto> optionalTask = tasks.stream()
|
||||
|
||||
@@ -82,7 +82,6 @@ public class StageController {
|
||||
}
|
||||
|
||||
@PostMapping("/getNewStageDataByCode")
|
||||
@Log("根据stage_code获取舞台数据")
|
||||
public ResponseEntity<Object> getNewStageDataByCode(@RequestBody String code) {
|
||||
Stage one = stageService.getOne(new LambdaQueryWrapper<Stage>().eq(Stage::getStage_code, code));
|
||||
return new ResponseEntity<>(one, HttpStatus.CREATED);
|
||||
|
||||
@@ -57,10 +57,10 @@ public class CreateDDJInst {
|
||||
String next_device_code = taskDto.getNext_device_code();
|
||||
Device nextDevice = appService.findDeviceByCode(next_device_code);
|
||||
//判断有无出入库任务是相同路线
|
||||
TaskDto dto = taskserver.findByCodeAndExcute(next_device_code, start_device_code);
|
||||
if (ObjectUtil.isNotEmpty(dto)) {
|
||||
continue;
|
||||
}
|
||||
// TaskDto dto = taskserver.findByCodeAndExcute(next_device_code, start_device_code);
|
||||
// if (ObjectUtil.isNotEmpty(dto)) {
|
||||
// continue;
|
||||
// }
|
||||
if (startDevice.getDevice_type().equals(DeviceType.storage.name()) &&
|
||||
(nextDevice.getDevice_type().equals(DeviceType.conveyor.name()) || nextDevice.getDevice_type().equals(DeviceType.storage.name()))) {
|
||||
taskDtoList.add(taskDto);
|
||||
@@ -316,6 +316,12 @@ public class CreateDDJInst {
|
||||
String count = deviceByCode.getExtraValue().get("count").toString();
|
||||
if (StrUtil.isNotEmpty(count)) {
|
||||
if (max <= Integer.parseInt(count)) {
|
||||
//判断有没有DDJ对接位出入库的指令
|
||||
List<Instruction> byCodeAndExcute = instructionService.findByCodeAndExcute(next_device_code);
|
||||
if (CollUtil.isNotEmpty(byCodeAndExcute)){
|
||||
((StandardStackerDeviceDriver) deviceByCode.getDeviceDriver()).setNotCreateInstMessage("有DDJ对接位出入库的指令");
|
||||
continue;
|
||||
}
|
||||
instdto.setInstruction_type(task_type);
|
||||
instdto.setInstruction_id(IdUtil.simpleUUID());
|
||||
instdto.setRoute_plan_code(route_plan_code);
|
||||
|
||||
@@ -22,6 +22,7 @@ https://juejin.cn/post/6844903775631572999
|
||||
<include resource="log/LMSToACS.xml"/>
|
||||
<include resource="log/TwoNDCSocketConnectionAutoRun.xml"/>
|
||||
<include resource="log/NDCAgvServiceImpl.xml"/>
|
||||
<include resource="log/XgAgvDeviceDriver.xml"/>
|
||||
|
||||
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<!--withJansi 参数改为true-->
|
||||
|
||||
Reference in New Issue
Block a user