From 61c4c3f45e4257e2e7662f033e2719e62366c632 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期二, 31 三月 2026 23:02:22 +0800
Subject: [PATCH] feat: 优化申请发票,还可以修改发票信息

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java |  184 +++++++++++++++++++++++++++------------------
 1 files changed, 110 insertions(+), 74 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
index 55d2337..78d9033 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -2,10 +2,7 @@
 
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.LongUtil;
-import com.ruoyi.common.utils.MapValueUtils;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.*;
 import com.ruoyi.system.domain.SysTaskEmergency;
 import com.ruoyi.system.domain.VehicleInfo;
 import com.ruoyi.system.domain.enums.TaskStatus;
@@ -79,7 +76,7 @@
      */
     @Override
     public int syncLegacyTransferOrders(int daysAgo) {
-        log.info("寮�濮嬪悓姝}澶╁墠鐨勬棫绯荤粺杞繍鍗曟暟鎹�", daysAgo);
+//        log.info("寮�濮嬪悓姝}澶╁墠鐨勬棫绯荤粺杞繍鍗曟暟鎹�", daysAgo);
         
         try {
             // 鍙傛暟楠岃瘉
@@ -91,64 +88,81 @@
             // 璁$畻鏃ユ湡鑼冨洿
             Date startDate = DateUtils.addDays(new Date(), -daysAgo);
             String startDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", startDate);
+            String endDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", new Date());
             
-            // 浠嶴QL Server鏌ヨ杞繍鍗曟暟鎹�
-            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr);
-            
-            if (transferOrders == null || transferOrders.isEmpty()) {
-                log.info("鏈煡璇㈠埌{}澶╁墠鐨勮浆杩愬崟鏁版嵁", daysAgo);
-                return 0;
-            }
-            
-            log.info("鏌ヨ鍒皗}鏉¤浆杩愬崟鏁版嵁锛屽紑濮嬪悓姝�...", transferOrders.size());
-            
+            // Keyset娓告爣鍒嗛〉浠� SQL Server 鎷夊彇杞繍鍗曟暟鎹紝姣忛〉 10 鏉★紝璧颁富閿储寮曞交搴曡閬胯秴鏃�
+            final int PAGE_SIZE = 10;
+            long lastId = 0L;   // 娓告爣锛氳褰曚笂涓�椤垫渶鍚庝竴鏉$殑 ServiceOrdID锛岄娆′紶 0
             int successCount = 0;
-            int totalCount = transferOrders.size();
-            int processedCount = 0;
-            
-            for (Map<String, Object> order : transferOrders) {
-                processedCount++;
-                try {
-                    Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
-                    Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
-                    
-                    // 妫�鏌ュ弬鏁版湁鏁堟��
-                    if (serviceOrdID==null || serviceOrdID<=0) {
-                        log.warn("绗瑊}鏉℃暟鎹湇鍔″崟ID涓虹┖锛岃烦杩囧鐞�", processedCount);
-                        continue;
-                    }
-                    
-                    log.debug("姝e湪澶勭悊绗瑊}/{}鏉¤浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}", 
-                             processedCount, totalCount, serviceOrdID, dispatchOrdID);
-                    
-                    // 妫�鏌ユ槸鍚﹀凡鍚屾
-                    if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
-                        log.debug("杞繍鍗曞凡鍚屾锛岃烦杩�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
-                        //杩涜鏇存柊鎿嶄綔
-                        updateTransferOrder(serviceOrdID, dispatchOrdID, order);
-                        continue;
-                    }
-                    
-                    // 鍚屾鍗曚釜杞繍鍗�
-                    boolean success = syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order);
-                    if (success) {
-                        successCount++;
-                    }
-                    
-                    // 鎺у埗鍚屾棰戠巼锛岄伩鍏嶈姹傝繃蹇�
-                    Thread.sleep(100);
-                } catch (InterruptedException ie) {
-                    log.warn("鍚屾浠诲姟琚腑鏂�");
-                    Thread.currentThread().interrupt();
+
+            while (true) {
+                List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr, endDateStr, lastId, PAGE_SIZE);
+
+                if (transferOrders == null || transferOrders.isEmpty()) {
                     break;
-                } catch (Exception e) {
-                    log.error("鍚屾鍗曚釜杞繍鍗曞け璐�: ServiceOrdID={}, DispatchOrdID={}", 
-                             MapValueUtils.getStringValue(order, "ServiceOrdID"), 
-                             MapValueUtils.getStringValue(order, "DispatchOrdID"), e);
+                }
+
+                int totalCount = transferOrders.size();
+                int processedCount = 0;
+
+                for (Map<String, Object> order : transferOrders) {
+                    processedCount++;
+                    try {
+                        Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID");
+                        Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID");
+
+                        // 妫�鏌ュ弬鏁版湁鏁堟��
+                        if (serviceOrdID == null || serviceOrdID <= 0) {
+                            log.warn("绗瑊}鏉℃暟鎹湇鍔″崟ID涓虹┖锛岃烦杩囧鐞�", processedCount);
+                            continue;
+                        }
+
+//                        log.debug("姝e湪澶勭悊绗瑊}/{}鏉¤浆杩愬崟: ServiceOrdID={}, DispatchOrdID={}",
+//                                 processedCount, totalCount, serviceOrdID, dispatchOrdID);
+
+                        // 妫�鏌ユ槸鍚﹀凡鍚屾
+                        if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) {
+//                            log.debug("杞繍鍗曞凡鍚屾锛岃烦杩�: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID);
+                            //杩涜鏇存柊鎿嶄綔
+                            updateTransferOrder(serviceOrdID, dispatchOrdID, order);
+                            continue;
+                        }
+
+                        // 鍚屾鍗曚釜杞繍鍗�
+                        boolean success = syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order);
+                        if (success) {
+                            successCount++;
+                        }
+
+                        // 鎺у埗鍚屾棰戠巼锛岄伩鍏嶈姹傝繃蹇�
+                        Thread.sleep(100);
+                    } catch (InterruptedException ie) {
+                        log.warn("鍚屾浠诲姟琚腑鏂�");
+                        Thread.currentThread().interrupt();
+                        break;
+                    } catch (Exception e) {
+                        log.error("鍚屾鍗曚釜杞繍鍗曞け璐�: ServiceOrdID={}, DispatchOrdID={}",
+                                MapValueUtils.getStringValue(order, "ServiceOrdID"),
+                                MapValueUtils.getStringValue(order, "DispatchOrdID"), e);
+                    }
+                }
+
+                // 鏇存柊娓告爣涓烘湰椤垫渶鍚庝竴鏉$殑 ServiceOrdID
+                Map<String, Object> lastOrder = transferOrders.get(transferOrders.size() - 1);
+                Long lastServiceOrdID = MapValueUtils.getLongValue(lastOrder, "ServiceOrdID");
+                if (lastServiceOrdID != null && lastServiceOrdID > 0) {
+                    lastId = lastServiceOrdID;
+                } else {
+                    break;
+                }
+
+                // 鏈〉鏈弧涓�椤碉紝璇存槑宸叉棤鏇村鏁版嵁
+                if (totalCount < PAGE_SIZE) {
+                    break;
                 }
             }
-            
-            log.info("鍚屾瀹屾垚锛屽叡澶勭悊{}鏉¤浆杩愬崟锛屾垚鍔熷悓姝}鏉¤浆杩愬崟鏁版嵁", totalCount, successCount);
+
+//            log.info("鍚屾瀹屾垚锛屾垚鍔熷悓姝}鏉¤浆杩愬崟鏁版嵁", successCount);
             return successCount;
             
         } catch (Exception e) {
@@ -348,13 +362,13 @@
             createTaskVo.setDeptId(deptId);
 
 
-            int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
+            Long taskId = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time);
 
-            if (result > 0) {
-//                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, result);
+            if (taskId != null && taskId > 0) {
+//                log.info("杞繍鍗曞悓姝ユ垚鍔�: ServiceOrdID={}, DispatchOrdID={}, 鍒涘缓鐨勪换鍔D={}", serviceOrdID, dispatchOrdID, taskId);
 
                 try {
-                    notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
+                    notifyTransferOrderByWechat(taskId, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order);
                 } catch (Exception e) {
                     log.error("杞繍鍗曞悓姝ユ垚鍔熷悗鍙戦�佸井淇¢�氱煡澶辫触: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e);
                 }
@@ -461,9 +475,9 @@
             createTaskVo.setTaskType("EMERGENCY_TRANSFER"); // 鎬ユ晳杞繍浠诲姟
             
             // 璁剧疆鍗曟嵁绫诲瀷鍜屼换鍔$被鍨婭D锛堜粠鏃х郴缁熷瓧娈垫槧灏勶級
-
-            if (StringUtils.isNotEmpty(serviceOrdClass)) {
-                createTaskVo.setDocumentTypeId(serviceOrdClass);
+            String ServiceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType");
+            if (StringUtils.isNotEmpty(ServiceOrdAreaType)) {
+                createTaskVo.setDocumentTypeId(ServiceOrdAreaType);
             }
             
             String serviceOrdType = MapValueUtils.getStringValue(order, "ServiceOrdType");
@@ -471,8 +485,21 @@
                 createTaskVo.setTaskTypeId(serviceOrdType);
             }
             
-            // 璁剧疆鍖哄煙绫诲瀷
-            String serviceOrdAreaType = MapValueUtils.getStringValue(order, "ServiceOrdAreaType");
+
+
+           String serviceOrdVIP = MapValueUtils.getStringValue(order, "ServiceOrdVIP");
+           if(serviceOrdVIP!=null){
+               createTaskVo.setServiceOrdVIP(serviceOrdVIP);
+           }else{
+               createTaskVo.setServiceOrdVIP("0");
+           }
+
+           Integer FromHQ_is = MapValueUtils.getIntegerValue(order, "FromHQ_is");
+           if(IntegerUtil.isNotEmpty(FromHQ_is)){
+               createTaskVo.setFromHQ2_is("1");
+           }else{
+               createTaskVo.setFromHQ2_is("0");
+           }
 
             // 璁剧疆鐢ㄦ埛ID
             Long serviceOrdUserID = MapValueUtils.getLongValue(order, "ServiceOrdUserID");
@@ -494,11 +521,20 @@
                 }
             }
             createTaskVo.setPatient(patientInfo);
-            //1000鍏噷锛屾彁鍙栨暟瀛�
+            //1000鍏噷锛屾彁鍙栨暟瀛楋紙鏀寔灏忔暟锛�
             String ServiceOrdTraDistance=MapValueUtils.getStringValue(order, "ServiceOrdTraDistance");
             if(ServiceOrdTraDistance!=null){
-                ServiceOrdTraDistance=ServiceOrdTraDistance.replaceAll("[^0-9]", "");
-                createTaskVo.setDistance(new BigDecimal(ServiceOrdTraDistance));
+                // 淇濈暀鏁板瓧鍜屽皬鏁扮偣锛岀Щ闄ゅ叾浠栧瓧绗�
+                ServiceOrdTraDistance=ServiceOrdTraDistance.replaceAll("[^0-9.]", "");
+                // 澶勭悊澶氫釜灏忔暟鐐圭殑鎯呭喌锛屽彧淇濈暀绗竴涓�
+                int firstDotIndex = ServiceOrdTraDistance.indexOf('.');
+                if (firstDotIndex != -1) {
+                    ServiceOrdTraDistance = ServiceOrdTraDistance.substring(0, firstDotIndex + 1) 
+                        + ServiceOrdTraDistance.substring(firstDotIndex + 1).replace(".", "");
+                }
+                if (!ServiceOrdTraDistance.isEmpty() && !ServiceOrdTraDistance.equals(".")) {
+                    createTaskVo.setTransferDistance(new BigDecimal(ServiceOrdTraDistance));
+                }
             }
 
             
@@ -588,7 +624,7 @@
                 String carLicense = legacyTransferSyncMapper.selectCarLicenseByCarID(carID);
                 if (StringUtils.isNotEmpty(carLicense)) {
                     // 鏍规嵁杞︾墝鍙锋煡璇㈡柊绯荤粺涓殑杞﹁締ID
-                    log.info("杞繍浠诲姟,ServiceOrdID:{},杞﹁締杞︾墝:{}",serviceOrdID,carLicense);
+//                    log.info("杞繍浠诲姟,ServiceOrdID:{},杞﹁締杞︾墝:{}",serviceOrdID,carLicense);
 //                    log.debug("杞﹁締杞︾墝鍙�: {}", carLicense);
                     
                     // 棣栧厛灏濊瘯閫氳繃VehicleInfoMapper鏌ヨ杞﹁締淇℃伅
@@ -609,7 +645,7 @@
                                 List<Long> vehicleIds = new ArrayList<>();
                                 vehicleIds.add(vehicleInfo.getVehicleId());
                                 createTaskVo.setVehicleIds(vehicleIds);
-                                log.debug("杞繍浠诲姟,ServiceOrdID:{} 閫氳繃杞︾墝鍙锋壘鍒拌溅杈嗕俊鎭�: vehicle_id={}, vehicle_no={}",serviceOrdID, vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
+//                                log.debug("杞繍浠诲姟,ServiceOrdID:{} 閫氳繃杞︾墝鍙锋壘鍒拌溅杈嗕俊鎭�: vehicle_id={}, vehicle_no={}",serviceOrdID, vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
                             } else {
                                 log.warn("杞繍浠诲姟,ServiceOrdID:{} 鏈壘鍒板搴旂殑杞﹁締淇℃伅: car_id={}, vehicle_no={}",serviceOrdID, carID, carLicense);
                             }
@@ -622,7 +658,7 @@
                             List<Long> vehicleIds = new ArrayList<>();
                             vehicleIds.add(vehicleInfo.getVehicleId());
                             createTaskVo.setVehicleIds(vehicleIds);
-                            log.debug("閫氳繃杞︾墝鍙锋壘鍒拌溅杈嗕俊鎭�: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
+//                            log.debug("閫氳繃杞︾墝鍙锋壘鍒拌溅杈嗕俊鎭�: vehicle_id={}, vehicle_no={}", vehicleInfo.getVehicleId(), vehicleInfo.getVehicleNo());
                         } else {
                             log.warn("鏈壘鍒板搴旂殑杞﹁締淇℃伅: vehicle_no={}", carLicense);
                         }
@@ -819,7 +855,7 @@
                 return String.join(",", diseaseIds);
             }
             
-            log.info("鏌ヨ鍒扮梾鎯呬俊鎭紝鏈嶅姟鍗旾D: {}, 鐥呮儏鏁伴噺: {}", serviceOrdID, diseaseIds != null ? diseaseIds.size() : 0);
+//            log.info("鏌ヨ鍒扮梾鎯呬俊鎭紝鏈嶅姟鍗旾D: {}, 鐥呮儏鏁伴噺: {}", serviceOrdID, diseaseIds != null ? diseaseIds.size() : 0);
             return null;
         } catch (Exception e) {
             log.error("鏌ヨ鐥呮儏淇℃伅寮傚父锛屾湇鍔″崟ID: {}", serviceOrdID, e);

--
Gitblit v1.9.1