Эх сурвалжийг харах

feat: 实现车辆资源地图驾驶统计接口

weijianghai 1 жил өмнө
parent
commit
ef78c9289f

+ 8 - 0
src/main/java/com/nokia/financeapi/controller/car/CarResourceMapController.java

@@ -4,9 +4,11 @@ import com.nokia.financeapi.common.R;
 import com.nokia.financeapi.pojo.dto.GetCarMapStatDto;
 import com.nokia.financeapi.pojo.dto.GetCarNoticeDto;
 import com.nokia.financeapi.pojo.dto.GetCarTypeStatDto;
+import com.nokia.financeapi.pojo.dto.GetDriveStatDto;
 import com.nokia.financeapi.pojo.vo.GetCarMapStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarNoticeVo;
 import com.nokia.financeapi.pojo.vo.GetCarTypeStatVo;
+import com.nokia.financeapi.pojo.vo.GetDriveStatVo;
 import com.nokia.financeapi.service.car.CarResourceMapService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -45,4 +47,10 @@ public class CarResourceMapController {
     public R<List<GetCarMapStatVo>> getCarMapStat(@Valid @RequestBody GetCarMapStatDto dto) {
         return carResourceMapService.getCarMapStat(dto);
     }
+
+    @Operation(summary = "获取车辆行驶统计")
+    @PostMapping("/getDriveStat")
+    public R<List<GetDriveStatVo>> getDriveStat(GetDriveStatDto dto) {
+        return carResourceMapService.getDriveStat(dto);
+    }
 }

+ 100 - 0
src/main/java/com/nokia/financeapi/dao/car/CarResourceMapMapper.java

@@ -3,9 +3,11 @@ package com.nokia.financeapi.dao.car;
 import com.nokia.financeapi.pojo.dto.GetCarMapStatDto;
 import com.nokia.financeapi.pojo.dto.GetCarNoticeDto;
 import com.nokia.financeapi.pojo.dto.GetCarTypeStatDto;
+import com.nokia.financeapi.pojo.dto.GetDriveStatDto;
 import com.nokia.financeapi.pojo.vo.GetCarMapStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarNoticeVo;
 import com.nokia.financeapi.pojo.vo.GetCarTypeStatVo;
+import com.nokia.financeapi.pojo.vo.GetDriveStatVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -106,6 +108,9 @@ select * from t104 order by area_name
 """)
     List<GetCarMapStatVo> getCityCarMapStat();
 
+    /**
+     * 获取某个地市各区县的车辆数量和低效数量统计
+     */
     @Select("""
 with
 t101 as (
@@ -160,4 +165,99 @@ from t103
 select * from t104 order by area_name
 """)
     List<GetCarMapStatVo> getDistrictCarMapStat(@Param("dto") GetCarMapStatDto dto);
+
+    /**
+     * 获取各个地市的行驶统计
+     */
+    @Select("""
+with
+t101 as (
+select
+    city,
+    avg(zong_li_cheng) as mileage,
+    avg(chu_qin_lv) as attendanceRate
+from
+    car.car_li_cheng_month
+where
+    year_no = (
+    select
+        max(year_no)
+    from
+        car.car_li_cheng_month)
+    and city is not null
+    and city != ''
+group by
+    city
+),
+t102 as (
+select
+    t101.*,
+    car.car_second_unit_sort.sort
+from
+    t101
+left join car.car_second_unit_sort on
+    t101.city = car.car_second_unit_sort.second_unit
+),
+t103 as (
+select
+    city as area_name,
+    round(mileage,
+    2) as mileage,
+    round(attendanceRate * 100,
+    2) as attendanceRate,
+    sort
+from
+    t102
+order by
+    sort desc
+)
+select
+    *
+from
+    t103
+""")
+    List<GetDriveStatVo> getCityDriveStat();
+
+    /**
+     * 获取某个地市各个区县的行驶统计
+     */
+    @Select("""
+with
+t101 as (
+select
+    district,
+    avg(zong_li_cheng) as mileage,
+    avg(chu_qin_lv) as attendanceRate
+from
+    car.car_li_cheng_month
+where
+    year_no = (
+    select
+        max(year_no)
+    from
+        car.car_li_cheng_month)
+    and district is not null
+    and district != ''
+    and city = #{dto.city}
+group by
+    district
+),
+t102 as (
+select
+    district as area_name,
+    round(mileage,
+    2) as mileage,
+    round(attendanceRate * 100,
+    2) as attendanceRate
+from
+    t101
+order by
+    district
+)
+select
+    *
+from
+    t102
+""")
+    List<GetDriveStatVo> getDistrictDriveStat(GetDriveStatDto dto);
 }

+ 10 - 0
src/main/java/com/nokia/financeapi/pojo/dto/GetDriveStatDto.java

@@ -0,0 +1,10 @@
+package com.nokia.financeapi.pojo.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class GetDriveStatDto {
+    @Schema(description = "地市,不传默认全省", example = "石家庄")
+    private String city;
+}

+ 16 - 0
src/main/java/com/nokia/financeapi/pojo/vo/GetDriveStatVo.java

@@ -0,0 +1,16 @@
+package com.nokia.financeapi.pojo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class GetDriveStatVo {
+    @Schema(description = "地区名称", example = "石家庄")
+    private String areaName;
+    @Schema(description = "行驶里程", example = "11.23")
+    private BigDecimal mileage;
+    @Schema(description = "出勤率", example = "22.34")
+    private BigDecimal attendanceRate;
+}

+ 11 - 0
src/main/java/com/nokia/financeapi/service/car/CarResourceMapService.java

@@ -5,9 +5,11 @@ import com.nokia.financeapi.dao.car.CarResourceMapMapper;
 import com.nokia.financeapi.pojo.dto.GetCarMapStatDto;
 import com.nokia.financeapi.pojo.dto.GetCarNoticeDto;
 import com.nokia.financeapi.pojo.dto.GetCarTypeStatDto;
+import com.nokia.financeapi.pojo.dto.GetDriveStatDto;
 import com.nokia.financeapi.pojo.vo.GetCarMapStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarNoticeVo;
 import com.nokia.financeapi.pojo.vo.GetCarTypeStatVo;
+import com.nokia.financeapi.pojo.vo.GetDriveStatVo;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
@@ -42,4 +44,13 @@ public class CarResourceMapService {
         List<GetCarMapStatVo> vo = carResourceMapMapper.getCityCarMapStat();
         return R.ok(vo);
     }
+
+    public R<List<GetDriveStatVo>> getDriveStat(GetDriveStatDto dto) {
+        if (StringUtils.hasText(dto.getCity())) {
+            List<GetDriveStatVo> vo = carResourceMapMapper.getDistrictDriveStat(dto);
+            return R.ok(vo);
+        }
+        List<GetDriveStatVo> vo = carResourceMapMapper.getCityDriveStat();
+        return R.ok(vo);
+    }
 }