From b54eecf57118f38f0e3ddcdce8c2b9412a47bf7e Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期五, 04 七月 2025 23:43:31 +0800
Subject: [PATCH] 添加赋值订单号为空的情况

---
 src/main/resources/mapper/DeliveryNoticeMapper.xml                   |    8 ++
 src/main/java/com/gs/xky/service/XkyService.java                     |    9 +++
 src/main/java/com/gs/xky/mapper/DeliveryNoticeMapper.java            |   13 ++++
 src/main/java/com/gs/xky/service/DeliveryNoticeService.java          |   11 +++
 src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java |  113 +++++++++++++++++++++++++++++++++++++
 src/test/java/com/gs/xky/XkyApplicationTests.java                    |    3 
 6 files changed, 156 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/gs/xky/mapper/DeliveryNoticeMapper.java b/src/main/java/com/gs/xky/mapper/DeliveryNoticeMapper.java
index 6d6a002..b2a251a 100644
--- a/src/main/java/com/gs/xky/mapper/DeliveryNoticeMapper.java
+++ b/src/main/java/com/gs/xky/mapper/DeliveryNoticeMapper.java
@@ -22,6 +22,19 @@
      */
     void callPdaReceiptBtn(@Param("C_IN_STR") String inStr, @Param("C_RESULT") String result);
 
+    /**
+     * 璋冪敤 Oracle 瀛樺偍杩囩▼ PRC_RF_PDA_RECEIPT_BTN_test001
+     *
+     * @param deliveryNo 閫佽揣鍗曞彿
+     * @param userid     鐢ㄦ埛ID
+     * @param res        杈撳嚭缁撴灉鐮�
+     * @param msg        杈撳嚭娑堟伅
+     */
+    void callPdaReceiptBtn1(@Param("C_DELIVERY_NO") String deliveryNo,
+                            @Param("C_userid") String userid,
+                            @Param("c_res") Integer res,
+                            @Param("c_msg") String msg);
+
     //PRC_MES_INV_ITEM_ARN_STATUS22
     void callPrcMesInvItemArnStatus22(@Param("PI_FACTORY") String factory,
                                       @Param("PI_COMPANY") String company,
diff --git a/src/main/java/com/gs/xky/service/DeliveryNoticeService.java b/src/main/java/com/gs/xky/service/DeliveryNoticeService.java
index 40a8ba3..266f87f 100644
--- a/src/main/java/com/gs/xky/service/DeliveryNoticeService.java
+++ b/src/main/java/com/gs/xky/service/DeliveryNoticeService.java
@@ -19,6 +19,15 @@
 
     void callPdaReceiptBtn(String inStr, String result);
 
+    /**
+     * 璋冪敤鏂扮殑瀛樺偍杩囩▼ PRC_RF_PDA_RECEIPT_BTN_test001
+     *
+     * @param deliveryNo 閫佽揣鍗曞彿
+     * @param userid     鐢ㄦ埛ID
+     * @return 杩斿洖鍖呭惈缁撴灉鐮佸拰娑堟伅鐨勬暟缁勶紝[0]涓虹粨鏋滅爜锛孾1]涓烘秷鎭�
+     */
+    Object[] callPdaReceiptBtn1(String deliveryNo, String userid);
+
     Integer processMesInvItemArnStatus(String factory, String company, String userCode, Long id);
 
     void processMesInvItemArnStatusAsync(List<MesInvItemArn> itemArnMinus);
@@ -29,4 +38,6 @@
      * @param batchItems 褰撳墠鎵规鐨勬暟鎹�
      */
     void processAsyncBatch(List<MesInvItemArn> batchItems);
+
+    boolean setDeliveryNotice();
 }
diff --git a/src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java b/src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java
index 3b53c96..6e76e81 100644
--- a/src/main/java/com/gs/xky/service/Impl/DeliveryNoticeServiceImpl.java
+++ b/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("銆恜rocessAsyncBatch銆戝紓姝ュ鐞唟}鏉℃暟鎹畬鎴�", 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涓簄ull鐨勮褰�");
+            return true;
+        }
+
+        log.info("鎵惧埌{}鏉O_ERP_NO涓簄ull鐨勮褰曢渶瑕佹洿鏂�", 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("鏃犳硶瑙f瀽LINE_NO涓烘暟瀛�: {}, 璺宠繃杩欐潯璁板綍", nullRecord.getLineNo());
+                continue;
+            }
+
+            // 鑾峰彇鍚屼竴PID涓嬫墍鏈夎褰�
+            LambdaQueryWrapper<DeliveryNoticeDetail> sameParentWrapper = new LambdaQueryWrapper<>();
+            sameParentWrapper.eq(DeliveryNoticeDetail::getPid, nullRecord.getPid());
+
+            List<DeliveryNoticeDetail> allRecords = detailService.list(sameParentWrapper);
+
+            // 鎸塋INE_NO椤哄簭渚濇鍚戝墠鏌ユ壘绗竴涓狿O_ERP_NO涓嶄负null鐨勮褰�
+            DeliveryNoticeDetail nearestRecord = null;
+
+            // 浠庡綋鍓峀INE_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("鏃犳硶瑙f瀽鍊欓�夎褰昄INE_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鏁版嵁
      *
diff --git a/src/main/java/com/gs/xky/service/XkyService.java b/src/main/java/com/gs/xky/service/XkyService.java
index cb43c6c..2550373 100644
--- a/src/main/java/com/gs/xky/service/XkyService.java
+++ b/src/main/java/com/gs/xky/service/XkyService.java
@@ -104,6 +104,15 @@
                     log.info("銆恜rocessBatchDeliveries銆戝鐞嗛�佽揣鍗�: {}, 鐗╂祦鐘舵��: {}", deliveryNo.getDeliveryNo(), deliveryNo.getLogisticsStatus());
                     XkyDetail detail = getDetail(deliveryNo.getDeliveryNo());
                     deliveryNoticeService.saveDeliveryNotice(detail);
+
+                    // 鏁版嵁鎻掑叆鍚庯紝澶勭悊PO_ERP_NO涓簄ull鐨勮褰�
+                    try {
+                        deliveryNoticeService.setDeliveryNotice();
+                        log.info("銆恜rocessBatchDeliveries銆慞O_ERP_NO null鍊煎鐞嗗畬鎴�: {}", deliveryNo.getDeliveryNo());
+                    } catch (Exception e) {
+                        log.error("銆恜rocessBatchDeliveries銆戝鐞哖O_ERP_NO null鍊煎紓甯�: {}, 寮傚父: {}", deliveryNo.getDeliveryNo(), e.getMessage(), e);
+                    }
+
                     List<BarcodeDeliveryNo> barcodeDeliveryNos = GetBarcodeInformation(deliveryNo.getDeliveryNo());
                     barcodeInformationService.SaveBarcodeInformation(barcodeDeliveryNos, deliveryNo.getDeliveryNo());
                     //宸查�佽揪鐨勬墠鑷姩杞崲涓篗ES鍒拌揣鍗�
diff --git a/src/main/resources/mapper/DeliveryNoticeMapper.xml b/src/main/resources/mapper/DeliveryNoticeMapper.xml
index 9628047..9bd054d 100644
--- a/src/main/resources/mapper/DeliveryNoticeMapper.xml
+++ b/src/main/resources/mapper/DeliveryNoticeMapper.xml
@@ -28,4 +28,12 @@
                 #{PO_TEXT, mode=OUT, jdbcType=VARCHAR}
               )}
     </select>
+    <select id="callPdaReceiptBtn1" statementType="CALLABLE">
+        {call PRC_RF_PDA_RECEIPT_BTN_test001(
+                #{C_DELIVERY_NO, mode=IN, jdbcType=VARCHAR},
+                #{C_userid, mode=IN, jdbcType=VARCHAR},
+                #{c_res, mode=OUT, jdbcType=NUMERIC},
+                #{c_msg, mode=OUT, jdbcType=VARCHAR}
+              )}
+    </select>
 </mapper>
diff --git a/src/test/java/com/gs/xky/XkyApplicationTests.java b/src/test/java/com/gs/xky/XkyApplicationTests.java
index 7c2e4e0..123a12a 100644
--- a/src/test/java/com/gs/xky/XkyApplicationTests.java
+++ b/src/test/java/com/gs/xky/XkyApplicationTests.java
@@ -60,7 +60,7 @@
     @Test
     void cs() throws IOException {
 
-        String str = "2225060624DY;";
+        String str = "22250702H88F;";
 
 
         String[] split = str.split(";");
@@ -166,5 +166,6 @@
 //        xkyEntity.setDeliveryNo("222505057541");
 //        xkyService.remove1(xkyEntity);
 
+        deliveryNoticeService.setDeliveryNotice();
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3