Browse Source

Bexcel功能开发

2024年12月3日08:38:27
qingyuan_dev_new
lishuai 1 year ago
parent
commit
db8a628d7c
  1. 4
      modules/cbam/src/main/java/com/thing/cbam/baesInfoExcel/entity/CbamProcessMaterialEntity.java
  2. 11
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/controller/CbamCarbonDirectController.java
  3. 2
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/controller/CbamCarbonMaterialController.java
  4. 83
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/controller/CbamProcessAllocationController.java
  5. 44
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/dto/CbamCarbonBurnDTO.java
  6. 6
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/dto/CbamCarbonDirectDTO.java
  7. 35
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/dto/CbamProcessAllocationDTO.java
  8. 47
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/entity/CbamProcessAllocationEntity.java
  9. 17
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/mapper/CbamCarbonBurnMapper.java
  10. 1
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/mapper/CbamCarbonProgressMapper.java
  11. 16
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/mapper/CbamProcessAllocationMapper.java
  12. 26
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/CbamCarbonBurnService.java
  13. 7
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/CbamCarbonDirectService.java
  14. 14
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/CbamProcessAllocationService.java
  15. 87
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/impl/CbamCarbonBurnServiceImpl.java
  16. 79
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/impl/CbamCarbonDirectServiceImpl.java
  17. 28
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/impl/CbamProcessAllocationServiceImpl.java
  18. 85
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/util/BurningDischargeUtil.java
  19. 55
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/util/MaterialBalanceUtil.java
  20. 61
      modules/cbam/src/main/java/com/thing/cbam/directCarbon/util/ProcessDischargeUtil.java

4
modules/cbam/src/main/java/com/thing/cbam/baesInfoExcel/entity/CbamProcessMaterialEntity.java

@ -85,4 +85,8 @@ public class CbamProcessMaterialEntity implements Serializable {
* 类型1.生产过程 2.原材料
*/
private Integer type;
/**
* 生产过程分配量
*/
// private String processAllocation;
}

11
modules/cbam/src/main/java/com/thing/cbam/directCarbon/controller/CbamCarbonDirectController.java

@ -29,7 +29,7 @@ import java.util.Map;
* @since 3.0 2024-12-02
*/
@RestController
@RequestMapping("v2/cbam/carbonDirect")
@RequestMapping("v2/cbam/carbon/direct")
@Tag(name="直接排放量B-Excel")
@RequiredArgsConstructor
public class CbamCarbonDirectController {
@ -80,6 +80,15 @@ public class CbamCarbonDirectController {
return new Result<>();
}
@PostMapping("batchSave")
@Operation(summary="保存")
@LogOperation("保存")
public Result<Void> saveList(@RequestBody List<CbamCarbonDirectDTO> carbonDirectDTOList){
//效验数据
cbamCarbonDirectService.saveList(carbonDirectDTOList);
return new Result<>();
}
@PutMapping
@Operation(summary="修改")
@LogOperation("修改")

2
modules/cbam/src/main/java/com/thing/cbam/directCarbon/controller/CbamCarbonMaterialController.java

@ -23,7 +23,7 @@ import java.util.Map;
@RestController
@RequestMapping("v2/cbam/carbon/material")
@Tag(name = "原材料")
@Tag(name = "产品原材料")
@RequiredArgsConstructor
public class CbamCarbonMaterialController {
private final CbamCarbonMaterialService cbamCarbonMaterialService;

83
modules/cbam/src/main/java/com/thing/cbam/directCarbon/controller/CbamCarbonBurnController.java → modules/cbam/src/main/java/com/thing/cbam/directCarbon/controller/CbamProcessAllocationController.java

@ -1,8 +1,7 @@
/*
package com.thing.cbam.directCarbon.controller;
import com.thing.cbam.directCarbon.dto.CbamCarbonBurnDTO;
import com.thing.cbam.directCarbon.service.CbamCarbonBurnService;
import com.thing.cbam.directCarbon.dto.CbamProcessAllocationDTO;
import com.thing.cbam.directCarbon.service.CbamProcessAllocationService;
import com.thing.common.core.annotation.LogOperation;
import com.thing.common.core.constants.Constant;
import com.thing.common.core.validator.AssertUtils;
@ -13,7 +12,6 @@ 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 io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
@ -21,25 +19,21 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
*/
/**
* 直接排放
* 生产过程分配
*
* @author xc
* @since 3.0 2024-11-27
*//*
* @author xc
* @since 3.0 2024-12-02
*/
@RestController
@RequestMapping("v2/cbam/carbon1")
@Tag(name="直接排放量--燃烧排放")
@RequestMapping("v2/cbam/allocation")
@Tag(name="生产过程分配量")
@RequiredArgsConstructor
public class CbamCarbonBurnController {
private final CbamCarbonBurnService cbamCarbonBurnService;
public class CbamProcessAllocationController {
private final CbamProcessAllocationService cbamProcessAllocationService;
@GetMapping("page")
@Operation(summary="分页")
@ -49,45 +43,35 @@ public class CbamCarbonBurnController {
@Parameter(name = Constant.ORDER_FIELD, description = "排序字段") ,
@Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)")
})
public Result<PageData<CbamCarbonBurnDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params){
PageData<CbamCarbonBurnDTO> page = cbamCarbonBurnService.getPageData(params, CbamCarbonBurnDTO.class);
return new Result<PageData<CbamCarbonBurnDTO>>().ok(page);
public Result<PageData<CbamProcessAllocationDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params){
PageData<CbamProcessAllocationDTO> page = cbamProcessAllocationService.getPageData(params, CbamProcessAllocationDTO.class);
return new Result<PageData<CbamProcessAllocationDTO>>().ok(page);
}
@GetMapping("{id}")
@Operation(summary="信息")
public Result<CbamCarbonBurnDTO> get(@PathVariable("id") Long id){
CbamCarbonBurnDTO data = cbamCarbonBurnService.getByIdAs(id, CbamCarbonBurnDTO.class);
return new Result<CbamCarbonBurnDTO>().ok(data);
public Result<CbamProcessAllocationDTO> get(@PathVariable("id") Long id){
CbamProcessAllocationDTO data = cbamProcessAllocationService.getByIdAs(id, CbamProcessAllocationDTO.class);
return new Result<CbamProcessAllocationDTO>().ok(data);
}
@PostMapping
@Operation(summary="保存")
@LogOperation("保存")
public Result<Void> save(@RequestBody CbamCarbonBurnDTO dto){
public Result<Void> save(@RequestBody CbamProcessAllocationDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
cbamCarbonBurnService.saveDto(dto);
return new Result<>();
}
@PostMapping
@Operation(summary="批量保存")
@LogOperation("批量保存")
public Result<Void> batchSave(@RequestBody List<CbamCarbonBurnDTO> dtoList){
//效验数据
cbamCarbonBurnService.batchSave(dtoList);
cbamProcessAllocationService.saveDto(dto);
return new Result<>();
}
@PutMapping
@Operation(summary="修改")
@LogOperation("修改")
public Result<Void> update(@RequestBody CbamCarbonBurnDTO dto){
public Result<Void> update(@RequestBody CbamProcessAllocationDTO dto){
//效验数据
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
cbamCarbonBurnService.updateDto(dto);
cbamProcessAllocationService.updateDto(dto);
return new Result<>();
}
@ -97,31 +81,18 @@ public class CbamCarbonBurnController {
public Result<Void> delete(@RequestBody Long[] ids){
//效验数据
AssertUtils.isArrayEmpty(ids, "id");
cbamCarbonBurnService.batchDelete(ids);
cbamProcessAllocationService.batchDelete(ids);
return new Result<>();
}
@PostMapping
@Operation(summary="计算燃烧排放量")
@LogOperation("计算燃烧排放量")
public Result<Map<String, BigDecimal>> calculate(Long fuelId,BigDecimal consumeAmount,BigDecimal biomassContent){
//效验数据
return new Result<Map<String, BigDecimal>>().ok(cbamCarbonBurnService.calculate(fuelId, consumeAmount,biomassContent));
}
*/
/**
/**
*@GetMapping("export")
*@Operation(summary="导出")
*@LogOperation("导出")
*public void export(@Parameter(hidden = true) @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
* List<CbamCarbonBurnDTO> list = cbamCarbonBurnService.listAs(params, CbamCarbonBurnDTO.class);
* //ExcelUtils.exportExcelToTarget(response, null, "直接排放量", list, CbamCarbonBurnExcel.class);
* List<CbamProcessAllocationDTO> list = cbamProcessAllocationService.listAs(params, CbamProcessAllocationDTO.class);
* //ExcelUtils.exportExcelToTarget(response, null, "生产过程分配量", list, CbamProcessAllocationExcel.class);
*}
*//*
*/
}*/
}

44
modules/cbam/src/main/java/com/thing/cbam/directCarbon/dto/CbamCarbonBurnDTO.java

@ -1,44 +0,0 @@
package com.thing.cbam.directCarbon.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 直接排放量
*
* @author xc
* @since 3.0 2024-11-27
*/
@Data
@Schema(description = "直接排放量")
public class CbamCarbonBurnDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private Long id;
@Schema(description = "名称")
private String name;
@Schema(description = "消耗量")
private String consumeAmount;
@Schema(description = "消耗量单位")
private String consumeUnit;
@Schema(description = "低位发热量")
private String lowHeatVal;
@Schema(description = "排放源名称")
private String emissionName;
@Schema(description = "排放因子")
private String emissionFactors;
@Schema(description = "氧化因子")
private String oxidationFactor;
@Schema(description = "生物量含量")
private String biomassContent;
@Schema(description = "关联cbam_industry_information的主键id")
private Long industryId;
}

6
modules/cbam/src/main/java/com/thing/cbam/directCarbon/dto/CbamCarbonDirectDTO.java

@ -1,11 +1,13 @@
package com.thing.cbam.directCarbon.dto;
import com.thing.cbam.baesInfoExcel.dto.CbamProcessMaterialDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 直接排放量B-Excel
@ -81,4 +83,8 @@ public class CbamCarbonDirectDTO implements Serializable {
"4.是否有连续排放测量系统(CEMS)")
private Integer type;
private Long sort;
@Schema(description = "生产过程分配量")
private String processAllocation;
}

35
modules/cbam/src/main/java/com/thing/cbam/directCarbon/dto/CbamProcessAllocationDTO.java

@ -0,0 +1,35 @@
package com.thing.cbam.directCarbon.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 生产过程分配量
*
* @author xc
* @since 3.0 2024-12-02
*/
@Data
@Schema(description = "生产过程分配量")
public class CbamProcessAllocationDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "主键")
private Long id;
@Schema(description = "排放源名称")
private String name;
@Schema(description = "排放源类型:1 和 2")
private Integer type;
@Schema(description = "关联cbam_industry_info的主键id")
private Long industryId;
@Schema(description = "关联cbam_process_material的id")
private Long prodId;
@Schema(description = "生产过程分配量")
private String processAllocation;
}

47
modules/cbam/src/main/java/com/thing/cbam/directCarbon/entity/CbamCarbonBurnEntity.java → modules/cbam/src/main/java/com/thing/cbam/directCarbon/entity/CbamProcessAllocationEntity.java

@ -1,8 +1,10 @@
package com.thing.cbam.directCarbon.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;
@ -11,55 +13,42 @@ import java.io.Serial;
import java.io.Serializable;
/**
* 燃烧排放
* 生产过程分配
*
* @author xc
* @since 3.0 2024-11-27
* @since 3.0 2024-12-02
*/
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper=false)
@Table("cbam_carbon_burn")
public class CbamCarbonBurnEntity implements Serializable {
@Table("cbam_process_allocation")
public class CbamProcessAllocationEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id
private Long id;
/**
* 名称
*/
private String name;
/**
* 消耗量
*/
private String consumeAmount;
/**
* 消耗量单位
* 主键
*/
private String consumeUnit;
/**
* 低位发热量
*/
private String lowHeatVal;
@Id(keyType = KeyType.Generator,value = KeyGenerators.snowFlakeId)
private Long id;
/**
* 排放源名称
*/
private String emissionName;
private String name;
/**
* 排放因子
* 排放源类型1 2
*/
private String emissionFactors;
private Integer type;
/**
* 氧化因子
* 关联cbam_industry_info的主键id
*/
private String oxidationFactor;
private Long industryId;
/**
* 生物量含量
* 关联cbam_process_material的id
*/
private String biomassContent;
private Long prodId;
/**
* 关联cbam_industry_information的主键id
* 生产过程分配量
*/
private Long industryId;
private String processAllocation;
}

17
modules/cbam/src/main/java/com/thing/cbam/directCarbon/mapper/CbamCarbonBurnMapper.java

@ -1,17 +0,0 @@
package com.thing.cbam.directCarbon.mapper;
import com.thing.cbam.directCarbon.entity.CbamCarbonBurnEntity;
import com.thing.common.orm.mapper.PowerBaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 直接排放量
*
* @author xc
* @since 3.0 2024-11-27
*/
@Mapper
public interface CbamCarbonBurnMapper extends PowerBaseMapper<CbamCarbonBurnEntity> {
}

1
modules/cbam/src/main/java/com/thing/cbam/directCarbon/mapper/CbamCarbonProgressMapper.java

@ -1,6 +1,5 @@
package com.thing.cbam.directCarbon.mapper;
import com.thing.cbam.directCarbon.entity.CbamCarbonBurnEntity;
import com.thing.cbam.directCarbon.entity.CbamCarbonProgressEntity;
import com.thing.common.orm.mapper.PowerBaseMapper;
import org.apache.ibatis.annotations.Mapper;

16
modules/cbam/src/main/java/com/thing/cbam/directCarbon/mapper/CbamProcessAllocationMapper.java

@ -0,0 +1,16 @@
package com.thing.cbam.directCarbon.mapper;
import com.thing.cbam.directCarbon.entity.CbamProcessAllocationEntity;
import com.thing.common.orm.mapper.PowerBaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* 生产过程分配量
*
* @author xc
* @since 3.0 2024-12-02
*/
@Mapper
public interface CbamProcessAllocationMapper extends PowerBaseMapper<CbamProcessAllocationEntity> {
}

26
modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/CbamCarbonBurnService.java

@ -1,26 +0,0 @@
package com.thing.cbam.directCarbon.service;
import com.thing.cbam.directCarbon.dto.CbamCarbonBurnDTO;
import com.thing.cbam.directCarbon.entity.CbamCarbonBurnEntity;
import com.thing.common.orm.service.IBaseService;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 直接排放量
*
* @author xc
* @since 3.0 2024-11-27
*/
public interface CbamCarbonBurnService extends IBaseService<CbamCarbonBurnEntity> {
void batchSave(List<CbamCarbonBurnDTO> dtoList);
Map<String, BigDecimal> calculate(Long fuelId, BigDecimal consumeAmount,BigDecimal biomassContent);
}

7
modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/CbamCarbonDirectService.java

@ -3,8 +3,11 @@ package com.thing.cbam.directCarbon.service;
import com.thing.cbam.directCarbon.dto.CbamCarbonDirectDTO;
import com.thing.cbam.directCarbon.entity.CbamCarbonDirectEntity;
import com.thing.common.orm.service.IBaseService;
import org.springframework.web.bind.annotation.RequestBody;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 直接排放量B-Excel
@ -16,4 +19,8 @@ public interface CbamCarbonDirectService extends IBaseService<CbamCarbonDirectEn
List<CbamCarbonDirectDTO> listByIndustryId(Long industryId);
void saveList(List<CbamCarbonDirectDTO> carbonDirectDTOList);
Map<String, BigDecimal> calculate(Long fuelId, String consumeAmount, String biomassContent);
}

14
modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/CbamProcessAllocationService.java

@ -0,0 +1,14 @@
package com.thing.cbam.directCarbon.service;
import com.thing.cbam.directCarbon.entity.CbamProcessAllocationEntity;
import com.thing.common.orm.service.IBaseService;
/**
* 生产过程分配量
*
* @author xc
* @since 3.0 2024-12-02
*/
public interface CbamProcessAllocationService extends IBaseService<CbamProcessAllocationEntity> {
}

87
modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/impl/CbamCarbonBurnServiceImpl.java

@ -1,87 +0,0 @@
package com.thing.cbam.directCarbon.service.impl;
import com.mybatisflex.core.query.QueryWrapper;
import com.thing.cbam.dict.entity.CbamFuelDictEntity;
import com.thing.cbam.dict.service.CbamFuelDictService;
import com.thing.cbam.directCarbon.dto.CbamCarbonBurnDTO;
import com.thing.cbam.directCarbon.entity.CbamCarbonBurnEntity;
import com.thing.cbam.directCarbon.mapper.CbamCarbonBurnMapper;
import com.thing.cbam.directCarbon.service.CbamCarbonBurnService;
import com.thing.common.core.utils.ConvertUtils;
import com.thing.common.orm.service.impl.BaseServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* 直接排放量
*
* @author xc
* @since 3.0 2024-11-27
*/
@Service
@RequiredArgsConstructor
public class CbamCarbonBurnServiceImpl extends BaseServiceImpl<CbamCarbonBurnMapper, CbamCarbonBurnEntity> implements CbamCarbonBurnService {
private final CbamFuelDictService cbamFuelDictService;
@Override
public QueryWrapper getWrapper(Map<String, Object> params){
QueryWrapper wrapper = new QueryWrapper();
return wrapper;
}
@Transactional(rollbackFor = Exception.class)
@Override
public void batchSave(List<CbamCarbonBurnDTO> dtoList) {
List<CbamCarbonBurnEntity> cbamCarbonBurnEntities = ConvertUtils.sourceToTarget(dtoList, CbamCarbonBurnEntity.class);
mapper.insertBatch(cbamCarbonBurnEntities);
}
@Override
public Map<String, BigDecimal> calculate(Long fuelId, BigDecimal consumeAmount,BigDecimal biomassContent) {
Map<String, BigDecimal> resMap = new HashMap<>();
//获取燃料系数字典信息
CbamFuelDictEntity cbamFuelDict = cbamFuelDictService.getById(fuelId);
if(Objects.isNull(cbamFuelDict)){
throw new RuntimeException("燃料系数字典信息不存在");
}
//公用计算消耗量*低位发热量
String lowHeatAmount = cbamFuelDict.getLowHeatAmount();
BigDecimal commonResult = consumeAmount.multiply(new BigDecimal(lowHeatAmount));
//1.首先先计算第四个----能量含量(生物质燃料)工J =消耗量*低位发热量*生物量含量/100/1000
BigDecimal energySwNum = commonResult.multiply(biomassContent)
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
resMap.put("energyBiologyNum",energySwNum);
//2.其次计算第三个能量含量(化石燃料),TJ =消耗量*低位发热量/1000-能量含量(生物质燃料)
BigDecimal energyHsNum = commonResult
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP)
.subtract(energySwNum);
resMap.put("energyFossilNum",energyHsNum);
//3.生物质燃料排放量 =消耗量*低位发热量*生物量含量*排放因子/100/1000
BigDecimal biomassFuelNum = commonResult
.multiply(commonResult)
.multiply(new BigDecimal(cbamFuelDict.getEmissionFactor()))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
resMap.put("biomassFuelNum",biomassFuelNum);
//4.直接碳排放量 =消耗量*低位发热量*氧化因子*排放因子/100/1000-生物质燃料排放量
BigDecimal directCarbonNum = commonResult
.multiply(new BigDecimal(cbamFuelDict.getCarbonOxdRate()))
.multiply(new BigDecimal(cbamFuelDict.getEmissionFactor()))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP)
.subtract(biomassFuelNum);
resMap.put("directCarbonNum",directCarbonNum);
return resMap;
}
}

79
modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/impl/CbamCarbonDirectServiceImpl.java

@ -1,15 +1,28 @@
package com.thing.cbam.directCarbon.service.impl;
import com.mybatisflex.core.query.QueryWrapper;
import com.thing.cbam.baesInfoExcel.service.CbamProcessMaterialService;
import com.thing.cbam.dict.entity.CbamFuelDictEntity;
import com.thing.cbam.dict.service.CbamFuelDictService;
import com.thing.cbam.directCarbon.dto.CbamCarbonDirectDTO;
import com.thing.cbam.directCarbon.entity.CbamCarbonDirectEntity;
import com.thing.cbam.directCarbon.entity.CbamProcessAllocationEntity;
import com.thing.cbam.directCarbon.mapper.CbamCarbonDirectMapper;
import com.thing.cbam.directCarbon.service.CbamCarbonDirectService;
import com.thing.cbam.directCarbon.service.CbamProcessAllocationService;
import com.thing.cbam.directCarbon.util.BurningDischargeUtil;
import com.thing.common.core.utils.ConvertUtils;
import com.thing.common.orm.service.impl.BaseServiceImpl;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* 直接排放量B-Excel
@ -18,8 +31,14 @@ import java.util.Map;
* @since 3.0 2024-12-02
*/
@Service
@RequiredArgsConstructor
public class CbamCarbonDirectServiceImpl extends BaseServiceImpl<CbamCarbonDirectMapper, CbamCarbonDirectEntity> implements CbamCarbonDirectService {
private final CbamFuelDictService cbamFuelDictService;
private final CbamProcessMaterialService cbamProcessMaterialService;
private final CbamProcessAllocationService cbamProcessAllocationService;
@Override
public QueryWrapper getWrapper(Map<String, Object> params){
QueryWrapper wrapper = new QueryWrapper();
@ -32,7 +51,63 @@ public class CbamCarbonDirectServiceImpl extends BaseServiceImpl<CbamCarbonDirec
QueryWrapper queryWrapper = QueryWrapper.create().eq(CbamCarbonDirectEntity::getIndustryId, industryId)
.orderBy(CbamCarbonDirectEntity::getType, true)
.orderBy(CbamCarbonDirectEntity::getSort, true);
List<CbamCarbonDirectDTO> cbamCarbonDirectDTOS = mapper.selectListByQueryAs(queryWrapper, CbamCarbonDirectDTO.class);
return cbamCarbonDirectDTOS;
return mapper.selectListByQueryAs(queryWrapper, CbamCarbonDirectDTO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void saveList(List<CbamCarbonDirectDTO> carbonDirectDTOList) {
//插入 是否涉及燃烧排放 && 是否涉及过程排放 && 是否涉及物料平衡 && 是否有连续排放测量系统(CEMS),即排除type=5的类型
List<CbamCarbonDirectDTO> list = carbonDirectDTOList.stream().filter(carbonDirectDTO -> !Objects.equals(carbonDirectDTO.getType(), 5)).toList();
List<CbamCarbonDirectEntity> cbamCarbonDirectEntities = ConvertUtils.sourceToTarget(list, CbamCarbonDirectEntity.class);
mapper.insertBatch(cbamCarbonDirectEntities);
// type=5的类型 单独 更新生产过程中的分配量
List<CbamCarbonDirectDTO> fiveList = carbonDirectDTOList.stream().filter(carbonDirectDTO -> Objects.equals(carbonDirectDTO.getType(), 5)).toList();
List<CbamProcessAllocationEntity> cbamProcessAllocationList = fiveList.stream().map(f -> {
CbamProcessAllocationEntity cbamProcessAllocationEntity = new CbamProcessAllocationEntity();
cbamProcessAllocationEntity.setName(f.getName());
cbamProcessAllocationEntity.setType(f.getType());
cbamProcessAllocationEntity.setIndustryId(f.getIndustryId());
cbamProcessAllocationEntity.setProcessAllocation(f.getProcessAllocation());
// 根据排放源名字排放源类型和顺序获取id
cbamCarbonDirectEntities.stream()
.filter(cbamCarbonDirectEntity ->
StringUtils.equals(cbamCarbonDirectEntity.getName(), f.getName())
&& Objects.equals(cbamCarbonDirectEntity.getType(), f.getType())
&& Objects.equals(cbamCarbonDirectEntity.getSort(), f.getSort())
)
.findFirst()
.ifPresent(cbamCarbonDirectEntity -> {
cbamProcessAllocationEntity.setProdId(cbamCarbonDirectEntity.getId());
});
return cbamProcessAllocationEntity;
}).toList();
cbamProcessAllocationService.saveBatch(cbamProcessAllocationList);
}
@Override
public Map<String, BigDecimal> calculate(Long fuelId, String consumeAmount, String biomassContent) {
Map<String, BigDecimal> resMap = new HashMap<>();
//获取燃料系数字典信息
CbamFuelDictEntity cbamFuelDict = cbamFuelDictService.getById(fuelId);
if(Objects.isNull(cbamFuelDict)){
throw new RuntimeException("燃料系数字典信息不存在");
}
//公用计算消耗量*低位发热量
String lowHeatAmount = cbamFuelDict.getLowHeatAmount();
//1.首先先计算第四个----能量含量(生物质燃料)工J =消耗量*低位发热量*生物量含量/100/1000
BigDecimal energyBiologyNum =
BurningDischargeUtil.energyBiologyNumCalculate(consumeAmount, lowHeatAmount, biomassContent);
resMap.put("energyBiologyNum",energyBiologyNum);
//2.其次计算第三个能量含量(化石燃料),TJ =消耗量*低位发热量/1000-能量含量(生物质燃料)
BigDecimal energyFossilNum = BurningDischargeUtil.energyHsNumCalculate(consumeAmount, lowHeatAmount, energyBiologyNum.toPlainString());
resMap.put("energyFossilNum",energyFossilNum);
//3.生物质燃料排放量 =消耗量*低位发热量*生物量含量*排放因子/100/1000
BigDecimal biomassFuelNum = BurningDischargeUtil.biomassFuelNumCalculate(consumeAmount, lowHeatAmount, biomassContent, cbamFuelDict.getEmissionFactor());
resMap.put("biomassFuelNum",biomassFuelNum);
//4.直接碳排放量 =消耗量*低位发热量*氧化因子*排放因子/100/1000-生物质燃料排放量
BigDecimal directCarbonNum = BurningDischargeUtil.directCarbonCalculate(consumeAmount, lowHeatAmount, biomassContent, cbamFuelDict.getEmissionFactor(), cbamFuelDict.getCarbonOxdRate());
resMap.put("directCarbonNum",directCarbonNum);
return resMap;
}
}

28
modules/cbam/src/main/java/com/thing/cbam/directCarbon/service/impl/CbamProcessAllocationServiceImpl.java

@ -0,0 +1,28 @@
package com.thing.cbam.directCarbon.service.impl;
import com.mybatisflex.core.query.QueryWrapper;
import com.thing.cbam.directCarbon.entity.CbamProcessAllocationEntity;
import com.thing.cbam.directCarbon.mapper.CbamProcessAllocationMapper;
import com.thing.cbam.directCarbon.service.CbamProcessAllocationService;
import com.thing.common.orm.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* 生产过程分配量
*
* @author xc
* @since 3.0 2024-12-02
*/
@Service
public class CbamProcessAllocationServiceImpl extends BaseServiceImpl<CbamProcessAllocationMapper, CbamProcessAllocationEntity> implements CbamProcessAllocationService {
@Override
public QueryWrapper getWrapper(Map<String, Object> params){
QueryWrapper wrapper = new QueryWrapper();
return wrapper;
}
}

85
modules/cbam/src/main/java/com/thing/cbam/directCarbon/util/BurningDischargeUtil.java

@ -0,0 +1,85 @@
package com.thing.cbam.directCarbon.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 燃烧排放的计算工具类
*/
public class BurningDischargeUtil {
/**
* 公用计算消耗量*低位发热量
* @param consumeAmount 消耗量
* @param lowHeatAmount 低位发热量
* @return 公用计算结果
*/
public static BigDecimal commonCalculate(String consumeAmount,String lowHeatAmount) {
return new BigDecimal(consumeAmount).multiply(new BigDecimal(lowHeatAmount));
}
/**
* 能量含量(生物质燃料)工J =消耗量*低位发热量*生物量含量/100/1000
* @param consumeAmount 消耗量
* @param lowHeatAmount 低位发热量
* @param biomassContent 生物量含量
* @return 公用计算结果
*/
public static BigDecimal energyBiologyNumCalculate(String consumeAmount, String lowHeatAmount, String biomassContent) {
return commonCalculate(consumeAmount,lowHeatAmount)
.multiply(new BigDecimal(biomassContent))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
}
/**
* 能量含量(化石燃料),TJ =消耗量*低位发热量/1000-能量含量(生物质燃料)
* @param consumeAmount 消耗量
* @param lowHeatAmount 低位发热量
* @param energyBiologyNum 能量含量(生物质燃料)
* @return 公用计算结果
*/
public static BigDecimal energyHsNumCalculate(String consumeAmount,String lowHeatAmount,String energyBiologyNum) {
return commonCalculate(consumeAmount,lowHeatAmount)
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP)
.subtract(energyBiologyNumCalculate(consumeAmount,lowHeatAmount,energyBiologyNum));
}
/**
* 生物质燃料排放量 =消耗量*低位发热量*生物量含量*排放因子/100/1000
* @param consumeAmount 消耗量
* @param lowHeatAmount 低位发热量
* @param biomassContent 生物量含量
* @param emissionFactor 排放因子
* @return 公用计算结果
*/
public static BigDecimal biomassFuelNumCalculate(String consumeAmount,String lowHeatAmount,String biomassContent,String emissionFactor) {
return commonCalculate(consumeAmount,lowHeatAmount)
.multiply(new BigDecimal(biomassContent))
.multiply(new BigDecimal(emissionFactor))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP);
}
/**
* 直接碳排放量 =消耗量*低位发热量*氧化因子*排放因子/100/1000-生物质燃料排放量
* @param consumeAmount 消耗量
* @param lowHeatAmount 低位发热量
* @param biomassContent 生物量含量
* @param emissionFactor 排放因子
* @return 公用计算结果
*/
public static BigDecimal directCarbonCalculate(String consumeAmount,String lowHeatAmount,String biomassContent,String emissionFactor,String carbonOxdRate) {
return commonCalculate(consumeAmount,lowHeatAmount)
.multiply(new BigDecimal(carbonOxdRate))
.multiply(new BigDecimal(emissionFactor))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
.divide(new BigDecimal(1000), 2, RoundingMode.HALF_UP)
.subtract(biomassFuelNumCalculate(consumeAmount,lowHeatAmount,biomassContent,emissionFactor));
}
}

55
modules/cbam/src/main/java/com/thing/cbam/directCarbon/util/MaterialBalanceUtil.java

@ -0,0 +1,55 @@
package com.thing.cbam.directCarbon.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 物料平衡计算工具类
*/
public class MaterialBalanceUtil {
/**
* 公用计算消耗量*含碳量*44/12
* @param consumeAmount 消耗量
* @param carbonContent 碳含量
* @return 公用计算结果
*/
public static BigDecimal commonCalculate(String consumeAmount,String carbonContent) {
return new BigDecimal(consumeAmount)
.multiply(new BigDecimal(carbonContent))
.multiply(new BigDecimal(44))
.divide(new BigDecimal(12), 2, RoundingMode.HALF_UP)
;
}
/**
* 生物质燃料排放量 =消耗量*含碳量*44/12*生物量含量/100
* @param consumeAmount 消耗量
* @param carbonContent 碳含量
* @param biomassContent 生物量含量
* @return 公用计算结果
*/
public static BigDecimal biomassFuelNumCalculate(String consumeAmount,String carbonContent, String biomassContent) {
return commonCalculate(consumeAmount, carbonContent)
.multiply(new BigDecimal(biomassContent))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
}
/**
* 直接碳排放量 ==消耗量*含碳量*44/12-生物质燃料排放量
* @param consumeAmount 消耗量
* @param carbonContent 碳含量
* @param biomassContent 生物量含量
* @return 公用计算结果
*/
public static BigDecimal directCarbonCalculate(String consumeAmount,String carbonContent, String biomassContent) {
return commonCalculate(consumeAmount, carbonContent)
.subtract(biomassFuelNumCalculate(consumeAmount,carbonContent,biomassContent));
}
}

61
modules/cbam/src/main/java/com/thing/cbam/directCarbon/util/ProcessDischargeUtil.java

@ -0,0 +1,61 @@
package com.thing.cbam.directCarbon.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 过程排放的计算工具类
*/
public class ProcessDischargeUtil {
/**
* 公用计算消耗量*排放因子*转化因子/100
* @param consumeAmount 消耗量
* @param emissionFactor 排放因子
* @param conversionFactor 转换因子
* @return 公用计算结果
*/
public static BigDecimal commonCalculate(String consumeAmount,String emissionFactor,String conversionFactor) {
return new BigDecimal(consumeAmount)
.multiply(new BigDecimal(emissionFactor))
.multiply(new BigDecimal(conversionFactor))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
;
}
/**
* 生物质燃料排放量 ==消耗量*排放因子*转化因子/100*生物量含量/100
* @param consumeAmount 消耗量
* @param emissionFactor 排放因子
* @param conversionFactor 转换因子
* @param biomassContent 生物量含量
* @return 公用计算结果
*/
public static BigDecimal biomassFuelNumCalculate(String consumeAmount,String emissionFactor,String conversionFactor, String biomassContent) {
return commonCalculate( consumeAmount, emissionFactor,conversionFactor)
.multiply(new BigDecimal(biomassContent))
.multiply(new BigDecimal(emissionFactor))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
.multiply(new BigDecimal(biomassContent))
.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
}
/**
* 直接碳排放量 ==消耗量"排放因子*转化因子/100-生物质燃料排成量
* @param consumeAmount 消耗量
* @param emissionFactor 排放因子
* @param conversionFactor 转换因子
* @param biomassContent 生物量含量
* @return 公用计算结果
*/
public static BigDecimal directCarbonCalculate(String consumeAmount,String emissionFactor,String conversionFactor, String biomassContent) {
return commonCalculate( consumeAmount, emissionFactor,conversionFactor)
.subtract(biomassFuelNumCalculate(consumeAmount,emissionFactor,conversionFactor,biomassContent));
}
}
Loading…
Cancel
Save