Переглянути джерело

碳排放智能体新增部分接口

王苗苗 7 місяців тому
батько
коміт
3ecf27ede5

BIN
slibra-admin/.DS_Store


+ 21 - 1
slibra-admin/src/main/java/com/slibra/web/controller/business/FrontController.java

@@ -10,6 +10,7 @@ import com.slibra.business.mapper.*;
 import com.slibra.business.req.ChatReq;
 import com.slibra.business.req.WorkOrderReq;
 import com.slibra.business.res.CarbonMajorSimple;
+import com.slibra.business.res.CarbonSmartQueryDB;
 import com.slibra.business.service.IFrontService;
 import com.slibra.business.service.ITXinyiCarbonMajorService;
 import com.slibra.common.DecimalUtils;
@@ -491,6 +492,16 @@ public class FrontController extends BaseController {
 
 
 
+    /**
+     * 获取某个月份的部分数据(水量是总值 tn和cod是平均值)
+     */
+    @GetMapping(value = "/bigModel/carbonSmart/getDBDatas/{month}")
+    public R<CarbonSmartQueryDB> getDBDatasByMonth(@PathVariable("month") String month)
+    {
+        return R.ok(tXinyiCarbonMajorService.getDBDatasByMonth(month));
+    }
+
+
     /**
      * 通过月份获取碳排放主详细信息
      */
@@ -501,6 +512,16 @@ public class FrontController extends BaseController {
     }
 
 
+    /**
+     * 通过ID获取碳排放主详细信息
+     */
+    @GetMapping(value = "/bigModel/carbonSmart/getCarbonDetailsByMonth/{id}")
+    public R<TXinyiCarbonMajor> getCarbonDetailsById(@PathVariable("id") Long id)
+    {
+        return R.ok(tXinyiCarbonMajorService.getCarbonDetailsById(id));
+    }
+
+
     /**
      * 查询碳排放主列表数据-部分展示字段(分页)
      */
@@ -552,7 +573,6 @@ public class FrontController extends BaseController {
     /**
      * 新增碳排放主
      */
-    @Log(title = "碳排放主", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@RequestBody TXinyiCarbonMajor tXinyiCarbonMajor)
     {

+ 9 - 0
slibra-common/src/main/java/com/slibra/common/constant/MyConstants.java

@@ -17,6 +17,8 @@ public class MyConstants {
 
 
 
+
+
     //报警计算使用的比例  默认是1.1倍
     public static final String XIAOSUANYAN_BZK = "15";
     public static final String XIAOSUANYAN_GKZ = "12";
@@ -346,6 +348,13 @@ public class MyConstants {
     public static final String TIME_BEGIN_00 = " 00";
     public static final String TIME_END_23 = " 23";
 
+
+    public static final String SPLIT_ = "-";
+
+    //字典配置
+    public static final String TPFQD = "tpfqd";
+
+
     public static void main(String[] args) {
         System.out.println(DecimalUtils.getAbsAndScale(new BigDecimal("2.211"), MyConstants.INT_0));
         System.out.println(DecimalUtils.getAbsAndScaleStr("2.211", MyConstants.INT_0));

+ 12 - 0
slibra-common/src/main/java/com/slibra/common/utils/DateUtils.java

@@ -241,11 +241,23 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     }
 
 
+    public static String getMonthsBefore(String inputDate, int n) {
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYY_MM_DD);
+        DateTimeFormatter formatterOut = DateTimeFormatter.ofPattern(YYYY_MM);
+        LocalDate date = LocalDate.parse(inputDate + "-01", formatter.withZone(java.time.ZoneId.systemDefault()));
+        // 获取 n 个月之前的日期
+        LocalDate targetDate = date.minusMonths(n);
+        // 格式化目标日期为 "yyyy-MM" 格式
+        return targetDate.format(formatterOut);
+    }
+
+
     public static void main(String[] args) {
         Date nowDate = DateUtils.getNowDate();
         Date date = plusDate(1, nowDate);
         Date date1 = plusDate(-1, nowDate);
         System.out.println(date);
         System.out.println(date1);
+        System.out.println(getMonthsBefore("2024-02", 2));
     }
 }

+ 72 - 2
slibra-system/src/main/java/com/slibra/business/domain/TXinyiCarbonMajor.java

@@ -1,13 +1,15 @@
 package com.slibra.business.domain;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
 
+import com.slibra.business.res.ChartBasic;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
 import com.slibra.common.annotation.Excel;
 import com.slibra.common.core.domain.BaseEntity;
 
@@ -379,4 +381,72 @@ public class TXinyiCarbonMajor extends BaseEntity
     /** 核算截止时间 */
 //    @JsonFormat(pattern = "yyyy-MM-dd")
     private String hsTimeEnd;
+
+    //2024年08月26日10:04:06  新增字段(统计相关)
+
+    /** 污水处理碳排放量-环比上个月 */
+    @Excel(name = "污水处理碳排放量-环比上个月")
+    private BigDecimal wsclTotalCo2Hb;
+
+    /** 能源、药剂碳排量-环比上个月 */
+    @Excel(name = "能源、药剂碳排量-环比上个月")
+    private BigDecimal nyyjTotalCo2Hb;
+
+    /** 污泥处理碳排量-环比上个月 */
+    @Excel(name = "污泥处理碳排量-环比上个月")
+    private BigDecimal wnclTotalCo2Hb;
+
+    /** 替碳、碳汇替碳量-环比上个月 */
+    @Excel(name = "替碳、碳汇替碳量-环比上个月")
+    private BigDecimal ttthTotalCo2Hb;
+
+    /** 总碳排放量-环比上个月 */
+    @Excel(name = "总碳排放量-环比上个月")
+    private BigDecimal ztTotalCo2Hb;
+
+    /** 污水厂行业碳排放强度
+     * 月碳排放强度 = 月碳排放总量 /  月进水量
+     * */
+    @Excel(name = "污水厂行业碳排放强度")
+    private BigDecimal wschytpfqd;
+
+    @Excel(name = "污水厂行业碳排放强度-和同行业平均水平对比: -1:低于;0持平;1:高于")
+    private Integer exceedAvgHY;
+
+    //近七个月的趋势(碳排放量 + 污水厂行业碳排放强度)
+    private List<ChartBasic> recent7Datas;
+
+
+    //能源药剂百分比
+    //固定式能源燃料消耗产生的碳排放量 (燃料消耗)
+    private BigDecimal gdsnyrlCo2;
+
+    //污水处理阶段药剂消耗产生的碳排放量(药剂消耗)
+    private BigDecimal wscljdyjxhCo2;
+
+
+    //电力消耗
+    private BigDecimal dlxhPercent;
+
+    //药剂消耗
+    private BigDecimal yjxhPercent;
+
+    //净购入热力
+    private BigDecimal jgrrlPercent;
+
+    //燃料消耗
+    private BigDecimal rlxhPercent;
+
+    //外加碳源矿化产生的化石源CO₂碳排放量
+    private BigDecimal wjtykuCo2;
+
+    //污泥热解碳化或气化
+    private BigDecimal wnrjthqhCo2;
+
+
+
+
+
+
+
 }

+ 9 - 0
slibra-system/src/main/java/com/slibra/business/mapper/TXinyiCarbonMajorMapper.java

@@ -1,7 +1,9 @@
 package com.slibra.business.mapper;
 
+import java.math.BigDecimal;
 import java.util.List;
 import com.slibra.business.domain.TXinyiCarbonMajor;
+import com.slibra.business.res.CarbonSmartQueryDB;
 
 /**
  * 碳排放主Mapper接口
@@ -60,4 +62,11 @@ public interface TXinyiCarbonMajorMapper
     public int deleteTXinyiCarbonMajorByIds(Long[] ids);
 
     List<String> allMonths();
+
+    CarbonSmartQueryDB getDBDatasByMonth(String month);
+
+    BigDecimal selectSumJslByMonth(String month);
+
+    BigDecimal selectAvgCodByMonth(String month);
+
 }

+ 26 - 0
slibra-system/src/main/java/com/slibra/business/res/CarbonSmartQueryDB.java

@@ -0,0 +1,26 @@
+package com.slibra.business.res;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CarbonSmartQueryDB {
+
+
+    private BigDecimal jsl;//进水量
+    private BigDecimal jsCod;//进水cod
+    private BigDecimal csCod;//出水cod
+    private BigDecimal jsTn;//进水tn
+    private BigDecimal csTn;//出水tn
+
+
+
+}

+ 4 - 0
slibra-system/src/main/java/com/slibra/business/res/ChartBasic.java

@@ -20,5 +20,9 @@ public class ChartBasic {
 
     private BigDecimal val;
 
+    private BigDecimal ztTotalCo2;//总碳排放量
+
+    private BigDecimal wschytpfqd;//污水厂行业碳排放强度
+
 
 }

+ 6 - 0
slibra-system/src/main/java/com/slibra/business/service/ITXinyiCarbonMajorService.java

@@ -2,6 +2,7 @@ package com.slibra.business.service;
 
 import java.util.List;
 import com.slibra.business.domain.TXinyiCarbonMajor;
+import com.slibra.business.res.CarbonSmartQueryDB;
 
 /**
  * 碳排放主Service接口
@@ -59,5 +60,10 @@ public interface ITXinyiCarbonMajorService
      */
     public int deleteTXinyiCarbonMajorById(Long id);
 
+    CarbonSmartQueryDB getDBDatasByMonth(String month);
+
     TXinyiCarbonMajor getCarbonDetailsByMonth(String month);
+
+    TXinyiCarbonMajor getCarbonDetailsById(Long id);
+
 }

+ 138 - 4
slibra-system/src/main/java/com/slibra/business/service/impl/TXinyiCarbonMajorServiceImpl.java

@@ -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));
     }
 }

+ 21 - 0
slibra-system/src/main/resources/mapper/business/TXinyiCarbonMajorMapper.xml

@@ -408,6 +408,19 @@
     </select>
 
 
+    <select id="getDBDatasByMonth" resultType="com.slibra.business.res.CarbonSmartQueryDB">
+        SELECT
+            SUM(jsl) jsl,
+            AVG(js_cod) jsCod,
+            AVG(cs_cod) csCod,
+            AVG(js_tn) jsTn,
+            AVG(cs_tn) csTn
+        FROM
+            t_xinyi_daily
+        WHERE
+            TEST_DATE LIKE (#{month}, '%')
+    </select>
+
     <select id="selectTXinyiCarbonMajorList" parameterType="TXinyiCarbonMajor" resultMap="TXinyiCarbonMajorResult">
         <include refid="selectTXinyiCarbonMajorVo"/>
         <where>
@@ -503,4 +516,12 @@
         </where>
         and del_flag = 0 order by id desc
     </select>
+
+    <select id="selectSumJslByMonth" resultType="java.math.BigDecimal">
+        SELECT SUM(JSL) FROM t_xinyi_daily WHERE TEST_DATE LIKE concat(#{month}, '%')
+    </select>
+
+    <select id="selectAvgCodByMonth" resultType="java.math.BigDecimal">
+        SELECT AVG(JS_COD) FROM t_xinyi_daily WHERE TEST_DATE LIKE concat(#{month}, '%')
+    </select>
 </mapper>