From 06a17c236d4cb9b8da75fce43af938cb7ea510bf Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期一, 15 十二月 2025 09:50:12 +0800
Subject: [PATCH] feat: 优化企业微信判断,优化gps分断处理

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java |  139 ++++++++++++++++++++++++++++++++-------------
 1 files changed, 98 insertions(+), 41 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java
index b9f4b69..56fc2c2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java
@@ -3,8 +3,10 @@
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.system.domain.VehicleInfo;
+import com.ruoyi.system.domain.VehicleDept;
 import com.ruoyi.system.domain.VehicleSyncDTO;
 import com.ruoyi.system.mapper.SysDeptMapper;
+import com.ruoyi.system.mapper.VehicleInfoMapper;
 import com.ruoyi.system.service.IVehicleInfoService;
 import com.ruoyi.system.service.IVehicleSyncDataService;
 import com.ruoyi.system.service.IVehicleSyncService;
@@ -15,6 +17,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -39,6 +42,9 @@
 
     @Autowired
     private SysDeptMapper sysDeptMapper;
+    
+    @Autowired
+    private VehicleInfoMapper vehicleInfoMapper;
 
 
     /**
@@ -82,18 +88,28 @@
                     // 鏌ヨ杞﹁締鏄惁瀛樺湪
                     VehicleInfo existingVehicle = findVehicleByPlateNumber(plateNumber);
 
-                    // 瑙f瀽閮ㄩ棬淇℃伅
-                    Long deptId = parseDeptIdFromCarOrdClass(vehicleDTO.getCarOrdClass());
+                    // 瑙f瀽鎵�鏈夊垎鍏徃ID锛圕arOrdClass鍙兘鍖呭惈澶氫釜缂栫爜锛屽锛欻B,TI锛�
+                    List<VehicleDept> vehicleDepts = parseVehicleDepts(vehicleDTO.getCarOrdClass());
+                    
+                    // 璁剧疆榛樿鐨勪富閮ㄩ棬ID锛堢涓�涓垎鍏徃锛�
+                    Long primaryDeptId = null;
+                    if (!vehicleDepts.isEmpty()) {
+                        primaryDeptId = vehicleDepts.get(0).getDeptId();
+                    }
 
                     if (existingVehicle != null)
                     {
                         // 鏇存柊杞﹁締淇℃伅
                         existingVehicle.setCarId(vehicleDTO.getCarId());
-                        existingVehicle.setDeptId(deptId);
-                        // 鍙互閫夋嫨鏄惁鏇存柊鍏朵粬瀛楁
+                        existingVehicle.setDeptId(primaryDeptId); // 璁剧疆涓婚儴闂�
                         vehicleInfoService.updateVehicleInfo(existingVehicle);
+                        
+                        // 鏇存柊杞﹁締-鍒嗗叕鍙稿叧鑱�
+                        syncVehicleDepts(existingVehicle.getVehicleId(), vehicleDepts);
+                        
                         updateCount++;
-                        log.debug("鏇存柊杞﹁締: {} (CarID={}), 閮ㄩ棬ID={}", plateNumber, vehicleDTO.getCarId(), deptId);
+                        log.debug("鏇存柊杞﹁締: {} (CarID={}), 鍏宠仈鍒嗗叕鍙告暟: {}", 
+                                plateNumber, vehicleDTO.getCarId(), vehicleDepts.size());
                     }
                     else
                     {
@@ -101,13 +117,18 @@
                         VehicleInfo newVehicle = new VehicleInfo();
                         newVehicle.setVehicleNo(plateNumber);
                         newVehicle.setCarId(vehicleDTO.getCarId());
-                        newVehicle.setDeptId(deptId);
+                        newVehicle.setDeptId(primaryDeptId); // 璁剧疆涓婚儴闂�
                         newVehicle.setStatus("0");
                         newVehicle.setPlatformCode("LEGACY"); // 鏍囪涓烘棫绯荤粺鍚屾
                         newVehicle.setRemark("浠庢棫绯荤粺鍚屾锛孋arID: " + vehicleDTO.getCarId());
                         vehicleInfoService.insertVehicleInfo(newVehicle);
+                        
+                        // 鏂板杞﹁締-鍒嗗叕鍙稿叧鑱�
+                        syncVehicleDepts(newVehicle.getVehicleId(), vehicleDepts);
+                        
                         insertCount++;
-                        log.debug("鏂板杞﹁締: {} (CarID={}), 閮ㄩ棬ID={}", plateNumber, vehicleDTO.getCarId(), deptId);
+                        log.debug("鏂板杞﹁締: {} (CarID={}), 鍏宠仈鍒嗗叕鍙告暟: {}", 
+                                plateNumber, vehicleDTO.getCarId(), vehicleDepts.size());
                     }
                 }
                 catch (Exception e)
@@ -231,22 +252,23 @@
     }
 
     /**
-     * 浠� CarOrdClass 瑙f瀽閮ㄩ棬ID锛屽苟杞崲涓哄垎鍏徃ID
-     * CarOrdClass鏍煎紡鍙兘鏄細ZB銆丠B.TI绛�
-     * 闇�瑕佹媶鍒嗗苟鍦╯ys_dept涓尮閰峝ispatch_order_class瀛楁
+     * 浠� CarOrdClass 瑙f瀽澶氫釜鍒嗗叕鍙稿叧鑱�
+     * CarOrdClass鏍煎紡鍙兘鏄細HB銆丠B,TI銆丠B.TI绛�
      * 
      * @param carOrdClass 杞﹁締鍗曟嵁绫诲瀷缂栫爜
-     * @return 鍒嗗叕鍙窱D锛屽鏋滄湭鎵惧埌杩斿洖null
+     * @return 杞﹁締-鍒嗗叕鍙稿叧鑱斿垪琛�
      */
-    private Long parseDeptIdFromCarOrdClass(String carOrdClass)
+    private List<VehicleDept> parseVehicleDepts(String carOrdClass)
     {
+        List<VehicleDept> vehicleDepts = new ArrayList<>();
+        
         if (StringUtils.isBlank(carOrdClass))
         {
-            log.debug("CarOrdClass涓虹┖锛屾棤娉曡В鏋愰儴闂�");
-            return null;
+            log.debug("CarOrdClass涓虹┖锛屾棤娉曡В鏋愬垎鍏徃");
+            return vehicleDepts;
         }
 
-        // 鎷嗗垎CarOrdClass锛屽彲鑳界殑鍒嗛殧绗︼細. , 绌烘牸
+        // 鎷嗗垎CarOrdClass锛屽彲鑳界殑鍒嗛殧绗︼細, . 绌烘牸
         String[] codes = carOrdClass.split("[.,\\s]+");
         
         for (String code : codes)
@@ -258,60 +280,95 @@
             
             code = code.trim();
             
-            // 鏌ヨ鍖归厤dispatch_order_class鐨勯儴闂�
-            SysDept dept = findDeptByDispatchOrderClass(code);
-            if (dept != null)
+            // 鏌ヨ鍖归厤dispatch_order_class鎴杝ervice_order_class鐨勯儴闂�
+            SysDept dept = findDeptByOrderClass(code);
+            if (dept != null && dept.getParentId() != null && dept.getParentId() == 100L)
             {
-                log.debug("閫氳繃dispatch_order_class='{}' 鎵惧埌閮ㄩ棬: {} (ID={})", 
-                        code, dept.getDeptName(), dept.getDeptId());
+                // 鍙鐞嗗垎鍏徃锛坧arent_id=100锛�
+                VehicleDept vehicleDept = new VehicleDept();
+                vehicleDept.setDeptId(dept.getDeptId());
+                vehicleDept.setOrderClass(code);
+                vehicleDept.setCreateBy("system");
+                vehicleDepts.add(vehicleDept);
                 
-                // 灏嗛儴闂↖D杞崲涓哄垎鍏徃ID
-                Long branchCompanyId = sysDeptMapper.selectBranchCompanyIdByDeptId(dept.getDeptId());
-                if (branchCompanyId != null)
-                {
-                    log.debug("灏嗛儴闂↖D {} 杞崲涓哄垎鍏徃ID: {}", dept.getDeptId(), branchCompanyId);
-                    return branchCompanyId;
-                }
-                else
-                {
-                    log.warn("閮ㄩ棬ID {} 鏃犳硶杞崲涓哄垎鍏徃ID锛屽彲鑳芥槸鎬诲叕鍙告垨鏁版嵁寮傚父", dept.getDeptId());
-                    return null;
-                }
+                log.debug("閫氳繃order_class='{}' 鎵惧埌鍒嗗叕鍙�: {} (ID={})", 
+                        code, dept.getDeptName(), dept.getDeptId());
+            }
+            else
+            {
+                log.debug("鏈壘鍒板尮閰峯rder_class='{}' 鐨勫垎鍏徃", code);
             }
         }
         
-        log.warn("鏈壘鍒板尮閰岰arOrdClass='{}' 鐨勯儴闂�", carOrdClass);
-        return null;
+        return vehicleDepts;
+    }
+    
+    /**
+     * 鍚屾杞﹁締-鍒嗗叕鍙稿叧鑱�
+     * 
+     * @param vehicleId 杞﹁締ID
+     * @param vehicleDepts 鍒嗗叕鍙稿叧鑱斿垪琛�
+     */
+    private void syncVehicleDepts(Long vehicleId, List<VehicleDept> vehicleDepts)
+    {
+        if (vehicleId == null || vehicleDepts == null)
+        {
+            return;
+        }
+        
+        // 鍏堝垹闄ゆ棫鐨勫叧鑱�
+        vehicleInfoMapper.deleteVehicleDeptByVehicleId(vehicleId);
+        
+        // 鍐嶆彃鍏ユ柊鐨勫叧鑱�
+        if (!vehicleDepts.isEmpty())
+        {
+            for (VehicleDept vd : vehicleDepts)
+            {
+                vd.setVehicleId(vehicleId);
+            }
+            vehicleInfoMapper.batchInsertVehicleDept(vehicleDepts);
+            log.debug("鍚屾杞﹁締ID={} 鐨勫垎鍏徃鍏宠仈锛屾暟閲�: {}", vehicleId, vehicleDepts.size());
+        }
     }
 
     /**
-     * 鏍规嵁dispatch_order_class鏌ヨ閮ㄩ棬
+     * 鏍规嵁order_class鏌ヨ閮ㄩ棬锛堝悓鏃跺尮閰峝ispatch_order_class鍜宻ervice_order_class锛�
      * 
-     * @param dispatchOrderClass 璋冨害鍗曠紪鐮�
+     * @param orderClass 缂栫爜
      * @return 閮ㄩ棬淇℃伅
      */
-    private SysDept findDeptByDispatchOrderClass(String dispatchOrderClass)
+    private SysDept findDeptByOrderClass(String orderClass)
     {
-        if (StringUtils.isBlank(dispatchOrderClass))
+        if (StringUtils.isBlank(orderClass))
         {
             return null;
         }
 
         try
         {
+            // 鍏堝皾璇曞尮閰峝ispatch_order_class
             SysDept query = new SysDept();
-            query.setDispatchOrderClass(dispatchOrderClass);
+            query.setDispatchOrderClass(orderClass);
             List<SysDept> depts = sysDeptMapper.selectDeptList(query);
             
             if (depts != null && !depts.isEmpty())
             {
-                // 杩斿洖绗竴涓尮閰嶇殑閮ㄩ棬
+                return depts.get(0);
+            }
+            
+            // 濡傛灉娌℃湁鎵惧埌锛屽皾璇曞尮閰峴ervice_order_class
+            query = new SysDept();
+            query.setServiceOrderClass(orderClass);
+            depts = sysDeptMapper.selectDeptList(query);
+            
+            if (depts != null && !depts.isEmpty())
+            {
                 return depts.get(0);
             }
         }
         catch (Exception e)
         {
-            log.error("鏌ヨdispatch_order_class='{}' 鐨勯儴闂ㄥけ璐�", dispatchOrderClass, e);
+            log.error("鏌ヨorder_class='{}' 鐨勯儴闂ㄥけ璐�", orderClass, e);
         }
         
         return null;

--
Gitblit v1.9.1