Compare commits
3 Commits
b049bb1067
...
0f78691b3b
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0f78691b3b | ||
![]() |
2283466164 | ||
![]() |
296bcebf77 |
@ -36,6 +36,7 @@ public class ApiAccessLogInterceptor implements HandlerInterceptor {
|
|||||||
|
|
||||||
private static final List<String> ignoreInterfaceUrls = Arrays.asList("/rpc-api/system/task/robotStatusUpdate",
|
private static final List<String> ignoreInterfaceUrls = Arrays.asList("/rpc-api/system/task/robotStatusUpdate",
|
||||||
"/rpc-api/system/task/robotReactiveStatus",
|
"/rpc-api/system/task/robotReactiveStatus",
|
||||||
|
"/rpc-api/infra/websocket/send",
|
||||||
"/rpc-api/system/task/updateRobotCommonStatus");
|
"/rpc-api/system/task/updateRobotCommonStatus");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -18,11 +18,11 @@ public interface CommonApi {
|
|||||||
|
|
||||||
String PREFIX = ApiConstants.PREFIX + "/config";
|
String PREFIX = ApiConstants.PREFIX + "/config";
|
||||||
|
|
||||||
@PostMapping(PREFIX + "/commonMethod")
|
/* @PostMapping(PREFIX + "/commonMethod")
|
||||||
@Operation(summary = "公共方法")
|
@Operation(summary = "公共方法")
|
||||||
void commonMethod(@RequestBody Object obj, @RequestParam("topic") String topic);
|
void commonMethod(@RequestBody Object obj, @RequestParam("topic") String topic);
|
||||||
|
|
||||||
@PostMapping(PREFIX + "/commonMethodStr")
|
@PostMapping(PREFIX + "/commonMethodStr")
|
||||||
@Operation(summary = "公共方法")
|
@Operation(summary = "公共方法")
|
||||||
void commonMethodStr(@RequestParam("str") String str, @RequestParam("topic") String topic);
|
void commonMethodStr(@RequestParam("str") String str, @RequestParam("topic") String topic);*/
|
||||||
}
|
}
|
||||||
|
@ -35,4 +35,10 @@ public class RobotDimensionsDTO {
|
|||||||
@Schema(description = "偏移量")
|
@Schema(description = "偏移量")
|
||||||
private Double robotOffset;
|
private Double robotOffset;
|
||||||
|
|
||||||
|
@Schema(description = "检测点最短距离")
|
||||||
|
private Double checkShortestDistance;
|
||||||
|
|
||||||
|
@Schema(description = "检测点最长距离")
|
||||||
|
private Double checkLongestDistance;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ public class TaskToPathPlanningDTO {
|
|||||||
private Long takeLocationNumber;
|
private Long takeLocationNumber;
|
||||||
|
|
||||||
@Schema(description = "取货任务的终点id")
|
@Schema(description = "取货任务的终点id")
|
||||||
private Long takePointId;
|
private String takePointId;
|
||||||
|
|
||||||
//线库: LINE + 线库号
|
//线库: LINE + 线库号
|
||||||
//普通库位: POINT + 点位号
|
//普通库位: POINT + 点位号
|
||||||
@ -44,7 +44,7 @@ public class TaskToPathPlanningDTO {
|
|||||||
private Long releaseLocationNumber;
|
private Long releaseLocationNumber;
|
||||||
|
|
||||||
@Schema(description = "放货任务的终点id")
|
@Schema(description = "放货任务的终点id")
|
||||||
private Long releasePointId;
|
private String releasePointId;
|
||||||
|
|
||||||
@Schema(description = "优先级(不同的组编号时:越大越先执行, 相同组编号时:组序号越大的越先执行)")
|
@Schema(description = "优先级(不同的组编号时:越大越先执行, 相同组编号时:组序号越大的越先执行)")
|
||||||
private Long priority;
|
private Long priority;
|
||||||
|
@ -44,7 +44,7 @@ public class TCPServerApplicationRunner implements ApplicationRunner {
|
|||||||
System.out.println(new String(bytes,0,len));
|
System.out.println(new String(bytes,0,len));
|
||||||
OutputStream os= socket.getOutputStream();
|
OutputStream os= socket.getOutputStream();
|
||||||
//响应给客户端
|
//响应给客户端
|
||||||
os.write("收到谢谢".getBytes());
|
os.write("socket :".getBytes());
|
||||||
socket.close();
|
socket.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -329,4 +329,7 @@ public interface ErrorCodeConstants {
|
|||||||
|
|
||||||
// ========== 车辆工作时长统计 1_002_058_001 ==========
|
// ========== 车辆工作时长统计 1_002_058_001 ==========
|
||||||
ErrorCode ROBOT_WORKING_HOURS_STATISTICS_NOT_EXISTS = new ErrorCode(1_002_058_001, "车辆工作时长统计不存在");
|
ErrorCode ROBOT_WORKING_HOURS_STATISTICS_NOT_EXISTS = new ErrorCode(1_002_058_001, "车辆工作时长统计不存在");
|
||||||
|
|
||||||
|
// ========== 库位类型 1_002_059_001 ==========
|
||||||
|
ErrorCode HOUSE_LOCATION_TYPE_NOT_EXISTS = new ErrorCode(1_002_059_001, "库位类型不存在");
|
||||||
}
|
}
|
||||||
|
@ -388,7 +388,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
.id(robotCompleteTaskDTO.getOrderId().toString())
|
.id(robotCompleteTaskDTO.getOrderId().toString())
|
||||||
.build();
|
.build();
|
||||||
// commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK);
|
// commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK);
|
||||||
mqttUtils.pub(PathPlanningTopicConstant.KILL_TASK,JSON.toJSONString(closePathPlanting));
|
mqttUtils.pub(PathPlanningTopicConstant.KILL_TASK, JSON.toJSONString(closePathPlanting));
|
||||||
log.info("通知PP把任务取消 :{}", robotCompleteTaskDTO.getOrderId());
|
log.info("通知PP把任务取消 :{}", robotCompleteTaskDTO.getOrderId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,9 +424,11 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
robotTaskDetailDO.setOccurError(ZeroOneEnum.ZERO.getType());
|
robotTaskDetailDO.setOccurError(ZeroOneEnum.ZERO.getType());
|
||||||
robotTaskDetailMapper.updateById(robotTaskDetailDO);
|
robotTaskDetailMapper.updateById(robotTaskDetailDO);
|
||||||
String taskNo = taskDetailService.getTaskNoByDetailId(robotCompleteTaskDTO.getOrderId());
|
String taskNo = taskDetailService.getTaskNoByDetailId(robotCompleteTaskDTO.getOrderId());
|
||||||
msg = robotNo + "_" + "车辆发生异常,重新分配其他车辆执行此任务" + taskNo;
|
msg = robotNo + "_" + "车辆发生异常,重新分配其他车辆执行此任务" + taskNo + " - " + robotCompleteTaskDTO.getOrderId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//先不释放库位状态
|
//先不释放库位状态
|
||||||
/*if (RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
/*if (RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
RobotTaskDetailDO robotTaskDetailDO = closeTaskDetail(robotCompleteTaskDTO.getOrderId());
|
RobotTaskDetailDO robotTaskDetailDO = closeTaskDetail(robotCompleteTaskDTO.getOrderId());
|
||||||
@ -581,12 +583,12 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
||||||
} else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) {
|
} else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在取货");
|
logOne.setActionMsg("车辆正在取货" + robotTaskDetailDO.getFromLocationNo());
|
||||||
if (!RobotTaskStageEnum.GO_RELEASE.getType().equals(taskStage)) {
|
if (!RobotTaskStageEnum.GO_RELEASE.getType().equals(taskStage)) {
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
|
||||||
}
|
}
|
||||||
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) {
|
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在放货");
|
logOne.setActionMsg("车辆正在放货" + robotTaskDetailDO.getToLocationNo());
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType());
|
||||||
} else if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
} else if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
||||||
@ -599,10 +601,10 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
|| PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
|| PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||||
RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
RobotChargeLogDO robotChargeLogDO = chargeLogMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||||
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
if (CommandTypeEnum.MOVE_POSES.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在前往" + robotChargeLogDO.getDeviceNo() + "充电");
|
logOne.setActionMsg("车辆正在前往 " + robotChargeLogDO.getDeviceNo() + "充电");
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.MOVE.getType());
|
||||||
} else {
|
} else {
|
||||||
logOne.setActionMsg("车辆正在充电");
|
logOne.setActionMsg("车辆正在充电 " + robotChargeLogDO.getDeviceNo());
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.CHARGEING.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.CHARGEING.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,7 +625,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getFromLocationNo() + "取货");
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_TAKE.getType());
|
||||||
} else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) {
|
} else if (CommandTypeEnum.WORK_PICK_UP_GOODS.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在取货");
|
logOne.setActionMsg("车辆正在取货" + robotTaskDetailDO.getFromLocationNo());
|
||||||
if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) {
|
if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) {
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING.getType());
|
||||||
}
|
}
|
||||||
@ -634,7 +636,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
|||||||
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
logOne.setActionMsg("车辆正在前往" + robotTaskDetailDO.getToLocationNo() + "放货");
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.GO_RELEASE.getType());
|
||||||
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) {
|
} else if (CommandTypeEnum.WORK_DROP_OFF_GOODS.getType().equals(commandType)) {
|
||||||
logOne.setActionMsg("车辆正在放货");
|
logOne.setActionMsg("车辆正在放货"+ robotTaskDetailDO.getToLocationNo());
|
||||||
if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) {
|
if (!RobotTaskStageEnum.DONE.getType().equals(taskStage)) {
|
||||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType());
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING.getType());
|
||||||
}
|
}
|
||||||
|
@ -34,4 +34,6 @@ public class ZnConfigConstant {
|
|||||||
private Boolean sendRobotInitPose;
|
private Boolean sendRobotInitPose;
|
||||||
private Integer synchronousAllMapNode;
|
private Integer synchronousAllMapNode;
|
||||||
private Boolean taskNotCheck;
|
private Boolean taskNotCheck;
|
||||||
|
private Double checkShortestDistance;
|
||||||
|
private Double checkLongestDistance;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,105 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.houselocation;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationTypePageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationTypeRespVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationTypeSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationTypeDO;
|
||||||
|
import cn.iocoder.yudao.module.system.service.houselocation.WareHouseLocationTypeService;
|
||||||
|
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.constraints.*;
|
||||||
|
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("/system/ware/house-location-type")
|
||||||
|
@Validated
|
||||||
|
public class WareHouseLocationTypeController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private WareHouseLocationTypeService houseLocationTypeService;
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@Operation(summary = "创建库位类型")
|
||||||
|
@PreAuthorize("@ss.hasPermission('ware:house-location-type:create')")
|
||||||
|
public CommonResult<Long> createHouseLocationType(@Valid @RequestBody WareHouseLocationTypeSaveReqVO createReqVO) {
|
||||||
|
return success(houseLocationTypeService.createHouseLocationType(createReqVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/update")
|
||||||
|
@Operation(summary = "更新库位类型")
|
||||||
|
@PreAuthorize("@ss.hasPermission('ware:house-location-type:update')")
|
||||||
|
public CommonResult<Boolean> updateHouseLocationType(@Valid @RequestBody WareHouseLocationTypeSaveReqVO updateReqVO) {
|
||||||
|
houseLocationTypeService.updateHouseLocationType(updateReqVO);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除库位类型")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermission('ware:house-location-type:delete')")
|
||||||
|
public CommonResult<Boolean> deleteHouseLocationType(@RequestParam("id") Long id) {
|
||||||
|
houseLocationTypeService.deleteHouseLocationType(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get")
|
||||||
|
@Operation(summary = "获得库位类型")
|
||||||
|
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||||
|
@PreAuthorize("@ss.hasPermission('ware:house-location-type:query')")
|
||||||
|
public CommonResult<WareHouseLocationTypeRespVO> getHouseLocationType(@RequestParam("id") Long id) {
|
||||||
|
WareHouseLocationTypeDO houseLocationType = houseLocationTypeService.getHouseLocationType(id);
|
||||||
|
return success(BeanUtils.toBean(houseLocationType, WareHouseLocationTypeRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getList")
|
||||||
|
@Operation(summary = "获得库位类型集合")
|
||||||
|
@PreAuthorize("@ss.hasPermission('ware:house-location-type:getList')")
|
||||||
|
public CommonResult<List<WareHouseLocationTypeRespVO>> getHouseLocationTypeList() {
|
||||||
|
List<WareHouseLocationTypeDO> list = houseLocationTypeService.getHouseLocationTypeList();
|
||||||
|
return success(BeanUtils.toBean(list, WareHouseLocationTypeRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得库位类型分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('ware:house-location-type:query')")
|
||||||
|
public CommonResult<PageResult<WareHouseLocationTypeRespVO>> getHouseLocationTypePage(@Valid WareHouseLocationTypePageReqVO pageReqVO) {
|
||||||
|
PageResult<WareHouseLocationTypeDO> pageResult = houseLocationTypeService.getHouseLocationTypePage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, WareHouseLocationTypeRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/export-excel")
|
||||||
|
@Operation(summary = "导出库位类型 Excel")
|
||||||
|
@PreAuthorize("@ss.hasPermission('ware:house-location-type:export')")
|
||||||
|
@ApiAccessLog(operateType = EXPORT)
|
||||||
|
public void exportHouseLocationTypeExcel(@Valid WareHouseLocationTypePageReqVO pageReqVO,
|
||||||
|
HttpServletResponse response) throws IOException {
|
||||||
|
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||||
|
List<WareHouseLocationTypeDO> list = houseLocationTypeService.getHouseLocationTypePage(pageReqVO).getList();
|
||||||
|
// 导出 Excel
|
||||||
|
ExcelUtils.write(response, "库位类型.xls", "数据", WareHouseLocationTypeRespVO.class,
|
||||||
|
BeanUtils.toBean(list, WareHouseLocationTypeRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -111,4 +111,7 @@ public class WareHouseLocationPageReqVO extends PageParam {
|
|||||||
@Schema(description = "ware_position_map的id", example = "1")
|
@Schema(description = "ware_position_map的id", example = "1")
|
||||||
private Long mapId;
|
private Long mapId;
|
||||||
|
|
||||||
|
@Schema(description = "库位类型表的id")
|
||||||
|
private Long locationTypeId;
|
||||||
|
|
||||||
}
|
}
|
@ -144,4 +144,8 @@ public class WareHouseLocationRespVO {
|
|||||||
@Schema(description = "ware_position_map_item的id", example = "1")
|
@Schema(description = "ware_position_map_item的id", example = "1")
|
||||||
@ExcelProperty("ware_position_map_item的id")
|
@ExcelProperty("ware_position_map_item的id")
|
||||||
private Long mapItemId;
|
private Long mapItemId;
|
||||||
|
|
||||||
|
@Schema(description = "库位类型表的id")
|
||||||
|
@ExcelProperty("库位类型表的id")
|
||||||
|
private Long locationTypeId;
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
|
package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -103,4 +104,7 @@ public class WareHouseLocationSaveReqVO {
|
|||||||
|
|
||||||
@Schema(description = "ware_position_map的id", example = "1")
|
@Schema(description = "ware_position_map的id", example = "1")
|
||||||
private Long mapId;
|
private Long mapId;
|
||||||
|
|
||||||
|
@Schema(description = "库位类型表的id")
|
||||||
|
private Long locationTypeId;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
|
||||||
|
|
||||||
|
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 WareHouseLocationTypePageReqVO extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "库位类型名称", example = "赵六")
|
||||||
|
private String typeName;
|
||||||
|
|
||||||
|
@Schema(description = "排序,越大越靠前")
|
||||||
|
private Integer locationSort;
|
||||||
|
|
||||||
|
@Schema(description = "宽度,单位厘米")
|
||||||
|
private String locationWide;
|
||||||
|
|
||||||
|
@Schema(description = "深度,单位厘米")
|
||||||
|
private String locationDeep;
|
||||||
|
|
||||||
|
@Schema(description = "高,单位厘米")
|
||||||
|
private String locationHeight;
|
||||||
|
|
||||||
|
@Schema(description = "载重,单位公斤")
|
||||||
|
private String locationLoad;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||||
|
private LocalDateTime[] createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
|
||||||
|
|
||||||
|
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 WareHouseLocationTypeRespVO {
|
||||||
|
|
||||||
|
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8811")
|
||||||
|
@ExcelProperty("主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "库位类型名称", example = "赵六")
|
||||||
|
@ExcelProperty("库位类型名称")
|
||||||
|
private String typeName;
|
||||||
|
|
||||||
|
@Schema(description = "排序,越大越靠前")
|
||||||
|
@ExcelProperty("排序,越大越靠前")
|
||||||
|
private Integer locationSort;
|
||||||
|
|
||||||
|
@Schema(description = "宽度,单位厘米")
|
||||||
|
@ExcelProperty("宽度,单位厘米")
|
||||||
|
private String locationWide;
|
||||||
|
|
||||||
|
@Schema(description = "深度,单位厘米")
|
||||||
|
@ExcelProperty("深度,单位厘米")
|
||||||
|
private String locationDeep;
|
||||||
|
|
||||||
|
@Schema(description = "高,单位厘米")
|
||||||
|
@ExcelProperty("高,单位厘米")
|
||||||
|
private String locationHeight;
|
||||||
|
|
||||||
|
@Schema(description = "载重,单位公斤")
|
||||||
|
@ExcelProperty("载重,单位公斤")
|
||||||
|
private String locationLoad;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@ExcelProperty("创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.constraints.*;
|
||||||
|
|
||||||
|
@Schema(description = "管理后台 - 库位类型新增/修改 Request VO")
|
||||||
|
@Data
|
||||||
|
public class WareHouseLocationTypeSaveReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8811")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "库位类型名称", example = "赵六")
|
||||||
|
private String typeName;
|
||||||
|
|
||||||
|
@Schema(description = "排序,越大越靠前")
|
||||||
|
private Integer locationSort;
|
||||||
|
|
||||||
|
@Schema(description = "宽度,单位厘米")
|
||||||
|
private String locationWide;
|
||||||
|
|
||||||
|
@Schema(description = "深度,单位厘米")
|
||||||
|
private String locationDeep;
|
||||||
|
|
||||||
|
@Schema(description = "高,单位厘米")
|
||||||
|
private String locationHeight;
|
||||||
|
|
||||||
|
@Schema(description = "载重,单位公斤")
|
||||||
|
private String locationLoad;
|
||||||
|
|
||||||
|
}
|
@ -163,4 +163,21 @@ public class RobotInformationController {
|
|||||||
public CommonResult<List<String>> getRobotByFloorAndArea(@RequestParam("floor") String floor, @RequestParam("area") String area) {
|
public CommonResult<List<String>> getRobotByFloorAndArea(@RequestParam("floor") String floor, @RequestParam("area") String area) {
|
||||||
return success(informationService.getRobotByFloorAndArea(floor,area));
|
return success(informationService.getRobotByFloorAndArea(floor,area));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/stopRobot")
|
||||||
|
@Operation(summary = "暂停车辆")
|
||||||
|
@PreAuthorize("@ss.hasPermission('robot:information:stopRobot')")
|
||||||
|
public CommonResult<Boolean> stopRobot(@RequestParam("robotNo") String robotNo) {
|
||||||
|
informationService.stopRobot(robotNo);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/continueRobot")
|
||||||
|
@Operation(summary = "恢复车辆")
|
||||||
|
@PreAuthorize("@ss.hasPermission('robot:information:continueRobot')")
|
||||||
|
public CommonResult<Boolean> continueRobot(@RequestParam("robotNo") String robotNo) {
|
||||||
|
informationService.continueRobot(robotNo);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,4 +100,7 @@ public class RobotInformationPageRespVO {
|
|||||||
|
|
||||||
@Schema(description = "车辆是否有货")
|
@Schema(description = "车辆是否有货")
|
||||||
private String cargoDetected;
|
private String cargoDetected;
|
||||||
|
|
||||||
|
@Schema(description = "车辆是否暂停 : 1:已暂停, 其他:未暂停, ")
|
||||||
|
private Integer isStop;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.houselocation;
|
|||||||
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@ -163,4 +164,9 @@ public class WareHouseLocationDO extends BaseDO {
|
|||||||
* ware_position_map_item的id
|
* ware_position_map_item的id
|
||||||
*/
|
*/
|
||||||
private Long mapItemId;
|
private Long mapItemId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库位类型表的id
|
||||||
|
*/
|
||||||
|
private Long locationTypeId;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,55 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.dal.dataobject.houselocation;
|
||||||
|
|
||||||
|
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("ware_house_location_type")
|
||||||
|
@KeySequence("ware_house_location_type_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ToString(callSuper = true)
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class WareHouseLocationTypeDO extends BaseDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
@TableId
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 库位类型名称
|
||||||
|
*/
|
||||||
|
private String typeName;
|
||||||
|
/**
|
||||||
|
* 排序,越大越靠前
|
||||||
|
*/
|
||||||
|
private Integer locationSort;
|
||||||
|
/**
|
||||||
|
* 宽度,单位厘米
|
||||||
|
*/
|
||||||
|
private String locationWide;
|
||||||
|
/**
|
||||||
|
* 深度,单位厘米
|
||||||
|
*/
|
||||||
|
private String locationDeep;
|
||||||
|
/**
|
||||||
|
* 高,单位厘米
|
||||||
|
*/
|
||||||
|
private String locationHeight;
|
||||||
|
/**
|
||||||
|
* 载重,单位公斤
|
||||||
|
*/
|
||||||
|
private String locationLoad;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,32 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.dal.mysql.houselocation;
|
||||||
|
|
||||||
|
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.houselocation.vo.WareHouseLocationTypePageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationTypeDO;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库位类型 Mapper
|
||||||
|
*
|
||||||
|
* @author 陈宾顺
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface WareHouseLocationTypeMapper extends BaseMapperX<WareHouseLocationTypeDO> {
|
||||||
|
|
||||||
|
default PageResult<WareHouseLocationTypeDO> selectPage(WareHouseLocationTypePageReqVO reqVO) {
|
||||||
|
return selectPage(reqVO, new LambdaQueryWrapperX<WareHouseLocationTypeDO>()
|
||||||
|
.likeIfPresent(WareHouseLocationTypeDO::getTypeName, reqVO.getTypeName())
|
||||||
|
.eqIfPresent(WareHouseLocationTypeDO::getLocationSort, reqVO.getLocationSort())
|
||||||
|
.eqIfPresent(WareHouseLocationTypeDO::getLocationWide, reqVO.getLocationWide())
|
||||||
|
.eqIfPresent(WareHouseLocationTypeDO::getLocationDeep, reqVO.getLocationDeep())
|
||||||
|
.eqIfPresent(WareHouseLocationTypeDO::getLocationHeight, reqVO.getLocationHeight())
|
||||||
|
.eqIfPresent(WareHouseLocationTypeDO::getLocationLoad, reqVO.getLocationLoad())
|
||||||
|
.betweenIfPresent(WareHouseLocationTypeDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
.orderByDesc(WareHouseLocationTypeDO::getId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -9,7 +9,9 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public enum RobotStatusEnum {
|
public enum RobotStatusEnum {
|
||||||
LAST_TASK_IS_TAKE(1,"上一个任务是仅取货(这是一个过渡状态,数据库没有这种状态)"),
|
LAST_TASK_IS_TAKE(-1,"上一个任务是仅取货(这是一个过渡状态,数据库没有这种状态)"),
|
||||||
|
STOP_FREE(0,"暂停且待命中"),
|
||||||
|
STOP_DOING(1,"暂停且任务中"),
|
||||||
DOING(2,"任务中"),
|
DOING(2,"任务中"),
|
||||||
STAND_BY(3,"待命"),
|
STAND_BY(3,"待命"),
|
||||||
CHARGE(4,"充电中");
|
CHARGE(4,"充电中");
|
||||||
@ -18,4 +20,13 @@ public enum RobotStatusEnum {
|
|||||||
*/
|
*/
|
||||||
private final Integer type;
|
private final Integer type;
|
||||||
private final String msg;
|
private final String msg;
|
||||||
|
|
||||||
|
public static String getMsg(Integer type) {
|
||||||
|
for (RobotStatusEnum item : RobotStatusEnum.values()) {
|
||||||
|
if (item.getType().equals(type)) {
|
||||||
|
return item.getMsg();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,8 @@ public enum RobotCommandTypeEnum {
|
|||||||
WORK_DROP_OFF_GOODS("WORK_DROP_OFF_GOODS","放货"),
|
WORK_DROP_OFF_GOODS("WORK_DROP_OFF_GOODS","放货"),
|
||||||
MOVE_POSE("MOVE_POSE","仿真移动点位"),
|
MOVE_POSE("MOVE_POSE","仿真移动点位"),
|
||||||
MODE("MODE","远遥/RCS模式切换"),
|
MODE("MODE","远遥/RCS模式切换"),
|
||||||
EMERGENCY_STOP("EMERGENCY_STOP","急停车辆"),
|
PAUSE("PAUSE","急停车辆"),
|
||||||
RECOVERY("RECOVERY","恢复车辆");
|
CONTINUE("CONTINUE","恢复车辆");
|
||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*/
|
||||||
|
@ -16,7 +16,9 @@ public enum RobotTaskStageEnum {
|
|||||||
CHARGEING(7L,"待执行正在充电"),
|
CHARGEING(7L,"待执行正在充电"),
|
||||||
CLOSE(8L,"任务已取消"),
|
CLOSE(8L,"任务已取消"),
|
||||||
MANUALLY_COMPLETED(9L,"人工完成"),
|
MANUALLY_COMPLETED(9L,"人工完成"),
|
||||||
EXCEPTION(10L,"异常");
|
EXCEPTION(10L,"异常"),
|
||||||
|
TAKEING_EXCEPTION(11L,"取货异常"),
|
||||||
|
RELEASEING_EXCEPTION(12L,"放货异常");
|
||||||
/**
|
/**
|
||||||
* 类型
|
* 类型
|
||||||
*/
|
*/
|
||||||
|
@ -40,7 +40,7 @@ public class RcsMapScheduled {
|
|||||||
private static final ExecutorService FIXED_THREAD_POOL = Executors.newFixedThreadPool(10);
|
private static final ExecutorService FIXED_THREAD_POOL = Executors.newFixedThreadPool(10);
|
||||||
|
|
||||||
// 这个方法将每200毫秒执行一次
|
// 这个方法将每200毫秒执行一次
|
||||||
@Scheduled(fixedDelay = 100, timeUnit = TimeUnit.MILLISECONDS)
|
@Scheduled(fixedDelay = 150, timeUnit = TimeUnit.MILLISECONDS)
|
||||||
public void executeTask() {
|
public void executeTask() {
|
||||||
FIXED_THREAD_POOL.execute(this::sendRobotInformationToRcsMap);
|
FIXED_THREAD_POOL.execute(this::sendRobotInformationToRcsMap);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,63 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.service.houselocation;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.validation.*;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationTypePageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationTypeSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationTypeDO;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库位类型 Service 接口
|
||||||
|
*
|
||||||
|
* @author 陈宾顺
|
||||||
|
*/
|
||||||
|
public interface WareHouseLocationTypeService extends IService<WareHouseLocationTypeDO> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建库位类型
|
||||||
|
*
|
||||||
|
* @param createReqVO 创建信息
|
||||||
|
* @return 编号
|
||||||
|
*/
|
||||||
|
Long createHouseLocationType(@Valid WareHouseLocationTypeSaveReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新库位类型
|
||||||
|
*
|
||||||
|
* @param updateReqVO 更新信息
|
||||||
|
*/
|
||||||
|
void updateHouseLocationType(@Valid WareHouseLocationTypeSaveReqVO updateReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除库位类型
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
*/
|
||||||
|
void deleteHouseLocationType(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得库位类型
|
||||||
|
*
|
||||||
|
* @param id 编号
|
||||||
|
* @return 库位类型
|
||||||
|
*/
|
||||||
|
WareHouseLocationTypeDO getHouseLocationType(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得库位类型分页
|
||||||
|
*
|
||||||
|
* @param pageReqVO 分页查询
|
||||||
|
* @return 库位类型分页
|
||||||
|
*/
|
||||||
|
PageResult<WareHouseLocationTypeDO> getHouseLocationTypePage(WareHouseLocationTypePageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有库位类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<WareHouseLocationTypeDO> getHouseLocationTypeList();
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.service.houselocation;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationTypePageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationTypeSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationTypeDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationTypeMapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.HOUSE_LOCATION_TYPE_NOT_EXISTS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 库位类型 Service 实现类
|
||||||
|
*
|
||||||
|
* @author 陈宾顺
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Validated
|
||||||
|
public class WareHouseLocationTypeServiceImpl extends ServiceImpl<WareHouseLocationTypeMapper, WareHouseLocationTypeDO> implements WareHouseLocationTypeService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private WareHouseLocationTypeMapper houseLocationTypeMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long createHouseLocationType(WareHouseLocationTypeSaveReqVO createReqVO) {
|
||||||
|
// 插入
|
||||||
|
WareHouseLocationTypeDO houseLocationType = BeanUtils.toBean(createReqVO, WareHouseLocationTypeDO.class);
|
||||||
|
houseLocationTypeMapper.insert(houseLocationType);
|
||||||
|
// 返回
|
||||||
|
return houseLocationType.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateHouseLocationType(WareHouseLocationTypeSaveReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validateHouseLocationTypeExists(updateReqVO.getId());
|
||||||
|
// 更新
|
||||||
|
WareHouseLocationTypeDO updateObj = BeanUtils.toBean(updateReqVO, WareHouseLocationTypeDO.class);
|
||||||
|
houseLocationTypeMapper.updateById(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteHouseLocationType(Long id) {
|
||||||
|
// 校验存在
|
||||||
|
validateHouseLocationTypeExists(id);
|
||||||
|
// 删除
|
||||||
|
houseLocationTypeMapper.deleteById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateHouseLocationTypeExists(Long id) {
|
||||||
|
if (houseLocationTypeMapper.selectById(id) == null) {
|
||||||
|
throw exception(HOUSE_LOCATION_TYPE_NOT_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WareHouseLocationTypeDO getHouseLocationType(Long id) {
|
||||||
|
return houseLocationTypeMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageResult<WareHouseLocationTypeDO> getHouseLocationTypePage(WareHouseLocationTypePageReqVO pageReqVO) {
|
||||||
|
return houseLocationTypeMapper.selectPage(pageReqVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有库位类型
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<WareHouseLocationTypeDO> getHouseLocationTypeList() {
|
||||||
|
return houseLocationTypeMapper.selectList(new LambdaQueryWrapper<WareHouseLocationTypeDO>()
|
||||||
|
.orderByDesc(WareHouseLocationTypeDO::getLocationSort));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -85,9 +85,6 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.PATH_PLANN
|
|||||||
@Service
|
@Service
|
||||||
public class PathPlanningServiceImpl implements PathPlanningService {
|
public class PathPlanningServiceImpl implements PathPlanningService {
|
||||||
|
|
||||||
private static final double PI = Math.PI;
|
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PositionMapLineMapper positionMapLineMapper;
|
private PositionMapLineMapper positionMapLineMapper;
|
||||||
|
|
||||||
@ -462,9 +459,7 @@ public class PathPlanningServiceImpl implements PathPlanningService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void robotDimensions() {
|
public void robotDimensions() {
|
||||||
List<RobotDimensionsDTO> list = informationMapper.selectRobotDimensions();
|
robotInformationService.sendRobotConfigToPP();
|
||||||
// commonApi.commonMethod(list, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS);
|
|
||||||
mqttUtils.pub(PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS,JSON.toJSONString(list));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
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.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.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.path.PathApi;
|
import cn.iocoder.yudao.module.system.api.path.PathApi;
|
||||||
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
|
import cn.iocoder.yudao.module.system.api.remote.dto.RemoteRobotDTO;
|
||||||
@ -418,7 +419,7 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
|||||||
// 先获取当前地图上的所有AGV信息
|
// 先获取当前地图上的所有AGV信息
|
||||||
PositionMapDO positionMapDO = positionMapMapper.selectById(id);
|
PositionMapDO positionMapDO = positionMapMapper.selectById(id);
|
||||||
|
|
||||||
RobotSimulationPoseDTO robotSimulationPose = new RobotSimulationPoseDTO();
|
RobotAcceptTaskDTO robotSimulationPose = new RobotAcceptTaskDTO();
|
||||||
|
|
||||||
List<String> robotNos = new ArrayList<>();
|
List<String> robotNos = new ArrayList<>();
|
||||||
String str = "";
|
String str = "";
|
||||||
@ -426,8 +427,8 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
|||||||
//暂停
|
//暂停
|
||||||
if (ZeroOneEnum.ONE.getType().equals(type)) {
|
if (ZeroOneEnum.ONE.getType().equals(type)) {
|
||||||
robotNos = informationService.getRobotByFloorAndArea(String.valueOf(positionMapDO.getFloor()), positionMapDO.getArea());
|
robotNos = informationService.getRobotByFloorAndArea(String.valueOf(positionMapDO.getFloor()), positionMapDO.getArea());
|
||||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.EMERGENCY_STOP.getType());
|
robotSimulationPose.setExecutionType(RobotCommandTypeEnum.PAUSE.getType());
|
||||||
str = RobotCommandTypeEnum.EMERGENCY_STOP.getMsg();
|
str = RobotCommandTypeEnum.PAUSE.getMsg();
|
||||||
if (isRemote) {
|
if (isRemote) {
|
||||||
mapStr = "远遥一键暂停 " + mapStr;
|
mapStr = "远遥一键暂停 " + mapStr;
|
||||||
} else {
|
} else {
|
||||||
@ -446,8 +447,8 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
|
|||||||
} else {
|
} else {
|
||||||
//恢复
|
//恢复
|
||||||
robotNos = robotMapStopService.getStopRobotNoByMapIds(id);
|
robotNos = robotMapStopService.getStopRobotNoByMapIds(id);
|
||||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.RECOVERY.getType());
|
robotSimulationPose.setExecutionType(RobotCommandTypeEnum.CONTINUE.getType());
|
||||||
str = RobotCommandTypeEnum.RECOVERY.getMsg();
|
str = RobotCommandTypeEnum.CONTINUE.getMsg();
|
||||||
if (isRemote) {
|
if (isRemote) {
|
||||||
mapStr = "远遥一键恢复 " + mapStr;
|
mapStr = "远遥一键恢复 " + mapStr;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.robot;
|
package cn.iocoder.yudao.module.system.service.robot;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
||||||
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;
|
||||||
@ -186,7 +187,7 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
|||||||
* @param robotNos
|
* @param robotNos
|
||||||
* @param str
|
* @param str
|
||||||
*/
|
*/
|
||||||
void sendEmergencyStopOrRecoveryToRobot(RobotSimulationPoseDTO robotSimulationPose, List<String> robotNos, String str);
|
void sendEmergencyStopOrRecoveryToRobot(RobotAcceptTaskDTO robotSimulationPose, List<String> robotNos, String str);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询机器人处理中的任务
|
* 查询机器人处理中的任务
|
||||||
@ -255,4 +256,10 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Long getRobotMapIdByRobotNo(String robotNo);
|
Long getRobotMapIdByRobotNo(String robotNo);
|
||||||
|
|
||||||
|
void sendRobotConfigToPP();
|
||||||
|
|
||||||
|
void stopRobot(String robotNo);
|
||||||
|
|
||||||
|
void continueRobot(String robotNo);
|
||||||
}
|
}
|
||||||
|
@ -10,14 +10,13 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.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.path.dto.RobotDimensionsDTO;
|
import cn.iocoder.yudao.module.mqtt.api.path.dto.RobotDimensionsDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.path.task.TaskRobotNoLimittationAreaDTO;
|
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.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
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.api.task.dto.RobotSimulationPoseDTO;
|
|
||||||
import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum;
|
import cn.iocoder.yudao.module.mqtt.enums.task.ExecutionTypeEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.api.path.vo.RobotClosePathPlantingDTO;
|
||||||
import cn.iocoder.yudao.module.system.api.robot.processor.RequestProcessor;
|
import cn.iocoder.yudao.module.system.api.robot.processor.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;
|
||||||
@ -77,6 +76,7 @@ import cn.iocoder.yudao.module.system.service.log.RobotTaskDetailActionLogServic
|
|||||||
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.positionmap.PositionMapItemService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.camera.RobotCameraService;
|
import cn.iocoder.yudao.module.system.service.robot.camera.RobotCameraService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.robot.mapstop.RobotMapStopService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.pathplanning.RobotPathPlanningService;
|
import cn.iocoder.yudao.module.system.service.robot.pathplanning.RobotPathPlanningService;
|
||||||
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 cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
|
||||||
@ -86,7 +86,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.redisson.api.RLock;
|
import org.redisson.api.RLock;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Lazy;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
@ -181,12 +181,16 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ZnConfigConstant znConfigConstant;
|
private ZnConfigConstant znConfigConstant;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
@Lazy
|
||||||
|
private RobotMapStopService mapStopService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createInformation(RobotInformationSaveReqVO createReqVO) {
|
public Long createInformation(RobotInformationSaveReqVO createReqVO) {
|
||||||
|
|
||||||
RobotInformationDO existRobotInformationDO =
|
RobotInformationDO existRobotInformationDO =
|
||||||
informationMapper.selectByMacAndIdNotIn(createReqVO.getMacAddress(),null);
|
informationMapper.selectByMacAndIdNotIn(createReqVO.getMacAddress(), null);
|
||||||
if (ObjectUtil.isNotEmpty(existRobotInformationDO)) {
|
if (ObjectUtil.isNotEmpty(existRobotInformationDO)) {
|
||||||
throw exception(ROBOT_MAC_ADDRESS_EXISTS);
|
throw exception(ROBOT_MAC_ADDRESS_EXISTS);
|
||||||
}
|
}
|
||||||
@ -239,9 +243,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
|
|
||||||
List<RobotDimensionsDTO> list = informationMapper.selectRobotDimensions();
|
sendRobotConfigToPP();
|
||||||
// commonApi.commonMethod(list, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS);
|
|
||||||
mqttUtils.pub(PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS, JSON.toJSONString(list));
|
|
||||||
|
|
||||||
redisUtil.del(key);
|
redisUtil.del(key);
|
||||||
// 返回
|
// 返回
|
||||||
@ -340,6 +342,48 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
return positionMap.getId();
|
return positionMap.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendRobotConfigToPP() {
|
||||||
|
List<RobotDimensionsDTO> robotDimensionsList = informationMapper.selectRobotDimensions();
|
||||||
|
if (ObjectUtil.isNotEmpty(robotDimensionsList)) {
|
||||||
|
for (RobotDimensionsDTO robotDimensionsDTO : robotDimensionsList) {
|
||||||
|
robotDimensionsDTO.setCheckShortestDistance(znConfigConstant.getCheckShortestDistance());
|
||||||
|
robotDimensionsDTO.setCheckLongestDistance(znConfigConstant.getCheckLongestDistance());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mqttUtils.pub(PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS, JSON.toJSONString(robotDimensionsList));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void stopRobot(String robotNo) {
|
||||||
|
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
||||||
|
.eq(RobotInformationDO::getRobotNo, robotNo)
|
||||||
|
.last("limit 1"));
|
||||||
|
|
||||||
|
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
||||||
|
robotTask.setOrderId(robotInformationDO.getTaskDetailId()+"");
|
||||||
|
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + robotInformationDO.getMacAddress());
|
||||||
|
robotTask.setExecutionType(ExecutionTypeEnum.PAUSE.getType());
|
||||||
|
mqttUtils.pub(robotTask.getTopic(), JSON.toJSONString(robotTask));
|
||||||
|
mapStopService.rcsStopRobotAddLog(robotNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void continueRobot(String robotNo) {
|
||||||
|
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
||||||
|
.eq(RobotInformationDO::getRobotNo, robotNo)
|
||||||
|
.last("limit 1"));
|
||||||
|
|
||||||
|
RobotAcceptTaskDTO robotTask = new RobotAcceptTaskDTO();
|
||||||
|
robotTask.setOrderId(robotInformationDO.getTaskDetailId()+"");
|
||||||
|
robotTask.setTopic(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + robotInformationDO.getMacAddress());
|
||||||
|
robotTask.setExecutionType(ExecutionTypeEnum.CONTINUE.getType());
|
||||||
|
mqttUtils.pub(robotTask.getTopic(), JSON.toJSONString(robotTask));
|
||||||
|
mapStopService.rcsDeleteStopRobotAddLog(robotNo);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验IP地址是否合法
|
* 校验IP地址是否合法
|
||||||
@ -357,6 +401,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
public void updateInformation(RobotInformationSaveReqVO updateReqVO) {
|
public void updateInformation(RobotInformationSaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateInformationExists(updateReqVO.getId());
|
validateInformationExists(updateReqVO.getId());
|
||||||
|
String str = "";
|
||||||
RobotInformationDO robotInformationDO = informationMapper.selectById(updateReqVO.getId());
|
RobotInformationDO robotInformationDO = informationMapper.selectById(updateReqVO.getId());
|
||||||
|
|
||||||
if (RobotStatusEnum.STAND_BY.getType().equals(robotInformationDO.getRobotStatus())) {
|
if (RobotStatusEnum.STAND_BY.getType().equals(robotInformationDO.getRobotStatus())) {
|
||||||
@ -390,9 +435,16 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (RobotStatusEnum.STOP_FREE.getType().equals(updateReqVO.getRobotStatus())
|
||||||
|
|| RobotStatusEnum.STOP_DOING.getType().equals(updateReqVO.getRobotStatus())) {
|
||||||
|
updateReqVO.setRobotStatus(robotInformationDO.getRobotStatus());
|
||||||
|
}else if (!updateReqVO.getRobotStatus().equals(robotInformationDO.getRobotStatus())) {
|
||||||
|
str = str + " 修改车辆状态: " +RobotStatusEnum.getMsg(updateReqVO.getRobotStatus());
|
||||||
|
}
|
||||||
|
|
||||||
if (!updateReqVO.getRobotNo().equals(robotInformationDO.getRobotNo())) {
|
if (!updateReqVO.getRobotNo().equals(robotInformationDO.getRobotNo())) {
|
||||||
RobotInformationDO existRobotInformationDO =
|
RobotInformationDO existRobotInformationDO =
|
||||||
informationMapper.selectByRobotNoAndIdNotIn(updateReqVO.getRobotNo(),updateReqVO.getId());
|
informationMapper.selectByRobotNoAndIdNotIn(updateReqVO.getRobotNo(), updateReqVO.getId());
|
||||||
if (ObjectUtil.isNotEmpty(existRobotInformationDO)) {
|
if (ObjectUtil.isNotEmpty(existRobotInformationDO)) {
|
||||||
throw exception(ROBOT_ROBOT_NO_EXISTS);
|
throw exception(ROBOT_ROBOT_NO_EXISTS);
|
||||||
}
|
}
|
||||||
@ -400,7 +452,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
|
|
||||||
if (!updateReqVO.getMacAddress().equals(robotInformationDO.getMacAddress())) {
|
if (!updateReqVO.getMacAddress().equals(robotInformationDO.getMacAddress())) {
|
||||||
RobotInformationDO existRobotInformationDO =
|
RobotInformationDO existRobotInformationDO =
|
||||||
informationMapper.selectByMacAndIdNotIn(updateReqVO.getMacAddress(),updateReqVO.getId());
|
informationMapper.selectByMacAndIdNotIn(updateReqVO.getMacAddress(), updateReqVO.getId());
|
||||||
if (ObjectUtil.isNotEmpty(existRobotInformationDO)) {
|
if (ObjectUtil.isNotEmpty(existRobotInformationDO)) {
|
||||||
throw exception(ROBOT_MAC_ADDRESS_EXISTS);
|
throw exception(ROBOT_MAC_ADDRESS_EXISTS);
|
||||||
}
|
}
|
||||||
@ -445,7 +497,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
|
|
||||||
redisUtil.del(key);
|
redisUtil.del(key);
|
||||||
|
|
||||||
String str = "";
|
|
||||||
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 = ",且设置车辆锁定";
|
||||||
@ -480,9 +532,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
|
|
||||||
List<RobotDimensionsDTO> robotDimensions = informationMapper.selectRobotDimensions();
|
sendRobotConfigToPP();
|
||||||
// commonApi.commonMethod(robotDimensions, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS);
|
|
||||||
mqttUtils.pub(PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS, JSON.toJSONString(robotDimensions));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -561,9 +611,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
//释放暂停记录
|
//释放暂停记录
|
||||||
releaseRobotStop(robotInformationDO);
|
releaseRobotStop(robotInformationDO);
|
||||||
|
|
||||||
List<RobotDimensionsDTO> robotDimensions = informationMapper.selectRobotDimensions();
|
sendRobotConfigToPP();
|
||||||
// commonApi.commonMethod(robotDimensions, PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS);
|
|
||||||
mqttUtils.pub(PathPlanningTopicConstant.SEND_ROBOT_DIMENSIONS, JSON.toJSONString(robotDimensions));
|
|
||||||
|
|
||||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT + robotInformationDO.getMacAddress();
|
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT + robotInformationDO.getMacAddress();
|
||||||
redisUtil.del(pose2dKey);
|
redisUtil.del(pose2dKey);
|
||||||
@ -593,9 +641,9 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
if (ObjectUtil.isEmpty(robotMapStops)) {
|
if (ObjectUtil.isEmpty(robotMapStops)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RobotSimulationPoseDTO robotSimulationPose = new RobotSimulationPoseDTO();
|
RobotAcceptTaskDTO robotSimulationPose = new RobotAcceptTaskDTO();
|
||||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.RECOVERY.getType());
|
robotSimulationPose.setExecutionType(RobotCommandTypeEnum.CONTINUE.getType());
|
||||||
List<String> robotNoList = Arrays.asList(robotInformationDO.getRobotNo());
|
List<String> robotNoList = Collections.singletonList(robotInformationDO.getRobotNo());
|
||||||
sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, robotNoList, "删除车辆时恢复车辆");
|
sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, robotNoList, "删除车辆时恢复车辆");
|
||||||
mapStopMapper.deleteRobotMapStopByRobotNos(robotNoList);
|
mapStopMapper.deleteRobotMapStopByRobotNos(robotNoList);
|
||||||
|
|
||||||
@ -671,8 +719,14 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
List<RobotInformationDO> list = pageResult.getList();
|
List<RobotInformationDO> list = pageResult.getList();
|
||||||
List<RobotInformationPageRespVO> targetList = BeanUtil.copyToList(list, RobotInformationPageRespVO.class);
|
List<RobotInformationPageRespVO> targetList = BeanUtil.copyToList(list, RobotInformationPageRespVO.class);
|
||||||
|
|
||||||
|
List<RobotMapStopDO> allRobotMapStops = mapStopService.getAllRobotMapStops(ZeroOneEnum.ONE.getType());
|
||||||
|
List<String> stopRobotNos = new ArrayList<>();
|
||||||
|
if (ObjectUtil.isNotEmpty(allRobotMapStops)) {
|
||||||
|
stopRobotNos = allRobotMapStops.stream().map(RobotMapStopDO::getRobotNo).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
for (RobotInformationPageRespVO v : targetList) {
|
for (RobotInformationPageRespVO v : targetList) {
|
||||||
setMsgAndRobotStatus(v, pageReqVO.getRobotStatisticsType());
|
setMsgAndRobotStatus(v,stopRobotNos);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(pageReqVO.getRobotStatisticsType())) {
|
if (ObjectUtil.isNotEmpty(pageReqVO.getRobotStatisticsType())) {
|
||||||
@ -735,7 +789,12 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
*
|
*
|
||||||
* @param v
|
* @param v
|
||||||
*/
|
*/
|
||||||
private void setMsgAndRobotStatus(RobotInformationPageRespVO v, String robotStatisticsType) {
|
private void setMsgAndRobotStatus(RobotInformationPageRespVO v,List<String> stopRobotNos) {
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(stopRobotNos) && stopRobotNos.contains(v.getRobotNo())) {
|
||||||
|
v.setIsStop(ZeroOneEnum.ONE.getType());
|
||||||
|
}
|
||||||
|
|
||||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT + v.getMacAddress();
|
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT + v.getMacAddress();
|
||||||
Object object = redisUtil.get(pose2dKey);
|
Object object = redisUtil.get(pose2dKey);
|
||||||
RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class);
|
RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class);
|
||||||
@ -1171,6 +1230,14 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
TASK_ASSIGN_OTHER_ROBOT.getMsg() + actionLog.getRobotNo());
|
TASK_ASSIGN_OTHER_ROBOT.getMsg() + actionLog.getRobotNo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
||||||
|
.eq(RobotInformationDO::getRobotNo, robotNo)
|
||||||
|
.last("limit 1"));
|
||||||
|
|
||||||
|
if (RobotTaskModelEnum.REJECTION.getType().equals(robotInformationDO.getRobotTaskModel())) {
|
||||||
|
throw exception(ROBOT_REJECTION);
|
||||||
|
}
|
||||||
|
|
||||||
String mac = getMacByRobotNo(robotNo);
|
String mac = getMacByRobotNo(robotNo);
|
||||||
robotCloseTaskDetail(actionLog.getTaskDetailId() + "", mac, actionLog.getCommandType());
|
robotCloseTaskDetail(actionLog.getTaskDetailId() + "", mac, actionLog.getCommandType());
|
||||||
|
|
||||||
@ -1180,18 +1247,17 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
|
|
||||||
CleanAgvDTO build = CleanAgvDTO.builder().robotNo(robotNo).build();
|
CleanAgvDTO build = CleanAgvDTO.builder().robotNo(robotNo).build();
|
||||||
// commonApi.commonMethod(build, PathPlanningTopicConstant.CLEAN_AGV);
|
// commonApi.commonMethod(build, PathPlanningTopicConstant.CLEAN_AGV);
|
||||||
mqttUtils.pub(PathPlanningTopicConstant.CLEAN_AGV, JSON.toJSONString(build));
|
// mqttUtils.pub(PathPlanningTopicConstant.CLEAN_AGV, JSON.toJSONString(build));
|
||||||
|
|
||||||
|
RobotClosePathPlantingDTO closePathPlanting = RobotClosePathPlantingDTO.builder()
|
||||||
|
.robotNo(robotNo)
|
||||||
|
.id(actionLog.getTaskDetailId() + "")
|
||||||
|
.build();
|
||||||
|
// commonApi.commonMethod(closePathPlanting, PathPlanningTopicConstant.KILL_TASK);
|
||||||
|
mqttUtils.pub(PathPlanningTopicConstant.KILL_TASK, JSON.toJSONString(closePathPlanting));
|
||||||
|
|
||||||
Object o = checkTaskDetailExist(actionLog.getTaskDetailId());
|
Object o = checkTaskDetailExist(actionLog.getTaskDetailId());
|
||||||
|
|
||||||
RobotInformationDO robotInformationDO = informationMapper.selectOne(new LambdaQueryWrapper<RobotInformationDO>()
|
|
||||||
.eq(RobotInformationDO::getRobotNo, robotNo)
|
|
||||||
.last("limit 1"));
|
|
||||||
|
|
||||||
if (RobotTaskModelEnum.REJECTION.getType().equals(robotInformationDO.getRobotTaskModel())) {
|
|
||||||
throw exception(ROBOT_REJECTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robotInformationDO.getMacAddress();
|
/*String taskStatusKey = RobotTaskChcheConstant.ROBOT_TASK_STATUS + robotInformationDO.getMacAddress();
|
||||||
Object taskStatus = redisUtil.get(taskStatusKey);
|
Object taskStatus = redisUtil.get(taskStatusKey);
|
||||||
if (ObjectUtil.isEmpty(taskStatus) || !RobotStatusCodeConstant.CAN_DO_TASK.equals(Boolean.parseBoolean(String.valueOf(taskStatus)))) {
|
if (ObjectUtil.isEmpty(taskStatus) || !RobotStatusCodeConstant.CAN_DO_TASK.equals(Boolean.parseBoolean(String.valueOf(taskStatus)))) {
|
||||||
@ -1306,7 +1372,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
public RobotTaskDetailDO checkTaskDone(String id) {
|
public RobotTaskDetailDO checkTaskDone(String id) {
|
||||||
RobotTaskDetailDO robotTaskDetail = taskDetailMapper.selectById(id);
|
RobotTaskDetailDO robotTaskDetail = taskDetailMapper.selectById(id);
|
||||||
if (RobotTaskStageEnum.DONE.getType().equals(robotTaskDetail.getTaskStage())
|
if (RobotTaskStageEnum.DONE.getType().equals(robotTaskDetail.getTaskStage())
|
||||||
|| RobotTaskStageEnum.MANUALLY_COMPLETED.getType().equals(robotTaskDetail.getTaskStage()) ) {
|
|| RobotTaskStageEnum.MANUALLY_COMPLETED.getType().equals(robotTaskDetail.getTaskStage())) {
|
||||||
throw exception(ROBOT_LAST_TASK_NO_EXISTS);
|
throw exception(ROBOT_LAST_TASK_NO_EXISTS);
|
||||||
}
|
}
|
||||||
return robotTaskDetail;
|
return robotTaskDetail;
|
||||||
@ -1323,6 +1389,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
|
|
||||||
if (RobotTaskStageEnum.UN_START.getType().equals(robotTaskDetail.getTaskStage())
|
if (RobotTaskStageEnum.UN_START.getType().equals(robotTaskDetail.getTaskStage())
|
||||||
|| RobotTaskStageEnum.GO_TAKE.getType().equals(robotTaskDetail.getTaskStage())
|
|| RobotTaskStageEnum.GO_TAKE.getType().equals(robotTaskDetail.getTaskStage())
|
||||||
|
|| RobotTaskStageEnum.TAKEING_EXCEPTION.getType().equals(robotTaskDetail.getTaskStage())
|
||||||
|| RobotTaskStageEnum.TAKEING.getType().equals(robotTaskDetail.getTaskStage())) {
|
|| RobotTaskStageEnum.TAKEING.getType().equals(robotTaskDetail.getTaskStage())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1335,10 +1402,11 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
//说明取货完成
|
//说明取货完成
|
||||||
takeDone(pathPlanning, robotTaskDetail);
|
takeDone(pathPlanning, robotTaskDetail);
|
||||||
} else if (RobotTaskStageEnum.GO_RELEASE.getType().equals(robotTaskDetail.getTaskStage())
|
} else if (RobotTaskStageEnum.GO_RELEASE.getType().equals(robotTaskDetail.getTaskStage())
|
||||||
|| RobotTaskStageEnum.RELEASEING.getType().equals(robotTaskDetail.getTaskStage())) {
|
|| RobotTaskStageEnum.RELEASEING.getType().equals(robotTaskDetail.getTaskStage())
|
||||||
|
|| RobotTaskStageEnum.RELEASEING_EXCEPTION.getType().equals(robotTaskDetail.getTaskStage())) {
|
||||||
takeDone(pathPlanning, robotTaskDetail);
|
takeDone(pathPlanning, robotTaskDetail);
|
||||||
} else if (RobotTaskStageEnum.CLOSE.getType().equals(robotTaskDetail.getTaskStage())
|
} else if (RobotTaskStageEnum.CLOSE.getType().equals(robotTaskDetail.getTaskStage())
|
||||||
|| RobotTaskStageEnum.EXCEPTION.getType().equals(robotTaskDetail.getTaskStage()) ) {
|
|| RobotTaskStageEnum.EXCEPTION.getType().equals(robotTaskDetail.getTaskStage())) {
|
||||||
WareHouseLocationDO wareHouseLocation = wareHouseLocationMapper.selectById(robotTaskDetail.getFromLocationId());
|
WareHouseLocationDO wareHouseLocation = wareHouseLocationMapper.selectById(robotTaskDetail.getFromLocationId());
|
||||||
if (ZeroOneEnum.ZERO.getType().equals(wareHouseLocation.getLocationUseStatus())) {
|
if (ZeroOneEnum.ZERO.getType().equals(wareHouseLocation.getLocationUseStatus())) {
|
||||||
takeDone(pathPlanning, robotTaskDetail);
|
takeDone(pathPlanning, robotTaskDetail);
|
||||||
@ -1465,7 +1533,7 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
}
|
}
|
||||||
|
|
||||||
pathPlanning.setReleaseGroupId("POINT_" + deviceInformationDO.getPositionMapItemId());
|
pathPlanning.setReleaseGroupId("POINT_" + deviceInformationDO.getPositionMapItemId());
|
||||||
pathPlanning.setReleasePointId(deviceInformationDO.getPositionMapItemId());
|
pathPlanning.setReleasePointId(deviceInformationDO.getPositionMapItemId() + "");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1570,13 +1638,14 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
* @param str
|
* @param str
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void sendEmergencyStopOrRecoveryToRobot(RobotSimulationPoseDTO robotSimulationPose, List<String> robotNos, String str) {
|
public void sendEmergencyStopOrRecoveryToRobot(RobotAcceptTaskDTO robotSimulationPose, List<String> robotNos, String str) {
|
||||||
for (String robotNo : robotNos) {
|
List<RobotInformationDO> robotInformationDOS = informationMapper.selectList(new LambdaQueryWrapperX<RobotInformationDO>()
|
||||||
String mac = getMacByRobotNo(robotNo);
|
.in(RobotInformationDO::getRobotNo, robotNos));
|
||||||
// commonApi.commonMethod(robotSimulationPose, RobotTopicConstant.ROBOT_COMMAND_TOPIC + mac);
|
for (RobotInformationDO robotInformationDO : robotInformationDOS) {
|
||||||
mqttUtils.pub(RobotTopicConstant.ROBOT_COMMAND_TOPIC + mac, JSON.toJSONString(robotSimulationPose));
|
robotSimulationPose.setOrderId(robotInformationDO.getTaskDetailId()+"");
|
||||||
|
mqttUtils.pub(RobotTopicConstant.ROBOT_TASK_MOVE_TOPIC + robotInformationDO.getMacAddress(), JSON.toJSONString(robotSimulationPose));
|
||||||
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
UserOperationLogSaveReqVO operationLog = UserOperationLogSaveReqVO.builder()
|
||||||
.operateAction(str + robotNo)
|
.operateAction(str + robotInformationDO.getRobotNo())
|
||||||
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
.nickName(SecurityFrameworkUtils.getLoginUserNickname()).build();
|
||||||
userOperationLogService.createUserOperationLog(operationLog);
|
userOperationLogService.createUserOperationLog(operationLog);
|
||||||
}
|
}
|
||||||
|
@ -250,9 +250,24 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setTaskDetailError(Long id) {
|
public void setTaskDetailError(Long id) {
|
||||||
|
RobotTaskDetailDO detailDO = taskDetailMapper.selectById(id);
|
||||||
RobotTaskDetailDO robotTaskDetailDO = new RobotTaskDetailDO();
|
RobotTaskDetailDO robotTaskDetailDO = new RobotTaskDetailDO();
|
||||||
robotTaskDetailDO.setId(id);
|
robotTaskDetailDO.setId(id);
|
||||||
robotTaskDetailDO.setTaskStatus(RobotTaskStatusEnum.Exc.getType());
|
if (RobotTaskTypeEnum.TAKE_RELEASE.getType().equals(detailDO.getTaskType())) {
|
||||||
|
if (RobotTaskStageEnum.UN_START.getType().equals(detailDO.getTaskStage())
|
||||||
|
|| RobotTaskStageEnum.GO_TAKE.getType().equals(detailDO.getTaskStage())
|
||||||
|
|| RobotTaskStageEnum.TAKEING.getType().equals(detailDO.getTaskStage())) {
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING_EXCEPTION.getType());
|
||||||
|
}else {
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING_EXCEPTION.getType());
|
||||||
|
}
|
||||||
|
} else if(RobotTaskTypeEnum.TAKE.getType().equals(detailDO.getTaskType())) {
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.TAKEING_EXCEPTION.getType());
|
||||||
|
}else if(RobotTaskTypeEnum.RELEASE.getType().equals(detailDO.getTaskType())) {
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.RELEASEING_EXCEPTION.getType());
|
||||||
|
}else {
|
||||||
|
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.EXCEPTION.getType());
|
||||||
|
}
|
||||||
robotTaskDetailDO.setOccurError(ZeroOneEnum.ONE.getType());
|
robotTaskDetailDO.setOccurError(ZeroOneEnum.ONE.getType());
|
||||||
taskDetailMapper.updateById(robotTaskDetailDO);
|
taskDetailMapper.updateById(robotTaskDetailDO);
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.system.controller.admin.robot.mapstop.RobotMapSto
|
|||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotMapStopDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotMapStopDO;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 车辆(地图)急停记录 Service 接口
|
* 车辆(地图)急停记录 Service 接口
|
||||||
@ -127,4 +126,8 @@ public interface RobotMapStopService extends IService<RobotMapStopDO> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<RobotMapStopDO> getStopRobotNoByRobotNoList(List<String> robotNos);
|
List<RobotMapStopDO> getStopRobotNoByRobotNoList(List<String> robotNos);
|
||||||
|
|
||||||
|
void rcsStopRobotAddLog(String robotNo);
|
||||||
|
|
||||||
|
void rcsDeleteStopRobotAddLog(String robotNo);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.robot.mapstop;
|
|||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
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.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
||||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotSimulationPoseDTO;
|
||||||
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.constant.robot.RobotTaskChcheConstant;
|
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||||
@ -186,9 +187,9 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
|
|||||||
throw exception(ROBOT_ALREADY_STOP);
|
throw exception(ROBOT_ALREADY_STOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
RobotSimulationPoseDTO robotSimulationPose = new RobotSimulationPoseDTO();
|
RobotAcceptTaskDTO robotSimulationPose = new RobotAcceptTaskDTO();
|
||||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.EMERGENCY_STOP.getType());
|
robotSimulationPose.setExecutionType(RobotCommandTypeEnum.PAUSE.getType());
|
||||||
List<String> list = Arrays.asList(robotNo);
|
List<String> list = Collections.singletonList(robotNo);
|
||||||
informationService.sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, list, "远遥暂停车辆");
|
informationService.sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, list, "远遥暂停车辆");
|
||||||
|
|
||||||
String mac = informationService.getMacByRobotNo(robotNo);
|
String mac = informationService.getMacByRobotNo(robotNo);
|
||||||
@ -240,9 +241,9 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RobotSimulationPoseDTO robotSimulationPose = new RobotSimulationPoseDTO();
|
RobotAcceptTaskDTO robotSimulationPose = new RobotAcceptTaskDTO();
|
||||||
robotSimulationPose.setCommandType(RobotCommandTypeEnum.RECOVERY.getType());
|
robotSimulationPose.setExecutionType(RobotCommandTypeEnum.CONTINUE.getType());
|
||||||
List<String> list = Arrays.asList(robotNo);
|
List<String> list = Collections.singletonList(robotNo);
|
||||||
informationService.sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, list, "远遥恢复车辆");
|
informationService.sendEmergencyStopOrRecoveryToRobot(robotSimulationPose, list, "远遥恢复车辆");
|
||||||
|
|
||||||
deleteRobotMapStopByRobotNos(list);
|
deleteRobotMapStopByRobotNos(list);
|
||||||
@ -271,5 +272,43 @@ public class RobotMapStopServiceImpl extends ServiceImpl<RobotMapStopMapper, Rob
|
|||||||
.in(RobotMapStopDO::getRobotNo, robotNos));
|
.in(RobotMapStopDO::getRobotNo, robotNos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rcsStopRobotAddLog(String robotNo) {
|
||||||
|
String mac = informationService.getMacByRobotNo(robotNo);
|
||||||
|
List<String> list = Collections.singletonList(robotNo);
|
||||||
|
String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + mac;
|
||||||
|
Object o = redisUtil.get(floorAreaKey);
|
||||||
|
|
||||||
|
Long id = -1l;
|
||||||
|
if (ObjectUtil.isNotEmpty(o)) {
|
||||||
|
FloorZoneDTO floorZone = JSON.parseObject((String) o, FloorZoneDTO.class);
|
||||||
|
PositionMapDO positionMap = positionMapMapper.selectOne(new LambdaQueryWrapperX<PositionMapDO>()
|
||||||
|
.eq(PositionMapDO::getFloor, floorZone.getFloor())
|
||||||
|
.eq(PositionMapDO::getArea, floorZone.getArea()));
|
||||||
|
if (ObjectUtil.isNotEmpty(positionMap)) {
|
||||||
|
id = positionMap.getId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
createRobotMapStop(id, list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void rcsDeleteStopRobotAddLog(String robotNo) {
|
||||||
|
List<RobotMapStopDO> stopRobotNoByRobotNo = getStopRobotNoByRobotNo(robotNo);
|
||||||
|
if (ObjectUtil.isEmpty(stopRobotNoByRobotNo) ){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Long mapId = stopRobotNoByRobotNo.get(0).getPositionMapId();
|
||||||
|
deleteRobotMapStopByRobotNos(Collections.singletonList(robotNo));
|
||||||
|
List<RobotMapStopDO> positionMapItems = mapStopMapper.selectList(new LambdaQueryWrapperX<RobotMapStopDO>()
|
||||||
|
.eq(RobotMapStopDO::getStopType, ZeroOneEnum.ONE.getType())
|
||||||
|
.eq(RobotMapStopDO::getPositionMapId, mapId));
|
||||||
|
if (ObjectUtil.isNotEmpty(positionMapItems)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mapStopMapper.deleteRobotMapStopByMapId(mapId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,8 @@ import java.util.*;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static org.codehaus.groovy.runtime.DefaultGroovyMethods.collect;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -505,7 +507,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
|
|
||||||
if (ObjectUtil.isNotEmpty(taskDetailDO.getFromLocationId())) {
|
if (ObjectUtil.isNotEmpty(taskDetailDO.getFromLocationId())) {
|
||||||
pathPlanning.setTakeLocationNumber(Math.abs(znConfigConstant.getLocationNumberReduce() - taskDetailDO.getFromLocationNumber()));
|
pathPlanning.setTakeLocationNumber(Math.abs(znConfigConstant.getLocationNumberReduce() - taskDetailDO.getFromLocationNumber()));
|
||||||
pathPlanning.setTakePointId(fromLocation.getMapItemId());
|
pathPlanning.setTakePointId(fromLocation.getMapItemId()+"");
|
||||||
|
|
||||||
pathPlanningSetTakeHeight(pathPlanning, fromLocation);
|
pathPlanningSetTakeHeight(pathPlanning, fromLocation);
|
||||||
pathPlanning.setTakeLevel(fromLocation.getLocationStorey());
|
pathPlanning.setTakeLevel(fromLocation.getLocationStorey());
|
||||||
@ -519,7 +521,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
|
|
||||||
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()+"");
|
||||||
|
|
||||||
pathPlanningSetReleaseHeight(pathPlanning, toLocation);
|
pathPlanningSetReleaseHeight(pathPlanning, toLocation);
|
||||||
pathPlanning.setReleaseLevel(toLocation.getLocationStorey());
|
pathPlanning.setReleaseLevel(toLocation.getLocationStorey());
|
||||||
@ -596,7 +598,7 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
*/
|
*/
|
||||||
private void moveToPoint(TaskToPathPlanningDTO pathPlanning, RobotTaskDetailDO taskDetailDO) {
|
private void moveToPoint(TaskToPathPlanningDTO pathPlanning, RobotTaskDetailDO taskDetailDO) {
|
||||||
pathPlanning.setReleaseLocationNumber(1l);
|
pathPlanning.setReleaseLocationNumber(1l);
|
||||||
pathPlanning.setReleasePointId(taskDetailDO.getReleaseId());
|
pathPlanning.setReleasePointId(taskDetailDO.getReleaseId()+"");
|
||||||
pathPlanning.setReleaseGroupId("POINT_" + taskDetailDO.getReleaseId());
|
pathPlanning.setReleaseGroupId("POINT_" + taskDetailDO.getReleaseId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -736,30 +738,16 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//取货线库
|
//取货线库
|
||||||
Map<Long, RobotTaskDetailDO> fromLaneMap = detailDOS.stream()
|
Map<Long, RobotTaskDetailDO> fromLaneMap = getFromLaneMap(detailDOS);
|
||||||
.filter(v -> ObjectUtil.isNotEmpty(v.getFromLaneId()))
|
|
||||||
.collect(Collectors.groupingBy(RobotTaskDetailDO::getFromLaneId,
|
|
||||||
Collectors.collectingAndThen(Collectors.minBy(Comparator.comparingLong(RobotTaskDetailDO::getFromLocationNumber)), Optional::get)));
|
|
||||||
|
|
||||||
//放货线库
|
//放货线库
|
||||||
Map<Long, RobotTaskDetailDO> toLaneMap = detailDOS.stream()
|
Map<Long, RobotTaskDetailDO> toLaneMap = getToLaneMap(detailDOS);
|
||||||
.filter(v -> ObjectUtil.isNotEmpty(v.getToLaneId()))
|
|
||||||
.collect(Collectors.groupingBy(RobotTaskDetailDO::getToLaneId,
|
|
||||||
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(RobotTaskDetailDO::getToLocationNumber)), Optional::get)));
|
|
||||||
|
|
||||||
//取货点位--最小
|
//取货点位--最小
|
||||||
Map<Long, Long> fromLocationMap = detailDOS.stream()
|
Map<Long, Long> fromLocationMap = getFromLocationMap(detailDOS);
|
||||||
.filter(v -> ObjectUtil.isNotEmpty(v.getFromMapItemId()))
|
|
||||||
.collect(Collectors.groupingBy(RobotTaskDetailDO::getFromMapItemId,
|
|
||||||
Collectors.collectingAndThen(Collectors.minBy(Comparator.comparingLong(RobotTaskDetailDO::getFromLocationNumber)),
|
|
||||||
a -> a.isPresent() ? a.get().getFromLocationNumber() : null)));
|
|
||||||
|
|
||||||
//放货点位--最大
|
//放货点位--最大
|
||||||
Map<Long, Long> toLocationMap = detailDOS.stream()
|
Map<Long, Long> toLocationMap =getToLocationMap(detailDOS);
|
||||||
.filter(v -> ObjectUtil.isNotEmpty(v.getToMapItemId()))
|
|
||||||
.collect(Collectors.groupingBy(RobotTaskDetailDO::getToMapItemId,
|
|
||||||
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(RobotTaskDetailDO::getToLocationNumber)),
|
|
||||||
a -> a.isPresent() ? a.get().getToLocationNumber() : null)));
|
|
||||||
|
|
||||||
//返回的数据
|
//返回的数据
|
||||||
List<RobotTaskDetailDO> list = new ArrayList<>();
|
List<RobotTaskDetailDO> list = new ArrayList<>();
|
||||||
@ -796,6 +784,55 @@ public class RobotPathPlanningServiceImpl implements RobotPathPlanningService {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<Long, Long> getToLocationMap(List<RobotTaskDetailDO> detailDOS) {
|
||||||
|
List<RobotTaskDetailDO> collect = detailDOS.stream()
|
||||||
|
.filter(v -> ObjectUtil.isNotEmpty(v.getToMapItemId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (ObjectUtil.isEmpty(collect)) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
return collect.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getToMapItemId,
|
||||||
|
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(RobotTaskDetailDO::getToLocationNumber)),
|
||||||
|
a -> a.isPresent() ? a.get().getToLocationNumber() : null)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Long, Long> getFromLocationMap(List<RobotTaskDetailDO> detailDOS) {
|
||||||
|
List<RobotTaskDetailDO> collect = detailDOS.stream()
|
||||||
|
.filter(v -> ObjectUtil.isNotEmpty(v.getFromMapItemId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (ObjectUtil.isEmpty(collect)) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
return collect.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getFromMapItemId,
|
||||||
|
Collectors.collectingAndThen(Collectors.minBy(Comparator.comparingLong(RobotTaskDetailDO::getFromLocationNumber)),
|
||||||
|
a -> a.isPresent() ? a.get().getFromLocationNumber() : null)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Long, RobotTaskDetailDO> getToLaneMap(List<RobotTaskDetailDO> detailDOS) {
|
||||||
|
|
||||||
|
List<RobotTaskDetailDO> collect = detailDOS.stream()
|
||||||
|
.filter(v -> ObjectUtil.isNotEmpty(v.getToLaneId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (ObjectUtil.isEmpty(collect)) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
return collect.stream().collect(Collectors.groupingBy(RobotTaskDetailDO::getToLaneId,
|
||||||
|
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(RobotTaskDetailDO::getToLocationNumber)), Optional::get)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<Long, RobotTaskDetailDO> getFromLaneMap(List<RobotTaskDetailDO> detailDOS) {
|
||||||
|
List<RobotTaskDetailDO> collect = detailDOS.stream()
|
||||||
|
.filter(v -> ObjectUtil.isNotEmpty(v.getFromLaneId()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (ObjectUtil.isEmpty(collect)) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return collect.stream()
|
||||||
|
.collect(Collectors.groupingBy(RobotTaskDetailDO::getFromLaneId,
|
||||||
|
Collectors.collectingAndThen(Collectors.minBy(Comparator.comparingLong(RobotTaskDetailDO::getFromLocationNumber)), Optional::get)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 仅取货设置任务
|
* 仅取货设置任务
|
||||||
|
@ -212,6 +212,8 @@ zn:
|
|||||||
send_robot_init_pose: true # 是否为发送默认的车辆所在地图和点位
|
send_robot_init_pose: true # 是否为发送默认的车辆所在地图和点位
|
||||||
synchronous_all_map_node: 500 # 点位信息每次发送的数据量
|
synchronous_all_map_node: 500 # 点位信息每次发送的数据量
|
||||||
task_not_check: true # 创建任务不校验
|
task_not_check: true # 创建任务不校验
|
||||||
|
check_shortest_distance: 1.5 # 检测点最短距离
|
||||||
|
check_longest_distance: 3.0 # 检测点最长距离
|
||||||
|
|
||||||
|
|
||||||
#海康威视的相关配置
|
#海康威视的相关配置
|
||||||
|
@ -247,6 +247,8 @@ zn:
|
|||||||
send_robot_init_pose: true # 是否为发送默认的车辆所在地图和点位
|
send_robot_init_pose: true # 是否为发送默认的车辆所在地图和点位
|
||||||
synchronous_all_map_node: 500 # 点位信息每次发送的数据量
|
synchronous_all_map_node: 500 # 点位信息每次发送的数据量
|
||||||
task_not_check: true # 创建任务不校验
|
task_not_check: true # 创建任务不校验
|
||||||
|
check_shortest_distance: 1.5 # 检测点最短距离
|
||||||
|
check_longest_distance: 3.0 # 检测点最长距离
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
file:
|
file:
|
||||||
|
@ -240,6 +240,8 @@ zn:
|
|||||||
send_robot_init_pose: true # 是否为发送默认的车辆所在地图和点位
|
send_robot_init_pose: true # 是否为发送默认的车辆所在地图和点位
|
||||||
synchronous_all_map_node: 500 # 点位信息每次发送的数据量
|
synchronous_all_map_node: 500 # 点位信息每次发送的数据量
|
||||||
task_not_check: true # 创建任务不校验
|
task_not_check: true # 创建任务不校验
|
||||||
|
check_shortest_distance: 1.5 # 检测点最短距离
|
||||||
|
check_longest_distance: 3.0 # 检测点最长距离
|
||||||
|
|
||||||
#海康威视的相关配置
|
#海康威视的相关配置
|
||||||
isc:
|
isc:
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
<?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.houselocation.WareHouseLocationTypeMapper">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||||
|
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||||
|
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||||
|
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||||
|
-->
|
||||||
|
|
||||||
|
</mapper>
|
@ -346,7 +346,7 @@
|
|||||||
t1.deleted = '0'
|
t1.deleted = '0'
|
||||||
and t2.deleted = '0'
|
and t2.deleted = '0'
|
||||||
and t2.occur_error = '1'
|
and t2.occur_error = '1'
|
||||||
and ((t2.task_type = '1' and t2.task_stage in ('2','3','4')) or (t2.task_type = '6') or (t2.task_type = '5' and t2.task_stage = '2'))
|
and ((t2.task_type = '1' and t2.task_stage in ('1','2','3','4')) or (t2.task_type = '6') or (t2.task_type = '5' and t2.task_stage = '2'))
|
||||||
and t2.task_status = '1'
|
and t2.task_status = '1'
|
||||||
and t1.task_status = '1'
|
and t1.task_status = '1'
|
||||||
<if test="pageReqVO.robotNo != null and pageReqVO.robotNo != ''">
|
<if test="pageReqVO.robotNo != null and pageReqVO.robotNo != ''">
|
||||||
|
Loading…
Reference in New Issue
Block a user