Browse Source

各时期目标实现

environment_dev
gjh 4 weeks ago
parent
commit
798654e131
  1. 29
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/ProjectInfoController.java
  2. 3
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/ProjectInfo.java
  3. 2
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/AllGoatAchieveDataVo.java
  4. 15
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/AllGoatAchieveVo.java
  5. 8
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/IProjectInfoService.java
  6. 72
      ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/service/impl/ProjectInfoServiceImpl.java

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

@ -1,11 +1,13 @@
package org.dromara.demo.controller; package org.dromara.demo.controller;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission; import org.dromara.demo.domain.vo.AllGoatAchieveDataVo;
import org.dromara.demo.domain.vo.AllGoatAchieveVo;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
@ -102,4 +104,29 @@ public class ProjectInfoController extends BaseController {
@PathVariable String[] ids) { @PathVariable String[] ids) {
return toAjax(projectInfoService.deleteWithValidByIds(List.of(ids), true)); return toAjax(projectInfoService.deleteWithValidByIds(List.of(ids), true));
} }
// @GetMapping("/getInvestmentStats")
// public R<List<AllGoatAchieveDataVo>> getInvestmentStats() {
// return R.ok(projectInfoService.getYearlyInvestmentStats());
// }
@GetMapping("/getInvestmentStats")
public R<AllGoatAchieveVo> getInvestmentStats() {
List<AllGoatAchieveDataVo> data = projectInfoService.getYearlyInvestmentStats();
AllGoatAchieveVo rs = new AllGoatAchieveVo();
rs.setProjectInfo(data);
rs.setDescription(getFiveYearPlanAchievements());
return R.ok(rs);
}
private List<String> getFiveYearPlanAchievements() {
List<String> achievements = new ArrayList<>();
achievements.add("“九五”:建成1座城镇污水处理厂;完成XX截污工程;完成XX河道截污疏浚工程。");
achievements.add("“十五”:新增流域污水处理能力22万立方米/天;形成了5大排水系统,排水管网总长933.17公里。");
achievements.add("“十一五”:新建污水管网251.66公里;城镇污水处理厂处理规模提升55万方/天。");
achievements.add("“十二五”:截污治污系统基本建成;实施了补水工程;");
achievements.add("“十三五”:新建再生水厂工程;分别完成排水和再生水管网建设719和123公里;完成30余条河沟水环境整治;新建修缮农村污水处理设施533座。");
return achievements;
}
} }

3
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/ProjectInfo.java

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date; import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial; import java.io.Serial;
@ -37,6 +38,8 @@ public class ProjectInfo extends TenantEntity {
/** /**
* 项目时期年月日 * 项目时期年月日
*/ */
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date projectDate; private Date projectDate;
/** /**

2
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/AllGoatAchieve.java → ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/AllGoatAchieveDataVo.java

@ -7,7 +7,7 @@ import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class AllGoatAchieve { public class AllGoatAchieveDataVo {
private String date; private String date;
private String planInvest; private String planInvest;
private String actualInvest; private String actualInvest;

15
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/AllGoatAchieveVo.java

@ -0,0 +1,15 @@
package org.dromara.demo.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AllGoatAchieveVo {
List<AllGoatAchieveDataVo> projectInfo;
List<String> description;
}

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

@ -1,6 +1,7 @@
package org.dromara.demo.service; package org.dromara.demo.service;
import org.dromara.demo.domain.ProjectInfo; 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.ProjectInfoVo;
import org.dromara.demo.domain.bo.ProjectInfoBo; import org.dromara.demo.domain.bo.ProjectInfoBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -68,4 +69,11 @@ public interface IProjectInfoService {
Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
void addData(List<ProjectInfo> list); void addData(List<ProjectInfo> list);
/**
* 获取项目投资年度统计按年份累加计划/实际投资并计算完成率只返回数字不带%
* @return AllGoatAchieve 列表date 字段为年份
*/
List<AllGoatAchieveDataVo> getYearlyInvestmentStats();
} }

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

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.demo.domain.vo.AllGoatAchieveDataVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.demo.domain.bo.ProjectInfoBo; import org.dromara.demo.domain.bo.ProjectInfoBo;
import org.dromara.demo.domain.vo.ProjectInfoVo; import org.dromara.demo.domain.vo.ProjectInfoVo;
@ -16,9 +17,9 @@ import org.dromara.demo.domain.ProjectInfo;
import org.dromara.demo.mapper.ProjectInfoMapper; import org.dromara.demo.mapper.ProjectInfoMapper;
import org.dromara.demo.service.IProjectInfoService; import org.dromara.demo.service.IProjectInfoService;
import java.util.List; import java.math.BigDecimal;
import java.util.Map; import java.math.RoundingMode;
import java.util.Collection; import java.util.*;
/** /**
* 项目信息Service业务层处理 * 项目信息Service业务层处理
@ -167,4 +168,69 @@ public class ProjectInfoServiceImpl extends ServiceImpl<ProjectInfoMapper, Proje
public void addData(List<ProjectInfo> list) { public void addData(List<ProjectInfo> list) {
this.saveBatch(list); this.saveBatch(list);
} }
@Override
public List<AllGoatAchieveDataVo> getYearlyInvestmentStats() {
List<ProjectInfo> list = baseMapper.selectList();
// 按年份累加:TreeMap 自动按年份升序排序
Map<Integer, BigDecimal> planMap = new TreeMap<>();
Map<Integer, BigDecimal> actualMap = new TreeMap<>();
for (ProjectInfo item : list) {
int year = extractYear(item.getProjectDate()); // 不管是哪年都保留
BigDecimal plan = parseBigDecimal(item.getPlanInvest());
BigDecimal actual = parseBigDecimal(item.getActualInvest());
planMap.put(year, planMap.getOrDefault(year, BigDecimal.ZERO).add(plan));
actualMap.put(year, actualMap.getOrDefault(year, BigDecimal.ZERO).add(actual));
}
// 转换为返回结果
List<AllGoatAchieveDataVo> result = new ArrayList<>();
for (Integer year : planMap.keySet()) {
BigDecimal plan = planMap.get(year);
BigDecimal actual = actualMap.get(year);
// 计算完成率(只返回数字)
BigDecimal percent = BigDecimal.ZERO;
if (plan.compareTo(BigDecimal.ZERO) != 0) {
percent = actual.divide(plan, 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
}
result.add(new AllGoatAchieveDataVo(
year.toString(),
format(plan),
format(actual),
format(percent)
));
}
return result;
}
// --------------------- private 辅助方法 ---------------------
private int extractYear(Date date) {
if (date == null) return 0;
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.YEAR);
}
private BigDecimal parseBigDecimal(String str) {
if (str == null || str.trim().isEmpty()) return BigDecimal.ZERO;
try {
return new BigDecimal(str.trim());
} catch (Exception e) {
return BigDecimal.ZERO;
}
}
private String format(BigDecimal value) {
return value.setScale(2, RoundingMode.HALF_UP).toPlainString();
}
} }

Loading…
Cancel
Save