From 49485a7ac11447f6d805d517d7ebdcb8f195d579 Mon Sep 17 00:00:00 2001 From: dbc <1251865348@qq.com> Date: Sat, 22 Nov 2025 20:21:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E7=AB=8B=E4=BA=86MapLyStatis?= =?UTF-8?q?tic=E5=8C=85=EF=BC=8C=E5=9C=A8=E9=87=8C=E9=9D=A2=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E5=AE=9E=E7=8E=B0=E4=BA=86=E4=B8=80=E4=BA=9B=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E3=80=82=E6=A0=B8=E5=BF=83=E9=80=BB=E8=BE=91=E6=98=AF?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E4=B8=80=E4=B8=AAbaseservice=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=AF=8F=E4=B8=AA=E4=BB=BB=E5=8A=A1=E4=B8=8B=E7=9A=84?= =?UTF-8?q?=E5=90=84=E8=A1=A8=EF=BC=8C=E7=9B=AE=E5=89=8D=E5=8F=AA=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=BA=86=E5=AF=B9=E5=B0=8F=E7=8F=AD=E7=9A=84=E5=8C=BA?= =?UTF-8?q?=E7=BA=A7=E6=9F=A5=E8=AF=A2=E3=80=82=E8=A1=97=E9=81=93=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=90=8C=E7=90=86=E5=8F=AF=E4=BB=A5=E5=85=88=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E5=87=BA=E8=A6=81=E6=9F=A5=E8=AF=A2=E7=9A=84=E8=A1=97?= =?UTF-8?q?=E9=81=93=E5=86=8D=E8=B0=83=E7=94=A8baseservice=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E8=BF=9B=E8=A1=8C=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../whu/edu/LyStatistic/BootApplication.java | 2 +- .../Controller/StatisticsController.java | 74 ++++++++++++ .../MapLyStatistic/Dto/DistrictStatsDTO.java | 16 +++ .../MapLyStatistic/Dto/PlotStatsDTO.java | 20 ++++ .../MapLyStatistic/Dto/UnitInfo.java | 12 ++ .../MapLyStatistic/Mapper/InfoMapper.java | 15 +++ .../Mapper/TaskCommonMapper.java | 41 +++++++ .../BaseService/BaseTaskQueryService.java | 63 ++++++++++ .../Service/StatisticsService.java | 111 ++++++++++++++++++ .../{statistic => }/Util/ApiResponse.java | 2 +- .../statistic/config/CorsConfig.java | 28 ----- .../controller/StatisticController.java | 2 +- src/main/resources/application.properties | 4 +- .../resources/mapper/MapLyStatistic/Info.xml | 25 ++++ .../MapLyStatistic/TaskCommonMapper.xml | 43 +++++++ 15 files changed, 425 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Controller/StatisticsController.java create mode 100644 src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/DistrictStatsDTO.java create mode 100644 src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/PlotStatsDTO.java create mode 100644 src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/UnitInfo.java create mode 100644 src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Mapper/InfoMapper.java create mode 100644 src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Mapper/TaskCommonMapper.java create mode 100644 src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Service/BaseService/BaseTaskQueryService.java create mode 100644 src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Service/StatisticsService.java rename src/main/java/com/whu/edu/LyStatistic/{statistic => }/Util/ApiResponse.java (94%) delete mode 100644 src/main/java/com/whu/edu/LyStatistic/statistic/config/CorsConfig.java create mode 100644 src/main/resources/mapper/MapLyStatistic/Info.xml create mode 100644 src/main/resources/mapper/MapLyStatistic/TaskCommonMapper.xml diff --git a/src/main/java/com/whu/edu/LyStatistic/BootApplication.java b/src/main/java/com/whu/edu/LyStatistic/BootApplication.java index 1ab082c..64c7ab0 100644 --- a/src/main/java/com/whu/edu/LyStatistic/BootApplication.java +++ b/src/main/java/com/whu/edu/LyStatistic/BootApplication.java @@ -5,7 +5,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -@MapperScan("com.whu.edu.LyStatistic.*.mapper") +@MapperScan("com.whu.edu.LyStatistic") public class BootApplication { public static void main(String[] args) { diff --git a/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Controller/StatisticsController.java b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Controller/StatisticsController.java new file mode 100644 index 0000000..c87da37 --- /dev/null +++ b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Controller/StatisticsController.java @@ -0,0 +1,74 @@ +package com.whu.edu.LyStatistic.MapLyStatistic.Controller; + +import com.whu.edu.LyStatistic.MapLyStatistic.Dto.DistrictStatsDTO; +import com.whu.edu.LyStatistic.MapLyStatistic.Dto.PlotStatsDTO; +import com.whu.edu.LyStatistic.MapLyStatistic.Service.StatisticsService; +import com.whu.edu.LyStatistic.Util.ApiResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.LinkedHashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/stats") +public class StatisticsController { + + @Autowired + private StatisticsService statisticsService; + + /** + * 区级统计 + */ + @GetMapping("/district") + public ApiResponse getDistrictStats() { + try { + // 1️⃣ 获取 Map<区名, PlotStatsDTO> + Map statsMap = statisticsService.getAllDistrictStats(); + + // 2️⃣ 构建 DistrictStatsDTO + Map completionStatus = new LinkedHashMap<>(); + Map plotArea = new LinkedHashMap<>(); + Map plotCount = new LinkedHashMap<>(); + + for (Map.Entry entry : statsMap.entrySet()) { + String district = entry.getKey(); + PlotStatsDTO stats = entry.getValue(); + + // 计算完成状态(示例逻辑,可根据需求调整) + String status; + if (safeInt(stats.getApprovedCount()) > 0) { + status = "已完成"; + } else if (safeInt(stats.getCollectedCount()) > 0) { + status = "未完成"; + } else { + status = "未开始"; + } + + completionStatus.put(district, status); + plotArea.put(district, safeDouble(stats.getTotalArea())); + plotCount.put(district, safeInt(stats.getPlotCount())); + } + + DistrictStatsDTO dto = new DistrictStatsDTO(completionStatus, plotArea, plotCount); + + return ApiResponse.success(dto); + } catch (Exception e) { + return ApiResponse.error("区级统计查询失败:" + e.getMessage()); + } + } + + // 防止 null + private int safeInt(Integer value) { + return (value != null) ? value : 0; + } + + private double safeDouble(Double value) { + return (value != null) ? value : 0.0; + } + + +} diff --git a/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/DistrictStatsDTO.java b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/DistrictStatsDTO.java new file mode 100644 index 0000000..4641558 --- /dev/null +++ b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/DistrictStatsDTO.java @@ -0,0 +1,16 @@ +package com.whu.edu.LyStatistic.MapLyStatistic.Dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DistrictStatsDTO { + private Map completionStatus; // 区 -> 完成状态 + private Map plotArea; // 区 -> 图斑面积 + private Map plotCount; // 区 -> 图斑数量 +} diff --git a/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/PlotStatsDTO.java b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/PlotStatsDTO.java new file mode 100644 index 0000000..c7de9ed --- /dev/null +++ b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/PlotStatsDTO.java @@ -0,0 +1,20 @@ +package com.whu.edu.LyStatistic.MapLyStatistic.Dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PlotStatsDTO { + + private Integer plotCount; // 图斑总数量 + private Double totalArea; // 图斑总面积(sum XBMJ) + + private Integer unPassedCount; // -1 审核未通过 + private Integer assignedCount; // 0 已分配,未审核 + private Integer collectedCount; // 1 已采集,未审核 + private Integer approvedCount; // 2 已审核 +} + diff --git a/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/UnitInfo.java b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/UnitInfo.java new file mode 100644 index 0000000..f4679a1 --- /dev/null +++ b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Dto/UnitInfo.java @@ -0,0 +1,12 @@ +package com.whu.edu.LyStatistic.MapLyStatistic.Dto; + +import lombok.Data; + +@Data +public class UnitInfo { + private String taskName; + private String schemaCode; + private String unitName; + private String district; + private String village; +} diff --git a/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Mapper/InfoMapper.java b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Mapper/InfoMapper.java new file mode 100644 index 0000000..e85088d --- /dev/null +++ b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Mapper/InfoMapper.java @@ -0,0 +1,15 @@ +package com.whu.edu.LyStatistic.MapLyStatistic.Mapper; +import java.util.List; +import com.whu.edu.LyStatistic.MapLyStatistic.Dto.UnitInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface InfoMapper { + + List findByDistrict(@Param("district") String district); + + List findByVillage(@Param("village") String village); + + List findAll(); +} diff --git a/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Mapper/TaskCommonMapper.java b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Mapper/TaskCommonMapper.java new file mode 100644 index 0000000..a8c8c46 --- /dev/null +++ b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Mapper/TaskCommonMapper.java @@ -0,0 +1,41 @@ +package com.whu.edu.LyStatistic.MapLyStatistic.Mapper; + +import com.whu.edu.LyStatistic.MapLyStatistic.Dto.PlotStatsDTO; +//import com.whu.edu.LyStatistic.MapLyStatistic.Dto.PlotDetailDTO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * TaskCommonMapper.xml + * 通用 Mapper,用于不同 schema 下的 roottable1 表 + */ +@Mapper +public interface TaskCommonMapper { + + /** + * 统计图斑信息(数量、面积、各状态) + * @param schema schema 名(任务库) + * @return 统计结果 DTO + */ + PlotStatsDTO selectPlotStats(@Param("schema") String schema); + +// /** +// * 查询单个图斑详情 +// * @param schema schema 名 +// * @param plotId 图斑 ID +// * @return 图斑详情 DTO +// */ +// PlotDetailDTO getPlotDetail(@Param("schema") String schema, +// @Param("plotId") Long plotId); + +// /** +// * 查询单个图斑对应的照片路径 +// * @param schema schema 名 +// * @param plotId 图斑 ID +// * @return 照片路径列表 +// */ +// List getPlotPhotos(@Param("schema") String schema, +// @Param("plotId") Long plotId); +} diff --git a/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Service/BaseService/BaseTaskQueryService.java b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Service/BaseService/BaseTaskQueryService.java new file mode 100644 index 0000000..89aa317 --- /dev/null +++ b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Service/BaseService/BaseTaskQueryService.java @@ -0,0 +1,63 @@ +package com.whu.edu.LyStatistic.MapLyStatistic.Service.BaseService; +import com.whu.edu.LyStatistic.MapLyStatistic.Dto.PlotStatsDTO; +import com.whu.edu.LyStatistic.MapLyStatistic.Mapper.TaskCommonMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class BaseTaskQueryService { + + @Autowired + private TaskCommonMapper taskCommonMapper; + + /** + * 安全查询单个任务的图斑统计 + * schema 不存在或 roottable1 表不存在时,返回全 0 + */ + public PlotStatsDTO queryPlotStats(String schema) { + try { + PlotStatsDTO stats = taskCommonMapper.selectPlotStats(schema); + if (stats == null) { + // 防止 mapper 返回 null + return new PlotStatsDTO(0, 0.0, 0, 0, 0, 0); + } + return stats; + } catch (Exception e) { + // 表不存在或 schema 不存在,直接跳过 + // 不管是什么异常,都返回默认统计,保证批量统计不被中断 + return new PlotStatsDTO(0, 0.0, 0, 0, 0, 0); + } + } + + /** + * 批量查询多个任务的图斑统计 + */ + public Map queryPlotStatsBatch(List schemas) { + Map result = new HashMap<>(); + for (String schema : schemas) { + PlotStatsDTO stats = queryPlotStats(schema); + result.put(schema, stats); + } + return result; + } + + /** + * 查询某个区的图斑统计 + */ + public Map queryByDistrict(List schemas, String district) { + // 这里可结合 UnitInfo 表过滤 schemas + // 假设前端传入的 schemas 已经是该区的任务列表 + return queryPlotStatsBatch(schemas); + } + + /** + * 查询某个街道的图斑统计 + */ + public Map queryByVillage(List schemas, String village) { + // 这里可结合 UnitInfo 表过滤 schemas + // 假设前端传入的 schemas 已经是该街道的任务列表 + return queryPlotStatsBatch(schemas); + } +} diff --git a/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Service/StatisticsService.java b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Service/StatisticsService.java new file mode 100644 index 0000000..6fdef33 --- /dev/null +++ b/src/main/java/com/whu/edu/LyStatistic/MapLyStatistic/Service/StatisticsService.java @@ -0,0 +1,111 @@ +package com.whu.edu.LyStatistic.MapLyStatistic.Service; +import com.whu.edu.LyStatistic.MapLyStatistic.Dto.PlotStatsDTO; +import com.whu.edu.LyStatistic.MapLyStatistic.Dto.UnitInfo; +import com.whu.edu.LyStatistic.MapLyStatistic.Mapper.InfoMapper; +import com.whu.edu.LyStatistic.MapLyStatistic.Service.BaseService.BaseTaskQueryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class StatisticsService { + @Autowired + private InfoMapper unitInfoMapper; // 查询 unit_info 表 + + @Autowired + private BaseTaskQueryService baseQueryService; // 通用任务查询 Service + /** + * 查询单个区的统计信息 + */ + public PlotStatsDTO getDistrictStats(String district) { + + // 1. 获取该区所有任务(schema) + List tasks = unitInfoMapper.findByDistrict(district); + + // 2. 初始化统计对象 + PlotStatsDTO total = new PlotStatsDTO(0, 0.0, 0, 0, 0, 0); + + // 3. 遍历每个任务 schema,累加统计 + for (UnitInfo task : tasks) { + String schema = task.getSchemaCode(); + PlotStatsDTO stats = baseQueryService.queryPlotStats(schema); + merge(total, stats); + } + + return total; + } + + /** + * 查询所有区的统计信息 + * 返回 Map<区名, PlotStatsDTO> + */ + public Map getAllDistrictStats() { + + // 1️⃣ 查询 unit_info 全部数据 + List allTasks = unitInfoMapper.findAll(); + + // 2️⃣ 按 district 分组 + Map> grouped = + allTasks.stream().collect(Collectors.groupingBy(UnitInfo::getDistrict)); + + Map result = new LinkedHashMap<>(); + + // 3️⃣ 遍历每个区,累加统计 + for (Map.Entry> entry : grouped.entrySet()) { + + String district = entry.getKey(); + List tasks = entry.getValue(); + + // 初始化累加对象 + PlotStatsDTO total = new PlotStatsDTO(0, 0.0, 0, 0, 0, 0); + + for (UnitInfo task : tasks) { + String schema = task.getSchemaCode(); + PlotStatsDTO stats = baseQueryService.queryPlotStats(schema); // ✅ 使用安全方法 + + if (stats != null) { + // 累加 + total.setPlotCount(total.getPlotCount() + safeInt(stats.getPlotCount())); + total.setTotalArea(total.getTotalArea() + safeDouble(stats.getTotalArea())); + total.setUnPassedCount(total.getUnPassedCount() + safeInt(stats.getUnPassedCount())); + total.setAssignedCount(total.getAssignedCount() + safeInt(stats.getAssignedCount())); + total.setCollectedCount(total.getCollectedCount() + safeInt(stats.getCollectedCount())); + total.setApprovedCount(total.getApprovedCount() + safeInt(stats.getApprovedCount())); + } + } + + result.put(district, total); + } + + return result; + } + + // ✅ 防止 null 值累加 + private int safeInt(Integer value) { + return (value != null) ? value : 0; + } + + private double safeDouble(Double value) { + return (value != null) ? value : 0.0; + } + + + /** + * 合并两个 PlotStatsDTO + */ + private void merge(PlotStatsDTO total, PlotStatsDTO add) { + if (add == null) return; + + total.setPlotCount(total.getPlotCount() + add.getPlotCount()); + total.setTotalArea(total.getTotalArea() + add.getTotalArea()); + + total.setUnPassedCount(total.getUnPassedCount() + add.getUnPassedCount()); + total.setAssignedCount(total.getAssignedCount() + add.getAssignedCount()); + total.setCollectedCount(total.getCollectedCount() + add.getCollectedCount()); + total.setApprovedCount(total.getApprovedCount() + add.getApprovedCount()); + } +} diff --git a/src/main/java/com/whu/edu/LyStatistic/statistic/Util/ApiResponse.java b/src/main/java/com/whu/edu/LyStatistic/Util/ApiResponse.java similarity index 94% rename from src/main/java/com/whu/edu/LyStatistic/statistic/Util/ApiResponse.java rename to src/main/java/com/whu/edu/LyStatistic/Util/ApiResponse.java index 61695ae..b24675d 100644 --- a/src/main/java/com/whu/edu/LyStatistic/statistic/Util/ApiResponse.java +++ b/src/main/java/com/whu/edu/LyStatistic/Util/ApiResponse.java @@ -1,4 +1,4 @@ -package com.whu.edu.LyStatistic.statistic.Util; +package com.whu.edu.LyStatistic.Util; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/whu/edu/LyStatistic/statistic/config/CorsConfig.java b/src/main/java/com/whu/edu/LyStatistic/statistic/config/CorsConfig.java deleted file mode 100644 index 15ac840..0000000 --- a/src/main/java/com/whu/edu/LyStatistic/statistic/config/CorsConfig.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.whu.edu.LyStatistic.statistic.config; - -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -public class CorsConfig { - - @Bean - public FilterRegistrationBean corsFilter() { - CorsConfiguration config = new CorsConfiguration(); - config.addAllowedOriginPattern("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - config.setAllowCredentials(true); // 如果需要携带 Cookie - - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", config); - - FilterRegistrationBean bean = new FilterRegistrationBean<>(new CorsFilter(source)); - bean.setOrder(0); // 设置为最优先,优先于 Shiro - return bean; - } -} diff --git a/src/main/java/com/whu/edu/LyStatistic/statistic/controller/StatisticController.java b/src/main/java/com/whu/edu/LyStatistic/statistic/controller/StatisticController.java index c136290..df57270 100644 --- a/src/main/java/com/whu/edu/LyStatistic/statistic/controller/StatisticController.java +++ b/src/main/java/com/whu/edu/LyStatistic/statistic/controller/StatisticController.java @@ -1,6 +1,6 @@ package com.whu.edu.LyStatistic.statistic.controller; -import com.whu.edu.LyStatistic.statistic.Util.ApiResponse; +import com.whu.edu.LyStatistic.Util.ApiResponse; import com.whu.edu.LyStatistic.statistic.dto.TaskStatisticResult; import com.whu.edu.LyStatistic.statistic.service.*; import org.springframework.format.annotation.DateTimeFormat; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0bab0c1..a44a1e7 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,9 +2,9 @@ spring.application.name=LydcStatistic spring.profiles.active=dev server.port=9001 server.address=0.0.0.0 -spring.datasource.host=120.48.89.193 +spring.datasource.host=127.0.0.1 spring.datasource.port=5432 -spring.datasource.database=tj_lydc +spring.datasource.database=tj_project spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://${spring.datasource.host}:${spring.datasource.port}/${spring.datasource.database}?useSSL=true&allowMultiQueries=true spring.datasource.username=postgres diff --git a/src/main/resources/mapper/MapLyStatistic/Info.xml b/src/main/resources/mapper/MapLyStatistic/Info.xml new file mode 100644 index 0000000..1fc98c9 --- /dev/null +++ b/src/main/resources/mapper/MapLyStatistic/Info.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + diff --git a/src/main/resources/mapper/MapLyStatistic/TaskCommonMapper.xml b/src/main/resources/mapper/MapLyStatistic/TaskCommonMapper.xml new file mode 100644 index 0000000..39a8f9c --- /dev/null +++ b/src/main/resources/mapper/MapLyStatistic/TaskCommonMapper.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + +