|
|
|
@ -1,7 +1,10 @@ |
|
|
|
package com.thing.qingyuan.carbon.service.impl; |
|
|
|
|
|
|
|
import cn.hutool.core.map.MapUtil; |
|
|
|
import com.google.common.collect.Lists; |
|
|
|
import com.mybatisflex.core.query.QueryWrapper; |
|
|
|
import com.thing.common.core.utils.PageUtils; |
|
|
|
import com.thing.common.core.web.response.PageData; |
|
|
|
import com.thing.qingyuan.carbon.dto.QyCarbonAssetDTO; |
|
|
|
import com.thing.qingyuan.carbon.dto.QyCarbonSumQuotaInfoDTO; |
|
|
|
import com.thing.qingyuan.carbon.entity.QyCarbonQuotaInfoEntity; |
|
|
|
@ -284,158 +287,84 @@ public class QyCarbonAssetServiceImpl implements QyCarbonAssetService { |
|
|
|
* @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) { |
|
|
|
public PageData<QyCarbonAssetDTO> calculateAsset(Map<String, Object> params) { |
|
|
|
Integer page = MapUtil.getInt(params, "page"); |
|
|
|
Integer limit = MapUtil.getInt(params, "limit"); |
|
|
|
Long startTime = MapUtil.getLong(params, "startTime"); |
|
|
|
Long endTime = MapUtil.getLong(params, "endTime"); |
|
|
|
List<QyCarbonAssetDTO> resList = Lists.newArrayList(); |
|
|
|
List<QyCarbonAssetDTO> carbonList = qyCarbonQuotaInfoService.getMapper().selectListByQueryAs( |
|
|
|
QueryWrapper.create().select(QY_CARBON_QUOTA_INFO_ENTITY.TOTAL, |
|
|
|
QY_CARBON_QUOTA_INFO_ENTITY.STATE, |
|
|
|
QY_CARBON_QUOTA_INFO_ENTITY.ISSUE_DATE, |
|
|
|
QY_CARBON_QUOTA_INFO_ENTITY.TAG, |
|
|
|
QY_CARBON_QUOTA_INFO_ENTITY.TOTAL, |
|
|
|
QY_CARBON_QUOTA_INFO_ENTITY.PRICE |
|
|
|
) |
|
|
|
.ge(QyCarbonQuotaInfoEntity::getIssueDate, startTime,!Objects.isNull(startTime)) |
|
|
|
.lt(QyCarbonQuotaInfoEntity::getIssueDate, endTime,!Objects.isNull(endTime)) |
|
|
|
, QyCarbonAssetDTO.class); |
|
|
|
|
|
|
|
if(CollectionUtils.isNotEmpty(carbonList)){ |
|
|
|
calBalanceAndUnitPrice(carbonList); |
|
|
|
} |
|
|
|
|
|
|
|
//查询CCER这段时间的账户总额度 |
|
|
|
List<QyCarbonAssetDTO> ccerInfoList = qyCcerInfoService.getMapper().selectListByQueryAs( |
|
|
|
QueryWrapper.create().select( |
|
|
|
QY_CCER_INFO_ENTITY.TOTAL, |
|
|
|
QY_CCER_INFO_ENTITY.STATE, |
|
|
|
QY_CCER_INFO_ENTITY.ISSUE_DATE, |
|
|
|
QY_CCER_INFO_ENTITY.TAG, |
|
|
|
QY_CCER_INFO_ENTITY.TOTAL, |
|
|
|
QY_CCER_INFO_ENTITY.PRICE) |
|
|
|
.ge(QyCcerInfoEntity::getIssueDate, startTime,!Objects.isNull(startTime)) |
|
|
|
.lt(QyCcerInfoEntity::getIssueDate, endTime,!Objects.isNull(endTime)) |
|
|
|
, QyCarbonAssetDTO.class); |
|
|
|
|
|
|
|
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()); |
|
|
|
if(CollectionUtils.isNotEmpty(ccerInfoList)){ |
|
|
|
calBalanceAndUnitPrice(ccerInfoList); |
|
|
|
} |
|
|
|
|
|
|
|
//碳配额数量(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());*/ |
|
|
|
//查询绿证这段时间的账户总额度 |
|
|
|
List<QyCarbonAssetDTO> greenList = qyGreenCertificateInfoService.getMapper().selectListByQueryAs( |
|
|
|
QueryWrapper.create().select( |
|
|
|
QY_GREEN_CERTIFICATE_INFO_ENTITY.TOTAL, |
|
|
|
QY_GREEN_CERTIFICATE_INFO_ENTITY.STATE, |
|
|
|
QY_GREEN_CERTIFICATE_INFO_ENTITY.ISSUE_DATE, |
|
|
|
QY_GREEN_CERTIFICATE_INFO_ENTITY.TAG, |
|
|
|
QY_GREEN_CERTIFICATE_INFO_ENTITY.TOTAL, |
|
|
|
QY_GREEN_CERTIFICATE_INFO_ENTITY.PRICE) |
|
|
|
.ge(QyGreenCertificateInfoEntity::getIssueDate, startTime,!Objects.isNull(startTime)) |
|
|
|
.lt(QyGreenCertificateInfoEntity::getIssueDate, endTime,!Objects.isNull(endTime)) |
|
|
|
, QyCarbonAssetDTO.class); |
|
|
|
|
|
|
|
if(CollectionUtils.isNotEmpty(greenList)){ |
|
|
|
calBalanceAndUnitPrice(greenList); |
|
|
|
} |
|
|
|
resList.addAll(carbonList); |
|
|
|
resList.addAll(ccerInfoList); |
|
|
|
resList.addAll(greenList); |
|
|
|
List<QyCarbonAssetDTO> list = resList.stream().sorted(Comparator.comparing(QyCarbonAssetDTO::getIssueDate).reversed()).toList(); |
|
|
|
List<QyCarbonAssetDTO> qyCarbonAssetDTOS = PageUtils.startPage(list, page, limit); |
|
|
|
return new PageData<>(qyCarbonAssetDTOS, CollectionUtils.size(list)); |
|
|
|
} |
|
|
|
|
|
|
|
return null; |
|
|
|
private static void calBalanceAndUnitPrice(List<QyCarbonAssetDTO> carbonList) { |
|
|
|
//总数 |
|
|
|
BigDecimal sum = carbonList.stream().filter(s -> !"1".equals(s.getState())) |
|
|
|
.map(QyCarbonAssetDTO::getTotal) |
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add); |
|
|
|
//核销和卖出 |
|
|
|
BigDecimal sellNum = carbonList.stream().filter(s -> "4".equals(s.getState()) || "5".equals(s.getState())) |
|
|
|
.map(QyCarbonAssetDTO::getTotal) |
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add); |
|
|
|
|
|
|
|
BigDecimal balance = sum.subtract(sellNum); |
|
|
|
for (QyCarbonAssetDTO qyCarbonAssetDTO : carbonList) { |
|
|
|
qyCarbonAssetDTO.setBalance(balance); |
|
|
|
qyCarbonAssetDTO.setUnitPrice(qyCarbonAssetDTO.getTotal().divide(qyCarbonAssetDTO.getPrice(), 2, RoundingMode.HALF_UP)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |