rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/CloudWmsNotifySchedule.java
@@ -32,7 +32,8 @@ @Scheduled(cron = "0/30 * * * * ?") public void syncCloudWmsNotify() { List<CloudWmsNotifyLog> pending = cloudWmsNotifyLogService.listPending(BATCH_LIMIT, 999); // List<CloudWmsNotifyLog> pending = cloudWmsNotifyLogService.listPending(BATCH_LIMIT, 999); List<CloudWmsNotifyLog> pending = cloudWmsNotifyLogService.listPending(BATCH_LIMIT, -1); if (pending.isEmpty()) { return; } @@ -44,7 +45,10 @@ if (maxRetry == null || intervalSeconds == null || intervalSeconds <= 0) { continue; } if (logRecord.getRetryCount() != null && logRecord.getRetryCount() >= maxRetry) { // if (logRecord.getRetryCount() != null && logRecord.getRetryCount() >= maxRetry) { if (!isInfiniteRetry(maxRetry) && logRecord.getRetryCount() != null && logRecord.getRetryCount() >= maxRetry) { continue; } if (logRecord.getLastNotifyTime() != null) { @@ -99,7 +103,7 @@ Object codeObj = res != null ? res.get("code") : null; boolean success = Integer.valueOf(200).equals(codeObj); int status = success ? cloudWmsNotifyLogService.getNotifyStatusSuccess() : cloudWmsNotifyLogService.getNotifyStatusPending(); if (!success && nextRetry >= effectiveMaxRetry) { if (!success && !isInfiniteRetry(effectiveMaxRetry) && nextRetry >= effectiveMaxRetry) { status = cloudWmsNotifyLogService.getNotifyStatusFail(); } logRecord.setLastRequestBody(requestBody); @@ -116,8 +120,16 @@ logRecord.setLastResponseBody(errorMsg); logRecord.setLastNotifyTime(now); logRecord.setRetryCount(nextRetry); logRecord.setNotifyStatus(nextRetry >= effectiveMaxRetry ? cloudWmsNotifyLogService.getNotifyStatusFail() : cloudWmsNotifyLogService.getNotifyStatusPending()); // logRecord.setNotifyStatus(nextRetry >= effectiveMaxRetry ? cloudWmsNotifyLogService.getNotifyStatusFail() : cloudWmsNotifyLogService.getNotifyStatusPending()); logRecord.setNotifyStatus(!isInfiniteRetry(effectiveMaxRetry) && nextRetry >= effectiveMaxRetry ? cloudWmsNotifyLogService.getNotifyStatusFail() : cloudWmsNotifyLogService.getNotifyStatusPending()); logRecord.setUpdateTime(now); cloudWmsNotifyLogService.updateById(logRecord); } /** maxRetry = -1 表示无限重发 */ private boolean isInfiniteRetry(Integer maxRetry) { return maxRetry != null && maxRetry == -1; } } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -253,8 +253,8 @@ if (Objects.isNull(matnr)) { throw new CoolException("数据错误:物料" + wkOrderItem.getMatnrCode() + "不存在!!"); } // 复制时排除 id、batch、splr_batch:明细批次来自通知单行,不与物料主数据 batch 混用 BeanUtils.copyProperties(matnr, wkOrderItem, "id", "batch", "splrBatch"); // 复制物料主数据到通知单明细,排除批次与条码字段 BeanUtils.copyProperties(matnr, wkOrderItem, "id", "batch", "splrBatch", "barcode"); wkOrderItem.setMatnrCode(matnr.getCode()) .setSplrBatch(StringUtils.isNotBlank(wkOrderItem.getBatch()) ? wkOrderItem.getBatch() : null) .setMatnrId(matnr.getId()) rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CloudWmsNotifyLogServiceImpl.java
@@ -23,10 +23,13 @@ @Override public List<CloudWmsNotifyLog> listPending(int limit, int maxRetry) { Page<CloudWmsNotifyLog> page = new Page<>(1, Math.max(1, limit)); // .lt(CloudWmsNotifyLog::getRetryCount, maxRetry) LambdaQueryWrapper<CloudWmsNotifyLog> wrapper = new LambdaQueryWrapper<CloudWmsNotifyLog>() .eq(CloudWmsNotifyLog::getNotifyStatus, getNotifyStatusPending()) .lt(CloudWmsNotifyLog::getRetryCount, maxRetry) .orderByAsc(CloudWmsNotifyLog::getId); if (maxRetry >= 0) { wrapper.lt(CloudWmsNotifyLog::getRetryCount, maxRetry); } return page(page, wrapper).getRecords(); } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -213,6 +213,7 @@ throw new CoolException("组托明细修执行数量修改失败!!"); } }); syncAsnOrderItemBarcodeByPakin(waitPakinItems, pakin.getBarcode(), loginUserId); }); if (!waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>() @@ -303,6 +304,7 @@ throw new CoolException("组托明细修执行数量修改失败!!"); } }); syncAsnOrderItemBarcodeByPakin(waitPakinItems, pakin.getBarcode(), loginUserId); }); if (!waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>() @@ -455,6 +457,7 @@ throw new CoolException("组托明细修执行数量修改失败!!"); } }); syncAsnOrderItemBarcodeByPakin(waitPakinItems, pakin.getBarcode(), loginUserId); }); if (!waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>() @@ -467,6 +470,27 @@ return R.ok("任务生成完毕!"); } /** 组托后将通知单明细条码回写为料箱码 */ private void syncAsnOrderItemBarcodeByPakin(List<WaitPakinItem> waitPakinItems, String pakinBarcode, Long loginUserId) { if (waitPakinItems == null || waitPakinItems.isEmpty() || StringUtils.isBlank(pakinBarcode)) { return; } Set<Long> asnItemIds = waitPakinItems.stream() .map(WaitPakinItem::getAsnItemId) .filter(Objects::nonNull) .collect(Collectors.toSet()); if (asnItemIds.isEmpty()) { return; } if (!asnOrderItemService.update(new LambdaUpdateWrapper<WkOrderItem>() .in(WkOrderItem::getId, asnItemIds) .set(WkOrderItem::getBarcode, pakinBarcode) .set(WkOrderItem::getUpdateBy, loginUserId) .set(WkOrderItem::getUpdateTime, new Date()))) { throw new CoolException("通知单明细条码回写失败!!"); } } /** * 入库任务 *