处理PP上报的任务
This commit is contained in:
parent
3bdb4e2d19
commit
9b515e2f04
@ -19,7 +19,7 @@ import java.util.List;
|
||||
public class TaskToPathPlanningDTO {
|
||||
|
||||
@Schema(description = "robot_task_detail/robot_charge_log 的 id")
|
||||
private Long id;
|
||||
private String id;
|
||||
|
||||
@Schema(description = "任务类型(TASK:robot_task的任务、CHARGE:充电任务)")
|
||||
private String type;
|
||||
|
@ -139,7 +139,7 @@ public class MqttFactory {
|
||||
return BeanUtils.getBean(RobotStatusServiceImpl.class);
|
||||
case SYNCHRONOUS_ALL_MAP_REQUEST:
|
||||
return BeanUtils.getBean(PathPlanningInitDataServiceImpl.class);
|
||||
case DISTRIBUTION_TASK:
|
||||
case TASK_ASSIGNMENT_FEEDBACK:
|
||||
return BeanUtils.getBean(PathPlanningDistributionTaskServiceImpl.class);
|
||||
default :
|
||||
// case ROBOT_TASK_STATUS:
|
||||
|
@ -19,7 +19,7 @@ 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,"路径规划需要初始数据上报"),
|
||||
DISTRIBUTION_TASK("DISTRIBUTION_TASK", 0,"路径规划任务分配上报");
|
||||
TASK_ASSIGNMENT_FEEDBACK("TASK_ASSIGNMENT_FEEDBACK", 0,"路径规划任务分配上报");
|
||||
|
||||
|
||||
private final String topic;
|
||||
|
@ -23,7 +23,7 @@ public class PathPlanningDistributionTaskServiceImpl implements MqttService{
|
||||
*/
|
||||
@Override
|
||||
public void analysisMessage(String message) {
|
||||
log.info("PP上报任务分配");
|
||||
log.info("PP上报任务分配 :{}", message);
|
||||
pathApi.ppDistributionTask(message);
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
@Tag(name = "管理后台 - 车辆动作记录")
|
||||
@RestController
|
||||
@RequestMapping("/robot/task-detail-action-log")
|
||||
@RequestMapping("/system/robot/task-detail-action-log")
|
||||
@Validated
|
||||
public class RobotTaskDetailActionLogController {
|
||||
|
||||
|
@ -1,5 +1,7 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.robot;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO;
|
||||
@ -103,4 +105,12 @@ public class RobotTaskController {
|
||||
BeanUtils.toBean(list, RobotTaskRespVO.class));
|
||||
}
|
||||
|
||||
@PostMapping("/logPage")
|
||||
@Operation(summary = "任务日志分页")
|
||||
@PreAuthorize("@ss.hasPermission('robot:task:logPage')")
|
||||
public CommonResult<PageResult<RobotTaskDetailLogResoVO>> logPage(@Valid @RequestBody RobotTaskDetailLogVO pageReqVO) {
|
||||
PageResult<RobotTaskDetailLogResoVO> pageResult = taskService.logPage(pageReqVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.robot.detail;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class RobotTaskDetailLogResoVO {
|
||||
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26224")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "任务号")
|
||||
private String taskNo;
|
||||
|
||||
@Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
private Integer taskType;
|
||||
|
||||
@Schema(description = "任务内容")
|
||||
private String msg;
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "开始时间")
|
||||
private LocalDateTime startTime;
|
||||
|
||||
@Schema(description = "结束时间")
|
||||
private LocalDateTime endTime;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "计算后的目标库位编号")
|
||||
private String toLocationNo;
|
||||
|
||||
@Schema(description = "计算后的来源库位编号")
|
||||
private String fromLocationNo;
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.robot.detail;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Data
|
||||
public class RobotTaskDetailLogVO extends PageParam {
|
||||
|
||||
@Schema(description = "任务号")
|
||||
private String taskNo;
|
||||
|
||||
@Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
private Integer taskType;
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "开始时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date startTime;
|
||||
|
||||
@Schema(description = "结束时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date endTime;
|
||||
|
||||
@Schema(description = "关键词")
|
||||
private String msg;
|
||||
}
|
@ -7,7 +7,7 @@ import lombok.Data;
|
||||
public class TaskPathPlanningDTO {
|
||||
|
||||
@Schema(description = "出发点id(点位子表id)", example = "20863")
|
||||
private String startingPointId;
|
||||
private String id;
|
||||
|
||||
private Double x;
|
||||
|
||||
|
@ -53,7 +53,7 @@ public class RobotTaskDetailPageReqVO extends PageParam {
|
||||
@Schema(description = "放货线库id")
|
||||
private Long toLaneId;
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "1")
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
||||
|
@ -58,8 +58,8 @@ public class RobotTaskDetailRespVO {
|
||||
@ExcelProperty("AGV动作")
|
||||
private String robotAction;
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "1")
|
||||
@ExcelProperty("任务状态(0:未开始、1:执行中、2:已完成、3:已取消)")
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
||||
@ExcelProperty("任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
||||
|
@ -59,7 +59,7 @@ public class RobotTaskDetailSaveReqVO {
|
||||
@Schema(description = "AGV动作")
|
||||
private String robotAction;
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "1")
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消、4:异常)", example = "1")
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
||||
|
@ -22,7 +22,7 @@ public interface RobotTaskDetailActionLogMapper extends BaseMapperX<RobotTaskDet
|
||||
.eqIfPresent(RobotTaskDetailActionLogDO::getCommandId, reqVO.getCommandId())
|
||||
.eqIfPresent(RobotTaskDetailActionLogDO::getCommandType, reqVO.getCommandType())
|
||||
.eqIfPresent(RobotTaskDetailActionLogDO::getCommandMsg, reqVO.getCommandMsg())
|
||||
.eqIfPresent(RobotTaskDetailActionLogDO::getActionMsg, reqVO.getActionMsg())
|
||||
.likeIfPresent(RobotTaskDetailActionLogDO::getActionMsg, reqVO.getActionMsg())
|
||||
.eqIfPresent(RobotTaskDetailActionLogDO::getActionStatus, reqVO.getActionStatus())
|
||||
.eqIfPresent(RobotTaskDetailActionLogDO::getRobotNo, reqVO.getRobotNo())
|
||||
.betweenIfPresent(RobotTaskDetailActionLogDO::getCreateTime, reqVO.getCreateTime())
|
||||
|
@ -5,6 +5,8 @@ import java.util.*;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@ -62,4 +64,13 @@ public interface RobotTaskMapper extends BaseMapperX<RobotTaskDO> {
|
||||
*/
|
||||
IPage<RobotTaskDO> selectPageList(@Param("mpPage") IPage mpPage,
|
||||
@Param("pageReqVO") RobotTaskPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 任务日志
|
||||
* @param mpPage
|
||||
* @param pageReqVO
|
||||
* @return
|
||||
*/
|
||||
IPage<RobotTaskDetailLogResoVO> selectLogPageList(@Param("mpPage") IPage mpPage,
|
||||
@Param("pageReqVO") RobotTaskDetailLogVO pageReqVO);
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package cn.iocoder.yudao.module.system.enums.device;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* device_information的`device_attribute` tinyint DEFAULT NULL COMMENT '设备专有属性(1:自动充电类型充电桩、0:手动充电类型充电桩)',
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DeviceAttributeEnum {
|
||||
AUTO_CHARGE(1, "自动充电类型充电桩"),
|
||||
HAND_MOVEMENT(0, "手动充电类型充电桩");
|
||||
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
private final Integer type;
|
||||
/**
|
||||
* 说明
|
||||
*/
|
||||
private final String msg;
|
||||
}
|
@ -34,7 +34,10 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
||||
// -- 策略1 处理库位点
|
||||
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
|
||||
List<WareHouseLocationDO> newList = new ArrayList<>();
|
||||
Long locationNumber = nodeBaseDTOS.get(0).getLocationNumber();
|
||||
Long locationNumber = 0l;
|
||||
if (ObjectUtil.isNotEmpty(nodeBaseDTOS)) {
|
||||
locationNumber = nodeBaseDTOS.get(0).getLocationNumber();
|
||||
}
|
||||
|
||||
for (NodeBaseDTO item : nodeBaseDTOS) {
|
||||
if (item.getId() == null) {
|
||||
@ -73,14 +76,14 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
|
||||
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
|
||||
}
|
||||
|
||||
//判断排序是否重复
|
||||
List<Long> locationNumbers = newList.stream().map(WareHouseLocationDO::getLocationNumber).collect(Collectors.toList());
|
||||
//判断排序是否重复 后续改成一条线库的库位编号不能重复 todo
|
||||
/*List<Long> locationNumbers = newList.stream().map(WareHouseLocationDO::getLocationNumber).collect(Collectors.toList());
|
||||
if (ObjectUtil.isNotEmpty(locationNumbers)) {
|
||||
List<WareHouseLocationDO> list = houseLocationService.getLocationByLocationNumbers(locationNumbers);
|
||||
if (ObjectUtil.isNotEmpty(list)) {
|
||||
throw exception(HOUSE_LOCATION_NO_EXIST);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
List<WareHouseLocationDO> oldList = houseLocationService.getByMapId(positionMapId);
|
||||
List<List<WareHouseLocationDO>> list = CollectionUtils.compareLists(oldList, newList,
|
||||
|
@ -4,6 +4,8 @@ import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO;
|
||||
@ -66,4 +68,11 @@ public interface RobotTaskService extends IService<RobotTaskDO> {
|
||||
* @param message
|
||||
*/
|
||||
void ppDistributionTask(String message);
|
||||
|
||||
/**
|
||||
* 任务日志分页
|
||||
* @param pageReqVO
|
||||
* @return
|
||||
*/
|
||||
PageResult<RobotTaskDetailLogResoVO> logPage( RobotTaskDetailLogVO pageReqVO);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||
@ -8,6 +9,8 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
|
||||
import cn.iocoder.yudao.module.mqtt.enums.path.TaskTypeEnum;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribution;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||
@ -25,6 +28,7 @@ import cn.iocoder.yudao.module.system.enums.robot.*;
|
||||
import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.google.common.collect.Lists;
|
||||
@ -726,11 +730,15 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
||||
* @param message
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void ppDistributionTask(String message) {
|
||||
log.info("PP分配任务 :{}",message);
|
||||
|
||||
TaskPPDistribution[] array = new Gson().fromJson(message, TaskPPDistribution[].class);
|
||||
List<TaskPPDistribution> list = Arrays.asList(array);
|
||||
//todo 如果车辆状态是充电中, 更新充电表的充电数据
|
||||
|
||||
TaskPPDistribution distribution = JSON.parseObject(message,TaskPPDistribution.class);
|
||||
|
||||
List<TaskPPDistribution> list = Arrays.asList(distribution);
|
||||
|
||||
List<TaskPPDistribution> taskList = list.stream()
|
||||
.filter(v -> TaskTypeEnum.TASK.getType().equals(v.getType()))
|
||||
@ -740,19 +748,19 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
||||
.filter(v -> TaskTypeEnum.CHARGE.getType().equals(v.getType()))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
|
||||
List<Long> detailIds = new ArrayList<>();
|
||||
|
||||
Map<Long, TaskPPDistribution> taskMap =
|
||||
list.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
|
||||
|
||||
List<Long> chargeDetaildIds = null;
|
||||
List<RobotChargeLogDO> robotChargeLogs = null;
|
||||
/**
|
||||
* 充电
|
||||
*/
|
||||
if (ObjectUtil.isNotEmpty(chargeList)) {
|
||||
List<Long> chargeIds = chargeList.stream().map(TaskPPDistribution::getId).collect(Collectors.toList());
|
||||
List<RobotChargeLogDO> robotChargeLogs = chargeLogMapper.selectBatchIds(chargeIds);
|
||||
robotChargeLogs = chargeLogMapper.selectBatchIds(chargeIds);
|
||||
robotChargeLogs.stream().forEach(taskDetailDO -> {
|
||||
taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
|
||||
});
|
||||
@ -797,39 +805,72 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper,RobotTaskD
|
||||
tasks.stream().forEach(task -> {
|
||||
task.setTaskStatus(RobotTaskStatusEnum.DOING.getType());
|
||||
});
|
||||
taskDetailMapper.updateBatch(taskDetailDOS);
|
||||
taskMapper.updateBatch(tasks);
|
||||
}
|
||||
|
||||
robotCommonTaskService.sendTaskToRobot(taskList);
|
||||
robotCommonTaskService.sendChargeTaskToRobot(chargeList);
|
||||
robotCommonTaskService.sendChargeTaskToRobot(chargeList,robotChargeLogs);
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务日志分页
|
||||
* @param pageReqVO
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public PageResult<RobotTaskDetailLogResoVO> logPage(RobotTaskDetailLogVO pageReqVO) {
|
||||
PageResult<RobotTaskDetailLogResoVO> dataPage = new PageResult<>();
|
||||
|
||||
IPage mpPage = MyBatisUtils.buildPage(pageReqVO);
|
||||
|
||||
IPage<RobotTaskDetailLogResoVO> page = taskMapper.selectLogPageList(mpPage, pageReqVO);
|
||||
dataPage.setTotal(page.getTotal());
|
||||
List<RobotTaskDetailLogResoVO> list = page.getRecords();
|
||||
|
||||
List<RobotTaskDetailLogResoVO> targetList = BeanUtil.copyToList(list, RobotTaskDetailLogResoVO.class);
|
||||
for (RobotTaskDetailLogResoVO robotTaskRespVO : targetList) {
|
||||
String msg = "";
|
||||
RobotTaskTypeEnum robotTaskType = RobotTaskTypeEnum.getRobotTaskType(robotTaskRespVO.getTaskType());
|
||||
switch (robotTaskType) {
|
||||
case TAKE_RELEASE:
|
||||
msg = "取货点 " + robotTaskRespVO.getFromLocationNo() +" 放货点 " + robotTaskRespVO.getToLocationNo();
|
||||
break;
|
||||
case PARK:
|
||||
if (ObjectUtil.isNotEmpty(robotTaskRespVO.getToLocationNo())) {
|
||||
msg = "停车点 " + robotTaskRespVO.getToLocationNo();
|
||||
}else {
|
||||
msg = "停车点";
|
||||
}
|
||||
break;
|
||||
case CHARGE:
|
||||
if (ObjectUtil.isNotEmpty(robotTaskRespVO.getToLocationNo())) {
|
||||
msg = "充电点 " + robotTaskRespVO.getToLocationNo();
|
||||
}else {
|
||||
msg = "充电点";
|
||||
}
|
||||
break;
|
||||
case MOVE:
|
||||
if (ObjectUtil.isNotEmpty(robotTaskRespVO.getToLocationNo())) {
|
||||
msg = "移动点 " + robotTaskRespVO.getToLocationNo();
|
||||
}else {
|
||||
msg = "移动点";
|
||||
}
|
||||
break;
|
||||
case TAKE:
|
||||
msg = "取货点 " + robotTaskRespVO.getFromLocationNo();
|
||||
break;
|
||||
case RELEASE:
|
||||
msg = "放货点 " + robotTaskRespVO.getToLocationNo();
|
||||
break;
|
||||
default:
|
||||
log.error("任务类型不存在");
|
||||
}
|
||||
|
||||
robotTaskRespVO.setMsg(msg);
|
||||
}
|
||||
dataPage.setList(targetList);
|
||||
return dataPage;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.*;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeModelEnum;
|
||||
import cn.iocoder.yudao.module.system.service.robot.pathplanning.RobotPathPlanningService;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
@ -76,6 +77,9 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
@Value("${zn.full_electricity:100}")
|
||||
private String fullElectricity;
|
||||
|
||||
@Autowired
|
||||
private RobotPathPlanningService robotPathPlanningService;
|
||||
|
||||
/**
|
||||
* 自动充电
|
||||
*/
|
||||
@ -128,43 +132,18 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
detailMap = taskDetailDOS.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getRobotNo));
|
||||
}
|
||||
|
||||
List<RobotTaskDetailDO> updateTaskDetails = new ArrayList<>();
|
||||
List<RobotChargeLogDO> logs = new ArrayList<>();
|
||||
Set<Long> taskIds = new HashSet<>();
|
||||
//组装充电任务
|
||||
assembleChargeTask(robots,deviceInformationDOS,chargeConfig,chargeFullNos,updateTaskDetails,logs,taskIds,detailMap);
|
||||
assembleChargeTask(robots,deviceInformationDOS,chargeConfig,chargeFullNos,logs,detailMap);
|
||||
|
||||
if (ObjectUtil.isEmpty(logs)) {
|
||||
log.info("没有需要执行的充电任务");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(updateTaskDetails)) {
|
||||
robotTaskDetailMapper.updateBatch(updateTaskDetails);
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(taskIds)) {
|
||||
List<RobotTaskDO> taskDOS = robotTaskMapper.selectBatchIds(taskIds);
|
||||
for (RobotTaskDO taskDO : taskDOS) {
|
||||
if (RobotTaskStatusEnum.NEW.getType().equals(taskDO.getTaskStatus())) {
|
||||
taskDO.setTaskStatus(RobotTaskStatusEnum.DOING.getType());
|
||||
taskDO.setStartTime(LocalDateTime.now());
|
||||
}
|
||||
}
|
||||
robotTaskMapper.updateBatch(taskDOS);
|
||||
}
|
||||
|
||||
Set<String> robotLists = logs.stream()
|
||||
.map(RobotChargeLogDO::getDeviceNo)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (ObjectUtil.isNotEmpty(robotLists)) {
|
||||
robotInformationMapper.updateRobotListStatus(robotLists,RobotStatusEnum.DOING.getType());
|
||||
}
|
||||
|
||||
chargeLogMapper.insertBatch(logs);
|
||||
|
||||
//todo 发送给路PP
|
||||
robotPathPlanningService.sendChargeTaskToPP(logs);
|
||||
|
||||
//改成异步
|
||||
logs.stream().forEach(v -> {
|
||||
@ -180,14 +159,12 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
* @param deviceInformationDOS
|
||||
* @param chargeConfig
|
||||
* @param chargeFullNos
|
||||
* @param updateTaskDetails
|
||||
* @param logs
|
||||
* @param taskIds
|
||||
* @param detailMap
|
||||
*/
|
||||
public void assembleChargeTask(List<RobotInformationDO> robots, List<DeviceInformationDO> deviceInformationDOS,
|
||||
CommonConfigVO chargeConfig, List<String> chargeFullNos, List<RobotTaskDetailDO> updateTaskDetails,
|
||||
List<RobotChargeLogDO> logs, Set<Long> taskIds, Map<String, List<RobotTaskDetailDO>> detailMap) {
|
||||
CommonConfigVO chargeConfig, List<String> chargeFullNos,
|
||||
List<RobotChargeLogDO> logs, Map<String, List<RobotTaskDetailDO>> detailMap) {
|
||||
//判断机器人身上的电量少于设定的电量
|
||||
for (RobotInformationDO robot : robots) {
|
||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC +robot.getMacAddress();
|
||||
@ -203,12 +180,20 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
break;
|
||||
}
|
||||
|
||||
RobotChargeLogDO log = new RobotChargeLogDO();
|
||||
log.setRobotNo(robot.getRobotNo());
|
||||
// todo 后续需要根据车辆的自动充电/手动充电来分配充电桩
|
||||
log.setDeviceNo(deviceInformationDOS.get(0).getDeviceNo());
|
||||
DeviceInformationDO deviceInformationDO = deviceInformationDOS.stream()
|
||||
.filter(v -> v.getDeviceAttribute().equals(robot.getChargeType()))
|
||||
.findFirst()
|
||||
.orElse(new DeviceInformationDO());
|
||||
if (ObjectUtil.isEmpty(deviceInformationDO.getDeviceNo())) {
|
||||
log.info("当前机器人查不到对应的充电桩类型 :{}",robot.getRobotNo());
|
||||
continue;
|
||||
}
|
||||
|
||||
RobotChargeLogDO logDo = new RobotChargeLogDO();
|
||||
logDo.setRobotNo(robot.getRobotNo());
|
||||
logDo.setDeviceNo(deviceInformationDO.getDeviceNo());
|
||||
String[] split = dataPoseDTO.getBat_soc().split("\\.");
|
||||
log.setStartElectricity(Integer.valueOf(split[0]));
|
||||
logDo.setStartElectricity(Integer.valueOf(split[0]));
|
||||
//配置的充满电电量
|
||||
BigDecimal robotFullElectricity = new BigDecimal(fullElectricity);
|
||||
//车子剩余电量
|
||||
@ -216,9 +201,10 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
if (ObjectUtil.isNotEmpty(chargeConfig.getChanceCycle()) && !chargeFullNos.contains(robot.getRobotNo())
|
||||
&& robotRemainingElectricity.compareTo(robotFullElectricity) < 0) {
|
||||
//充满电
|
||||
log.setChargeModel(ChargeModelEnum.FULL.getType());
|
||||
logs.add(log);
|
||||
deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo()));
|
||||
logDo.setChargeModel(ChargeModelEnum.FULL.getType());
|
||||
logs.add(logDo);
|
||||
deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo()));
|
||||
log.info("分配到充满电充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId());
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -228,15 +214,11 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(robot.getAutoCharge()));
|
||||
if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) {
|
||||
RobotTaskDetailDO robotTaskDetailDO = detailMap.get(robot.getRobotNo()).get(0);
|
||||
robotTaskDetailDO.setRobotNo(robot.getRobotNo());
|
||||
robotTaskDetailDO.setStartTime(LocalDateTime.now());
|
||||
robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
|
||||
updateTaskDetails.add(robotTaskDetailDO);
|
||||
taskIds.add(robotTaskDetailDO.getRobotTaskId());
|
||||
deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo()));
|
||||
log.setChargeModel(ChargeModelEnum.TASK.getType());
|
||||
log.setTaskDetailId(robotTaskDetailDO.getId());
|
||||
logs.add(log);
|
||||
deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo()));
|
||||
logDo.setChargeModel(ChargeModelEnum.TASK.getType());
|
||||
logDo.setTaskDetailId(robotTaskDetailDO.getId());
|
||||
logs.add(logDo);
|
||||
log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -247,15 +229,11 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getStartAutoCharge()));
|
||||
if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) {
|
||||
RobotTaskDetailDO robotTaskDetailDO = detailMap.get(robot.getRobotNo()).get(0);
|
||||
robotTaskDetailDO.setRobotNo(robot.getRobotNo());
|
||||
robotTaskDetailDO.setStartTime(LocalDateTime.now());
|
||||
robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
|
||||
updateTaskDetails.add(robotTaskDetailDO);
|
||||
taskIds.add(robotTaskDetailDO.getRobotTaskId());
|
||||
deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo()));
|
||||
log.setChargeModel(ChargeModelEnum.TASK.getType());
|
||||
log.setTaskDetailId(robotTaskDetailDO.getId());
|
||||
logs.add(log);
|
||||
deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo()));
|
||||
logDo.setChargeModel(ChargeModelEnum.TASK.getType());
|
||||
logDo.setTaskDetailId(robotTaskDetailDO.getId());
|
||||
logs.add(logDo);
|
||||
log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -266,15 +244,11 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getChanceChargeStart()));
|
||||
if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) {
|
||||
RobotTaskDetailDO robotTaskDetailDO = detailMap.get(robot.getRobotNo()).get(0);
|
||||
robotTaskDetailDO.setRobotNo(robot.getRobotNo());
|
||||
robotTaskDetailDO.setStartTime(LocalDateTime.now());
|
||||
robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
|
||||
updateTaskDetails.add(robotTaskDetailDO);
|
||||
taskIds.add(robotTaskDetailDO.getRobotTaskId());
|
||||
deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo()));
|
||||
log.setChargeModel(ChargeModelEnum.TASK.getType());
|
||||
log.setTaskDetailId(robotTaskDetailDO.getId());
|
||||
logs.add(log);
|
||||
deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo()));
|
||||
logDo.setChargeModel(ChargeModelEnum.TASK.getType());
|
||||
logDo.setTaskDetailId(robotTaskDetailDO.getId());
|
||||
logs.add(logDo);
|
||||
log.info("分配到任务充电任务 :{} ,充电设备编号是 :{}, 任务id :{}",logDo.getRobotNo(),logDo.getDeviceNo(),logDo.getTaskDetailId());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -283,9 +257,10 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
//自动充电
|
||||
BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(robot.getAutoCharge()));
|
||||
if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) {
|
||||
log.setChargeModel(ChargeModelEnum.AUTO.getType());
|
||||
logs.add(log);
|
||||
deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo()));
|
||||
logDo.setChargeModel(ChargeModelEnum.AUTO.getType());
|
||||
logs.add(logDo);
|
||||
deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo()));
|
||||
log.info("分配到自动充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -294,9 +269,10 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
//自动充电
|
||||
BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getStartAutoCharge()));
|
||||
if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) {
|
||||
log.setChargeModel(ChargeModelEnum.AUTO.getType());
|
||||
logs.add(log);
|
||||
deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo()));
|
||||
logDo.setChargeModel(ChargeModelEnum.AUTO.getType());
|
||||
logs.add(logDo);
|
||||
deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo()));
|
||||
log.info("分配到自动充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo());
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -305,9 +281,10 @@ public class AutoChargeServiceImpl implements AutoChargeService {
|
||||
//机会充电
|
||||
BigDecimal robotConfigElectricity = new BigDecimal(String.valueOf(chargeConfig.getChanceChargeStart()));
|
||||
if (robotRemainingElectricity.compareTo(robotConfigElectricity) < 0) {
|
||||
log.setChargeModel(ChargeModelEnum.CHANCE.getType());
|
||||
logs.add(log);
|
||||
deviceInformationDOS.removeIf(v -> log.getDeviceNo().equals(v.getDeviceNo()));
|
||||
logDo.setChargeModel(ChargeModelEnum.CHANCE.getType());
|
||||
logs.add(logDo);
|
||||
deviceInformationDOS.removeIf(v -> logDo.getDeviceNo().equals(v.getDeviceNo()));
|
||||
log.info("分配到机会充电任务 :{} ,充电设备编号是 :{}",logDo.getRobotNo(),logDo.getDeviceNo());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -250,7 +250,7 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
||||
Object chargeModelCache = redisUtil.get(chargeModelKey);
|
||||
Object poseCache = redisUtil.get(pose2dKey);
|
||||
RobotStatusDataPoseDTO dataPoseDTO = JSON.parseObject((String) poseCache, RobotStatusDataPoseDTO.class);
|
||||
log.info("机器人编号:{} ,信息: {}", robot.getRobotNo(), JSON.toJSONString(dataPoseDTO));
|
||||
log.info("充电机器人编号:{} ,信息: {}", robot.getRobotNo(), JSON.toJSONString(dataPoseDTO));
|
||||
|
||||
if (ObjectUtil.isEmpty(commonConfigDO) || ObjectUtil.isEmpty(poseCache) || ObjectUtil.isEmpty(dataPoseDTO.getBat_soc())) {
|
||||
return;
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot.job;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribution;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -21,5 +22,5 @@ public interface RobotCommonTaskService {
|
||||
* 发送充电任务给车机
|
||||
* @param chargeList
|
||||
*/
|
||||
void sendChargeTaskToRobot(List<TaskPPDistribution> chargeList);
|
||||
void sendChargeTaskToRobot(List<TaskPPDistribution> chargeList,List<RobotChargeLogDO> robotChargeLogs);
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.RobotTaskApi;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskData;
|
||||
@ -14,6 +13,7 @@ import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPPDistribu
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.task.TaskPathPlanningDTO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.actionlog.RobotTaskDetailActionLogDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.actionlog.RobotTaskDetailActionLogMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
|
||||
@ -91,8 +91,11 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
@Value("${zn.robot_doing_action.scan}")
|
||||
private String scan;
|
||||
|
||||
@Value("${zn.robot_doing_action.move}")
|
||||
private String move;
|
||||
@Value("${zn.robot_doing_action.parking_space}")
|
||||
private String parkingSpace;
|
||||
|
||||
@Value("${zn.robot_doing_action.charge}")
|
||||
private String charge;
|
||||
|
||||
@Resource
|
||||
private WareHouseLocationMapper houseLocationMapper;
|
||||
@ -289,8 +292,8 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
List<RobotTaskDetailActionLogDO> logList = new ArrayList<>();
|
||||
//移动
|
||||
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
||||
String msg = move + robotTaskDetailDO.getToLocationNo();
|
||||
RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, robotTaskDetailDO, msg);
|
||||
String msg = parkingSpace + robotTaskDetailDO.getToLocationNo();
|
||||
RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg);
|
||||
|
||||
list.add(oneMoveAndFork);
|
||||
logList.add(logOne);
|
||||
@ -305,11 +308,9 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
* @param logOne
|
||||
* @param serial
|
||||
* @param v
|
||||
* @param robotTaskDetailDO
|
||||
* @return
|
||||
*/
|
||||
private RobotAcceptTaskData onlyMove(RobotTaskDetailActionLogDO logOne, Integer serial, TaskPPDistribution v,
|
||||
RobotTaskDetailDO robotTaskDetailDO, String msg) {
|
||||
String msg) {
|
||||
logOne.setCommandId(getId());
|
||||
RobotAcceptTaskData robotAcceptTaskData = new RobotAcceptTaskData();
|
||||
robotAcceptTaskData.setSerial(String.valueOf(serial));
|
||||
@ -322,7 +323,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
robotAcceptTaskData.setArg(arg);
|
||||
|
||||
logOne.setActionMsg(msg);
|
||||
setCommand(logOne, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logOne, robotAcceptTaskData, v.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
}
|
||||
|
||||
@ -414,7 +415,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
robotAcceptTaskData.setArg(arg);
|
||||
|
||||
logTwelve.setActionMsg(completeTask);
|
||||
setCommand(logTwelve, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logTwelve, robotAcceptTaskData, robotTaskDetailDO.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
|
||||
}
|
||||
@ -446,7 +447,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
robotAcceptTaskData.setArg(arg);
|
||||
|
||||
logNight.setActionMsg(String.format("机器人正在前往%s%s", robotTaskDetailDO.getToLocationNo(), "放货"));
|
||||
setCommand(logNight, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logNight, robotAcceptTaskData, robotTaskDetailDO.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
}
|
||||
|
||||
@ -482,7 +483,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
RobotArgDTO arg = RobotArgDTO.builder().pose2d(pose2d).build();
|
||||
robotAcceptTaskData.setArg(arg);
|
||||
logEight.setActionMsg(msg);
|
||||
setCommand(logEight, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logEight, robotAcceptTaskData, robotTaskDetailDO.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
}
|
||||
|
||||
@ -504,7 +505,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
serial++;
|
||||
robotAcceptTaskData.setCommand_type(CommandTypeEnum.MOVE_TO_PALLET_POSE.getType());
|
||||
logSix.setActionMsg(msg);
|
||||
setCommand(logSix, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logSix, robotAcceptTaskData, robotTaskDetailDO.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
}
|
||||
|
||||
@ -526,7 +527,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
serial++;
|
||||
robotAcceptTaskData.setCommand_type(CommandTypeEnum.GET_PALLET_TOPIC.getType());
|
||||
logFour.setActionMsg(getPalletTopic);
|
||||
setCommand(logFour, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logFour, robotAcceptTaskData, robotTaskDetailDO.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
}
|
||||
|
||||
@ -543,7 +544,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
|
||||
robotAcceptTaskData.setArg(arg);
|
||||
logThree.setActionMsg(scan);
|
||||
setCommand(logThree, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logThree, robotAcceptTaskData, robotTaskDetailDO.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
}
|
||||
|
||||
@ -586,7 +587,7 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
|
||||
robotAcceptTaskData.setArg(arg);
|
||||
logTwo.setActionMsg(msg);
|
||||
setCommand(logTwo, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logTwo, robotAcceptTaskData, robotTaskDetailDO.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
}
|
||||
|
||||
@ -614,13 +615,13 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
robotAcceptTaskData.setArg(arg);
|
||||
|
||||
logOne.setActionMsg(String.format("机器人正在前往%s%s", robotTaskDetailDO.getFromLocationNo(), "取货"));
|
||||
setCommand(logOne, robotAcceptTaskData, robotTaskDetailDO);
|
||||
setCommand(logOne, robotAcceptTaskData, robotTaskDetailDO.getRobotNo());
|
||||
return robotAcceptTaskData;
|
||||
}
|
||||
|
||||
public void setCommand(RobotTaskDetailActionLogDO logOne, RobotAcceptTaskData robotAcceptTaskData, RobotTaskDetailDO robotTaskDetailDO) {
|
||||
public void setCommand(RobotTaskDetailActionLogDO logOne, RobotAcceptTaskData robotAcceptTaskData, String robotNo) {
|
||||
logOne.setCommandType(robotAcceptTaskData.getCommand_type());
|
||||
logOne.setRobotNo(robotTaskDetailDO.getRobotNo());
|
||||
logOne.setRobotNo(robotNo);
|
||||
String str = JSON.toJSONString(robotAcceptTaskData);
|
||||
if (str.length() > 210) {
|
||||
logOne.setCommandMsg(str.substring(0, 200));
|
||||
@ -633,13 +634,82 @@ public class RobotCommonTaskServiceImpl implements RobotCommonTaskService {
|
||||
/**
|
||||
* 充电任务
|
||||
*
|
||||
* @param chargeList
|
||||
*/
|
||||
@Override
|
||||
@Async(NOTIFY_THREAD_POOL_TASK_EXECUTOR)
|
||||
public void sendChargeTaskToRobot(List<TaskPPDistribution> chargeList) {
|
||||
public void sendChargeTaskToRobot(List<TaskPPDistribution> chargeList,List<RobotChargeLogDO> robotChargeLogs) {
|
||||
if (ObjectUtil.isEmpty(chargeList) || ObjectUtil.isEmpty(robotChargeLogs)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Map<Long, RobotChargeLogDO> chargeMap =
|
||||
robotChargeLogs.stream().collect(Collectors.toMap(v -> v.getId(), Function.identity()));
|
||||
|
||||
List<RobotTaskDetailActionLogDO> logList = new ArrayList<>();
|
||||
for (TaskPPDistribution v : chargeList) {
|
||||
RobotChargeLogDO chargeLogDO = chargeMap.get(v.getId());
|
||||
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
||||
robotTask.setOrder_id(v.getId().toString());
|
||||
|
||||
String mac = robotInformationService.getMacByRobotNo(v.getRobotNo());
|
||||
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
|
||||
robotTask.setOrder_type(RobotTaksOrderTypeEnum.TASK.getType());
|
||||
|
||||
Integer serial = 1;
|
||||
|
||||
List<RobotAcceptTaskData> list = new ArrayList<>();
|
||||
//移动
|
||||
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
||||
String msg = charge + chargeLogDO.getDeviceNo();
|
||||
RobotAcceptTaskData oneMoveAndFork = onlyMove(logOne, serial, v, msg);
|
||||
|
||||
list.add(oneMoveAndFork);
|
||||
robotTask.setData(list);
|
||||
logList.add(logOne);
|
||||
|
||||
log.info("发送给车机下发--充电任务 :{}", JSON.toJSONString(robotTask));
|
||||
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
||||
}
|
||||
|
||||
//todo 充电后往 task_detail更新下 to_location_no
|
||||
// todo 后续改为放缓存,等车机上报了再插入
|
||||
taskDetailActionLogMapper.insertBatch(logList);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,11 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot.pathplanning;
|
||||
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface RobotPathPlanningService {
|
||||
void sendTaskToPP();
|
||||
|
||||
void sendChargeTaskToPP(List<RobotChargeLogDO> logs);
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper;
|
||||
@ -132,6 +133,13 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendChargeTaskToPP(List<RobotChargeLogDO> logs) {
|
||||
for (RobotChargeLogDO robotChargeLogDO : logs) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void distributeTasksToPP(List<RobotInformationDO> robots, List<RobotTaskDetailDO> taskDetailDOS) {
|
||||
//目前一个点位/线库, 只能派一辆车去做
|
||||
@ -168,7 +176,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
||||
for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) {
|
||||
|
||||
TaskToPathPlanningDTO pathPlanning = TaskToPathPlanningDTO.builder()
|
||||
.id(taskDetailDO.getId())
|
||||
.id(String.valueOf(taskDetailDO.getId()))
|
||||
.type(TaskTypeEnum.TASK.getType())
|
||||
.priority(taskDetailDO.getPriority())
|
||||
.createTime(taskDetailDO.getCreateTime())
|
||||
|
@ -243,4 +243,5 @@ zn:
|
||||
complete_task: 机器人完成任务
|
||||
get_pallet_topic: 机器人扫描托盘位置
|
||||
scan: 机器人正在扫描
|
||||
move: 机器人正在前往停车位
|
||||
parking_space: 机器人正在前往停车位
|
||||
charge: 机器人正在前往充电位
|
||||
|
@ -287,6 +287,46 @@
|
||||
order by t1.create_time desc
|
||||
</select>
|
||||
|
||||
<select id="selectLogPageList"
|
||||
resultType="cn.iocoder.yudao.module.system.controller.admin.robot.detail.RobotTaskDetailLogResoVO">
|
||||
select
|
||||
t1.task_no as taskNo,
|
||||
t1.create_time as createTime,
|
||||
t2.id,
|
||||
t2.task_type as taskType,
|
||||
t2.task_status as taskStatus,
|
||||
t2.start_time as startTime,
|
||||
t2.end_time as endTime,
|
||||
t2.from_location_no as fromLocationNo,
|
||||
t2.to_location_no as toLocationNo
|
||||
from
|
||||
robot_task t1 inner join robot_task_detail t2
|
||||
on t1.id = t2.robot_task_id
|
||||
<where>
|
||||
t1.deleted = '0'
|
||||
and t2.deleted = '0'
|
||||
<if test="pageReqVO.taskNo != null and pageReqVO.taskNo != ''">
|
||||
and t1.task_no like concat('%', #{pageReqVO.taskNo}, '%')
|
||||
</if>
|
||||
<if test="pageReqVO.taskType != null and pageReqVO.taskType != ''">
|
||||
and t2.task_type = #{pageReqVO.taskType}
|
||||
</if>
|
||||
<if test="pageReqVO.taskStatus != null">
|
||||
and t2.task_status = #{pageReqVO.taskStatus}
|
||||
</if>
|
||||
<if test="pageReqVO.msg != null and pageReqVO.msg != ''">
|
||||
and (t2.from_location_no like concat('%', #{pageReqVO.msg}, '%') or t2.to_location_no like concat('%', #{pageReqVO.msg}, '%'))
|
||||
</if>
|
||||
<if test="pageReqVO.startTime!=null ">
|
||||
AND t1.create_time >= #{pageReqVO.startTime}
|
||||
</if>
|
||||
<if test="pageReqVO.endTime!=null ">
|
||||
AND t1.create_time <= #{pageReqVO.endTime}
|
||||
</if>
|
||||
</where>
|
||||
order by t1.create_time desc
|
||||
</select>
|
||||
|
||||
|
||||
<!--新增所有列-->
|
||||
<insert id="insertEntity" keyProperty="id" useGeneratedKeys="true">
|
||||
|
Loading…
Reference in New Issue
Block a user