啊鑫
5 天以前 b54eecf57118f38f0e3ddcdce8c2b9412a47bf7e
src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java
@@ -100,6 +100,27 @@
    }
    @Override
    public Object[] callPdaReceiptBtn1(String deliveryNo, String userid) {
        // 创建用于接收输出参数的变量
        Integer res = null;
        String msg = null;
        try {
            // 调用存储过程
            baseMapper.callPdaReceiptBtn1(deliveryNo, userid, res, msg);
            log.info("调用存储过程PRC_RF_PDA_RECEIPT_BTN_test001成功: 送货单号={}, 用户ID={}, 结果码={}, 消息={}",
                    deliveryNo, userid, res, msg);
            return new Object[]{res, msg};
        } catch (Exception e) {
            log.error("调用存储过程PRC_RF_PDA_RECEIPT_BTN_test001失败: 送货单号={}, 用户ID={}, 异常={}",
                    deliveryNo, userid, e.getMessage(), e);
            throw e;
        }
    }
    @Override
    public Integer processMesInvItemArnStatus(String factory, String company, String userCode, Long id) {
        Integer poResult = 1;
        String poText = "";
@@ -154,6 +175,98 @@
        log.info("【processAsyncBatch】异步处理{}条数据完成", batchItems.size());
    }
    @Override
    public boolean setDeliveryNotice() {
        LambdaQueryWrapper<DeliveryNoticeDetail> nullPoErpNoWrapper = new LambdaQueryWrapper<>();
        nullPoErpNoWrapper.isNull(DeliveryNoticeDetail::getPoErpNo);
        nullPoErpNoWrapper.orderByAsc(DeliveryNoticeDetail::getPid, DeliveryNoticeDetail::getLineNo);
        List<DeliveryNoticeDetail> nullPoErpNoList = detailService.list(nullPoErpNoWrapper);
        if (CollUtil.isEmpty(nullPoErpNoList)) {
            log.info("没有找到需要更新的PO_ERP_NO为null的记录");
            return true;
        }
        log.info("找到{}条PO_ERP_NO为null的记录需要更新", nullPoErpNoList.size());
        int updatedCount = 0;
        for (DeliveryNoticeDetail nullRecord : nullPoErpNoList) {
            Integer currentLineNo;
            try {
                currentLineNo = Integer.parseInt(nullRecord.getLineNo());
                // 如果LINE_NO为1,跳过这条记录,继续处理下一条
                if (currentLineNo == 1) {
                    log.info("跳过LINE_NO为1的记录: ID={}, 继续处理其他记录", nullRecord.getId());
                    continue;
                }
            } catch (NumberFormatException e) {
                log.warn("无法解析LINE_NO为数字: {}, 跳过这条记录", nullRecord.getLineNo());
                continue;
            }
            // 获取同一PID下所有记录
            LambdaQueryWrapper<DeliveryNoticeDetail> sameParentWrapper = new LambdaQueryWrapper<>();
            sameParentWrapper.eq(DeliveryNoticeDetail::getPid, nullRecord.getPid());
            List<DeliveryNoticeDetail> allRecords = detailService.list(sameParentWrapper);
            // 按LINE_NO顺序依次向前查找第一个PO_ERP_NO不为null的记录
            DeliveryNoticeDetail nearestRecord = null;
            // 从当前LINE_NO-1开始向前查找
            for (int searchLineNo = currentLineNo - 1; searchLineNo >= 1; searchLineNo--) {
                for (DeliveryNoticeDetail candidate : allRecords) {
                    try {
                        Integer candidateLineNo = Integer.parseInt(candidate.getLineNo());
                        if (candidateLineNo.equals(searchLineNo) && StrUtil.isNotEmpty(candidate.getPoErpNo())) {
                            nearestRecord = candidate;
                            break;
                        }
                    } catch (NumberFormatException e) {
                        log.warn("无法解析候选记录LINE_NO为数字: {}", candidate.getLineNo());
                    }
                }
                // 如果找到了就跳出外层循环
                if (nearestRecord != null) {
                    break;
                }
            }
            if (nearestRecord != null && StrUtil.isNotEmpty(nearestRecord.getPoErpNo())) {
                LambdaUpdateWrapper<DeliveryNoticeDetail> updateWrapper = new LambdaUpdateWrapper<>();
                updateWrapper.eq(DeliveryNoticeDetail::getId, nullRecord.getId())
                        .set(DeliveryNoticeDetail::getPoErpNo, nearestRecord.getPoErpNo())
                        .set(DeliveryNoticeDetail::getPurchaseType, nearestRecord.getPurchaseType())
                        .set(DeliveryNoticeDetail::getPoLineNo, nearestRecord.getPoLineNo());
                boolean updated = detailService.update(updateWrapper);
                if (updated) {
                    updatedCount++;
                    log.info("更新记录ID: {}, LINE_NO: {}, 设置PO_ERP_NO为: {} (来源LINE_NO: {})",
                            nullRecord.getId(), nullRecord.getLineNo(), nearestRecord.getPoErpNo(), nearestRecord.getLineNo());
//                    LambdaQueryWrapper<DeliveryNotice> queryWrapper = new LambdaQueryWrapper<>();
//                    queryWrapper.eq(DeliveryNotice::getId, nullRecord.getPid());
//                    DeliveryNotice one = getOne(queryWrapper, false);
//
//                    callPdaReceiptBtn1(one.getDeliveryNo(), "PL017");
                } else {
                    log.error("更新记录ID: {} 失败", nullRecord.getId());
                }
            } else {
                log.error("记录ID: {}, LINE_NO: {} 找不到可用的PO_ERP_NO值,需要人工处理",
                        nullRecord.getId(), nullRecord.getLineNo());
            }
        }
        log.info("共更新了{}条记录", updatedCount);
        return updatedCount > 0;
    }
    /**
     * 批量处理MesInvItemArn数据
     *