Compare commits
3 Commits
1cc7fd843d
...
55712a77a5
Author | SHA1 | Date | |
---|---|---|---|
![]() |
55712a77a5 | ||
![]() |
f428509644 | ||
![]() |
fe186d3117 |
@ -150,7 +150,7 @@ public class RobotReactiveStatusApiImpl implements RobotReactiveStatusApi {
|
||||
.warnCode(robotStatusData.getErrorCode())
|
||||
.robotNo(robotNo)
|
||||
.warnType(RobotWarnType.ROBOT_WARN.getType())
|
||||
.warnMsg(robotNo + CommonConstant.SYMBOL + mappingDOS.getWarnMsg())
|
||||
.warnMsg(robotNo+"号车" + CommonConstant.SYMBOL + mappingDOS.getWarnMsg())
|
||||
.warnSolve(mappingDOS.getWarnSolve())
|
||||
.build();
|
||||
|
||||
|
@ -147,7 +147,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
return;
|
||||
}
|
||||
|
||||
if (RobotExecutionStateConstant.UN_DO.equals(robotCompleteTaskDTO.getExecutionState())
|
||||
if (ObjectUtil.isNotEmpty(robotCompleteTaskDTO.getCommandStatus())
|
||||
&& RobotExecutionStateConstant.UN_DO.equals(robotCompleteTaskDTO.getCommandStatus().getExecutionState())) {
|
||||
log.info("任务未开始 :{}", robotCompleteTaskDTO.getOrderId());
|
||||
} else if (RobotExecutionStateConstant.UN_DO.equals(robotCompleteTaskDTO.getExecutionState())
|
||||
|| RobotExecutionStateConstant.STOP.equals(robotCompleteTaskDTO.getExecutionState())
|
||||
|| RobotExecutionStateConstant.CLOSE.equals(robotCompleteTaskDTO.getExecutionState())) {
|
||||
log.info("任务未开始/暂停/取消 :{}", robotCompleteTaskDTO.getOrderId());
|
||||
@ -244,6 +247,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
redisUtil.del(RobotTaskChcheConstant.ROBOT_TASK_SKU_INFO + robotCompleteTaskDTO.getMac());
|
||||
}
|
||||
//todo 后面考虑下充电,车机目前对充电的逻辑未定义
|
||||
RobotTaskDetailDO robotTaskDetail = null;
|
||||
if (PathTaskTypeEnum.MOVE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
|| PathTaskTypeEnum.MOVE_TO_WAIT_STOP.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
|| PathTaskTypeEnum.MOVE_TO_POINT.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
@ -251,7 +255,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
|| PathTaskTypeEnum.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
|| PathTaskTypeEnum.CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
|| PathTaskTypeEnum.RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||
taskDone(robotCompleteTaskDTO);
|
||||
robotTaskDetail = taskDone(robotCompleteTaskDTO);
|
||||
|
||||
} else if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||
@ -263,7 +267,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
robotTaskDetailMapper.updateById(robotTaskDetailDO);
|
||||
return;
|
||||
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(robotCompleteTaskDTO.getCommandStatus().getCommandType())) {
|
||||
taskDone(robotCompleteTaskDTO);
|
||||
robotTaskDetail = taskDone(robotCompleteTaskDTO);
|
||||
}
|
||||
}
|
||||
|
||||
@ -273,6 +277,29 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
}
|
||||
taskDetailActionLogMapper.updateActionStatus(robotCompleteTaskDTO.getOrderId(), ActionStatusEnum.DONE.getType(), LocalDateTime.now());
|
||||
|
||||
addTaskDetailActionDoneLog(robotCompleteTaskDTO, robotTaskDetail);
|
||||
}
|
||||
|
||||
private void addTaskDetailActionDoneLog(RobotCompleteTaskDTO robotCompleteTaskDTO, RobotTaskDetailDO robotTaskDetail) {
|
||||
RobotTaskDetailActionLogSaveReqVO logOne = new RobotTaskDetailActionLogSaveReqVO();
|
||||
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
||||
logOne.setActionMsg("车辆 " + robotNo + " 完成任务");
|
||||
logOne.setRobotNo(robotNo);
|
||||
logOne.setOriginalRobotNo(robotNo);
|
||||
logOne.setTaskDetailId(robotCompleteTaskDTO.getOrderId());
|
||||
if (ObjectUtil.isNotEmpty(robotTaskDetail)) {
|
||||
logOne.setTaskStage(robotTaskDetail.getTaskStage());
|
||||
logOne.setCommandType(PathTaskTypeEnum.getTaskType(robotTaskDetail.getTaskType()));
|
||||
}
|
||||
// logOne.setTaskNo(robotTask.getTaskNo());
|
||||
logOne.setActionStatus(ActionStatusEnum.DONE.getType());
|
||||
logOne.setStartTime(LocalDateTime.now());
|
||||
logOne.setEndTime(LocalDateTime.now());
|
||||
Long mapId = robotInformationService.getRobotMapIdByRobotNo(robotNo);
|
||||
if (ObjectUtil.isNotEmpty(mapId)) {
|
||||
logOne.setPositionMapId(mapId);
|
||||
}
|
||||
taskDetailActionLogService.createTaskDetailActionLog(logOne);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -413,16 +440,18 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||
if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
|| PathTaskTypeEnum.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||
RobotTaskDetailDO detailDO = new RobotTaskDetailDO();
|
||||
if (RobotTaskStageEnum.GO_TAKE.getType().equals(robotTaskDetailDO.getTaskStage())
|
||||
|| RobotTaskStageEnum.UN_START.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
||||
robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.NEW.getType());
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.UN_START.getType());
|
||||
detailDO.setTaskStatus(RobotTaskDetailStatusEnum.NEW.getType());
|
||||
detailDO.setTaskStage(RobotTaskStageEnum.UN_START.getType());
|
||||
|
||||
if (!znConfigConstant.getIsSimulation()) {
|
||||
// robotTaskDetailDO.setRobotNo("");
|
||||
}
|
||||
robotTaskDetailDO.setOccurError(ZeroOneEnum.ZERO.getType());
|
||||
robotTaskDetailMapper.updateById(robotTaskDetailDO);
|
||||
detailDO.setOccurError(ZeroOneEnum.ZERO.getType());
|
||||
// robotTaskDetailMapper.updateById(robotTaskDetailDO);
|
||||
robotTaskDetailMapper.updateRobotDetailById(detailDO);
|
||||
String taskNo = taskDetailService.getTaskNoByDetailId(robotCompleteTaskDTO.getOrderId());
|
||||
msg = robotNo + "_" + "车辆发生异常,重新分配其他车辆执行此任务" + taskNo + " - " + robotCompleteTaskDTO.getOrderId();
|
||||
}
|
||||
@ -537,7 +566,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
*
|
||||
* @param robotCompleteTaskDTO
|
||||
*/
|
||||
private void taskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||
private RobotTaskDetailDO taskDone(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||
|
||||
RobotTaskDetailDO robotTaskDetailDO = setTaskDone(robotCompleteTaskDTO);
|
||||
|
||||
@ -558,6 +587,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
String plantingKey = PathPlanningChcheConstant.PATH_PLANNING_TASK + robotCompleteTaskDTO.getOrderId();
|
||||
redisUtil.del(plantingKey);
|
||||
}
|
||||
return robotTaskDetailDO;
|
||||
}
|
||||
|
||||
|
||||
@ -571,6 +601,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
|
||||
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||
Long taskStage = robotTaskDetailDO.getTaskStage();
|
||||
log.info("任务 :{} , 当前阶段 :{}", robotCompleteTaskDTO.getOrderId(), taskStage);
|
||||
|
||||
RobotTaskDO robotTask = robotTaskMapper.selectById(robotTaskDetailDO.getRobotTaskId());
|
||||
|
||||
@ -579,7 +610,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
|
||||
RobotTaskDetailActionLogSaveReqVO logOne = new RobotTaskDetailActionLogSaveReqVO();
|
||||
if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && RobotTaskStageEnum.UN_START.getType().equals(taskStage)) {
|
||||
if (CommandTypeEnum.WORK_PICK_UP_GOODS_MOVE_TO_CHECK.getType().equals(commandType)) {
|
||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
||||
} else if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType) && (RobotTaskStageEnum.UN_START.getType().equals(taskStage)
|
||||
|| RobotTaskStageEnum.GO_TAKE.getType().equals(taskStage)
|
||||
|| RobotTaskStageEnum.TAKEING.getType().equals(taskStage))) {
|
||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
||||
} else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) {
|
||||
@ -590,7 +626,8 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) {
|
||||
logOne.setActionMsg("车辆正在放货" + robotTaskDetailDO.getToLocationNo());
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType());
|
||||
} else if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||
} else if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)
|
||||
|| CommandTypeEnum.WORK_DROP_OFF_GOODS_MOVE_TO_CHECK.getType().equals(commandType)) {
|
||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
||||
if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) {
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
||||
@ -636,7 +673,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
||||
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) {
|
||||
logOne.setActionMsg("车辆正在放货"+ robotTaskDetailDO.getToLocationNo());
|
||||
logOne.setActionMsg("车辆正在放货" + robotTaskDetailDO.getToLocationNo());
|
||||
if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) {
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType());
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.system.api.robot;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import cn.iocoder.yudao.module.system.api.robot.vo.RobotWorkStatusDTO;
|
||||
import cn.iocoder.yudao.module.system.constant.robot.RobotExecutionStateConstant;
|
||||
@ -47,6 +48,10 @@ public class RobotWorkStatusApiImpl implements RobotWorkStatusApi {
|
||||
|
||||
TenantContextHolder.setTenantId(1L);
|
||||
RobotWorkStatusDTO data = JSON.parseObject(message, RobotWorkStatusDTO.class);
|
||||
if (ObjectUtil.isEmpty(data.getOrderId())) {
|
||||
log.info("任务id为空,不进行处理");
|
||||
return;
|
||||
}
|
||||
String robotNo = robotInformationService.getRobotNoByMac(data.getMac());
|
||||
RobotOperationLogSaveReqVO createReqVO = RobotOperationLogSaveReqVO.builder()
|
||||
.orderId(Long.valueOf(data.getOrderId()))
|
||||
|
@ -72,9 +72,9 @@ public class MqttUtils {
|
||||
}
|
||||
|
||||
if (message.length() > 510) {
|
||||
log.info("发送的主题 :{}, 内容 :{}",topic, message.substring(0, 500));
|
||||
log.info("111111发送的主题 :{}, 内容 :{}",topic, message.substring(0, 500));
|
||||
}else {
|
||||
log.info("发送的主题 :{}, 内容 :{}",topic, message);
|
||||
log.info("111111发送的主题 :{}, 内容 :{}",topic, message);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,4 +36,6 @@ public class ZnConfigConstant {
|
||||
private Boolean taskNotCheck;
|
||||
private Double checkShortestDistance;
|
||||
private Double checkLongestDistance;
|
||||
private String mapCheckDistance;
|
||||
private String mapArcOffset;
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.system.api.path.PathApi;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapConfigDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapItemNodeDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO;
|
||||
@ -165,4 +166,12 @@ public class PositionMapItemController {
|
||||
map.put("LINE",lineList);
|
||||
return success(map);
|
||||
}
|
||||
|
||||
@GetMapping("/getCheckDistance")
|
||||
@Operation(summary = "获取检测点距离")
|
||||
@PreAuthorize("@ss.hasPermission('system:position-map-item:getCheckDistance')")
|
||||
public CommonResult<PositionMapConfigDTO> getCheckDistance() {
|
||||
PositionMapConfigDTO distance = positionMapItemService.getCheckDistance();
|
||||
return success(distance);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.positionmap.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "地图配置")
|
||||
@Data
|
||||
public class PositionMapConfigDTO {
|
||||
@Schema(description = "库位到检测点距离")
|
||||
private String mapCheckDistance;
|
||||
|
||||
@Schema(description = "弧线偏移量")
|
||||
private String mapArcOffset;
|
||||
}
|
@ -128,7 +128,6 @@ public class RobotInformationController {
|
||||
@Operation(summary = "获得车辆信息分页")
|
||||
@PreAuthorize("@ss.hasPermission('robot:information:list')")
|
||||
public CommonResult<PageResult<RobotInformationPageRespVO>> getRobotList(@Valid RobotInformationPageReqVO pageReqVO) {
|
||||
pageReqVO.setPageSize(300);
|
||||
PageResult<RobotInformationPageRespVO> pageResult = informationService.getInformationPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, RobotInformationPageRespVO.class));
|
||||
}
|
||||
|
@ -61,4 +61,6 @@ public interface RobotTaskDetailActionLogMapper extends BaseMapperX<RobotTaskDet
|
||||
* @return
|
||||
*/
|
||||
List<RobotTaskDetailActionLogDO> getLastTwoTask(@Param("robotNo") String robotNo);
|
||||
|
||||
void alreadyCounted(@Param("ids") List<Long> ids);
|
||||
}
|
@ -92,4 +92,6 @@ public interface RobotInformationMapper extends BaseMapperX<RobotInformationDO>
|
||||
RobotInformationDO selectByRobotNoAndIdNotIn(@Param("robotNo") String robotNo, @Param("id") Long id);
|
||||
|
||||
RobotInformationDO selectByMacAndIdNotIn(@Param("macAddress") String macAddress,@Param("id") Long id);
|
||||
|
||||
void initRobotInformation();
|
||||
}
|
||||
|
@ -167,4 +167,13 @@ public interface RobotTaskDetailMapper extends BaseMapperX<RobotTaskDetailDO> {
|
||||
* @return
|
||||
*/
|
||||
RobotTaskManualInterventionDTO getRobotTaskAutomaticArtificial(@Param("type") String type);
|
||||
|
||||
/**
|
||||
* 清除所有数据
|
||||
*/
|
||||
void truncate();
|
||||
|
||||
List<RobotTaskDetailDO> selectAutoCreateCycleTaskForever();
|
||||
|
||||
void setTaskUnDo(@Param("ids") List<Long> ids);
|
||||
}
|
@ -86,4 +86,11 @@ public interface RobotTaskMapper extends BaseMapperX<RobotTaskDO> {
|
||||
* @return
|
||||
*/
|
||||
List<RobotTaskDO> selectDoingTaskByRobotNo(@Param("robotNo") String robotNo);
|
||||
|
||||
/**
|
||||
* 清除所有数据
|
||||
*/
|
||||
void truncate();
|
||||
|
||||
void setTaskUnDo(@Param("ids") Set<Long> ids);
|
||||
}
|
@ -28,6 +28,6 @@ public enum DurationTypeEnum {
|
||||
|| PathTaskTypeEnum.AUTO_CHARGE.getType().equals(commonType)) {
|
||||
return CHARGE_TIME.type;
|
||||
}
|
||||
return CHARGE_TIME.type;
|
||||
return TASK_TIME.type;
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.job.AutoChargeService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.job.CycleService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.job.DistributeTasksService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.job.InitTaskService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.job.RobotTaskAutoMoveService;
|
||||
import cn.iocoder.yudao.module.system.service.robot.pathplanning.RobotPathPlanningService;
|
||||
import cn.iocoder.yudao.module.system.service.statistics.RobotWorkingHoursStatisticsService;
|
||||
@ -51,6 +52,9 @@ public class RobotJob {
|
||||
@Resource
|
||||
private RobotInformationService informationService;
|
||||
|
||||
@Resource
|
||||
private InitTaskService initTaskService;
|
||||
|
||||
@Resource
|
||||
private RobotWorkingHoursStatisticsService robotWorkingHoursStatisticsService;
|
||||
|
||||
@ -64,13 +68,13 @@ public class RobotJob {
|
||||
locks.add(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey());
|
||||
locks.add(RobotCacheLockEnum.ROBOT_TASK_ADD_LOCK.getKey());
|
||||
RLock lock = redissonUtils.getLocks(locks);
|
||||
if (lock.tryLock()){
|
||||
if (lock.tryLock()) {
|
||||
try {
|
||||
robotTaskAutoMoveService.distributeAutoMoveJob();
|
||||
} finally {
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
log.info("下发自动移库任务未获取到锁");
|
||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||
}
|
||||
@ -82,16 +86,16 @@ public class RobotJob {
|
||||
public void AutoChargeJob() {
|
||||
|
||||
RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey());
|
||||
if (lock.tryLock()){
|
||||
if (lock.tryLock()) {
|
||||
try {
|
||||
log.info("----111111下发自动充电任务----");
|
||||
autoChargeService.autoChargeJob();
|
||||
} catch (Exception e) {
|
||||
log.info("自动充电异常 :{}",e);
|
||||
log.info("自动充电异常 :{}", e);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
log.info("下发自动充电任务未获取到锁");
|
||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||
}
|
||||
@ -105,23 +109,22 @@ public class RobotJob {
|
||||
public void DistributeTasksToPathPlanningJob() {
|
||||
|
||||
RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey());
|
||||
if (lock.tryLock()){
|
||||
if (lock.tryLock()) {
|
||||
try {
|
||||
log.info("----111111下发任务给路径规划----");
|
||||
robotPathPlanningService.sendTaskToPP();
|
||||
} catch (Exception e) {
|
||||
log.info("----分配任务异常---- :{}",e);
|
||||
log.info("----分配任务异常---- :{}", e);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
log.info("下发任务给路径规划未获取到锁");
|
||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 创建循环任务
|
||||
*/
|
||||
@ -130,18 +133,18 @@ public class RobotJob {
|
||||
public void cycleTaskJob() {
|
||||
|
||||
RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_ADD_LOCK.getKey());
|
||||
if (lock.tryLock()){
|
||||
if (lock.tryLock()) {
|
||||
|
||||
try {
|
||||
log.info("----111111创建循环任务----");
|
||||
cycleService.cycleTaskJob();
|
||||
} catch (Exception e) {
|
||||
log.error("创建循环任务异常 :{}",e);
|
||||
log.error("创建循环任务异常 :{}", e);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
|
||||
}else {
|
||||
} else {
|
||||
log.info("下发任务给路径规划未获取到锁");
|
||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||
}
|
||||
@ -156,15 +159,15 @@ public class RobotJob {
|
||||
public void rcsHeartBeat() {
|
||||
|
||||
RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_RCS_HEART_BEAT_LOCK.getKey());
|
||||
if (lock.tryLock()){
|
||||
if (lock.tryLock()) {
|
||||
try {
|
||||
log.info("----维护车机心跳----");
|
||||
TenantContextHolder.setTenantId(1L);
|
||||
informationService.rcsHeartBeat();
|
||||
} finally {
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||
}
|
||||
}
|
||||
@ -176,18 +179,29 @@ public class RobotJob {
|
||||
@TenantJob
|
||||
public void statisticsDuration() {
|
||||
RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_STATISTICS_DURATION_LOCK.getKey());
|
||||
if (lock.tryLock()){
|
||||
if (lock.tryLock()) {
|
||||
try {
|
||||
log.info("----统计时长开始----");
|
||||
TenantContextHolder.setTenantId(1L);
|
||||
robotWorkingHoursStatisticsService.statisticsRobotDuration();
|
||||
} catch (Exception e) {
|
||||
log.info("统计工作时长异常 :{}",e);
|
||||
log.info("统计工作时长异常 :{}", e);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 恢复数据 (只能是测试的时候用,上线禁止使用)
|
||||
*/
|
||||
@XxlJob("initTaskJob")
|
||||
@TenantJob
|
||||
public void initTaskJob() {
|
||||
TenantContextHolder.setTenantId(1L);
|
||||
initTaskService.initTask();
|
||||
}
|
||||
}
|
||||
|
@ -178,7 +178,7 @@ public class HouseAreaServiceImpl extends ServiceImpl<HouseAreaMapper, HouseArea
|
||||
for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
|
||||
wareHouseLocationDO.setAreaId(null);
|
||||
wareHouseLocationDO.setAreaName(null);
|
||||
wareHouseLocationDO.setSkuInfo(null);
|
||||
// wareHouseLocationDO.setSkuInfo(null);
|
||||
}
|
||||
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
|
||||
}
|
||||
|
@ -90,4 +90,8 @@ public interface RobotTaskDetailActionLogService {
|
||||
* @return
|
||||
*/
|
||||
RobotTaskDetailActionLogDO getOriginalLastTaskByRobotNo(String robotNo);
|
||||
|
||||
void alreadyCounted(List<Long> logIds);
|
||||
|
||||
RobotTaskDetailActionLogDO getLastActionLogByDetailId(Long taskDetailId);
|
||||
}
|
@ -141,4 +141,18 @@ public class RobotTaskDetailActionLogServiceImpl implements RobotTaskDetailActio
|
||||
.last("limit 1"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void alreadyCounted(List<Long> logIds) {
|
||||
taskDetailActionLogMapper.alreadyCounted(logIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public RobotTaskDetailActionLogDO getLastActionLogByDetailId(Long taskDetailId) {
|
||||
return taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX<RobotTaskDetailActionLogDO>()
|
||||
.eq(RobotTaskDetailActionLogDO::getTaskDetailId, taskDetailId)
|
||||
.eq(RobotTaskDetailActionLogDO::getCommandId, CommandIdEnum.TASK.getType())
|
||||
.orderByDesc(RobotTaskDetailActionLogDO::getCreateTime)
|
||||
.last("limit 1"));
|
||||
}
|
||||
|
||||
}
|
@ -174,6 +174,12 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
||||
assembleDataToPP(relatedPathNode, positionMapLineDOS);
|
||||
}
|
||||
|
||||
try {
|
||||
Thread.sleep(2000);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
// commonApi.commonMethod(new PositionMapLineDTO(), PathPlanningTopicConstant.SYNCHRONOUS_ALL_MAP_LINE_END);
|
||||
mqttUtils.pub(PathPlanningTopicConstant.SYNCHRONOUS_ALL_MAP_LINE_END,JSON.toJSONString(new PositionMapLineDO()));
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.service.positionmap;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapConditionDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapConfigDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||
@ -151,4 +152,6 @@ public interface PositionMapItemService extends IService<PositionMapItemDO> {
|
||||
* @param mapId
|
||||
*/
|
||||
void checkHaveBindChangePoint(Long mapId);
|
||||
|
||||
PositionMapConfigDTO getCheckDistance();
|
||||
}
|
||||
|
@ -7,9 +7,11 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
|
||||
import cn.iocoder.yudao.module.system.config.poperties.ZnConfigConstant;
|
||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapConditionDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapConfigDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotWarnMsgSaveReqVO;
|
||||
@ -26,6 +28,7 @@ import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -66,6 +69,9 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
||||
@Resource
|
||||
private PositionChangePointBindingMapper positionChangePointBindingMapper;
|
||||
|
||||
@Autowired
|
||||
private ZnConfigConstant znConfigConstant;
|
||||
|
||||
@Override
|
||||
public Long createPositionMapItem(PositionMapItemSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
@ -267,4 +273,12 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
||||
throw exception(MAP_EXIST_BINDING_POINT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PositionMapConfigDTO getCheckDistance() {
|
||||
PositionMapConfigDTO configDTO = new PositionMapConfigDTO();
|
||||
configDTO.setMapCheckDistance(znConfigConstant.getMapCheckDistance());
|
||||
configDTO.setMapArcOffset(znConfigConstant.getMapArcOffset());
|
||||
return configDTO;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -262,4 +262,7 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
||||
void stopRobot(String robotNo);
|
||||
|
||||
void continueRobot(String robotNo);
|
||||
|
||||
void initRobotInformation();
|
||||
|
||||
}
|
||||
|
@ -362,7 +362,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
.last("limit 1"));
|
||||
|
||||
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
||||
robotTask.setOrderId(robotInformationDO.getTaskDetailId()+"");
|
||||
robotTask.setOrderId(robotInformationDO.getTaskDetailId() + "");
|
||||
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + robotInformationDO.getMacAddress());
|
||||
robotTask.setExecutionType(ExecutionTypeEnum.PAUSE.getType());
|
||||
mqttUtils.pub(robotTask.getTopic(), JSON.toJSONString(robotTask));
|
||||
@ -377,13 +377,18 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
.last("limit 1"));
|
||||
|
||||
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
||||
robotTask.setOrderId(robotInformationDO.getTaskDetailId()+"");
|
||||
robotTask.setOrderId(robotInformationDO.getTaskDetailId() + "");
|
||||
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + robotInformationDO.getMacAddress());
|
||||
robotTask.setExecutionType(ExecutionTypeEnum.CONTINUE.getType());
|
||||
mqttUtils.pub(robotTask.getTopic(), JSON.toJSONString(robotTask));
|
||||
mapStopService.rcsDeleteStopRobotAddLog(robotNo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initRobotInformation() {
|
||||
informationMapper.initRobotInformation();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 校验IP地址是否合法
|
||||
@ -438,8 +443,8 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
if (RobotStatusEnum.STOP_FREE.getType().equals(updateReqVO.getRobotStatus())
|
||||
|| RobotStatusEnum.STOP_DOING.getType().equals(updateReqVO.getRobotStatus())) {
|
||||
updateReqVO.setRobotStatus(robotInformationDO.getRobotStatus());
|
||||
}else if (!updateReqVO.getRobotStatus().equals(robotInformationDO.getRobotStatus())) {
|
||||
str = str + " 修改车辆状态: " +RobotStatusEnum.getMsg(updateReqVO.getRobotStatus());
|
||||
} else if (!updateReqVO.getRobotStatus().equals(robotInformationDO.getRobotStatus())) {
|
||||
str = str + " 修改车辆状态: " + RobotStatusEnum.getMsg(updateReqVO.getRobotStatus());
|
||||
}
|
||||
|
||||
if (!updateReqVO.getRobotNo().equals(robotInformationDO.getRobotNo())) {
|
||||
@ -698,6 +703,16 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
|
||||
List<RobotCameraAddVO> cameraAddVOList = cameraService.getCameraByRobotNo(robotInformationDO.getRobotNo());
|
||||
bean.setCameraAddVOList(cameraAddVOList);
|
||||
|
||||
List<RobotMapStopDO> stopRobotNoByRobotNo = mapStopService.getStopRobotNoByRobotNo(robotInformationDO.getRobotNo());
|
||||
if (ObjectUtil.isEmpty(stopRobotNoByRobotNo)) {
|
||||
return bean;
|
||||
} else if (RobotStatusEnum.STAND_BY.getType().equals(robotInformationDO.getRobotStatus())) {
|
||||
robotInformationDO.setRobotStatus(RobotStatusEnum.STOP_FREE.getType());
|
||||
} else {
|
||||
robotInformationDO.setRobotStatus(RobotStatusEnum.STOP_DOING.getType());
|
||||
}
|
||||
|
||||
return bean;
|
||||
}
|
||||
|
||||
@ -712,11 +727,19 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
|
||||
@Override
|
||||
public PageResult<RobotInformationPageRespVO> getInformationPage(RobotInformationPageReqVO pageReqVO) {
|
||||
PageResult<RobotInformationDO> pageResult = informationMapper.selectPage(pageReqVO);
|
||||
List<RobotInformationDO> list = informationMapper.selectList(new LambdaQueryWrapperX<RobotInformationDO>()
|
||||
.eqIfPresent(RobotInformationDO::getRobotModelId, pageReqVO.getRobotModelId())
|
||||
.eqIfPresent(RobotInformationDO::getRobotModelNumber, pageReqVO.getRobotModelNumber())
|
||||
.likeIfPresent(RobotInformationDO::getRobotNo, pageReqVO.getRobotNo())
|
||||
.eqIfPresent(RobotInformationDO::getRobotTaskModel, pageReqVO.getRobotTaskModel())
|
||||
.eqIfPresent(RobotInformationDO::getMacAddress, pageReqVO.getMacAddress())
|
||||
.eqIfPresent(RobotInformationDO::getRobotStatus, pageReqVO.getRobotStatus())
|
||||
.betweenIfPresent(RobotInformationDO::getCreateTime, pageReqVO.getCreateTime())
|
||||
.orderByDesc(RobotInformationDO::getId));
|
||||
|
||||
PageResult<RobotInformationPageRespVO> dataPage = new PageResult<>();
|
||||
dataPage.setTotal(pageResult.getTotal());
|
||||
List<RobotInformationDO> list = pageResult.getList();
|
||||
Long total = ObjectUtil.isEmpty(list) ? 0L : list.size();
|
||||
dataPage.setTotal(total);
|
||||
List<RobotInformationPageRespVO> targetList = BeanUtil.copyToList(list, RobotInformationPageRespVO.class);
|
||||
|
||||
List<RobotMapStopDO> allRobotMapStops = mapStopService.getAllRobotMapStops(ZeroOneEnum.ONE.getType());
|
||||
@ -726,7 +749,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
}
|
||||
|
||||
for (RobotInformationPageRespVO v : targetList) {
|
||||
setMsgAndRobotStatus(v,stopRobotNos);
|
||||
setMsgAndRobotStatus(v, stopRobotNos);
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(pageReqVO.getRobotStatisticsType())) {
|
||||
@ -789,7 +812,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
*
|
||||
* @param v
|
||||
*/
|
||||
private void setMsgAndRobotStatus(RobotInformationPageRespVO v,List<String> stopRobotNos) {
|
||||
private void setMsgAndRobotStatus(RobotInformationPageRespVO v, List<String> stopRobotNos) {
|
||||
|
||||
if (ObjectUtil.isNotEmpty(stopRobotNos) && stopRobotNos.contains(v.getRobotNo())) {
|
||||
v.setIsStop(ZeroOneEnum.ONE.getType());
|
||||
@ -1220,7 +1243,14 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void doTaskContinue(String robotNo, Boolean isRobot) {
|
||||
|
||||
RobotTaskDetailActionLogDO actionLog = taskDetailActionLogService.getOriginalLastTaskByRobotNo(robotNo);
|
||||
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
||||
.eq(RobotInformationDO::getRobotNo, robotNo)
|
||||
.last("limit 1"));
|
||||
if (ObjectUtil.isEmpty(robotInformationDO.getTaskDetailId())) {
|
||||
throw exception(ROBOT_LAST_TASK_NO_EXISTS);
|
||||
}
|
||||
|
||||
RobotTaskDetailActionLogDO actionLog = taskDetailActionLogService.getLastActionLogByDetailId(robotInformationDO.getTaskDetailId());
|
||||
if (ObjectUtil.isEmpty(actionLog)) {
|
||||
throw exception(ROBOT_LAST_TASK_NO_EXISTS);
|
||||
}
|
||||
@ -1230,10 +1260,6 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
TASK_ASSIGN_OTHER_ROBOT.getMsg() + actionLog.getRobotNo());
|
||||
}
|
||||
|
||||
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
||||
.eq(RobotInformationDO::getRobotNo, robotNo)
|
||||
.last("limit 1"));
|
||||
|
||||
if (RobotTaskModelEnum.REJECTION.getType().equals(robotInformationDO.getRobotTaskModel())) {
|
||||
throw exception(ROBOT_REJECTION);
|
||||
}
|
||||
@ -1241,11 +1267,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
String mac = getMacByRobotNo(robotNo);
|
||||
robotCloseTaskDetail(actionLog.getTaskDetailId() + "", mac, actionLog.getCommandType());
|
||||
|
||||
if (!znConfigConstant.getIsSimulation()) {
|
||||
checkTaskDone(actionLog.getTaskDetailId() + "");
|
||||
}
|
||||
checkTaskDone(actionLog.getTaskDetailId() + "");
|
||||
|
||||
CleanAgvDTO build = CleanAgvDTO.builder().robotNo(robotNo).build();
|
||||
// CleanAgvDTO build = CleanAgvDTO.builder().robotNo(robotNo).build();
|
||||
// commonApi.commonMethod(build, PathPlanningTopicConstant.CLEAN_AGV);
|
||||
// mqttUtils.pub(PathPlanningTopicConstant.CLEAN_AGV, JSON.toJSONString(build));
|
||||
|
||||
@ -1325,15 +1349,14 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
String plantingKey = PathPlanningChcheConstant.PATH_PLANNING_TASK + pathPlanning.getOrderId();
|
||||
redisUtil.set(plantingKey, JSON.toJSONString(pathPlanning), znConfigConstant.getTask().getTaskCacheTime());
|
||||
|
||||
log.info("任务下发给PP :{}", JSON.toJSONString(pathPlanningList));
|
||||
// commonApi.commonMethod(pathPlanningList, PathPlanningTopicConstant.TASK_ASSIGNMENT_REQUEST);
|
||||
log.info("111111恢复任务下发给PP :{}", JSON.toJSONString(pathPlanningList));
|
||||
mqttUtils.pub(PathPlanningTopicConstant.TASK_ASSIGNMENT_REQUEST, JSON.toJSONString(pathPlanningList));
|
||||
}
|
||||
|
||||
private void resendToPPData(TaskToPathPlanningDTO pathPlanning, RobotTaskDetailActionLogDO actionLog, RobotInformationDO robotInformationDO, Boolean isRemote) {
|
||||
if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(actionLog.getCommandType())
|
||||
|| PathTaskTypeEnum.MOVE_TO_WAIT_STOP.getType().equals(actionLog.getCommandType())) {
|
||||
moveToWaitTask(pathPlanning, actionLog.getRobotNo());
|
||||
moveToWaitTask(pathPlanning, robotInformationDO.getRobotNo());
|
||||
} else if (PathTaskTypeEnum.CHARGE.getType().equals(actionLog.getCommandType())
|
||||
|| PathTaskTypeEnum.AUTO_CHARGE.getType().equals(actionLog.getCommandType())) {
|
||||
chargeTask(pathPlanning, robotInformationDO);
|
||||
@ -1642,7 +1665,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
List<RobotInformationDO> robotInformationDOS = informationMapper.selectList(new LambdaQueryWrapperX<RobotInformationDO>()
|
||||
.in(RobotInformationDO::getRobotNo, robotNos));
|
||||
for (RobotInformationDO robotInformationDO : robotInformationDOS) {
|
||||
robotSimulationPose.setOrderId(robotInformationDO.getTaskDetailId()+"");
|
||||
robotSimulationPose.setOrderId(robotInformationDO.getTaskDetailId() + "");
|
||||
mqttUtils.pub(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + robotInformationDO.getMacAddress(), JSON.toJSONString(robotSimulationPose));
|
||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||
.operateAction(str + robotInformationDO.getRobotNo())
|
||||
@ -1772,6 +1795,10 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
||||
|
||||
TaskToPathPlanningDTO pathPlanning = JSONUtil.toBean((String) o, TaskToPathPlanningDTO.class);
|
||||
|
||||
robotInformationDO.setTaskDetailId(id);
|
||||
robotInformationDO.setRobotStatus(RobotStatusEnum.DOING.getType());
|
||||
informationMapper.updateById(robotInformationDO);
|
||||
|
||||
TaskRobotNoLimittationAreaDTO taskRobotNoLimittationAreaDTO =
|
||||
robotPathPlanningService.getRobotNoLimitationArea(Collections.singletonList(robotInformationDO)).get(0);
|
||||
|
||||
|
@ -230,7 +230,7 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
.id(robotTaskDetailDO.getId().toString())
|
||||
.build();
|
||||
// commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK);
|
||||
mqttUtils.pub(PathPlanningTopicConstant.KILL_TASK,JSON.toJSONString(closePathPlanting));
|
||||
mqttUtils.pub(PathPlanningTopicConstant.KILL_TASK, JSON.toJSONString(closePathPlanting));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -258,18 +258,28 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
|| RobotTaskStageEnum.GO_TAKE.getType().equals(detailDO.getTaskStage())
|
||||
|| RobotTaskStageEnum.TAKEING.getType().equals(detailDO.getTaskStage())) {
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING_EXCEPTION.getType());
|
||||
}else {
|
||||
} else {
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING_EXCEPTION.getType());
|
||||
}
|
||||
} else if(RobotTaskTypeEnum.TAKE.getType().equals(detailDO.getTaskType())) {
|
||||
} else if (RobotTaskTypeEnum.TAKE.getType().equals(detailDO.getTaskType())) {
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING_EXCEPTION.getType());
|
||||
}else if(RobotTaskTypeEnum.RELEASE.getType().equals(detailDO.getTaskType())) {
|
||||
} else if (RobotTaskTypeEnum.RELEASE.getType().equals(detailDO.getTaskType())) {
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING_EXCEPTION.getType());
|
||||
}else {
|
||||
} else {
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.EXCEPTION.getType());
|
||||
}
|
||||
robotTaskDetailDO.setOccurError(ZeroOneEnum.ONE.getType());
|
||||
taskDetailMapper.updateById(robotTaskDetailDO);
|
||||
taskDetailMapper.updateRobotDetailById(robotTaskDetailDO);
|
||||
|
||||
List<RobotTaskDetailDO> taskDetailDOS = taskDetailMapper.selectList(new LambdaQueryWrapperX<RobotTaskDetailDO>()
|
||||
.eq(RobotTaskDetailDO::getRobotTaskId, detailDO.getRobotTaskId()));
|
||||
if (taskDetailDOS.size() > 1) {
|
||||
return;
|
||||
}
|
||||
RobotTaskDO robotTaskDO = new RobotTaskDO();
|
||||
robotTaskDO.setId(detailDO.getRobotTaskId());
|
||||
robotTaskDO.setTaskStatus(RobotTaskDetailStatusEnum.ABNORMAL.getType());
|
||||
robotTaskMapper.updateRobot(robotTaskDO);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -533,9 +533,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
||||
if (ObjectUtil.isEmpty(cargoDetected) || RobotStatusCodeConstant.CARGO_DETECTED.equals(cargoDetected)) {
|
||||
robotInformationDO.setRobotTaskModel(RobotTaskModelEnum.REJECTION.getType());
|
||||
}*/
|
||||
//因为机器人如果正在抬叉取货,这时把任务取消,如果货叉刚好伸到托盘底下,还是需要人为控制
|
||||
// robotInformationDO.setRobotTaskModel(RobotTaskModelEnum.REJECTION.getType());
|
||||
robotInformationDO.setRobotStatus(RobotStatusEnum.STAND_BY.getType());
|
||||
// robotInformationDO.setRobotStatus(RobotStatusEnum.STAND_BY.getType());
|
||||
}
|
||||
|
||||
informationMapper.updateById(robotInformationDOS);
|
||||
@ -1687,6 +1686,9 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
||||
case RELEASE:
|
||||
msg = "放货点 " + robotTaskRespVO.getToLocationNo();
|
||||
break;
|
||||
case MOVE_TO_POINT:
|
||||
msg = "移动到点位 " + robotTaskRespVO.getToLocationNo();
|
||||
break;
|
||||
default:
|
||||
log.error("任务类型不存在");
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -94,7 +95,7 @@ public class CycleServiceImpl implements CycleService {
|
||||
List<RobotTaskDO> taskDOList = new ArrayList<>();
|
||||
List<RobotTaskDetailDO> taskDetailList = new LinkedList<>();
|
||||
for (RobotTaskDO v : taskList) {
|
||||
String incrementByKey = redisUtil.getIncrementByKey(RobotCacheLockEnum.TASK_NO.getKey());
|
||||
String incrementByKey = redisUtil.getIncrementByKey(RobotCacheLockEnum.MOVE_TASK_NO.getKey());
|
||||
RobotTaskDO taskData = getTaskData(incrementByKey, v);
|
||||
List<RobotTaskDetailDO> taskDetailDOS = getTaskDetailData(taskData,taskIdMap,v.getId());
|
||||
taskDOList.add(taskData);
|
||||
@ -136,6 +137,22 @@ public class CycleServiceImpl implements CycleService {
|
||||
robotTaskService.addCycle(k,v);
|
||||
});
|
||||
taskCycleMapper.deletByRobotTaskIds(taskIds);
|
||||
setTaskUnDo();
|
||||
}
|
||||
|
||||
public void setTaskUnDo() {
|
||||
List<RobotTaskDetailDO> detailDOS = taskDetailMapper.selectAutoCreateCycleTaskForever();
|
||||
if (ObjectUtil.isEmpty(detailDOS)) {
|
||||
return;
|
||||
}
|
||||
List<Long> detailIds = new ArrayList<>();
|
||||
Set<Long> taskIds = new HashSet<>();
|
||||
for (RobotTaskDetailDO detail : detailDOS) {
|
||||
detailIds.add(detail.getId());
|
||||
taskIds.add(detail.getRobotTaskId());
|
||||
}
|
||||
taskDetailMapper.setTaskUnDo(detailIds);
|
||||
taskMapper.setTaskUnDo(taskIds);
|
||||
}
|
||||
|
||||
private List<RobotTaskDetailDO> getTaskDetailData(RobotTaskDO taskData, Map<Long,
|
||||
@ -194,7 +211,7 @@ public class CycleServiceImpl implements CycleService {
|
||||
* @return
|
||||
*/
|
||||
public RobotTaskDO getTaskData(String incrementByKey, RobotTaskDO v ) {
|
||||
String taskNoStr = znConfigConstant.getTaskNo() + DateUtils.getYearMonthDay() + incrementByKey;
|
||||
String taskNoStr = znConfigConstant.getMoveNo() + DateUtils.getYearMonthDay() + incrementByKey;
|
||||
RobotTaskDO task = new RobotTaskDO();
|
||||
BeanUtils.copyProperties(v, task);
|
||||
task.setRemainingCycleNumber(v.getRemainingCycleNumber() - 1);
|
||||
|
@ -80,11 +80,11 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
||||
CommonConfigDO commonConfigDO = configMapper.selectOne(new LambdaQueryWrapper<CommonConfigDO>()
|
||||
.eq(CommonConfigDO::getConfigType, CommandConfigTypeEnum.CHARG_CONFIG.getType()));
|
||||
|
||||
Boolean needDoCharge = needDoCharge(commonConfigDO);
|
||||
/*Boolean needDoCharge = needDoCharge(commonConfigDO);
|
||||
if (needDoCharge) {
|
||||
log.info("所有机器人都需要去执行充电任务");
|
||||
return pair;
|
||||
}
|
||||
}*/
|
||||
|
||||
List<String> remoteRobotNos = controllerInformationMapper.getRemoteControllerRobotNos();
|
||||
log.info("远遥中的车辆 :{}",JSON.toJSONString(remoteRobotNos));
|
||||
@ -123,6 +123,13 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
||||
}
|
||||
|
||||
|
||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT + robot.getMacAddress();
|
||||
Object pose = redisUtil.get(pose2dKey);
|
||||
if (ObjectUtil.isEmpty(pose)) {
|
||||
log.info("车辆没有点位信息 :{}",robot.getRobotNo());
|
||||
continue;
|
||||
}
|
||||
|
||||
//取货的,先执行放货再去充电
|
||||
/*if (ObjectUtil.isNotEmpty(lastTaskDetailMap) && ObjectUtil.isNotEmpty(lastTaskDetailMap.get(robot.getRobotNo()))) {
|
||||
robot.setRobotStatus(RobotStatusEnum.LAST_TASK_IS_TAKE.getType());
|
||||
|
@ -0,0 +1,6 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot.job;
|
||||
|
||||
public interface InitTaskService {
|
||||
void initTask();
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot.job;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class InitTaskServiceImpl implements InitTaskService{
|
||||
|
||||
@Resource
|
||||
private RobotTaskDetailMapper taskDetailMapper;
|
||||
|
||||
@Resource
|
||||
private RobotTaskMapper robotTaskMapper;
|
||||
|
||||
@Resource
|
||||
private RobotInformationService informationService;
|
||||
|
||||
@Override
|
||||
public void initTask() {
|
||||
log.info("将任务清除,上线时候,禁止使用");
|
||||
List<RobotTaskDetailDO> taskDetailDOS = taskDetailMapper.selectList(new LambdaQueryWrapperX<RobotTaskDetailDO>()
|
||||
.eq(RobotTaskDetailDO::getTaskStatus, RobotTaskStatusEnum.DOING.getType()));
|
||||
if (ObjectUtil.isNotEmpty(taskDetailDOS)) {
|
||||
for (RobotTaskDetailDO taskDetail : taskDetailDOS) {
|
||||
String mac = informationService.getMacByRobotNo(taskDetail.getRobotNo());
|
||||
informationService.robotCloseTaskDetail(String.valueOf(taskDetail.getId()), mac, "");
|
||||
}
|
||||
}
|
||||
|
||||
taskDetailMapper.truncate();
|
||||
robotTaskMapper.truncate();
|
||||
informationService.initRobotInformation();
|
||||
}
|
||||
}
|
@ -120,7 +120,7 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
|
||||
@Override
|
||||
public List<String> getStopRobotNoByMapIds(Long id) {
|
||||
List<RobotMapStopDO> positionMapItems = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
|
||||
.eq(RobotMapStopDO::getStopType, ZeroOneEnum.ZERO.getType())
|
||||
.eq(RobotMapStopDO::getStopType, ZeroOneEnum.ONE.getType())
|
||||
.eq(RobotMapStopDO::getPositionMapId, id));
|
||||
if (ObjectUtil.isEmpty(positionMapItems)) {
|
||||
return new ArrayList<>();
|
||||
|
@ -83,6 +83,9 @@ public class RobotWorkingHoursStatisticsServiceImpl extends ServiceImpl<RobotWor
|
||||
&& RobotStatusEnum.STAND_BY.getType().equals(robot.getRobotStatus())) {
|
||||
RobotWorkingHoursStatisticsDO statisticsDO = new RobotWorkingHoursStatisticsDO();
|
||||
statisticsDO.setDuration(getMinutes(freeTimeObject));
|
||||
if (statisticsDO.getDuration() == 0) {
|
||||
continue;
|
||||
}
|
||||
statisticsDO.setRobotNo(robot.getRobotNo());
|
||||
Long mapId = informationService.getRobotMapIdByRobotNo(robot.getRobotNo());
|
||||
if (ObjectUtil.isNotEmpty(mapId)) {
|
||||
@ -112,11 +115,14 @@ public class RobotWorkingHoursStatisticsServiceImpl extends ServiceImpl<RobotWor
|
||||
if (ObjectUtil.isNotEmpty(statisticsDOS)) {
|
||||
robotWorkingHoursStatisticsMapper.insertBatch(statisticsDOS);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建这台车的空闲时间
|
||||
* 别改事务传播
|
||||
*
|
||||
* @param robotNo
|
||||
*/
|
||||
@Override
|
||||
@ -164,15 +170,15 @@ public class RobotWorkingHoursStatisticsServiceImpl extends ServiceImpl<RobotWor
|
||||
|
||||
List<RobotWorkHourStatisticsDTO> list = new ArrayList<>();
|
||||
|
||||
robotMap.forEach((k,v) ->{
|
||||
robotMap.forEach((k, v) -> {
|
||||
RobotWorkHourStatisticsDTO statisticsDTO = new RobotWorkHourStatisticsDTO();
|
||||
statisticsDTO.setRobotNo(k);
|
||||
Long freeTime = v.get(DurationTypeEnum.FREE_TIME.getType());
|
||||
String freeTimeStr = ObjectUtil.isNotEmpty(freeTime) ? String.format("%.1f",(freeTime.doubleValue() / 60)) : "0";
|
||||
String freeTimeStr = ObjectUtil.isNotEmpty(freeTime) ? String.format("%.1f", (freeTime.doubleValue() / 60)) : "0";
|
||||
Long taskTime = v.get(DurationTypeEnum.TASK_TIME.getType());
|
||||
String taskTimeStr = ObjectUtil.isNotEmpty(taskTime) ? String.format("%.1f",(taskTime.doubleValue() / 60)) : "0";
|
||||
String taskTimeStr = ObjectUtil.isNotEmpty(taskTime) ? String.format("%.1f", (taskTime.doubleValue() / 60)) : "0";
|
||||
Long chargeTime = v.get(DurationTypeEnum.CHARGE_TIME.getType());
|
||||
String chargeTimeStr = ObjectUtil.isNotEmpty(chargeTime) ? String.format("%.1f",(chargeTime.doubleValue() / 60)) : "0";
|
||||
String chargeTimeStr = ObjectUtil.isNotEmpty(chargeTime) ? String.format("%.1f", (chargeTime.doubleValue() / 60)) : "0";
|
||||
|
||||
statisticsDTO.setFreeTimeNum(freeTimeStr);
|
||||
statisticsDTO.setTaskTimeNum(taskTimeStr);
|
||||
@ -201,6 +207,9 @@ public class RobotWorkingHoursStatisticsServiceImpl extends ServiceImpl<RobotWor
|
||||
private List<RobotWorkingHoursStatisticsDO> getWorkingHoursStatisticsByActionLog(List<RobotTaskDetailActionLogDO> actionLogList) {
|
||||
List<RobotWorkingHoursStatisticsDO> statisticsDOList = new ArrayList<>();
|
||||
|
||||
List<Long> logIds = new ArrayList<>();
|
||||
|
||||
Map<String, RobotWorkingHoursStatisticsDO> map = new HashMap<>();
|
||||
for (RobotTaskDetailActionLogDO v : actionLogList) {
|
||||
RobotWorkingHoursStatisticsDO statisticsDO = new RobotWorkingHoursStatisticsDO();
|
||||
if (ObjectUtil.isNotEmpty(v.getDuration())) {
|
||||
@ -215,9 +224,21 @@ public class RobotWorkingHoursStatisticsServiceImpl extends ServiceImpl<RobotWor
|
||||
statisticsDO.setPositionMapId(v.getPositionMapId());
|
||||
Integer durationTypeByTaskType = DurationTypeEnum.getDurationTypeByTaskType(v.getCommandType());
|
||||
statisticsDO.setDurationType(durationTypeByTaskType);
|
||||
statisticsDOList.add(statisticsDO);
|
||||
logIds.add(v.getId());
|
||||
String key = statisticsDO.getRobotNo() + "-" + statisticsDO.getPositionMapId() + "-" + statisticsDO.getDurationType();
|
||||
RobotWorkingHoursStatisticsDO statistics = map.get(key);
|
||||
if (ObjectUtil.isNotEmpty(statistics)) {
|
||||
statistics.setDuration(statistics.getDuration()+statisticsDO.getDuration());
|
||||
} else {
|
||||
statisticsDOList.add(statisticsDO);
|
||||
}
|
||||
}
|
||||
|
||||
if (ObjectUtil.isEmpty(logIds)) {
|
||||
return statisticsDOList;
|
||||
}
|
||||
|
||||
taskDetailActionLogService.alreadyCounted(logIds);
|
||||
return statisticsDOList;
|
||||
}
|
||||
|
||||
|
@ -191,7 +191,7 @@ zn:
|
||||
camera_secret_key: A2C4rv7DY012c9ef #摄像头秘钥
|
||||
do_cycle: true #是否开启循环
|
||||
lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库
|
||||
robot_position_cache_time: 10000000 #机器人上报点位存储时间(秒)
|
||||
robot_position_cache_time: 3 #机器人上报点位存储时间(秒)
|
||||
cycle_do_auto_move: true #存在循环的任务,是否开启自动移库. true:存在循环任务,开启自动移库; false:有循环任务不自动移库
|
||||
full_electricity: 95 #机器人充满电的电量
|
||||
task_need_single: true #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人)
|
||||
@ -214,6 +214,8 @@ zn:
|
||||
task_not_check: true # 创建任务不校验
|
||||
check_shortest_distance: 1.5 # 检测点最短距离
|
||||
check_longest_distance: 3.0 # 检测点最长距离
|
||||
map_check_distance: 2.2 #检测点成成距离
|
||||
map_arc_offset: 15 #地图弧线距离
|
||||
|
||||
|
||||
#海康威视的相关配置
|
||||
|
@ -226,7 +226,7 @@ zn:
|
||||
camera_secret_key: A2C4rv7DY012c9ef #摄像头秘钥
|
||||
do_cycle: true #是否开启循环
|
||||
lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库
|
||||
robot_position_cache_time: 10000000 #机器人上报点位存储时间(秒)
|
||||
robot_position_cache_time: 3 #机器人上报点位存储时间(秒)
|
||||
cycle_do_auto_move: true #存在循环的任务,是否开启自动移库. true:存在循环任务,开启自动移库; false:有循环任务不自动移库
|
||||
full_electricity: 95 #机器人充满电的电量
|
||||
task_need_single: true #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人)
|
||||
@ -240,7 +240,7 @@ zn:
|
||||
check_sku_info: true #校验物料信息
|
||||
task_cache_time: 1209600 #任务缓存的时间, 默认一星期
|
||||
robot_config: #机器人取放货默认配置
|
||||
offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度
|
||||
offset_height: 0.15 #叉起货需要在原来高度基础上偏移的高度
|
||||
default_tray_height: 0.82 #默认每层高度
|
||||
open_rate_limiter: true #是否开启限流
|
||||
is_simulation: false # 是否为仿真环境
|
||||
@ -249,6 +249,8 @@ zn:
|
||||
task_not_check: true # 创建任务不校验
|
||||
check_shortest_distance: 1.5 # 检测点最短距离
|
||||
check_longest_distance: 3.0 # 检测点最长距离
|
||||
map_check_distance: 2.2 #检测点成成距离
|
||||
map_arc_offset: 15 #地图弧线距离
|
||||
|
||||
logging:
|
||||
file:
|
||||
|
@ -219,7 +219,7 @@ zn:
|
||||
camera_secret_key: A2C4rv7DY012c9ef #摄像头秘钥
|
||||
do_cycle: true #是否开启循环
|
||||
lane_auto_move: true #线库是否自动移库 true:线库执行自动移库 、false:线库关闭执行自动移库
|
||||
robot_position_cache_time: 10000000 #机器人上报点位存储时间(秒)
|
||||
robot_position_cache_time: 3 #机器人上报点位存储时间(秒)
|
||||
cycle_do_auto_move: true #存在循环的任务,是否开启自动移库. true:存在循环任务,开启自动移库; false:有循环任务不自动移库
|
||||
full_electricity: 95 #机器人充满电的电量
|
||||
task_need_single: true #机器人对同一线库/点位是不是只能有一台机器人做任务 (true:一个点位/线库,只有一台机器人)
|
||||
@ -242,6 +242,8 @@ zn:
|
||||
task_not_check: true # 创建任务不校验
|
||||
check_shortest_distance: 1.5 # 检测点最短距离
|
||||
check_longest_distance: 3.0 # 检测点最长距离
|
||||
map_check_distance: 2.2 #检测点成成距离
|
||||
map_arc_offset: 15 #地图弧线距离
|
||||
|
||||
#海康威视的相关配置
|
||||
isc:
|
||||
|
@ -537,8 +537,8 @@
|
||||
ware_house_location
|
||||
set
|
||||
area_name = null,
|
||||
area_id = null,
|
||||
sku_info = null
|
||||
area_id = null
|
||||
-- sku_info = null
|
||||
where
|
||||
area_id = #{areaId}
|
||||
</update>
|
||||
|
@ -147,6 +147,15 @@
|
||||
robot_no = #{robotNo}
|
||||
</update>
|
||||
|
||||
<update id="initRobotInformation">
|
||||
update
|
||||
robot_information
|
||||
set
|
||||
robot_status = '3',
|
||||
robot_task_model = '1'
|
||||
where deleted = '0'
|
||||
</update>
|
||||
|
||||
<!--通过主键删除-->
|
||||
<delete id="deleteById">
|
||||
delete
|
||||
|
@ -19,6 +19,19 @@
|
||||
task_detail_id = #{taskDetailId}
|
||||
and command_id = '-1'
|
||||
</update>
|
||||
|
||||
<update id="alreadyCounted">
|
||||
update
|
||||
robot_task_detail_action_log
|
||||
set already_counted = '1'
|
||||
where
|
||||
id in
|
||||
<foreach collection="ids" item="id" index="index" open="(" close=")"
|
||||
separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<select id="getMistakeTaskByCommandType"
|
||||
resultType="cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO">
|
||||
select
|
||||
@ -45,7 +58,7 @@
|
||||
from
|
||||
robot_task_detail_action_log
|
||||
where
|
||||
command_id != '-1'
|
||||
command_id is null
|
||||
and deleted = '0'
|
||||
and already_counted = '0'
|
||||
and create_time >= DATE_SUB(NOW(), INTERVAL 48 HOUR)
|
||||
@ -61,5 +74,6 @@
|
||||
and deleted = '0'
|
||||
and robot_no = #{robotNo}
|
||||
order by create_time desc
|
||||
limit 2
|
||||
</select>
|
||||
</mapper>
|
@ -227,7 +227,8 @@
|
||||
robot_task_detail t1, robot_task t2
|
||||
where
|
||||
t2.id = t1.robot_task_id
|
||||
and t2.remaining_cycle_number > 1
|
||||
and t2.remaining_cycle_number > 0
|
||||
and t2.remaining_cycle_number != 1000000
|
||||
and t2.task_status = '2'
|
||||
and t1.task_status = '2'
|
||||
and t1.deleted = '0'
|
||||
@ -381,6 +382,20 @@
|
||||
</choose>
|
||||
</where>
|
||||
</select>
|
||||
<select id="selectAutoCreateCycleTaskForever"
|
||||
resultType="cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO">
|
||||
select
|
||||
t1.*
|
||||
from
|
||||
robot_task_detail t1, robot_task t2
|
||||
where
|
||||
t2.id = t1.robot_task_id
|
||||
and t2.remaining_cycle_number = 1000000
|
||||
and t2.task_status = '2'
|
||||
and t1.task_status = '2'
|
||||
and t1.deleted = '0'
|
||||
and t2.deleted = '0'
|
||||
</select>
|
||||
|
||||
|
||||
<!--通过主键修改数据-->
|
||||
@ -447,6 +462,9 @@
|
||||
<if test="updateTime != null">
|
||||
update_time = #{updateTime},
|
||||
</if>
|
||||
<if test="occurError != null">
|
||||
occur_error = #{occurError},
|
||||
</if>
|
||||
<if test="deleted != null">
|
||||
deleted = #{deleted},
|
||||
</if>
|
||||
@ -466,6 +484,19 @@
|
||||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
<update id="setTaskUnDo">
|
||||
update
|
||||
robot_task_detail
|
||||
set
|
||||
task_status = '0',
|
||||
task_stage = '0'
|
||||
where
|
||||
id in
|
||||
<foreach collection="ids" item="id" index="index" open="(" close=")"
|
||||
separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<!--通过主键删除-->
|
||||
<delete id="deleteById">
|
||||
@ -473,6 +504,9 @@
|
||||
from robot_task_detail
|
||||
where id = #{id}
|
||||
</delete>
|
||||
<delete id="truncate">
|
||||
TRUNCATE TABLE robot_task_detail
|
||||
</delete>
|
||||
|
||||
|
||||
</mapper>
|
@ -496,11 +496,28 @@
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<update id="setTaskUnDo">
|
||||
update
|
||||
robot_task
|
||||
set
|
||||
task_status = '0',
|
||||
task_stage = '0'
|
||||
where
|
||||
id in
|
||||
<foreach collection="ids" item="id" index="index" open="(" close=")"
|
||||
separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
</update>
|
||||
|
||||
<!--通过主键删除-->
|
||||
<delete id="deleteById">
|
||||
delete
|
||||
from robot_task
|
||||
where id = #{id}
|
||||
</delete>
|
||||
<delete id="truncate">
|
||||
TRUNCATE TABLE robot_task
|
||||
</delete>
|
||||
|
||||
</mapper>
|
Loading…
Reference in New Issue
Block a user