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