Bladeren bron

计算投加的时候 校验配置的值

王苗苗 5 maanden geleden
bovenliggende
commit
ec6ac61971
2 gewijzigde bestanden met toevoegingen van 54 en 2 verwijderingen
  1. BIN
      .DS_Store
  2. 54 2
      src/main/java/com/xlht/xlhtproject/utils/CalculateUtils.java

BIN
.DS_Store


+ 54 - 2
src/main/java/com/xlht/xlhtproject/utils/CalculateUtils.java

@@ -1,8 +1,11 @@
 package com.xlht.xlhtproject.utils;
 
 import com.xlht.xlhtproject.domain.SmartAdd;
+import com.xlht.xlhtproject.domain.TXlhtConf;
 import com.xlht.xlhtproject.domain.TXlhtMedicineParam;
 import com.xlht.xlhtproject.mapper.TShuju1Mapper;
+import com.xlht.xlhtproject.mapper.TXlhtConfMapper;
+import lombok.extern.slf4j.Slf4j;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,13 +17,16 @@ import java.util.Objects;
 
 import static com.xlht.xlhtproject.enums.MyConstants.*;
 
+@Slf4j
 @Component
 public class CalculateUtils {
 
-    private static final Logger log = LoggerFactory.getLogger(CalculateUtils.class);
     @Autowired
     private TShuju1Mapper shuju1Mapper;
 
+    @Autowired
+    private TXlhtConfMapper xxlhtConfMapper;
+
     public BigDecimal calculateMedicineByLastRecord(TXlhtMedicineParam param, int whichCZ) {
         if (Objects.isNull(param)) {
             return null;
@@ -217,13 +223,59 @@ public class CalculateUtils {
         if(Objects.isNull(sxps)){
             sxps = BigDecimal.ZERO;
         }
+
+        //2024年10月14日15:09:28 由于几个参数设置了最大值和最小值的范围,这里再额外校验一下
+        TXlhtConf tXlhtConf = this.xxlhtConfMapper.selectTXlhtConfById(LONG_1);
+
+        if(!Objects.isNull(tXlhtConf)){
+            BigDecimal minJsll = tXlhtConf.getMinJsll();
+            if(!Objects.isNull(minJsll) && jsLlVal.compareTo(minJsll) < 0){
+                log.info("******获取的进水流量小于配置的最小值,实时的流量是{},配置的最小流量是{}", jsLlVal, minJsll);
+                jsLlVal = minJsll;
+            }
+            BigDecimal maxJsll = tXlhtConf.getMaxJsll();
+            if(!Objects.isNull(maxJsll) && jsLlVal.compareTo(maxJsll) > 0){
+                log.info("******获取的进水流量大于配置的最大值,实时的流量是{},配置的最大流量是{}", jsLlVal, maxJsll);
+                jsLlVal = maxJsll;
+            }
+
+            BigDecimal minJsCod = tXlhtConf.getMinJsCod();
+            if(!Objects.isNull(minJsCod) && jsCodVal.compareTo(minJsCod) < 0){
+                log.info("******获取的进水cod小于配置的最小值,实时的进水cod是{},配置的最小进水cod是{}", jsCodVal, minJsCod);
+                jsCodVal = minJsCod;
+            }
+            BigDecimal maxJsCod = tXlhtConf.getMaxJsCod();
+            if(!Objects.isNull(maxJsCod) && jsCodVal.compareTo(maxJsCod) > 0){
+                log.info("******获取的进水cod大于配置的最大值,实时的进水cod是{},配置的最大进水cod是{}", jsCodVal, maxJsCod);
+                jsCodVal = maxJsCod;
+            }
+        }
+
         //1)计算挟走量
         BigDecimal xzl = (((BigDecimal_2.multiply(hycXsyVal).subtract(htfksd)).add(((qycAdVal.add(qycYxyVal)).multiply(xzxs).subtract(htfksd)))).multiply((jzxs.subtract(BigDecimal_1)))).multiply((jsLlVal.multiply(slfpxs))).divide(BigDecimal_1000, NUMBER_SCALE_4, RoundingMode.HALF_UP);
         //2)计算碳源投加总量
         BigDecimal total = (xzl.multiply(kzxs).subtract((jsLlVal.multiply(slfpxs).multiply(jsCodVal).multiply(zhxs).divide(BigDecimal_1000, NUMBER_SCALE_4, RoundingMode.HALF_UP)))).divide(tydl, NUMBER_SCALE_4, RoundingMode.HALF_UP);
         //2024年09月14日15:33:37 计算出来的结果太大,是几千,把第三步公式也加上
         //计算加药流量
-        return DecimalUtils.getNLengthHalfUp(total.divide(yymd, NUMBER_SCALE_10, RoundingMode.HALF_UP).divide(BigDecimal_1000, NUMBER_SCALE_10, RoundingMode.HALF_UP).multiply(sxps), INT_3);
+        //2024年10月14日14:42:48  由于单位的换算,从m³/h变成l/h,所以结果再乘以1000
+        BigDecimal calculateResult = DecimalUtils.getNLengthHalfUp(total.divide(yymd, NUMBER_SCALE_10, RoundingMode.HALF_UP).divide(BigDecimal_1000, NUMBER_SCALE_10, RoundingMode.HALF_UP).multiply(sxps).multiply(BigDecimal_1000), INT_3);
+        //兜底结果
+        if(Objects.isNull(calculateResult)){
+            calculateResult = BigDecimal.ZERO;
+        }
+        if(!Objects.isNull(tXlhtConf)){
+            BigDecimal minAddAmount = tXlhtConf.getMinAddAmount();
+            if(!Objects.isNull(minAddAmount) && calculateResult.compareTo(minAddAmount) < 0){
+                log.info("&&&&&&通过计算得到的碳源投加量为{},比配置的最小值还低,配置的最小值为{}", calculateResult, minAddAmount);
+                calculateResult = minAddAmount;
+            }
+            BigDecimal maxAddAmount = tXlhtConf.getMaxAddAmount();
+            if(!Objects.isNull(maxAddAmount) && calculateResult.compareTo(maxAddAmount) > 0){
+                log.info("&&&&&&通过计算得到的碳源投加量为{},比配置的最大值还高,配置的最大值为{}", calculateResult, maxAddAmount);
+                calculateResult = maxAddAmount;
+            }
+        }
+        return calculateResult;
     }