From cc5a0211ae36f1eaed5ba639f603856487aa0968 Mon Sep 17 00:00:00 2001 From: gjh <1421wake> Date: Fri, 22 Aug 2025 16:54:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=8B=9F=E8=8E=B7=E5=8F=96=E5=9C=B0?= =?UTF-8?q?=E8=A1=A8=E6=B0=B4=E8=B4=A8=E8=87=AA=E5=8A=A8=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ProjectInfoController.java | 33 ++++- .../controller/test/ExtendedDEAExample.java | 27 ++-- .../dromara/demo/domain/vo/DeaResultVo.java | 73 ++++++++++ .../java/org/dromara/demo/domain/vo/PH.java | 41 ++++++ .../demo/domain/vo/StationDetailVo.java | 41 ++++++ .../dromara/demo/domain/vo/StationInfoVo.java | 24 ++++ .../java/org/dromara/demo/domain/vo/XY.java | 16 +++ .../demo/service/IProjectInfoService.java | 12 +- .../service/impl/ProjectInfoServiceImpl.java | 133 +++++++++++++++++- 9 files changed, 381 insertions(+), 19 deletions(-) create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/DeaResultVo.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/PH.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationDetailVo.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationInfoVo.java create mode 100644 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/XY.java diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectInfoController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectInfoController.java index daa0af2..dbf64fd 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectInfoController.java +++ b/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> getDeaResults() { + List rs = projectInfoService.getDeaSimulationResults(); + return R.ok(rs); + } + + /** + * 获取检测点位列表 默认1个提供演示 + * @return + */ + @GetMapping("/getStations") + public R> getStations() { + List rs= projectInfoService.getStations(); + return R.ok(rs); + } + + @GetMapping("/getPH") + public R getPH() { + PH rs = projectInfoService.getPH(); + return R.ok(rs); + } + + + @GetMapping("/getWaterQuality") + public R getWaterQuality(@RequestParam String type) { + StationDetailVo rs = projectInfoService.getWaterQualityData(type); + return R.ok(rs); + } } diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/ExtendedDEAExample.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/ExtendedDEAExample.java index 4cdbe15..760424e 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/test/ExtendedDEAExample.java +++ b/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 sbmResults = diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/DeaResultVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/DeaResultVo.java new file mode 100644 index 0000000..d26c771 --- /dev/null +++ b/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; + } +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/PH.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/PH.java new file mode 100644 index 0000000..deee160 --- /dev/null +++ b/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 timeList = new ArrayList<>(); // ✅ 初始化! + private List 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; +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationDetailVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationDetailVo.java new file mode 100644 index 0000000..de210f5 --- /dev/null +++ b/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 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; +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationInfoVo.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/StationInfoVo.java new file mode 100644 index 0000000..e755971 --- /dev/null +++ b/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; +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/XY.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/XY.java new file mode 100644 index 0000000..9055e42 --- /dev/null +++ b/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; +} diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectInfoService.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectInfoService.java index c38b027..9ef00b5 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectInfoService.java +++ b/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 getPerformanceScore(ProjectInfoBo bo); ProjectPerformanceVo calculateAverageByType(ProjectInfoBo bo); + + List getDeaSimulationResults(); + + PH getPH(); + + List getStations(); + + StationDetailVo getWaterQualityData(String type); } diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectInfoServiceImpl.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectInfoServiceImpl.java index 44b5522..c1279ae 100644 --- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectInfoServiceImpl.java +++ b/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 getDeaSimulationResults() { + List 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 timeList = ph.getTimeList(); + List 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 getStations() { + StationInfoVo target = new StationInfoVo("方门江", "121.434112", "29.580099"); + List 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 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;