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 642d041..24aa22d 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 @@ -37,4 +37,11 @@ public class QyCarbonAssetDTO implements Serializable { this.total = total; this.state = state; } + + public QyCarbonAssetDTO(Long issueDate, BigDecimal total, String state, BigDecimal balance) { + this.issueDate = issueDate; + this.total = total; + this.state = state; + this.balance = balance; + } } diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonQuotaInfoDTO.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonQuotaInfoDTO.java index 697a610..f6fb298 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonQuotaInfoDTO.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonQuotaInfoDTO.java @@ -59,5 +59,9 @@ public class QyCarbonQuotaInfoDTO implements Serializable { private BigDecimal price; @Schema(description = "所属标签") private String tag="碳配额"; + public String getTag() { + // 确保tag永远有默认值,如果为null或 "",则返回 "碳配额" + return tag == null || tag.isEmpty() ? "碳配额" : tag; + } } \ No newline at end of file diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerInfoDTO.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerInfoDTO.java index 547c60b..1bde009 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerInfoDTO.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerInfoDTO.java @@ -56,4 +56,8 @@ public class QyCcerInfoDTO implements Serializable { private Long deptId; @Schema(description = "所属标签") private String tag="CCER"; + public String getTag() { + // 确保tag永远有默认值,如果为null或 "",则返回 "CCER" + return tag == null || tag.isEmpty() ? "CCER" : tag; + } } \ No newline at end of file diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenCertificateInfoDTO.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenCertificateInfoDTO.java index 43550a2..7f33efd 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenCertificateInfoDTO.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenCertificateInfoDTO.java @@ -55,5 +55,9 @@ public class QyGreenCertificateInfoDTO implements Serializable { private BigDecimal price; @Schema(description = "所属标签") private String tag="绿证"; + public String getTag() { + // 确保tag永远有默认值,如果为null或 "",则返回 "绿证" + return tag == null || tag.isEmpty() ? "绿证" : tag; + } } \ No newline at end of file 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 892b69c..f4cd82f 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 @@ -212,6 +212,58 @@ public class QyCarbonAssetServiceImpl implements QyCarbonAssetService { resList.addAll(carbonList); resList.addAll(ccerInfoList); resList.addAll(greenList); + + // 计算每个账户的总余额 + BigDecimal totalCarbonBalance = BigDecimal.ZERO; + BigDecimal totalCcerBalance = BigDecimal.ZERO; + BigDecimal totalGreenBalance = BigDecimal.ZERO; + + // 计算碳配额的余额 + BigDecimal carbonTotal = carbonList.stream() + .filter(s -> "2".equals(s.getState()) || "3".equals(s.getState())) // 状态为 2 或 3 + .map(QyCarbonAssetDTO::getTotal) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal carbonSell = carbonList.stream() + .filter(s -> "4".equals(s.getState()) || "5".equals(s.getState())) // 状态为 4 或 5 + .map(QyCarbonAssetDTO::getTotal) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal carbonBalance = carbonTotal.subtract(carbonSell); + totalCarbonBalance = totalCarbonBalance.add(carbonBalance); + + // 计算CCER的余额 + BigDecimal ccerTotal = ccerInfoList.stream() + .filter(s -> "2".equals(s.getState()) || "3".equals(s.getState())) // 状态为 2 或 3 + .map(QyCarbonAssetDTO::getTotal) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal ccerSell = ccerInfoList.stream() + .filter(s -> "4".equals(s.getState()) || "5".equals(s.getState())) // 状态为 4 或 5 + .map(QyCarbonAssetDTO::getTotal) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal ccerBalance = ccerTotal.subtract(ccerSell); + totalCcerBalance = totalCcerBalance.add(ccerBalance); + + // 计算绿证的余额 + BigDecimal greenTotal = greenList.stream() + .filter(s -> "2".equals(s.getState()) || "3".equals(s.getState())) // 状态为 2 或 3 + .map(QyCarbonAssetDTO::getTotal) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal greenSell = greenList.stream() + .filter(s -> "4".equals(s.getState()) || "5".equals(s.getState())) // 状态为 4 或 5 + .map(QyCarbonAssetDTO::getTotal) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + BigDecimal greenBalance = greenTotal.subtract(greenSell); + totalGreenBalance = totalGreenBalance.add(greenBalance); + + // 计算所有账户的总余额 + BigDecimal totalBalance = totalCarbonBalance.add(totalCcerBalance).add(totalGreenBalance); + System.out.println("Total Balance : " + totalBalance); + //不超过6个月的查询每天的,超过的查询每个月的 if(!sixMonth){ Map> grouped = resList.stream() @@ -225,7 +277,7 @@ public class QyCarbonAssetServiceImpl implements QyCarbonAssetService { resList.clear(); grouped.forEach((state, dateMap) -> { dateMap.forEach((date, total) -> { - resList.add(new QyCarbonAssetDTO(date, total,state)); + resList.add(new QyCarbonAssetDTO(date, total,state,totalBalance)); }); }); }else { @@ -248,7 +300,7 @@ public class QyCarbonAssetServiceImpl implements QyCarbonAssetService { try { Date dateObj = sdf.parse(date); long issueDate = dateObj.getTime(); - resList.add(new QyCarbonAssetDTO(issueDate, total,state)); + resList.add(new QyCarbonAssetDTO(issueDate, total,state,totalBalance)); } catch (Exception e) { log.error("日期转换错误",e); }