Browse Source

绿证和碳资产功能开发 2025年2月20日17:22:37

qingyuan_dev_new
jiangc 11 months ago
parent
commit
aba4823458
  1. 68
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonAssetController.java
  2. 10
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCarbonQuotaInfoController.java
  3. 10
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyCcerInfoController.java
  4. 51
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/controller/QyGreenCertificateInfoController.java
  5. 19
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonAssetDTO.java
  6. 4
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCarbonQuotaInfoDTO.java
  7. 2
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyCcerSumInfoDTO.java
  8. 8
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenCertificateInfoDTO.java
  9. 31
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/dto/QyGreenSumInfoDTO.java
  10. 24
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonAssetEntity.java
  11. 4
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyCarbonQuotaInfoEntity.java
  12. 12
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/entity/QyGreenCertificateInfoEntity.java
  13. 9
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/mapper/QyCarbonAssetMapper.java
  14. 23
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonAssetService.java
  15. 7
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonQuotaInfoService.java
  16. 22
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyGreenCertificateInfoService.java
  17. 142
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonAssetServiceImpl.java
  18. 10
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonQuotaInfoServiceImpl.java
  19. 10
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCcerInfoServiceImpl.java
  20. 148
      modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyGreenCertificateInfoServiceImpl.java

68
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<PageData<QyCarbonAssetDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params){
PageData<QyCarbonAssetDTO> pageData = qyCarbonAssetService.getPageData(params, QyCarbonAssetDTO.class);
return new Result<PageData<QyCarbonAssetDTO>>().ok(pageData);
}
@GetMapping("{id}")
@Operation(summary="信息")
public Result<QyCarbonAssetDTO> get(@PathVariable("id") Long id){
QyCarbonAssetDTO data = qyCarbonAssetService.getByIdAs(id, QyCarbonAssetDTO.class);
return new Result<QyCarbonAssetDTO>().ok(data);
}
/**
* 计算当前碳资产,包括碳配额,CCER,绿证
* @return 返回一个Map
*/
@GetMapping("/current")
@Operation(summary = "统计当前碳资产占比")
public Result<Map<String, String>> getCarbonAssetPercentages() {
Map<String, String> resultMap = qyCarbonAssetService.countCarbonAsset();
return new Result<Map<String, String>>().ok(resultMap);
}
/**
* 获取累计碳资产的各项占比
* @return 返回一个包含碳配额CCER和绿证占比的Map
*/
@GetMapping("/accumulate")
@Operation(summary = "统计累计碳资产占比")
public Result<Map<String, String>> getTotalCarbonAssetPercentages() {
Map<String, String> countResult = qyCarbonAssetService.countTotalCarbonAsset();
return new Result<Map<String, String>>().ok(countResult);
}
}

10
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<QyRegionEntity> getRegionById(@PathVariable("id") Long id) {
try {
QyRegionEntity region = qyCarbonQuotaInfoService.getRegionById(id); // 通过ID获取区域的服务方法
return new Result<QyRegionEntity>().ok(region);
} catch (Exception e) {
return new Result<QyRegionEntity>().error("获取区域信息失败: " + e.getMessage());
}
}
@GetMapping("/state")
@Operation(summary = "获取碳配额状态统计和百分比")

10
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<Map<String, String>> countCcerByState() {
Map<String, String> countResult = qyCcerInfoService.countCcerByState();
return new Result<Map<String, String>>().ok(countResult);
@ -110,15 +110,13 @@ public class QyCcerInfoController {
return new Result<List<Map<String, String>>>().ok(percentage);
}
/**
*获取今日的总成交量
* @return 今日的总成交量
*获取今日的总成交量和总成交金额
* @return 今日的总成交量和总成交金额
*/
@GetMapping("/today")
@Operation(summary = "今日总成交量",description = "获取今日的总成交量")
@Operation(summary = "今日总成交量和总成交金额",description = "获取今日的总成交量和总成交金额")
public Result<QyCcerSumInfoDTO> getTodayTotalVolume() {
// 获取今日总成交量假设按时间段分的结果
QyCcerSumInfoDTO volumeList = qyCcerInfoService.getTodayTotalTransactionVolumeAndPriceByTime();
// 返回总成交量的列表映射
return new Result<QyCcerSumInfoDTO>().ok(volumeList);
}

51
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<PageData<QyGreenCertificateInfoDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> 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<Void> 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<Map<String, String>> countGreenByState() {
Map<String, String> countResult = qyGreenCertificateInfoService.countGreenByState();
return new Result<Map<String, String>>().ok(countResult);
}
/**
* 根据区域与绿证能源总量,并计算每个小镇在所属区域内的绿证占比
* @return 返回一个List包含每个区域下每个小镇的绿证占比
*/
@GetMapping("/regions")
@Operation(summary = "获取区域绿证占比")
@Parameter(name = "region", description = "区域名称")
public Result<List<Map<String, String>>> getRegionGreenCertificatePercentage() {
List<Map<String, String>> percentage = qyGreenCertificateInfoService.getRegionGreenCertificatePercentage();
return new Result<List<Map<String, String>>>().ok(percentage);
}
/**
*获取今日的总成交量和总成交金额
* @return 今日的总成交量和总成交金额
*/
@GetMapping("/today")
@Operation(summary = "今日总成交量和总成交金额",description = "获取今日的总成交量和总成交金额")
public Result<QyGreenSumInfoDTO> getTodayTotal() {
QyGreenSumInfoDTO volumeList = qyGreenCertificateInfoService.getTodayTotalTransactionVolumeAndPriceByTime();
return new Result<QyGreenSumInfoDTO>().ok(volumeList);
}
}

19
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;
}

4
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;

2
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;

8
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;
}

31
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;
}

24
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;
}

4
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;
/**

12
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;
}

9
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<QyCarbonAssetEntity> {
}

23
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<QyCarbonAssetEntity>{
/**
* 计算当前碳资产,包括碳配额,CCER,绿证
* @return 返回一个Map
*/
Map<String,String> countCarbonAsset();
/**
* 计算累计碳资产包括碳配额CCER和绿证的占比
* @return 返回一个包含碳配额CCER和绿证占比的Map
*/
Map<String,String> countTotalCarbonAsset();
}

7
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/QyCarbonQuotaInfoService.java

@ -20,13 +20,6 @@ public interface QyCarbonQuotaInfoService extends IBaseService<QyCarbonQuotaInfo
*/
List<Map<String, String>> getEmissionReductionPercentagesByState();
/**
* 根据ID获取指定区域
*
* @param id 区域ID
* @return 返回区域对象
*/
QyRegionEntity getRegionById(Long id);
/**
* 统计当前碳配额总和和三种状态所占百分比

22
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<QyGreenCertificateInfoEntity> {
/**
* 根据区域与小镇统计绿证,并计算每个小镇在所属区域内的绿证占比
* @return 返回一个Map,包含每个区域下每个小镇的绿证占比
*/
List<Map<String, String>> getRegionGreenCertificatePercentage();
/**
* 获取今日的总成交量和今日总成交金额
* @return 今日的总成交量和今日总成交金额
*/
QyGreenSumInfoDTO getTodayTotalTransactionVolumeAndPriceByTime();
/**
* 获取根据状态统计的绿证数量
* @return 各状态的绿证数量
*/
Map<String, String> countGreenByState();
}

142
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<QyCarbonAssetMapper, QyCarbonAssetEntity> implements QyCarbonAssetService {
@Override
public QueryWrapper getWrapper(Map<String, Object> params) {
return null;
}
/**
* 计算当前碳资产,包括碳配额,CCER,绿证
* @return 返回一个Map
*/
@Override
public Map<String, String> 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<String, String> 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<String, String> 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<String, String> 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;
}
}

10
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCarbonQuotaInfoServiceImpl.java

@ -130,14 +130,4 @@ public class QyCarbonQuotaInfoServiceImpl extends BaseServiceImpl<QyCarbonQuotaI
return resultList;
}
/**
* 根据ID获取指定区域
* @param id 区域ID
* @return 返回区域对象
*/
@Override
public QyRegionEntity getRegionById(Long id) {
return qyRegionMapper.selectById(id);
}
}

10
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyCcerInfoServiceImpl.java

@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollectionUtil;
import com.google.common.collect.Lists;
import com.mybatisflex.core.query.QueryWrapper;
import com.thing.common.orm.service.impl.BaseServiceImpl;
import com.thing.qingyuan.carbon.dto.QyCcerInfoDTO;
import com.thing.qingyuan.carbon.dto.QyCcerSumInfoDTO;
import com.thing.qingyuan.carbon.entity.QyCcerInfoEntity;
import com.thing.qingyuan.carbon.mapper.QyCcerInfoMapper;
@ -14,7 +13,6 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
@ -85,19 +83,19 @@ public class QyCcerInfoServiceImpl extends BaseServiceImpl<QyCcerInfoMapper, QyC
@Override
public Map<String, String> 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 累计CCERsum=sum1+sum2
String sum3 = mapper.selectOneByQueryAs(queryWrapper3, String.class);
@ -171,7 +169,7 @@ public class QyCcerInfoServiceImpl extends BaseServiceImpl<QyCcerInfoMapper, QyC
.atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
// 查询今天的总成交量按时间段分
// 查询今天的总成交量和总成交金额
QueryWrapper queryWrapper = QueryWrapper.create()
.select(sum(QY_CCER_INFO_ENTITY.RECORD_EMISSION).as("recordEmission"),
sum(QY_CCER_INFO_ENTITY.PRICE).as("price"))

148
modules/qingyuan/src/main/java/com/thing/qingyuan/carbon/service/impl/QyGreenCertificateInfoServiceImpl.java

@ -1,20 +1,164 @@
package com.thing.qingyuan.carbon.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.google.common.collect.Lists;
import com.mybatisflex.core.query.QueryWrapper;
import com.thing.common.orm.service.impl.BaseServiceImpl;
import com.thing.qingyuan.carbon.dto.QyGreenSumInfoDTO;
import com.thing.qingyuan.carbon.entity.QyGreenCertificateInfoEntity;
import com.thing.qingyuan.carbon.mapper.QyGreenCertificateInfoMapper;
import com.thing.qingyuan.carbon.service.QyGreenCertificateInfoService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
import static com.mybatisflex.core.query.QueryMethods.sum;
import static com.thing.qingyuan.carbon.entity.table.QyGreenCertificateInfoEntityTableDef.QY_GREEN_CERTIFICATE_INFO_ENTITY;
@Service
public class QyGreenCertificateInfoServiceImpl extends BaseServiceImpl<QyGreenCertificateInfoMapper, QyGreenCertificateInfoEntity> implements QyGreenCertificateInfoService {
@Override
public QueryWrapper getWrapper(Map<String, Object> 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<String, String> 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<String, String> 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<Map<String, String>> getRegionGreenCertificatePercentage() {
// 示例区域列表可根据实际情况查询数据库中的区域列表
List<String> 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<QyGreenSumInfoDTO> 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<Map<String, String>> resultList = new ArrayList<>();
List<String> tempRegions = Lists.newArrayList();
for (QyGreenSumInfoDTO qyGreenSumInfoDTO : qyGreenSumInfoDTOList) {
Map<String, String> 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<String> disjunction = CollectionUtil.disjunction(regions, tempRegions);
for (String s : disjunction) {
Map<String, String> 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;
}
}
Loading…
Cancel
Save