feat: 新增空木箱桁架入库接口

This commit is contained in:
zhouz
2026-08-21 16:45:06 +08:00
parent cc4e44f4e5
commit 74bbe5f4e7
7 changed files with 151 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
package cn.code.nl.module.wms.api.emptybox.dto;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* 空木箱桁架入库任务创建请求。
*/
@Data
public class EmptyBoxTrussInboundCreateReq {
@NotBlank(message = "取货点位编码不能为空")
private String pointCode;
@NotBlank(message = "木箱规格编码不能为空")
private String materialCode;
@NotNull(message = "堆叠层数不能为空")
@Min(value = 1, message = "堆叠层数不能小于1层")
@Max(value = 3, message = "堆叠层数不能超过3层")
private Integer layerCount;
}

View File

@@ -0,0 +1,19 @@
package cn.code.nl.module.wms.api.emptybox.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 空木箱桁架入库任务创建结果。
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EmptyBoxTrussInboundCreateResp {
private Long taskId;
private String sourcePoint;
private String targetPoint;
private Integer layerCount;
}

View File

@@ -5,6 +5,8 @@ import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxInboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxInboundCreateResp;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxOutboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxOutboundCreateResp;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateResp;
import cn.code.nl.module.wms.service.emptybox.EmptyBoxService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -36,6 +38,14 @@ public class EmptyBoxController {
return success(emptyBoxService.createInbound(req));
}
/** 创建空木箱桁架入库任务。 */
@PostMapping("/createTrussInbound")
@Operation(summary = "创建空木箱桁架入库任务")
public CommonResult<EmptyBoxTrussInboundCreateResp> createTrussInbound(
@Valid @RequestBody EmptyBoxTrussInboundCreateReq req) {
return success(emptyBoxService.createTrussInbound(req));
}
/** 创建空木箱出库任务。 */
@PostMapping("/createOutbound")
@Operation(summary = "创建空木箱出库任务")

View File

@@ -4,6 +4,8 @@ import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxInboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxInboundCreateResp;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxOutboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxOutboundCreateResp;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateResp;
/**
* 空木箱出入库服务。
@@ -13,6 +15,9 @@ public interface EmptyBoxService {
/** 创建空木箱入库任务。 */
EmptyBoxInboundCreateResp createInbound(EmptyBoxInboundCreateReq req);
/** 创建空木箱桁架入库任务。 */
EmptyBoxTrussInboundCreateResp createTrussInbound(EmptyBoxTrussInboundCreateReq req);
/** 创建空木箱出库任务。 */
EmptyBoxOutboundCreateResp createOutbound(EmptyBoxOutboundCreateReq req);

View File

@@ -9,6 +9,8 @@ import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxInboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxInboundCreateResp;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxOutboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxOutboundCreateResp;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateReq;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateResp;
import cn.code.nl.module.wms.dal.dataobject.boxinfo.BoxInfoDO;
import cn.code.nl.module.wms.dal.dataobject.boxtype.BoxTypeDO;
import cn.code.nl.module.wms.dal.dataobject.structAttr.EmptyBoxRowCandidate;
@@ -34,6 +36,8 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
private static final String OWNER_SERVICE = "WMS";
private static final String HANDLE_CODE = "EMPTYBOXTASK";
private static final String TRUSS_HANDLE_CODE = "EMPTYBOXTRUSSTASK";
private static final String TRUSS_INBOUND_POINT = "FHD01";
private static final String INBOUND_LOCK = "8";
private static final String OUTBOUND_LOCK = "9";
private static final String OUTBOUND_POINT_1 = "ZXQ_01";
@@ -75,6 +79,42 @@ public class EmptyBoxServiceImpl implements EmptyBoxService {
return new EmptyBoxInboundCreateResp(taskId, boxNo, struct.getStructCode());
}
/**
* 创建并下发空木箱桁架入库任务。
*/
@Override
@Transactional(rollbackFor = Exception.class)
public EmptyBoxTrussInboundCreateResp createTrussInbound(EmptyBoxTrussInboundCreateReq req) {
TransportTaskCreateReqDTO task = buildTrussInboundTask(req);
Long taskId = transportTaskApi.createTransportTask(task).getCheckedData();
transportTaskApi.issueTransportTaskRollBack(taskId).getCheckedData();
return new EmptyBoxTrussInboundCreateResp(
taskId, req.getPointCode(), TRUSS_INBOUND_POINT, req.getLayerCount());
}
/**
* 组装空木箱桁架入库搬运任务。
*/
TransportTaskCreateReqDTO buildTrussInboundTask(EmptyBoxTrussInboundCreateReq req) {
TransportTaskCreateReqDTO task = new TransportTaskCreateReqDTO();
task.setTaskName("空木箱桁架入库任务");
task.setOwnerService(OWNER_SERVICE);
task.setBizType("EMPTY_BOX_TRUSS_IN");
task.setHandleCode(TRUSS_HANDLE_CODE);
task.setTaskType("010501");
task.setAcsTaskType("7");
task.setAgvSystemType("1");
task.setPointCode1(req.getPointCode());
task.setPointCode2(TRUSS_INBOUND_POINT);
task.setMaterialCode(req.getMaterialCode());
task.setVehicleQty(1L);
task.setIsAutoIssue("0");
task.setProductArea("LK");
task.setIsCreateFinish(true);
task.setRequestParam("{\"layerCount\":" + req.getLayerCount() + "}");
return task;
}
/**
* 创建空木箱出库任务。
*/

View File

@@ -0,0 +1,26 @@
package cn.code.nl.module.wms.task;
import cn.code.nl.framework.execute.core.AbstractTask;
import cn.code.nl.framework.execute.core.dto.TaskExecuteDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* 空木箱桁架前置搬运任务状态处理器。
*/
@Slf4j
@Component("EMPTYBOXTRUSSTASK")
public class EmptyBoxTrussTask extends AbstractTask {
/** 记录桁架前置搬运完成事件,不变更立库库存。 */
@Override
public void doHandleFinish(TaskExecuteDTO dto) {
log.info("空木箱桁架前置搬运任务已完成taskId={}", dto.getTaskId());
}
/** 记录桁架前置搬运取消事件,不变更立库库存。 */
@Override
public void doHandleCancel(TaskExecuteDTO dto) {
log.info("空木箱桁架前置搬运任务已取消taskId={}", dto.getTaskId());
}
}

View File

@@ -0,0 +1,26 @@
package cn.code.nl.module.wms.service.emptybox;
import cn.code.nl.module.task.dto.TransportTaskCreateReqDTO;
import cn.code.nl.module.wms.api.emptybox.dto.EmptyBoxTrussInboundCreateReq;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class EmptyBoxServiceImplTest {
@Test
void shouldBuildEmptyBoxTrussInboundTask() {
EmptyBoxTrussInboundCreateReq req = new EmptyBoxTrussInboundCreateReq();
req.setPointCode("HJ-A03-07");
req.setMaterialCode("EMPTY_BOX_A");
req.setLayerCount(3);
EmptyBoxServiceImpl emptyBoxService = new EmptyBoxServiceImpl();
TransportTaskCreateReqDTO task = emptyBoxService.buildTrussInboundTask(req);
assertEquals("HJ-A03-07", task.getPointCode1());
assertEquals("FHD01", task.getPointCode2());
assertEquals("EMPTY_BOX_A", task.getMaterialCode());
assertEquals(1L, task.getVehicleQty());
assertEquals("{\"layerCount\":3}", task.getRequestParam());
}
}