Compare commits
No commits in common. "ec3b5b6ece8af8e7969e6a6e77d8db9daaf89885" and "e5524a54d8a5fff9ca263249ff53b924c84a1f42" have entirely different histories.
ec3b5b6ece
...
e5524a54d8
@ -230,7 +230,3 @@ knife4j:
|
|||||||
yudao:
|
yudao:
|
||||||
info:
|
info:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
|
||||||
spring:
|
|
||||||
codec:
|
|
||||||
max-in-memory-size: 20MB
|
|
||||||
|
@ -16,5 +16,5 @@ public class RobotAcceptTaskDTO {
|
|||||||
//PAUSE(停止)、CONTINUE(继续)、DEFAULT(执行)、CANCEL(取消)
|
//PAUSE(停止)、CONTINUE(继续)、DEFAULT(执行)、CANCEL(取消)
|
||||||
private String executionType = ExecutionTypeEnum.DEFAULT.getType();
|
private String executionType = ExecutionTypeEnum.DEFAULT.getType();
|
||||||
|
|
||||||
// private List<RobotAcceptTaskData> data;
|
private List<RobotAcceptTaskData> data;
|
||||||
}
|
}
|
||||||
|
@ -174,7 +174,7 @@ public interface ErrorCodeConstants {
|
|||||||
|
|
||||||
// ========== 库区 1-002-031-000 ==========
|
// ========== 库区 1-002-031-000 ==========
|
||||||
ErrorCode HOUSE_AREA_NOT_EXISTS = new ErrorCode(1-002-031-001, "库区不存在");
|
ErrorCode HOUSE_AREA_NOT_EXISTS = new ErrorCode(1-002-031-001, "库区不存在");
|
||||||
ErrorCode DUPLICATE_RESERVOIR_NAME = new ErrorCode(1-002-031-002, "物料区域名称重复");
|
ErrorCode DUPLICATE_RESERVOIR_NAME = new ErrorCode(1-002-031-002, "库区名称重复");
|
||||||
|
|
||||||
// ========== 库位 1-002-032-000 ==========
|
// ========== 库位 1-002-032-000 ==========
|
||||||
ErrorCode HOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1-002-032-001, "库位不存在");
|
ErrorCode HOUSE_LOCATION_NOT_EXISTS = new ErrorCode(1-002-032-001, "库位不存在");
|
||||||
@ -187,10 +187,6 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode ROBOT_INFORMATION_NOT_EXISTS = new ErrorCode(1-002-034-001, "车辆信息不存在");
|
ErrorCode ROBOT_INFORMATION_NOT_EXISTS = new ErrorCode(1-002-034-001, "车辆信息不存在");
|
||||||
ErrorCode ROBOT_MAC_ADDRESS_EXISTS = new ErrorCode(1-002-034-002, "MAC地址重复");
|
ErrorCode ROBOT_MAC_ADDRESS_EXISTS = new ErrorCode(1-002-034-002, "MAC地址重复");
|
||||||
ErrorCode ROBOT_ROBOT_NO_EXISTS = new ErrorCode(1-002-034-003, "机器人编号重复");
|
ErrorCode ROBOT_ROBOT_NO_EXISTS = new ErrorCode(1-002-034-003, "机器人编号重复");
|
||||||
ErrorCode ROBOT_LAST_TASK_NO_EXISTS = new ErrorCode(1-002-034-004, "机器人前一个任务不存在或已经完成");
|
|
||||||
ErrorCode ROBOT_LAST_TASK_DELETE = new ErrorCode(1-002-034-005, "超过限制的时间,无法继续执行前一个任务");
|
|
||||||
ErrorCode ROBOT_NOT_FOUND_WAIT_ITEM = new ErrorCode(1-002-034-006, "没有空闲的停车点");
|
|
||||||
ErrorCode ROBOT_NOT_FOUND_FREE_CHARGING_STATION = new ErrorCode(1-002-034-007, "没有空闲的充电桩");
|
|
||||||
|
|
||||||
// ========== 机器人任务主表 1-002-035-000 ==========
|
// ========== 机器人任务主表 1-002-035-000 ==========
|
||||||
ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "机器人任务主表不存在");
|
ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "机器人任务主表不存在");
|
||||||
@ -204,12 +200,6 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode TASK_CHECK_UPDATE_STATUS = new ErrorCode(1-002-035-101, "订单更新失败");
|
ErrorCode TASK_CHECK_UPDATE_STATUS = new ErrorCode(1-002-035-101, "订单更新失败");
|
||||||
ErrorCode TASK_CHECK_EXIST_NO = new ErrorCode(1-002-035-102, "订单号已存在");
|
ErrorCode TASK_CHECK_EXIST_NO = new ErrorCode(1-002-035-102, "订单号已存在");
|
||||||
ErrorCode TASK_TYPE_UN_EXIST = new ErrorCode(1-002-035-103, "找不到对应的任务类型");
|
ErrorCode TASK_TYPE_UN_EXIST = new ErrorCode(1-002-035-103, "找不到对应的任务类型");
|
||||||
ErrorCode TASK_TAKE_LOCATION_EMPTY = new ErrorCode(1-002-035-104, "取货库位没有库存");
|
|
||||||
ErrorCode TASK_TAKE_LOCATION_UPPER_LEVELS_NOT_EMPTY = new ErrorCode(1-002-035-105, "取货库位上层不为空");
|
|
||||||
ErrorCode TASK_RELEASE_LOCATION_NOT_EMPTY = new ErrorCode(1-002-035-106, "放货库位不为空");
|
|
||||||
ErrorCode TASK_RELEASE_LOCATION_LOWER_LEVELS_EMPTY = new ErrorCode(1-002-035-107, "放货库位下层为空");
|
|
||||||
ErrorCode TASK_TAKE_LOCATION_HAVE_OTHER_TASK = new ErrorCode(1-002-035-108, "取货库位已经分配了其他任务");
|
|
||||||
ErrorCode TASK_RELEASE_LOCATION_HAVE_OTHER_TASK = new ErrorCode(1-002-035-109, "放货库位已经分配了其他任务");
|
|
||||||
|
|
||||||
// ========== 机器人任务明细 1-002-036-000 ==========
|
// ========== 机器人任务明细 1-002-036-000 ==========
|
||||||
ErrorCode TASK_DETAIL_NOT_EXISTS = new ErrorCode(1-002-036-001, "机器人任务明细不存在");
|
ErrorCode TASK_DETAIL_NOT_EXISTS = new ErrorCode(1-002-036-001, "机器人任务明细不存在");
|
||||||
@ -260,6 +250,4 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode OPERATION_LOG_NOT_EXISTS = new ErrorCode(1_002_049_001, "机器人动作记录不存在");
|
ErrorCode OPERATION_LOG_NOT_EXISTS = new ErrorCode(1_002_049_001, "机器人动作记录不存在");
|
||||||
// ========== 用户操作记录 1_002_050_001 ==========
|
// ========== 用户操作记录 1_002_050_001 ==========
|
||||||
ErrorCode USER_OPERATION_LOG_NOT_EXISTS = new ErrorCode(1_002_050_001, "用户操作记录不存在");
|
ErrorCode USER_OPERATION_LOG_NOT_EXISTS = new ErrorCode(1_002_050_001, "用户操作记录不存在");
|
||||||
// ========== 车辆衔接任务 1_002_051_001 ==========
|
|
||||||
ErrorCode TASK_PROCEED_NOT_EXISTS = new ErrorCode(1_002_051_001, "车辆衔接任务不存在");
|
|
||||||
}
|
}
|
||||||
|
@ -49,9 +49,10 @@ public class RobotGenericsStatusApiImpl implements RobotGenericsStatusApi {
|
|||||||
RobotStatusDataPoseDTO robotStatusDataPoseDTO= JSONUtil.toBean((String)object, RobotStatusDataPoseDTO.class);
|
RobotStatusDataPoseDTO robotStatusDataPoseDTO= JSONUtil.toBean((String)object, RobotStatusDataPoseDTO.class);
|
||||||
String batSoc = robotStatusData.getHwStates().getBatSoc();
|
String batSoc = robotStatusData.getHwStates().getBatSoc();
|
||||||
if (ObjectUtil.isNotEmpty(batSoc)) {
|
if (ObjectUtil.isNotEmpty(batSoc)) {
|
||||||
String[] split = batSoc.split("\\.");
|
BigDecimal a = new BigDecimal(batSoc);
|
||||||
batSoc = split[1].substring(0,2);
|
BigDecimal b = new BigDecimal("100");
|
||||||
robotStatusDataPoseDTO.setBatSoc(batSoc);
|
BigDecimal multiply = a.multiply(b);
|
||||||
|
robotStatusDataPoseDTO.setBatSoc(multiply.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
redisUtil.set(pose2dKey,JSON.toJSONString(robotStatusDataPoseDTO),robotPositionCacheTime);
|
redisUtil.set(pose2dKey,JSON.toJSONString(robotStatusDataPoseDTO),robotPositionCacheTime);
|
||||||
|
@ -75,7 +75,7 @@ public class SystemRateLimiterAspect {
|
|||||||
obj = joinPoint.proceed();
|
obj = joinPoint.proceed();
|
||||||
} else {
|
} else {
|
||||||
// 请求过于频繁
|
// 请求过于频繁
|
||||||
// logger.info("请求过于频繁 :{}", key);
|
logger.info("请求过于频繁 :{}", key);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.constant.path;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 路径规划相关缓存
|
|
||||||
*/
|
|
||||||
public class PathPlanningChcheConstant {
|
|
||||||
//发送给路径规划的任务 (拼接的是任务id)
|
|
||||||
public static String PATH_PLANNING_TASK = "path:planning:task";
|
|
||||||
}
|
|
@ -16,7 +16,7 @@ public class AuthRegisterReqVO {
|
|||||||
|
|
||||||
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
|
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudao")
|
||||||
@NotBlank(message = "用户账号不能为空")
|
@NotBlank(message = "用户账号不能为空")
|
||||||
@Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户名称由 数字、字母 组成")
|
@Pattern(regexp = "^[a-zA-Z0-9]{4,30}$", message = "用户账号由 数字、字母 组成")
|
||||||
@Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符")
|
@Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符")
|
||||||
private String username;
|
private String username;
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
|
|||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.validation.constraints.Size;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 库位新增/修改 Request VO")
|
@Schema(description = "管理后台 - 库位新增/修改 Request VO")
|
||||||
@ -35,7 +34,6 @@ public class WareHouseLocationSaveReqVO {
|
|||||||
private String locationYaw;
|
private String locationYaw;
|
||||||
|
|
||||||
@Schema(description = "物料信息")
|
@Schema(description = "物料信息")
|
||||||
@Size(min = 0,max = 100 ,message = "物料信息长度超过限制")
|
|
||||||
private String skuInfo;
|
private String skuInfo;
|
||||||
|
|
||||||
@Schema(description = "物料批次号")
|
@Schema(description = "物料批次号")
|
||||||
|
@ -131,13 +131,4 @@ public class DeviceInformationController {
|
|||||||
List<DeviceInformationRespVO> list = informationService.getInformationList(pageReqVO);
|
List<DeviceInformationRespVO> list = informationService.getInformationList(pageReqVO);
|
||||||
return success(BeanUtils.toBean(list, DeviceInformationRespVO.class));
|
return success(BeanUtils.toBean(list, DeviceInformationRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/getMapImageUrl")
|
|
||||||
@Operation(summary = "获得设备图标URL")
|
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
|
||||||
@PreAuthorize("@ss.hasPermission('device:information:getMapImageUrl')")
|
|
||||||
public CommonResult<String> getMapImageUrl(@RequestParam("deviceType") Integer deviceType) {
|
|
||||||
String str = informationService.getMapImageUrl(deviceType);
|
|
||||||
return success(str);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -41,14 +41,12 @@ public class DeviceInformationSaveReqVO {
|
|||||||
private Integer deviceType;
|
private Integer deviceType;
|
||||||
|
|
||||||
@Schema(description = "设备编号")
|
@Schema(description = "设备编号")
|
||||||
@Size(min = 0, max = 50 ,message = "设备编号长度超过限制")
|
|
||||||
private String deviceNo;
|
private String deviceNo;
|
||||||
|
|
||||||
@Schema(description = "设备位置")
|
@Schema(description = "设备位置")
|
||||||
private String deviceLocation;
|
private String deviceLocation;
|
||||||
|
|
||||||
@Schema(description = "mac地址")
|
@Schema(description = "mac地址")
|
||||||
@Size(min = 0, max = 50 ,message = "Mac地址长度超过限制")
|
|
||||||
private String macAddress;
|
private String macAddress;
|
||||||
|
|
||||||
@Schema(description = "设备在地图上图标")
|
@Schema(description = "设备在地图上图标")
|
||||||
@ -79,11 +77,9 @@ public class DeviceInformationSaveReqVO {
|
|||||||
private Integer deviceAttribute;
|
private Integer deviceAttribute;
|
||||||
|
|
||||||
@Schema(description = "设备IP")
|
@Schema(description = "设备IP")
|
||||||
@Size(min = 0, max = 20 ,message = "设备IP长度超过限制")
|
|
||||||
private String deviceIp;
|
private String deviceIp;
|
||||||
|
|
||||||
@Schema(description = "端口")
|
@Schema(description = "端口")
|
||||||
@Size(min = 0, max = 10 ,message = "端口长度超过限制")
|
|
||||||
private String devicePort;
|
private String devicePort;
|
||||||
|
|
||||||
@Schema(description = "最后使用者")
|
@Schema(description = "最后使用者")
|
||||||
|
@ -140,20 +140,4 @@ public class RobotInformationController {
|
|||||||
informationService.test(dto);
|
informationService.test(dto);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/cleanTrafficManagement")
|
|
||||||
@Operation(summary = "清除交管")
|
|
||||||
@PreAuthorize("@ss.hasPermission('robot:information:cleanTrafficManagement')")
|
|
||||||
public CommonResult<Boolean> cleanTrafficManagement(@RequestParam("robotNo") String robotNo) {
|
|
||||||
informationService.cleanTrafficManagement(robotNo);
|
|
||||||
return success(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/doTaskContinue")
|
|
||||||
@Operation(summary = "继续做任务")
|
|
||||||
@PreAuthorize("@ss.hasPermission('robot:information:doTaskContinue')")
|
|
||||||
public CommonResult<Boolean> doTaskContinue(@RequestParam("robotNo") String robotNo) {
|
|
||||||
informationService.doTaskContinue(robotNo);
|
|
||||||
return success(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.robot;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.proceed.*;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskProceedDO;
|
|
||||||
import cn.iocoder.yudao.module.system.service.robot.proceed.RobotTaskProceedService;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
|
|
||||||
import javax.validation.*;
|
|
||||||
import javax.servlet.http.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
|
||||||
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
|
||||||
|
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 车辆衔接任务")
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/robot/task-proceed")
|
|
||||||
@Validated
|
|
||||||
public class RobotTaskProceedController {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RobotTaskProceedService taskProceedService;
|
|
||||||
|
|
||||||
@PostMapping("/create")
|
|
||||||
@Operation(summary = "创建车辆衔接任务")
|
|
||||||
@PreAuthorize("@ss.hasPermission('robot:task-proceed:create')")
|
|
||||||
public CommonResult<Long> createTaskProceed(@Valid @RequestBody RobotTaskProceedSaveReqVO createReqVO) {
|
|
||||||
return success(taskProceedService.createTaskProceed(createReqVO));
|
|
||||||
}
|
|
||||||
|
|
||||||
@PutMapping("/update")
|
|
||||||
@Operation(summary = "更新车辆衔接任务")
|
|
||||||
@PreAuthorize("@ss.hasPermission('robot:task-proceed:update')")
|
|
||||||
public CommonResult<Boolean> updateTaskProceed(@Valid @RequestBody RobotTaskProceedSaveReqVO updateReqVO) {
|
|
||||||
taskProceedService.updateTaskProceed(updateReqVO);
|
|
||||||
return success(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@DeleteMapping("/delete")
|
|
||||||
@Operation(summary = "删除车辆衔接任务")
|
|
||||||
@Parameter(name = "id", description = "编号", required = true)
|
|
||||||
@PreAuthorize("@ss.hasPermission('robot:task-proceed:delete')")
|
|
||||||
public CommonResult<Boolean> deleteTaskProceed(@RequestParam("id") Long id) {
|
|
||||||
taskProceedService.deleteTaskProceed(id);
|
|
||||||
return success(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/get")
|
|
||||||
@Operation(summary = "获得车辆衔接任务")
|
|
||||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
|
||||||
@PreAuthorize("@ss.hasPermission('robot:task-proceed:query')")
|
|
||||||
public CommonResult<RobotTaskProceedRespVO> getTaskProceed(@RequestParam("id") Long id) {
|
|
||||||
RobotTaskProceedDO taskProceed = taskProceedService.getTaskProceed(id);
|
|
||||||
return success(BeanUtils.toBean(taskProceed, RobotTaskProceedRespVO.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/page")
|
|
||||||
@Operation(summary = "获得车辆衔接任务分页")
|
|
||||||
@PreAuthorize("@ss.hasPermission('robot:task-proceed:query')")
|
|
||||||
public CommonResult<PageResult<RobotTaskProceedRespVO>> getTaskProceedPage(@Valid RobotTaskProceedPageReqVO pageReqVO) {
|
|
||||||
PageResult<RobotTaskProceedDO> pageResult = taskProceedService.getTaskProceedPage(pageReqVO);
|
|
||||||
return success(BeanUtils.toBean(pageResult, RobotTaskProceedRespVO.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/export-excel")
|
|
||||||
@Operation(summary = "导出车辆衔接任务 Excel")
|
|
||||||
@PreAuthorize("@ss.hasPermission('robot:task-proceed:export')")
|
|
||||||
@ApiAccessLog(operateType = EXPORT)
|
|
||||||
public void exportTaskProceedExcel(@Valid RobotTaskProceedPageReqVO pageReqVO,
|
|
||||||
HttpServletResponse response) throws IOException {
|
|
||||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
|
||||||
List<RobotTaskProceedDO> list = taskProceedService.getTaskProceedPage(pageReqVO).getList();
|
|
||||||
// 导出 Excel
|
|
||||||
ExcelUtils.write(response, "车辆衔接任务.xls", "数据", RobotTaskProceedRespVO.class,
|
|
||||||
BeanUtils.toBean(list, RobotTaskProceedRespVO.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.robot.proceed;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 车辆衔接任务分页 Request VO")
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@ToString(callSuper = true)
|
|
||||||
public class RobotTaskProceedPageReqVO extends PageParam {
|
|
||||||
|
|
||||||
@Schema(description = "任务号")
|
|
||||||
private String taskNo;
|
|
||||||
|
|
||||||
@Schema(description = "机器人任务主表id", example = "25623")
|
|
||||||
private Long robotTaskId;
|
|
||||||
|
|
||||||
@Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)", example = "2")
|
|
||||||
private Integer taskType;
|
|
||||||
|
|
||||||
@Schema(description = "出现异常时的任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)")
|
|
||||||
private Long taskStage;
|
|
||||||
|
|
||||||
@Schema(description = "robot_task_detail的id", example = "30327")
|
|
||||||
private Long taskDetailId;
|
|
||||||
|
|
||||||
@Schema(description = "首次执行的AGV编号")
|
|
||||||
private String robotNo;
|
|
||||||
|
|
||||||
@Schema(description = "接力的AGV编号")
|
|
||||||
private String proceedRobotNo;
|
|
||||||
|
|
||||||
@Schema(description = "创建时间")
|
|
||||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
|
||||||
private LocalDateTime[] createTime;
|
|
||||||
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.robot.proceed;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import com.alibaba.excel.annotation.*;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 车辆衔接任务 Response VO")
|
|
||||||
@Data
|
|
||||||
@ExcelIgnoreUnannotated
|
|
||||||
public class RobotTaskProceedRespVO {
|
|
||||||
|
|
||||||
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2854")
|
|
||||||
@ExcelProperty("主键ID")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Schema(description = "任务号")
|
|
||||||
@ExcelProperty("任务号")
|
|
||||||
private String taskNo;
|
|
||||||
|
|
||||||
@Schema(description = "机器人任务主表id", example = "25623")
|
|
||||||
@ExcelProperty("机器人任务主表id")
|
|
||||||
private Long robotTaskId;
|
|
||||||
|
|
||||||
@Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)", example = "2")
|
|
||||||
@ExcelProperty("任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)")
|
|
||||||
private Integer taskType;
|
|
||||||
|
|
||||||
@Schema(description = "出现异常时的任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)")
|
|
||||||
@ExcelProperty("出现异常时的任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)")
|
|
||||||
private Long taskStage;
|
|
||||||
|
|
||||||
@Schema(description = "robot_task_detail的id", example = "30327")
|
|
||||||
@ExcelProperty("robot_task_detail的id")
|
|
||||||
private Long taskDetailId;
|
|
||||||
|
|
||||||
@Schema(description = "首次执行的AGV编号")
|
|
||||||
@ExcelProperty("首次执行的AGV编号")
|
|
||||||
private String robotNo;
|
|
||||||
|
|
||||||
@Schema(description = "接力的AGV编号")
|
|
||||||
@ExcelProperty("接力的AGV编号")
|
|
||||||
private String proceedRobotNo;
|
|
||||||
|
|
||||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
|
||||||
@ExcelProperty("创建时间")
|
|
||||||
private LocalDateTime createTime;
|
|
||||||
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.robot.proceed;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import javax.validation.constraints.*;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 车辆衔接任务新增/修改 Request VO")
|
|
||||||
@Data
|
|
||||||
@Builder
|
|
||||||
public class RobotTaskProceedSaveReqVO {
|
|
||||||
|
|
||||||
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2854")
|
|
||||||
private Long id;
|
|
||||||
|
|
||||||
@Schema(description = "任务号")
|
|
||||||
private String taskNo;
|
|
||||||
|
|
||||||
@Schema(description = "机器人任务主表id", example = "25623")
|
|
||||||
private Long robotTaskId;
|
|
||||||
|
|
||||||
@Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)", example = "2")
|
|
||||||
private Integer taskType;
|
|
||||||
|
|
||||||
@Schema(description = "出现异常时的任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)")
|
|
||||||
private Long taskStage;
|
|
||||||
|
|
||||||
@Schema(description = "robot_task_detail的id", example = "30327")
|
|
||||||
private Long taskDetailId;
|
|
||||||
|
|
||||||
@Schema(description = "首次执行的AGV编号")
|
|
||||||
private String robotNo;
|
|
||||||
|
|
||||||
@Schema(description = "接力的AGV编号")
|
|
||||||
private String proceedRobotNo;
|
|
||||||
|
|
||||||
}
|
|
@ -24,9 +24,6 @@ public class TaskAssignDTO {
|
|||||||
@Schema(description = "AGV编号")
|
@Schema(description = "AGV编号")
|
||||||
private String robotNo;
|
private String robotNo;
|
||||||
|
|
||||||
@Schema(description = "等待点id")
|
|
||||||
private String waitId;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取机器人要做的任务描述
|
* 获取机器人要做的任务描述
|
||||||
* @return
|
* @return
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.dal.dataobject.robot;
|
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 车辆衔接任务 DO
|
|
||||||
*
|
|
||||||
* @author 陈宾顺
|
|
||||||
*/
|
|
||||||
@TableName("robot_task_proceed")
|
|
||||||
@KeySequence("robot_task_proceed_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
|
||||||
@Data
|
|
||||||
@EqualsAndHashCode(callSuper = true)
|
|
||||||
@ToString(callSuper = true)
|
|
||||||
@Builder
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
public class RobotTaskProceedDO extends BaseDO {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 主键ID
|
|
||||||
*/
|
|
||||||
@TableId
|
|
||||||
private Long id;
|
|
||||||
/**
|
|
||||||
* 任务号
|
|
||||||
*/
|
|
||||||
private String taskNo;
|
|
||||||
/**
|
|
||||||
* 机器人任务主表id
|
|
||||||
*/
|
|
||||||
private Long robotTaskId;
|
|
||||||
/**
|
|
||||||
* 任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)
|
|
||||||
*/
|
|
||||||
private Integer taskType;
|
|
||||||
/**
|
|
||||||
* 出现异常时的任务阶段(0:待执行、1:前往取货、2:取货中、3:前往放货、4:放货中、5:结束、6:移动中、7:正在充电)
|
|
||||||
*/
|
|
||||||
private Long taskStage;
|
|
||||||
/**
|
|
||||||
* robot_task_detail的id
|
|
||||||
*/
|
|
||||||
private Long taskDetailId;
|
|
||||||
/**
|
|
||||||
* 首次执行的AGV编号
|
|
||||||
*/
|
|
||||||
private String robotNo;
|
|
||||||
/**
|
|
||||||
* 接力的AGV编号
|
|
||||||
*/
|
|
||||||
private String proceedRobotNo;
|
|
||||||
|
|
||||||
}
|
|
@ -32,20 +32,7 @@ public interface DeviceInformationMapper extends BaseMapperX<DeviceInformationDO
|
|||||||
.orderByDesc(DeviceInformationDO::getId));
|
.orderByDesc(DeviceInformationDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新设备使用中
|
|
||||||
* @param deviceNo
|
|
||||||
* @param deviceUseStatus
|
|
||||||
* @param lastUser
|
|
||||||
*/
|
|
||||||
void updateDeviceUseStatus(@Param("deviceNo") String deviceNo,
|
void updateDeviceUseStatus(@Param("deviceNo") String deviceNo,
|
||||||
@Param("deviceUseStatus") String deviceUseStatus,
|
@Param("deviceUseStatus") String deviceUseStatus,
|
||||||
@Param("lastUser") String lastUser);
|
@Param("deviceEnable") Integer deviceEnable);
|
||||||
|
|
||||||
/**
|
|
||||||
* 设置设备空闲
|
|
||||||
* @param lastUser
|
|
||||||
*/
|
|
||||||
void setDeviceReleaseByLastUser(@Param("lastUser") String lastUser,
|
|
||||||
@Param("deviceUseStatus") String deviceUseStatus);
|
|
||||||
}
|
}
|
@ -1,33 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.dal.mysql.robot;
|
|
||||||
|
|
||||||
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.proceed.RobotTaskProceedPageReqVO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskProceedDO;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 车辆衔接任务 Mapper
|
|
||||||
*
|
|
||||||
* @author 陈宾顺
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface RobotTaskProceedMapper extends BaseMapperX<RobotTaskProceedDO> {
|
|
||||||
|
|
||||||
default PageResult<RobotTaskProceedDO> selectPage(RobotTaskProceedPageReqVO reqVO) {
|
|
||||||
return selectPage(reqVO, new LambdaQueryWrapperX<RobotTaskProceedDO>()
|
|
||||||
.eqIfPresent(RobotTaskProceedDO::getTaskNo, reqVO.getTaskNo())
|
|
||||||
.eqIfPresent(RobotTaskProceedDO::getRobotTaskId, reqVO.getRobotTaskId())
|
|
||||||
.eqIfPresent(RobotTaskProceedDO::getTaskType, reqVO.getTaskType())
|
|
||||||
.eqIfPresent(RobotTaskProceedDO::getTaskStage, reqVO.getTaskStage())
|
|
||||||
.eqIfPresent(RobotTaskProceedDO::getTaskDetailId, reqVO.getTaskDetailId())
|
|
||||||
.eqIfPresent(RobotTaskProceedDO::getRobotNo, reqVO.getRobotNo())
|
|
||||||
.eqIfPresent(RobotTaskProceedDO::getProceedRobotNo, reqVO.getProceedRobotNo())
|
|
||||||
.betweenIfPresent(RobotTaskProceedDO::getCreateTime, reqVO.getCreateTime())
|
|
||||||
.orderByDesc(RobotTaskProceedDO::getId));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -24,24 +24,4 @@ public enum DeviceTypeEnum {
|
|||||||
* 说明
|
* 说明
|
||||||
*/
|
*/
|
||||||
private final String msg;
|
private final String msg;
|
||||||
|
|
||||||
public static Integer getConfigType (Integer type) {
|
|
||||||
if (CHARGING_STATION.type.equals(type)) {
|
|
||||||
return 5;
|
|
||||||
}if (CONVEYOR_LINE.type.equals(type)) {
|
|
||||||
return 6;
|
|
||||||
}if (PALLETIZER.type.equals(type)) {
|
|
||||||
return 7;
|
|
||||||
}if (AUTOMATIC_DOOR.type.equals(type)) {
|
|
||||||
return 8;
|
|
||||||
}if (HOIST.type.equals(type)) {
|
|
||||||
return 9;
|
|
||||||
}if (SIGNAL_LIGHT.type.equals(type)) {
|
|
||||||
return 10;
|
|
||||||
}if (BUTTON_BOX.type.equals(type)) {
|
|
||||||
return 11;
|
|
||||||
}else {
|
|
||||||
return 12;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
package cn.iocoder.yudao.module.system.enums.robot.task;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* RobotAcceptTaskDTO的order_type
|
||||||
|
*//*
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum RobotTaksOrderTypeEnum {
|
||||||
|
|
||||||
|
AUTO_MOVE("AUTO_MOVE"), //自动移库任务
|
||||||
|
TASK("TASK"), //客户下发的任务
|
||||||
|
AUTO_CHARGE("AUTO_CHARGE"); //自动充电任务
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*//*
|
||||||
|
|
||||||
|
private final String type;
|
||||||
|
}
|
||||||
|
*/
|
@ -13,8 +13,7 @@ public enum RobotTaskStageEnum {
|
|||||||
RELEASEING(4L,"放货中"),
|
RELEASEING(4L,"放货中"),
|
||||||
DONE(5L,"结束"),
|
DONE(5L,"结束"),
|
||||||
MOVE(6L,"移动中"),
|
MOVE(6L,"移动中"),
|
||||||
CHARGEING(7L,"待执行正在充电"),
|
CHARGEING(7L,"待执行正在充电");
|
||||||
CLOSE(8L,"任务已取消");
|
|
||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*/
|
||||||
|
@ -60,7 +60,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
|||||||
public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
|
public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateHouseLocationExists(updateReqVO.getId());
|
validateHouseLocationExists(updateReqVO.getId());
|
||||||
String str = "修改库位信息 ";
|
String str = "";
|
||||||
WareHouseLocationDO wareHouseLocationDO = houseLocationMapper.selectById(updateReqVO.getId());
|
WareHouseLocationDO wareHouseLocationDO = houseLocationMapper.selectById(updateReqVO.getId());
|
||||||
if (!wareHouseLocationDO.getLocationEnable().equals(updateReqVO.getLocationEnable())) {
|
if (!wareHouseLocationDO.getLocationEnable().equals(updateReqVO.getLocationEnable())) {
|
||||||
if (LocationEnableEnum.YES.getType().equals(updateReqVO.getLocationEnable())) {
|
if (LocationEnableEnum.YES.getType().equals(updateReqVO.getLocationEnable())) {
|
||||||
|
@ -130,11 +130,4 @@ public interface DeviceInformationService extends IService<DeviceInformationDO>
|
|||||||
* @param deviceNo
|
* @param deviceNo
|
||||||
*/
|
*/
|
||||||
void chargeDeviceShrink(String deviceNo);
|
void chargeDeviceShrink(String deviceNo);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取图标URL
|
|
||||||
* @param deviceType
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
String getMapImageUrl(Integer deviceType);
|
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInfo
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.config.CommonConfigDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||||
@ -23,7 +22,6 @@ import cn.iocoder.yudao.module.system.enums.device.DeviceAttributeEnum;
|
|||||||
import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.device.DeviceTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.device.DeviceTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum;
|
import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum;
|
||||||
import cn.iocoder.yudao.module.system.service.config.CommonConfigService;
|
|
||||||
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
||||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
||||||
@ -80,9 +78,6 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
@Resource
|
@Resource
|
||||||
private RobotWarnMsgService warnMsgService;
|
private RobotWarnMsgService warnMsgService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private CommonConfigService configService;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createInformation(DeviceInformationSaveReqVO createReqVO) {
|
public Long createInformation(DeviceInformationSaveReqVO createReqVO) {
|
||||||
// -- 先判断库里是否有相通的mac地址数据
|
// -- 先判断库里是否有相通的mac地址数据
|
||||||
@ -143,12 +138,6 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
validateInformationExists(id);
|
validateInformationExists(id);
|
||||||
// 删除
|
// 删除
|
||||||
informationMapper.deleteById(id);
|
informationMapper.deleteById(id);
|
||||||
|
|
||||||
DeviceInformationDO deviceInformationDO = informationMapper.selectById(id);
|
|
||||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
|
||||||
.operateAction("删除设备 " + deviceInformationDO.getDeviceNo())
|
|
||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validateInformationExists(Long id) {
|
private void validateInformationExists(Long id) {
|
||||||
@ -395,35 +384,17 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
shrink(deviceInformationDO.getDeviceIp(), Integer.parseInt(deviceInformationDO.getDevicePort()), deviceNo);
|
shrink(deviceInformationDO.getDeviceIp(), Integer.parseInt(deviceInformationDO.getDevicePort()), deviceNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getMapImageUrl(Integer deviceType) {
|
|
||||||
Integer configType = DeviceTypeEnum.getConfigType(deviceType);
|
|
||||||
if (ObjectUtil.isEmpty(configType)) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
CommonConfigDO config = configService.getConfig(configType.longValue());
|
|
||||||
if (ObjectUtil.isEmpty(config)) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return config.getConfigStr();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void shrink(String ip, int port, String deviceNo) {
|
public void shrink(String ip, int port, String deviceNo) {
|
||||||
boolean success = true;
|
boolean success = true;
|
||||||
short[] shrinkArr = {0};
|
short[] shrinkArr = {0};
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
ModbusMaster asciiMaster = null;
|
|
||||||
try {
|
try {
|
||||||
asciiMaster = ModbusUtils.getMaster(ip, port);
|
ModbusMaster asciiMaster = ModbusUtils.getMaster(ip, port);
|
||||||
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, shrinkArr);
|
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, shrinkArr);
|
||||||
} catch (ModbusInitException | ModbusTransportException e) {
|
} catch (ModbusInitException | ModbusTransportException e) {
|
||||||
log.info("充电设备缩回时,出现异常 :{}", ip);
|
log.info("充电设备缩回时,出现异常 :{}", ip);
|
||||||
warnMsgService.addWarnMsg(deviceNo + " 充电设备缩回失败");
|
warnMsgService.addWarnMsg(deviceNo + " 充电设备缩回失败");
|
||||||
success = false;
|
success = false;
|
||||||
}finally {
|
|
||||||
if (ObjectUtil.isNotEmpty(asciiMaster)) {
|
|
||||||
asciiMaster.destroy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
@ -442,9 +413,8 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
short[] extendArr = {1};
|
short[] extendArr = {1};
|
||||||
short[] shrinkArr = {0};
|
short[] shrinkArr = {0};
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
ModbusMaster asciiMaster = null;
|
|
||||||
try {
|
try {
|
||||||
asciiMaster = ModbusUtils.getMaster(ip, port);
|
ModbusMaster asciiMaster = ModbusUtils.getMaster(ip, port);
|
||||||
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, shrinkArr);
|
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, shrinkArr);
|
||||||
Thread.sleep(2500);
|
Thread.sleep(2500);
|
||||||
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, extendArr);
|
ModbusUtils.writeHoldingRegisters(asciiMaster, 1, 0, extendArr);
|
||||||
@ -452,10 +422,6 @@ public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationM
|
|||||||
log.info("充电设备伸出时,出现异常 :{}", ip);
|
log.info("充电设备伸出时,出现异常 :{}", ip);
|
||||||
warnMsgService.addWarnMsg(deviceNo + " 充电设备伸出失败");
|
warnMsgService.addWarnMsg(deviceNo + " 充电设备伸出失败");
|
||||||
success = false;
|
success = false;
|
||||||
}finally {
|
|
||||||
if (ObjectUtil.isNotEmpty(asciiMaster)) {
|
|
||||||
asciiMaster.destroy();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
|
@ -57,11 +57,4 @@ public interface RobotTaskDetailActionLogService {
|
|||||||
* @param logs
|
* @param logs
|
||||||
*/
|
*/
|
||||||
void addLogInCache(List<RobotTaskDetailActionLogDO> logs);
|
void addLogInCache(List<RobotTaskDetailActionLogDO> logs);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取车辆的最后一条任务
|
|
||||||
* @param robotNo
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
RobotTaskDetailActionLogDO getLastTaskByRobotNo(String robotNo);
|
|
||||||
}
|
}
|
@ -1,13 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.log;
|
package cn.iocoder.yudao.module.system.service.log;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.RobotTaskDetailActionLogPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.RobotTaskDetailActionLogPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.RobotTaskDetailActionLogSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.RobotTaskDetailActionLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.log.RobotTaskDetailActionLogMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.log.RobotTaskDetailActionLogMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskStatusEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
@ -94,13 +91,4 @@ public class RobotTaskDetailActionLogServiceImpl implements RobotTaskDetailActio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public RobotTaskDetailActionLogDO getLastTaskByRobotNo(String robotNo) {
|
|
||||||
return taskDetailActionLogMapper.selectOne(new LambdaQueryWrapperX<RobotTaskDetailActionLogDO>()
|
|
||||||
.eq(RobotTaskDetailActionLogDO::getRobotNo, robotNo)
|
|
||||||
.eq(RobotTaskDetailActionLogDO::getCommandId, -1)
|
|
||||||
.orderByDesc(RobotTaskDetailActionLogDO::getCreateTime)
|
|
||||||
.last("limit 1"));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -101,6 +101,4 @@ public interface PositionMapItemService extends IService<PositionMapItemDO> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Object getAGVPointInformation(String macAddress);
|
Object getAGVPointInformation(String macAddress);
|
||||||
|
|
||||||
void setMapItemIdle(Long id);
|
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@ import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMa
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.common.ZeroOneEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -123,11 +122,4 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
|||||||
}
|
}
|
||||||
return redisUtil.get(pose2dKey);
|
return redisUtil.get(pose2dKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setMapItemIdle(Long id) {
|
|
||||||
PositionMapItemDO item = PositionMapItemDO.builder().id(id).useStatus(ZeroOneEnum.ZERO.getType()).build();
|
|
||||||
positionMapItemMapper.updateById(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -138,16 +138,4 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
|||||||
* 维护车机心跳
|
* 维护车机心跳
|
||||||
*/
|
*/
|
||||||
void rcsHeartBeat();
|
void rcsHeartBeat();
|
||||||
|
|
||||||
/**
|
|
||||||
* 清除交管
|
|
||||||
* @param robotNo
|
|
||||||
*/
|
|
||||||
void cleanTrafficManagement(String robotNo);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 继续做任务
|
|
||||||
* @param robotNo
|
|
||||||
*/
|
|
||||||
void doTaskContinue(String robotNo);
|
|
||||||
}
|
}
|
||||||
|
@ -7,78 +7,35 @@ import cn.hutool.json.JSONUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
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.framework.security.core.util.SecurityFrameworkUtils;
|
||||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
import cn.iocoder.yudao.module.mqtt.api.common.CommonApi;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.PathPlanningApi;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotRcsHeartBeatDTO;
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotRcsHeartBeatDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.api.robot.RequestProcessor;
|
import cn.iocoder.yudao.module.system.api.robot.RequestProcessor;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.FloorZoneDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.FloorZoneDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO;
|
import cn.iocoder.yudao.module.system.api.robot.vo.RobotInformationVO;
|
||||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningChcheConstant;
|
|
||||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTopicConstant;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.log.vo.UserOperationLogSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.proceed.RobotTaskProceedSaveReqVO;
|
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.tool.dto.CleanAgvDTO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.informationmapassociation.InformationMapAssociationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.informationmapassociation.InformationMapAssociationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.log.RobotTaskDetailActionLogDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotModelDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotModelDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.wait.MoveToWaitDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotInformationMapper;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotModelMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotModelMapper;
|
||||||
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.common.ZeroOneEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.device.DeviceTypeEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.device.DeviceUseStatusEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.item.PositionMapItemEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.path.PathTaskTypeToRobotEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.redis.RobotCacheLockEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.RobotStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.RobotStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskDetailStatusEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskModelEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskModelEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.actionlog.ActionStatusEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.information.RobotStatisticsTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.information.RobotStatisticsTypeEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.service.informationmapassociation.InformationMapAssociationService;
|
import cn.iocoder.yudao.module.system.service.informationmapassociation.InformationMapAssociationService;
|
||||||
import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogService;
|
|
||||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
|
||||||
import cn.iocoder.yudao.module.system.service.robot.pathplanning.RobotPathPlanningService;
|
|
||||||
import cn.iocoder.yudao.module.system.service.robot.proceed.RobotTaskProceedService;
|
|
||||||
import cn.iocoder.yudao.module.system.service.wait.MoveToWaitService;
|
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
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.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.redisson.api.RLock;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -87,7 +44,6 @@ import java.util.function.Function;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0;
|
|
||||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -97,7 +53,6 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
@Slf4j
|
|
||||||
public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMapper, RobotInformationDO> implements RobotInformationService {
|
public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMapper, RobotInformationDO> implements RobotInformationService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
@ -114,33 +69,6 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
@Resource
|
@Resource
|
||||||
private UserOperationLogService userOperationLogService;
|
private UserOperationLogService userOperationLogService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RobotTaskDetailActionLogService taskDetailActionLogService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private DeviceInformationMapper deviceInformationMapper;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RobotTaskDetailMapper taskDetailMapper;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PositionMapItemService positionMapItemService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private MoveToWaitService moveToWaitService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RobotTaskProceedService taskProceedService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RobotTaskMapper taskMapper;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private RobotPathPlanningService robotPathPlanningService;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PositionMapItemMapper positionMapItemMapper;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
@Resource
|
@Resource
|
||||||
@ -149,14 +77,6 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
private InformationMapAssociationService informationMapAssociationService;
|
private InformationMapAssociationService informationMapAssociationService;
|
||||||
// -- 获取所有的设备信息key
|
// -- 获取所有的设备信息key
|
||||||
public static final String key = RobotTaskChcheConstant.ROBOT_GET_ROBOT_INFO;
|
public static final String key = RobotTaskChcheConstant.ROBOT_GET_ROBOT_INFO;
|
||||||
@Autowired
|
|
||||||
private WareHouseLocationMapper wareHouseLocationMapper;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PathPlanningApi pathPlanningApi;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RedissonUtils redissonUtils;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createInformation(RobotInformationSaveReqVO createReqVO) {
|
public Long createInformation(RobotInformationSaveReqVO createReqVO) {
|
||||||
@ -196,7 +116,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
}
|
}
|
||||||
|
|
||||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
.operateAction("新增车辆 " + createReqVO.getRobotNo())
|
.operateAction("新增车辆 "+createReqVO.getRobotNo())
|
||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
// 返回
|
// 返回
|
||||||
@ -246,13 +166,13 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
if (!robotInformationDO.getRobotTaskModel().equals(updateReqVO.getRobotTaskModel())
|
if (!robotInformationDO.getRobotTaskModel().equals(updateReqVO.getRobotTaskModel())
|
||||||
&& RobotTaskModelEnum.REJECTION.getType().equals(updateReqVO.getRobotTaskModel())) {
|
&& RobotTaskModelEnum.REJECTION.getType().equals(updateReqVO.getRobotTaskModel())) {
|
||||||
str = ",且设置车辆锁定";
|
str = ",且设置车辆锁定";
|
||||||
} else if (!robotInformationDO.getRobotTaskModel().equals(updateReqVO.getRobotTaskModel())
|
}else if (!robotInformationDO.getRobotTaskModel().equals(updateReqVO.getRobotTaskModel())
|
||||||
&& RobotTaskModelEnum.NORMAL.getType().equals(updateReqVO.getRobotTaskModel())) {
|
&& RobotTaskModelEnum.NORMAL.getType().equals(updateReqVO.getRobotTaskModel())) {
|
||||||
str = ",且设置车辆非锁定";
|
str = ",且设置车辆非锁定";
|
||||||
}
|
}
|
||||||
|
|
||||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
.operateAction("更新车辆信息" + str)
|
.operateAction("更新车辆信息"+str)
|
||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
@ -266,7 +186,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
|
|
||||||
RobotInformationDO robotInformationDO = informationMapper.selectById(id);
|
RobotInformationDO robotInformationDO = informationMapper.selectById(id);
|
||||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
.operateAction("删除车辆 " + robotInformationDO.getRobotNo())
|
.operateAction("删除车辆 "+robotInformationDO.getRobotNo())
|
||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
@ -610,12 +530,12 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
if (ObjectUtil.isNotEmpty(o)) {
|
if (ObjectUtil.isNotEmpty(o)) {
|
||||||
// 化作列表
|
// 化作列表
|
||||||
List<RobotInformationVO> list = JSONUtil.toList(o.toString(), RobotInformationVO.class);
|
List<RobotInformationVO> list = JSONUtil.toList(o.toString(), RobotInformationVO.class);
|
||||||
return list.stream().collect(Collectors.toMap(RobotInformationVO::getMacAddress, Function.identity(), (v1, v2) -> v1));
|
return list.stream().collect(Collectors.toMap(RobotInformationVO::getMacAddress, Function.identity()));
|
||||||
} else {
|
} else {
|
||||||
List<RobotInformationDO> allRobotInfoList = this.list();
|
List<RobotInformationDO> allRobotInfoList = this.list();
|
||||||
List<RobotInformationVO> list = BeanUtil.copyToList(allRobotInfoList, RobotInformationVO.class);
|
List<RobotInformationVO> list = BeanUtil.copyToList(allRobotInfoList, RobotInformationVO.class);
|
||||||
redisUtil.set(key, JSONUtil.toJsonStr(list));
|
redisUtil.set(key, JSONUtil.toJsonStr(list));
|
||||||
return list.stream().collect(Collectors.toMap(RobotInformationVO::getMacAddress, Function.identity(), (v1, v2) -> v1));
|
return list.stream().collect(Collectors.toMap(RobotInformationVO::getMacAddress, Function.identity()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -701,343 +621,4 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
commonApi.commonMethod(new RobotRcsHeartBeatDTO(), topic);
|
commonApi.commonMethod(new RobotRcsHeartBeatDTO(), topic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 清除交管
|
|
||||||
*
|
|
||||||
* @param robotNo
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public void cleanTrafficManagement(String robotNo) {
|
|
||||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
|
||||||
.operateAction("清除交管 " + robotNo)
|
|
||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
|
||||||
RobotTaskDetailActionLogDO log = closeTask(robotNo);
|
|
||||||
if (ObjectUtil.isEmpty(log)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
RobotTaskDetailDO robotTaskDetail = taskDetailMapper.selectById(log.getTaskDetailId());
|
|
||||||
//移动、充电任务需手动关闭
|
|
||||||
if (PathTaskTypeEnum.CHARGE.getType().equals(log.getCommandType())
|
|
||||||
|| PathTaskTypeEnum.AUTO_CHARGE.getType().equals(log.getCommandType())) {
|
|
||||||
deviceInformationMapper.setDeviceReleaseByLastUser(robotNo, DeviceUseStatusEnum.IDLE.getType());
|
|
||||||
} else if (PathTaskTypeEnum.MOVE_TO_WAIT_STOP.getType().equals(log.getCommandType())) {
|
|
||||||
if (ObjectUtil.isNotEmpty(robotTaskDetail)) {
|
|
||||||
positionMapItemService.setMapItemIdle(robotTaskDetail.getToLocationId());
|
|
||||||
}
|
|
||||||
} else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(log.getCommandType())) {
|
|
||||||
MoveToWaitDO moveToWait = moveToWaitService.getMoveToWait(log.getTaskDetailId());
|
|
||||||
if (ObjectUtil.isNotEmpty(moveToWait)) {
|
|
||||||
positionMapItemService.setMapItemIdle(moveToWait.getPositionMapItemId());
|
|
||||||
}
|
|
||||||
} else if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(log.getCommandType())
|
|
||||||
|| PathTaskTypeEnum.TAKE.getType().equals(log.getCommandType())
|
|
||||||
|| PathTaskTypeEnum.RELEASE.getType().equals(log.getCommandType())) {
|
|
||||||
takeReleaseCleanTrafficManagement(robotTaskDetail);
|
|
||||||
}
|
|
||||||
//不释放机器人状态,怕机器人接新任务
|
|
||||||
}
|
|
||||||
|
|
||||||
public RobotTaskDetailActionLogDO closeTask(String robotNo) {
|
|
||||||
CleanAgvDTO build = CleanAgvDTO.builder().robotNo(robotNo).build();
|
|
||||||
commonApi.commonMethod(build, PathPlanningTopicConstant.CLEAN_AGV);
|
|
||||||
RobotTaskDetailActionLogDO log = taskDetailActionLogService.getLastTaskByRobotNo(robotNo);
|
|
||||||
if (ObjectUtil.isEmpty(log) || ActionStatusEnum.DONE.getType().equals(log.getActionStatus())) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String mac = getMacByRobotNo(robotNo);
|
|
||||||
robotCloseTaskDetail(log.getTaskDetailId() + "", mac, log.getCommandType());
|
|
||||||
return log;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 继续做任务
|
|
||||||
*
|
|
||||||
* @param robotNo
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void doTaskContinue(String robotNo) {
|
|
||||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
|
||||||
.operateAction("继续做任务 " + robotNo)
|
|
||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
|
||||||
RobotTaskDetailActionLogDO actionLog = closeTask(robotNo);
|
|
||||||
if (ObjectUtil.isEmpty(actionLog) || ActionStatusEnum.DONE.getType().equals(actionLog.getActionStatus())) {
|
|
||||||
throw exception(ROBOT_LAST_TASK_NO_EXISTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
String key = PathPlanningChcheConstant.PATH_PLANNING_TASK + actionLog.getTaskDetailId();
|
|
||||||
Object o = redisUtil.get(key);
|
|
||||||
if (ObjectUtil.isEmpty(o)) {
|
|
||||||
throw exception(ROBOT_LAST_TASK_DELETE);
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskToPathPlanningDTO pathPlanning = JSONUtil.toBean((String) o, TaskToPathPlanningDTO.class);
|
|
||||||
|
|
||||||
RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey());
|
|
||||||
String msg = "";
|
|
||||||
if (lock.tryLock()){
|
|
||||||
try {
|
|
||||||
resendToPP(pathPlanning,actionLog);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.error("下发任务给路径规划现异常 :{}",e);
|
|
||||||
msg = ObjectUtil.isNotEmpty(e.getMessage()) ? e.getMessage(): "任务下发失败";
|
|
||||||
} finally {
|
|
||||||
lock.unlock();
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
log.info("下发任务给路径规划未获取到锁");
|
|
||||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(msg)) {
|
|
||||||
throw exception0(TASK_CHECK_EXCEPTION.getCode(), msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将任务重新发给PP
|
|
||||||
* @param pathPlanning
|
|
||||||
* @param actionLog
|
|
||||||
*/
|
|
||||||
private void resendToPP(TaskToPathPlanningDTO pathPlanning, RobotTaskDetailActionLogDO actionLog) {
|
|
||||||
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
|
||||||
.eq(RobotInformationDO::getRobotNo, actionLog.getRobotNo()));
|
|
||||||
TaskRobotNoLimittationAreaDTO taskRobotNoLimittationAreaDTO =
|
|
||||||
robotPathPlanningService.getRobotNoLimitationArea(Collections.singletonList(robotInformationDO)).get(0);
|
|
||||||
|
|
||||||
List<TaskRobotNoLimittationAreaDTO> robotNoLimitions = Arrays.asList(taskRobotNoLimittationAreaDTO);
|
|
||||||
pathPlanning.setRobotNoLimitationAreaDTOS(robotNoLimitions);
|
|
||||||
|
|
||||||
if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(actionLog.getCommandType())
|
|
||||||
|| PathTaskTypeEnum.MOVE_TO_WAIT_STOP.getType().equals(actionLog.getCommandType())) {
|
|
||||||
moveToWaitTask(pathPlanning, actionLog.getRobotNo());
|
|
||||||
} else if (PathTaskTypeEnum.CHARGE.getType().equals(actionLog.getCommandType())
|
|
||||||
|| PathTaskTypeEnum.AUTO_CHARGE.getType().equals(actionLog.getCommandType())) {
|
|
||||||
chargeTask(pathPlanning,robotInformationDO);
|
|
||||||
} else if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(actionLog.getCommandType())) {
|
|
||||||
takeReleaseTask(pathPlanning);
|
|
||||||
} else if (PathTaskTypeEnum.TAKE.getType().equals(actionLog.getCommandType())) {
|
|
||||||
takeTask(pathPlanning);
|
|
||||||
}else if (PathTaskTypeEnum.RELEASE.getType().equals(actionLog.getCommandType())) {
|
|
||||||
releaseTask(pathPlanning);
|
|
||||||
}else if (PathTaskTypeEnum.MOVE.getType().equals(actionLog.getCommandType())) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
List<TaskToPathPlanningDTO> pathPlanningList = new ArrayList<>();
|
|
||||||
pathPlanningList.add(pathPlanning);
|
|
||||||
log.info("任务下发给PP :{}", JSON.toJSONString(pathPlanningList));
|
|
||||||
pathPlanningApi.synchronousLineObject(pathPlanningList, PathPlanningTopicConstant.TASK_ASSIGNMENT_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仅放货
|
|
||||||
* @param pathPlanning
|
|
||||||
*/
|
|
||||||
private void releaseTask(TaskToPathPlanningDTO pathPlanning) {
|
|
||||||
RobotTaskDetailDO robotTaskDetail = checkTaskDone(pathPlanning.getOrderId());
|
|
||||||
releaseCheck(robotTaskDetail.getToLocationId(), robotTaskDetail.getRobotTaskId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仅取货
|
|
||||||
* @param pathPlanning
|
|
||||||
*/
|
|
||||||
private void takeTask(TaskToPathPlanningDTO pathPlanning) {
|
|
||||||
RobotTaskDetailDO robotTaskDetail = checkTaskDone(pathPlanning.getOrderId());
|
|
||||||
takeCheck(robotTaskDetail.getFromLocationId(),robotTaskDetail.getRobotTaskId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public RobotTaskDetailDO checkTaskDone(String id){
|
|
||||||
RobotTaskDetailDO robotTaskDetail = taskDetailMapper.selectById(id);
|
|
||||||
if (RobotTaskStageEnum.DONE.getType().equals(robotTaskDetail.getTaskStage())) {
|
|
||||||
throw exception(ROBOT_LAST_TASK_NO_EXISTS);
|
|
||||||
}
|
|
||||||
return robotTaskDetail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取放货
|
|
||||||
* @param pathPlanning
|
|
||||||
*/
|
|
||||||
private void takeReleaseTask(TaskToPathPlanningDTO pathPlanning) {
|
|
||||||
RobotTaskDetailDO robotTaskDetail = checkTaskDone(pathPlanning.getOrderId());
|
|
||||||
if (!RobotTaskStageEnum.TAKEING.getType().equals(robotTaskDetail.getTaskStage())
|
|
||||||
&& !RobotTaskStageEnum.GO_TAKE.getType().equals(robotTaskDetail.getTaskStage())
|
|
||||||
&& !RobotTaskStageEnum.UN_START.getType().equals(robotTaskDetail.getTaskStage())) {
|
|
||||||
//只要放货
|
|
||||||
pathPlanning.setTakeLevel(null);
|
|
||||||
pathPlanning.setTakeGroupId(null);
|
|
||||||
pathPlanning.setTakeLocationNumber(null);
|
|
||||||
pathPlanning.setTakePointId(null);
|
|
||||||
pathPlanning.setTakeOffsetHeight(null);
|
|
||||||
pathPlanning.setTakeOffsetHeight(null);
|
|
||||||
pathPlanning.setTaskType(PathTaskTypeToRobotEnum.DROP_OFF_GOODS.getType());
|
|
||||||
}else {
|
|
||||||
takeCheck(robotTaskDetail.getFromLocationId(), robotTaskDetail.getRobotTaskId());
|
|
||||||
}
|
|
||||||
releaseCheck(robotTaskDetail.getToLocationId(),robotTaskDetail.getRobotTaskId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 校验放货任务
|
|
||||||
*
|
|
||||||
* @param id
|
|
||||||
* @param takeId
|
|
||||||
*/
|
|
||||||
private void releaseCheck(Long id, Long takeId) {
|
|
||||||
WareHouseLocationDO wareHouseLocation = wareHouseLocationMapper.selectById(id);
|
|
||||||
if (ZeroOneEnum.ONE.getType().equals(wareHouseLocation.getLocationUseStatus())) {
|
|
||||||
throw exception(TASK_RELEASE_LOCATION_NOT_EMPTY);
|
|
||||||
}
|
|
||||||
if (!wareHouseLocation.getTaskId().equals(takeId)) {
|
|
||||||
throw exception(TASK_RELEASE_LOCATION_HAVE_OTHER_TASK);
|
|
||||||
}
|
|
||||||
List<WareHouseLocationDO> locations = wareHouseLocationMapper.selectList(new LambdaQueryWrapperX<WareHouseLocationDO>()
|
|
||||||
.eq(WareHouseLocationDO::getMapItemId, wareHouseLocation.getMapItemId())
|
|
||||||
.ne(WareHouseLocationDO::getId,id));
|
|
||||||
if (ObjectUtil.isEmpty(locations)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
List<WareHouseLocationDO> bigNumbers = locations.stream()
|
|
||||||
.filter(v -> v.getLocationNumber() > wareHouseLocation.getLocationNumber()
|
|
||||||
&& ZeroOneEnum.ZERO.getType().equals(v.getLocationUseStatus()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
if (ObjectUtil.isNotEmpty(bigNumbers)) {
|
|
||||||
throw exception(TASK_RELEASE_LOCATION_LOWER_LEVELS_EMPTY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取货校验
|
|
||||||
*
|
|
||||||
* @param id
|
|
||||||
* @param takeId
|
|
||||||
*/
|
|
||||||
private void takeCheck(Long id, Long takeId) {
|
|
||||||
WareHouseLocationDO wareHouseLocation = wareHouseLocationMapper.selectById(id);
|
|
||||||
if (ZeroOneEnum.ZERO.getType().equals(wareHouseLocation.getLocationUseStatus())) {
|
|
||||||
throw exception(TASK_TAKE_LOCATION_EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!wareHouseLocation.getTaskId().equals(takeId)) {
|
|
||||||
throw exception(TASK_TAKE_LOCATION_HAVE_OTHER_TASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WareHouseLocationDO> locations = wareHouseLocationMapper.selectList(new LambdaQueryWrapperX<WareHouseLocationDO>()
|
|
||||||
.eq(WareHouseLocationDO::getMapItemId, wareHouseLocation.getMapItemId())
|
|
||||||
.ne(WareHouseLocationDO::getId,id));
|
|
||||||
if (ObjectUtil.isEmpty(locations)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
List<WareHouseLocationDO> bigNumbers = locations.stream()
|
|
||||||
.filter(v -> v.getLocationNumber() < wareHouseLocation.getLocationNumber()
|
|
||||||
&& ZeroOneEnum.ONE.getType().equals(v.getLocationUseStatus()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
if (ObjectUtil.isNotEmpty(bigNumbers)) {
|
|
||||||
throw exception(TASK_TAKE_LOCATION_UPPER_LEVELS_NOT_EMPTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 充电任务
|
|
||||||
* @param pathPlanning
|
|
||||||
* @param robot
|
|
||||||
*/
|
|
||||||
private void chargeTask(TaskToPathPlanningDTO pathPlanning, RobotInformationDO robot) {
|
|
||||||
List<DeviceInformationDO> deviceInformations = deviceInformationMapper.selectList(new LambdaQueryWrapperX<DeviceInformationDO>()
|
|
||||||
.eq(DeviceInformationDO::getDeviceEnable, ZeroOneEnum.ONE.getType())
|
|
||||||
.eq(DeviceInformationDO::getDeviceUseStatus, DeviceUseStatusEnum.IDLE.getType())
|
|
||||||
.eq(DeviceInformationDO::getDeviceType, DeviceTypeEnum.CHARGING_STATION.getType()));
|
|
||||||
if (ObjectUtil.isEmpty(deviceInformations)) {
|
|
||||||
log.info("没有空闲的充电桩 :{}",robot.getRobotNo());
|
|
||||||
throw exception(ROBOT_NOT_FOUND_FREE_CHARGING_STATION);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeviceInformationDO deviceInformationDO = deviceInformations.stream()
|
|
||||||
.filter(v -> v.getDeviceAttribute().equals(robot.getChargeType())
|
|
||||||
&& robot.getFloorAreaJson().contains(v.getPositionMapId()))
|
|
||||||
.findFirst()
|
|
||||||
.orElse(new DeviceInformationDO());
|
|
||||||
if (ObjectUtil.isEmpty(deviceInformationDO.getDeviceNo())) {
|
|
||||||
log.info("当前机器人查不到对应的充电桩类型、或者机器人不能在此区域充电 :{}",robot.getRobotNo());
|
|
||||||
throw exception(ROBOT_NOT_FOUND_FREE_CHARGING_STATION);
|
|
||||||
}
|
|
||||||
|
|
||||||
pathPlanning.setReleaseGroupId("POINT_" + deviceInformationDO.getPositionMapItemId());
|
|
||||||
pathPlanning.setReleasePointId(deviceInformationDO.getPositionMapItemId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移动到等待点
|
|
||||||
*
|
|
||||||
* @param pathPlanning
|
|
||||||
*/
|
|
||||||
private void moveToWaitTask(TaskToPathPlanningDTO pathPlanning, String robotNo) {
|
|
||||||
|
|
||||||
List<PositionMapItemDO> positionMapItems = positionMapItemMapper.selectList(new LambdaQueryWrapperX<PositionMapItemDO>()
|
|
||||||
.eq(PositionMapItemDO::getType, PositionMapItemEnum.STOP.getType())
|
|
||||||
.eq(PositionMapItemDO::getUseStatus, ZeroOneEnum.ZERO.getType()));
|
|
||||||
|
|
||||||
if (ObjectUtil.isEmpty(positionMapItems)) {
|
|
||||||
log.info("------没有空闲的停车点----- :{}", robotNo);
|
|
||||||
throw exception(ROBOT_NOT_FOUND_WAIT_ITEM);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> waitIds = positionMapItems
|
|
||||||
.stream()
|
|
||||||
.map(u -> u.getId() + "")
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
pathPlanning.setWaitIds(waitIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 取放货清除交管
|
|
||||||
*
|
|
||||||
* @param robotTaskDetail
|
|
||||||
*/
|
|
||||||
private void takeReleaseCleanTrafficManagement(RobotTaskDetailDO robotTaskDetail) {
|
|
||||||
if (RobotTaskStageEnum.UN_START.getType().equals(robotTaskDetail.getTaskStage())
|
|
||||||
|| RobotTaskStageEnum.GO_TAKE.getType().equals(robotTaskDetail.getTaskStage())) {
|
|
||||||
log.info("清除交管--任务阶段是前往取货/待执行/前往放货 :{}", robotTaskDetail.getRobotNo());
|
|
||||||
robotTaskDetail.setTaskStatus(RobotTaskDetailStatusEnum.NEW.getType());
|
|
||||||
robotTaskDetail.setRobotNo(null);
|
|
||||||
taskDetailMapper.updateById(robotTaskDetail);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
RobotTaskDO robotTaskDO = taskMapper.selectById(robotTaskDetail.getRobotTaskId());
|
|
||||||
RobotTaskProceedSaveReqVO proceed = RobotTaskProceedSaveReqVO.builder()
|
|
||||||
.taskNo(robotTaskDO.getTaskNo())
|
|
||||||
.robotTaskId(robotTaskDO.getId())
|
|
||||||
.taskType(robotTaskDetail.getTaskType())
|
|
||||||
.taskStage(robotTaskDetail.getTaskStage())
|
|
||||||
.taskDetailId(robotTaskDetail.getId())
|
|
||||||
.robotNo(robotTaskDetail.getRobotNo())
|
|
||||||
.build();
|
|
||||||
taskProceedService.createTaskProceed(proceed);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 车机关闭任务
|
|
||||||
*
|
|
||||||
* @param id
|
|
||||||
* @param mac
|
|
||||||
* @param orderType
|
|
||||||
*/
|
|
||||||
public void robotCloseTaskDetail(String id, String mac, String orderType) {
|
|
||||||
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
|
||||||
robotTask.setOrderId(id);
|
|
||||||
robotTask.setOrderType(orderType);
|
|
||||||
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac);
|
|
||||||
robotTask.setExecutionType(ExecutionTypeEnum.CANCEL.getType());
|
|
||||||
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.system.service.robot;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.validation.*;
|
import javax.validation.*;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
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.RobotTaskDetailLogResoVO;
|
||||||
@ -61,7 +60,6 @@ public interface RobotTaskService extends IService<RobotTaskDO> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取任务号
|
* 获取任务号
|
||||||
*
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
String getTaskNo();
|
String getTaskNo();
|
||||||
@ -74,15 +72,13 @@ public interface RobotTaskService extends IService<RobotTaskDO> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务日志分页
|
* 任务日志分页
|
||||||
*
|
|
||||||
* @param pageReqVO
|
* @param pageReqVO
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
PageResult<RobotTaskDetailLogResoVO> logPage(RobotTaskDetailLogVO pageReqVO);
|
PageResult<RobotTaskDetailLogResoVO> logPage( RobotTaskDetailLogVO pageReqVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加循环任务点位
|
* 添加循环任务点位
|
||||||
*
|
|
||||||
* @param id
|
* @param id
|
||||||
* @param taskDetailList
|
* @param taskDetailList
|
||||||
*/
|
*/
|
||||||
@ -92,16 +88,14 @@ public interface RobotTaskService extends IService<RobotTaskDO> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* PP分配任务
|
* PP分配任务
|
||||||
*
|
|
||||||
* @param message
|
* @param message
|
||||||
*/
|
*/
|
||||||
void assignTasks(String message);
|
void assignTasks(String message);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送关闭任务
|
* 发送关闭任务
|
||||||
*
|
|
||||||
* @param id
|
* @param id
|
||||||
* @param mac
|
* @param mac
|
||||||
*/
|
*/
|
||||||
void closeTaskDetail(String id, String mac, String orderType);
|
void closeTaskDetail(String id, String mac);
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,6 @@ import cn.iocoder.yudao.module.system.enums.robot.*;
|
|||||||
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.charge.ChargeTaskStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.task.RobotCommandTypeEnum;
|
||||||
//import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService;
|
//import cn.iocoder.yudao.module.system.service.robot.job.RobotCommonTaskService;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.task.RobotTaskStageEnum;
|
|
||||||
import cn.iocoder.yudao.module.system.enums.wait.WaitStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.wait.WaitStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.service.information.DeviceInformationService;
|
import cn.iocoder.yudao.module.system.service.information.DeviceInformationService;
|
||||||
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
import cn.iocoder.yudao.module.system.service.log.UserOperationLogService;
|
||||||
@ -184,7 +183,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
addResult = addTask(createReqVO);
|
addResult = addTask(createReqVO);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("下发任务出现异常 :{}", e);
|
log.error("下发任务出现异常 :{}", e);
|
||||||
addResult = ObjectUtil.isNotEmpty(e.getMessage()) ? e.getMessage(): "创建任务失败";
|
addResult = e.getMessage();
|
||||||
} finally {
|
} finally {
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
@ -390,7 +389,6 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
}
|
}
|
||||||
//后期需做状态映射
|
//后期需做状态映射
|
||||||
taskDetailDO.setTaskStatus(updateReqVO.getTaskStatus());
|
taskDetailDO.setTaskStatus(updateReqVO.getTaskStatus());
|
||||||
taskDetailDO.setTaskStage(RobotTaskStageEnum.CLOSE.getType());
|
|
||||||
|
|
||||||
if (RobotTaskTypeEnum.CHARGE.getType().equals(taskDetailDO.getTaskType())
|
if (RobotTaskTypeEnum.CHARGE.getType().equals(taskDetailDO.getTaskType())
|
||||||
&& RobotTaskTypeEnum.PARK.getType().equals(taskDetailDO.getTaskType())) {
|
&& RobotTaskTypeEnum.PARK.getType().equals(taskDetailDO.getTaskType())) {
|
||||||
@ -411,7 +409,7 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
|
|
||||||
String mac = robotInformationService.getMacByRobotNo(taskDetailDO.getRobotNo());
|
String mac = robotInformationService.getMacByRobotNo(taskDetailDO.getRobotNo());
|
||||||
|
|
||||||
closeTaskDetail(taskDetailDO.getId().toString(), mac, PathTaskTypeEnum.getTaskType(taskDetailDO.getTaskType()));
|
closeTaskDetail(taskDetailDO.getId().toString(),mac);
|
||||||
|
|
||||||
RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder()
|
RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder()
|
||||||
.robotNo(taskDetailDO.getRobotNo())
|
.robotNo(taskDetailDO.getRobotNo())
|
||||||
@ -458,10 +456,9 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void closeTaskDetail(String id, String mac, String orderType) {
|
public void closeTaskDetail(String id, String mac) {
|
||||||
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
||||||
robotTask.setOrderId(id);
|
robotTask.setOrderId(id);
|
||||||
robotTask.setOrderType(orderType);
|
|
||||||
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac);
|
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac);
|
||||||
robotTask.setExecutionType(ExecutionTypeEnum.CANCEL.getType());
|
robotTask.setExecutionType(ExecutionTypeEnum.CANCEL.getType());
|
||||||
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
||||||
@ -486,10 +483,8 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
Map<Long, String> deviceNoMap = new HashMap<>();
|
Map<Long, String> deviceNoMap = new HashMap<>();
|
||||||
Integer robotStatus = RobotStatusEnum.DOING.getType();
|
Integer robotStatus = RobotStatusEnum.DOING.getType();
|
||||||
|
|
||||||
RobotChargeLogDO robotChargeLogs = null;
|
if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(taskAssignDTO.getOrderType())) {
|
||||||
if (PathTaskTypeEnum.AUTO_CHARGE.getType().equals(taskAssignDTO.getOrderType())
|
RobotChargeLogDO robotChargeLogs = chargeLogMapper.selectById(taskAssignDTO.getOrderId());
|
||||||
|| PathTaskTypeEnum.CHARGE.getType().equals(taskAssignDTO.getOrderType())) {
|
|
||||||
robotChargeLogs = chargeLogMapper.selectById(taskAssignDTO.getOrderId());
|
|
||||||
|
|
||||||
robotChargeLogs.setTaskStatus(ChargeTaskStatusEnum.DOING.getType());
|
robotChargeLogs.setTaskStatus(ChargeTaskStatusEnum.DOING.getType());
|
||||||
chargeLogMapper.updateById(robotChargeLogs);
|
chargeLogMapper.updateById(robotChargeLogs);
|
||||||
@ -497,26 +492,26 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
robotStatus = RobotStatusEnum.CHARGE.getType();
|
robotStatus = RobotStatusEnum.CHARGE.getType();
|
||||||
if (ObjectUtil.isNotEmpty(robotChargeLogs.getTaskDetailId())) {
|
if (ObjectUtil.isNotEmpty(robotChargeLogs.getTaskDetailId())) {
|
||||||
deviceNoMap.put(robotChargeLogs.getTaskDetailId(), robotChargeLogs.getDeviceNo());
|
deviceNoMap.put(robotChargeLogs.getTaskDetailId(), robotChargeLogs.getDeviceNo());
|
||||||
|
detailId = robotChargeLogs.getTaskDetailId();
|
||||||
}
|
}
|
||||||
detailId = ObjectUtil.isNotEmpty(robotChargeLogs.getTaskDetailId()) ? robotChargeLogs.getTaskDetailId() : null;
|
|
||||||
|
|
||||||
} else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(taskAssignDTO.getOrderType())) {
|
} else if (PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(taskAssignDTO.getOrderType())) {
|
||||||
moveToWaitService.updateWaitStatusAndItrmId(taskAssignDTO.getOrderId(), WaitStatusEnum.GO_TO_WAIT.getType(), taskAssignDTO.getWaitId());
|
chargeDone(taskAssignDTO.getRobotNo());
|
||||||
|
moveToWaitService.updateWaitStatus(taskAssignDTO.getOrderId(), WaitStatusEnum.GO_TO_WAIT.getType());
|
||||||
|
} else if (PathTaskTypeEnum.CHARGE.getType().equals(taskAssignDTO.getOrderType())) {
|
||||||
|
robotStatus = RobotStatusEnum.CHARGE.getType();
|
||||||
|
detailId = taskAssignDTO.getOrderId();
|
||||||
} else {
|
} else {
|
||||||
|
chargeDone(taskAssignDTO.getRobotNo());
|
||||||
detailId = taskAssignDTO.getOrderId();
|
detailId = taskAssignDTO.getOrderId();
|
||||||
}
|
}
|
||||||
|
|
||||||
chargeDone(taskAssignDTO.getRobotNo());
|
|
||||||
|
|
||||||
robotInformationMapper.updateRobotListStatus(taskAssignDTO.getRobotNo(), robotStatus, taskAssignDTO.getOrderId());
|
robotInformationMapper.updateRobotListStatus(taskAssignDTO.getRobotNo(), robotStatus, taskAssignDTO.getOrderId());
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(detailId)) {
|
if (ObjectUtil.isNotEmpty(detailId)) {
|
||||||
setTaskDoing(detailId, taskAssignDTO.getRobotNo(), deviceNoMap, taskAssignDTO.getWaitId());
|
setTaskDoing(detailId, taskAssignDTO.getRobotNo(), deviceNoMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(robotChargeLogs)) {
|
|
||||||
setDeviceUseing(robotChargeLogs.getDeviceNo(), taskAssignDTO.getRobotNo());
|
|
||||||
}
|
|
||||||
|
|
||||||
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
RobotTaskDetailActionLogDO logOne = new RobotTaskDetailActionLogDO();
|
||||||
logOne.setCommandType(taskAssignDTO.getOrderType());
|
logOne.setCommandType(taskAssignDTO.getOrderType());
|
||||||
@ -530,16 +525,6 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新设备使用中
|
|
||||||
*
|
|
||||||
* @param deviceNo
|
|
||||||
* @param robotNo
|
|
||||||
*/
|
|
||||||
private void setDeviceUseing(String deviceNo, String robotNo) {
|
|
||||||
deviceInformationMapper.updateDeviceUseStatus(deviceNo, DeviceUseStatusEnum.USEING.getType(), robotNo);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送任务给车机
|
* 发送任务给车机
|
||||||
*
|
*
|
||||||
@ -621,24 +606,18 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
build.setHeight(height);
|
build.setHeight(height);
|
||||||
}
|
}
|
||||||
|
|
||||||
public RobotTaskDetailDO setTaskDoing(Long detailId, String robotNo, Map<Long, String> deviceNoMap,
|
public RobotTaskDetailDO setTaskDoing(Long detailId, String robotNo, Map<Long, String> deviceNoMap) {
|
||||||
String waitId) {
|
|
||||||
RobotTaskDetailDO taskDetailDO = taskDetailMapper.selectById(detailId);
|
RobotTaskDetailDO taskDetailDO = taskDetailMapper.selectById(detailId);
|
||||||
taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
|
taskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
|
||||||
taskDetailDO.setStartTime(LocalDateTime.now());
|
taskDetailDO.setStartTime(LocalDateTime.now());
|
||||||
if (ObjectUtil.isEmpty(taskDetailDO.getRobotNo())) {
|
if (ObjectUtil.isEmpty(taskDetailDO.getRobotNo())) {
|
||||||
taskDetailDO.setRobotNo(robotNo);
|
taskDetailDO.setRobotNo(robotNo);
|
||||||
}
|
}
|
||||||
if (RobotTaskTypeEnum.PARK.getType().equals(taskDetailDO.getTaskType())
|
if (ObjectUtil.isEmpty(taskDetailDO.getToLocationNo())
|
||||||
&& ObjectUtil.isNotEmpty(deviceNoMap.get(taskDetailDO.getId()))) {
|
&& ObjectUtil.isNotEmpty(deviceNoMap.get(taskDetailDO.getId()))) {
|
||||||
taskDetailDO.setToLocationNo(deviceNoMap.get(taskDetailDO.getId()));
|
taskDetailDO.setToLocationNo(deviceNoMap.get(taskDetailDO.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RobotTaskTypeEnum.PARK.getType().equals(taskDetailDO.getTaskType())
|
|
||||||
&& ObjectUtil.isNotEmpty(waitId)) {
|
|
||||||
taskDetailDO.setToLocationId(Long.valueOf(waitId));
|
|
||||||
}
|
|
||||||
|
|
||||||
taskDetailMapper.updateById(taskDetailDO);
|
taskDetailMapper.updateById(taskDetailDO);
|
||||||
RobotTaskDO task = taskMapper.selectById(taskDetailDO.getRobotTaskId());
|
RobotTaskDO task = taskMapper.selectById(taskDetailDO.getRobotTaskId());
|
||||||
task.setTaskStatus(RobotTaskStatusEnum.DOING.getType());
|
task.setTaskStatus(RobotTaskStatusEnum.DOING.getType());
|
||||||
@ -1344,7 +1323,6 @@ public class RobotTaskServiceImpl extends ServiceImpl<RobotTaskMapper, RobotTask
|
|||||||
DeviceInformationDO deviceInformationDO = deviceInformationMapper.selectOne(new LambdaQueryWrapperX<DeviceInformationDO>()
|
DeviceInformationDO deviceInformationDO = deviceInformationMapper.selectOne(new LambdaQueryWrapperX<DeviceInformationDO>()
|
||||||
.eq(DeviceInformationDO::getDeviceNo, robotChargeLogDO.getDeviceNo()));
|
.eq(DeviceInformationDO::getDeviceNo, robotChargeLogDO.getDeviceNo()));
|
||||||
deviceInformationDO.setDeviceUseStatus(DeviceUseStatusEnum.IDLE.getType());
|
deviceInformationDO.setDeviceUseStatus(DeviceUseStatusEnum.IDLE.getType());
|
||||||
deviceInformationDO.setLastUser(null);
|
|
||||||
deviceInformationMapper.updateById(deviceInformationDO);
|
deviceInformationMapper.updateById(deviceInformationDO);
|
||||||
log.info("充电桩设置为空闲 :{}", deviceInformationDO.getDeviceNo());
|
log.info("充电桩设置为空闲 :{}", deviceInformationDO.getDeviceNo());
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.robot.pathplanning;
|
package cn.iocoder.yudao.module.system.service.robot.pathplanning;
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotChargeLogDO;
|
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.RobotInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
||||||
@ -15,6 +14,4 @@ public interface RobotPathPlanningService {
|
|||||||
void sendChargeTaskToPP(List<RobotChargeLogDO> logs,
|
void sendChargeTaskToPP(List<RobotChargeLogDO> logs,
|
||||||
List<RobotTaskDetailDO> taskDetailDOS,
|
List<RobotTaskDetailDO> taskDetailDOS,
|
||||||
List<RobotInformationDO> robots);
|
List<RobotInformationDO> robots);
|
||||||
|
|
||||||
List<TaskRobotNoLimittationAreaDTO> getRobotNoLimitationArea(List<RobotInformationDO> robots);
|
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
|||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO;
|
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskToPathPlanningDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.FloorZoneDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.FloorZoneDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
import cn.iocoder.yudao.module.system.api.robot.dto.RobotStatusDataPoseDTO;
|
||||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningChcheConstant;
|
|
||||||
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
import cn.iocoder.yudao.module.system.constant.path.PathPlanningTopicConstant;
|
||||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.RobotPositionMapDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.RobotPositionMapDTO;
|
||||||
@ -93,9 +92,6 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
@Value("${zn.robot_config.offset_height}")
|
@Value("${zn.robot_config.offset_height}")
|
||||||
private Double offsetHeight;
|
private Double offsetHeight;
|
||||||
|
|
||||||
@Value("${zn.path_planning.task_chche_time:604800}")
|
|
||||||
private Long taskChcheTime;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private MoveToWaitMapper moveToWaitMapper;
|
private MoveToWaitMapper moveToWaitMapper;
|
||||||
|
|
||||||
@ -140,7 +136,6 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理停车不锁车的任务
|
* 处理停车不锁车的任务
|
||||||
*
|
|
||||||
* @param taskDetailDOS
|
* @param taskDetailDOS
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -151,7 +146,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
if (RobotTaskTypeEnum.PARK.getType().equals(v.getTaskType())
|
if (RobotTaskTypeEnum.PARK.getType().equals(v.getTaskType())
|
||||||
&& ZeroOneEnum.ZERO.getType().equals(v.getNeedLock())) {
|
&& ZeroOneEnum.ZERO.getType().equals(v.getNeedLock())) {
|
||||||
parkList.add(v);
|
parkList.add(v);
|
||||||
} else if (!RobotTaskTypeEnum.CHARGE.getType().equals(v.getTaskType())) {
|
}else if (!RobotTaskTypeEnum.CHARGE.getType().equals(v.getTaskType())){
|
||||||
detailList.add(v);
|
detailList.add(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -303,8 +298,6 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
.taskType(PathTaskTypeToRobotEnum.MOVE.getType())
|
.taskType(PathTaskTypeToRobotEnum.MOVE.getType())
|
||||||
.waitIds(waitIds)
|
.waitIds(waitIds)
|
||||||
.build();
|
.build();
|
||||||
String key = PathPlanningChcheConstant.PATH_PLANNING_TASK + pathPlanning.getOrderId();
|
|
||||||
redisUtil.set(key, JSON.toJSONString(pathPlanning), taskChcheTime);
|
|
||||||
pathPlanningList.add(pathPlanning);
|
pathPlanningList.add(pathPlanning);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,10 +354,6 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
pathPlanning.setReleaseGroupId("POINT_" + v.getPositionMapItemId());
|
pathPlanning.setReleaseGroupId("POINT_" + v.getPositionMapItemId());
|
||||||
pathPlanning.setReleaseLocationNumber(releaseLocationNumberConfig);
|
pathPlanning.setReleaseLocationNumber(releaseLocationNumberConfig);
|
||||||
pathPlanning.setReleasePointId(v.getPositionMapItemId());
|
pathPlanning.setReleasePointId(v.getPositionMapItemId());
|
||||||
|
|
||||||
String key = PathPlanningChcheConstant.PATH_PLANNING_TASK + pathPlanning.getOrderId();
|
|
||||||
redisUtil.set(key, JSON.toJSONString(pathPlanning), taskChcheTime);
|
|
||||||
|
|
||||||
pathPlanningList.add(pathPlanning);
|
pathPlanningList.add(pathPlanning);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -430,9 +419,9 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
|
|
||||||
if (RobotTaskTypeEnum.PARK.getType().equals(taskDetailDO.getTaskType())
|
if (RobotTaskTypeEnum.PARK.getType().equals(taskDetailDO.getTaskType())
|
||||||
&& (ObjectUtil.isEmpty(waitIds) || waitIds.size() < i)) {
|
&& (ObjectUtil.isEmpty(waitIds) || waitIds.size() < i)) {
|
||||||
log.info("停车任务,没有多余的空闲点位 :{}", taskDetailDO.getId());
|
log.info("停车任务,没有多余的空闲点位 :{}",taskDetailDO.getId());
|
||||||
return;
|
return;
|
||||||
} else if (RobotTaskTypeEnum.PARK.getType().equals(taskDetailDO.getTaskType())) {
|
}else if (RobotTaskTypeEnum.PARK.getType().equals(taskDetailDO.getTaskType())) {
|
||||||
pathPlanning.setWaitIds(waitIds);
|
pathPlanning.setWaitIds(waitIds);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -471,12 +460,12 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
pathPlanning.setTakeOffsetHeight(offsetHeight);
|
pathPlanning.setTakeOffsetHeight(offsetHeight);
|
||||||
if (ObjectUtil.isNotEmpty(taskDetailDO.getFromLaneId())) {
|
if (ObjectUtil.isNotEmpty(taskDetailDO.getFromLaneId())) {
|
||||||
pathPlanning.setTakeGroupId("LINE_" + taskDetailDO.getFromLaneId());
|
pathPlanning.setTakeGroupId("LINE_" + taskDetailDO.getFromLaneId());
|
||||||
} else {
|
}else {
|
||||||
pathPlanning.setTakeGroupId("POINT_" + taskDetailDO.getFromMapItemId());
|
pathPlanning.setTakeGroupId("POINT_" + taskDetailDO.getFromMapItemId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(taskDetailDO.getToLocationId())) {
|
if (ObjectUtil.isNotEmpty(taskDetailDO.getToLocationId())){
|
||||||
pathPlanning.setReleaseLocationNumber(taskDetailDO.getToLocationNumber());
|
pathPlanning.setReleaseLocationNumber(taskDetailDO.getToLocationNumber());
|
||||||
pathPlanning.setReleasePointId(toLocation.getMapItemId());
|
pathPlanning.setReleasePointId(toLocation.getMapItemId());
|
||||||
if (ObjectUtil.isNotEmpty(toLocation.getLocationTrayHeight())) {
|
if (ObjectUtil.isNotEmpty(toLocation.getLocationTrayHeight())) {
|
||||||
@ -484,16 +473,12 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
}
|
}
|
||||||
pathPlanning.setReleaseLevel(toLocation.getLocationStorey());
|
pathPlanning.setReleaseLevel(toLocation.getLocationStorey());
|
||||||
pathPlanning.setReleaseOffsetHeight(offsetHeight);
|
pathPlanning.setReleaseOffsetHeight(offsetHeight);
|
||||||
if (ObjectUtil.isNotEmpty(taskDetailDO.getToLaneId())) {
|
if (ObjectUtil.isNotEmpty(taskDetailDO.getToLaneId())){
|
||||||
pathPlanning.setReleaseGroupId("LINE_" + taskDetailDO.getToLaneId());
|
pathPlanning.setReleaseGroupId("LINE_" + taskDetailDO.getToLaneId());
|
||||||
} else {
|
}else {
|
||||||
pathPlanning.setReleaseGroupId("POINT_" + taskDetailDO.getToMapItemId());
|
pathPlanning.setReleaseGroupId("POINT_" + taskDetailDO.getToMapItemId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String key = PathPlanningChcheConstant.PATH_PLANNING_TASK + pathPlanning.getOrderId();
|
|
||||||
redisUtil.set(key, JSON.toJSONString(pathPlanning), taskChcheTime);
|
|
||||||
|
|
||||||
pathPlanningList.add(pathPlanning);
|
pathPlanningList.add(pathPlanning);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -559,8 +544,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
*
|
*
|
||||||
* @param robots
|
* @param robots
|
||||||
*/
|
*/
|
||||||
@Override
|
private List<TaskRobotNoLimittationAreaDTO> getRobotNoLimitationArea(List<RobotInformationDO> robots) {
|
||||||
public List<TaskRobotNoLimittationAreaDTO> getRobotNoLimitationArea(List<RobotInformationDO> robots) {
|
|
||||||
List<PositionMapDO> positionMapDOS = positionMapMapper.selectList(new LambdaQueryWrapperX<PositionMapDO>());
|
List<PositionMapDO> positionMapDOS = positionMapMapper.selectList(new LambdaQueryWrapperX<PositionMapDO>());
|
||||||
|
|
||||||
List<TaskRobotNoLimittationAreaDTO> robotNoLimitationAreaDTOS = new ArrayList<>();
|
List<TaskRobotNoLimittationAreaDTO> robotNoLimitationAreaDTOS = new ArrayList<>();
|
||||||
@ -680,7 +664,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
} else if (RobotTaskTypeEnum.TAKE.getType().equals(v.getTaskType())) {
|
} else if (RobotTaskTypeEnum.TAKE.getType().equals(v.getTaskType())) {
|
||||||
//仅取货
|
//仅取货
|
||||||
takeSetTask(list, v, fromLane, toLane, fromLocation, toLocation, toHaveFrom, fromHaveTo);
|
takeSetTask(list, v, fromLane, toLane, fromLocation, toLocation, toHaveFrom, fromHaveTo);
|
||||||
} else if (RobotTaskTypeEnum.PARK.getType().equals(v.getTaskType())) {
|
}else if (RobotTaskTypeEnum.PARK.getType().equals(v.getTaskType())) {
|
||||||
list.add(v);
|
list.add(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.robot.proceed;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import javax.validation.*;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.proceed.*;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskProceedDO;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 车辆衔接任务 Service 接口
|
|
||||||
*
|
|
||||||
* @author 陈宾顺
|
|
||||||
*/
|
|
||||||
public interface RobotTaskProceedService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 创建车辆衔接任务
|
|
||||||
*
|
|
||||||
* @param createReqVO 创建信息
|
|
||||||
* @return 编号
|
|
||||||
*/
|
|
||||||
Long createTaskProceed(@Valid RobotTaskProceedSaveReqVO createReqVO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新车辆衔接任务
|
|
||||||
*
|
|
||||||
* @param updateReqVO 更新信息
|
|
||||||
*/
|
|
||||||
void updateTaskProceed(@Valid RobotTaskProceedSaveReqVO updateReqVO);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除车辆衔接任务
|
|
||||||
*
|
|
||||||
* @param id 编号
|
|
||||||
*/
|
|
||||||
void deleteTaskProceed(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得车辆衔接任务
|
|
||||||
*
|
|
||||||
* @param id 编号
|
|
||||||
* @return 车辆衔接任务
|
|
||||||
*/
|
|
||||||
RobotTaskProceedDO getTaskProceed(Long id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得车辆衔接任务分页
|
|
||||||
*
|
|
||||||
* @param pageReqVO 分页查询
|
|
||||||
* @return 车辆衔接任务分页
|
|
||||||
*/
|
|
||||||
PageResult<RobotTaskProceedDO> getTaskProceedPage(RobotTaskProceedPageReqVO pageReqVO);
|
|
||||||
|
|
||||||
}
|
|
@ -1,71 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.robot.proceed;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.proceed.*;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskProceedDO;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskProceedMapper;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
||||||
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
||||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_PROCEED_NOT_EXISTS;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 车辆衔接任务 Service 实现类
|
|
||||||
*
|
|
||||||
* @author 陈宾顺
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
@Validated
|
|
||||||
public class RobotTaskProceedServiceImpl implements RobotTaskProceedService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RobotTaskProceedMapper taskProceedMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Long createTaskProceed(RobotTaskProceedSaveReqVO createReqVO) {
|
|
||||||
// 插入
|
|
||||||
RobotTaskProceedDO taskProceed = BeanUtils.toBean(createReqVO, RobotTaskProceedDO.class);
|
|
||||||
taskProceedMapper.insert(taskProceed);
|
|
||||||
// 返回
|
|
||||||
return taskProceed.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateTaskProceed(RobotTaskProceedSaveReqVO updateReqVO) {
|
|
||||||
// 校验存在
|
|
||||||
validateTaskProceedExists(updateReqVO.getId());
|
|
||||||
// 更新
|
|
||||||
RobotTaskProceedDO updateObj = BeanUtils.toBean(updateReqVO, RobotTaskProceedDO.class);
|
|
||||||
taskProceedMapper.updateById(updateObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteTaskProceed(Long id) {
|
|
||||||
// 校验存在
|
|
||||||
validateTaskProceedExists(id);
|
|
||||||
// 删除
|
|
||||||
taskProceedMapper.deleteById(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void validateTaskProceedExists(Long id) {
|
|
||||||
if (taskProceedMapper.selectById(id) == null) {
|
|
||||||
throw exception(TASK_PROCEED_NOT_EXISTS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RobotTaskProceedDO getTaskProceed(Long id) {
|
|
||||||
return taskProceedMapper.selectById(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<RobotTaskProceedDO> getTaskProceedPage(RobotTaskProceedPageReqVO pageReqVO) {
|
|
||||||
return taskProceedMapper.selectPage(pageReqVO);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -119,7 +119,7 @@ public class ToolsServiceImpl implements ToolsService {
|
|||||||
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
||||||
robotTask.setOrderId(taskDetailId);
|
robotTask.setOrderId(taskDetailId);
|
||||||
String mac = robotInformationService.getMacByRobotNo(informationDO.getRobotNo());
|
String mac = robotInformationService.getMacByRobotNo(informationDO.getRobotNo());
|
||||||
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + mac);
|
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_TOPIC + mac);
|
||||||
robotTask.setExecutionType(ExecutionTypeEnum.CANCEL.getType());
|
robotTask.setExecutionType(ExecutionTypeEnum.CANCEL.getType());
|
||||||
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
commonApi.commonMethod(robotTask, robotTask.getTopic());
|
||||||
|
|
||||||
|
@ -51,6 +51,4 @@ public interface MoveToWaitService {
|
|||||||
PageResult<MoveToWaitDO> getMoveToWaitPage(MoveToWaitPageReqVO pageReqVO);
|
PageResult<MoveToWaitDO> getMoveToWaitPage(MoveToWaitPageReqVO pageReqVO);
|
||||||
|
|
||||||
void updateWaitStatus(Long orderId, Integer status);
|
void updateWaitStatus(Long orderId, Integer status);
|
||||||
|
|
||||||
void updateWaitStatusAndItrmId(Long orderId, Integer type, String waitId);
|
|
||||||
}
|
}
|
@ -79,13 +79,4 @@ public class MoveToWaitServiceImpl implements MoveToWaitService {
|
|||||||
moveToWaitMapper.updateById(updateObj);
|
moveToWaitMapper.updateById(updateObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateWaitStatusAndItrmId(Long orderId, Integer status, String waitId) {
|
|
||||||
MoveToWaitDO updateObj = new MoveToWaitDO();
|
|
||||||
updateObj.setId(orderId);
|
|
||||||
updateObj.setPositionMapItemId(Long.valueOf(waitId));
|
|
||||||
updateObj.setWaitStatus(status);
|
|
||||||
moveToWaitMapper.updateById(updateObj);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -18,13 +18,13 @@ public class ModbusUtils {
|
|||||||
/**
|
/**
|
||||||
* 工厂。
|
* 工厂。
|
||||||
*/
|
*/
|
||||||
/*static ModbusFactory modbusFactory;
|
static ModbusFactory modbusFactory;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
if (modbusFactory == null) {
|
if (modbusFactory == null) {
|
||||||
modbusFactory = new ModbusFactory();
|
modbusFactory = new ModbusFactory();
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取master
|
* 获取master
|
||||||
@ -40,14 +40,13 @@ public class ModbusUtils {
|
|||||||
// modbusFactory.createRtuMaster(wapper); //RTU 协议
|
// modbusFactory.createRtuMaster(wapper); //RTU 协议
|
||||||
// modbusFactory.createUdpMaster(params);//UDP 协议
|
// modbusFactory.createUdpMaster(params);//UDP 协议
|
||||||
// modbusFactory.createAsciiMaster(wrapper);//ASCII 协议
|
// modbusFactory.createAsciiMaster(wrapper);//ASCII 协议
|
||||||
ModbusFactory modbusFactory = new ModbusFactory();
|
|
||||||
ModbusMaster master = modbusFactory.createTcpMaster(params, false);// TCP 协议
|
ModbusMaster master = modbusFactory.createTcpMaster(params, false);// TCP 协议
|
||||||
master.init();
|
master.init();
|
||||||
|
|
||||||
return master;
|
return master;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ModbusMaster getRtuIpMaster(ModbusFactory modbusFactory, String host, int port) throws ModbusInitException {
|
public static ModbusMaster getRtuIpMaster(String host, int port) throws ModbusInitException {
|
||||||
IpParameters params = new IpParameters();
|
IpParameters params = new IpParameters();
|
||||||
params.setHost(host);
|
params.setHost(host);
|
||||||
params.setPort(port);
|
params.setPort(port);
|
||||||
@ -76,8 +75,7 @@ public class ModbusUtils {
|
|||||||
* @return
|
* @return
|
||||||
* @throws ModbusInitException
|
* @throws ModbusInitException
|
||||||
*/
|
*/
|
||||||
public static ModbusMaster getSerialPortRtuMaster(ModbusFactory modbusFactory,String portName, Integer baudRate,
|
public static ModbusMaster getSerialPortRtuMaster(String portName, Integer baudRate, Integer dataBits,
|
||||||
Integer dataBits,
|
|
||||||
Integer stopBits, Integer parity){
|
Integer stopBits, Integer parity){
|
||||||
// 设置串口参数,串口是COM1,波特率是9600
|
// 设置串口参数,串口是COM1,波特率是9600
|
||||||
// SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl("COM2", 9600,SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, 0, 0);
|
// SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl("COM2", 9600,SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, 0, 0);
|
||||||
@ -108,7 +106,7 @@ public class ModbusUtils {
|
|||||||
* @throws ModbusInitException
|
* @throws ModbusInitException
|
||||||
*/
|
*/
|
||||||
public static ModbusMaster getSerialPortAsciiMaster(String portName, Integer baudRate, Integer dataBits,
|
public static ModbusMaster getSerialPortAsciiMaster(String portName, Integer baudRate, Integer dataBits,
|
||||||
Integer stopBits, Integer parity,ModbusFactory modbusFactory){
|
Integer stopBits, Integer parity){
|
||||||
// 设置串口参数,串口是COM1,波特率是9600
|
// 设置串口参数,串口是COM1,波特率是9600
|
||||||
// SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl("COM2", 9600,SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, 0, 0);
|
// SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl("COM2", 9600,SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE, 0, 0);
|
||||||
SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl(portName, baudRate,
|
SerialPortWrapperImpl wrapper = new SerialPortWrapperImpl(portName, baudRate,
|
||||||
|
@ -240,5 +240,4 @@ zn:
|
|||||||
offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度
|
offset_height: 0.1 #叉起货需要在原来高度基础上偏移的高度
|
||||||
default_tray_height: 1.1 #默认每层高度
|
default_tray_height: 1.1 #默认每层高度
|
||||||
open_rate_limiter: true #是否开启限流
|
open_rate_limiter: true #是否开启限流
|
||||||
path_planning:
|
|
||||||
task_chche_time: 604800 #任务缓存的时间, 默认一星期
|
|
||||||
|
@ -14,18 +14,8 @@
|
|||||||
device_information
|
device_information
|
||||||
set
|
set
|
||||||
device_use_status = #{deviceUseStatus},
|
device_use_status = #{deviceUseStatus},
|
||||||
last_user = #{lastUser}
|
device_enable = #{deviceEnable}
|
||||||
where
|
where
|
||||||
device_no = #{deviceNo}
|
device_no = #{deviceNo}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
|
||||||
<update id="setDeviceReleaseByLastUser">
|
|
||||||
update
|
|
||||||
device_information
|
|
||||||
set
|
|
||||||
device_use_status = #{deviceUseStatus}
|
|
||||||
where
|
|
||||||
last_user = #{lastUser}
|
|
||||||
</update>
|
|
||||||
</mapper>
|
</mapper>
|
@ -264,8 +264,7 @@
|
|||||||
t1.task_status,
|
t1.task_status,
|
||||||
t1.task_stage,
|
t1.task_stage,
|
||||||
t1.start_time,
|
t1.start_time,
|
||||||
t1.end_time,
|
t1.end_time
|
||||||
t1.create_time
|
|
||||||
from
|
from
|
||||||
robot_task t1 left join robot_task_detail t2
|
robot_task t1 left join robot_task_detail t2
|
||||||
on t1.id = t2.robot_task_id
|
on t1.id = t2.robot_task_id
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
||||||
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskProceedMapper">
|
|
||||||
|
|
||||||
<!--
|
|
||||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
|
||||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
|
||||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
|
||||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
|
||||||
-->
|
|
||||||
|
|
||||||
</mapper>
|
|
Loading…
Reference in New Issue
Block a user