Browse Source

模拟获取地表水质自动检测数据接口

environment_dev
gjh 3 weeks ago
parent
commit
cc5a0211ae
  1. 33
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectInfoController.java
  2. 27
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/ExtendedDEAExample.java
  3. 73
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/DeaResultVo.java
  4. 41
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/PH.java
  5. 41
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationDetailVo.java
  6. 24
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationInfoVo.java
  7. 16
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/XY.java
  8. 12
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectInfoService.java
  9. 133
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectInfoServiceImpl.java

33
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectInfoController.java

@ -6,9 +6,7 @@ import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import org.dromara.demo.domain.vo.AllGoatAchieveDataVo;
import org.dromara.demo.domain.vo.AllGoatAchieveVo;
import org.dromara.demo.domain.vo.ProjectPerformanceVo;
import org.dromara.demo.domain.vo.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -20,7 +18,6 @@ import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.demo.domain.vo.ProjectInfoVo;
import org.dromara.demo.domain.bo.ProjectInfoBo;
import org.dromara.demo.service.IProjectInfoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -156,4 +153,32 @@ public class ProjectInfoController extends BaseController {
return R.ok(rs);
}
@GetMapping("/getDeaResults")
public R<List<DeaResultVo>> getDeaResults() {
List<DeaResultVo> rs = projectInfoService.getDeaSimulationResults();
return R.ok(rs);
}
/**
* 获取检测点位列表 默认1个提供演示
* @return
*/
@GetMapping("/getStations")
public R<List<StationInfoVo>> getStations() {
List<StationInfoVo> rs= projectInfoService.getStations();
return R.ok(rs);
}
@GetMapping("/getPH")
public R<PH> getPH() {
PH rs = projectInfoService.getPH();
return R.ok(rs);
}
@GetMapping("/getWaterQuality")
public R<StationDetailVo> getWaterQuality(@RequestParam String type) {
StationDetailVo rs = projectInfoService.getWaterQualityData(type);
return R.ok(rs);
}
}

27
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/ExtendedDEAExample.java

@ -38,21 +38,30 @@ public class ExtendedDEAExample {
System.out.println("\n===== 非期望SBM模型示例 =====");
// 3个企业(DMU),2个投入(资本、劳动),1个期望产出(利润),1个非期望产出(污染)
double[][] inputsSBM = {
{100, 50}, // 企业1投入:资本100,劳动50
{150, 60}, // 企业2投入
{80, 40} // 企业3投入
{2,2,1,2,1,1}, // DMU 0的投入
{3,2,5,4,4,1}, // DMU 0的投入
{2,3,3,3,5,3}, // DMU 0的投入
{5,4,1,2,2,1}, // DMU 0的投入
{2,3,3,3,5,3}, // DMU 0的投入
{5,4,1,2,2,1}, // DMU 0的投入
};
double[][] desirableOutputs = {
{200}, // 企业1利润
{240}, // 企业2利润
{150} // 企业3利润
{4}, // DMU 0的产出
{3}, // DMU 0的产出
{2}, // DMU 0的产出
{3}, // DMU 0的产出
{5}, // DMU 0的产出
{5}, // DMU 0的产出
};
double[][] undesirableOutputs = {
{30}, // 企业1污染排放
{40}, // 企业2污染排放
{20} // 企业3污染排放
{4}, // DMU 0的产出
{3}, // DMU 0的产出
{2}, // DMU 0的产出
{3}, // DMU 0的产出
{5}, // DMU 0的产出
{5}, // DMU 0的产出
};
List<ExtendedDEAUtils.DEAResult> sbmResults =

73
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/DeaResultVo.java

@ -0,0 +1,73 @@
package org.dromara.demo.domain.vo;
// DeaResultVo.java
public class DeaResultVo {
private String dmu;
private Double overallEfficiency;
private Double scale;
private Double scaleEfficiency;
private String scalePay;
private Double beyondEfficiency;
// 构造函数(可选)
public DeaResultVo() {}
public DeaResultVo(String dmu, Double overallEfficiency, Double scale,
Double scaleEfficiency, String scalePay, Double beyondEfficiency) {
this.dmu = dmu;
this.overallEfficiency = overallEfficiency;
this.scale = scale;
this.scaleEfficiency = scaleEfficiency;
this.scalePay = scalePay;
this.beyondEfficiency = beyondEfficiency;
}
// Getter 和 Setter
public String getDmu() {
return dmu;
}
public void setDmu(String dmu) {
this.dmu = dmu;
}
public Double getOverallEfficiency() {
return overallEfficiency;
}
public void setOverallEfficiency(Double overallEfficiency) {
this.overallEfficiency = overallEfficiency;
}
public Double getScale() {
return scale;
}
public void setScale(Double scale) {
this.scale = scale;
}
public Double getScaleEfficiency() {
return scaleEfficiency;
}
public void setScaleEfficiency(Double scaleEfficiency) {
this.scaleEfficiency = scaleEfficiency;
}
public String getScalePay() {
return scalePay;
}
public void setScalePay(String scalePay) {
this.scalePay = scalePay;
}
public Double getBeyondEfficiency() {
return beyondEfficiency;
}
public void setBeyondEfficiency(Double beyondEfficiency) {
this.beyondEfficiency = beyondEfficiency;
}
}

41
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/PH.java

@ -0,0 +1,41 @@
package org.dromara.demo.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PH {
private List<Integer> timeList = new ArrayList<>(); // ✅ 初始化!
private List<Double> phList = new ArrayList<>(); // ✅ 初始化!
/**
* 检测时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime currentTime;
/**
* 检测值
*/
private Double currentValue;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
}

41
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationDetailVo.java

@ -0,0 +1,41 @@
package org.dromara.demo.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StationDetailVo {
private List<XY> xyList = new ArrayList<>();
/**
* 检测时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime currentTime;
/**
* 检测值
*/
private Double currentValue;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
}

24
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationInfoVo.java

@ -0,0 +1,24 @@
package org.dromara.demo.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StationInfoVo {
/**
* 站点名称
*/
private String stationName;
/**
* 经度
*/
private String longitude;
/**
* 纬度
*/
private String latitude;
}

16
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/XY.java

@ -0,0 +1,16 @@
package org.dromara.demo.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
/**
* 坐标对象
*/
public class XY {
private Integer x;
private Double y;
}

12
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectInfoService.java

@ -1,12 +1,10 @@
package org.dromara.demo.service;
import org.dromara.demo.domain.ProjectInfo;
import org.dromara.demo.domain.vo.AllGoatAchieveDataVo;
import org.dromara.demo.domain.vo.ProjectInfoVo;
import org.dromara.demo.domain.vo.*;
import org.dromara.demo.domain.bo.ProjectInfoBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.demo.domain.vo.ProjectPerformanceVo;
import java.util.Collection;
import java.util.List;
@ -82,4 +80,12 @@ public interface IProjectInfoService {
List<ProjectPerformanceVo> getPerformanceScore(ProjectInfoBo bo);
ProjectPerformanceVo calculateAverageByType(ProjectInfoBo bo);
List<DeaResultVo> getDeaSimulationResults();
PH getPH();
List<StationInfoVo> getStations();
StationDetailVo getWaterQualityData(String type);
}

133
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectInfoServiceImpl.java

@ -10,17 +10,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.demo.domain.vo.AllGoatAchieveDataVo;
import org.dromara.demo.domain.vo.ProjectPerformanceVo;
import org.dromara.demo.domain.vo.*;
import org.springframework.stereotype.Service;
import org.dromara.demo.domain.bo.ProjectInfoBo;
import org.dromara.demo.domain.vo.ProjectInfoVo;
import org.dromara.demo.domain.ProjectInfo;
import org.dromara.demo.mapper.ProjectInfoMapper;
import org.dromara.demo.service.IProjectInfoService;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@ -299,6 +298,134 @@ public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, Proje
return avgVo; // ✅ 返回真实计算出的平均值
}
@Override
public List<DeaResultVo> getDeaSimulationResults() {
List<DeaResultVo> resultList = new ArrayList<>();
resultList.add(new DeaResultVo("城镇污水处理及配套", 0.85, 0.92, 0.92, "递增", 1.10));
resultList.add(new DeaResultVo("河道整治", 1.00, 1.00, 1.00, "不变", 1.42));
resultList.add(new DeaResultVo("农业农村面源污染治理", 0.76, 0.85, 0.89, "递增", 0.88));
resultList.add(new DeaResultVo("饮用水源地保护建设", 1.00, 1.00, 1.00, "不变", 1.25));
resultList.add(new DeaResultVo("内源治理", 0.68, 0.78, 0.87, "递增", 0.75));
resultList.add(new DeaResultVo("水资源综合利用及调度", 0.93, 0.96, 0.97, "递增", 1.05));
return resultList;
}
@Override
public PH getPH() {
PH ph = new PH();
List<Integer> timeList = ph.getTimeList();
List<Double> phList = ph.getPhList();
double[] phValues = {
6.72, 6.71, 6.70, 6.70, 6.71, 6.73, 6.75, 6.77,
6.78, 6.80, 6.82, 6.83, 6.84, 6.85, 6.84, 6.83,
6.82, 6.81, 6.80, 6.78, 6.76, 6.74, 6.73, 6.72
};
for (int hour = 0; hour < 24; hour++) {
timeList.add(hour); // 直接添加小时数字
phList.add(phValues[hour]);
}
ph.setTimeList(timeList);
ph.setPhList(phList);
ph.setCurrentTime(LocalDateTime.now());
ph.setCurrentValue(phValues[ph.getCurrentTime().getHour()]);
ph.setLongitude("121.434112");
ph.setLatitude("29.580099");
return ph;
}
@Override
public List<StationInfoVo> getStations() {
StationInfoVo target = new StationInfoVo("方门江", "121.434112", "29.580099");
List<StationInfoVo> rs= new ArrayList<>();
rs.add(target);
return rs;
}
@Override
public StationDetailVo getWaterQualityData(String type) {
// 模拟站点位置
String longitude = "121.434112";
String latitude = "29.580099";
double[] values;
// 根据 type 分支返回不同数据
switch (type.toUpperCase()) {
case "PH":
values = new double[]{
6.72, 6.71, 6.70, 6.70, 6.71, 6.73, 6.75, 6.77,
6.78, 6.80, 6.82, 6.83, 6.84, 6.85, 6.84, 6.83,
6.82, 6.81, 6.80, 6.78, 6.76, 6.74, 6.73, 6.72
};
break;
case "DO":
values = new double[]{
7.8, 7.6, 7.4, 7.2, 7.3, 7.6, 8.0, 8.5,
8.8, 9.0, 9.2, 9.3, 9.4, 9.3, 9.1, 8.9,
8.7, 8.5, 8.3, 8.1, 7.9, 7.7, 7.6, 7.5
};
break;
case "COD":
values = new double[]{
12.5, 12.4, 12.3, 12.3, 12.2, 12.3, 12.4, 12.5,
12.6, 12.7, 12.8, 12.7, 12.6, 12.5, 12.4, 12.3,
12.3, 12.2, 12.2, 12.3, 12.4, 12.5, 12.5, 12.4
};
break;
case "TP":
values = new double[]{
0.060, 0.059, 0.058, 0.057, 0.058, 0.059, 0.060, 0.062,
0.064, 0.065, 0.066, 0.065, 0.064, 0.063, 0.062, 0.061,
0.060, 0.059, 0.058, 0.057, 0.057, 0.058, 0.059, 0.060
};
break;
case "NH3":
case "NH3-N":
values = new double[]{
0.32, 0.33, 0.35, 0.36, 0.35, 0.34, 0.33, 0.31,
0.30, 0.28, 0.27, 0.26, 0.25, 0.26, 0.27, 0.28,
0.29, 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36
};
break;
default:
// 如果类型不支持,返回 PH 作为默认值,避免报错
values = new double[]{
6.72, 6.71, 6.70, 6.70, 6.71, 6.73, 6.75, 6.77,
6.78, 6.80, 6.82, 6.83, 6.84, 6.85, 6.84, 6.83,
6.82, 6.81, 6.80, 6.78, 6.76, 6.74, 6.73, 6.72
};
break;
}
// 构建返回对象
StationDetailVo vo = new StationDetailVo();
List<XY> xyList = new ArrayList<>();
for (int hour = 0; hour < 24; hour++) {
xyList.add(new XY(hour, values[hour]));
}
vo.setXyList(xyList);
LocalDateTime now = LocalDateTime.now();
vo.setCurrentTime(now);
int currentHour = now.getHour();
vo.setCurrentValue(values[currentHour < 24 ? currentHour : 23]);
vo.setLongitude(longitude);
vo.setLatitude(latitude);
return vo;
}
// --------------------- private 辅助方法 ---------------------
private Double getApprovalLevelScore(ProjectInfoVo projectInfo) {
Double score = 0.0;

Loading…
Cancel
Save