From aba482345807986a56368084197b3fb991d69e0a Mon Sep 17 00:00:00 2001 From: jiangc <12345678> Date: Thu, 20 Feb 2025 17:22:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=BF=E8=AF=81=E5=92=8C=E7=A2=B3=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91=202025=E5=B9=B42?= =?UTF-8?q?=E6=9C=8820=E6=97=A517:22:37?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/QyCarbonAssetController.java | 68 ++++++++ .../QyCarbonQuotaInfoController.java | 10 -- .../controller/QyCcerInfoController.java | 10 +- .../QyGreenCertificateInfoController.java | 51 +++++- .../qingyuan/carbon/dto/QyCarbonAssetDTO.java | 19 +++ .../carbon/dto/QyCarbonQuotaInfoDTO.java | 4 +- .../qingyuan/carbon/dto/QyCcerSumInfoDTO.java | 2 +- .../carbon/dto/QyGreenCertificateInfoDTO.java | 8 +- .../carbon/dto/QyGreenSumInfoDTO.java | 31 ++++ .../carbon/entity/QyCarbonAssetEntity.java | 24 +++ .../entity/QyCarbonQuotaInfoEntity.java | 4 +- .../entity/QyGreenCertificateInfoEntity.java | 12 +- .../carbon/mapper/QyCarbonAssetMapper.java | 9 ++ .../carbon/service/QyCarbonAssetService.java | 23 +++ .../service/QyCarbonQuotaInfoService.java | 7 - .../QyGreenCertificateInfoService.java | 22 +++ .../impl/QyCarbonAssetServiceImpl.java | 142 +++++++++++++++++ .../impl/QyCarbonQuotaInfoServiceImpl.java | 10 -- .../service/impl/QyCcerInfoServiceImpl.java | 10 +- .../QyGreenCertificateInfoServiceImpl.java | 148 +++++++++++++++++- 20 files changed, 558 insertions(+), 56 deletions(-) create mode 100644 modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java create mode 100644 modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonAssetDTO.java create mode 100644 modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenSumInfoDTO.java create mode 100644 modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonAssetEntity.java create mode 100644 modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/mapper/QyCarbonAssetMapper.java create mode 100644 modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java create mode 100644 modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonAssetServiceImpl.java 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 new file mode 100644 index 0000000..74a757b --- /dev/null +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java @@ -0,0 +1,68 @@ +package com.thing.qingyuan.carbon.controller; + + +import com.thing.common.core.constants.Constant; +import com.thing.common.core.web.response.PageData; +import com.thing.common.core.web.response.Result; +import com.thing.qingyuan.carbon.dto.QyCarbonAssetDTO; +import com.thing.qingyuan.carbon.service.QyCarbonAssetService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequestMapping("v2/carbon/asset") +@Tag(name = "碳资产") +@RequiredArgsConstructor +public class QyCarbonAssetController { + + private final QyCarbonAssetService qyCarbonAssetService; + + @GetMapping("page") + @Operation(summary="分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true) , + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) , + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段") , + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)") + }) + public Result> page(@Parameter(hidden = true) @RequestParam Map params){ + PageData pageData = qyCarbonAssetService.getPageData(params, QyCarbonAssetDTO.class); + return new Result>().ok(pageData); + } + + @GetMapping("{id}") + @Operation(summary="信息") + public Result get(@PathVariable("id") Long id){ + QyCarbonAssetDTO data = qyCarbonAssetService.getByIdAs(id, QyCarbonAssetDTO.class); + return new Result().ok(data); + } + + + /** + * 计算当前碳资产,包括碳配额,CCER,绿证 + * @return 返回一个Map + */ + @GetMapping("/current") + @Operation(summary = "统计当前碳资产占比") + public Result> getCarbonAssetPercentages() { + Map resultMap = qyCarbonAssetService.countCarbonAsset(); + return new Result>().ok(resultMap); + } + + /** + * 获取累计碳资产的各项占比 + * @return 返回一个包含碳配额、CCER和绿证占比的Map + */ + @GetMapping("/accumulate") + @Operation(summary = "统计累计碳资产占比") + public Result> getTotalCarbonAssetPercentages() { + Map countResult = qyCarbonAssetService.countTotalCarbonAsset(); + return new Result>().ok(countResult); + } +} 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 4ed9a74..0673580 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 @@ -82,16 +82,6 @@ public class QyCarbonQuotaInfoController { } - @GetMapping("/region/{id}") - @Operation(summary = "获取单个区域信息") - public Result getRegionById(@PathVariable("id") Long id) { - try { - QyRegionEntity region = qyCarbonQuotaInfoService.getRegionById(id); // 通过ID获取区域的服务方法 - return new Result().ok(region); - } catch (Exception e) { - return new Result().error("获取区域信息失败: " + e.getMessage()); - } - } @GetMapping("/state") @Operation(summary = "获取碳配额状态统计和百分比") diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCcerInfoController.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCcerInfoController.java index 0a60c2a..81b5d47 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCcerInfoController.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCcerInfoController.java @@ -92,7 +92,7 @@ public class QyCcerInfoController { * @return 各状态的CCER数量 */ @GetMapping("/count/ByState") - @Operation(summary = "根据状态统计CCER数量", description = "待申请、已申请三种状态的CCER数量") + @Operation(summary = "根据状态统计CCER数量", description = "待申请、已申请状态的CCER数量") public Result> countCcerByState() { Map countResult = qyCcerInfoService.countCcerByState(); return new Result>().ok(countResult); @@ -110,15 +110,13 @@ public class QyCcerInfoController { return new Result>>().ok(percentage); } /** - *获取今日的总成交量 - * @return 今日的总成交量 + *获取今日的总成交量和总成交金额 + * @return 今日的总成交量和总成交金额 */ @GetMapping("/today") - @Operation(summary = "今日总成交量",description = "获取今日的总成交量") + @Operation(summary = "今日总成交量和总成交金额",description = "获取今日的总成交量和总成交金额") public Result getTodayTotalVolume() { - // 获取今日总成交量,假设按时间段分的结果 QyCcerSumInfoDTO volumeList = qyCcerInfoService.getTodayTotalTransactionVolumeAndPriceByTime(); - // 返回总成交量的列表映射 return new Result().ok(volumeList); } diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyGreenCertificateInfoController.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyGreenCertificateInfoController.java index 5e10617..8bd6c21 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyGreenCertificateInfoController.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyGreenCertificateInfoController.java @@ -8,7 +8,9 @@ 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; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -18,10 +20,11 @@ import jakarta.validation.groups.Default; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Map; @RestController -@RequestMapping("v2/qy/green/certificate/info") +@RequestMapping("v2/green/info") @Tag(name = "绿证信息总览") @RequiredArgsConstructor public class QyGreenCertificateInfoController { @@ -29,11 +32,11 @@ public class QyGreenCertificateInfoController { private final QyGreenCertificateInfoService qyGreenCertificateInfoService; @GetMapping("page") - @Operation(summary="分页") + @Operation(summary = "分页") @Parameters({ - @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true) , - @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true) , - @Parameter(name = Constant.ORDER_FIELD, description = "排序字段") , + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段"), @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)") }) public Result> page(@Parameter(hidden = true) @RequestParam Map params) { @@ -57,6 +60,7 @@ public class QyGreenCertificateInfoController { qyGreenCertificateInfoService.saveDto(dto); return new Result<>(); } + @PutMapping() @Operation(summary = "修改") @LogOperation("修改") @@ -66,13 +70,48 @@ public class QyGreenCertificateInfoController { qyGreenCertificateInfoService.updateDto(dto); return new Result<>(); } + @DeleteMapping() @Operation(summary = "删除") @LogOperation("删除") public Result delete(@RequestBody Long[] ids) { //校验数据 - AssertUtils.isArrayEmpty(ids,"id"); + AssertUtils.isArrayEmpty(ids, "id"); qyGreenCertificateInfoService.batchDelete(ids); return new Result<>(); } + + + /** + * 获取根据状态统计的绿证数量 + * @return 各状态的绿证数量 + */ + @GetMapping("/count/ByState") + @Operation(summary = "根据状态统计绿证数量", description = "待发放、已申请状态的CCER数量") + public Result> countGreenByState() { + Map countResult = qyGreenCertificateInfoService.countGreenByState(); + return new Result>().ok(countResult); + } + + /** + * 根据区域与绿证能源总量,并计算每个小镇在所属区域内的绿证占比 + * @return 返回一个List,包含每个区域下每个小镇的绿证占比 + */ + @GetMapping("/regions") + @Operation(summary = "获取区域绿证占比") + @Parameter(name = "region", description = "区域名称") + public Result>> getRegionGreenCertificatePercentage() { + List> percentage = qyGreenCertificateInfoService.getRegionGreenCertificatePercentage(); + return new Result>>().ok(percentage); + } + /** + *获取今日的总成交量和总成交金额 + * @return 今日的总成交量和总成交金额 + */ + @GetMapping("/today") + @Operation(summary = "今日总成交量和总成交金额",description = "获取今日的总成交量和总成交金额") + public Result getTodayTotal() { + QyGreenSumInfoDTO volumeList = qyGreenCertificateInfoService.getTodayTotalTransactionVolumeAndPriceByTime(); + return new Result().ok(volumeList); + } } 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 new file mode 100644 index 0000000..b59eefa --- /dev/null +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonAssetDTO.java @@ -0,0 +1,19 @@ +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 QyCarbonAssetDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "主键") + private Long id; + +} 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 0950b65..0a1c4e0 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 @@ -21,7 +21,7 @@ public class QyCarbonQuotaInfoDTO implements Serializable { @Schema(description = "主键") private Long id; - @Schema(description = "碳配额状态:1.累计碳配额(tCO2) 2.待发放碳配额(tCO2) 3.已发放碳配额(tCO2)") + @Schema(description = "碳配额状态:1.待发放碳配额(tCO2) 2.已发放碳配额(tCO2)") private String state; @Schema(description = "项目名称") private String name; @@ -31,7 +31,7 @@ public class QyCarbonQuotaInfoDTO implements Serializable { private Long certificationCycle; @Schema(description = "认证时间段") private Long certificationTime; - @Schema(description = "类别:1.累计碳配额(tCO2) 2.待发放碳配额(tCO2) 3.已发放碳配额(tCO2)") + @Schema(description = "类别:1.待发放碳配额(tCO2) 2.已发放碳配额(tCO2)") private String category; @Schema(description = "认证完成日期") private Long certificationFinishDate; diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerSumInfoDTO.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerSumInfoDTO.java index 5a9062d..b866f8c 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerSumInfoDTO.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerSumInfoDTO.java @@ -7,7 +7,7 @@ import java.io.Serial; import java.io.Serializable; @Data -@Schema(description = "区域成交量统计信息") +@Schema(description = "区域成交量和成交金额统计信息") public class QyCcerSumInfoDTO implements Serializable { @Serial private static final long serialVersionUID = 1L; 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 4756854..842fedd 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 @@ -20,7 +20,7 @@ public class QyGreenCertificateInfoDTO implements Serializable { @Schema(description = "主键") private Long id; - @Schema(description = "绿证状态:1.累计绿证(MWH) 2.待发放绿证(MWH) 3.已申请绿证(MWH)") + @Schema(description = "绿证状态:1.待发放绿证(MWH) 2.已申请绿证(MWH)") private String state; @Schema(description = "发电类型") private String powerType; @@ -29,7 +29,7 @@ public class QyGreenCertificateInfoDTO implements Serializable { @Schema(description = "核发日期") private Long dateIssue; @Schema(description = "绿证能源总量") - private String greenTotal; + private Double greenTotal; @Schema(description = "绿证证书代码") private String greenCode; @Schema(description = "创建者") @@ -46,5 +46,9 @@ public class QyGreenCertificateInfoDTO implements Serializable { private Long companyId; @Schema(description = "部门id") private Long deptId; + @Schema(description = "区域") + private String region; + @Schema(description = "价格") + private Double price; } \ No newline at end of file diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenSumInfoDTO.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenSumInfoDTO.java new file mode 100644 index 0000000..e03ddb0 --- /dev/null +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenSumInfoDTO.java @@ -0,0 +1,31 @@ +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 QyGreenSumInfoDTO implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + @Schema(description = "统计") + private String total; + @Schema(description = "状态") + private String state; + @Schema(description = "绿证能源总量") + private Double greenTotal; + @Schema(description = "绿证价格") + private Double price; + @Schema(description = "待发放绿证") + private Double pending; + @Schema(description = "已申请绿证") + private Double applied; + @Schema(description = "累计绿证") + private Double total1; + @Schema(description = "区域") + private String region; +} diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonAssetEntity.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonAssetEntity.java new file mode 100644 index 0000000..d53de9c --- /dev/null +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonAssetEntity.java @@ -0,0 +1,24 @@ +package com.thing.qingyuan.carbon.entity; + +import com.mybatisflex.annotation.Id; +import com.mybatisflex.annotation.KeyType; +import com.mybatisflex.annotation.Table; +import com.mybatisflex.core.keygen.KeyGenerators; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serial; +import java.io.Serializable; + +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper=false) +@Table("qy_carbon_asset") +public class QyCarbonAssetEntity implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + + @Id(keyType = KeyType.Generator,value = KeyGenerators.snowFlakeId) + private Long id; +} diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonQuotaInfoEntity.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonQuotaInfoEntity.java index a65da25..b42b1be 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonQuotaInfoEntity.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonQuotaInfoEntity.java @@ -29,7 +29,7 @@ public class QyCarbonQuotaInfoEntity extends BaseInfoEntity implements Serializ private static final long serialVersionUID = 1L; /** - * 碳配额状态:1.累计碳配额(tCO2) 2.待发放碳配额(tCO2) 3.已发放碳配额(tCO2) + * 碳配额状态:1.待发放碳配额(tCO2) 2.已发放碳配额(tCO2) */ private String state; /** @@ -49,7 +49,7 @@ public class QyCarbonQuotaInfoEntity extends BaseInfoEntity implements Serializ */ private Long certificationTime; /** - * 类别:1.累计碳配额(tCO2) 2.待发放碳配额(tCO2) 3.已发放碳配额(tCO2) + * 类别:1.待发放碳配额(tCO2) 2.已发放碳配额(tCO2) */ private String category; /** diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyGreenCertificateInfoEntity.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyGreenCertificateInfoEntity.java index 05a4727..61a8bb0 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyGreenCertificateInfoEntity.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyGreenCertificateInfoEntity.java @@ -28,7 +28,7 @@ public class QyGreenCertificateInfoEntity extends BaseInfoEntity implements Seri /** - * 绿证状态:1.累计绿证(MWH) 2.待发放绿证(MWH) 3.已申请绿证(MWH) + * 绿证状态:1.待发放绿证(MWH) 2.已申请绿证(MWH) */ private String state; /** @@ -46,10 +46,18 @@ public class QyGreenCertificateInfoEntity extends BaseInfoEntity implements Seri /** * 绿证能源总量 */ - private String greenTotal; + private Double greenTotal; /** * 绿证证书代码 */ private String greenCode; + /** + * 区域 + */ + private String region; + /** + * 绿证价格 + */ + private Double price; } \ No newline at end of file diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/mapper/QyCarbonAssetMapper.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/mapper/QyCarbonAssetMapper.java new file mode 100644 index 0000000..e6a60a0 --- /dev/null +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/mapper/QyCarbonAssetMapper.java @@ -0,0 +1,9 @@ +package com.thing.qingyuan.carbon.mapper; + +import com.thing.common.orm.mapper.PowerBaseMapper; +import com.thing.qingyuan.carbon.entity.QyCarbonAssetEntity; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface QyCarbonAssetMapper extends PowerBaseMapper { +} 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 new file mode 100644 index 0000000..3d45486 --- /dev/null +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java @@ -0,0 +1,23 @@ +package com.thing.qingyuan.carbon.service; + + +import com.thing.common.orm.service.IBaseService; +import com.thing.qingyuan.carbon.entity.QyCarbonAssetEntity; + +import java.util.Map; + +public interface QyCarbonAssetService extends IBaseService{ + + + /** + * 计算当前碳资产,包括碳配额,CCER,绿证 + * @return 返回一个Map + */ + Map countCarbonAsset(); + + /** + * 计算累计碳资产,包括碳配额、CCER和绿证的占比 + * @return 返回一个包含碳配额、CCER和绿证占比的Map + */ + Map countTotalCarbonAsset(); +} diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonQuotaInfoService.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonQuotaInfoService.java index f71ac0f..2c28996 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonQuotaInfoService.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonQuotaInfoService.java @@ -20,13 +20,6 @@ public interface QyCarbonQuotaInfoService extends IBaseService> getEmissionReductionPercentagesByState(); - /** - * 根据ID获取指定区域 - * - * @param id 区域ID - * @return 返回区域对象 - */ - QyRegionEntity getRegionById(Long id); /** * 统计当前碳配额总和和三种状态所占百分比 diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyGreenCertificateInfoService.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyGreenCertificateInfoService.java index c81a80f..1d72d5e 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyGreenCertificateInfoService.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyGreenCertificateInfoService.java @@ -1,7 +1,29 @@ 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; +import java.util.List; +import java.util.Map; + public interface QyGreenCertificateInfoService extends IBaseService { + /** + * 根据区域与小镇统计绿证,并计算每个小镇在所属区域内的绿证占比 + * @return 返回一个Map,包含每个区域下每个小镇的绿证占比 + */ + List> getRegionGreenCertificatePercentage(); + + /** + * 获取今日的总成交量和今日总成交金额 + * @return 今日的总成交量和今日总成交金额 + */ + QyGreenSumInfoDTO getTodayTotalTransactionVolumeAndPriceByTime(); + + /** + * 获取根据状态统计的绿证数量 + * @return 各状态的绿证数量 + */ + Map countGreenByState(); } 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 new file mode 100644 index 0000000..837901e --- /dev/null +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonAssetServiceImpl.java @@ -0,0 +1,142 @@ +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.entity.QyCarbonAssetEntity; +import com.thing.qingyuan.carbon.entity.QyCarbonQuotaInfoEntity; +import com.thing.qingyuan.carbon.entity.QyCcerInfoEntity; +import com.thing.qingyuan.carbon.entity.QyGreenCertificateInfoEntity; +import com.thing.qingyuan.carbon.mapper.QyCarbonAssetMapper; +import com.thing.qingyuan.carbon.service.QyCarbonAssetService; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.HashMap; +import java.util.Map; + +import static com.mybatisflex.core.query.QueryMethods.sum; +import static com.thing.qingyuan.carbon.entity.table.QyCarbonQuotaInfoEntityTableDef.QY_CARBON_QUOTA_INFO_ENTITY; +import static com.thing.qingyuan.carbon.entity.table.QyCcerInfoEntityTableDef.QY_CCER_INFO_ENTITY; +import static com.thing.qingyuan.carbon.entity.table.QyGreenCertificateInfoEntityTableDef.QY_GREEN_CERTIFICATE_INFO_ENTITY; + +@Service +public class QyCarbonAssetServiceImpl extends BaseServiceImpl implements QyCarbonAssetService { + @Override + public QueryWrapper getWrapper(Map params) { + return null; + } + + /** + * 计算当前碳资产,包括碳配额,CCER,绿证 + * @return 返回一个Map + */ + @Override + public Map countCarbonAsset() { + //查询待发放碳配额 + QueryWrapper queryWrapper = QueryWrapper.create() + .select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total")) + .from(QY_CARBON_QUOTA_INFO_ENTITY) + .eq(QyCarbonQuotaInfoEntity::getState,"1"); + // sum1 为待发放碳配额 + String sum1 = mapper.selectOneByQueryAs(queryWrapper, String.class); + + //查询待申请CCER + QueryWrapper queryWrapper1 = QueryWrapper.create() + .select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total")) + .from(QY_CCER_INFO_ENTITY) + .eq(QyCcerInfoEntity::getState,"1"); + // sum2 为待申请CCER + String sum2 = mapper.selectOneByQueryAs(queryWrapper1, String.class); + + //查询待发放绿证 + QueryWrapper queryWrapper2 = QueryWrapper.create() + .select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total")) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY) + .eq(QyGreenCertificateInfoEntity::getState,"1"); + // sum3 为待发放绿证 + String sum3 = mapper.selectOneByQueryAs(queryWrapper2, String.class); + + //统计当前状态下 碳配额,ccer,绿证总和 + BigDecimal addTotal = new BigDecimal(sum1).add(new BigDecimal(sum2)).add(new BigDecimal(sum3)); + + // 查询已发放碳配额 + QueryWrapper queryWrapper3 = QueryWrapper.create() + .select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total")) + .from(QY_CARBON_QUOTA_INFO_ENTITY) + .eq(QyCarbonQuotaInfoEntity::getState,"2"); + // sum4 为已发放碳配额 + String sum4 = mapper.selectOneByQueryAs(queryWrapper3, String.class); + + // 查询已申请ccer + QueryWrapper queryWrapper4 = QueryWrapper.create() + .select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total")) + .from(QY_CCER_INFO_ENTITY) + .eq(QyCcerInfoEntity::getState,"2"); + // sum5 为已申请ccer + String sum5 = mapper.selectOneByQueryAs(queryWrapper4, String.class); + + // 查询已发放绿证 + QueryWrapper queryWrapper5 = QueryWrapper.create() + .select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total")) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY) + .eq(QyGreenCertificateInfoEntity::getState,"2"); + // sum6 为已发放绿证 + String sum6 = mapper.selectOneByQueryAs(queryWrapper5, String.class); + + //统计当前状态下,碳配额,ccer,绿证总和 + BigDecimal addTotal1 = new BigDecimal(sum4).add(new BigDecimal(sum5)).add(new BigDecimal(sum6)); + + //返回结果 + Map temMap = new HashMap<>(); + //1.碳配额占比 + temMap.put("quotaPercent",new BigDecimal(sum1).divide(addTotal,2, RoundingMode.HALF_UP).toString()); + temMap.put("quotaPercent1",new BigDecimal(sum4).divide(addTotal1,2, RoundingMode.HALF_UP).toString()); + //CCER占比 + temMap.put("ccerPercent",new BigDecimal(sum2).divide(addTotal,2, RoundingMode.HALF_UP).toString()); + temMap.put("ccerPercent1",new BigDecimal(sum5).divide(addTotal1,2, RoundingMode.HALF_UP).toString()); + //绿证占比 + temMap.put("greenPercent",new BigDecimal(sum3).divide(addTotal,2, RoundingMode.HALF_UP).toString()); + temMap.put("greenPercent1",new BigDecimal(sum6).divide(addTotal1,2, RoundingMode.HALF_UP).toString()); + return temMap; + + } + + /** + * 计算累计碳资产,包括碳配额、CCER和绿证的占比 + * @return 返回一个包含碳配额、CCER和绿证占比的Map + */ + @Override + public Map countTotalCarbonAsset() { + QueryWrapper queryWrapper = QueryWrapper.create() + .select(sum(QY_CARBON_QUOTA_INFO_ENTITY.CARBON_QUOTA).as("total")) + .from(QY_CARBON_QUOTA_INFO_ENTITY); + //sum1 当前碳配额 + String sum1 = mapper.selectOneByQueryAs(queryWrapper, String.class); + + QueryWrapper queryWrapper1 = QueryWrapper.create() + .select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total")) + .from(QY_CCER_INFO_ENTITY); + //sum2 当前CCER + String sum2 = mapper.selectOneByQueryAs(queryWrapper1, String.class); + + QueryWrapper queryWrapper2 = QueryWrapper.create() + .select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total")) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY); + //sum3 当前绿证 + String sum3 = mapper.selectOneByQueryAs(queryWrapper2, String.class); + + //资产综合 + BigDecimal sumTotal = new BigDecimal(sum1).add(new BigDecimal(sum2)).add(new BigDecimal(sum3)); + + //存储最终结果 + Map temMap = new HashMap<>(); + //碳配额占比 + temMap.put("quotaPercent",new BigDecimal(sum1).divide(sumTotal,2, RoundingMode.HALF_UP).toString()); + //CCER占比 + temMap.put("ccerPercent",new BigDecimal(sum2).divide(sumTotal,2, RoundingMode.HALF_UP).toString()); + //绿证占比 + temMap.put("greenPercent",new BigDecimal(sum3).divide(sumTotal,2, RoundingMode.HALF_UP).toString()); + return temMap; + } +} diff --git a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonQuotaInfoServiceImpl.java b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonQuotaInfoServiceImpl.java index 6e013cf..0a4cc06 100644 --- a/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonQuotaInfoServiceImpl.java +++ b/modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonQuotaInfoServiceImpl.java @@ -130,14 +130,4 @@ public class QyCarbonQuotaInfoServiceImpl extends BaseServiceImpl countCcerByState() { QueryWrapper queryWrapper1 = QueryWrapper.create() - .select(QY_CCER_INFO_ENTITY.RECORD_EMISSION.as("total")) + .select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total")) .from(QY_CCER_INFO_ENTITY) .eq(QyCcerInfoEntity::getState, "1"); //sum1 待申请CCER String sum1 = mapper.selectOneByQueryAs(queryWrapper1, String.class); QueryWrapper queryWrapper2 = QueryWrapper.create() - .select(QY_CCER_INFO_ENTITY.RECORD_EMISSION.as("total")) + .select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total")) .from(QY_CCER_INFO_ENTITY) .eq(QyCcerInfoEntity::getState, "2"); //sum2 已申请CCER String sum2 = mapper.selectOneByQueryAs(queryWrapper2, String.class); QueryWrapper queryWrapper3 = QueryWrapper.create() - .select(QY_CCER_INFO_ENTITY.RECORD_EMISSION.as("total")) + .select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("total")) .from(QY_CCER_INFO_ENTITY); //sum3 累计CCER(sum=sum1+sum2) String sum3 = mapper.selectOneByQueryAs(queryWrapper3, String.class); @@ -171,7 +169,7 @@ public class QyCcerInfoServiceImpl extends BaseServiceImpl implements QyGreenCertificateInfoService { @Override public QueryWrapper getWrapper(Map params) { QueryWrapper qw = new QueryWrapper(); + // 根据 params 添加条件 + if (params.containsKey("state")) { + qw.eq("state", params.get("state")); + } + if (params.containsKey("powerType")) { + qw.eq("powerType", params.get("powerType")); + } + if (params.containsKey("region")) { + qw.eq("region", params.get("region")); + } + if (params.containsKey("applicationDate")) { + qw.ge("applicationDate", params.get("applicationDate")); + } + if (params.containsKey("dateIssue")) { + qw.ge("dateIssue", params.get("dateIssue")); + } + return qw; } -} + + /** + * 获取根据状态统计的绿证数量 + * @return 各状态的绿证数量 + */ + @Override + public Map countGreenByState() { + QueryWrapper queryWrapper1 = QueryWrapper.create() + .select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total")) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY) + .eq(QyGreenCertificateInfoEntity::getState,"1"); + //sum1 为待发放绿证 + String sum1 = mapper.selectOneByQueryAs(queryWrapper1,String.class); + + QueryWrapper queryWrapper2 = QueryWrapper.create() + .select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total")) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY) + .eq(QyGreenCertificateInfoEntity::getState,"2"); + //sum1 为已申请绿证 + String sum2 = mapper.selectOneByQueryAs(queryWrapper2,String.class); + + QueryWrapper queryWrapper3 = QueryWrapper.create() + .select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total")) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY); + //sum1 为累计绿证 (sum=sum1+sum2) + String sum = mapper.selectOneByQueryAs(queryWrapper3,String.class); + + Map temMap = new HashMap<>(); + //待发放绿证 + temMap.put("pending", StringUtils.isBlank(sum1) ? "0" : sum1); + //已申请绿证 + temMap.put("applied", StringUtils.isBlank(sum2) ? "0" : sum2); + //累计绿证 + temMap.put("total1", StringUtils.isBlank(sum) ? "0" : sum); + return temMap; + } + + /** + * 根据区域与小镇统计绿证,并计算每个小镇在所属区域内的绿证占比 + * @return 返回一个Map,包含每个区域下每个小镇的绿证占比 + */ + @Override + public List> getRegionGreenCertificatePercentage() { + // 示例区域列表,可根据实际情况查询数据库中的区域列表 + List regions = Arrays.asList("天玉镇", "河东街道", "富滩镇", "值夏镇", "文陂镇", "富田镇", "东固畲族乡", "新圩镇"); + // 根据区域查询成绿证总和 + QueryWrapper queryWrapper = QueryWrapper.create() + .select(QY_GREEN_CERTIFICATE_INFO_ENTITY.REGION,sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total")) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY) + .groupBy(QY_GREEN_CERTIFICATE_INFO_ENTITY.REGION); + // 查询符合条件的小镇绿证数据 + List qyGreenSumInfoDTOList = mapper.selectListByQueryAs(queryWrapper, QyGreenSumInfoDTO.class); + //查询绿证总能源量 + QueryWrapper queryWrapper6 = QueryWrapper.create() + .select(sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("total")) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY); + String sumTotal = mapper.selectOneByQueryAs(queryWrapper6, String.class); + //存储最终结果 + List> resultList = new ArrayList<>(); + List tempRegions = Lists.newArrayList(); + for (QyGreenSumInfoDTO qyGreenSumInfoDTO : qyGreenSumInfoDTOList) { + Map tempMap = new HashMap<>(); + //占比 + tempMap.put("percent", new BigDecimal(qyGreenSumInfoDTO.getTotal()).divide(new BigDecimal(sumTotal), 2, RoundingMode.HALF_UP).toString()); + tempMap.put("region", qyGreenSumInfoDTO.getRegion()); + resultList.add(tempMap); + tempRegions.add(qyGreenSumInfoDTO.getRegion()); + } + //差集 + Collection disjunction = CollectionUtil.disjunction(regions, tempRegions); + for (String s : disjunction) { + Map tempMap = new HashMap<>(); + tempMap.put("percent", "0"); + tempMap.put("region", s); + resultList.add(tempMap); + } + + + + return resultList; + } + + + /** + * 获取今日的总成交量和今日总成交金额 + * @return 今日的总成交量和今日总成交金额 + */ + @Override + public QyGreenSumInfoDTO 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_GREEN_CERTIFICATE_INFO_ENTITY.GREEN_TOTAL).as("greenTotal"), + sum(QY_GREEN_CERTIFICATE_INFO_ENTITY.PRICE).as("price")) + .ge(QyGreenCertificateInfoEntity::getApplicationDate, startOfDay) + .le(QyGreenCertificateInfoEntity::getApplicationDate, endOfDay) + .from(QY_GREEN_CERTIFICATE_INFO_ENTITY); + + // 执行查询,返回结果 + QyGreenSumInfoDTO qyGreenSumInfoDTO = mapper.selectOneByQueryAs(queryWrapper, QyGreenSumInfoDTO.class); + if (qyGreenSumInfoDTO == null) { + qyGreenSumInfoDTO = new QyGreenSumInfoDTO(); + qyGreenSumInfoDTO.setGreenTotal(0.0); + qyGreenSumInfoDTO.setPrice(0.0); + } + return qyGreenSumInfoDTO; + } + } +