Procházet zdrojové kódy

feat: 实现车辆资源地图费用统计接口

weijianghai před 1 rokem
rodič
revize
e7828779cf

+ 9 - 1
src/main/java/com/nokia/financeapi/controller/car/CarResourceMapController.java

@@ -1,10 +1,12 @@
 package com.nokia.financeapi.controller.car;
 
 import com.nokia.financeapi.common.R;
+import com.nokia.financeapi.pojo.dto.GetCarCostStatDto;
 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.GetCarCostStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarMapStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarNoticeVo;
 import com.nokia.financeapi.pojo.vo.GetCarTypeStatVo;
@@ -50,7 +52,13 @@ public class CarResourceMapController {
 
     @Operation(summary = "获取车辆行驶统计")
     @PostMapping("/getDriveStat")
-    public R<List<GetDriveStatVo>> getDriveStat(GetDriveStatDto dto) {
+    public R<List<GetDriveStatVo>> getDriveStat(@Valid @RequestBody GetDriveStatDto dto) {
         return carResourceMapService.getDriveStat(dto);
     }
+
+    @Operation(summary = "获取车辆费用统计")
+    @PostMapping("/getCarCostStat")
+    public R<List<GetCarCostStatVo>> getCarCostStat(@Valid @RequestBody GetCarCostStatDto dto) {
+        return carResourceMapService.getCarCostStat(dto);
+    }
 }

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

@@ -1,9 +1,11 @@
 package com.nokia.financeapi.dao.car;
 
+import com.nokia.financeapi.pojo.dto.GetCarCostStatDto;
 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.GetCarCostStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarMapStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarNoticeVo;
 import com.nokia.financeapi.pojo.vo.GetCarTypeStatVo;
@@ -259,5 +261,102 @@ select
 from
     t102
 """)
-    List<GetDriveStatVo> getDistrictDriveStat(GetDriveStatDto dto);
+    List<GetDriveStatVo> getDistrictDriveStat(@Param("dto") GetDriveStatDto dto);
+
+    /**
+     * 获取各个地市的费用统计
+     */
+    @Select("""
+with
+t101 as (
+select
+    city,
+    sum(zong_fei_yong) as cost_sum,
+    avg(zong_fei_yong) as cost_avg
+from
+    car.car_fei_yong_month
+where
+    year_no = (
+    select
+        max(year_no)
+    from
+        car.car_fei_yong_month)
+    and city is not null
+    and city != ''
+    and rui_xing = 1
+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(cost_sum,
+    2) as cost_sum,
+    round(cost_avg,
+    2) as cost_avg,
+    sort
+from
+    t102
+order by
+    sort desc
+)
+select
+    *
+from
+    t103
+""")
+    List<GetCarCostStatVo> getCityCostStat();
+
+    /**
+     * 获取某个地市各个区县的费用统计
+     */
+    @Select("""
+with
+t101 as (
+select
+    district,
+    sum(zong_fei_yong) as cost_sum,
+    avg(zong_fei_yong) as cost_avg
+from
+    car.car_fei_yong_month
+where
+    year_no = (
+    select
+        max(year_no)
+    from
+        car.car_fei_yong_month)
+    and district is not null
+    and district != ''
+    and rui_xing = 1
+    and city = #{dto.city}
+group by
+    district
+),
+t102 as (
+select
+    district as area_name,
+    round(cost_sum,
+    2) as cost_sum,
+    round(cost_avg,
+    2) as cost_avg
+from
+    t101
+order by
+    district
+)
+select
+    *
+from
+    t102
+""")
+    List<GetCarCostStatVo> getDistrictCostStat(@Param("dto") GetCarCostStatDto dto);
 }

+ 1 - 1
src/main/java/com/nokia/financeapi/dao/house/AreaDao.java

@@ -11,6 +11,6 @@ public interface AreaDao {
     /**
      * 获取所有地区
      */
-    @Select("select * from house.area order by area_id")
+    @Select("select * from common.area order by area_id")
     List<AreaPo> getAll();
 }

+ 10 - 0
src/main/java/com/nokia/financeapi/pojo/dto/GetCarCostStatDto.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 GetCarCostStatDto {
+    @Schema(description = "地市,不传默认全省", example = "石家庄")
+    private String city;
+}

+ 16 - 0
src/main/java/com/nokia/financeapi/pojo/vo/GetCarCostStatVo.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 GetCarCostStatVo {
+    @Schema(description = "地区名称", example = "石家庄")
+    private String areaName;
+    @Schema(description = "总费用", example = "11.23")
+    private BigDecimal costSum;
+    @Schema(description = "单车费用", example = "22.34")
+    private BigDecimal costAvg;
+}

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

@@ -2,10 +2,12 @@ package com.nokia.financeapi.service.car;
 
 import com.nokia.financeapi.common.R;
 import com.nokia.financeapi.dao.car.CarResourceMapMapper;
+import com.nokia.financeapi.pojo.dto.GetCarCostStatDto;
 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.GetCarCostStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarMapStatVo;
 import com.nokia.financeapi.pojo.vo.GetCarNoticeVo;
 import com.nokia.financeapi.pojo.vo.GetCarTypeStatVo;
@@ -53,4 +55,13 @@ public class CarResourceMapService {
         List<GetDriveStatVo> vo = carResourceMapMapper.getCityDriveStat();
         return R.ok(vo);
     }
+
+    public R<List<GetCarCostStatVo>> getCarCostStat(GetCarCostStatDto dto) {
+        if (StringUtils.hasText(dto.getCity())) {
+            List<GetCarCostStatVo> vo = carResourceMapMapper.getDistrictCostStat(dto);
+            return R.ok(vo);
+        }
+        List<GetCarCostStatVo> vo = carResourceMapMapper.getCityCostStat();
+        return R.ok(vo);
+    }
 }