|
@@ -1,12 +1,23 @@
|
|
|
package com.slibra.business.service.impl;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Objects;
|
|
|
|
|
|
+import com.slibra.business.res.CarbonSmartQueryDB;
|
|
|
+import com.slibra.business.res.ChartBasic;
|
|
|
+import com.slibra.common.DecimalUtils;
|
|
|
+import com.slibra.common.core.domain.entity.SysDictData;
|
|
|
import com.slibra.common.exception.ServiceException;
|
|
|
import com.slibra.common.utils.DateUtils;
|
|
|
import com.slibra.common.utils.SecurityUtils;
|
|
|
import com.slibra.common.utils.StringUtils;
|
|
|
+import com.slibra.system.mapper.SysDictDataMapper;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.slibra.business.mapper.TXinyiCarbonMajorMapper;
|
|
@@ -14,6 +25,8 @@ import com.slibra.business.domain.TXinyiCarbonMajor;
|
|
|
import com.slibra.business.service.ITXinyiCarbonMajorService;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
+import static com.slibra.common.constant.MyConstants.*;
|
|
|
+
|
|
|
/**
|
|
|
* 碳排放主Service业务层处理
|
|
|
*
|
|
@@ -21,11 +34,15 @@ import org.springframework.util.CollectionUtils;
|
|
|
* @date 2024-08-24
|
|
|
*/
|
|
|
@Service
|
|
|
-public class TXinyiCarbonMajorServiceImpl implements ITXinyiCarbonMajorService
|
|
|
+public class TXinyiCarbonMajorServiceImpl implements ITXinyiCarbonMajorService
|
|
|
{
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(TXinyiCarbonMajorServiceImpl.class);
|
|
|
@Autowired
|
|
|
private TXinyiCarbonMajorMapper tXinyiCarbonMajorMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private SysDictDataMapper sysDictDataMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 查询碳排放主
|
|
|
*
|
|
@@ -111,24 +128,141 @@ public class TXinyiCarbonMajorServiceImpl implements ITXinyiCarbonMajorService
|
|
|
return tXinyiCarbonMajorMapper.deleteTXinyiCarbonMajorById(id);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public CarbonSmartQueryDB getDBDatasByMonth(String month) {
|
|
|
+ CarbonSmartQueryDB carbonSmartQueryDB = this.tXinyiCarbonMajorMapper.getDBDatasByMonth(month.replaceAll("-", "/"));
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public TXinyiCarbonMajor getCarbonDetailsByMonth(String month) {
|
|
|
+ TXinyiCarbonMajor tXinyiCarbonMajor = getXinyiCarbonMajorByMonth(month);
|
|
|
+ //额外处理其他的关联表:多条数据的
|
|
|
+ this.addExtra(tXinyiCarbonMajor);
|
|
|
+ return tXinyiCarbonMajor;
|
|
|
+ }
|
|
|
+
|
|
|
+ private TXinyiCarbonMajor getXinyiCarbonMajorByMonth(String month) {
|
|
|
List<TXinyiCarbonMajor> tXinyiCarbonMajors = this.tXinyiCarbonMajorMapper.selectTXinyiCarbonMajorList(TXinyiCarbonMajor.builder().addYearMonth(month).build());
|
|
|
if(CollectionUtils.isEmpty(tXinyiCarbonMajors))
|
|
|
throw new ServiceException("未查询到对应的数据,请选择正确的年月");
|
|
|
if(tXinyiCarbonMajors.size() > 1)
|
|
|
throw new ServiceException("存在脏数据(重复的数据),对应年月为:" + month);
|
|
|
- TXinyiCarbonMajor tXinyiCarbonMajor = tXinyiCarbonMajors.get(0);
|
|
|
+ return tXinyiCarbonMajors.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TXinyiCarbonMajor getCarbonDetailsById(Long id) {
|
|
|
+ TXinyiCarbonMajor tXinyiCarbonMajor = this.tXinyiCarbonMajorMapper.selectTXinyiCarbonMajorById(id);
|
|
|
+ if(Objects.isNull(tXinyiCarbonMajor))
|
|
|
+ throw new ServiceException("未查询到对应的数据,请选择正确的ID");
|
|
|
//额外处理其他的关联表:多条数据的
|
|
|
this.addExtra(tXinyiCarbonMajor);
|
|
|
return tXinyiCarbonMajor;
|
|
|
}
|
|
|
|
|
|
private void addExtra(TXinyiCarbonMajor tXinyiCarbonMajor) {
|
|
|
- //todo 额外处理其他数据
|
|
|
+ String addYearMonth = tXinyiCarbonMajor.getAddYearMonth();
|
|
|
+ //获取上个月的数据信息
|
|
|
+ List<TXinyiCarbonMajor> tXinyiCarbonMajors = this.tXinyiCarbonMajorMapper.selectTXinyiCarbonMajorList(TXinyiCarbonMajor.builder().addYearMonth(DateUtils.getMonthsBefore(addYearMonth, 1)).build());
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiCarbonMajors) && tXinyiCarbonMajors.size() == 1){
|
|
|
+ //污水处理碳排放量-环比上个月
|
|
|
+ TXinyiCarbonMajor tXinyiCarbonMajorLastMonth = tXinyiCarbonMajors.get(0);
|
|
|
+ BigDecimal nowCo2 = tXinyiCarbonMajorLastMonth.getWsclTotalCo2();
|
|
|
+ BigDecimal lastMonthCo2 = tXinyiCarbonMajor.getWsclTotalCo2();
|
|
|
+ if(!Objects.isNull(nowCo2) && !Objects.isNull(lastMonthCo2)){
|
|
|
+ tXinyiCarbonMajor.setWsclTotalCo2Hb(DecimalUtils.getAbsAndScale((nowCo2.subtract(lastMonthCo2)).divide(lastMonthCo2, NUMBER_SCALE_4, RoundingMode.HALF_UP) ,NUMBER_SCALE_4));
|
|
|
+ }
|
|
|
+
|
|
|
+ //能源、药剂碳排量-环比上个月
|
|
|
+ nowCo2 = tXinyiCarbonMajorLastMonth.getNyyjTotalCo2();
|
|
|
+ lastMonthCo2 = tXinyiCarbonMajor.getNyyjTotalCo2();
|
|
|
+ if(!Objects.isNull(nowCo2) && !Objects.isNull(lastMonthCo2)){
|
|
|
+ tXinyiCarbonMajor.setNyyjTotalCo2Hb(DecimalUtils.getAbsAndScale((nowCo2.subtract(lastMonthCo2)).divide(lastMonthCo2, NUMBER_SCALE_4, RoundingMode.HALF_UP) ,NUMBER_SCALE_4));
|
|
|
+ }
|
|
|
+
|
|
|
+ //污泥处理碳排量-环比上个月
|
|
|
+ nowCo2 = tXinyiCarbonMajorLastMonth.getWnclTotalCo2();
|
|
|
+ lastMonthCo2 = tXinyiCarbonMajor.getWnclTotalCo2();
|
|
|
+ if(!Objects.isNull(nowCo2) && !Objects.isNull(lastMonthCo2)){
|
|
|
+ tXinyiCarbonMajor.setWnclTotalCo2Hb(DecimalUtils.getAbsAndScale((nowCo2.subtract(lastMonthCo2)).divide(lastMonthCo2, NUMBER_SCALE_4, RoundingMode.HALF_UP) ,NUMBER_SCALE_4));
|
|
|
+ }
|
|
|
+
|
|
|
+ //替碳、碳汇替碳量-环比上个月
|
|
|
+ nowCo2 = tXinyiCarbonMajorLastMonth.getTtthTotalCo2();
|
|
|
+ lastMonthCo2 = tXinyiCarbonMajor.getTtthTotalCo2();
|
|
|
+ if(!Objects.isNull(nowCo2) && !Objects.isNull(lastMonthCo2)){
|
|
|
+ tXinyiCarbonMajor.setTtthTotalCo2Hb(DecimalUtils.getAbsAndScale((nowCo2.subtract(lastMonthCo2)).divide(lastMonthCo2, NUMBER_SCALE_4, RoundingMode.HALF_UP) ,NUMBER_SCALE_4));
|
|
|
+ }
|
|
|
+
|
|
|
+ //总碳排放量-环比上个月
|
|
|
+ nowCo2 = tXinyiCarbonMajorLastMonth.getZtTotalCo2();
|
|
|
+ lastMonthCo2 = tXinyiCarbonMajor.getZtTotalCo2();
|
|
|
+ if(!Objects.isNull(nowCo2) && !Objects.isNull(lastMonthCo2)){
|
|
|
+ tXinyiCarbonMajor.setZtTotalCo2Hb(DecimalUtils.getAbsAndScale((nowCo2.subtract(lastMonthCo2)).divide(lastMonthCo2, NUMBER_SCALE_4, RoundingMode.HALF_UP) ,NUMBER_SCALE_4));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //最近7个月的数据集合
|
|
|
+ TXinyiCarbonMajor tXinyiCarbonMajorReq = new TXinyiCarbonMajor();
|
|
|
+ String timeEnd = DateUtils.parseDateToStr(DateUtils.YYYY_MM, DateUtils.getNowDate());
|
|
|
+ tXinyiCarbonMajorReq.setTimeBegin(DateUtils.getMonthsBefore(timeEnd, INT_6));
|
|
|
+ tXinyiCarbonMajorReq.setTimeEnd(timeEnd);
|
|
|
+ List<TXinyiCarbonMajor> tXinyiCarbonMajorList = this.tXinyiCarbonMajorMapper.selectTXinyiCarbonMajorList(tXinyiCarbonMajorReq);
|
|
|
+ List<ChartBasic> recent7PflDatas = new ArrayList<>();
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiCarbonMajorList)){
|
|
|
+ for (TXinyiCarbonMajor xinyiCarbonMajor : tXinyiCarbonMajorList) {
|
|
|
+ String addYearMonthTmp = xinyiCarbonMajor.getAddYearMonth();
|
|
|
+ BigDecimal ztTotalCo2 = xinyiCarbonMajor.getZtTotalCo2();
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(addYearMonthTmp);
|
|
|
+ chartBasic.setZtTotalCo2(ztTotalCo2);
|
|
|
+ //获取某个月份的平均进水cod
|
|
|
+ BigDecimal avgJsl = this.tXinyiCarbonMajorMapper.selectSumJslByMonth(addYearMonthTmp.replaceAll("-", "/"));
|
|
|
+ if(!Objects.isNull(avgJsl) && !Objects.isNull(ztTotalCo2)){
|
|
|
+ chartBasic.setWschytpfqd(ztTotalCo2.divide(avgJsl, NUMBER_SCALE_4, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ recent7PflDatas.add(chartBasic);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tXinyiCarbonMajor.setRecent7Datas(recent7PflDatas);
|
|
|
+ //处理本月份的 污水厂行业碳排放强度 和 污水厂行业碳排放强度-是否高于同行业平均水平
|
|
|
+ BigDecimal avgJsl = this.tXinyiCarbonMajorMapper.selectSumJslByMonth(addYearMonth.replaceAll("-", "/"));
|
|
|
+ BigDecimal ztTotalCo2 = tXinyiCarbonMajor.getZtTotalCo2();
|
|
|
+ if(!Objects.isNull(avgJsl) && !Objects.isNull(ztTotalCo2)){
|
|
|
+ BigDecimal wschytpfqd = ztTotalCo2.divide(avgJsl, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ tXinyiCarbonMajor.setWschytpfqd(wschytpfqd);
|
|
|
+ BigDecimal avgCod = this.tXinyiCarbonMajorMapper.selectAvgCodByMonth(addYearMonth.replaceAll("-", "/"));
|
|
|
+ //从字典获取不同cod对应的标准
|
|
|
+ if(!Objects.isNull(avgCod)){
|
|
|
+ List<SysDictData> sysDictData = this.sysDictDataMapper.selectDictDataByType(TPFQD);
|
|
|
+ if(!CollectionUtils.isEmpty(sysDictData)){
|
|
|
+ for (SysDictData sysDictDatum : sysDictData) {
|
|
|
+ String dictLabel = sysDictDatum.getDictLabel();
|
|
|
+ if(StringUtils.isNotBlank(dictLabel) && dictLabel.contains(SPLIT_)){
|
|
|
+ String[] split = dictLabel.split(SPLIT_);
|
|
|
+ BigDecimal first = new BigDecimal(split[0]);
|
|
|
+ BigDecimal last = new BigDecimal(split[1]);
|
|
|
+ if(avgCod.compareTo(first) >= 0 && avgCod.compareTo(last) < 0){
|
|
|
+ BigDecimal bzz = new BigDecimal(sysDictDatum.getDictValue());
|
|
|
+ log.info("当前月份平均cod是{},匹配到的标准值是{}", avgCod, bzz);
|
|
|
+ tXinyiCarbonMajor.setExceedAvgHY(wschytpfqd.compareTo(bzz));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //处理其他字段
|
|
|
+ //todo
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
- System.out.println("2024-12".substring(0, 4));
|
|
|
+ String str = "2024-12";
|
|
|
+ System.out.println(str.substring(0, 4));
|
|
|
+ System.out.println(str.replace("-", "/"));
|
|
|
+ System.out.println(DateUtils.getMonthsBefore(str, 6));
|
|
|
+ System.out.println(BigDecimal.ONE.compareTo(BigDecimal_100));
|
|
|
}
|
|
|
}
|