feat:定时器补充入装箱区任务

This commit is contained in:
2026-08-18 15:46:30 +08:00
parent 5d988431a6
commit f07062bb4f
14 changed files with 304 additions and 4 deletions

View File

@@ -42,6 +42,18 @@ public interface PackagePointMapper extends BaseMapperX<PackagePointDO> {
List<PackagePointDO> selectAvailablePointList(@Param("pointType") String pointType,
@Param("pointStatus") String pointStatus);
/**
* 按区块查询可用点位
*
* @param pointType 点位类型
* @param pointStatus 点位状态
* @param block 区块
* @return 可用点位列表
*/
List<PackagePointDO> selectAvailablePointListByBlock(@Param("pointType") String pointType,
@Param("pointStatus") String pointStatus,
@Param("block") String block);
/**
* 尝试锁定点位
*

View File

@@ -54,6 +54,7 @@ public class BoxAutoJob {
XxlJobHelper.handleSuccess(msg);
log.info(msg);
}
/**
* 待检区->装箱区定时器
*/
@@ -70,4 +71,22 @@ public class BoxAutoJob {
XxlJobHelper.handleSuccess(msg);
log.info(msg);
}
/**
* 自动装箱区桁架定时器
*/
@XxlJob("autoPackageTrussTaskJob")
@TenantJob
public void autoPackageTrussTaskJob() {
log.info("自动装箱区桁架任务创建开始.....");
XxlJobHelper.log("自动装箱区桁架任务创建开始");
packageBoxBusinessService.autoPackageTrussTaskJob();
String msg = "自动装箱区桁架任务创建结束";
XxlJobHelper.log(msg);
XxlJobHelper.handleSuccess(msg);
log.info(msg);
}
}

View File

@@ -21,4 +21,9 @@ public interface PackageBoxBusinessService {
* 待检区->装箱区定时器
*/
void autoSendPackageAgvTaskJob();
/**
* 自动装箱区桁架定时器
*/
void autoPackageTrussTaskJob();
}

View File

@@ -1,14 +1,20 @@
package cn.code.nl.module.lms.service.packagepoint;
import cn.code.nl.framework.common.util.json.JsonUtils;
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.lms.enums.BoxPointTypeEnum;
import cn.code.nl.module.lms.enums.PackageTaskTypeEnum;
import cn.code.nl.module.task.api.TransportTaskApi;
import cn.code.nl.module.task.dto.TaskInfoDTO;
import cn.code.nl.module.task.dto.TransportTaskDestinationAssignReq;
import cn.code.nl.module.task.dto.TransportTaskCreateReqDTO;
import cn.code.nl.module.task.dto.TransportTaskQueryReq;
import cn.code.nl.module.task.enums.TaskOwnerServiceEnum;
import cn.code.nl.module.task.enums.TransportTaskStatusEnum;
import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -130,15 +136,54 @@ public class PackageBoxBusinessServiceImpl implements PackageBoxBusinessService
createPackingToInspectionTask(packingSourceIterator, inspectionEmptyPointList.iterator());
}
/**
* 自动为装箱AGV任务分配装箱点
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void autoSendPackageAgvTaskJob() {
// 查找符合的任务任务状态10taskType = 010603,
TransportTaskQueryReq queryReq = new TransportTaskQueryReq();
queryReq.setTaskType(PackageTaskTypeEnum.PACKAGE_AGV.getCode());
queryReq.setTaskStatus(TransportTaskStatusEnum.CREATED.getCode());
List<TaskInfoDTO> taskList = transportTaskApi.queryTransportTasks(queryReq).getCheckedData();
if (CollectionUtils.isEmpty(taskList)) {
log.info("自动分配装箱任务目的点结束没有待补齐的装箱AGV任务");
return;
}
// 查找对应装箱区的空位lms_package_point没锁、状态是空位、点位类型是装箱点block = 任务中的request_param:({"block": "1"})的block1/2代表第一块或者第二块的任务的值
for (TaskInfoDTO task : taskList) {
PackageTaskRequestParam requestParam = JsonUtils.parseObject(
task.getRequestParam(), PackageTaskRequestParam.class);
List<PackagePointDO> pointList = packagePointMapper.selectAvailablePointListByBlock(
BoxPointTypeEnum.PACKING_POINT.getCode(), BoxPointStatusEnum.EMPTY.getCode(),
requestParam.getBlock());
PackagePointDO destinationPoint = lockNextDestinationPoint(pointList.iterator());
if (destinationPoint == null) {
log.info("装箱AGV任务暂无可用装箱点任务标识={},区块={}",
task.getTaskId(), requestParam.getBlock());
continue;
}
// 补齐任务将任务的pointCode2设置找到的装箱区的站点,任务状态设置成40
TransportTaskDestinationAssignReq assignReq = new TransportTaskDestinationAssignReq();
assignReq.setTaskId(task.getTaskId());
assignReq.setPointCode2(destinationPoint.getPointCode());
assignReq.setExpectedTaskStatus(TransportTaskStatusEnum.CREATED.getCode());
assignReq.setTargetTaskStatus(TransportTaskStatusEnum.READY.getCode());
boolean assigned = transportTaskApi.assignDestination(assignReq).getCheckedData();
if (!assigned) {
packagePointMapper.unlockPoint(destinationPoint.getPointId(), destinationPoint.getPointStatus());
log.info("装箱AGV任务已被其他调度抢占释放装箱点任务标识={},点位编码={}",
task.getTaskId(), destinationPoint.getPointCode());
continue;
}
// 终点点位上锁
log.info("装箱AGV任务目的点分配成功任务标识={},区块={},目的点编码={}",
task.getTaskId(), requestParam.getBlock(), destinationPoint.getPointCode());
}
}
@Override
public void autoPackageTrussTaskJob() {
}
@@ -254,4 +299,16 @@ public class PackageBoxBusinessServiceImpl implements PackageBoxBusinessService
}
return null;
}
/**
* 装箱任务创建请求扩展参数
*/
@Data
private static class PackageTaskRequestParam {
/**
* 区块
*/
private String block;
}
}

View File

@@ -14,6 +14,19 @@
ORDER BY sort_seq, point_id
</select>
<select id="selectAvailablePointListByBlock"
resultType="cn.code.nl.module.lms.dal.dataobject.packagepoint.PackagePointDO">
SELECT *
FROM lms_package_point
WHERE point_type = #{pointType}
AND point_status = #{pointStatus}
AND block = #{block}
AND lock_status = '0'
AND deleted = b'0'
AND is_used = true
ORDER BY sort_seq, point_id
</select>
<update id="tryLockPoint">
UPDATE lms_package_point
SET lock_status = '1',