feat:子卷质检不合格

This commit is contained in:
2026-08-18 18:44:13 +08:00
parent ed8b688cf8
commit 3a74a3f598
18 changed files with 1879 additions and 1 deletions

View File

@@ -58,6 +58,12 @@ public class PackagePdaServiceImpl implements PackagePdaService {
/** 复检合格任务回调处理器编码 */
private static final String RE_CHECK_QUALIFIED_HANDLE_CODE = "reCheckQualifiedAgvTask";
/** 质检不合格业务类型 */
private static final String CHECK_FAILED_BIZ_TYPE = "CHECK_FAILED";
/** 质检不合格任务回调处理器编码 */
private static final String CHECK_FAILED_HANDLE_CODE = "checkFailedAgvTask";
/** ACS 搬运任务类型 */
private static final String ACS_MOVE_TASK_TYPE = "7";
@@ -152,7 +158,7 @@ public class PackagePdaServiceImpl implements PackagePdaService {
if (manaQualityCheckPdaReqVO.getIsQualified()) {
doCheckedQualified(manaQualityCheckPdaReqVO);
} else {
// todo: 做不合格的操作
doCheckedFailed(manaQualityCheckPdaReqVO);
}
} catch (ServiceException ex) {
throw ex;
@@ -169,6 +175,11 @@ public class PackagePdaServiceImpl implements PackagePdaService {
}
}
/**
* 执行人工质检合格操作
*
* @param manaQualityCheckPdaReqVO 人工质检参数
*/
public void doCheckedQualified(ManaQualityCheckPdaReqVO manaQualityCheckPdaReqVO) {
PackagePointDO currentPoint = packagePointService.getPackagePointByCode(
manaQualityCheckPdaReqVO.getPointCode(), false);
@@ -241,4 +252,69 @@ public class PackagePdaServiceImpl implements PackagePdaService {
log.info("复检合格AGV任务创建成功任务标识={},起点编码={},目的点编码={}",
taskResult.getData(), currentPoint.getPointCode(), destinationPoint.getPointCode());
}
/**
* 执行人工质检不合格操作
*
* @param manaQualityCheckPdaReqVO 人工质检参数
*/
private void doCheckedFailed(ManaQualityCheckPdaReqVO manaQualityCheckPdaReqVO) {
PackagePointDO currentPoint = packagePointService.getPackagePointByCode(
manaQualityCheckPdaReqVO.getPointCode(), false);
if (currentPoint == null) {
throw exception(PACKAGE_POINT_NOT_EXISTS);
}
if (!BoxPointTypeEnum.INSPECTION_PENDING_POINT.getCode().equals(currentPoint.getPointType())) {
throw exception(POINT_EXECUTE_REFUGE,
Objects.requireNonNull(BoxPointTypeEnum.getByCode(currentPoint.getPointType())).getDesc(),
"质检不合格");
}
if (packagePointMapper.tryLockPoint(
currentPoint.getPointId(), currentPoint.getPointStatus()) == 0) {
throw exception(PACKAGE_POINT_LOCK_FAILED);
}
List<PackagePointDO> unqualifiedPointList = packagePointMapper.selectAvailablePointList(
BoxPointTypeEnum.UNQUALIFIED_POINT.getCode(), BoxPointStatusEnum.EMPTY.getCode());
if (CollectionUtils.isEmpty(unqualifiedPointList)) {
throw exception(PACKAGE_POINT_UNQUALIFIED_EMPTY_NOT_EXISTS);
}
PackagePointDO destinationPoint = null;
for (PackagePointDO unqualifiedPoint : unqualifiedPointList) {
if (packagePointMapper.tryLockPoint(
unqualifiedPoint.getPointId(), unqualifiedPoint.getPointStatus()) > 0) {
destinationPoint = unqualifiedPoint;
break;
}
}
if (destinationPoint == null) {
throw exception(PACKAGE_POINT_UNQUALIFIED_EMPTY_NOT_EXISTS);
}
TransportTaskCreateReqDTO task = new TransportTaskCreateReqDTO();
task.setTaskName("质检不合格AGV任务");
task.setOwnerService(TaskOwnerServiceEnum.LMS.name());
task.setBizType(CHECK_FAILED_BIZ_TYPE);
task.setBizId(currentPoint.getContainerName());
task.setTaskType(PackageTaskTypeEnum.CHECK_FAILED_AGV.getCode());
task.setHandleCode(CHECK_FAILED_HANDLE_CODE);
task.setAcsTaskType(ACS_MOVE_TASK_TYPE);
task.setAgvSystemType(AGV_SYSTEM_TYPE);
task.setPointCode1(currentPoint.getPointCode());
task.setPointCode2(destinationPoint.getPointCode());
task.setVehicleCode(currentPoint.getVehicleCode());
task.setMaterialCode(currentPoint.getContainerName());
task.setProductArea(currentPoint.getProductArea());
task.setIsAutoIssue("1");
task.setIsCreateFinish(true);
CommonResult<Long> taskResult = transportTaskApi.createTransportTask(task);
if (taskResult.isError()) {
log.error("创建质检不合格AGV任务失败task={},返回={}", task, taskResult);
throw exception(PACKAGE_POINT_CHECK_FAILED_TASK_CREATE_FAILED);
}
log.info("质检不合格AGV任务创建成功任务标识={},起点编码={},目的点编码={}",
taskResult.getData(), currentPoint.getPointCode(), destinationPoint.getPointCode());
}
}

View File

@@ -0,0 +1,94 @@
package cn.code.nl.module.lms.tasks.box;
import cn.code.nl.framework.execute.core.AbstractTask;
import cn.code.nl.framework.execute.core.dto.TaskExecuteDTO;
import cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO;
import cn.code.nl.module.lms.dal.mysql.packagepoint.PackagePointMapper;
import cn.code.nl.module.lms.enums.BoxPointStatusEnum;
import cn.code.nl.module.task.api.TransportTaskApi;
import cn.code.nl.module.task.dto.TaskInfoDTO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 质检不合格 AGV 任务
*
* @Author: liyongde
* @Date: 2026/8/18
*/
@Slf4j
@Component("checkFailedAgvTask")
public class CheckFailedAgvTask extends AbstractTask {
/** 运输任务接口 */
@Resource
private TransportTaskApi transportTaskApi;
/** 装箱区点位 Mapper */
@Resource
private PackagePointMapper packagePointMapper;
/**
* 任务完成后将目的点更新为管制品
*
* @param taskExecuteDTO 任务执行信息
*/
@Override
public void doHandleFinish(TaskExecuteDTO taskExecuteDTO) {
TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData();
PackagePointDO endPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode2(), false);
PackagePointDO updatePoint = new PackagePointDO();
updatePoint.setPointId(endPoint.getPointId());
updatePoint.setVehicleCode(taskInfoDTO.getVehicleCode());
updatePoint.setContainerName(taskInfoDTO.getMaterialCode());
updatePoint.setPointStatus(BoxPointStatusEnum.CONTROLLED.getCode());
updatePoint.setLockStatus("0");
packagePointMapper.updateById(updatePoint);
log.info("质检不合格任务{}执行完成,管制品已存入不合格点{}",
taskExecuteDTO.getTaskId(), taskInfoDTO.getPointCode2());
}
/**
* 任务取消后解锁起点和目的点
*
* @param taskExecuteDTO 任务执行信息
*/
@Override
public void doHandleCancel(TaskExecuteDTO taskExecuteDTO) {
TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData();
PackagePointDO startPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode1(), false);
PackagePointDO endPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode2(), false);
PackagePointDO updateStartPoint = new PackagePointDO();
updateStartPoint.setPointId(startPoint.getPointId());
updateStartPoint.setLockStatus("0");
PackagePointDO updateEndPoint = new PackagePointDO();
updateEndPoint.setPointId(endPoint.getPointId());
updateEndPoint.setLockStatus("0");
packagePointMapper.updateBatch(List.of(updateStartPoint, updateEndPoint));
log.info("质检不合格任务{}已取消,起点{}和目的点{}已解锁", taskExecuteDTO.getTaskId(),
taskInfoDTO.getPointCode1(), taskInfoDTO.getPointCode2());
}
/**
* 取货完成后释放待检点
*
* @param taskExecuteDTO 任务执行信息
*/
@Override
public void doHandlePicked(TaskExecuteDTO taskExecuteDTO) {
TaskInfoDTO taskInfoDTO = transportTaskApi.getTaskById(taskExecuteDTO.getTaskId()).getCheckedData();
PackagePointDO startPoint = packagePointMapper.selectByPointCode(taskInfoDTO.getPointCode1(), false);
PackagePointDO updatePoint = new PackagePointDO();
updatePoint.setPointId(startPoint.getPointId());
updatePoint.setLockStatus("0");
updatePoint.setPointStatus(BoxPointStatusEnum.EMPTY.getCode());
updatePoint.setVehicleCode("");
updatePoint.setContainerName("");
packagePointMapper.updateById(updatePoint);
log.info("质检不合格任务{}取货完成,待检点{}已释放",
taskExecuteDTO.getTaskId(), taskInfoDTO.getPointCode1());
}
}