From a8b6add14f4a93e14c70ac23bab00a4b918d4dfd Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期四, 09 十月 2025 11:11:23 +0800
Subject: [PATCH] 新增每日车辆数据前后端

---
 ui/admin-ui3/src/views/cwgl/data/index.vue                                         |  234 ++++++++++
 service/src/main/java/com/ruoyi/cwgl/domain/VehicleDailyData.java                  |  283 ++++++++++++
 service/src/main/java/com/ruoyi/cwgl/controller/VehicleDailyDataController.java    |  108 ++++
 service/src/main/java/com/ruoyi/cwgl/service/IVehicleDailyDataService.java         |  102 ++++
 service/src/main/java/com/ruoyi/cwgl/mapper/VehicleDailyDataMapper.java            |   87 +++
 service/src/main/java/com/ruoyi/cwgl/service/impl/VehicleDailyDataServiceImpl.java |  182 +++++++
 service/src/main/resources/mapper/cwgl/VehicleDailyDataMapper.xml                  |  312 +++++++++++++
 ui/admin-ui3/src/api/cwgl/data.ts                                                  |   67 ++
 8 files changed, 1,375 insertions(+), 0 deletions(-)

diff --git a/service/src/main/java/com/ruoyi/cwgl/controller/VehicleDailyDataController.java b/service/src/main/java/com/ruoyi/cwgl/controller/VehicleDailyDataController.java
new file mode 100644
index 0000000..2384366
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/controller/VehicleDailyDataController.java
@@ -0,0 +1,108 @@
+package com.ruoyi.cwgl.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.utils.file.DownloadExportUtil;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.cwgl.domain.VehicleDailyData;
+import com.ruoyi.cwgl.service.IVehicleDailyDataService;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 杞﹁締姣忔棩鏁版嵁Controller
+ *
+ * @author ruoyi
+ * @date 2025-10-09
+ */
+@RestController
+@RequestMapping("/cwgl/data")
+public class VehicleDailyDataController extends BaseController
+{
+    @Autowired
+    private IVehicleDailyDataService vehicleDailyDataService;
+
+
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:data:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(VehicleDailyData vehicleDailyData)
+    {
+        startPage();
+        List<VehicleDailyData> list = vehicleDailyDataService.selectVehicleDailyDataList(vehicleDailyData);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭杞﹁締姣忔棩鏁版嵁鍒楄〃
+     * @param vehicleDailyData 鏌ヨ鏉′欢瀵硅薄
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:data:export')")
+    @Log(title = "杞﹁締姣忔棩鏁版嵁", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(VehicleDailyData vehicleDailyData,String exportKey)
+    {
+        vehicleDailyDataService.export(vehicleDailyData,exportKey);
+        return AjaxResult.success("瀵煎嚭璇锋眰鎴愬姛锛岃绋嶅悗鐐瑰嚮涓嬭浇...!");
+    }
+
+
+
+    /**
+     * 鑾峰彇杞﹁締姣忔棩鏁版嵁璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:data:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Integer id)
+    {
+        return AjaxResult.success(vehicleDailyDataService.selectVehicleDailyDataById(id));
+    }
+
+    /**
+     * 鏂板杞﹁締姣忔棩鏁版嵁
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:data:add')")
+    @Log(title = "杞﹁締姣忔棩鏁版嵁", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody VehicleDailyData vehicleDailyData)
+    {
+        return toAjax(vehicleDailyDataService.insertVehicleDailyData(vehicleDailyData));
+    }
+
+    /**
+     * 淇敼杞﹁締姣忔棩鏁版嵁
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:data:edit')")
+    @Log(title = "杞﹁締姣忔棩鏁版嵁", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody VehicleDailyData vehicleDailyData)
+    {
+        return toAjax(vehicleDailyDataService.updateVehicleDailyData(vehicleDailyData));
+    }
+
+    /**
+     * 鍒犻櫎杞﹁締姣忔棩鏁版嵁
+     */
+    @PreAuthorize("@ss.hasPermi('cwgl:data:remove')")
+    @Log(title = "杞﹁締姣忔棩鏁版嵁", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Integer[] ids)
+    {
+        return toAjax(vehicleDailyDataService.deleteVehicleDailyDataByIds(ids));
+    }
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/domain/VehicleDailyData.java b/service/src/main/java/com/ruoyi/cwgl/domain/VehicleDailyData.java
new file mode 100644
index 0000000..4766713
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/domain/VehicleDailyData.java
@@ -0,0 +1,283 @@
+package com.ruoyi.cwgl.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.util.Date;
+import lombok.Data;
+/**
+ * 杞﹁締姣忔棩鏁版嵁瀵硅薄 vehicle_daily_data
+ *
+ * @author ruoyi
+ * @date 2025-10-09
+ */
+@Data
+public class VehicleDailyData{
+
+
+    /** 涓婚敭ID */
+        @TableField("id")
+    private Integer id;
+
+
+    /** 杞︽灦鍙� */
+    @Excel(name = "杞︽灦鍙�")
+
+        @TableField("vin")
+    private String vin;
+
+
+    /** 搴曠洏绫诲瀷 */
+    @Excel(name = "搴曠洏绫诲瀷")
+
+        @TableField("chassis_type")
+    private String chassisType;
+
+
+    /** 鏁版嵁鏃ユ湡 */
+    @Excel(name = "鏁版嵁鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss HH:mm:ss")
+
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss HH:mm:ss")
+        @TableField("event_date")
+    private Date eventDate;
+
+
+    /** 琛岄┒閲岀▼ */
+    @Excel(name = "琛岄┒閲岀▼")
+
+        @TableField("distance")
+    private BigDecimal distance;
+
+
+    /** 鐢ㄨ溅鏃堕暱 */
+    @Excel(name = "鐢ㄨ溅鏃堕暱")
+
+        @TableField("duration")
+    private BigDecimal duration;
+
+
+    /** 鐔勭伀鍋滆溅鏃堕暱 */
+    @Excel(name = "鐔勭伀鍋滆溅鏃堕暱")
+
+        @TableField("shutdown_duration")
+    private BigDecimal shutdownDuration;
+
+
+    /** 琛岄┒鏃堕暱 */
+    @Excel(name = "琛岄┒鏃堕暱")
+
+        @TableField("driving_duration")
+    private BigDecimal drivingDuration;
+
+
+    /** 琛岄┒鏃堕暱鍗犳瘮 */
+    @Excel(name = "琛岄┒鏃堕暱鍗犳瘮")
+
+        @TableField("driving_duration_ratio")
+    private BigDecimal drivingDurationRatio;
+
+
+    /** 鎬犻�熸椂闀垮崰姣� */
+    @Excel(name = "鎬犻�熸椂闀垮崰姣�")
+
+        @TableField("idle_duration_ratio")
+    private BigDecimal idleDurationRatio;
+
+
+    /** 鎬犻�熸椂闀� */
+    @Excel(name = "鎬犻�熸椂闀�")
+
+        @TableField("idle_duration")
+    private BigDecimal idleDuration;
+
+
+    /** 婊戣璺濈鍗犳瘮 */
+    @Excel(name = "婊戣璺濈鍗犳瘮")
+
+        @TableField("coasting_distance_ratio")
+    private BigDecimal coastingDistanceRatio;
+
+
+    /** 婊戣璺濈 */
+    @Excel(name = "婊戣璺濈")
+
+        @TableField("coasting_distance")
+    private BigDecimal coastingDistance;
+
+
+    /** 宸¤埅璺濈鍗犳瘮 */
+    @Excel(name = "宸¤埅璺濈鍗犳瘮")
+
+        @TableField("cruising_distance_ratio")
+    private BigDecimal cruisingDistanceRatio;
+
+
+    /** 宸¤埅璺濈 */
+    @Excel(name = "宸¤埅璺濈")
+
+        @TableField("cruising_distance")
+    private BigDecimal cruisingDistance;
+
+
+    /** 骞冲潎閫熷害 */
+    @Excel(name = "骞冲潎閫熷害")
+
+        @TableField("avg_speed")
+    private BigDecimal avgSpeed;
+
+
+    /** 骞冲潎琛岃溅閫熷害 */
+    @Excel(name = "骞冲潎琛岃溅閫熷害")
+
+        @TableField("avg_driving_speed")
+    private BigDecimal avgDrivingSpeed;
+
+
+    /** 鍙戝姩鏈哄钩鍧囪浆閫� */
+    @Excel(name = "鍙戝姩鏈哄钩鍧囪浆閫�")
+
+        @TableField("avg_engine_speed")
+    private BigDecimal avgEngineSpeed;
+
+
+    /** 缁忔祹杞�熸椂闀垮崰姣� */
+    @Excel(name = "缁忔祹杞�熸椂闀垮崰姣�")
+
+        @TableField("economic_engine_speed_duration_ratio")
+    private BigDecimal economicEngineSpeedDurationRatio;
+
+
+    /** 缁忔祹杞�熸椂闀� */
+    @Excel(name = "缁忔祹杞�熸椂闀�")
+
+        @TableField("economic_engine_speed_duration")
+    private BigDecimal economicEngineSpeedDuration;
+
+
+    /** 鐧惧叕閲岃兘鑰� */
+    @Excel(name = "鐧惧叕閲岃兘鑰�")
+
+        @TableField("avg_energy_consumption")
+    private BigDecimal avgEnergyConsumption;
+
+
+    /** 鑰楁补閲� */
+    @Excel(name = "鑰楁补閲�")
+
+        @TableField("energy_consumption")
+    private BigDecimal energyConsumption;
+
+
+    /** 琛岄┒鑰楁补閲� */
+    @Excel(name = "琛岄┒鑰楁补閲�")
+
+        @TableField("driving_energy_consumption")
+    private BigDecimal drivingEnergyConsumption;
+
+
+    /** 琛岄┒鑰楁补閲忓崰姣� */
+    @Excel(name = "琛岄┒鑰楁补閲忓崰姣�")
+
+        @TableField("driving_energy_consumption_ratio")
+    private BigDecimal drivingEnergyConsumptionRatio;
+
+
+    /** 鎬犻�熻�楁补閲忓崰姣� */
+    @Excel(name = "鎬犻�熻�楁补閲忓崰姣�")
+
+        @TableField("idle_energy_consumption_ratio")
+    private BigDecimal idleEnergyConsumptionRatio;
+
+
+    /** 鎬犻�熻�楁补閲� */
+    @Excel(name = "鎬犻�熻�楁补閲�")
+
+        @TableField("idle_energy_consumption")
+    private BigDecimal idleEnergyConsumption;
+
+
+    /** 鐧惧叕閲屽翱绱犳秷鑰� */
+    @Excel(name = "鐧惧叕閲屽翱绱犳秷鑰�")
+
+        @TableField("avg_adblue_consumption")
+    private BigDecimal avgAdblueConsumption;
+
+
+    /** 灏跨礌娑堣�� */
+    @Excel(name = "灏跨礌娑堣��")
+
+        @TableField("adblue_consumption")
+    private BigDecimal adblueConsumption;
+
+
+    /** 骞冲潎鏁磋溅璐ㄩ噺 */
+    @Excel(name = "骞冲潎鏁磋溅璐ㄩ噺")
+
+        @TableField("avg_gross_weight")
+    private BigDecimal avgGrossWeight;
+
+
+    /** 鍒硅溅娆℃暟 */
+    @Excel(name = "鍒硅溅娆℃暟")
+
+        @TableField("brake_times")
+    private Integer brakeTimes;
+
+
+    /** 鎬ュ埞杞︽鏁� */
+    @Excel(name = "鎬ュ埞杞︽鏁�")
+
+        @TableField("harsh_brake_times")
+    private Integer harshBrakeTimes;
+
+
+    /** 鎬ュ姞閫熸鏁� */
+    @Excel(name = "鎬ュ姞閫熸鏁�")
+
+        @TableField("acceleration_times")
+    private Integer accelerationTimes;
+
+
+    /** 鐧惧叕閲屽埞杞︽鏁� */
+    @Excel(name = "鐧惧叕閲屽埞杞︽鏁�")
+
+        @TableField("avg_brake_times")
+    private Integer avgBrakeTimes;
+
+
+    /** 鐧惧叕閲屾�ュ埞杞︽鏁� */
+    @Excel(name = "鐧惧叕閲屾�ュ埞杞︽鏁�")
+
+        @TableField("avg_harsh_brake_times")
+    private Integer avgHarshBrakeTimes;
+
+
+    /** 鐧惧叕閲屾�ュ姞閫熸鏁� */
+    @Excel(name = "鐧惧叕閲屾�ュ姞閫熸鏁�")
+
+        @TableField("avg_acceleration_times")
+    private Integer avgAccelerationTimes;
+
+
+    /** 閲岀▼琛ㄩ噷绋� */
+    @Excel(name = "閲岀▼琛ㄩ噷绋�")
+
+        @TableField("odometer")
+    private BigDecimal odometer;
+
+
+    /** 鍒涘缓鏃堕棿 */
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss HH:mm:ss")
+        @TableField("create_time")
+    private Date createTime;
+
+
+    /** 鏇存柊鏃堕棿 */
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss HH:mm:ss")
+        @TableField("update_time")
+    private Date updateTime;
+
+
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/mapper/VehicleDailyDataMapper.java b/service/src/main/java/com/ruoyi/cwgl/mapper/VehicleDailyDataMapper.java
new file mode 100644
index 0000000..5f570bd
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/mapper/VehicleDailyDataMapper.java
@@ -0,0 +1,87 @@
+package com.ruoyi.cwgl.mapper;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.VehicleDailyData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 杞﹁締姣忔棩鏁版嵁Mapper鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-10-09
+ */
+public interface VehicleDailyDataMapper  extends BaseMapper<VehicleDailyData>
+{
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param id 杞﹁締姣忔棩鏁版嵁ID
+     * @return 杞﹁締姣忔棩鏁版嵁
+     */
+    public VehicleDailyData selectVehicleDailyDataById(Integer id);
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁 璁板綍鏁�
+     *
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 杞﹁締姣忔棩鏁版嵁闆嗗悎
+     */
+    public int selectVehicleDailyDataCount(VehicleDailyData vehicleDailyData);
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁鍒楄〃
+     * 
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 杞﹁締姣忔棩鏁版嵁闆嗗悎
+     */
+    public List<VehicleDailyData> selectVehicleDailyDataList(VehicleDailyData vehicleDailyData);
+
+    /**
+     * 鏂板杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    public int insertVehicleDailyData(VehicleDailyData vehicleDailyData);
+
+    /**
+     * 鏂板杞﹁締姣忔棩鏁版嵁[鎵归噺]
+     *
+     * @param vehicleDailyDatas 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    public int insertVehicleDailyDataBatch(List<VehicleDailyData> vehicleDailyDatas);
+
+    /**
+     * 淇敼杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    public int updateVehicleDailyData(VehicleDailyData vehicleDailyData);
+
+    /**
+     * 淇敼杞﹁締姣忔棩鏁版嵁[鎵归噺]
+     *
+     * @param vehicleDailyDatas 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    public int updateVehicleDailyDataBatch(List<VehicleDailyData> vehicleDailyDatas);
+
+    /**
+     * 鍒犻櫎杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param id 杞﹁締姣忔棩鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteVehicleDailyDataById(Integer id);
+
+    /**
+     * 鎵归噺鍒犻櫎杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteVehicleDailyDataByIds(Integer[] ids);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/IVehicleDailyDataService.java b/service/src/main/java/com/ruoyi/cwgl/service/IVehicleDailyDataService.java
new file mode 100644
index 0000000..c2efe21
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/IVehicleDailyDataService.java
@@ -0,0 +1,102 @@
+package com.ruoyi.cwgl.service;
+
+import java.util.List;
+import com.ruoyi.cwgl.domain.VehicleDailyData;
+import com.baomidou.mybatisplus.extension.service.IService;
+/**
+ * 杞﹁締姣忔棩鏁版嵁Service鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2025-10-09
+ */
+public interface IVehicleDailyDataService extends IService<VehicleDailyData>
+{
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param id 杞﹁締姣忔棩鏁版嵁ID
+     * @return 杞﹁締姣忔棩鏁版嵁
+     */
+    public VehicleDailyData selectVehicleDailyDataById(Integer id);
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁 璁板綍鏁�
+     *
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 杞﹁締姣忔棩鏁版嵁闆嗗悎
+     */
+    public int selectVehicleDailyDataCount(VehicleDailyData vehicleDailyData);
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁鍒楄〃
+     * 
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 杞﹁締姣忔棩鏁版嵁闆嗗悎
+     */
+    public List<VehicleDailyData> selectVehicleDailyDataList(VehicleDailyData vehicleDailyData);
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 杞﹁締姣忔棩鏁版嵁闆嗗悎
+     */
+    public void export(VehicleDailyData vehicleDailyData, String exportKey) ;
+
+
+    /**
+     * 鏂板杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    public int insertVehicleDailyData(VehicleDailyData vehicleDailyData);
+
+    /**
+     * 鏂板杞﹁締姣忔棩鏁版嵁[鎵归噺]
+     *
+     * @param vehicleDailyDatas 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    public int insertVehicleDailyDataBatch(List<VehicleDailyData> vehicleDailyDatas);
+
+    /**
+     * 淇敼杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    public int updateVehicleDailyData(VehicleDailyData vehicleDailyData);
+
+    /**
+     * 淇敼杞﹁締姣忔棩鏁版嵁[鎵归噺]
+     *
+     * @param vehicleDailyDatas 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    public int updateVehicleDailyDataBatch(List<VehicleDailyData> vehicleDailyDatas);
+    /**
+     * 鎵归噺鍒犻櫎杞﹁締姣忔棩鏁版嵁
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteVehicleDailyDataByIds(String ids);
+
+    /**
+     * 鎵归噺鍒犻櫎杞﹁締姣忔棩鏁版嵁
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteVehicleDailyDataByIds(Integer[] ids);
+
+    /**
+     * 鍒犻櫎杞﹁締姣忔棩鏁版嵁淇℃伅
+     * 
+     * @param id 杞﹁締姣忔棩鏁版嵁ID
+     * @return 缁撴灉
+     */
+    public int deleteVehicleDailyDataById(Integer id);
+}
diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/VehicleDailyDataServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/VehicleDailyDataServiceImpl.java
new file mode 100644
index 0000000..9b14ff1
--- /dev/null
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/VehicleDailyDataServiceImpl.java
@@ -0,0 +1,182 @@
+package com.ruoyi.cwgl.service.impl;
+
+import java.util.List;
+
+import com.ruoyi.common.utils.DateUtils;
+import javax.annotation.Resource;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.stereotype.Service;
+import org.springframework.scheduling.annotation.Async;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.annotation.DataSource;
+import com.ruoyi.common.enums.DataSourceType;
+import com.ruoyi.common.core.service.BaseService;
+
+import com.ruoyi.cwgl.mapper.VehicleDailyDataMapper;
+import com.ruoyi.cwgl.domain.VehicleDailyData;
+import com.ruoyi.cwgl.service.IVehicleDailyDataService;
+import com.ruoyi.common.core.text.Convert;
+
+/**
+ * 杞﹁締姣忔棩鏁版嵁Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2025-10-09
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class VehicleDailyDataServiceImpl  extends BaseService<VehicleDailyDataMapper, VehicleDailyData> implements IVehicleDailyDataService
+{
+    protected final Logger logger = LoggerFactory.getLogger(getClass());
+    @Resource
+    private VehicleDailyDataMapper vehicleDailyDataMapper;
+
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁
+     *
+     * @param id 杞﹁締姣忔棩鏁版嵁ID
+     * @return 杞﹁締姣忔棩鏁版嵁
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public VehicleDailyData selectVehicleDailyDataById(Integer id)
+    {
+        return vehicleDailyDataMapper.selectVehicleDailyDataById(id);
+    }
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁 璁板綍鏁�
+     *
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 杞﹁締姣忔棩鏁版嵁闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public int selectVehicleDailyDataCount(VehicleDailyData vehicleDailyData)
+    {
+        return vehicleDailyDataMapper.selectVehicleDailyDataCount(vehicleDailyData);
+    }
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁鍒楄〃
+     *
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 杞﹁締姣忔棩鏁版嵁
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Override
+    public List<VehicleDailyData> selectVehicleDailyDataList(VehicleDailyData vehicleDailyData)
+    {
+        return vehicleDailyDataMapper.selectVehicleDailyDataList(vehicleDailyData);
+    }
+
+    /**
+     * 鏌ヨ杞﹁締姣忔棩鏁版嵁鍒楄〃 寮傛 瀵煎嚭
+     *
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @param exportKey 瀵煎嚭鍔熻兘鐨勫敮涓�鏍囪瘑
+     * @return 杞﹁締姣忔棩鏁版嵁闆嗗悎
+     */
+    @DataSource(DataSourceType.SLAVE)
+    @Async
+    @Override
+    public void export(VehicleDailyData vehicleDailyData,String exportKey) {
+
+        super.export(VehicleDailyData.class,exportKey,"vehicleDailyDataData",(pageNum)->{
+            PageUtils.startPage(pageNum, Constants.EXPORT_PATE_SIZE);
+            return selectVehicleDailyDataList(vehicleDailyData);
+        });
+    }
+
+
+    /**
+     * 鏂板杞﹁締姣忔棩鏁版嵁
+     *
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertVehicleDailyData(VehicleDailyData vehicleDailyData)
+    {
+        vehicleDailyData.setCreateTime(DateUtils.getNowDate());
+        return vehicleDailyDataMapper.insertVehicleDailyData(vehicleDailyData);
+    }
+
+    /**
+     * 鏂板杞﹁締姣忔棩鏁版嵁[鎵归噺]
+     *
+     * @param vehicleDailyDatas 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertVehicleDailyDataBatch(List<VehicleDailyData> vehicleDailyDatas)
+    {
+        int rows = vehicleDailyDataMapper.insertVehicleDailyDataBatch(vehicleDailyDatas);
+        return rows;
+    }
+
+    /**
+     * 淇敼杞﹁締姣忔棩鏁版嵁
+     *
+     * @param vehicleDailyData 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateVehicleDailyData(VehicleDailyData vehicleDailyData)
+    {
+        vehicleDailyData.setUpdateTime(DateUtils.getNowDate());
+        return vehicleDailyDataMapper.updateVehicleDailyData(vehicleDailyData);
+    }
+
+    /**
+     * 淇敼杞﹁締姣忔棩鏁版嵁[鎵归噺]
+     *
+     * @param vehicleDailyDatas 杞﹁締姣忔棩鏁版嵁
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateVehicleDailyDataBatch(List<VehicleDailyData> vehicleDailyDatas){
+        return vehicleDailyDataMapper.updateVehicleDailyDataBatch(vehicleDailyDatas);
+    }
+
+    /**
+     * 鍒犻櫎杞﹁締姣忔棩鏁版嵁瀵硅薄
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteVehicleDailyDataByIds(String ids)
+    {
+        return deleteVehicleDailyDataByIds(Convert.toIntArray(ids));
+    }
+
+    /**
+     * 鍒犻櫎杞﹁締姣忔棩鏁版嵁瀵硅薄
+     *
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteVehicleDailyDataByIds(Integer[] ids)
+    {
+        return vehicleDailyDataMapper.deleteVehicleDailyDataByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎杞﹁締姣忔棩鏁版嵁淇℃伅
+     *
+     * @param id 杞﹁締姣忔棩鏁版嵁ID
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteVehicleDailyDataById(Integer id)
+    {
+        return vehicleDailyDataMapper.deleteVehicleDailyDataById(id);
+    }
+}
diff --git a/service/src/main/resources/mapper/cwgl/VehicleDailyDataMapper.xml b/service/src/main/resources/mapper/cwgl/VehicleDailyDataMapper.xml
new file mode 100644
index 0000000..627ee4d
--- /dev/null
+++ b/service/src/main/resources/mapper/cwgl/VehicleDailyDataMapper.xml
@@ -0,0 +1,312 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.cwgl.mapper.VehicleDailyDataMapper">
+
+    <resultMap type="com.ruoyi.cwgl.domain.VehicleDailyData" id="VehicleDailyDataResult">
+        <result property="id"    column="id"    />
+        <result property="vin"    column="vin"    />
+        <result property="chassisType"    column="chassis_type"    />
+        <result property="eventDate"    column="event_date"    />
+        <result property="distance"    column="distance"    />
+        <result property="duration"    column="duration"    />
+        <result property="shutdownDuration"    column="shutdown_duration"    />
+        <result property="drivingDuration"    column="driving_duration"    />
+        <result property="drivingDurationRatio"    column="driving_duration_ratio"    />
+        <result property="idleDurationRatio"    column="idle_duration_ratio"    />
+        <result property="idleDuration"    column="idle_duration"    />
+        <result property="coastingDistanceRatio"    column="coasting_distance_ratio"    />
+        <result property="coastingDistance"    column="coasting_distance"    />
+        <result property="cruisingDistanceRatio"    column="cruising_distance_ratio"    />
+        <result property="cruisingDistance"    column="cruising_distance"    />
+        <result property="avgSpeed"    column="avg_speed"    />
+        <result property="avgDrivingSpeed"    column="avg_driving_speed"    />
+        <result property="avgEngineSpeed"    column="avg_engine_speed"    />
+        <result property="economicEngineSpeedDurationRatio"    column="economic_engine_speed_duration_ratio"    />
+        <result property="economicEngineSpeedDuration"    column="economic_engine_speed_duration"    />
+        <result property="avgEnergyConsumption"    column="avg_energy_consumption"    />
+        <result property="energyConsumption"    column="energy_consumption"    />
+        <result property="drivingEnergyConsumption"    column="driving_energy_consumption"    />
+        <result property="drivingEnergyConsumptionRatio"    column="driving_energy_consumption_ratio"    />
+        <result property="idleEnergyConsumptionRatio"    column="idle_energy_consumption_ratio"    />
+        <result property="idleEnergyConsumption"    column="idle_energy_consumption"    />
+        <result property="avgAdblueConsumption"    column="avg_adblue_consumption"    />
+        <result property="adblueConsumption"    column="adblue_consumption"    />
+        <result property="avgGrossWeight"    column="avg_gross_weight"    />
+        <result property="brakeTimes"    column="brake_times"    />
+        <result property="harshBrakeTimes"    column="harsh_brake_times"    />
+        <result property="accelerationTimes"    column="acceleration_times"    />
+        <result property="avgBrakeTimes"    column="avg_brake_times"    />
+        <result property="avgHarshBrakeTimes"    column="avg_harsh_brake_times"    />
+        <result property="avgAccelerationTimes"    column="avg_acceleration_times"    />
+        <result property="odometer"    column="odometer"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectVehicleDailyDataVo">
+        select thisTab.id, thisTab.vin, thisTab.chassis_type, thisTab.event_date, thisTab.distance, thisTab.duration, thisTab.shutdown_duration, thisTab.driving_duration, thisTab.driving_duration_ratio, thisTab.idle_duration_ratio, thisTab.idle_duration, thisTab.coasting_distance_ratio, thisTab.coasting_distance, thisTab.cruising_distance_ratio, thisTab.cruising_distance, thisTab.avg_speed, thisTab.avg_driving_speed, thisTab.avg_engine_speed, thisTab.economic_engine_speed_duration_ratio, thisTab.economic_engine_speed_duration, thisTab.avg_energy_consumption, thisTab.energy_consumption, thisTab.driving_energy_consumption, thisTab.driving_energy_consumption_ratio, thisTab.idle_energy_consumption_ratio, thisTab.idle_energy_consumption, thisTab.avg_adblue_consumption, thisTab.adblue_consumption, thisTab.avg_gross_weight, thisTab.brake_times, thisTab.harsh_brake_times, thisTab.acceleration_times, thisTab.avg_brake_times, thisTab.avg_harsh_brake_times, thisTab.avg_acceleration_times, thisTab.odometer, thisTab.create_time, thisTab.update_time from vehicle_daily_data AS thisTab
+    </sql>
+    <sql id="selectVehicleDailyDataVoCount">
+        select count(0) from vehicle_daily_data as thisTab
+    </sql>
+
+    <sql id="whereCondition">
+        <if test="vin != null  and vin != ''"> and thisTab.vin = #{vin}</if>
+        <if test="chassisType != null  and chassisType != ''"> and thisTab.chassis_type = #{chassisType}</if>
+        <if test="eventDate != null "> and thisTab.event_date = #{eventDate}</if>
+        <if test="distance != null "> and thisTab.distance = #{distance}</if>
+        <if test="duration != null "> and thisTab.duration = #{duration}</if>
+        <if test="shutdownDuration != null "> and thisTab.shutdown_duration = #{shutdownDuration}</if>
+        <if test="drivingDuration != null "> and thisTab.driving_duration = #{drivingDuration}</if>
+        <if test="drivingDurationRatio != null "> and thisTab.driving_duration_ratio = #{drivingDurationRatio}</if>
+        <if test="idleDurationRatio != null "> and thisTab.idle_duration_ratio = #{idleDurationRatio}</if>
+        <if test="idleDuration != null "> and thisTab.idle_duration = #{idleDuration}</if>
+        <if test="coastingDistanceRatio != null "> and thisTab.coasting_distance_ratio = #{coastingDistanceRatio}</if>
+        <if test="coastingDistance != null "> and thisTab.coasting_distance = #{coastingDistance}</if>
+        <if test="cruisingDistanceRatio != null "> and thisTab.cruising_distance_ratio = #{cruisingDistanceRatio}</if>
+        <if test="cruisingDistance != null "> and thisTab.cruising_distance = #{cruisingDistance}</if>
+        <if test="avgSpeed != null "> and thisTab.avg_speed = #{avgSpeed}</if>
+        <if test="avgDrivingSpeed != null "> and thisTab.avg_driving_speed = #{avgDrivingSpeed}</if>
+        <if test="avgEngineSpeed != null "> and thisTab.avg_engine_speed = #{avgEngineSpeed}</if>
+        <if test="economicEngineSpeedDurationRatio != null "> and thisTab.economic_engine_speed_duration_ratio = #{economicEngineSpeedDurationRatio}</if>
+        <if test="economicEngineSpeedDuration != null "> and thisTab.economic_engine_speed_duration = #{economicEngineSpeedDuration}</if>
+        <if test="avgEnergyConsumption != null "> and thisTab.avg_energy_consumption = #{avgEnergyConsumption}</if>
+        <if test="energyConsumption != null "> and thisTab.energy_consumption = #{energyConsumption}</if>
+        <if test="drivingEnergyConsumption != null "> and thisTab.driving_energy_consumption = #{drivingEnergyConsumption}</if>
+        <if test="drivingEnergyConsumptionRatio != null "> and thisTab.driving_energy_consumption_ratio = #{drivingEnergyConsumptionRatio}</if>
+        <if test="idleEnergyConsumptionRatio != null "> and thisTab.idle_energy_consumption_ratio = #{idleEnergyConsumptionRatio}</if>
+        <if test="idleEnergyConsumption != null "> and thisTab.idle_energy_consumption = #{idleEnergyConsumption}</if>
+        <if test="avgAdblueConsumption != null "> and thisTab.avg_adblue_consumption = #{avgAdblueConsumption}</if>
+        <if test="adblueConsumption != null "> and thisTab.adblue_consumption = #{adblueConsumption}</if>
+        <if test="avgGrossWeight != null "> and thisTab.avg_gross_weight = #{avgGrossWeight}</if>
+        <if test="brakeTimes != null "> and thisTab.brake_times = #{brakeTimes}</if>
+        <if test="harshBrakeTimes != null "> and thisTab.harsh_brake_times = #{harshBrakeTimes}</if>
+        <if test="accelerationTimes != null "> and thisTab.acceleration_times = #{accelerationTimes}</if>
+        <if test="avgBrakeTimes != null "> and thisTab.avg_brake_times = #{avgBrakeTimes}</if>
+        <if test="avgHarshBrakeTimes != null "> and thisTab.avg_harsh_brake_times = #{avgHarshBrakeTimes}</if>
+        <if test="avgAccelerationTimes != null "> and thisTab.avg_acceleration_times = #{avgAccelerationTimes}</if>
+        <if test="odometer != null "> and thisTab.odometer = #{odometer}</if>
+        <if test="createTimeBegin != null and createTimeBegin != '' and createTimeEnd != null and createTimeEnd != ''"> and  thisTab.create_time between #{createTimeBegin} and #{createTimeEnd}</if>
+    </sql>
+
+    <!--鏌ヨ-->
+    <select id="selectVehicleDailyDataById" parameterType="Integer" resultMap="VehicleDailyDataResult">
+        <include refid="selectVehicleDailyDataVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectVehicleDailyDataCount" parameterType="com.ruoyi.cwgl.domain.VehicleDailyData" resultType="int">
+        <include refid="selectVehicleDailyDataVoCount"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+    </select>
+
+    <select id="selectVehicleDailyDataList" parameterType="com.ruoyi.cwgl.domain.VehicleDailyData" resultMap="VehicleDailyDataResult">
+        <include refid="selectVehicleDailyDataVo"/>
+        <where>
+            <include refid="whereCondition"/>
+        </where>
+        order by thisTab.id desc
+    </select>
+
+    <!-- 鏂板 -->
+    <insert id="insertVehicleDailyData" parameterType="com.ruoyi.cwgl.domain.VehicleDailyData"  useGeneratedKeys="true" keyProperty="id">
+        insert into vehicle_daily_data
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="vin != null and vin != ''">vin,</if>
+            <if test="chassisType != null">chassis_type,</if>
+            <if test="eventDate != null">event_date,</if>
+            <if test="distance != null">distance,</if>
+            <if test="duration != null">duration,</if>
+            <if test="shutdownDuration != null">shutdown_duration,</if>
+            <if test="drivingDuration != null">driving_duration,</if>
+            <if test="drivingDurationRatio != null">driving_duration_ratio,</if>
+            <if test="idleDurationRatio != null">idle_duration_ratio,</if>
+            <if test="idleDuration != null">idle_duration,</if>
+            <if test="coastingDistanceRatio != null">coasting_distance_ratio,</if>
+            <if test="coastingDistance != null">coasting_distance,</if>
+            <if test="cruisingDistanceRatio != null">cruising_distance_ratio,</if>
+            <if test="cruisingDistance != null">cruising_distance,</if>
+            <if test="avgSpeed != null">avg_speed,</if>
+            <if test="avgDrivingSpeed != null">avg_driving_speed,</if>
+            <if test="avgEngineSpeed != null">avg_engine_speed,</if>
+            <if test="economicEngineSpeedDurationRatio != null">economic_engine_speed_duration_ratio,</if>
+            <if test="economicEngineSpeedDuration != null">economic_engine_speed_duration,</if>
+            <if test="avgEnergyConsumption != null">avg_energy_consumption,</if>
+            <if test="energyConsumption != null">energy_consumption,</if>
+            <if test="drivingEnergyConsumption != null">driving_energy_consumption,</if>
+            <if test="drivingEnergyConsumptionRatio != null">driving_energy_consumption_ratio,</if>
+            <if test="idleEnergyConsumptionRatio != null">idle_energy_consumption_ratio,</if>
+            <if test="idleEnergyConsumption != null">idle_energy_consumption,</if>
+            <if test="avgAdblueConsumption != null">avg_adblue_consumption,</if>
+            <if test="adblueConsumption != null">adblue_consumption,</if>
+            <if test="avgGrossWeight != null">avg_gross_weight,</if>
+            <if test="brakeTimes != null">brake_times,</if>
+            <if test="harshBrakeTimes != null">harsh_brake_times,</if>
+            <if test="accelerationTimes != null">acceleration_times,</if>
+            <if test="avgBrakeTimes != null">avg_brake_times,</if>
+            <if test="avgHarshBrakeTimes != null">avg_harsh_brake_times,</if>
+            <if test="avgAccelerationTimes != null">avg_acceleration_times,</if>
+            <if test="odometer != null">odometer,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="vin != null and vin != ''">#{vin},</if>
+            <if test="chassisType != null">#{chassisType},</if>
+            <if test="eventDate != null">#{eventDate},</if>
+            <if test="distance != null">#{distance},</if>
+            <if test="duration != null">#{duration},</if>
+            <if test="shutdownDuration != null">#{shutdownDuration},</if>
+            <if test="drivingDuration != null">#{drivingDuration},</if>
+            <if test="drivingDurationRatio != null">#{drivingDurationRatio},</if>
+            <if test="idleDurationRatio != null">#{idleDurationRatio},</if>
+            <if test="idleDuration != null">#{idleDuration},</if>
+            <if test="coastingDistanceRatio != null">#{coastingDistanceRatio},</if>
+            <if test="coastingDistance != null">#{coastingDistance},</if>
+            <if test="cruisingDistanceRatio != null">#{cruisingDistanceRatio},</if>
+            <if test="cruisingDistance != null">#{cruisingDistance},</if>
+            <if test="avgSpeed != null">#{avgSpeed},</if>
+            <if test="avgDrivingSpeed != null">#{avgDrivingSpeed},</if>
+            <if test="avgEngineSpeed != null">#{avgEngineSpeed},</if>
+            <if test="economicEngineSpeedDurationRatio != null">#{economicEngineSpeedDurationRatio},</if>
+            <if test="economicEngineSpeedDuration != null">#{economicEngineSpeedDuration},</if>
+            <if test="avgEnergyConsumption != null">#{avgEnergyConsumption},</if>
+            <if test="energyConsumption != null">#{energyConsumption},</if>
+            <if test="drivingEnergyConsumption != null">#{drivingEnergyConsumption},</if>
+            <if test="drivingEnergyConsumptionRatio != null">#{drivingEnergyConsumptionRatio},</if>
+            <if test="idleEnergyConsumptionRatio != null">#{idleEnergyConsumptionRatio},</if>
+            <if test="idleEnergyConsumption != null">#{idleEnergyConsumption},</if>
+            <if test="avgAdblueConsumption != null">#{avgAdblueConsumption},</if>
+            <if test="adblueConsumption != null">#{adblueConsumption},</if>
+            <if test="avgGrossWeight != null">#{avgGrossWeight},</if>
+            <if test="brakeTimes != null">#{brakeTimes},</if>
+            <if test="harshBrakeTimes != null">#{harshBrakeTimes},</if>
+            <if test="accelerationTimes != null">#{accelerationTimes},</if>
+            <if test="avgBrakeTimes != null">#{avgBrakeTimes},</if>
+            <if test="avgHarshBrakeTimes != null">#{avgHarshBrakeTimes},</if>
+            <if test="avgAccelerationTimes != null">#{avgAccelerationTimes},</if>
+            <if test="odometer != null">#{odometer},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <insert id="insertVehicleDailyDataBatch" parameterType="java.util.List"  useGeneratedKeys="true" keyProperty="id">
+        insert into vehicle_daily_data
+        <trim prefix="(" suffix=") values" suffixOverrides=",">
+            id,vin,chassis_type,event_date,distance,duration,shutdown_duration,driving_duration,driving_duration_ratio,idle_duration_ratio,idle_duration,coasting_distance_ratio,coasting_distance,cruising_distance_ratio,cruising_distance,avg_speed,avg_driving_speed,avg_engine_speed,economic_engine_speed_duration_ratio,economic_engine_speed_duration,avg_energy_consumption,energy_consumption,driving_energy_consumption,driving_energy_consumption_ratio,idle_energy_consumption_ratio,idle_energy_consumption,avg_adblue_consumption,adblue_consumption,avg_gross_weight,brake_times,harsh_brake_times,acceleration_times,avg_brake_times,avg_harsh_brake_times,avg_acceleration_times,odometer,create_time,update_time,
+        </trim>
+        <foreach item="item" index="index" collection="list" separator=",">
+            <trim prefix="(" suffix=") " suffixOverrides=",">
+                #{item.id},#{item.vin},#{item.chassisType},#{item.eventDate},#{item.distance},#{item.duration},#{item.shutdownDuration},#{item.drivingDuration},#{item.drivingDurationRatio},#{item.idleDurationRatio},#{item.idleDuration},#{item.coastingDistanceRatio},#{item.coastingDistance},#{item.cruisingDistanceRatio},#{item.cruisingDistance},#{item.avgSpeed},#{item.avgDrivingSpeed},#{item.avgEngineSpeed},#{item.economicEngineSpeedDurationRatio},#{item.economicEngineSpeedDuration},#{item.avgEnergyConsumption},#{item.energyConsumption},#{item.drivingEnergyConsumption},#{item.drivingEnergyConsumptionRatio},#{item.idleEnergyConsumptionRatio},#{item.idleEnergyConsumption},#{item.avgAdblueConsumption},#{item.adblueConsumption},#{item.avgGrossWeight},#{item.brakeTimes},#{item.harshBrakeTimes},#{item.accelerationTimes},#{item.avgBrakeTimes},#{item.avgHarshBrakeTimes},#{item.avgAccelerationTimes},#{item.odometer},#{item.createTime},#{item.updateTime},
+            </trim>
+        </foreach>
+    </insert>
+
+    <!-- 淇敼 -->
+    <update id="updateVehicleDailyData" parameterType="com.ruoyi.cwgl.domain.VehicleDailyData">
+        update vehicle_daily_data
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="vin != null and vin != ''">vin = #{vin},</if>
+            <if test="chassisType != null">chassis_type = #{chassisType},</if>
+            <if test="eventDate != null">event_date = #{eventDate},</if>
+            <if test="distance != null">distance = #{distance},</if>
+            <if test="duration != null">duration = #{duration},</if>
+            <if test="shutdownDuration != null">shutdown_duration = #{shutdownDuration},</if>
+            <if test="drivingDuration != null">driving_duration = #{drivingDuration},</if>
+            <if test="drivingDurationRatio != null">driving_duration_ratio = #{drivingDurationRatio},</if>
+            <if test="idleDurationRatio != null">idle_duration_ratio = #{idleDurationRatio},</if>
+            <if test="idleDuration != null">idle_duration = #{idleDuration},</if>
+            <if test="coastingDistanceRatio != null">coasting_distance_ratio = #{coastingDistanceRatio},</if>
+            <if test="coastingDistance != null">coasting_distance = #{coastingDistance},</if>
+            <if test="cruisingDistanceRatio != null">cruising_distance_ratio = #{cruisingDistanceRatio},</if>
+            <if test="cruisingDistance != null">cruising_distance = #{cruisingDistance},</if>
+            <if test="avgSpeed != null">avg_speed = #{avgSpeed},</if>
+            <if test="avgDrivingSpeed != null">avg_driving_speed = #{avgDrivingSpeed},</if>
+            <if test="avgEngineSpeed != null">avg_engine_speed = #{avgEngineSpeed},</if>
+            <if test="economicEngineSpeedDurationRatio != null">economic_engine_speed_duration_ratio = #{economicEngineSpeedDurationRatio},</if>
+            <if test="economicEngineSpeedDuration != null">economic_engine_speed_duration = #{economicEngineSpeedDuration},</if>
+            <if test="avgEnergyConsumption != null">avg_energy_consumption = #{avgEnergyConsumption},</if>
+            <if test="energyConsumption != null">energy_consumption = #{energyConsumption},</if>
+            <if test="drivingEnergyConsumption != null">driving_energy_consumption = #{drivingEnergyConsumption},</if>
+            <if test="drivingEnergyConsumptionRatio != null">driving_energy_consumption_ratio = #{drivingEnergyConsumptionRatio},</if>
+            <if test="idleEnergyConsumptionRatio != null">idle_energy_consumption_ratio = #{idleEnergyConsumptionRatio},</if>
+            <if test="idleEnergyConsumption != null">idle_energy_consumption = #{idleEnergyConsumption},</if>
+            <if test="avgAdblueConsumption != null">avg_adblue_consumption = #{avgAdblueConsumption},</if>
+            <if test="adblueConsumption != null">adblue_consumption = #{adblueConsumption},</if>
+            <if test="avgGrossWeight != null">avg_gross_weight = #{avgGrossWeight},</if>
+            <if test="brakeTimes != null">brake_times = #{brakeTimes},</if>
+            <if test="harshBrakeTimes != null">harsh_brake_times = #{harshBrakeTimes},</if>
+            <if test="accelerationTimes != null">acceleration_times = #{accelerationTimes},</if>
+            <if test="avgBrakeTimes != null">avg_brake_times = #{avgBrakeTimes},</if>
+            <if test="avgHarshBrakeTimes != null">avg_harsh_brake_times = #{avgHarshBrakeTimes},</if>
+            <if test="avgAccelerationTimes != null">avg_acceleration_times = #{avgAccelerationTimes},</if>
+            <if test="odometer != null">odometer = #{odometer},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <!-- 淇敼 -->
+    <update id="updateVehicleDailyDataBatch" parameterType="java.util.List">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update vehicle_daily_data
+            <trim prefix="SET" suffixOverrides=",">
+                <if test="item.vin != null and item.vin != ''">vin = #{item.vin},</if>
+                <if test="item.chassisType != null">chassis_type = #{item.chassisType},</if>
+                <if test="item.eventDate != null">event_date = #{item.eventDate},</if>
+                <if test="item.distance != null">distance = #{item.distance},</if>
+                <if test="item.duration != null">duration = #{item.duration},</if>
+                <if test="item.shutdownDuration != null">shutdown_duration = #{item.shutdownDuration},</if>
+                <if test="item.drivingDuration != null">driving_duration = #{item.drivingDuration},</if>
+                <if test="item.drivingDurationRatio != null">driving_duration_ratio = #{item.drivingDurationRatio},</if>
+                <if test="item.idleDurationRatio != null">idle_duration_ratio = #{item.idleDurationRatio},</if>
+                <if test="item.idleDuration != null">idle_duration = #{item.idleDuration},</if>
+                <if test="item.coastingDistanceRatio != null">coasting_distance_ratio = #{item.coastingDistanceRatio},</if>
+                <if test="item.coastingDistance != null">coasting_distance = #{item.coastingDistance},</if>
+                <if test="item.cruisingDistanceRatio != null">cruising_distance_ratio = #{item.cruisingDistanceRatio},</if>
+                <if test="item.cruisingDistance != null">cruising_distance = #{item.cruisingDistance},</if>
+                <if test="item.avgSpeed != null">avg_speed = #{item.avgSpeed},</if>
+                <if test="item.avgDrivingSpeed != null">avg_driving_speed = #{item.avgDrivingSpeed},</if>
+                <if test="item.avgEngineSpeed != null">avg_engine_speed = #{item.avgEngineSpeed},</if>
+                <if test="item.economicEngineSpeedDurationRatio != null">economic_engine_speed_duration_ratio = #{item.economicEngineSpeedDurationRatio},</if>
+                <if test="item.economicEngineSpeedDuration != null">economic_engine_speed_duration = #{item.economicEngineSpeedDuration},</if>
+                <if test="item.avgEnergyConsumption != null">avg_energy_consumption = #{item.avgEnergyConsumption},</if>
+                <if test="item.energyConsumption != null">energy_consumption = #{item.energyConsumption},</if>
+                <if test="item.drivingEnergyConsumption != null">driving_energy_consumption = #{item.drivingEnergyConsumption},</if>
+                <if test="item.drivingEnergyConsumptionRatio != null">driving_energy_consumption_ratio = #{item.drivingEnergyConsumptionRatio},</if>
+                <if test="item.idleEnergyConsumptionRatio != null">idle_energy_consumption_ratio = #{item.idleEnergyConsumptionRatio},</if>
+                <if test="item.idleEnergyConsumption != null">idle_energy_consumption = #{item.idleEnergyConsumption},</if>
+                <if test="item.avgAdblueConsumption != null">avg_adblue_consumption = #{item.avgAdblueConsumption},</if>
+                <if test="item.adblueConsumption != null">adblue_consumption = #{item.adblueConsumption},</if>
+                <if test="item.avgGrossWeight != null">avg_gross_weight = #{item.avgGrossWeight},</if>
+                <if test="item.brakeTimes != null">brake_times = #{item.brakeTimes},</if>
+                <if test="item.harshBrakeTimes != null">harsh_brake_times = #{item.harshBrakeTimes},</if>
+                <if test="item.accelerationTimes != null">acceleration_times = #{item.accelerationTimes},</if>
+                <if test="item.avgBrakeTimes != null">avg_brake_times = #{item.avgBrakeTimes},</if>
+                <if test="item.avgHarshBrakeTimes != null">avg_harsh_brake_times = #{item.avgHarshBrakeTimes},</if>
+                <if test="item.avgAccelerationTimes != null">avg_acceleration_times = #{item.avgAccelerationTimes},</if>
+                <if test="item.odometer != null">odometer = #{item.odometer},</if>
+                <if test="item.createTime != null">create_time = #{item.createTime},</if>
+                <if test="item.updateTime != null">update_time = #{item.updateTime},</if>
+            </trim>
+        where id = #{item.id}
+        </foreach>
+    </update>
+
+    <!--鍒犻櫎-->
+    <delete id="deleteVehicleDailyDataById" parameterType="Integer">
+        delete from vehicle_daily_data where id = #{id}
+    </delete>
+    <delete id="deleteVehicleDailyDataByIds" parameterType="Integer">
+        delete from vehicle_daily_data where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/ui/admin-ui3/src/api/cwgl/data.ts b/ui/admin-ui3/src/api/cwgl/data.ts
new file mode 100644
index 0000000..262e4f9
--- /dev/null
+++ b/ui/admin-ui3/src/api/cwgl/data.ts
@@ -0,0 +1,67 @@
+import request,{download,requestType} from "@/utils/request";
+import {BaseEntityInterface} from "@/utils/globalInterface";
+export interface DataI extends BaseEntityInterface{
+            id ?:  number   ,            vin ?:  string   ,            chassisType ?:  string   ,            eventDate ?:  string   ,            distance ?:  string   ,            duration ?:  string   ,            shutdownDuration ?:  string   ,            drivingDuration ?:  string   ,            drivingDurationRatio ?:  string   ,            idleDurationRatio ?:  string   ,            idleDuration ?:  string   ,            coastingDistanceRatio ?:  string   ,            coastingDistance ?:  string   ,            cruisingDistanceRatio ?:  string   ,            cruisingDistance ?:  string   ,            avgSpeed ?:  string   ,            avgDrivingSpeed ?:  string   ,            avgEngineSpeed ?:  string   ,            economicEngineSpeedDurationRatio ?:  string   ,            economicEngineSpeedDuration ?:  string   ,            avgEnergyConsumption ?:  string   ,            energyConsumption ?:  string   ,            drivingEnergyConsumption ?:  string   ,            drivingEnergyConsumptionRatio ?:  string   ,            idleEnergyConsumptionRatio ?:  string   ,            idleEnergyConsumption ?:  string   ,            avgAdblueConsumption ?:  string   ,            adblueConsumption ?:  string   ,            avgGrossWeight ?:  string   ,            brakeTimes ?:  number   ,            harshBrakeTimes ?:  number   ,            accelerationTimes ?:  number   ,            avgBrakeTimes ?:  number   ,            avgHarshBrakeTimes ?:  number   ,            avgAccelerationTimes ?:  number   ,            odometer ?:  string   ,            createTime ?:  string   ,            updateTime ?:  string       }
+
+
+/**
+ * 鏌ヨ杞﹁締姣忔棩鏁版嵁鍒楄〃
+ */
+export const listData:requestType = (query) => {
+    return request({
+        url: '/cwgl/data/list',
+        method:'get',
+        params:query
+    })
+}
+/**
+ * 鏌ヨ杞﹁締姣忔棩鏁版嵁璇︾粏
+ */
+export const getData:requestType = (id) => {
+    return request({
+        url: '/cwgl/data/' + id,
+        method:'get'
+    })
+}
+
+/**
+ * 鏂板杞﹁締姣忔棩鏁版嵁
+ */
+export const addData:requestType = (data) => {
+    return request({
+        url: '/cwgl/data',
+        method: 'post',
+        data
+    })
+}
+
+/**
+ * 淇敼杞﹁締姣忔棩鏁版嵁
+ */
+export const updateData:requestType = (data) => {
+    return request({
+        url: '/cwgl/data',
+        method: 'put',
+        data
+    })
+}
+
+/**
+ * 鍒犻櫎杞﹁締姣忔棩鏁版嵁
+ */
+export const delData:requestType = (id) => {
+    return request({
+        url: '/cwgl/data/' + id,
+        method: 'delete'
+    })
+}
+
+
+/**
+ * 瀵煎嚭杞﹁締姣忔棩鏁版嵁
+ */
+export const exportData:requestType = (query) => {
+    return new Promise<any>(()=>{
+        download('/cwgl/data/export',query);
+    })
+}
diff --git a/ui/admin-ui3/src/views/cwgl/data/index.vue b/ui/admin-ui3/src/views/cwgl/data/index.vue
new file mode 100644
index 0000000..50de207
--- /dev/null
+++ b/ui/admin-ui3/src/views/cwgl/data/index.vue
@@ -0,0 +1,234 @@
+<template>
+  <basicContainer >
+    <avue-crud
+        :option="option"
+        :table-loading="pageF.loading"
+        :data="tableData"
+        :page="page"
+        :permission="permissionList"
+        :before-open="beforeOpen"
+        v-model="form"
+        ref="crudRef"
+        @row-update="rowUpdate"
+        @row-save="rowSave"
+        @refresh-change="refreshChange"
+        @row-del="rowDel"
+        @search-change="searchChange"
+        @search-reset="searchReset"
+        @selection-change="selectionChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @on-load="onLoad"
+    >
+      <template #menu-left>
+        <el-button
+            type="success"
+            icon="Edit"
+            :disabled="pageF.single"
+            v-hasPermi="['cwgl:data:edit']"
+            @click="handleUpdate">淇敼
+        </el-button>
+        <el-button
+            type="danger"
+            icon="Delete"
+            :disabled="pageF.multiple"
+            @click="handleDelete"
+            v-hasPermi="['cwgl:data:remove']"
+        >鍒犻櫎
+        </el-button>
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            v-hasPermi="['cwgl:data:export']"
+        >瀵煎嚭
+        </el-button>
+      </template>
+    </avue-crud>
+  </basicContainer>
+</template>
+
+<script setup name="data" lang="ts">
+  import {DataI,addData, delData, exportData, getData, listData, updateData} from "@/api/cwgl/data";
+  import useCurrentInstance from "@/utils/useCurrentInstance";
+  import {computed,reactive, ref, toRefs} from "vue";
+  import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
+  import {usePagePlus} from "@/hooks/usePagePlus";
+  import {hasPermission} from "@/utils/permissionUtils";
+
+  const { proxy } = useCurrentInstance();
+  const crudRef = ref();
+
+  const permissionList = computed(()=>{
+    return {
+      addBtn: hasPermission(["cwgl:data:add"]),
+      delBtn: hasPermission(["cwgl:data:remove"]),
+      editBtn: hasPermission(["cwgl:data:edit"]),
+      viewBtn: hasPermission(["cwgl:data:query"]),
+    }
+  })
+
+  const data = reactive({
+    form:<DataI>{},
+    queryParams:<DataI&PageQueryInterface>{},
+    page: <PagesInterface>{
+      pageSize: 10,
+      total: 0,
+      currentPage: 1,
+    },
+    selectionList:[],
+  })
+  const {queryParams,form,page,selectionList} = toRefs(data);
+  const option = ref({
+    pageKey: 'Data',
+    rowKey: 'id',
+    column: {
+                                id: {
+          label: '涓婚敭ID',
+                            },
+                                vin: {
+          label: '杞︽灦鍙�',
+                                rules: [
+              {
+                required: true,
+                message: "杞︽灦鍙蜂笉鑳戒负绌�", trigger: "blur" }
+            ],                  },
+                                chassisType: {
+          label: '搴曠洏绫诲瀷',
+                            },
+                                eventDate: {
+          label: '鏁版嵁鏃ユ湡',
+                                rules: [
+              {
+                required: true,
+                message: "鏁版嵁鏃ユ湡涓嶈兘涓虹┖", trigger: "blur" }
+            ],                  },
+                                distance: {
+          label: '琛岄┒閲岀▼',
+                            },
+                                duration: {
+          label: '鐢ㄨ溅鏃堕暱',
+                            },
+                                shutdownDuration: {
+          label: '鐔勭伀鍋滆溅鏃堕暱',
+                            },
+                                drivingDuration: {
+          label: '琛岄┒鏃堕暱',
+                            },
+                                drivingDurationRatio: {
+          label: '琛岄┒鏃堕暱鍗犳瘮',
+                            },
+                                idleDurationRatio: {
+          label: '鎬犻�熸椂闀垮崰姣�',
+                            },
+                                idleDuration: {
+          label: '鎬犻�熸椂闀�',
+                            },
+                                coastingDistanceRatio: {
+          label: '婊戣璺濈鍗犳瘮',
+                            },
+                                coastingDistance: {
+          label: '婊戣璺濈',
+                            },
+                                cruisingDistanceRatio: {
+          label: '宸¤埅璺濈鍗犳瘮',
+                            },
+                                cruisingDistance: {
+          label: '宸¤埅璺濈',
+                            },
+                                avgSpeed: {
+          label: '骞冲潎閫熷害',
+                            },
+                                avgDrivingSpeed: {
+          label: '骞冲潎琛岃溅閫熷害',
+                            },
+                                avgEngineSpeed: {
+          label: '鍙戝姩鏈哄钩鍧囪浆閫�',
+                            },
+                                economicEngineSpeedDurationRatio: {
+          label: '缁忔祹杞�熸椂闀垮崰姣�',
+                            },
+                                economicEngineSpeedDuration: {
+          label: '缁忔祹杞�熸椂闀�',
+                            },
+                                avgEnergyConsumption: {
+          label: '鐧惧叕閲岃兘鑰�',
+                            },
+                                energyConsumption: {
+          label: '鑰楁补閲�',
+                            },
+                                drivingEnergyConsumption: {
+          label: '琛岄┒鑰楁补閲�',
+                            },
+                                drivingEnergyConsumptionRatio: {
+          label: '琛岄┒鑰楁补閲忓崰姣�',
+                            },
+                                idleEnergyConsumptionRatio: {
+          label: '鎬犻�熻�楁补閲忓崰姣�',
+                            },
+                                idleEnergyConsumption: {
+          label: '鎬犻�熻�楁补閲�',
+                            },
+                                avgAdblueConsumption: {
+          label: '鐧惧叕閲屽翱绱犳秷鑰�',
+                            },
+                                adblueConsumption: {
+          label: '灏跨礌娑堣��',
+                            },
+                                avgGrossWeight: {
+          label: '骞冲潎鏁磋溅璐ㄩ噺',
+                            },
+                                brakeTimes: {
+          label: '鍒硅溅娆℃暟',
+                            },
+                                harshBrakeTimes: {
+          label: '鎬ュ埞杞︽鏁�',
+                            },
+                                accelerationTimes: {
+          label: '鎬ュ姞閫熸鏁�',
+                            },
+                                avgBrakeTimes: {
+          label: '鐧惧叕閲屽埞杞︽鏁�',
+                            },
+                                avgHarshBrakeTimes: {
+          label: '鐧惧叕閲屾�ュ埞杞︽鏁�',
+                            },
+                                avgAccelerationTimes: {
+          label: '鐧惧叕閲屾�ュ姞閫熸鏁�',
+                            },
+                                odometer: {
+          label: '閲岀▼琛ㄩ噷绋�',
+                            },
+                                createTime: {
+          label: '鍒涘缓鏃堕棿',
+                            },
+                                updateTime: {
+          label: '鏇存柊鏃堕棿',
+                            },
+          }
+  })
+
+  const { tableData,pageF,rowSave,rowUpdate,rowDel,beforeOpen,searchChange,
+    searchReset,selectionChange,onLoad,currentChange,sizeChange,handleDelete,handleExport,handleUpdate,refreshChange} = usePagePlus({
+    form:form,
+    option:option,
+    queryParams:queryParams,
+    idKey:'id',
+    page:page.value,
+    getListApi:listData,
+    getDetailApi:getData,
+    exportApi:exportData,
+    deleteApi:delData,
+    addApi:addData,
+    updateApi:updateData,
+    handleUpdateFunc:()=>{
+      crudRef.value.rowEdit(selectionList.value[0]);
+    },
+    handleSelectionChangeFunc:(selection:any)=>{
+      selectionList.value = selection;
+    }
+  })
+
+
+</script>

--
Gitblit v1.8.0