Browse Source

CCER

2025年2月24日20:46:28
qingyuan_dev_new
lishuai 11 months ago
parent
commit
fe9d1d16db
  1. 20
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCcerInfoController.java
  2. 1
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyGreenCertificateInfoController.java
  3. 32
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerSumInfoDTO.java
  4. 10
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCcerInfoService.java
  5. 1
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyGreenCertificateInfoService.java
  6. 89
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCcerInfoServiceImpl.java

20
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCcerInfoController.java

@ -10,7 +10,6 @@ import com.thing.common.core.validator.group.UpdateGroup;
import com.thing.common.core.web.response.PageData;
import com.thing.common.core.web.response.Result;
import com.thing.qingyuan.carbon.dto.QyCcerInfoDTO;
import com.thing.qingyuan.carbon.dto.QyCcerSumInfoDTO;
import com.thing.qingyuan.carbon.service.QyCcerInfoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -19,7 +18,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@ -30,7 +28,7 @@ import java.util.Map;
* @since 3.0 2025-02-17
*/
@RestController
@RequestMapping("v2/ccer/info")
@RequestMapping("v2/ccer")
@Tag(name="CCER信息总览")
@RequiredArgsConstructor
public class QyCcerInfoController {
@ -91,7 +89,7 @@ public class QyCcerInfoController {
* 获取根据状态统计的CCER数量
* @return 各状态的CCER数量
*/
@GetMapping("/count/ByState")
@GetMapping("state")
@Operation(summary = "根据状态统计CCER数量", description = "待申请、已申请状态的CCER数量")
public Result<Map<String, String>> countCcerByState() {
Map<String, String> countResult = qyCcerInfoService.countCcerByState();
@ -102,22 +100,12 @@ public class QyCcerInfoController {
* 根据区域与小区统计成交量,并计算每个小镇在所属区域内的成交量占比
* @return 返回一个List包含每个区域下每个小镇的成交量占比
*/
@GetMapping("/region")
@GetMapping("region")
@Operation(summary = "获取区域减排量占比")
@Parameter(name = "region", description = "区域名称")
public Result<List<Map<String, String>>>getEmissionReductionPercentages() {
List<Map<String, String>> percentage = qyCcerInfoService.getEmissionReductionPercentagesByState();
List<Map<String, String>> percentage = qyCcerInfoService.getByRegion();
return new Result<List<Map<String, String>>>().ok(percentage);
}
/**
*获取今日的总成交量和总成交金额
* @return 今日的总成交量和总成交金额
*/
@GetMapping("/today")
@Operation(summary = "今日总成交量和总成交金额",description = "获取今日的总成交量和总成交金额")
public Result<QyCcerSumInfoDTO> getTodayTotalVolume() {
QyCcerSumInfoDTO volumeList = qyCcerInfoService.getTodayTotalTransactionVolumeAndPriceByTime();
return new Result<QyCcerSumInfoDTO>().ok(volumeList);
}
}

1
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyGreenCertificateInfoController.java

@ -8,7 +8,6 @@ import com.thing.common.core.validator.group.AddGroup;
import com.thing.common.core.validator.group.UpdateGroup;
import com.thing.common.core.web.response.PageData;
import com.thing.common.core.web.response.Result;
import com.thing.qingyuan.carbon.dto.QyCcerSumInfoDTO;
import com.thing.qingyuan.carbon.dto.QyGreenCertificateInfoDTO;
import com.thing.qingyuan.carbon.dto.QyGreenSumInfoDTO;
import com.thing.qingyuan.carbon.service.QyGreenCertificateInfoService;

32
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerSumInfoDTO.java

@ -1,32 +0,0 @@
package com.thing.qingyuan.carbon.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
@Data
@Schema(description = "区域成交量和成交金额统计信息")
public class QyCcerSumInfoDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "区域")
private String belongRegion;
@Schema(description = "统计")
private String total;
@Schema(description = "状态")
private String state;
@Schema(description = "价格")
private Double price;
@Schema(description = "备案减排量")
private Double recordEmission;
@Schema(description = "待申请CCER")
private Double pending;
@Schema(description = "已申请CCER")
private Double applied;
@Schema(description = "累计CCER")
private Double total1;
}

10
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCcerInfoService.java

@ -2,10 +2,8 @@ package com.thing.qingyuan.carbon.service;
import com.thing.common.orm.service.IBaseService;
import com.thing.qingyuan.carbon.dto.QyCcerSumInfoDTO;
import com.thing.qingyuan.carbon.entity.QyCcerInfoEntity;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
@ -21,13 +19,7 @@ public interface QyCcerInfoService extends IBaseService<QyCcerInfoEntity> {
* 根据区域与小镇统计成交量,并计算每个小镇在所属区域内的成交量占比
* @return 返回一个Map,包含每个区域下每个小镇的成交量占比
*/
List<Map<String, String>> getEmissionReductionPercentagesByState();
List<Map<String, String>> getByRegion();
/**
* 获取今日的总成交量和今日总成交金额
* @return 今日的总成交量和今日总成交金额
*/
QyCcerSumInfoDTO getTodayTotalTransactionVolumeAndPriceByTime();
}

1
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyGreenCertificateInfoService.java

@ -1,7 +1,6 @@
package com.thing.qingyuan.carbon.service;
import com.thing.common.orm.service.IBaseService;
import com.thing.qingyuan.carbon.dto.QyCcerSumInfoDTO;
import com.thing.qingyuan.carbon.dto.QyGreenSumInfoDTO;
import com.thing.qingyuan.carbon.entity.QyGreenCertificateInfoEntity;

89
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCcerInfoServiceImpl.java

@ -4,10 +4,11 @@ import cn.hutool.core.collection.CollectionUtil;
import com.google.common.collect.Lists;
import com.mybatisflex.core.query.QueryWrapper;
import com.thing.common.orm.service.impl.BaseServiceImpl;
import com.thing.qingyuan.carbon.dto.QyCcerSumInfoDTO;
import com.thing.qingyuan.carbon.dto.QyCcerInfoDTO;
import com.thing.qingyuan.carbon.entity.QyCcerInfoEntity;
import com.thing.qingyuan.carbon.mapper.QyCcerInfoMapper;
import com.thing.qingyuan.carbon.service.QyCcerInfoService;
import com.thing.qingyuan.carbon.util.Constant;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@ -83,19 +84,19 @@ public class QyCcerInfoServiceImpl extends BaseServiceImpl<QyCcerInfoMapper, QyC
@Override
public Map<String, String> countCcerByState() {
QueryWrapper queryWrapper1 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.TOTAL).as("total"))
.select(sum(QY_CCER_INFO_ENTITY.TOTAL))
.from(QY_CCER_INFO_ENTITY)
.eq(QyCcerInfoEntity::getState, "1");
//sum1 待申请CCER
String sum1 = mapper.selectOneByQueryAs(queryWrapper1, String.class);
QueryWrapper queryWrapper2 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.TOTAL).as("total"))
.select(sum(QY_CCER_INFO_ENTITY.TOTAL))
.from(QY_CCER_INFO_ENTITY)
.eq(QyCcerInfoEntity::getState, "2");
//sum2 已申请CCER
String sum2 = mapper.selectOneByQueryAs(queryWrapper2, String.class);
QueryWrapper queryWrapper3 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.TOTAL).as("total"))
.select(sum(QY_CCER_INFO_ENTITY.TOTAL))
.from(QY_CCER_INFO_ENTITY);
//sum3 累计CCERsum=sum1+sum2
String sum3 = mapper.selectOneByQueryAs(queryWrapper3, String.class);
@ -106,7 +107,33 @@ public class QyCcerInfoServiceImpl extends BaseServiceImpl<QyCcerInfoMapper, QyC
//已申请CCER
temMap.put("applied", StringUtils.isBlank(sum2) ? "0" : sum2);
//累计CCER
temMap.put("total1", StringUtils.isBlank(sum3) ? "0" : sum3);
temMap.put("total", StringUtils.isBlank(sum3) ? "0" : sum3);
// 获取今天的日期
LocalDate today = LocalDate.now();
// 将今天的日期转换为 Date 类型
Long startOfDay = today.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli();
Long endOfDay = today.atTime(23, 59, 59, 999999999)
.atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
QueryWrapper queryWrapperDay = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.TOTAL))
.from(QY_CCER_INFO_ENTITY)
.ge(QyCcerInfoEntity::getIssueDate, startOfDay)
.le(QyCcerInfoEntity::getIssueDate, endOfDay)
;
String todayTotal = mapper.selectOneByQueryAs(queryWrapperDay, String.class);
temMap.put("todayTotal", StringUtils.isBlank(todayTotal) ? "0" : todayTotal);
QueryWrapper queryWrapperDay1 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.PRICE))
.from(QY_CCER_INFO_ENTITY)
.ge(QyCcerInfoEntity::getIssueDate, startOfDay)
.le(QyCcerInfoEntity::getIssueDate, endOfDay)
;
String todayPriceTotal = mapper.selectOneByQueryAs(queryWrapperDay1, String.class);
temMap.put("todayPriceTotal", StringUtils.isBlank(todayPriceTotal) ? "0" : todayPriceTotal);
return temMap;
}
@ -116,34 +143,32 @@ public class QyCcerInfoServiceImpl extends BaseServiceImpl<QyCcerInfoMapper, QyC
* @return 返回所有指定小镇的减排量占比
*/
@Override
public List<Map<String, String>> getEmissionReductionPercentagesByState() {
// 示例区域列表可根据实际情况查询数据库中的区域列表
List<String> regions = Arrays.asList("天玉镇", "河东街道", "富滩镇", "值夏镇", "文陂镇", "富田镇", "东固畲族乡", "新圩镇");
public List<Map<String, String>> getByRegion() {
// 根据区域查询成交量总和
QueryWrapper queryWrapper = QueryWrapper.create()
.select(QY_CCER_INFO_ENTITY.REGION, sum(QY_CCER_INFO_ENTITY.TOTAL).as("total"))
.from(QY_CCER_INFO_ENTITY)
.groupBy(QY_CCER_INFO_ENTITY.REGION);
// 查询符合条件的小镇成交量数据
List<QyCcerSumInfoDTO> quotaList1 = mapper.selectListByQueryAs(queryWrapper, QyCcerSumInfoDTO.class);
List<QyCcerInfoDTO> quotaList1 = mapper.selectListByQueryAs(queryWrapper, QyCcerInfoDTO.class);
//查询总量
QueryWrapper queryWrapper2 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.TOTAL).as("total"))
.select(sum(QY_CCER_INFO_ENTITY.TOTAL))
.from(QY_CCER_INFO_ENTITY);
String sumTotal = mapper.selectOneByQueryAs(queryWrapper2, String.class);
// 存储最终结果
List<Map<String, String>> resultList = new ArrayList<>();
List<String> tempRegions = Lists.newArrayList();
for (QyCcerSumInfoDTO quotaInfoDTO : quotaList1) {
for (QyCcerInfoDTO quotaInfoDTO : quotaList1) {
Map<String, String> tempMap = new HashMap<>();
//占比
tempMap.put("percent", new BigDecimal(quotaInfoDTO.getTotal()).divide(new BigDecimal(sumTotal), 2, RoundingMode.HALF_UP).toString());
tempMap.put("region", quotaInfoDTO.getBelongRegion());
tempMap.put("percent", quotaInfoDTO.getTotal().divide(new BigDecimal(sumTotal), 2, RoundingMode.HALF_UP).toString());
tempMap.put("region", quotaInfoDTO.getRegion());
resultList.add(tempMap);
tempRegions.add(quotaInfoDTO.getBelongRegion());
tempRegions.add(quotaInfoDTO.getRegion());
}
//差集
Collection<String> disjunction = CollectionUtil.disjunction(regions, tempRegions);
Collection<String> disjunction = CollectionUtil.disjunction(Constant.REGIONS, tempRegions);
for (String s : disjunction) {
Map<String, String> tempMap = new HashMap<>();
tempMap.put("percent", "0");
@ -154,39 +179,5 @@ public class QyCcerInfoServiceImpl extends BaseServiceImpl<QyCcerInfoMapper, QyC
}
/**
* 获取今日的总成交量和总成交金额
*
* @return 今日的总成交量和总成交金额
*/
@Override
public QyCcerSumInfoDTO getTodayTotalTransactionVolumeAndPriceByTime() {
// 获取今天的日期
LocalDate today = LocalDate.now();
// 将今天的日期转换为 Date 类型
Long startOfDay = today.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli();
Long endOfDay = today.atTime(23, 59, 59, 999999999)
.atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
// 查询今天的总成交量和总成交金额
QueryWrapper queryWrapper = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.ISSUE_DATE).as("recordEmission"),
sum(QY_CCER_INFO_ENTITY.PRICE).as("price"))
.ge(QyCcerInfoEntity::getIssueDate, startOfDay)
.le(QyCcerInfoEntity::getIssueDate, endOfDay)
.from(QY_CCER_INFO_ENTITY);
// 执行查询返回结果
QyCcerSumInfoDTO qyCcerSumInfoDTO = mapper.selectOneByQueryAs(queryWrapper, QyCcerSumInfoDTO.class);
if (qyCcerSumInfoDTO == null) {
qyCcerSumInfoDTO = new QyCcerSumInfoDTO();
qyCcerSumInfoDTO.setRecordEmission(0.0);
qyCcerSumInfoDTO.setPrice(0.0);
}
return qyCcerSumInfoDTO;
}
}
Loading…
Cancel
Save