| | |
| | | // 验证设备站点 |
| | | DeviceSite deviceSite = validateDeviceSite(param); |
| | | |
| | | // 空板入库:与非空板同一入口,仅不校验组托,只做分配库位、建任务、更新库位 |
| | | if (param.getIoType() != null && param.getIoType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)) { |
| | | return createInTaskForEmptyPallet(param.getBarcode(), param.getSourceStaNo(), param.getLocType1()); |
| | | } |
| | | |
| | | // 提前定义 waitPakin / waitPakinItems,供后续其他入库逻辑使用 |
| | | WaitPakin waitPakin = null; |
| | | List<WaitPakinItem> waitPakinItems = Collections.emptyList(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 空板入库:RCS 申请时 full=true,无需组托,分配库位并创建 TASK_TYPE_EMPITY_IN 任务。 |
| | | * 需在设备站点中配置 type=10(空板入库)的站点路径。 |
| | | * 空板入库:与非空板同一流程(校验站点、分配库位、建任务、更新库位),仅不校验组托、不写任务明细、不更新组托状态。 |
| | | * 由 createInTask 在 ioType=空板时调用;需在设备站点中配置 type=10(空板入库)的站点路径。 |
| | | */ |
| | | private InTaskMsgDto createInTaskForEmptyPallet(String barcode, String staNo, Integer type) { |
| | | TaskInParam param = new TaskInParam(); |
| | |
| | | log.info("========== 开始申请入库任务,分配库位 =========="); |
| | | log.info("料箱码:{},入库站点:{},入库类型:{},空板:{}", barcode, staNo, type, full); |
| | | |
| | | // full=true 时走空板入库(无需组托);否则走普通入库(需组托或自动组托) |
| | | if (Boolean.TRUE.equals(full)) { |
| | | InTaskMsgDto msgDto = createInTaskForEmptyPallet(barcode, staNo, type); |
| | | JSONObject result = new JSONObject(); |
| | | result.put("locNo", msgDto.getLocNo()); |
| | | result.put("batchNo", msgDto.getWorkNo()); |
| | | result.put("taskNo", msgDto.getWorkNo()); |
| | | return R.ok(result); |
| | | } |
| | | |
| | | // 构建 TaskInParam 参数,与 /wcs/create/in/task 接口参数一致 |
| | | // 统一走 createInTask:空板(full=true)仅不校验组托,仍校验站点、分配库位、建任务;非空板需组托 |
| | | TaskInParam param = new TaskInParam(); |
| | | param.setBarcode(barcode); |
| | | param.setSourceStaNo(staNo); |
| | | param.setIoType(TaskType.TASK_TYPE_IN.type); // 入库类型 |
| | | param.setLocType1(type); // 库位类型(高低检测信号) |
| | | param.setUser(1L); // 默认用户ID,可以根据实际需求调整 |
| | | param.setLocType1(type != null ? type : 1); |
| | | param.setUser(1L); |
| | | param.setIoType(Boolean.TRUE.equals(full) ? TaskType.TASK_TYPE_EMPITY_IN.type : TaskType.TASK_TYPE_IN.type); |
| | | |
| | | // 调用 createInTask 方法,创建完整的入库任务 |
| | | // 该方法会执行以下流程: |
| | | // 1. 验证设备站点 |
| | | // 2. 验证组拖状态 |
| | | // 3. 检查是否有匹配的入库任务(拣料/盘点入库会匹配状态199并更新为2) |
| | | // 4. 生成任务编码(如果需要创建新任务) |
| | | // 5. 获取库位号 |
| | | // 6. 创建并保存任务(如果需要创建新任务) |
| | | // 7. 更新库位状态 |
| | | // 8. 获取并验证组拖明细 |
| | | // 9. 创建并保存任务明细 |
| | | // 10. 更新组托状态 |
| | | InTaskMsgDto msgDto = createInTask(param); |
| | | |
| | | // 查询任务当前状态 |