任务列表/修改任务状态、优先级
This commit is contained in:
parent
0b517511ea
commit
d9ac7b7cb6
@ -191,9 +191,13 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode TASK_CYCLE_NOT_OPEN = new ErrorCode(1-002-035-003, "循环任务的配置未开启!");
|
||||
ErrorCode TASK_ONLY_CHOOSE_LOCATION = new ErrorCode(1-002-035-004, "搬空任务只能选择线库或者区域");
|
||||
ErrorCode TASK_CHECK_EXCEPTION = new ErrorCode(1-002-035-005, "任务下发失败");
|
||||
ErrorCode TASK_CHECK_ID_EXCEPTION = new ErrorCode(1-002-035-006, "请输入ID");
|
||||
ErrorCode TASK_CHECK_TASK_PRIORITY = new ErrorCode(1-002-035-007, "非新单据不能修改优先级");
|
||||
ErrorCode TASK_CHECK_TASK_STATUS = new ErrorCode(1-002-035-100, "订单已完成");
|
||||
|
||||
// ========== 机器人任务明细 1-002-036-000 ==========
|
||||
ErrorCode TASK_DETAIL_NOT_EXISTS = new ErrorCode(1-002-036-001, "机器人任务明细不存在");
|
||||
ErrorCode TASK_DETAIL_CHANGE_ROBOT = new ErrorCode(1-002-036-002, "非新单据不能修改车辆");
|
||||
|
||||
// ========== 机器人任务明细 1-002-037-000 ==========
|
||||
ErrorCode REDISSON_NOT_OBTAIN_LOCK = new ErrorCode(1-002-037-001, "有正在下发中的任务请稍后重试!");
|
||||
|
@ -3,9 +3,14 @@ package cn.iocoder.yudao.module.system.api.robot;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import cn.iocoder.yudao.module.system.api.robot.dto.RobotCompleteTaskDTO;
|
||||
import cn.iocoder.yudao.module.system.constant.robot.RobotExecutionStateConstant;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
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.mysql.robot.RobotInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotStatusEnum;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskDetailStatusEnum;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -14,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@ -28,6 +34,9 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
@Autowired
|
||||
private RobotTaskMapper robotTaskMapper;
|
||||
|
||||
@Autowired@Resource
|
||||
private RobotInformationMapper robotInformationMapper;
|
||||
|
||||
/**
|
||||
* 机器人完成任务上报
|
||||
* @param robotCompleteTaskDTO
|
||||
@ -38,20 +47,36 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
public CommonResult<Boolean> robotDoneTask(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||
log.info("机器人完成任务上报 :{}", JSON.toJSONString(robotCompleteTaskDTO));
|
||||
TenantContextHolder.setTenantId(1L);
|
||||
|
||||
if (RobotExecutionStateConstant.UN_DO.equals(robotCompleteTaskDTO.getExecution_state())) {
|
||||
return CommonResult.success(Boolean.TRUE);
|
||||
}
|
||||
//更新任务状态
|
||||
RobotTaskDetailDO detailDO = new RobotTaskDetailDO();
|
||||
detailDO.setId(robotCompleteTaskDTO.getOrder_id());
|
||||
detailDO.setEndTime(LocalDateTime.now());
|
||||
detailDO.setTaskStatus(robotCompleteTaskDTO.getExecution_state());
|
||||
robotTaskDetailMapper.updateRobotDetailById(detailDO);
|
||||
|
||||
//更新任务状态
|
||||
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrder_id());
|
||||
List<RobotTaskDetailDO> taskDetails = robotTaskDetailMapper.queryByTaskId(robotTaskDetailDO.getRobotTaskId());
|
||||
boolean b =
|
||||
boolean done =
|
||||
taskDetails.stream().allMatch(v -> (v.getTaskStatus().equals(RobotTaskDetailStatusEnum.DONE.getType())
|
||||
|| v.getTaskStatus().equals(RobotTaskDetailStatusEnum.CLOSE.getType()) ));
|
||||
if(b) {
|
||||
robotTaskMapper.updateRobotStatus(taskDetails.get(0).getRobotTaskId(), RobotTaskDetailStatusEnum.DONE.getType());
|
||||
if(done) {
|
||||
RobotTaskDO robotTaskDO = new RobotTaskDO();
|
||||
robotTaskDO.setId(taskDetails.get(0).getRobotTaskId());
|
||||
robotTaskDO.setEndTime(LocalDateTime.now());
|
||||
robotTaskDO.setTaskStatus(RobotTaskDetailStatusEnum.DONE.getType());
|
||||
robotTaskMapper.updateRobot(robotTaskDO);
|
||||
}
|
||||
//更新机器人任务状态
|
||||
if (RobotExecutionStateConstant.DONE.equals(robotCompleteTaskDTO.getExecution_state()) ||
|
||||
RobotExecutionStateConstant.CLOSE.equals(robotCompleteTaskDTO.getExecution_state())) {
|
||||
RobotInformationDO query = new RobotInformationDO();
|
||||
query.setMacAddress(robotCompleteTaskDTO.getMac());
|
||||
List<RobotInformationDO> existRobotMac = robotInformationMapper.queryAllByLimit(query);
|
||||
String robotNo = existRobotMac.get(0).getRobotNo();
|
||||
robotInformationMapper.updateRobotStatus(robotNo, RobotStatusEnum.STAND_BY.getType());
|
||||
}
|
||||
|
||||
return CommonResult.success(true);
|
||||
|
@ -0,0 +1,17 @@
|
||||
package cn.iocoder.yudao.module.system.constant.robot;
|
||||
|
||||
/**
|
||||
* 机器人上报的状态
|
||||
*/
|
||||
public class RobotExecutionStateConstant {
|
||||
//未开始
|
||||
public static Integer UN_DO = 0;
|
||||
//正在做
|
||||
public static Integer DOING = 1;
|
||||
//已完成
|
||||
public static Integer DONE = 2;
|
||||
//已取消
|
||||
public static Integer CLOSE = 3;
|
||||
//已失败
|
||||
public static Integer FAIL = 4;
|
||||
}
|
@ -101,4 +101,12 @@ public class RobotInformationController {
|
||||
return success(informationService.statisticsInformation());
|
||||
}
|
||||
|
||||
@PostMapping("/getCanUseRobot")
|
||||
@Operation(summary = "查询能正常使用的车辆")
|
||||
@PreAuthorize("@ss.hasPermission('robot:information:getCanUseRobot')")
|
||||
public CommonResult<List<RobotInformationRespVO>> getCanUseRobot() {
|
||||
List<RobotInformationDO> result = informationService.getCanUseRobot();
|
||||
return success(BeanUtils.toBean(result, RobotInformationRespVO.class));
|
||||
}
|
||||
|
||||
}
|
@ -74,11 +74,19 @@ public class RobotTaskController {
|
||||
return success(BeanUtils.toBean(task, RobotTaskRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/getTaskNo")
|
||||
@Operation(summary = "获得任务号")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('robot:task:getTaskNo')")
|
||||
public CommonResult<String> getTaskNo() {
|
||||
return success(taskService.getTaskNo());
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得机器人任务主表分页")
|
||||
@PreAuthorize("@ss.hasPermission('robot:task:query')")
|
||||
public CommonResult<PageResult<RobotTaskRespVO>> getTaskPage(@Valid RobotTaskPageReqVO pageReqVO) {
|
||||
PageResult<RobotTaskDO> pageResult = taskService.getTaskPage(pageReqVO);
|
||||
PageResult<RobotTaskRespVO> pageResult = taskService.getTaskPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, RobotTaskRespVO.class));
|
||||
}
|
||||
|
||||
@ -89,7 +97,7 @@ public class RobotTaskController {
|
||||
public void exportTaskExcel(@Valid RobotTaskPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<RobotTaskDO> list = taskService.getTaskPage(pageReqVO).getList();
|
||||
List<RobotTaskRespVO> list = taskService.getTaskPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "机器人任务主表.xls", "数据", RobotTaskRespVO.class,
|
||||
BeanUtils.toBean(list, RobotTaskRespVO.class));
|
||||
|
@ -31,6 +31,11 @@ public class RobotTaskDetailAddVo {
|
||||
@Schema(description = "AGV编号")
|
||||
private String robotNo;
|
||||
|
||||
@Schema(description = "停车后是否锁定(0:否、1:是)")
|
||||
private Integer needLock;
|
||||
@Schema(description = "所选车辆电量(充电模式)")
|
||||
private Integer electricity;
|
||||
|
||||
@Schema(description = "计算后的来源库位编号(前端不用传此字段)")
|
||||
private String fromLocationNo;
|
||||
@Schema(description = "计算后的来源库位id(前端不用传此字段)")
|
||||
|
@ -71,4 +71,8 @@ public class RobotTaskDetailPageReqVO extends PageParam {
|
||||
private Integer toLocationStorey;
|
||||
@Schema(description = "优先级")
|
||||
private Long priority;
|
||||
@Schema(description = "停车后是否锁定(0:否、1:是)")
|
||||
private Integer needLock;
|
||||
@Schema(description = "所选车辆电量(充电模式)")
|
||||
private Integer electricity;
|
||||
}
|
@ -87,5 +87,11 @@ public class RobotTaskDetailRespVO {
|
||||
@Schema(description = "优先级")
|
||||
@ExcelProperty("优先级")
|
||||
private Long priority;
|
||||
@Schema(description = "停车后是否锁定(0:否、1:是)")
|
||||
@ExcelProperty("停车后是否锁定(0:否、1:是)")
|
||||
private Integer needLock;
|
||||
@Schema(description = "所选车辆电量(充电模式)")
|
||||
@ExcelProperty("所选车辆电量(充电模式)")
|
||||
private Integer electricity;
|
||||
|
||||
}
|
@ -71,5 +71,9 @@ public class RobotTaskDetailSaveReqVO {
|
||||
private Integer toLocationStorey;
|
||||
@Schema(description = "优先级")
|
||||
private Long priority;
|
||||
@Schema(description = "停车后是否锁定(0:否、1:是)")
|
||||
private Integer needLock;
|
||||
@Schema(description = "所选车辆电量(充电模式)")
|
||||
private Integer electricity;
|
||||
|
||||
}
|
@ -52,7 +52,7 @@ public class RobotTaskPageReqVO extends PageParam {
|
||||
private String taskNo;
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "2")
|
||||
private Long taskStatus;
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
||||
private Long taskStage;
|
||||
|
@ -1,5 +1,6 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.robot.vo;
|
||||
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
@ -7,6 +8,8 @@ import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 机器人任务主表 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@ -66,7 +69,7 @@ public class RobotTaskRespVO {
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "2")
|
||||
@ExcelProperty("任务状态(0:未开始、1:执行中、2:已完成、3:已取消)")
|
||||
private Long taskStatus;
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
||||
@ExcelProperty("任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
||||
@ -74,14 +77,19 @@ public class RobotTaskRespVO {
|
||||
|
||||
@Schema(description = "开始时间")
|
||||
@ExcelProperty("开始时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime startTime;
|
||||
|
||||
@Schema(description = "结束时间")
|
||||
@ExcelProperty("结束时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime endTime;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@Schema(description = "子任务明细")
|
||||
List<RobotTaskDetailDO> details;
|
||||
}
|
@ -57,7 +57,7 @@ public class RobotTaskSaveReqVO {
|
||||
private String taskNo;
|
||||
|
||||
@Schema(description = "任务状态(0:未开始、1:执行中、2:已完成、3:已取消)", example = "2")
|
||||
private Long taskStatus;
|
||||
private Integer taskStatus;
|
||||
|
||||
@Schema(description = "任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)")
|
||||
private Long taskStage;
|
||||
|
@ -80,7 +80,7 @@ public class RobotTaskDO extends BaseDO {
|
||||
/**
|
||||
* 任务状态(0:未开始、1:执行中、2:已完成、3:已取消)
|
||||
*/
|
||||
private Long taskStatus;
|
||||
private Integer taskStatus;
|
||||
/**
|
||||
* 任务阶段(0:待执行、1:前往取货、2:取货中、3:运输中、4:放货中、5:结束)
|
||||
*/
|
||||
|
@ -1,6 +1,5 @@
|
||||
package cn.iocoder.yudao.module.system.dal.dataobject.robot;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@ -104,5 +103,12 @@ public class RobotTaskDetailDO extends BaseDO {
|
||||
* 优先级
|
||||
*/
|
||||
private Long priority;
|
||||
|
||||
/**
|
||||
* 停车后是否锁定(0:否、1:是)
|
||||
*/
|
||||
private Integer needLock;
|
||||
/**
|
||||
* 所选车辆电量(充电模式)
|
||||
*/
|
||||
private Integer electricity;
|
||||
}
|
@ -58,7 +58,7 @@ public interface RobotTaskDetailMapper extends BaseMapperX<RobotTaskDetailDO> {
|
||||
* 查询未执行的明细任务
|
||||
* @return
|
||||
*/
|
||||
List<RobotTaskDetailDO> getUnDoTask();
|
||||
List<RobotTaskDetailDO> getUnDoTask(@Param("taskIds") List<Long> taskIds);
|
||||
|
||||
|
||||
List<RobotTaskDetailDO> queryByTaskId(@Param("robotTaskId") Long robotTaskId);
|
||||
|
@ -40,12 +40,16 @@ public interface RobotTaskMapper extends BaseMapperX<RobotTaskDO> {
|
||||
.orderByDesc(RobotTaskDO::getId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新
|
||||
* @param robotTaskDO
|
||||
*/
|
||||
void updateRobot(RobotTaskDO robotTaskDO);
|
||||
|
||||
/**
|
||||
* 更新任务状态
|
||||
* @param id
|
||||
* @param taskStatus
|
||||
* 获取未完成的订单id
|
||||
* @return
|
||||
*/
|
||||
void updateRobotStatus(@Param("id") Long id,
|
||||
@Param("taskStatus") Integer taskStatus);
|
||||
List<Long> getUnDoAndDoingTaskIds();
|
||||
|
||||
}
|
@ -12,6 +12,7 @@ public enum RobotCacheLockEnum {
|
||||
|
||||
TASK_NO("task:robot:no", "任务号"),
|
||||
ROBOT_TASK_ADD_LOCK("robot:task:add:lock", "所有创建机器人任务的锁"),
|
||||
//取消订单、修改优先级
|
||||
ROBOT_TASK_DISTRIBUTE_LOCK("robot:task:distribute:lock", "下发任务给机器人的锁"),
|
||||
ROBOT_TASK_LOCATION_LOCK("robot:task:location:lock", "库位取/放任务下发互斥锁(仅仅锁某个库位)"),
|
||||
ROBOT_TASK_LANE_LOCK("robot:task:lane:lock", "线库/巷道, 取/放任务下发互斥锁(仅仅锁某个线库/巷道)"),
|
||||
|
@ -0,0 +1,30 @@
|
||||
package cn.iocoder.yudao.module.system.enums.robot;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum RobotTaskTypeEnum {
|
||||
TAKE_RELEASE(1),//取放货
|
||||
PARK(2),//停车
|
||||
CHARGE(3),//充电
|
||||
MOVE(4),//移动
|
||||
TAKE(5),//仅取货
|
||||
RELEASE(6),//仅放货
|
||||
SCAN(7),//扫描码
|
||||
DETECTING_TRAYS(8); //检测托盘类型
|
||||
/**
|
||||
* 类型
|
||||
*/
|
||||
private final Integer type;
|
||||
|
||||
public static RobotTaskTypeEnum getRobotTaskType(Integer type) {
|
||||
for (RobotTaskTypeEnum item : RobotTaskTypeEnum.values()) {
|
||||
if (item.getType().equals(type)) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -60,4 +60,10 @@ public interface RobotInformationService {
|
||||
* @return
|
||||
*/
|
||||
RobotInformationStatisticsVO statisticsInformation();
|
||||
|
||||
/**
|
||||
* 查询能正常使用的车辆
|
||||
* @return
|
||||
*/
|
||||
List<RobotInformationDO> getCanUseRobot();
|
||||
}
|
@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
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.enums.robot.RobotTaskModelEnum;
|
||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
@ -161,4 +162,15 @@ public class RobotInformationServiceImpl implements RobotInformationService {
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<RobotInformationDO> getCanUseRobot() {
|
||||
RobotInformationDO query = new RobotInformationDO();
|
||||
query.setRobotTaskModel(RobotTaskModelEnum.NORMAL.getType());
|
||||
return informationMapper.queryAllByLimit(query);
|
||||
}
|
||||
|
||||
}
|
@ -1,10 +1,12 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVo;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDetailDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskDetailStatusEnum;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@ -19,6 +21,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_DETAIL_CHANGE_ROBOT;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_DETAIL_NOT_EXISTS;
|
||||
|
||||
|
||||
@ -47,6 +50,11 @@ public class RobotTaskDetailServiceImpl implements RobotTaskDetailService {
|
||||
public void updateTaskDetail(RobotTaskDetailSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateTaskDetailExists(updateReqVO.getId());
|
||||
RobotTaskDetailDO robotTaskDetailDO = taskDetailMapper.selectById(updateReqVO.getId());
|
||||
if (ObjectUtil.isNotEmpty(updateReqVO.getRobotNo()) &&
|
||||
!RobotTaskDetailStatusEnum.NEW.getType().equals(robotTaskDetailDO.getTaskStatus())) {
|
||||
throw exception(TASK_DETAIL_CHANGE_ROBOT);
|
||||
}
|
||||
// 更新
|
||||
RobotTaskDetailDO updateObj = BeanUtils.toBean(updateReqVO, RobotTaskDetailDO.class);
|
||||
taskDetailMapper.updateById(updateObj);
|
||||
|
@ -5,6 +5,7 @@ import javax.validation.*;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||
|
||||
@ -51,6 +52,11 @@ public interface RobotTaskService {
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 机器人任务主表分页
|
||||
*/
|
||||
PageResult<RobotTaskDO> getTaskPage(RobotTaskPageReqVO pageReqVO);
|
||||
PageResult<RobotTaskRespVO> getTaskPage(RobotTaskPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获取任务号
|
||||
* @return
|
||||
*/
|
||||
String getTaskNo();
|
||||
}
|
@ -1,11 +1,10 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVo;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.*;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||
@ -169,7 +168,7 @@ public class RobotTaskServiceImpl implements RobotTaskService {
|
||||
|
||||
//查找库位
|
||||
if (MoveAllEnum.NO.getType().equals(createReqVO.getDoMoveAll())) {
|
||||
setSingleLocationIdNo(createReqVO.getTaskDetailList(),task.getId());
|
||||
setSingleLocationIdNo(createReqVO.getTaskDetailList(),task);
|
||||
} else {
|
||||
setAllLocationIdNo(createReqVO,task.getId());
|
||||
}
|
||||
@ -323,91 +322,230 @@ public class RobotTaskServiceImpl implements RobotTaskService {
|
||||
* @return
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void setSingleLocationIdNo(List<RobotTaskDetailAddVo> taskDetailList, Long taskId){
|
||||
public void setSingleLocationIdNo(List<RobotTaskDetailAddVo> taskDetailList, RobotTaskDO task){
|
||||
List<Long> locationIds = new ArrayList<>();
|
||||
for (RobotTaskDetailAddVo robotTaskVo : taskDetailList) {
|
||||
Set<Long> mapIds = new HashSet<>();
|
||||
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
|
||||
RobotInformationPageReqVO pageReqVO = new RobotInformationPageReqVO();
|
||||
pageReqVO.setRobotNo(robotTaskVo.getRobotNo());
|
||||
mapIds = informationMapper.selectPage(pageReqVO).getList()
|
||||
.stream()
|
||||
.findFirst()
|
||||
.map(RobotInformationDO::getFloorAreaJson)
|
||||
.orElse(new HashSet<>());
|
||||
robotTaskVo.setRobotTaskId(task.getId());
|
||||
robotTaskVo.setPriority(task.getPriority());
|
||||
RobotTaskTypeEnum robotTaskType = RobotTaskTypeEnum.getRobotTaskType(robotTaskVo.getTaskType());
|
||||
switch (robotTaskType){
|
||||
case TAKE_RELEASE:
|
||||
doTakeRelease(robotTaskVo,locationIds);
|
||||
break;
|
||||
case PARK:
|
||||
doPark(robotTaskVo);
|
||||
break;
|
||||
case CHARGE:
|
||||
doCharge(robotTaskVo);
|
||||
break;
|
||||
case MOVE:
|
||||
doMove(robotTaskVo);
|
||||
break;
|
||||
case TAKE:
|
||||
doTake(robotTaskVo);
|
||||
break;
|
||||
case RELEASE:
|
||||
doRelease(robotTaskVo);
|
||||
break;
|
||||
case SCAN:
|
||||
doScan(robotTaskVo);
|
||||
break;
|
||||
case DETECTING_TRAYS:
|
||||
doDetectingTrays(robotTaskVo);
|
||||
break;
|
||||
default :
|
||||
log.error("任务类型不存在 ");
|
||||
throw new RuntimeException("任务类型不存在");
|
||||
}
|
||||
|
||||
//校验放货库位
|
||||
if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getReleaseType())) {
|
||||
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getReleaseId()).build();
|
||||
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
|
||||
robotTaskVo.setToLocationNo(locationDO.getLocationNo());
|
||||
robotTaskVo.setToLocationId(robotTaskVo.getReleaseId());
|
||||
robotTaskVo.setToLocationStorey(locationDO.getLocationStorey());
|
||||
if (ObjectUtil.isNotEmpty(mapIds) && !mapIds.contains(locationDO.getMapId())) {
|
||||
log.error("机器人不能在此放货库位放货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
|
||||
throw new RuntimeException("机器人不能在此放货库位放货 "+ robotTaskVo.getReleaseId());
|
||||
}
|
||||
} else {
|
||||
WareHouseLocationDO wareHouseLocationDO =
|
||||
locationMapper.selectByTypeAndId(LocationUseStatusEnum.NO.getType(), robotTaskVo.getReleaseType()
|
||||
,robotTaskVo.getReleaseId(),locationIds,mapIds);
|
||||
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
|
||||
log.error("放货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getReleaseId());
|
||||
throw new RuntimeException("放货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getReleaseId());
|
||||
}
|
||||
robotTaskVo.setToLocationNo(wareHouseLocationDO.getLocationNo());
|
||||
robotTaskVo.setToLocationId(wareHouseLocationDO.getId());
|
||||
robotTaskVo.setToLocationStorey(wareHouseLocationDO.getLocationStorey());
|
||||
}
|
||||
robotTaskVo.setPriority(robotTaskVo.getPriority());
|
||||
locationIds.add(robotTaskVo.getToLocationId());
|
||||
//校验取货库位
|
||||
if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getTakeType())) {
|
||||
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getTakeId()).build();
|
||||
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
|
||||
robotTaskVo.setFromLocationNo(locationDO.getLocationNo());
|
||||
robotTaskVo.setFromLocationId(robotTaskVo.getTakeId());
|
||||
robotTaskVo.setFromLocationStorey(locationDO.getLocationStorey());
|
||||
if (ObjectUtil.isNotEmpty(mapIds) && !mapIds.contains(locationDO.getMapId())) {
|
||||
log.error("机器人不能在此取货库位取货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
|
||||
throw new RuntimeException("机器人不能在此取货库位取货 "+ robotTaskVo.getTakeId());
|
||||
}
|
||||
} else {
|
||||
WareHouseLocationDO wareHouseLocationDO =
|
||||
locationMapper.selectByTypeAndId(LocationUseStatusEnum.YES.getType(),robotTaskVo.getTakeType(),
|
||||
robotTaskVo.getTakeId(),locationIds,mapIds);
|
||||
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
|
||||
log.error("取货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getTakeId());
|
||||
throw new RuntimeException("取货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getTakeId());
|
||||
}
|
||||
robotTaskVo.setFromLocationNo(wareHouseLocationDO.getLocationNo());
|
||||
robotTaskVo.setFromLocationId(wareHouseLocationDO.getId());
|
||||
robotTaskVo.setFromLocationStorey(wareHouseLocationDO.getLocationStorey());
|
||||
}
|
||||
locationIds.add(robotTaskVo.getFromLocationId());
|
||||
//验证取货库位是否存在未完成的任务
|
||||
Set<Long> set = new HashSet<>();
|
||||
set.add(robotTaskVo.getFromLocationId());
|
||||
List<RobotTaskDetailDO> doingTasks = taskDetailMapper.queryDoingTaskByIds(set);
|
||||
if (ObjectUtil.isNotEmpty(doingTasks)) {
|
||||
log.error("取货库位,存在未完成的任务 :{}", robotTaskVo.getTakeId());
|
||||
throw new RuntimeException("取货库位,存在未完成的任务");
|
||||
}
|
||||
|
||||
//设置为锁定
|
||||
locationMapper.updateLocationLockStatus(robotTaskVo.getToLocationId(),0,taskId);
|
||||
locationMapper.updateLocationLockStatus(robotTaskVo.getFromLocationId(),0,taskId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检测托盘类型
|
||||
* @param robotTaskVo
|
||||
*/
|
||||
private void doDetectingTrays(RobotTaskDetailAddVo robotTaskVo) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 扫描码
|
||||
* @param robotTaskVo
|
||||
*/
|
||||
private void doScan(RobotTaskDetailAddVo robotTaskVo) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 仅放货
|
||||
* @param robotTaskVo
|
||||
*/
|
||||
private void doRelease(RobotTaskDetailAddVo robotTaskVo) {
|
||||
locationMapper.updateLocationLockStatus(robotTaskVo.getToLocationId(),0,robotTaskVo.getRobotTaskId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 仅取货
|
||||
* @param robotTaskVo
|
||||
*/
|
||||
private void doTake(RobotTaskDetailAddVo robotTaskVo) {
|
||||
locationMapper.updateLocationLockStatus(robotTaskVo.getFromLocationId(),0,robotTaskVo.getRobotTaskId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 移动
|
||||
* @param robotTaskVo
|
||||
*/
|
||||
private void doMove(RobotTaskDetailAddVo robotTaskVo) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 充电
|
||||
* @param robotTaskVo
|
||||
*/
|
||||
private void doCharge(RobotTaskDetailAddVo robotTaskVo) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 停车
|
||||
* @param robotTaskVo
|
||||
*/
|
||||
private void doPark(RobotTaskDetailAddVo robotTaskVo) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询此机器人对应的楼层/区域(json)
|
||||
* @param robotNo
|
||||
* @return
|
||||
*/
|
||||
public Set<Long> getMapIdsByRobotNo(String robotNo) {
|
||||
if (ObjectUtil.isNotEmpty(robotNo)) {
|
||||
RobotInformationPageReqVO pageReqVO = new RobotInformationPageReqVO();
|
||||
pageReqVO.setRobotNo(robotNo);
|
||||
return informationMapper.selectPage(pageReqVO).getList()
|
||||
.stream()
|
||||
.findFirst()
|
||||
.map(RobotInformationDO::getFloorAreaJson)
|
||||
.orElse(new HashSet<>());
|
||||
}
|
||||
return new HashSet<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* 取放
|
||||
* @param robotTaskVo
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void doTakeRelease(RobotTaskDetailAddVo robotTaskVo,List<Long> locationIds) {
|
||||
Set<Long> mapIds = new HashSet<>();
|
||||
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
|
||||
mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo());
|
||||
}
|
||||
|
||||
//校验放货库位
|
||||
if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getReleaseType())) {
|
||||
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getReleaseId()).build();
|
||||
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
|
||||
robotTaskVo.setToLocationNo(locationDO.getLocationNo());
|
||||
robotTaskVo.setToLocationId(robotTaskVo.getReleaseId());
|
||||
robotTaskVo.setToLocationStorey(locationDO.getLocationStorey());
|
||||
if (ObjectUtil.isNotEmpty(mapIds) && !mapIds.contains(locationDO.getMapId())) {
|
||||
log.error("机器人不能在此放货库位放货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
|
||||
throw new RuntimeException("机器人不能在此放货库位放货 "+ robotTaskVo.getReleaseId());
|
||||
}
|
||||
} else {
|
||||
WareHouseLocationDO wareHouseLocationDO =
|
||||
locationMapper.selectByTypeAndId(LocationUseStatusEnum.NO.getType(), robotTaskVo.getReleaseType()
|
||||
,robotTaskVo.getReleaseId(),locationIds,mapIds);
|
||||
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
|
||||
log.error("放货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getReleaseId());
|
||||
throw new RuntimeException("放货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getReleaseId());
|
||||
}
|
||||
robotTaskVo.setToLocationNo(wareHouseLocationDO.getLocationNo());
|
||||
robotTaskVo.setToLocationId(wareHouseLocationDO.getId());
|
||||
robotTaskVo.setToLocationStorey(wareHouseLocationDO.getLocationStorey());
|
||||
}
|
||||
locationIds.add(robotTaskVo.getToLocationId());
|
||||
//校验取货库位
|
||||
if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getTakeType())) {
|
||||
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getTakeId()).build();
|
||||
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
|
||||
robotTaskVo.setFromLocationNo(locationDO.getLocationNo());
|
||||
robotTaskVo.setFromLocationId(robotTaskVo.getTakeId());
|
||||
robotTaskVo.setFromLocationStorey(locationDO.getLocationStorey());
|
||||
if (ObjectUtil.isNotEmpty(mapIds) && !mapIds.contains(locationDO.getMapId())) {
|
||||
log.error("机器人不能在此取货库位取货 :{}, 机器人编号 :{}", locationDO.getLocationNo(),robotTaskVo.getRobotNo());
|
||||
throw new RuntimeException("机器人不能在此取货库位取货 "+ robotTaskVo.getTakeId());
|
||||
}
|
||||
} else {
|
||||
WareHouseLocationDO wareHouseLocationDO =
|
||||
locationMapper.selectByTypeAndId(LocationUseStatusEnum.YES.getType(),robotTaskVo.getTakeType(),
|
||||
robotTaskVo.getTakeId(),locationIds,mapIds);
|
||||
if (ObjectUtil.isEmpty(wareHouseLocationDO)) {
|
||||
log.error("取货库位为空或者已锁定或者机器人取放货区域受限制 :{}", robotTaskVo.getTakeId());
|
||||
throw new RuntimeException("取货库位为空或者已锁定或者机器人取放货区域受限制 "+ robotTaskVo.getTakeId());
|
||||
}
|
||||
robotTaskVo.setFromLocationNo(wareHouseLocationDO.getLocationNo());
|
||||
robotTaskVo.setFromLocationId(wareHouseLocationDO.getId());
|
||||
robotTaskVo.setFromLocationStorey(wareHouseLocationDO.getLocationStorey());
|
||||
}
|
||||
locationIds.add(robotTaskVo.getFromLocationId());
|
||||
//验证取货库位是否存在未完成的任务
|
||||
Set<Long> set = new HashSet<>();
|
||||
set.add(robotTaskVo.getFromLocationId());
|
||||
List<RobotTaskDetailDO> doingTasks = taskDetailMapper.queryDoingTaskByIds(set);
|
||||
if (ObjectUtil.isNotEmpty(doingTasks)) {
|
||||
log.error("取货库位,存在未完成的任务 :{}", robotTaskVo.getTakeId());
|
||||
throw new RuntimeException("取货库位,存在未完成的任务");
|
||||
}
|
||||
|
||||
//设置为锁定
|
||||
locationMapper.updateLocationLockStatus(robotTaskVo.getToLocationId(),0,robotTaskVo.getRobotTaskId());
|
||||
locationMapper.updateLocationLockStatus(robotTaskVo.getFromLocationId(),0,robotTaskVo.getRobotTaskId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateTask(RobotTaskSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateTaskExists(updateReqVO.getId());
|
||||
// 更新
|
||||
RobotTaskDO updateObj = BeanUtils.toBean(updateReqVO, RobotTaskDO.class);
|
||||
taskMapper.updateById(updateObj);
|
||||
RLock lock = redissonUtils.getLock(RobotCacheLockEnum.ROBOT_TASK_DISTRIBUTE_LOCK.getKey());
|
||||
if (lock.tryLock()){
|
||||
try {
|
||||
// 校验存在
|
||||
validateTaskExists(updateReqVO.getId());
|
||||
if (ObjectUtil.isEmpty(updateReqVO.getId())) {
|
||||
throw exception(TASK_CHECK_ID_EXCEPTION);
|
||||
}
|
||||
// 更新
|
||||
//修改优先级需要订单状态为未开始
|
||||
RobotTaskDO robotTaskDO = taskMapper.selectById(updateReqVO.getId());
|
||||
if (ObjectUtil.isNotEmpty(updateReqVO.getPriority())) {
|
||||
if (!RobotTaskStatusEnum.NEW.getType().equals(robotTaskDO.getTaskStatus())) {
|
||||
throw exception(TASK_CHECK_TASK_PRIORITY);
|
||||
}
|
||||
List<RobotTaskDetailDO> taskDetailDOS = taskDetailMapper.queryByTaskId(updateReqVO.getId());
|
||||
for (RobotTaskDetailDO taskDetailDO : taskDetailDOS) {
|
||||
taskDetailDO.setPriority(updateReqVO.getPriority());
|
||||
taskDetailMapper.updateRobotDetailById(taskDetailDO);
|
||||
}
|
||||
}
|
||||
//修改订单状态
|
||||
if (ObjectUtil.isNotEmpty(updateReqVO.getTaskStatus()) &&
|
||||
RobotTaskStatusEnum.DONE.getType().equals(robotTaskDO.getTaskStatus())) {
|
||||
throw exception(TASK_CHECK_TASK_STATUS);
|
||||
}
|
||||
RobotTaskDO updateObj = BeanUtils.toBean(updateReqVO, RobotTaskDO.class);
|
||||
taskMapper.updateById(updateObj);
|
||||
} catch (Exception e) {
|
||||
log.error("下发任务给车机出现异常 :{}",e.getMessage());
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
} else {
|
||||
throw exception(REDISSON_NOT_OBTAIN_LOCK);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -430,8 +568,23 @@ public class RobotTaskServiceImpl implements RobotTaskService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<RobotTaskDO> getTaskPage(RobotTaskPageReqVO pageReqVO) {
|
||||
return taskMapper.selectPage(pageReqVO);
|
||||
public PageResult<RobotTaskRespVO> getTaskPage(RobotTaskPageReqVO pageReqVO) {
|
||||
PageResult<RobotTaskDO> pageResult = taskMapper.selectPage(pageReqVO);
|
||||
PageResult<RobotTaskRespVO> dataPage = new PageResult<>();
|
||||
dataPage.setTotal(pageResult.getTotal());
|
||||
List<RobotTaskDO> list = pageResult.getList();
|
||||
List<RobotTaskRespVO> targetList = BeanUtil.copyToList(list, RobotTaskRespVO.class);
|
||||
for (RobotTaskRespVO robotTaskRespVO : targetList) {
|
||||
robotTaskRespVO.setDetails(taskDetailMapper.queryByTaskId(robotTaskRespVO.getId()));
|
||||
}
|
||||
dataPage.setList(targetList);
|
||||
return dataPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTaskNo() {
|
||||
String incrementByKey = redisUtil.getIncrementByKey(RobotCacheLockEnum.TASK_NO.getKey());
|
||||
return taskNo+ DateUtils.getYearMonthDay()+incrementByKey;
|
||||
}
|
||||
|
||||
}
|
@ -1,11 +1,13 @@
|
||||
package cn.iocoder.yudao.module.system.service.robot.job;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.RobotTaskApi;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskDTO;
|
||||
import cn.iocoder.yudao.module.mqtt.api.task.dto.RobotAcceptTaskData;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||
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.mysql.robot.RobotInformationMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskDetailMapper;
|
||||
@ -51,9 +53,15 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
||||
return;
|
||||
}
|
||||
|
||||
List<RobotTaskDetailDO> taskDetailDOS = robotTaskDetailMapper.getUnDoTask();
|
||||
List<Long> taskIds = robotTaskMapper.getUnDoAndDoingTaskIds();
|
||||
if (ObjectUtil.isEmpty(taskIds)) {
|
||||
log.info("暂无需要处理的主任务");
|
||||
return;
|
||||
}
|
||||
|
||||
List<RobotTaskDetailDO> taskDetailDOS = robotTaskDetailMapper.getUnDoTask(taskIds);
|
||||
if (taskDetailDOS.isEmpty()) {
|
||||
log.info("暂无需要处理的任务");
|
||||
log.info("暂无需要处理的明细任务");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -170,7 +178,12 @@ public class DistributeTasksServiceImpl implements DistributeTasksService {
|
||||
detailDO.setStartTime(LocalDateTime.now());
|
||||
detailDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
|
||||
robotTaskDetailMapper.updateRobotDetailById(detailDO);
|
||||
robotTaskMapper.updateRobotStatus(taskDetailDO.getRobotTaskId(), RobotTaskStatusEnum.DOING.getType());
|
||||
|
||||
RobotTaskDO robotTaskDO = new RobotTaskDO();
|
||||
robotTaskDO.setId(taskDetailDO.getRobotTaskId());
|
||||
robotTaskDO.setStartTime(LocalDateTime.now());
|
||||
robotTaskDO.setTaskStatus(RobotTaskDetailStatusEnum.DOING.getType());
|
||||
robotTaskMapper.updateRobot(robotTaskDO);
|
||||
}
|
||||
|
||||
|
||||
|
@ -251,6 +251,13 @@
|
||||
where
|
||||
task_status = '0'
|
||||
and deleted = '0'
|
||||
<if test="taskIds != null and taskIds.size() > 0">
|
||||
and robot_task_id in
|
||||
<foreach collection="taskIds" item="taskId" index="index" open="(" close=")"
|
||||
separator=",">
|
||||
#{taskId}
|
||||
</foreach>
|
||||
</if>
|
||||
order by priority, create_time asc
|
||||
</select>
|
||||
|
||||
|
@ -227,7 +227,15 @@
|
||||
</where>
|
||||
</select>
|
||||
|
||||
|
||||
<select id="getUnDoAndDoingTaskIds" resultType="java.lang.Long">
|
||||
select
|
||||
id
|
||||
from
|
||||
robot_task
|
||||
where
|
||||
deleted = '0'
|
||||
and task_status in ('0','1')
|
||||
</select>
|
||||
|
||||
|
||||
<!--新增所有列-->
|
||||
@ -294,7 +302,7 @@
|
||||
</insert>
|
||||
|
||||
<!--通过主键修改数据-->
|
||||
<update id="update">
|
||||
<update id="updateRobot">
|
||||
update robot_task
|
||||
<set>
|
||||
<if test="montageTask != null">
|
||||
@ -360,22 +368,10 @@
|
||||
<if test="deleted != null">
|
||||
deleted = #{deleted},
|
||||
</if>
|
||||
<if test="tenantId != null">
|
||||
tenant_id = #{tenantId},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
|
||||
<update id="updateRobotStatus">
|
||||
update
|
||||
robot_task
|
||||
set
|
||||
task_status = #{taskStatus}
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<!--通过主键删除-->
|
||||
<delete id="deleteById">
|
||||
delete
|
||||
|
Loading…
Reference in New Issue
Block a user