From 40a8157440e3b906da8f52e07d939d78c3f4c313 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 12 四月 2026 16:14:06 +0800
Subject: [PATCH] feat: 任务增加统计、同步增加通知

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java |  164 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 146 insertions(+), 18 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java
index fc61e22..6280257 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/VehicleSyncController.java
@@ -1,37 +1,165 @@
 package com.ruoyi.web.controller.system;
 
+import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.system.domain.VehicleInfo;
+import com.ruoyi.system.domain.VehicleSyncDTO;
+import com.ruoyi.system.domain.vo.VehicleSyncVO;
+import com.ruoyi.system.mapper.VehicleInfoMapper;
+import com.ruoyi.system.service.IVehicleInfoService;
 import com.ruoyi.system.service.IVehicleSyncDataService;
-import com.ruoyi.system.service.IVehicleSyncService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
- * 杞﹁締鍚屾Controller
- * 
+ * 杞﹁締鍚屾绠$悊Controller
+ *
  * @author ruoyi
- * @date 2025-10-20
  */
 @RestController
-@RequestMapping("/system/vehicle/sync")
-public class VehicleSyncController extends BaseController
-{
-    @Autowired
-    private IVehicleSyncService vehicleSyncService;
+@RequestMapping("/system/vehicleSync")
+public class VehicleSyncController extends BaseController {
+
+    private static final Logger log = LoggerFactory.getLogger(VehicleSyncController.class);
 
     @Autowired
     private IVehicleSyncDataService vehicleSyncDataService;
+
+    @Autowired
+    private VehicleInfoMapper vehicleInfoMapper;
+
+    @Autowired
+    private IVehicleInfoService vehicleInfoService;
+
     /**
-     * 鎵嬪姩鍚屾鏃х郴缁熻溅杈嗘暟鎹�
+     * 鏌ヨ杞﹁締鍚屾鍒楄〃锛堟樉绀烘棫绯荤粺杞﹁締鍙婂悓姝ョ姸鎬侊級
      */
-    @PreAuthorize("@ss.hasPermi('system:vehicle:sync')")
-    @PostMapping("/legacy")
-    public AjaxResult syncLegacyVehicles()
-    {
-        return vehicleSyncService.syncVehicles(this.vehicleSyncDataService.getVehiclesFromSqlServer());
+    @PreAuthorize("@ss.hasPermi('system:vehicleSync:list')")
+    @GetMapping("/list")
+    public TableDataInfo list() {
+        try {
+            // 1. 浠庢棫绯荤粺鑾峰彇杞﹁締鍒楄〃
+            List<VehicleSyncDTO> oldVehicles = vehicleSyncDataService.getVehiclesFromSqlServer();
+            
+            if (oldVehicles == null || oldVehicles.isEmpty()) {
+                return getDataTable(new ArrayList<>());
+            }
+
+            // 2. 杞崲涓篤O骞舵鏌ュ悓姝ョ姸鎬�
+            List<VehicleSyncVO> voList = new ArrayList<>();
+            for (VehicleSyncDTO dto : oldVehicles) {
+                VehicleSyncVO vo = convertToVO(dto);
+                
+                // 3. 妫�鏌ヨ杞﹁締鏄惁宸插悓姝ュ埌鏂扮郴缁�
+                VehicleInfo existVehicle = vehicleInfoMapper.selectVehicleInfoByCarId(dto.getCarId());
+                if (existVehicle != null) {
+                    vo.setSynced(true);
+                    vo.setVehicleId(existVehicle.getVehicleId());
+                    vo.setDeptId(existVehicle.getDeptId());
+                    if (existVehicle.getDeptName() != null) {
+                        vo.setDeptName(existVehicle.getDeptName());
+                    }
+                } else {
+                    vo.setSynced(false);
+                }
+                
+                voList.add(vo);
+            }
+
+            return getDataTable(voList);
+            
+        } catch (Exception e) {
+            log.error("鏌ヨ杞﹁締鍚屾鍒楄〃澶辫触", e);
+            return getDataTable(new ArrayList<>());
+        }
+    }
+
+    /**
+     * 鎵嬪姩鍚屾鍗曚釜杞﹁締鍒版柊绯荤粺
+     */
+    @PreAuthorize("@ss.hasPermi('system:vehicleSync:sync')")
+    @Log(title = "杞﹁締鍚屾", businessType = BusinessType.INSERT)
+    @PostMapping("/syncVehicle")
+    public AjaxResult syncVehicle(@RequestBody Map<String, Object> params) {
+        try {
+            Integer carId = (Integer) params.get("carId");
+            String vehicleNo = (String) params.get("vehicleNo");
+            Long deptId = params.get("deptId") != null ? Long.valueOf(params.get("deptId").toString()) : null;
+
+            if (carId == null || vehicleNo == null || deptId == null) {
+                return AjaxResult.error("鍙傛暟涓嶅畬鏁达細carId銆乿ehicleNo銆乨eptId 涓嶈兘涓虹┖");
+            }
+
+            // 1. 妫�鏌ユ槸鍚﹀凡瀛樺湪
+            VehicleInfo existVehicle = vehicleInfoMapper.selectVehicleInfoByCarId(carId);
+            if (existVehicle != null) {
+                return AjaxResult.error("璇ヨ溅杈嗗凡鍚屾锛岃溅杈咺D: " + existVehicle.getVehicleId());
+            }
+
+            // 2. 鍒涘缓鏂拌溅杈嗚褰�
+            VehicleInfo newVehicle = new VehicleInfo();
+            newVehicle.setCarId(carId);
+            newVehicle.setVehicleNo(vehicleNo);
+            newVehicle.setDeptId(deptId);
+            newVehicle.setStatus("0"); // 榛樿姝e父鐘舵��
+            newVehicle.setCreateBy(getUsername());
+
+            // 3. 鎻掑叆杞﹁締淇℃伅
+            int result = vehicleInfoMapper.insertVehicleInfo(newVehicle);
+            
+            if (result > 0) {
+                log.info("鎵嬪姩鍚屾杞﹁締鎴愬姛锛歝arId={}, vehicleNo={}, vehicleId={}", 
+                        carId, vehicleNo, newVehicle.getVehicleId());
+                return AjaxResult.success("鍚屾鎴愬姛", newVehicle.getVehicleId());
+            } else {
+                return AjaxResult.error("鍚屾澶辫触");
+            }
+
+        } catch (Exception e) {
+            log.error("鎵嬪姩鍚屾杞﹁締澶辫触", e);
+            return AjaxResult.error("鍚屾澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    /**
+     * 灏� DTO 杞崲涓� VO
+     */
+    private VehicleSyncVO convertToVO(VehicleSyncDTO dto) {
+        VehicleSyncVO vo = new VehicleSyncVO();
+        vo.setCarId(dto.getCarId());
+        vo.setVehicleNo(dto.getCarLicense());
+        vo.setCarOrdClass(dto.getCarOrdClass());
+        
+        // 鏍规嵁carOrdClass鏄犲皠鍒嗗叕鍙稿悕绉�
+        String deptName = mapCarOrdClassToDeptName(dto.getCarOrdClass());
+        vo.setDeptName(deptName);
+        
+        return vo;
+    }
+
+    /**
+     * 鏍规嵁鍗曟嵁绫诲瀷缂栫爜鏄犲皠鍒嗗叕鍙稿悕绉�
+     * 鍙互浠庨厤缃垨鏁版嵁搴撹鍙栵紝杩欓噷绠�鍖栧鐞�
+     */
+    private String mapCarOrdClassToDeptName(String carOrdClass) {
+        // TODO: 鏍规嵁瀹為檯涓氬姟瑙勫垯鏄犲皠
+        // 鍙互浠� sys_config 鎴栦笓闂ㄧ殑鏄犲皠琛ㄨ鍙�
+        Map<String, String> mapping = new HashMap<>();
+        mapping.put("01", "鎬诲叕鍙�");
+        mapping.put("02", "鍒嗗叕鍙窤");
+        mapping.put("03", "鍒嗗叕鍙窧");
+        
+        return mapping.getOrDefault(carOrdClass, "鏈煡鍒嗗叕鍙�");
     }
 }

--
Gitblit v1.9.1