告警信息
This commit is contained in:
parent
b4d12cf03d
commit
a9a4244290
@ -25,4 +25,7 @@ public class RobotDimensionsDTO {
|
||||
|
||||
@Schema(description = "中心到车尾距离(单位米)")
|
||||
private Double robotCenterTail;
|
||||
|
||||
@Schema(description = "mac地址")
|
||||
private String macAddress;
|
||||
}
|
||||
|
@ -141,8 +141,9 @@ public class MqttFactory {
|
||||
return BeanUtils.getBean(PathPlanningInitDataServiceImpl.class);
|
||||
case TASK_ASSIGNMENT_FEEDBACK:
|
||||
return BeanUtils.getBean(PathPlanningDistributionTaskServiceImpl.class);
|
||||
case TASK_ASSIGNMENT_FAIL:
|
||||
return BeanUtils.getBean(PathPlanningDistributionFailServiceImpl.class);
|
||||
default :
|
||||
// case ROBOT_TASK_STATUS:
|
||||
return BeanUtils.getBean(RobotTaskStatusServiceImpl.class);
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,8 @@ public enum DefineSubTopicEnum {
|
||||
ROBOT_TASK_STATUS("ROBOT_TASK_STATUS", 0,"机器人任务完成上报"),
|
||||
ROBOT_GENERICS_STATUS("ROBOT_GENERICS_STATUS", 0,"机器人异常"),
|
||||
SYNCHRONOUS_ALL_MAP_REQUEST("SYNCHRONOUS_ALL_MAP_REQUEST", 0,"路径规划需要初始数据上报"),
|
||||
TASK_ASSIGNMENT_FEEDBACK("TASK_ASSIGNMENT_FEEDBACK", 0,"路径规划任务分配上报");
|
||||
TASK_ASSIGNMENT_FEEDBACK("TASK_ASSIGNMENT_FEEDBACK", 0,"路径规划任务分配上报"),
|
||||
TASK_ASSIGNMENT_FAIL("TASK_ASSIGNMENT_FAIL", 0,"路径规划失败上报");
|
||||
|
||||
|
||||
private final String topic;
|
||||
|
@ -0,0 +1,22 @@
|
||||
package cn.iododer.yudao.module.mqtt.service;
|
||||
|
||||
import cn.iocoder.yudao.module.system.api.path.PathApi;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class PathPlanningDistributionFailServiceImpl implements MqttService{
|
||||
|
||||
@Resource
|
||||
private PathApi pathApi;
|
||||
|
||||
|
||||
@Override
|
||||
public void analysisMessage(String message) {
|
||||
log.info("路径规划失败信息上报 :{}", message);
|
||||
pathApi.ppDistributionTaskFail(message);
|
||||
}
|
||||
}
|
@ -20,4 +20,8 @@ public interface PathApi {
|
||||
@PostMapping(PREFIX + "/ppDistributionTask")
|
||||
@Operation(summary = "路径规划需要初始化信息")
|
||||
void ppDistributionTask(@RequestParam("message") String message);
|
||||
|
||||
@PostMapping(PREFIX + "/ppDistributionTaskFail")
|
||||
@Operation(summary = "路径规划需要初始化信息")
|
||||
void ppDistributionTaskFail(@RequestParam("message") String message);
|
||||
}
|
||||
|
@ -239,4 +239,7 @@ public interface ErrorCodeConstants {
|
||||
|
||||
// ========== 循环任务点位 1_002_046_001==========
|
||||
ErrorCode TASK_CYCLE_NOT_EXISTS = new ErrorCode(1_002_046_001, "循环任务点位不存在");
|
||||
// ========== 用户操作记录 1_002_047_001 ==========
|
||||
ErrorCode OPERATE_LOG_NOT_EXISTS = new ErrorCode(1_002_047_001, "用户操作记录不存在");
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.service.path.PathPlanningService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotTaskService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
||||
import cn.iocoder.yudao.module.system.service.tool.ToolsService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -35,12 +36,14 @@ public class PathApiImpl implements PathApi {
|
||||
@Autowired
|
||||
private ThreadPoolTaskExecutor taskExecutor;
|
||||
|
||||
@Resource
|
||||
private RobotWarnMsgService warnMsgService;
|
||||
|
||||
/**
|
||||
* 发送初始化信息给PP
|
||||
*/
|
||||
@Override
|
||||
public void pathInitData() {
|
||||
// new Thread(() -> {
|
||||
taskExecutor.execute(() -> {
|
||||
TenantContextHolder.setTenantId(1L);
|
||||
log.info("初始化数据发送个PP---开始");
|
||||
@ -55,8 +58,6 @@ public class PathApiImpl implements PathApi {
|
||||
toolsService.sendPPsortConfig();
|
||||
log.info("初始化数据发送个PP---完成");
|
||||
});
|
||||
|
||||
// }).start();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -74,12 +75,14 @@ public class PathApiImpl implements PathApi {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* PP处理任务失败
|
||||
* @param message
|
||||
*/
|
||||
@Override
|
||||
public void ppDistributionTaskFail(String message) {
|
||||
warnMsgService.addWarnMsg(message);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ public class RequestProcessor {
|
||||
|
||||
public RequestProcessor() {
|
||||
// 每秒执行一次 - 处理并发送数据 - 避免数据丢失
|
||||
scheduler.scheduleAtFixedRate(this::processAndSend, 1, 1, TimeUnit.SECONDS);
|
||||
scheduler.scheduleAtFixedRate(this::processAndSend, 300, 300, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
|
||||
public void handleRequest(String map, String mac, String data) {
|
||||
|
@ -83,10 +83,11 @@ public class RobotStatusApiImpl implements RobotStatusApi {
|
||||
String cargoDetectedKey = RobotTaskChcheConstant.ROBOT_CARGO_DETECTED + robotStatusDataDTO.getMac();
|
||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + robotStatusDataDTO.getMac();
|
||||
// todo 后续需要改为从车机上报
|
||||
/*redisUtil.set(taskStatusKey, "IDLE", robotPositionCacheTime);
|
||||
redisUtil.set(cargoDetectedKey, false, robotPositionCacheTime);*/
|
||||
redisUtil.set(taskStatusKey, robotStatusDataDTO.getData().getTask_status(), robotPositionCacheTime);
|
||||
redisUtil.set(cargoDetectedKey, robotStatusDataDTO.getData().getCargo_detected(), robotPositionCacheTime);
|
||||
|
||||
/*redisUtil.set(taskStatusKey, robotStatusDataDTO.getData().getTask_status(), robotPositionCacheTime);
|
||||
redisUtil.set(cargoDetectedKey, robotStatusDataDTO.getData().getCargo_detected(), robotPositionCacheTime);*/
|
||||
redisUtil.set(taskStatusKey, "IDLE", robotPositionCacheTime);
|
||||
redisUtil.set(cargoDetectedKey, false, robotPositionCacheTime);
|
||||
|
||||
Object object = redisUtil.get(pose2dKey);
|
||||
RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class);
|
||||
@ -104,6 +105,9 @@ public class RobotStatusApiImpl implements RobotStatusApi {
|
||||
robotStatusDataPoseDTO.setArea(robotStatusDataDTO.getData().getFloor_zone().getArea());
|
||||
}
|
||||
|
||||
robotStatusDataPoseDTO.setFloor("1");
|
||||
robotStatusDataPoseDTO.setArea("D区");
|
||||
|
||||
robotStatusDataPoseDTO.setRobotNo(robotNo);
|
||||
redisUtil.set(pose2dKey, JSON.toJSONString(robotStatusDataPoseDTO), robotPositionCacheTime);
|
||||
pathPlanningApi.synchronousLineObject(robotStatusDataPoseDTO, PathPlanningTopicConstant.AGV_POSE);
|
||||
|
@ -175,7 +175,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
locationIds.add(robotTaskDetailDO.getToLocationId());
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(locationIds)) {
|
||||
locationMapper.releaseLocationLockList(locationIds, robotTaskDetailDO.getId()
|
||||
locationMapper.releaseLocationLockList(locationIds, robotTaskDetailDO.getRobotTaskId()
|
||||
, LocationLockEnum.YES.getType());
|
||||
}
|
||||
|
||||
@ -200,7 +200,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
.warnMsg(robotNo +"_"+robotCompleteTaskDTO.getMessage())
|
||||
.warnSolve(robotCompleteTaskDTO.getSolution())
|
||||
.build();
|
||||
warnMsgMapper.insertBatch(Arrays.asList(warnMsg));
|
||||
warnMsgMapper.insert(warnMsg);
|
||||
|
||||
warnMsgService.sendWarnMsgToWebsocket(warnMsg.getWarnMsg());
|
||||
}
|
||||
@ -259,8 +259,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrder_id());
|
||||
List<RobotTaskDetailDO> taskDetails = robotTaskDetailMapper.queryByTaskId(robotTaskDetailDO.getRobotTaskId());
|
||||
boolean done =
|
||||
taskDetails.stream().allMatch(v -> (v.getTaskStatus().equals(RobotTaskDetailStatusEnum.DONE.getType())
|
||||
|| v.getTaskStatus().equals(RobotTaskDetailStatusEnum.CLOSE.getType())));
|
||||
taskDetails.stream().noneMatch(v -> (v.getTaskStatus().equals(RobotTaskDetailStatusEnum.NEW.getType())));
|
||||
if (done) {
|
||||
RobotTaskDO robotTaskDO = new RobotTaskDO();
|
||||
robotTaskDO.setId(taskDetails.get(0).getRobotTaskId());
|
||||
|
@ -8,10 +8,12 @@ public class RobotExecutionStateConstant {
|
||||
public static Integer UN_DO = 0;
|
||||
//正在做
|
||||
public static Integer DOING = 1;
|
||||
//已完成
|
||||
public static Integer DONE = 2;
|
||||
//已暂停
|
||||
public static Integer STOP = 2;
|
||||
//已取消
|
||||
public static Integer CLOSE = 3;
|
||||
//已失败、异常
|
||||
public static Integer FAIL = 4;
|
||||
//已完成
|
||||
public static Integer DONE = 5;
|
||||
}
|
||||
|
@ -6,6 +6,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
import cn.iocoder.yudao.framework.security.core.LoginUser;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
|
@ -11,7 +11,8 @@ import lombok.Getter;
|
||||
public enum RobotWarnType {
|
||||
|
||||
ROBOT_WARN(1),//告警
|
||||
USER_OPERATE(2);//用户操作
|
||||
USER_OPERATE(2),//用户操作
|
||||
PATH(3);//路径规划
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
|
@ -46,9 +46,9 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
||||
int max = wareHouseLocationDOS.stream().map(WareHouseLocationDO::getLocationNo).filter(StrUtil::isNotEmpty)
|
||||
.mapToInt(s -> Integer.parseInt(s.substring(s.length() - 1))).max().orElse(1);
|
||||
int locationStorey = wareHouseLocationDOS.size();
|
||||
Long locationNumber = 0l;
|
||||
if (ObjectUtil.isNotEmpty(nodeBaseDTOS)) {
|
||||
locationNumber = nodeBaseDTOS.get(0).getLocationNumber();
|
||||
Long locationNumber = null;
|
||||
if (ObjectUtil.isNotEmpty(item.getLocationNumber())) {
|
||||
locationNumber = item.getLocationNumber();
|
||||
}
|
||||
for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
|
||||
wareHouseLocationDO.setLocationX(item.getLocationX());
|
||||
@ -65,7 +65,7 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
||||
}
|
||||
wareHouseLocationDO.setMapId(positionMapId);
|
||||
wareHouseLocationDO.setMapItemId(item.getId());
|
||||
if (ObjectUtil.isNotEmpty(locationNumber)) {
|
||||
if (ObjectUtil.isNotEmpty(locationNumber) && ObjectUtil.isEmpty(wareHouseLocationDO.getLocationNumber())) {
|
||||
wareHouseLocationDO.setLocationNumber(locationNumber);
|
||||
locationNumber = locationNumber - 10;
|
||||
}
|
||||
|
@ -55,4 +55,10 @@ public interface RobotWarnMsgService extends IService<RobotWarnMsgDO> {
|
||||
PageResult<RobotWarnMsgDO> getWarnMsgPage(RobotWarnMsgPageReqVO pageReqVO);
|
||||
|
||||
void sendWarnMsgToWebsocket(Object errorMsg);
|
||||
|
||||
/**
|
||||
* 添加告警信息
|
||||
* @param message
|
||||
*/
|
||||
void addWarnMsg(String message);
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotWarnMsgMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotWarnType;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -20,6 +21,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
@ -99,4 +101,16 @@ public class RobotWarnMsgServiceImpl extends ServiceImpl<RobotWarnMsgMapper, Rob
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addWarnMsg(String message) {
|
||||
RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4)
|
||||
.warnCode("PP")
|
||||
.robotNo("")
|
||||
.warnType(RobotWarnType.PATH.getType())
|
||||
.warnMsg(message)
|
||||
.warnSolve(message)
|
||||
.build();
|
||||
warnMsgMapper.insert(warnMsg);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -405,12 +405,8 @@
|
||||
<if test="groupName != null and groupName != ''">
|
||||
group_name = #{groupName},
|
||||
</if>
|
||||
<if test="skuInfo != null and skuInfo != ''">
|
||||
sku_info = #{skuInfo},
|
||||
</if>
|
||||
<if test="skuBatch != null and skuBatch != ''">
|
||||
sku_batch = #{skuBatch},
|
||||
</if>
|
||||
<if test="skuNumber != null">
|
||||
sku_number = #{skuNumber},
|
||||
</if>
|
||||
|
@ -259,7 +259,8 @@
|
||||
t1.robot_no AS robotNo,
|
||||
t2.robot_wide AS robotWide,
|
||||
t2.robot_center_headstock AS robotCenterHeadstock,
|
||||
t2.robot_center_tail AS robotCenterTail
|
||||
t2.robot_center_tail AS robotCenterTail,
|
||||
t1.mac_address as macAddress
|
||||
FROM
|
||||
robot_information t1
|
||||
LEFT JOIN robot_model t2 ON t1.robot_model_id = t2.id
|
||||
|
Loading…
Reference in New Issue
Block a user