diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java index 6a1f3e0..b4f6a7c 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java @@ -66,25 +66,39 @@ public class QyCarbonAssetController { return new Result>().ok(countResult); } + + /** + * 统计买入,发放,核销三种状态共计碳资产量 + * @return 返回一个map + */ + @GetMapping("/count/state") + @Operation(summary = "统计买入、发放、核销三种状态碳资产量") + public Result> countCarbonAssetState() { + Map stateCount = qyCarbonAssetService.countCarbonAssetState(); + return new Result>().ok(stateCount); + } + /** * 获取碳资产对应标签的单价,数量,余额,账户总余额 * @return 返回一个Map */ - @GetMapping("/unit/Price") - @Operation(summary = "计算碳配额,CCER,绿证单价") - public Result> calculateCarbonAsset() { - Map unitPrice = qyCarbonAssetService.calculateAsset(); + @GetMapping("/unit/price") + @Operation(summary = "获取碳资产对应标签的单价,数量,余额,账户总余额") + public Result> calculateAsset(@RequestParam("startTime") String startTime, + @RequestParam("endTime") String endTime) { + Map unitPrice = qyCarbonAssetService.calculateAsset(startTime,endTime); return new Result>().ok(unitPrice); } /** - * 统计买入,发放,核销三种状态共计碳资产量 + * 统计近几个月的碳资产 * @return 返回一个map */ - @GetMapping("/count/ByState") - @Operation(summary = "统计买入、发放、核销三种状态碳资产量") - public Result> countCarbonAssetState() { - Map stateCount = qyCarbonAssetService.countCarbonAssetState(); - return new Result>().ok(stateCount); + @GetMapping("/recent/months") + @Operation(summary = "统计进几个月的碳资产") + public Result> recentMonths(@RequestParam("startTime") String startTime, + @RequestParam("endTime") String endTime) { + Map carbonAsset = qyCarbonAssetService.countRecentCarbonAsset(startTime,endTime); + return new Result>().ok(carbonAsset); } } diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonQuotaInfoController.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonQuotaInfoController.java index 2a51a96..fe182e8 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonQuotaInfoController.java +++ b/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)") }) diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonAssetDTO.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonAssetDTO.java index b59eefa..82fe5c9 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonAssetDTO.java +++ b/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; + + } diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java index 5f64bb1..5ce3de9 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java @@ -20,15 +20,23 @@ public interface QyCarbonAssetService extends IBaseService{ * @return 返回一个包含碳配额、CCER和绿证占比的Map */ Map countTotalCarbonAsset(); - /** - * 获取碳资产对应标签的单价,数量,余额,账户总余额 - * @return 返回一个Map - */ - Map calculateAsset(); /** * 统计买入,发放,核销三种状态共计碳资产量 * @return 返回一个map */ Map countCarbonAssetState(); + + /** + * 统计近几个月的资产 + * @return 返回一个map + */ + Map countRecentCarbonAsset(String startTime, String endTime); + + /** + * 获取碳资产对应标签的单价,数量,余额,账户总余额 + * @return 返回一个Map + */ + Map calculateAsset(String startTime, String endTime); + } diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonAssetServiceImpl.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonAssetServiceImpl.java index 81e7995..87d1615 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonAssetServiceImpl.java +++ b/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 calculateAsset() { - /* - ==================================碳配额数量和金额 ===================================================================== + public Map 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 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 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 countCarbonAssetState() { - /* + public Map 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= '" + 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= '" + 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= '" + 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= '" + 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= '" + 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= '" + 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= '" + 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= '" + 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 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 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 qyCarbonAssetDTOSTPE = mapper.selectListByQueryAs(queryWrapper, QyCarbonAssetDTO.class); + for (QyCarbonAssetDTO qyCarbonAssetDTO : qyCarbonAssetDTOSTPE) { + + } + + + List qyCarbonAssetDTOSccer = mapper.selectListByQueryAs(queryWrapper, QyCarbonAssetDTO.class); + + + + List qyCarbonAssetDTOlzr = mapper.selectListByQueryAs(queryWrapper, QyCarbonAssetDTO.class); + + + qyCarbonAssetDTOSTPE.addAll(qyCarbonAssetDTOSccer); + qyCarbonAssetDTOSTPE.addAll(qyCarbonAssetDTOlzr); + + List 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 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; + } + }