459242451@qq.com 3 years ago
parent
commit
8f05d18e66
22 changed files with 698 additions and 80 deletions
  1. 1 15
      README.md
  2. 98 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/qdtl/TlElectricCarMileageController.java
  3. 19 10
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/qdtl/TlElectricDeviceController.java
  4. 5 31
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/qdtl/TlElectricDeviceLocationController.java
  5. 50 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/ElectricCarTask.java
  6. 17 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/ElectricCarArea.java
  7. 93 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/TlElectricCarMileage.java
  8. 2 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/TlElectricDeviceLocation.java
  9. 0 6
      ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/TlPlanRecord.java
  10. 61 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/mapper/TlElectricCarMileageMapper.java
  11. 5 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/mapper/TlElectricDeviceLocationMapper.java
  12. 12 10
      ruoyi-system/src/main/java/com/ruoyi/qdtl/mapper/TlElectricDeviceMapper.java
  13. 61 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlElectricCarMileageService.java
  14. 5 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlElectricDeviceLocationService.java
  15. 5 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlElectricDeviceService.java
  16. 93 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlElectricCarMileageServiceImpl.java
  17. 36 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlElectricDeviceLocationServiceImpl.java
  18. 43 0
      ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlElectricDeviceServiceImpl.java
  19. 71 0
      ruoyi-system/src/main/resources/mapper/qdtl/TlElectricCarMileageMapper.xml
  20. 14 0
      ruoyi-system/src/main/resources/mapper/qdtl/TlElectricDeviceLocationMapper.xml
  21. 6 0
      ruoyi-system/src/main/resources/mapper/qdtl/TlElectricDeviceMapper.xml
  22. 1 8
      ruoyi-system/src/main/resources/mapper/qdtl/TlPlanRecordMapper.xml

+ 1 - 15
README.md

@@ -1,18 +1,4 @@
-<h4 align="center">启东市铁路沿线监测平台系统</h4>
-
-## 平台简介
-
-若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
-
-* 前端采用Vue、Element UI。
-* 后端采用Spring Boot、Spring Security、Redis & Jwt。
-* 权限认证使用Jwt,支持多终端认证系统。
-* 支持加载动态权限菜单,多方式轻松权限控制。
-* 高效率开发,使用代码生成器可以一键生成前后端代码。
-* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。
-* 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。
-* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
-* 特别鸣谢:[element](https://github.com/ElemeFE/element),[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin),[eladmin-web](https://github.com/elunez/eladmin-web)。
+# 启东市铁路沿线监测平台系统
 
 ## 内置功能
 

+ 98 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/qdtl/TlElectricCarMileageController.java

@@ -0,0 +1,98 @@
+package com.ruoyi.web.controller.qdtl;
+
+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.common.utils.poi.ExcelUtil;
+import com.ruoyi.qdtl.domain.TlElectricCarMileage;
+import com.ruoyi.qdtl.service.ITlElectricCarMileageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 电动车里程统计(每日)Controller
+ *
+ * @author ruoyi
+ * @date 2022-07-04
+ */
+@RestController
+@RequestMapping("/qdtl/mileage")
+public class TlElectricCarMileageController extends BaseController {
+    @Autowired
+    private ITlElectricCarMileageService tlElectricCarMileageService;
+
+    /**
+     * 查询电动车里程统计(每日)列表
+     */
+    @PreAuthorize("@ss.hasPermi('qdtl:mileage:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TlElectricCarMileage tlElectricCarMileage) {
+        startPage();
+        List<TlElectricCarMileage> list = tlElectricCarMileageService.selectTlElectricCarMileageList(tlElectricCarMileage);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出电动车里程统计(每日)列表
+     */
+    @PreAuthorize("@ss.hasPermi('qdtl:mileage:export')")
+    @Log(title = "电动车里程统计(每日)", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, TlElectricCarMileage tlElectricCarMileage) {
+        List<TlElectricCarMileage> list = tlElectricCarMileageService.selectTlElectricCarMileageList(tlElectricCarMileage);
+        ExcelUtil<TlElectricCarMileage> util = new ExcelUtil<TlElectricCarMileage>(TlElectricCarMileage.class);
+        util.exportExcel(response, list, "电动车里程统计(每日)数据");
+    }
+
+    /**
+     * 获取电动车里程统计(每日)详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('qdtl:mileage:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(tlElectricCarMileageService.selectTlElectricCarMileageById(id));
+    }
+
+    /**
+     * 新增电动车里程统计(每日)
+     */
+    @PreAuthorize("@ss.hasPermi('qdtl:mileage:add')")
+    @Log(title = "电动车里程统计(每日)", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody TlElectricCarMileage tlElectricCarMileage) {
+        return toAjax(tlElectricCarMileageService.insertTlElectricCarMileage(tlElectricCarMileage));
+    }
+
+    /**
+     * 修改电动车里程统计(每日)
+     */
+    @PreAuthorize("@ss.hasPermi('qdtl:mileage:edit')")
+    @Log(title = "电动车里程统计(每日)", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody TlElectricCarMileage tlElectricCarMileage) {
+        return toAjax(tlElectricCarMileageService.updateTlElectricCarMileage(tlElectricCarMileage));
+    }
+
+    /**
+     * 删除电动车里程统计(每日)
+     */
+    @PreAuthorize("@ss.hasPermi('qdtl:mileage:remove')")
+    @Log(title = "电动车里程统计(每日)", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(tlElectricCarMileageService.deleteTlElectricCarMileageByIds(ids));
+    }
+}

+ 19 - 10
ruoyi-admin/src/main/java/com/ruoyi/web/controller/qdtl/TlElectricDeviceController.java

@@ -1,22 +1,16 @@
 package com.ruoyi.web.controller.qdtl;
 
-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.common.utils.poi.ExcelUtil;
 import com.ruoyi.qdtl.domain.TlElectricDevice;
 import com.ruoyi.qdtl.service.ITlElectricDeviceService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -51,26 +45,41 @@ public class TlElectricDeviceController extends BaseController {
         return AjaxResult.success(tlElectricDeviceService.syncDevice());
     }
 
+    @GetMapping("/queryAllList")
+    public AjaxResult queryAllList() {
+        return AjaxResult.success(tlElectricDeviceService.queryAllEnableList());
+    }
+
+    /**
+     * 巡逻车统计(根据区域分类,查询总数和在线数)
+     *
+     * @return
+     */
+    @GetMapping("/queryCarStaticByArea")
+    public AjaxResult queryCarStaticByArea() {
+        return AjaxResult.success(tlElectricDeviceService.queryCarStaticByArea());
+    }
+
     /**
      * 导出电动车定位设备列表
      */
-    @PreAuthorize("@ss.hasPermi('qdtl:device:export')")
+    /*@PreAuthorize("@ss.hasPermi('qdtl:device:export')")
     @Log(title = "电动车定位设备", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response, TlElectricDevice tlElectricDevice) {
         List<TlElectricDevice> list = tlElectricDeviceService.selectTlElectricDeviceList(tlElectricDevice);
         ExcelUtil<TlElectricDevice> util = new ExcelUtil<TlElectricDevice>(TlElectricDevice.class);
         util.exportExcel(response, list, "电动车定位设备数据");
-    }
+    }*/
 
     /**
      * 获取电动车定位设备详细信息
      */
-    @PreAuthorize("@ss.hasPermi('qdtl:device:query')")
+    /*@PreAuthorize("@ss.hasPermi('qdtl:device:query')")
     @GetMapping(value = "/{imei}")
     public AjaxResult getInfo(@PathVariable("imei") String imei) {
         return AjaxResult.success(tlElectricDeviceService.selectTlElectricDeviceByImei(imei));
-    }
+    }*/
 
     /**
      * 新增电动车定位设备

+ 5 - 31
ruoyi-admin/src/main/java/com/ruoyi/web/controller/qdtl/TlElectricDeviceLocationController.java

@@ -10,11 +10,8 @@ import com.ruoyi.qdtl.domain.TlElectricDeviceLocation;
 import com.ruoyi.qdtl.service.ITlElectricDeviceLocationService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -50,6 +47,11 @@ public class TlElectricDeviceLocationController extends BaseController {
         return AjaxResult.success();
     }
 
+    @GetMapping("/getAllElectricDetail")
+    public AjaxResult getAllElectricDetail() {
+        return AjaxResult.success(tlElectricDeviceLocationService.getAllElectricDetail());
+    }
+
     /**
      * 导出电动车定位设备轨迹列表
      */
@@ -62,32 +64,4 @@ public class TlElectricDeviceLocationController extends BaseController {
         util.exportExcel(response, list, "电动车定位设备轨迹数据");
     }
 
-    /**
-     * 获取电动车定位设备轨迹详细信息
-     */
-    @PreAuthorize("@ss.hasPermi('qdtl:location:query')")
-    @GetMapping(value = "/{id}")
-    public AjaxResult getInfo(@PathVariable("id") Long id) {
-        return AjaxResult.success(tlElectricDeviceLocationService.selectTlElectricDeviceLocationById(id));
-    }
-
-    /**
-     * 新增电动车定位设备轨迹
-     */
-    @PreAuthorize("@ss.hasPermi('qdtl:location:add')")
-    @Log(title = "电动车定位设备轨迹", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody TlElectricDeviceLocation tlElectricDeviceLocation) {
-        return toAjax(tlElectricDeviceLocationService.insertTlElectricDeviceLocation(tlElectricDeviceLocation));
-    }
-
-    /**
-     * 删除电动车定位设备轨迹
-     */
-    @PreAuthorize("@ss.hasPermi('qdtl:location:remove')")
-    @Log(title = "电动车定位设备轨迹", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable Long[] ids) {
-        return toAjax(tlElectricDeviceLocationService.deleteTlElectricDeviceLocationByIds(ids));
-    }
 }

+ 50 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/ElectricCarTask.java

@@ -1,10 +1,21 @@
 package com.ruoyi.web.controller.task;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
+import com.ruoyi.qdtl.domain.TlElectricCarMileage;
+import com.ruoyi.qdtl.domain.TlElectricDeviceLocation;
+import com.ruoyi.qdtl.service.ITlElectricCarMileageService;
 import com.ruoyi.qdtl.service.ITlElectricDeviceLocationService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * @Description: 电瓶车定位相关任务
  * @Author: huangcheng
@@ -17,6 +28,8 @@ public class ElectricCarTask {
 
     @Autowired
     private ITlElectricDeviceLocationService electricDeviceLocationService;
+    @Autowired
+    private ITlElectricCarMileageService electricCarMileageService;
 
     /**
      * 同步电动车位置信息
@@ -24,4 +37,41 @@ public class ElectricCarTask {
     public void syncLocation() {
         electricDeviceLocationService.syncDeviceLocation();
     }
+
+    /**
+     * 统计每辆车每天的里程
+     */
+    public void staticCarDayMileage() {
+        // 统计当天的里程数据。根据时间排序,计算第一条和最后一条的数据差
+        String today = DateUtil.today();
+        // 根据日期查询记录
+        List<TlElectricDeviceLocation> list = electricDeviceLocationService.queryListByDate(today);
+        // 根据设备分组
+        Map<String, List<TlElectricDeviceLocation>> collect = list.stream().collect(Collectors.groupingBy(TlElectricDeviceLocation::getImei));
+        for (Map.Entry<String, List<TlElectricDeviceLocation>> stringListEntry : collect.entrySet()) {
+            String imei = stringListEntry.getKey();
+            List<TlElectricDeviceLocation> value = stringListEntry.getValue();
+            // 计算中间的里程
+            BigDecimal mileage;
+            if (value != null && value.size() > 0) {
+                mileage = NumberUtil.sub(NumberUtil.round(value.get(value.size() - 1).getMileage(), 1), NumberUtil.round(value.get(0).getMileage(), 1));
+                // 先根据imei和日期查询
+                TlElectricCarMileage electricCarMileage = new TlElectricCarMileage();
+                electricCarMileage.setImei(imei);
+                electricCarMileage.setDays(today);
+                List<TlElectricCarMileage> tlElectricCarMileages = electricCarMileageService.selectTlElectricCarMileageList(electricCarMileage);
+                electricCarMileage.setDeviceName(value.get(0).getDeviceName());
+                electricCarMileage.setMileage(Convert.toStr(mileage));
+                if (tlElectricCarMileages == null || tlElectricCarMileages.size() == 0) {
+                    // 新增
+                    electricCarMileageService.insertTlElectricCarMileage(electricCarMileage);
+                } else {
+                    // 更新
+                    electricCarMileage.setId(tlElectricCarMileages.get(0).getId());
+                    electricCarMileageService.updateTlElectricCarMileage(electricCarMileage);
+                }
+            }
+        }
+    }
+
 }

+ 17 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/ElectricCarArea.java

@@ -0,0 +1,17 @@
+package com.ruoyi.qdtl.domain;
+
+import lombok.Data;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2022/7/4
+ * @Version V1.0
+ */
+@Data
+public class ElectricCarArea {
+    private Long areaId;
+    private String areaName;
+    private String totalCar;
+    private String onlineCar;
+}

+ 93 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/TlElectricCarMileage.java

@@ -0,0 +1,93 @@
+package com.ruoyi.qdtl.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 电动车里程统计(每日)对象 tl_electric_car_mileage
+ * 
+ * @author ruoyi
+ * @date 2022-07-04
+ */
+public class TlElectricCarMileage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** id */
+    private Long id;
+
+    /** 设备IMEI */
+    @Excel(name = "设备IMEI")
+    private String imei;
+
+    /** 设备名称 */
+    @Excel(name = "设备名称")
+    private String deviceName;
+
+    /** 日期 */
+    @Excel(name = "日期")
+    private String days;
+
+    /** 里程数 */
+    @Excel(name = "里程数")
+    private String mileage;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setImei(String imei) 
+    {
+        this.imei = imei;
+    }
+
+    public String getImei() 
+    {
+        return imei;
+    }
+    public void setDeviceName(String deviceName) 
+    {
+        this.deviceName = deviceName;
+    }
+
+    public String getDeviceName() 
+    {
+        return deviceName;
+    }
+    public void setDays(String days) 
+    {
+        this.days = days;
+    }
+
+    public String getDays() 
+    {
+        return days;
+    }
+    public void setMileage(String mileage) 
+    {
+        this.mileage = mileage;
+    }
+
+    public String getMileage() 
+    {
+        return mileage;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("imei", getImei())
+            .append("deviceName", getDeviceName())
+            .append("days", getDays())
+            .append("mileage", getMileage())
+            .toString();
+    }
+}

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/TlElectricDeviceLocation.java

@@ -129,4 +129,6 @@ public class TlElectricDeviceLocation extends BaseEntity {
     @Excel(name = "里程统计")
     private String mileage;
 
+    private String dayMileage;
+
 }

+ 0 - 6
ruoyi-system/src/main/java/com/ruoyi/qdtl/domain/TlPlanRecord.java

@@ -43,12 +43,6 @@ public class TlPlanRecord extends BaseEntity {
     private String planName;
 
     /**
-     * 人员id
-     */
-    @Excel(name = "人员id")
-    private Long userId;
-
-    /**
      * 人员姓名
      */
     @Excel(name = "人员姓名")

+ 61 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/mapper/TlElectricCarMileageMapper.java

@@ -0,0 +1,61 @@
+package com.ruoyi.qdtl.mapper;
+
+import java.util.List;
+import com.ruoyi.qdtl.domain.TlElectricCarMileage;
+
+/**
+ * 电动车里程统计(每日)Mapper接口
+ * 
+ * @author ruoyi
+ * @date 2022-07-04
+ */
+public interface TlElectricCarMileageMapper 
+{
+    /**
+     * 查询电动车里程统计(每日)
+     * 
+     * @param id 电动车里程统计(每日)主键
+     * @return 电动车里程统计(每日)
+     */
+    public TlElectricCarMileage selectTlElectricCarMileageById(Long id);
+
+    /**
+     * 查询电动车里程统计(每日)列表
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 电动车里程统计(每日)集合
+     */
+    public List<TlElectricCarMileage> selectTlElectricCarMileageList(TlElectricCarMileage tlElectricCarMileage);
+
+    /**
+     * 新增电动车里程统计(每日)
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 结果
+     */
+    public int insertTlElectricCarMileage(TlElectricCarMileage tlElectricCarMileage);
+
+    /**
+     * 修改电动车里程统计(每日)
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 结果
+     */
+    public int updateTlElectricCarMileage(TlElectricCarMileage tlElectricCarMileage);
+
+    /**
+     * 删除电动车里程统计(每日)
+     * 
+     * @param id 电动车里程统计(每日)主键
+     * @return 结果
+     */
+    public int deleteTlElectricCarMileageById(Long id);
+
+    /**
+     * 批量删除电动车里程统计(每日)
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteTlElectricCarMileageByIds(Long[] ids);
+}

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/mapper/TlElectricDeviceLocationMapper.java

@@ -1,6 +1,7 @@
 package com.ruoyi.qdtl.mapper;
 
 import com.ruoyi.qdtl.domain.TlElectricDeviceLocation;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -52,4 +53,8 @@ public interface TlElectricDeviceLocationMapper {
     public int deleteTlElectricDeviceLocationByIds(Long[] ids);
 
     void saveBatch(List<TlElectricDeviceLocation> electricCarsDeviceLocationList);
+
+    List<TlElectricDeviceLocation> queryListByDate(@Param("today") String today);
+
+    List<TlElectricDeviceLocation> queryMaxNewDevice();
 }

+ 12 - 10
ruoyi-system/src/main/java/com/ruoyi/qdtl/mapper/TlElectricDeviceMapper.java

@@ -1,19 +1,19 @@
 package com.ruoyi.qdtl.mapper;
 
-import java.util.List;
 import com.ruoyi.qdtl.domain.TlElectricDevice;
 
+import java.util.List;
+
 /**
  * 电动车定位设备Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2022-06-03
  */
-public interface TlElectricDeviceMapper 
-{
+public interface TlElectricDeviceMapper {
     /**
      * 查询电动车定位设备
-     * 
+     *
      * @param imei 电动车定位设备主键
      * @return 电动车定位设备
      */
@@ -21,7 +21,7 @@ public interface TlElectricDeviceMapper
 
     /**
      * 查询电动车定位设备列表
-     * 
+     *
      * @param tlElectricDevice 电动车定位设备
      * @return 电动车定位设备集合
      */
@@ -29,7 +29,7 @@ public interface TlElectricDeviceMapper
 
     /**
      * 新增电动车定位设备
-     * 
+     *
      * @param tlElectricDevice 电动车定位设备
      * @return 结果
      */
@@ -37,7 +37,7 @@ public interface TlElectricDeviceMapper
 
     /**
      * 修改电动车定位设备
-     * 
+     *
      * @param tlElectricDevice 电动车定位设备
      * @return 结果
      */
@@ -45,7 +45,7 @@ public interface TlElectricDeviceMapper
 
     /**
      * 删除电动车定位设备
-     * 
+     *
      * @param imei 电动车定位设备主键
      * @return 结果
      */
@@ -53,9 +53,11 @@ public interface TlElectricDeviceMapper
 
     /**
      * 批量删除电动车定位设备
-     * 
+     *
      * @param imeis 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteTlElectricDeviceByImeis(String[] imeis);
+
+    List<TlElectricDevice> queryAllEnableList();
 }

+ 61 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlElectricCarMileageService.java

@@ -0,0 +1,61 @@
+package com.ruoyi.qdtl.service;
+
+import java.util.List;
+import com.ruoyi.qdtl.domain.TlElectricCarMileage;
+
+/**
+ * 电动车里程统计(每日)Service接口
+ * 
+ * @author ruoyi
+ * @date 2022-07-04
+ */
+public interface ITlElectricCarMileageService 
+{
+    /**
+     * 查询电动车里程统计(每日)
+     * 
+     * @param id 电动车里程统计(每日)主键
+     * @return 电动车里程统计(每日)
+     */
+    public TlElectricCarMileage selectTlElectricCarMileageById(Long id);
+
+    /**
+     * 查询电动车里程统计(每日)列表
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 电动车里程统计(每日)集合
+     */
+    public List<TlElectricCarMileage> selectTlElectricCarMileageList(TlElectricCarMileage tlElectricCarMileage);
+
+    /**
+     * 新增电动车里程统计(每日)
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 结果
+     */
+    public int insertTlElectricCarMileage(TlElectricCarMileage tlElectricCarMileage);
+
+    /**
+     * 修改电动车里程统计(每日)
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 结果
+     */
+    public int updateTlElectricCarMileage(TlElectricCarMileage tlElectricCarMileage);
+
+    /**
+     * 批量删除电动车里程统计(每日)
+     * 
+     * @param ids 需要删除的电动车里程统计(每日)主键集合
+     * @return 结果
+     */
+    public int deleteTlElectricCarMileageByIds(Long[] ids);
+
+    /**
+     * 删除电动车里程统计(每日)信息
+     * 
+     * @param id 电动车里程统计(每日)主键
+     * @return 结果
+     */
+    public int deleteTlElectricCarMileageById(Long id);
+}

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlElectricDeviceLocationService.java

@@ -3,6 +3,7 @@ package com.ruoyi.qdtl.service;
 import com.ruoyi.qdtl.domain.TlElectricDeviceLocation;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 电动车定位设备轨迹Service接口
@@ -57,4 +58,8 @@ public interface ITlElectricDeviceLocationService {
      * @return
      */
     void syncDeviceLocation();
+
+    List<TlElectricDeviceLocation> queryListByDate(String today);
+
+    Map<String, Object> getAllElectricDetail();
 }

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/ITlElectricDeviceService.java

@@ -1,5 +1,6 @@
 package com.ruoyi.qdtl.service;
 
+import com.ruoyi.qdtl.domain.ElectricCarArea;
 import com.ruoyi.qdtl.domain.TlElectricDevice;
 
 import java.util.List;
@@ -65,4 +66,8 @@ public interface ITlElectricDeviceService {
      * @return
      */
     String syncDevice();
+
+    List<TlElectricDevice> queryAllEnableList();
+
+    List<ElectricCarArea> queryCarStaticByArea();
 }

+ 93 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlElectricCarMileageServiceImpl.java

@@ -0,0 +1,93 @@
+package com.ruoyi.qdtl.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.ruoyi.qdtl.mapper.TlElectricCarMileageMapper;
+import com.ruoyi.qdtl.domain.TlElectricCarMileage;
+import com.ruoyi.qdtl.service.ITlElectricCarMileageService;
+
+/**
+ * 电动车里程统计(每日)Service业务层处理
+ * 
+ * @author ruoyi
+ * @date 2022-07-04
+ */
+@Service
+public class TlElectricCarMileageServiceImpl implements ITlElectricCarMileageService 
+{
+    @Autowired
+    private TlElectricCarMileageMapper tlElectricCarMileageMapper;
+
+    /**
+     * 查询电动车里程统计(每日)
+     * 
+     * @param id 电动车里程统计(每日)主键
+     * @return 电动车里程统计(每日)
+     */
+    @Override
+    public TlElectricCarMileage selectTlElectricCarMileageById(Long id)
+    {
+        return tlElectricCarMileageMapper.selectTlElectricCarMileageById(id);
+    }
+
+    /**
+     * 查询电动车里程统计(每日)列表
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 电动车里程统计(每日)
+     */
+    @Override
+    public List<TlElectricCarMileage> selectTlElectricCarMileageList(TlElectricCarMileage tlElectricCarMileage)
+    {
+        return tlElectricCarMileageMapper.selectTlElectricCarMileageList(tlElectricCarMileage);
+    }
+
+    /**
+     * 新增电动车里程统计(每日)
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 结果
+     */
+    @Override
+    public int insertTlElectricCarMileage(TlElectricCarMileage tlElectricCarMileage)
+    {
+        return tlElectricCarMileageMapper.insertTlElectricCarMileage(tlElectricCarMileage);
+    }
+
+    /**
+     * 修改电动车里程统计(每日)
+     * 
+     * @param tlElectricCarMileage 电动车里程统计(每日)
+     * @return 结果
+     */
+    @Override
+    public int updateTlElectricCarMileage(TlElectricCarMileage tlElectricCarMileage)
+    {
+        return tlElectricCarMileageMapper.updateTlElectricCarMileage(tlElectricCarMileage);
+    }
+
+    /**
+     * 批量删除电动车里程统计(每日)
+     * 
+     * @param ids 需要删除的电动车里程统计(每日)主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTlElectricCarMileageByIds(Long[] ids)
+    {
+        return tlElectricCarMileageMapper.deleteTlElectricCarMileageByIds(ids);
+    }
+
+    /**
+     * 删除电动车里程统计(每日)信息
+     * 
+     * @param id 电动车里程统计(每日)主键
+     * @return 结果
+     */
+    @Override
+    public int deleteTlElectricCarMileageById(Long id)
+    {
+        return tlElectricCarMileageMapper.deleteTlElectricCarMileageById(id);
+    }
+}

+ 36 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlElectricDeviceLocationServiceImpl.java

@@ -1,15 +1,21 @@
 package com.ruoyi.qdtl.service.impl;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
+import com.ruoyi.qdtl.domain.TlElectricCarMileage;
 import com.ruoyi.qdtl.domain.TlElectricDeviceLocation;
 import com.ruoyi.qdtl.mapper.TlElectricDeviceLocationMapper;
 import com.ruoyi.qdtl.service.IQdCommonService;
+import com.ruoyi.qdtl.service.ITlElectricCarMileageService;
 import com.ruoyi.qdtl.service.ITlElectricDeviceLocationService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -24,6 +30,8 @@ public class TlElectricDeviceLocationServiceImpl implements ITlElectricDeviceLoc
     @Autowired
     private TlElectricDeviceLocationMapper tlElectricDeviceLocationMapper;
     @Autowired
+    private ITlElectricCarMileageService electricCarMileageService;
+    @Autowired
     private IQdCommonService qdCommonService;
 
     /**
@@ -90,4 +98,32 @@ public class TlElectricDeviceLocationServiceImpl implements ITlElectricDeviceLoc
         }
         log.info("同步最新的定位数据量:{}条", electricCarsDeviceLocationList.size());
     }
+
+    @Override
+    public List<TlElectricDeviceLocation> queryListByDate(String today) {
+        return tlElectricDeviceLocationMapper.queryListByDate(today);
+    }
+
+    @Override
+    public Map<String, Object> getAllElectricDetail() {
+        Map<String, Object> result = new HashMap(4);
+        List<TlElectricDeviceLocation> list = tlElectricDeviceLocationMapper.queryMaxNewDevice();
+        // 在线数
+        long count = list.stream().filter(a -> StrUtil.equals(a.getStatus(), "1")).count();
+        // 查询当天的里程数
+        TlElectricCarMileage tlElectricCarMileage = new TlElectricCarMileage();
+        tlElectricCarMileage.setDays(DateUtil.today());
+        List<TlElectricCarMileage> tlElectricCarMileages = electricCarMileageService.selectTlElectricCarMileageList(tlElectricCarMileage);
+        Map<String, String> collect = tlElectricCarMileages.stream().collect(Collectors.toMap(TlElectricCarMileage::getImei, TlElectricCarMileage::getMileage));
+        for (TlElectricDeviceLocation tlElectricDeviceLocation : list) {
+            tlElectricDeviceLocation.setDayMileage(collect.getOrDefault(tlElectricDeviceLocation.getImei(), "0"));
+        }
+        // 总设备数
+        result.put("totalCar", list.size());
+        // 在线率
+        result.put("onlinePercent", NumberUtil.formatPercent(NumberUtil.div(count, list.size()), 1));
+        // 详情
+        result.put("detail", list);
+        return result;
+    }
 }

+ 43 - 0
ruoyi-system/src/main/java/com/ruoyi/qdtl/service/impl/TlElectricDeviceServiceImpl.java

@@ -3,16 +3,24 @@ package com.ruoyi.qdtl.service.impl;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.StrUtil;
+import com.ruoyi.qdtl.domain.ElectricCarArea;
+import com.ruoyi.qdtl.domain.TlArea;
 import com.ruoyi.qdtl.domain.TlElectricDevice;
+import com.ruoyi.qdtl.domain.TlElectricDeviceLocation;
+import com.ruoyi.qdtl.mapper.TlElectricDeviceLocationMapper;
 import com.ruoyi.qdtl.mapper.TlElectricDeviceMapper;
 import com.ruoyi.qdtl.service.IQdCommonService;
+import com.ruoyi.qdtl.service.ITlAreaService;
+import com.ruoyi.qdtl.service.ITlElectricDeviceLocationService;
 import com.ruoyi.qdtl.service.ITlElectricDeviceService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -27,6 +35,12 @@ public class TlElectricDeviceServiceImpl implements ITlElectricDeviceService {
     private TlElectricDeviceMapper tlElectricDeviceMapper;
     @Autowired
     private IQdCommonService qdCommonService;
+    @Autowired
+    private ITlAreaService areaService;
+    @Autowired
+    private ITlElectricDeviceLocationService electricDeviceLocationService;
+    @Autowired
+    private TlElectricDeviceLocationMapper tlElectricDeviceLocationMapper;
 
     /**
      * 查询电动车定位设备
@@ -128,4 +142,33 @@ public class TlElectricDeviceServiceImpl implements ITlElectricDeviceService {
                 "条;共新增数量", Convert.toStr(addSum),
                 "条;共更新数量", Convert.toStr(updateSum), "条。");
     }
+
+    @Override
+    public List<TlElectricDevice> queryAllEnableList() {
+        return tlElectricDeviceMapper.queryAllEnableList();
+    }
+
+    @Override
+    public List<ElectricCarArea> queryCarStaticByArea() {
+        List<ElectricCarArea> result = new ArrayList<>();
+        TlArea tlArea = new TlArea();
+        tlArea.setAreaType("1");
+        List<TlArea> areas = areaService.selectTlAreaList(tlArea);
+        List<TlElectricDeviceLocation> list = tlElectricDeviceLocationMapper.queryMaxNewDevice();
+        // 在线数
+        Map<String, List<TlElectricDeviceLocation>> onlineCollect = list.stream().filter(a -> StrUtil.equals(a.getStatus(), "1")).collect(Collectors.groupingBy(a -> StrUtil.sub(a.getDeviceName(), 0, 3)));
+        // 设备数量
+        List<TlElectricDevice> tlElectricDevices = this.queryAllEnableList();
+        Map<String, List<TlElectricDevice>> collect = tlElectricDevices.stream().collect(Collectors.groupingBy(a -> StrUtil.sub(a.getDeviceName(), 0, 3)));
+        for (TlArea area : areas) {
+            ElectricCarArea electricCarArea = new ElectricCarArea();
+            electricCarArea.setAreaId(area.getId());
+            electricCarArea.setAreaName(area.getAreaName());
+            // 查询每个区域总数
+            electricCarArea.setTotalCar(collect.get(area.getAreaName()) == null ? "0" : Convert.toStr(collect.get(area.getAreaName()).size()));
+            electricCarArea.setOnlineCar(onlineCollect.get(area.getAreaName()) == null ? "0" : Convert.toStr(onlineCollect.get(area.getAreaName()).size()));
+            result.add(electricCarArea);
+        }
+        return result;
+    }
 }

+ 71 - 0
ruoyi-system/src/main/resources/mapper/qdtl/TlElectricCarMileageMapper.xml

@@ -0,0 +1,71 @@
+<?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.qdtl.mapper.TlElectricCarMileageMapper">
+    
+    <resultMap type="TlElectricCarMileage" id="TlElectricCarMileageResult">
+        <result property="id"    column="id"    />
+        <result property="imei"    column="imei"    />
+        <result property="deviceName"    column="device_name"    />
+        <result property="days"    column="days"    />
+        <result property="mileage"    column="mileage"    />
+    </resultMap>
+
+    <sql id="selectTlElectricCarMileageVo">
+        select id, imei, device_name, days, mileage from tl_electric_car_mileage
+    </sql>
+
+    <select id="selectTlElectricCarMileageList" parameterType="TlElectricCarMileage" resultMap="TlElectricCarMileageResult">
+        <include refid="selectTlElectricCarMileageVo"/>
+        <where>  
+            <if test="imei != null  and imei != ''"> and imei = #{imei}</if>
+            <if test="deviceName != null  and deviceName != ''"> and device_name like concat('%', #{deviceName}, '%')</if>
+            <if test="days != null  and days != ''"> and days = #{days}</if>
+            <if test="mileage != null  and mileage != ''"> and mileage = #{mileage}</if>
+        </where>
+    </select>
+    
+    <select id="selectTlElectricCarMileageById" parameterType="Long" resultMap="TlElectricCarMileageResult">
+        <include refid="selectTlElectricCarMileageVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertTlElectricCarMileage" parameterType="TlElectricCarMileage" useGeneratedKeys="true" keyProperty="id">
+        insert into tl_electric_car_mileage
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="imei != null">imei,</if>
+            <if test="deviceName != null">device_name,</if>
+            <if test="days != null">days,</if>
+            <if test="mileage != null">mileage,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="imei != null">#{imei},</if>
+            <if test="deviceName != null">#{deviceName},</if>
+            <if test="days != null">#{days},</if>
+            <if test="mileage != null">#{mileage},</if>
+         </trim>
+    </insert>
+
+    <update id="updateTlElectricCarMileage" parameterType="TlElectricCarMileage">
+        update tl_electric_car_mileage
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="imei != null">imei = #{imei},</if>
+            <if test="deviceName != null">device_name = #{deviceName},</if>
+            <if test="days != null">days = #{days},</if>
+            <if test="mileage != null">mileage = #{mileage},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteTlElectricCarMileageById" parameterType="Long">
+        delete from tl_electric_car_mileage where id = #{id}
+    </delete>
+
+    <delete id="deleteTlElectricCarMileageByIds" parameterType="String">
+        delete from tl_electric_car_mileage where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 14 - 0
ruoyi-system/src/main/resources/mapper/qdtl/TlElectricDeviceLocationMapper.xml

@@ -78,6 +78,20 @@
         where id = #{id}
     </select>
 
+    <select id="queryListByDate" resultMap="TlElectricDeviceLocationResult">
+        <include refid="selectTlElectricDeviceLocationVo"/>
+        where date_format(gps_time,'%Y-%m-%d') = #{today} order by id
+    </select>
+
+    <select id="queryMaxNewDevice" resultMap="TlElectricDeviceLocationResult">
+        select r.*
+        from (
+                 select imei, max(id) id
+                 from tl_electric_device_location
+                 group by imei) t
+                 left join tl_electric_device_location r on t.imei = r.imei and t.id = r.id
+    </select>
+
     <insert id="insertTlElectricDeviceLocation" parameterType="TlElectricDeviceLocation" useGeneratedKeys="true" keyProperty="id">
         insert into tl_electric_device_location
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 6 - 0
ruoyi-system/src/main/resources/mapper/qdtl/TlElectricDeviceMapper.xml

@@ -75,6 +75,12 @@
         where imei = #{imei}
     </select>
 
+    <select id="queryAllEnableList" resultMap="TlElectricDeviceResult">
+        <include refid="selectTlElectricDeviceVo"/>
+        where expiration is not null
+        order by device_name asc
+    </select>
+
     <insert id="insertTlElectricDevice" parameterType="TlElectricDevice">
         insert into tl_electric_device
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 1 - 8
ruoyi-system/src/main/resources/mapper/qdtl/TlPlanRecordMapper.xml

@@ -11,7 +11,6 @@
         <result property="startTime" column="start_time"/>
         <result property="endTime" column="end_time"/>
         <result property="planName" column="plan_name"/>
-        <result property="userId" column="user_id"/>
         <result property="nickName" column="nick_name"/>
         <result property="card" column="card"/>
         <result property="checkpointCard" column="checkpoint_card"/>
@@ -31,7 +30,6 @@
                start_time,
                end_time,
                plan_name,
-               user_id,
                nick_name,
                card,
                checkpoint_card,
@@ -51,7 +49,6 @@
             <if test="planId != null ">and plan_id = #{planId}</if>
             <if test="planDate != null  and planDate != ''">and plan_date = #{planDate}</if>
             <if test="planName != null  and planName != ''">and plan_name like concat('%', #{planName}, '%')</if>
-            <if test="userId != null ">and user_id = #{userId}</if>
             <if test="nickName != null  and nickName != ''">and nick_name like concat('%', #{nickName}, '%')</if>
             <if test="card != null  and card != ''">and card = #{card}</if>
             <if test="checkpointCard != null  and checkpointCard != ''">and checkpoint_card = #{checkpointCard}</if>
@@ -89,7 +86,6 @@
             <if test="startTime != null">start_time,</if>
             <if test="endTime != null">end_time,</if>
             <if test="planName != null">plan_name,</if>
-            <if test="userId != null">user_id,</if>
             <if test="nickName != null">nick_name,</if>
             <if test="card != null">card,</if>
             <if test="checkpointCard != null">checkpoint_card,</if>
@@ -104,7 +100,6 @@
             <if test="startTime != null">#{startTime},</if>
             <if test="endTime != null">#{endTime},</if>
             <if test="planName != null">#{planName},</if>
-            <if test="userId != null">#{userId},</if>
             <if test="nickName != null">#{nickName},</if>
             <if test="card != null">#{card},</if>
             <if test="checkpointCard != null">#{checkpointCard},</if>
@@ -117,7 +112,7 @@
 
     <insert id="batchInsert">
         insert into tl_plan_record
-        (plan_id, plan_date, start_time, end_time, plan_name, user_id, nick_name, card, checkpoint_card, score, line_id, line_name, area_id)
+        (plan_id, plan_date, start_time, end_time, plan_name, nick_name, card, checkpoint_card, score, line_id, line_name, area_id)
         values
         <foreach collection="list" item="item" separator=",">
             (
@@ -126,7 +121,6 @@
             #{item.startTime},
             #{item.endTime},
             #{item.planName},
-            #{item.userId},
             #{item.nickName},
             #{item.card},
             #{item.checkpointCard},
@@ -144,7 +138,6 @@
             <if test="planId != null">plan_id = #{planId},</if>
             <if test="planDate != null">plan_date = #{planDate},</if>
             <if test="planName != null">plan_name = #{planName},</if>
-            <if test="userId != null">user_id = #{userId},</if>
             <if test="nickName != null">nick_name = #{nickName},</if>
             <if test="card != null">card = #{card},</if>
             <if test="checkpointCard != null">checkpoint_card = #{checkpointCard},</if>