Browse Source

碳资产 2025年2月20日17:22:37

qingyuan_dev_new
jiangc 1 year ago
parent
commit
a1714c3700
  1. 34
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java
  2. 1
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonQuotaInfoController.java
  3. 15
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonAssetDTO.java
  4. 18
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java
  5. 407
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonAssetServiceImpl.java

34
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java

@ -66,25 +66,39 @@ public class QyCarbonAssetController {
return new Result<Map<String, String>>().ok(countResult);
}
/**
* 统计买入,发放,核销三种状态共计碳资产量
* @return 返回一个map
*/
@GetMapping("/count/state")
@Operation(summary = "统计买入、发放、核销三种状态碳资产量")
public Result<Map<String, String>> countCarbonAssetState() {
Map<String, String> stateCount = qyCarbonAssetService.countCarbonAssetState();
return new Result<Map<String, String>>().ok(stateCount);
}
/**
* 获取碳资产对应标签的单价,数量,余额,账户总余额
* @return 返回一个Map
*/
@GetMapping("/unit/Price")
@Operation(summary = "计算碳配额,CCER,绿证单价")
public Result<Map<String, String>> calculateCarbonAsset() {
Map<String, String> unitPrice = qyCarbonAssetService.calculateAsset();
@GetMapping("/unit/price")
@Operation(summary = "获取碳资产对应标签的单价,数量,余额,账户总余额")
public Result<Map<String, String>> calculateAsset(@RequestParam("startTime") String startTime,
@RequestParam("endTime") String endTime) {
Map<String, String> unitPrice = qyCarbonAssetService.calculateAsset(startTime,endTime);
return new Result<Map<String, String>>().ok(unitPrice);
}
/**
* 统计买入,发放,核销三种状态共计碳资产量
* 统计近几个月的碳资产
* @return 返回一个map
*/
@GetMapping("/count/ByState")
@Operation(summary = "统计买入、发放、核销三种状态碳资产量")
public Result<Map<String, String>> countCarbonAssetState() {
Map<String, String> stateCount = qyCarbonAssetService.countCarbonAssetState();
return new Result<Map<String, String>>().ok(stateCount);
@GetMapping("/recent/months")
@Operation(summary = "统计进几个月的碳资产")
public Result<Map<String, String>> recentMonths(@RequestParam("startTime") String startTime,
@RequestParam("endTime") String endTime) {
Map<String, String> carbonAsset = qyCarbonAssetService.countRecentCarbonAsset(startTime,endTime);
return new Result<Map<String, String>>().ok(carbonAsset);
}
}

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

@ -36,6 +36,7 @@ public class QyCarbonQuotaInfoController {
@Parameters({
@Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true) ,
@Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) ,
@Parameter(name = "state", description = "状态", required = true) ,
@Parameter(name = Constant.ORDER_FIELD, description = "排序字段") ,
@Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)")
})

15
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonAssetDTO.java

@ -5,6 +5,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@Schema(description = "碳资产")
@ -16,4 +17,18 @@ public class QyCarbonAssetDTO implements Serializable {
@Schema(description = "主键")
private Long id;
@Schema(description = "交易时间")
private Long dealTime;
@Schema(description = "交易时间")
private String dealXz;
@Schema(description = "交易时间")
private String tag;
@Schema(description = "单价")
private BigDecimal dj;
@Schema(description = "价格")
private String price;
private String zhye;
}

18
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java

@ -20,15 +20,23 @@ public interface QyCarbonAssetService extends IBaseService<QyCarbonAssetEntity>{
* @return 返回一个包含碳配额CCER和绿证占比的Map
*/
Map<String,String> countTotalCarbonAsset();
/**
* 获取碳资产对应标签的单价,数量,余额,账户总余额
* @return 返回一个Map
*/
Map<String,String> calculateAsset();
/**
* 统计买入,发放,核销三种状态共计碳资产量
* @return 返回一个map
*/
Map<String,String> countCarbonAssetState();
/**
* 统计近几个月的资产
* @return 返回一个map
*/
Map<String,String> countRecentCarbonAsset(String startTime, String endTime);
/**
* 获取碳资产对应标签的单价,数量,余额,账户总余额
* @return 返回一个Map
*/
Map<String,String> calculateAsset(String startTime, String endTime);
}

407
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonAssetServiceImpl.java

@ -2,6 +2,7 @@ package com.thing.qingyuan.carbon.service.impl;
import com.mybatisflex.core.query.QueryWrapper;
import com.thing.common.orm.service.impl.BaseServiceImpl;
import com.thing.qingyuan.carbon.dto.QyCarbonAssetDTO;
import com.thing.qingyuan.carbon.entity.QyCarbonAssetEntity;
import com.thing.qingyuan.carbon.entity.QyCarbonQuotaInfoEntity;
import com.thing.qingyuan.carbon.entity.QyCcerInfoEntity;
@ -10,14 +11,12 @@ import com.thing.qingyuan.carbon.mapper.QyCarbonAssetMapper;
import com.thing.qingyuan.carbon.service.QyCarbonAssetService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.mybatisflex.core.query.QueryMethods.sum;
@ -147,132 +146,124 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
}
/**
* 获取碳资产对应标签的单价,数量,余额,账户总余额
* @return 返回一个Map
* 统计买入,发放,核销三种状态共计碳资产量
* @return 返回一个map
*/
@Override
public Map<String, String> calculateAsset() {
/*
==================================碳配额数量和金额 =====================================================================
public Map<String, String> countCarbonAssetState() {
/*
==============================统计买入量==============================================================
*/
//查询碳配额量总量
//查询碳配额买入碳资产
QueryWrapper queryWrapper = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total"))
.from(QY_CARBON_QUOTA_INFO_ENTITY);
//numTotal 为碳配额量总量
.from(QY_CARBON_QUOTA_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"1");
//numTotal 为碳配额中买入碳资产量
String carbonTotal = mapper.selectOneByQueryAs(queryWrapper, String.class);
//查询碳配额总金额
//查询ccer买入碳资产
QueryWrapper queryWrapper1 = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.PRICE).as("total"))
.from(QY_CARBON_QUOTA_INFO_ENTITY);
// sum 为碳配额总金额
String carbonPrice = mapper.selectOneByQueryAs(queryWrapper1, String.class);
/*
==================================CCER数量和金额====================================================================
*/
//查询ccer总量
QueryWrapper queryWrapper2 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total"))
.from(QY_CCER_INFO_ENTITY);
//ccerNum 为ccer总量
String ccerTotal= mapper.selectOneByQueryAs(queryWrapper2, String.class);
//查询ccer总金额
QueryWrapper queryWrapper3 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.PRICE).as("total"))
.from(QY_CCER_INFO_ENTITY);
//sum1 为ccer总金额
String ccerPrice= mapper.selectOneByQueryAs(queryWrapper3, String.class);
.from(QY_CCER_INFO_ENTITY)
.eq(QyCcerInfoEntity::getAssetState,"1");
//ccerTotal 为ccer中买入碳资产量
String ccerTotal = mapper.selectOneByQueryAs(queryWrapper1, String.class);
/*
====================================绿证数量和金额=====================================================================
*/
//查询绿证总量
QueryWrapper queryWrapper4 = QueryWrapper.create()
//查询绿证买入碳资产
QueryWrapper queryWrapper2 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total"))
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY);
//greenTotal 为绿证总量
String greenTotal = mapper.selectOneByQueryAs(queryWrapper4, String.class);
//查询绿证总金额
QueryWrapper queryWrapper5 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.PRICE).as("total"))
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY);
// sum2 为绿证总金额
String greenPrice = mapper.selectOneByQueryAs(queryWrapper5, String.class);
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY)
.eq(QyGreenCertificateInfoEntity::getAssetState,"1");
//greenTotal 为绿证买入碳资产量
String greenTotal = mapper.selectOneByQueryAs(queryWrapper2, String.class);
/*
====================================核销量=================================================================
==============================统计核销量=====================================================================
*/
//查询碳配额核销量
QueryWrapper queryWrapper6 = QueryWrapper.create()
QueryWrapper queryWrapper3 = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.from(QY_CARBON_QUOTA_INFO_ENTITY);
//carbonVer 为碳配额核销量
String carbonVer = mapper.selectOneByQueryAs(queryWrapper6, String.class);
.from(QY_CARBON_QUOTA_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"2");
//carbonVolume 为碳配额核销量
String carbonVolume = mapper.selectOneByQueryAs(queryWrapper3, String.class);
//查询ccer核销量
QueryWrapper queryWrapper7 = QueryWrapper.create()
QueryWrapper queryWrapper4 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.from(QY_CCER_INFO_ENTITY);
//ccerVer 为ccer核销量
String ccerVer = mapper.selectOneByQueryAs(queryWrapper7, String.class);
.from(QY_CCER_INFO_ENTITY)
.eq(QyCcerInfoEntity::getAssetState,"2");
//ccerVolume 为ccer核销量
String ccerVolume = mapper.selectOneByQueryAs(queryWrapper4, String.class);
//查询绿证核销量
QueryWrapper queryWrapper8 = QueryWrapper.create()
QueryWrapper queryWrapper5 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY);
//greenVer 为绿证核销量
String greenVer = mapper.selectOneByQueryAs(queryWrapper8, String.class);
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY)
.eq(QyGreenCertificateInfoEntity::getAssetState,"2");
//greenVolume 为绿证核销量
String greenVolume = mapper.selectOneByQueryAs(queryWrapper5, String.class);
/*
======================================统计账户总余额========================================================
/*
==============================统计发放量=====================================================================
*/
//统计碳配额总余额
BigDecimal carbonAccount = new BigDecimal(carbonTotal).subtract(new BigDecimal(carbonVer));
//统计ccer总余额
BigDecimal ccerAccount = new BigDecimal(ccerTotal).subtract(new BigDecimal(ccerVer));
//统计绿证总余额
BigDecimal greenAccount = (new BigDecimal(greenTotal).subtract(new BigDecimal(greenVer))).multiply(new BigDecimal("0.5703"));
//查询碳配额卖出量
QueryWrapper queryWrapper6 = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total"))
.from(QY_CARBON_QUOTA_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"3");
//carbonSell 为碳配额卖出
String carbonSell = mapper.selectOneByQueryAs(queryWrapper6, String.class);
//存储最终结果
HashMap<String, String> temMap = new HashMap<>();
//计算碳配额单价(/tCO2)
temMap.put("carbonUnitPrice",new BigDecimal(carbonTotal).divide(new BigDecimal(carbonPrice),2, RoundingMode.HALF_UP).toString());
//计算ccer单价
temMap.put("ccerUnitPrice",new BigDecimal(ccerTotal).divide(new BigDecimal(ccerPrice),2, RoundingMode.HALF_UP).toString());
//计算绿证单价
temMap.put("greenUnitPrice",new BigDecimal(greenTotal).multiply(new BigDecimal("0.5703")).divide(new BigDecimal(greenPrice),2, RoundingMode.HALF_UP).toString());
//查询ccer卖出量
QueryWrapper queryWrapper7 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total"))
.from(QY_CCER_INFO_ENTITY)
.eq(QyCcerInfoEntity::getAssetState,"3");
//ccerSell 为ccer卖出
String ccerSell = mapper.selectOneByQueryAs(queryWrapper7, String.class);
//碳配额数量(tCO2)
temMap.put("carbonNum", StringUtils.isBlank(carbonTotal) ? "0" : carbonTotal);
//ccer数量(tCO2)
temMap.put("ccerNum", StringUtils.isBlank(ccerTotal) ? "0" : ccerTotal);
//绿证数量(tCO2)
temMap.put("greenNum", StringUtils.isBlank(greenTotal) ? "0" : greenTotal);
//碳配额金额,总余额
temMap.put("carbonPrice", StringUtils.isBlank(carbonPrice) ? "0" : carbonPrice);
temMap.put("carbonRemain",carbonAccount.toString());
//ccer金额,总余额
temMap.put("ccerPrice", StringUtils.isBlank(ccerPrice) ? "0" : ccerPrice);
temMap.put("ccerRemain",ccerAccount.toString());
//绿证金额,总余额
temMap.put("greenPrice", StringUtils.isBlank(greenPrice) ? "0" : greenPrice);
temMap.put("greenRemain",greenAccount.toString());
//查询绿证卖出量
QueryWrapper queryWrapper8 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total"))
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY)
.eq(QyGreenCertificateInfoEntity::getAssetState,"3");
//greenSell 为绿证卖出
String greenSell = mapper.selectOneByQueryAs(queryWrapper8, String.class);
//总买入碳资产
BigDecimal buyTotal = new BigDecimal(greenTotal).multiply(new BigDecimal("0.5703")).add(new BigDecimal(carbonTotal)).add(new BigDecimal(ccerTotal));
//总核销碳资产
BigDecimal verTotal = new BigDecimal(greenVolume).multiply(new BigDecimal("0.5703")).add(new BigDecimal(carbonVolume)).add(new BigDecimal(ccerVolume));
//总卖出碳资产
BigDecimal sellTotal = new BigDecimal(greenSell).multiply(new BigDecimal("0.5703")).add(new BigDecimal(carbonSell)).add(new BigDecimal(ccerSell));
//存入结果
HashMap<String, String> temMap = new HashMap<>();
//返回结果 买入 核销 卖出
temMap.put("buy", buyTotal.compareTo(BigDecimal.ZERO) == 0 ? "0" : buyTotal.toString());
temMap.put("ver", verTotal.compareTo(BigDecimal.ZERO) == 0 ? "0" : verTotal.toString());
temMap.put("sell", sellTotal.compareTo(BigDecimal.ZERO) == 0 ? "0" : sellTotal.toString());
return temMap;
}
/**
* 统计买入,发放,核销三种状态共计碳资产量
* 统计近几个月的碳资产
* @return 返回一个map
*/
@Override
public Map<String, String> countCarbonAssetState() {
/*
public Map<String, String> countRecentCarbonAsset(String startTime, String endTime) {
/*
==============================统计买入量==============================================================
*/
//查询碳配额买入碳资产
QueryWrapper queryWrapper = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total"))
.from(QY_CARBON_QUOTA_INFO_ENTITY)
.where("issue_date >= '" + startTime + "' AND issue_date <'" + endTime + "'")
.eq(QyCarbonQuotaInfoEntity::getAssetState,"1");
//numTotal 为碳配额中买入碳资产量
String carbonTotal = mapper.selectOneByQueryAs(queryWrapper, String.class);
@ -281,7 +272,8 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
QueryWrapper queryWrapper1 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total"))
.from(QY_CCER_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"1");
.where("emission_time >= '" + startTime + "' AND emission_time < '" + endTime + "'")
.eq(QyCcerInfoEntity::getAssetState,"1");
//ccerTotal 为ccer中买入碳资产量
String ccerTotal = mapper.selectOneByQueryAs(queryWrapper1, String.class);
@ -289,7 +281,8 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
QueryWrapper queryWrapper2 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total"))
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"1");
.where("date_issue >= '" + startTime + "' AND date_issue < '" + endTime + "'")
.eq(QyGreenCertificateInfoEntity::getAssetState,"1");
//greenTotal 为绿证买入碳资产量
String greenTotal = mapper.selectOneByQueryAs(queryWrapper2, String.class);
@ -300,6 +293,7 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
QueryWrapper queryWrapper3 = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.from(QY_CARBON_QUOTA_INFO_ENTITY)
.where("verification_date >= '" + startTime + "' AND verification_date <= '" + endTime + "'")
.eq(QyCarbonQuotaInfoEntity::getAssetState,"2");
//carbonVolume 为碳配额核销量
String carbonVolume = mapper.selectOneByQueryAs(queryWrapper3, String.class);
@ -308,7 +302,8 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
QueryWrapper queryWrapper4 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.from(QY_CCER_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"2");
.where("verification_date >= '" + startTime + "' AND verification_date <= '" + endTime + "'")
.eq(QyCcerInfoEntity::getAssetState,"2");
//ccerVolume 为ccer核销量
String ccerVolume = mapper.selectOneByQueryAs(queryWrapper4, String.class);
@ -316,11 +311,11 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
QueryWrapper queryWrapper5 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"2");
.where("verification_date >= '" + startTime + "' AND verification_date <= '" + endTime + "'")
.eq(QyGreenCertificateInfoEntity::getAssetState,"2");
//greenVolume 为绿证核销量
String greenVolume = mapper.selectOneByQueryAs(queryWrapper5, String.class);
/*
==============================统计发放量=====================================================================
*/
@ -328,6 +323,7 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
QueryWrapper queryWrapper6 = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total"))
.from(QY_CARBON_QUOTA_INFO_ENTITY)
.where("issue_date >= '" + startTime + "' AND issue_date <= '" + endTime + "'")
.eq(QyCarbonQuotaInfoEntity::getAssetState,"3");
//carbonSell 为碳配额卖出
String carbonSell = mapper.selectOneByQueryAs(queryWrapper6, String.class);
@ -336,7 +332,8 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
QueryWrapper queryWrapper7 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total"))
.from(QY_CCER_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"3");
.where("emission_time >= '" + startTime + "' AND emission_time <= '" + endTime + "'")
.eq(QyCcerInfoEntity::getAssetState,"3");
//ccerSell 为ccer卖出
String ccerSell = mapper.selectOneByQueryAs(queryWrapper7, String.class);
@ -344,22 +341,228 @@ public class QyCarbonAssetServiceImpl extends BaseServiceImpl<QyCarbonAssetMappe
QueryWrapper queryWrapper8 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total"))
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY)
.eq(QyCarbonQuotaInfoEntity::getAssetState,"3");
.where("date_issue >= '" + startTime + "' AND date_issue <= '" + endTime + "'")
.eq(QyGreenCertificateInfoEntity::getAssetState,"3");
//greenSell 为绿证卖出
String greenSell = mapper.selectOneByQueryAs(queryWrapper8, String.class);
/*
==================================碳配额数量=====================================================================
*/
//查询碳配额量总量
QueryWrapper queryWrapper9 = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total"))
.where("issue_date >= '" + startTime + "' AND issue_date <= '" + endTime + "'")
.from(QY_CARBON_QUOTA_INFO_ENTITY);
//numTotal 为碳配额量总量
String carbonSum = mapper.selectOneByQueryAs(queryWrapper9, String.class);
/*
==================================CCER数量====================================================================
*/
//查询ccer总量
QueryWrapper queryWrapper11 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total"))
.where("emission_time >= '" + startTime + "' AND emission_time <= '" + endTime + "'")
.from(QY_CCER_INFO_ENTITY);
//ccerNum 为ccer总量
String ccerSum= mapper.selectOneByQueryAs(queryWrapper11, String.class);
/*
====================================绿证数量=====================================================================
*/
//查询绿证总量
QueryWrapper queryWrapper13 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total"))
.where("date_issue >= '" + startTime + "' AND date_issue <= '" + endTime + "'")
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY);
//greenTotal 为绿证总量
String greenSum = mapper.selectOneByQueryAs(queryWrapper13, String.class);
/*
======================================统计账户总余额========================================================
*/
//统计碳配额总余额
BigDecimal carbonAccount = new BigDecimal(carbonSum).subtract(new BigDecimal(carbonVolume));
//统计ccer总余额
BigDecimal ccerAccount = new BigDecimal(ccerSum).subtract(new BigDecimal(ccerVolume));
//统计绿证总余额
BigDecimal greenAccount = (new BigDecimal(greenSum).subtract(new BigDecimal(greenVolume))).multiply(new BigDecimal("0.5703"));
//账户余额
BigDecimal remain = carbonAccount.add(ccerAccount).add(greenAccount);
//总买入碳资产
BigDecimal buyTotal = new BigDecimal(carbonTotal).add(new BigDecimal(ccerTotal)).add(new BigDecimal(greenTotal)).multiply(new BigDecimal("0.5703"));
BigDecimal buyTotal = new BigDecimal(greenTotal).multiply(new BigDecimal("0.5703")).add(new BigDecimal(carbonTotal)).add(new BigDecimal(ccerTotal));
//总核销碳资产
BigDecimal verTotal = new BigDecimal(carbonVolume).add(new BigDecimal(ccerVolume)).add(new BigDecimal(greenVolume)).multiply(new BigDecimal("0.5703"));
BigDecimal verTotal = new BigDecimal(greenVolume).multiply(new BigDecimal("0.5703")).add(new BigDecimal(carbonVolume)).add(new BigDecimal(ccerVolume));
//总卖出碳资产
BigDecimal sellTotal = new BigDecimal(carbonSell).add(new BigDecimal(ccerSell)).add(new BigDecimal(greenSell)).multiply(new BigDecimal("0.5703"));
BigDecimal sellTotal = new BigDecimal(greenSell).multiply(new BigDecimal("0.5703")).add(new BigDecimal(carbonSell)).add(new BigDecimal(ccerSell));
//存入结果
HashMap<String, String> temMap = new HashMap<>();
//返回结果 买入 核销 卖出
temMap.put("buy", buyTotal.compareTo(BigDecimal.ZERO) == 0 ? "0" : buyTotal.toString());
temMap.put("ver", verTotal.compareTo(BigDecimal.ZERO) == 0 ? "0" : verTotal.toString());
temMap.put("sell", sellTotal.compareTo(BigDecimal.ZERO) == 0 ? "0" : sellTotal.toString());
//账户余额
temMap.put("carbonRemain",remain.toString());
return temMap;
}
/**
* 获取碳资产对应标签的单价,数量,余额,账户总余额
* @return 返回一个Map
*/
@Override
public Map<String, String> calculateAsset(String startTime, String endTime) {
QueryWrapper queryWrapper = QueryWrapper.create()
.select(
QY_CARBON_QUOTA_INFO_ENTITY.ISSUE_DATE.as("deal_time"),
QY_CARBON_QUOTA_INFO_ENTITY.PRICE
)
.where("issue_date >= '" + startTime + "' AND issue_date <= '" + endTime + "'")
.from(QY_CARBON_QUOTA_INFO_ENTITY);
List<QyCarbonAssetDTO> qyCarbonAssetDTOSTPE = mapper.selectListByQueryAs(queryWrapper, QyCarbonAssetDTO.class);
for (QyCarbonAssetDTO qyCarbonAssetDTO : qyCarbonAssetDTOSTPE) {
}
List<QyCarbonAssetDTO> qyCarbonAssetDTOSccer = mapper.selectListByQueryAs(queryWrapper, QyCarbonAssetDTO.class);
List<QyCarbonAssetDTO> qyCarbonAssetDTOlzr = mapper.selectListByQueryAs(queryWrapper, QyCarbonAssetDTO.class);
qyCarbonAssetDTOSTPE.addAll(qyCarbonAssetDTOSccer);
qyCarbonAssetDTOSTPE.addAll(qyCarbonAssetDTOlzr);
List<QyCarbonAssetDTO> list = qyCarbonAssetDTOSTPE.stream().sorted(Comparator.comparing(QyCarbonAssetDTO::getDealTime).reversed()).toList();
/*
==================================碳配额数量和金额 =====================================================================
*/
//查询碳配额量总量
QueryWrapper queryWrapper = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total"))
.where("issue_date >= '" + startTime + "' AND issue_date <= '" + endTime + "'")
.from(QY_CARBON_QUOTA_INFO_ENTITY);
//numTotal 为碳配额量总量
String carbonTotal = mapper.selectOneByQueryAs(queryWrapper, String.class);
//查询碳配额总金额
QueryWrapper queryWrapper1 = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.PRICE).as("total"))
.where("issue_date >= '" + startTime + "' AND issue_date <= '" + endTime + "'")
.from(QY_CARBON_QUOTA_INFO_ENTITY);
// sum 为碳配额总金额
String carbonPrice = mapper.selectOneByQueryAs(queryWrapper1, String.class);
/*
==================================CCER数量和金额====================================================================
*/
//查询ccer总量
QueryWrapper queryWrapper2 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total"))
.where("emission_time >= '" + startTime + "' AND emission_time <= '" + endTime + "'")
.from(QY_CCER_INFO_ENTITY);
//ccerNum 为ccer总量
String ccerTotal= mapper.selectOneByQueryAs(queryWrapper2, String.class);
//查询ccer总金额
QueryWrapper queryWrapper3 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.PRICE).as("total"))
.where("emission_time >= '" + startTime + "' AND emission_time <= '" + endTime + "'")
.from(QY_CCER_INFO_ENTITY);
//sum1 为ccer总金额
String ccerPrice= mapper.selectOneByQueryAs(queryWrapper3, String.class);
/*
====================================绿证数量和金额=====================================================================
*/
//查询绿证总量
QueryWrapper queryWrapper4 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total"))
.where("date_issue >= '" + startTime + "' AND date_issue <= '" + endTime + "'")
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY);
//greenTotal 为绿证总量
String greenTotal = mapper.selectOneByQueryAs(queryWrapper4, String.class);
//查询绿证总金额
QueryWrapper queryWrapper5 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.PRICE).as("total"))
.where("date_issue >= '" + startTime + "' AND date_issue <= '" + endTime + "'")
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY);
// sum2 为绿证总金额
String greenPrice = mapper.selectOneByQueryAs(queryWrapper5, String.class);
/*
====================================核销量=================================================================
*/
//查询碳配额核销量
QueryWrapper queryWrapper6 = QueryWrapper.create()
.select(sum(QY_CARBON_QUOTA_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.where("verification_date >= '" + startTime + "' AND verification_date <= '" + endTime + "'")
.eq(QyCarbonQuotaInfoEntity::getAssetState,"2")
.from(QY_CARBON_QUOTA_INFO_ENTITY);
//carbonVer 为碳配额核销量
String carbonVer = mapper.selectOneByQueryAs(queryWrapper6, String.class);
//查询ccer核销量
QueryWrapper queryWrapper7 = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.eq(QyCcerInfoEntity::getAssetState,"2")
.where("verification_date >= '" + startTime + "' AND verification_date <= '" + endTime + "'")
.from(QY_CCER_INFO_ENTITY);
//ccerVer 为ccer核销量
String ccerVer = mapper.selectOneByQueryAs(queryWrapper7, String.class);
//查询绿证核销量
QueryWrapper queryWrapper8 = QueryWrapper.create()
.select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.VERIFICATION_VOLUME).as("total"))
.eq(QyGreenCertificateInfoEntity::getAssetState,"2")
.where("verification_date >= '" + startTime + "' AND verification_date <= '" + endTime + "'")
.from(QY_GREEN_CERTIFICATE_INFO_ENTITY);
//greenVer 为绿证核销量
String greenVer = mapper.selectOneByQueryAs(queryWrapper8, String.class);
/*
======================================统计账户总余额========================================================
*/
//统计碳配额总余额
BigDecimal carbonAccount = new BigDecimal(carbonTotal).subtract(new BigDecimal(carbonVer));
//统计ccer总余额
BigDecimal ccerAccount = new BigDecimal(ccerTotal).subtract(new BigDecimal(ccerVer));
//统计绿证总余额
BigDecimal greenAccount = (new BigDecimal(greenTotal).subtract(new BigDecimal(greenVer))).multiply(new BigDecimal("0.5703"));
//存储最终结果
HashMap<String, String> temMap = new HashMap<>();
//计算碳配额单价(/tCO2)
temMap.put("carbonUnitPrice",new BigDecimal(carbonTotal).divide(new BigDecimal(carbonPrice),2, RoundingMode.HALF_UP).toString());
//计算ccer单价
temMap.put("ccerUnitPrice",new BigDecimal(ccerTotal).divide(new BigDecimal(ccerPrice),2, RoundingMode.HALF_UP).toString());
//计算绿证单价
temMap.put("greenUnitPrice",new BigDecimal(greenTotal).multiply(new BigDecimal("0.5703")).divide(new BigDecimal(greenPrice),2, RoundingMode.HALF_UP).toString());
//碳配额数量(tCO2)
temMap.put("carbonNum", StringUtils.isBlank(carbonTotal) ? "0" : carbonTotal);
//ccer数量(tCO2)
temMap.put("ccerNum", StringUtils.isBlank(ccerTotal) ? "0" : ccerTotal);
//绿证数量(tCO2)
temMap.put("greenNum", StringUtils.isBlank(greenTotal) ? "0" : greenTotal);
//总数量
temMap.put("totalNum",new BigDecimal(carbonTotal).add(new BigDecimal(ccerTotal)).add(new BigDecimal(greenTotal)).toString());
//碳配额金额,总余额
temMap.put("carbonPrice", StringUtils.isBlank(carbonPrice) ? "0" : carbonPrice);
temMap.put("carbonRemain",carbonAccount.toString());
//ccer金额,总余额
temMap.put("ccerPrice", StringUtils.isBlank(ccerPrice) ? "0" : ccerPrice);
temMap.put("ccerRemain",ccerAccount.toString());
//绿证金额,总余额
temMap.put("greenPrice", StringUtils.isBlank(greenPrice) ? "0" : greenPrice);
temMap.put("greenRemain",greenAccount.toString());
return temMap;
}
}
Loading…
Cancel
Save