物流修改状态

liweidong
liweidong-hj 1 month ago
parent 40180975a9
commit 50ce4a9eab
  1. 3
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ITaskService.java
  2. 114
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PipelineServiceImpl.java
  3. 53
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskExecuteRecordServiceImpl.java
  4. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskServiceImpl.java

@ -45,8 +45,9 @@ public interface ITaskService extends BaseService<Task> {
* 保存输送线称重数据
* @param boxBarcode 箱条码
* @param actualWeight 输送线重量
* @param statusStart 任务状态
*/
void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight);
void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight, Integer statusStart);
/**
* 获取输送箱信息

@ -38,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springblade.core.log.exception.ServiceException;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.List;
@ -80,7 +81,7 @@ public class PipelineServiceImpl implements IPipelineService {
// 1. 判断是否超重
if (WeighData.RETURN_STATUS_RETURNED.equals(returnStatus)) {
// 2. 保存称重数据
taskService.savePipelineWeigh(boxBarcode,actualWeight);
taskService.savePipelineWeigh(boxBarcode,actualWeight,Task.STATUS_RETURNED);
// 3.超重处理,解绑
BoxBindingDto boxBindingDto = new BoxBindingDto();
@ -93,7 +94,7 @@ public class PipelineServiceImpl implements IPipelineService {
return false;
} else {
// 2. 保存称重数据
taskService.savePipelineWeigh(boxBarcode,actualWeight);
taskService.savePipelineWeigh(boxBarcode,actualWeight,Task.STATUS_START);
log.info("物料箱[{}]重量校验通过", boxBarcode);
return true;
}
@ -125,6 +126,10 @@ public class PipelineServiceImpl implements IPipelineService {
throw new ServiceException("查询不到该物料箱: " + boxBarcode);
}
// 1.2 更新状态 为运输中
task.setTaskStatus(Task.STATUS_CONVEYOR_END);
taskService.updateById(task);
// 2. 判断站点是否有预占(是否站点没满)
if (null != task.getStationId()) {
// 站点没满,有预占 - 送往指定站点
@ -139,32 +144,91 @@ public class PipelineServiceImpl implements IPipelineService {
/**
* 处理有预占的情况站点没满- 直接送往指定站点
*
* @param boxBarcode 物料箱条码
* @param stationId 预占站点ID
* @return true-处理成功 false-处理失败
*/
private boolean handlePreOccupiedStation(String boxBarcode, Long stationId) {
log.info("开始处理预占站点,boxBarcode:{},stationId:{}", boxBarcode, stationId);
// 1. 参数校验
if (StringUtils.isEmpty(boxBarcode)) {
log.error("物料箱条码为空");
return false;
}
if (null == stationId) {
log.error("站点ID为空");
return false;
}
// 2. 查询站点信息
Station station = stationService.getById(stationId);
if (null == station) {
log.error("预占站点不存在:{}", stationId);
log.error("预占站点不存在,stationId:{}", stationId);
return false;
}
// 校验站点状态是否为预占用
// 3. 校验站点状态是否为预占用
if (!Station.PRE_STATUS_OCCUPIED.equals(station.getStationStatus())) {
log.error("站点状态不是预占用,无法送往:{}", station.getStationCode());
log.error("站点状态不是预占用,当前状态:{},站点:{}",
station.getStationStatus(), station.getStationCode());
return false;
}
log.info("站点有预占,将物料箱送往指定站点:{}", station.getStationCode());
String taskType = agvTaskTypeUtil.getTaskTypeByPositions(Station.PICKUP_CONVEYOR_LINE,station.getStationCode());
// 入库记录
// 4. 查询任务信息
Task task = taskService.getBoxBarcode(boxBarcode);
if (null == task) {
log.error("根据箱码未查询到任务,boxBarcode:{}", boxBarcode);
return false;
}
boolean agvSchedulingTask = iTaskExecuteRecordService.genAgvSchedulingTask
(taskType, Station.PICKUP_CONVEYOR_LINE, station.getStationCode(), AgvConstant.EQUIPMENT_TYPE_AGV, task);
// 5. 生成任务类型
String taskType = agvTaskTypeUtil.getTaskTypeByPositions(
Station.PICKUP_CONVEYOR_LINE,
station.getStationCode()
);
return agvSchedulingTask;
if (StringUtils.isEmpty(taskType)) {
log.error("生成任务类型失败,from:{},to:{}",
Station.PICKUP_CONVEYOR_LINE, station.getStationCode());
return false;
}
// 6. 调用AGV调度
boolean agvSchedulingTask = iTaskExecuteRecordService.genAgvSchedulingTask(
taskType,
Station.PICKUP_CONVEYOR_LINE,
station.getStationCode(),
AgvConstant.EQUIPMENT_TYPE_AGV,
task
);
if (!agvSchedulingTask) {
log.error("AGV调度失败,boxBarcode:{},station:{}",
boxBarcode, station.getStationCode());
return false;
}
// 7. 更新任务状态
task.setTaskStatus(Task.STATUS_FINISHED);
boolean taskUpdate = taskService.updateById(task);
if (!taskUpdate) {
log.error("任务状态更新失败,但AGV调度已成功,taskId:{}", task.getId());
}
// 8. 更新站点状态为占用
station.setStationStatus(Station.STATUS_OCCUPIED);
boolean stationUpdate = stationService.updateById(station);
if (!stationUpdate) {
log.error("站点状态更新失败,但AGV调度已成功,stationId:{}", stationId);
}
log.info("预占站点处理成功,boxBarcode:{},station:{}", boxBarcode, station.getStationCode());
return true;
}
/**
@ -185,10 +249,36 @@ public class PipelineServiceImpl implements IPipelineService {
stationService.updateById(station);
String taskType = agvTaskTypeUtil.getTaskTypeByPositions(Station.PICKUP_CONVEYOR_LINE,station.getStationCode());
if (StringUtils.isEmpty(taskType)) {
log.error("生成任务类型失败,from:{},to:{}",
Station.PICKUP_CONVEYOR_LINE, station.getStationCode());
return false;
}
boolean agvSchedulingTask = iTaskExecuteRecordService.genAgvSchedulingTask
(taskType, Station.PICKUP_CONVEYOR_LINE, station.getStationCode(), AgvConstant.EQUIPMENT_TYPE_AGV, task);
if (!agvSchedulingTask) {
log.error("AGV调度失败,station:{}", station.getStationCode());
return false;
}
// 更新任务状态
task.setTaskStatus(Task.STATUS_FINISHED);
boolean taskUpdate = taskService.updateById(task);
if (!taskUpdate) {
log.error("任务状态更新失败,但AGV调度已成功,taskId:{}", task.getId());
}
// 更新站点状态为占用
station.setStationStatus(Station.STATUS_OCCUPIED);
boolean stationUpdate = stationService.updateById(station);
if (!stationUpdate) {
log.error("站点状态更新失败,但AGV调度已成功,stationId:{}", station.getId());
}
log.info("预占站点处理成功,station:{}", station.getStationCode());
return agvSchedulingTask;
}
}

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import groovy.lang.Lazy;
import lombok.extern.slf4j.Slf4j;
import org.redisson.executor.TasksService;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springblade.desk.logistics.constant.AgvConstant;
@ -291,8 +292,8 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
// 2. 查询任务
Task task = taskService.getById(taskExecuteRecord.getTaskId());
if(null == task){
log.error("查询不到Task数据请求参数:{}", taskExecuteRecord.getTaskId());
return false;
log.error("查询不到Task数据,证明任务不存在,无需接续,请求参数:{}", taskExecuteRecord.getTaskId());
return true;
}
// 3. 检查是否需要送到库位
@ -353,13 +354,20 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
}
// 8. 所有操作成功后,更新任务状态
task.setTaskStatus(Task.STATUS_FINISHED);
task.setTaskStatus(Task.STATUS_TEMPORARY_STORAGE);
boolean taskUpdate = taskService.updateById(task);
if(!taskUpdate){
log.error("Task状态修改失败,但CTU调度已成功,taskCode:{}", taskCode);
}
// 9.将库位状态设置为占用
location.setLocationStatus(Location.STATUS_OCCUPIED);
boolean updateLocation = locationService.updateById(location);
if(!updateLocation){
log.error("库位状态修改失败,但CTU调度已成功,库位:{}", location.getId());
}
log.info("CTU调度成功,taskCode:{},from:{},to:{}",
taskCode, taskExecuteRecord.getEndPos(), location.getLocationCode());
@ -468,9 +476,9 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
// 3. 查询任务
Task task = taskService.getById(taskExecuteRecord.getTaskId());
if (null == task) {
log.error("查询不到Task数据请求参数:{}", taskExecuteRecord.getTaskId());
return false;
if(null == task){
log.error("查询不到Task数据,证明任务不存在,无需接续,请求参数:{}", taskExecuteRecord.getTaskId());
return true;
}
// 4. 获取并校验终点位置(梳齿架)
@ -522,9 +530,20 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
log.info("AGV调度成功,taskCode:{},from:{},to:{}",
taskCode, location.getLocationCode(), station.getStationCode());
// 10. 可选:更新任务状态
// taskExecuteRecord.setStatus("AGV_DISPATCHED");
// taskExecuteRecordMapper.updateById(taskExecuteRecord);
// 更新任务状态
task.setTaskStatus(Task.STATUS_FINISHED);
boolean taskUpdate = taskService.updateById(task);
if (!taskUpdate) {
log.error("任务状态更新失败,但AGV调度已成功,taskId:{}", task.getId());
}
// 更新站点状态为占用
station.setStationStatus(Station.STATUS_OCCUPIED);
boolean stationUpdate = stationService.updateById(station);
if (!stationUpdate) {
log.error("站点状态更新失败,但AGV调度已成功,stationId:{}", station.getId());
}
} else {
log.error("AGV调度失败,taskCode:{}", taskCode);
}
@ -532,7 +551,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
return agvResult;
} catch (Exception e) {
log.error("调用AGV时发生异常,taskCode:{}", taskCode, e);
log.error("回调接口调用AGV时发生异常,taskCode:{}", taskCode, e);
return false;
}
}
@ -553,8 +572,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
// 获取虚拟货架
VirtualShelves virtualShelves = virtualShelvesService.getVirtualShelvesCode();
if (null == virtualShelves) {
log.error("获取虚拟货架失败");
return false;
throw new ServiceException("获取虚拟货架失败");
}
// 站点绑定虚拟货架
@ -563,8 +581,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
startPos
);
if (!shelves) {
log.error("站点绑定虚拟货架失败");
return false;
throw new ServiceException("站点绑定虚拟货架失败");
}
// 调用AGV
@ -576,8 +593,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
virtualShelves.getVirtualShelvesCode()
);
if (null == agvSchedulingTaskVO || !"0".equals(agvSchedulingTaskVO.getCode())) {
log.error("调用AGV调度失败");
return false;
throw new ServiceException("调用AGV调度失败");
}
// 入库记录
@ -587,8 +603,7 @@ public class TaskExecuteRecordServiceImpl extends BaseServiceImpl<TaskExecuteRe
boolean record = inboundRecord(agvSchedulingTaskVO, task);
if (!record) {
log.error("入库记录保存失败");
return false;
throw new ServiceException("入库记录保存失败");
}
return true;

@ -27,7 +27,6 @@ package org.springblade.desk.logistics.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.logistics.mapper.TaskMapper;
import org.springblade.desk.logistics.pojo.dto.TaskDto;
@ -54,11 +53,12 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
TaskMapper taskMapper;
@Override
public void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight) {
public void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight, Integer statusStart) {
// 1.查询物料箱 筛选状态
Task task = taskMapper.selectByBoxBarcode(boxBarcode);
// 2.更新重量以及任务状态
task.setMachineWeight(actualWeight);
task.setTaskStatus(statusStart);
taskMapper.updateById(task);
}

Loading…
Cancel
Save