修正区级状态指标计算方法

This commit is contained in:
2025-11-27 17:05:52 +08:00
parent ffcadd7818
commit ede6b613d7
7 changed files with 69 additions and 15 deletions

View File

@@ -66,12 +66,12 @@ public class StatisticsController {
// 计算完成状态
String status;
if (safeInt(stats.getApprovedCount()) > 0) {
status = "完成";
} else if (safeInt(stats.getCollectedCount()) > 0) {
status = "未完成";
if (safeInt(stats.getCollectedCount()) > 0) {
status = "采集";
} else if (safeInt(stats.getCollectedCount()) == 0 && safeInt(stats.getPublishedUncollectedCount()) > 0) {
status = "已发布未开始";
} else {
status = "开始";
status = "发布";
}
completionStatus.put(district, status);

View File

@@ -0,0 +1,15 @@
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 DatePlotDTO {
private String district;
private int plotcount;
}

View File

@@ -13,9 +13,11 @@ 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 已审核
// private Integer unPassedCount; // -1 审核未通过
// private Integer assignedCount; // 0 已分配,未审核
// private Integer collectedCount; // 1 已采集,未审核
// private Integer approvedCount; // 2 已审核
private Integer collectedCount; // collector/reviewer有一个不是-1已采集
private Integer publishedUncollectedCount; // collector/reviewer均为-1已发布未采集
}

View File

@@ -21,13 +21,13 @@ public class BaseTaskQueryService {
PlotStatsDTO stats = taskCommonMapper.selectPlotStats(schema);
if (stats == null) {
// 防止 mapper 返回 null
return new PlotStatsDTO( "0", 0, 0.0, 0, 0, 0, 0);
return new PlotStatsDTO( "0", 0, 0.0, 0, 0);
}
return stats;
} catch (Exception e) {
// 表不存在或 schema 不存在,直接跳过
// 不管是什么异常,都返回默认统计,保证批量统计不被中断
return new PlotStatsDTO( "0", 00, 0.0, 0, 0, 0, 0);
return new PlotStatsDTO( "0", 00, 0.0, 0, 0);
}
}

View File

@@ -188,9 +188,9 @@ public class StatisticsService {
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.setUnPassedCount(total.getUnPassedCount() + add.getUnPassedCount());
// total.setAssignedCount(total.getAssignedCount() + add.getAssignedCount());
total.setCollectedCount(total.getCollectedCount() + add.getCollectedCount());
total.setApprovedCount(total.getApprovedCount() + add.getApprovedCount());
total.setPublishedUncollectedCount(total.getPublishedUncollectedCount() + add.getPublishedUncollectedCount());
}
}

View File

@@ -0,0 +1,24 @@
<?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.whu.edu.LyStatistic.MapLyStatistic.Mapper.PlotMapper">
<select id="finishedPlot" resultType="com.whu.edu.LyStatistic.MapLyStatistic.Dto.PlotAttrDTO">
SELECT *
FROM merged.roottable1_merged
WHERE "NYXBH" = #{nyxbh} AND "XIANG" = #{xiang}
LIMIT 1
</select>
<select id="finishedSamplePlot" resultType="string">
SELECT media_path
FROM merged.roottable1_media_merged
WHERE "id" = #{id}
AND "database_name" = #{databaseName}
ORDER BY media_path
</select>
</mapper>

View File

@@ -37,7 +37,20 @@
-- status 也是 text因此必须先转 integer
COALESCE(SUM(CASE WHEN m."status"::int = -1 THEN 1 ELSE 0 END), 0) AS unPassedCount,
COALESCE(SUM(CASE WHEN m."status"::int = 0 THEN 1 ELSE 0 END), 0) AS assignedCount,
COALESCE(SUM(CASE WHEN m."status"::int = 1 THEN 1 ELSE 0 END), 0) AS collectedCount,
-- 新的状态统计逻辑
-- collector/reviewer有一个不是-1已采集
COALESCE(SUM(CASE
WHEN (m."collector" != '-1' OR m."reviewer" != '-1')
THEN 1 ELSE 0
END), 0) AS collectedCount,
-- collector/reviewer均为-1已发布未采集
COALESCE(SUM(CASE
WHEN m."collector" = '-1' AND m."reviewer" = '-1'
THEN 1 ELSE 0
END), 0) AS publishedUncollectedCount,
COALESCE(SUM(CASE WHEN m."status"::int = 2 THEN 1 ELSE 0 END), 0) AS approvedCount
FROM merged.roottable1_merged m