123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- package com.xlht.xlhtproject.utils;
- import com.xlht.xlhtproject.domain.SmartAdd;
- import com.xlht.xlhtproject.domain.TXlhtMedicineParam;
- import com.xlht.xlhtproject.mapper.TShuju1Mapper;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.Objects;
- import static com.xlht.xlhtproject.enums.MyConstants.*;
- @Component
- public class CalculateUtils {
- private static final Logger log = LoggerFactory.getLogger(CalculateUtils.class);
- @Autowired
- private TShuju1Mapper shuju1Mapper;
- public BigDecimal calculateMedicineByLastRecord(TXlhtMedicineParam param, int whichCZ) {
- if (Objects.isNull(param)) {
- return null;
- }
- //计算用到的值
- Integer hycXsyTypeOne = param.getHycXsyTypeOne();
- Integer hycXsyTypeTwo = param.getHycXsyTypeTwo();
- BigDecimal hycXsyOne = param.getHycXsyOne();
- BigDecimal hycXsyTwo = param.getHycXsyTwo();
- BigDecimal htfksdOne = param.getHtfksdOne();
- BigDecimal htfksdTwo = param.getHtfksdTwo();
- Integer qycAdTypeOne = param.getQycAdTypeOne();
- Integer qycAdTypeTwo = param.getQycAdTypeTwo();
- BigDecimal qycAdOne = param.getQycAdOne();
- BigDecimal qycAdTwo = param.getQycAdTwo();
- Integer qycYxyTypeOne = param.getQycYxyTypeOne();
- Integer qycYxyTypeTwo = param.getQycYxyTypeTwo();
- BigDecimal qycYxyOne = param.getQycYxyOne();
- BigDecimal qycYxyTwo = param.getQycYxyTwo();
- BigDecimal xzxsOne = param.getXzxsOne();
- BigDecimal xzxsTwo = param.getXzxsTwo();
- BigDecimal jzxsOne = param.getJzxsOne();
- BigDecimal jzxsTwo = param.getJzxsTwo();
- Integer jsLlTypeOne = param.getJsLlTypeOne();
- Integer jsLlTypeTwo = param.getJsLlTypeTwo();
- BigDecimal jsLlOne = param.getJsLlOne();
- BigDecimal jsLlTwo = param.getJsLlTwo();
- BigDecimal slfpxsOne = param.getSlfpxsOne();
- BigDecimal slfpxsTwo = param.getSlfpxsTwo();
- BigDecimal kzxsOne = param.getKzxsOne();
- BigDecimal kzxsTwo = param.getKzxsTwo();
- Integer jsCodTypeOne = param.getJsCodTypeOne();
- Integer jsCodTypeTwo = param.getJsCodTypeTwo();
- BigDecimal jsCodOne = param.getJsCodOne();
- BigDecimal jsCodTwo = param.getJsCodTwo();
- BigDecimal zhxsOne = param.getZhxsOne();
- BigDecimal zhxsTwo = param.getZhxsTwo();
- BigDecimal tydlOne = param.getTydlOne();
- BigDecimal tydlTwo = param.getTydlTwo();
- BigDecimal medicineAmountOne = param.getMedicineAmountOne();//手动需要
- // Integer type = param.getType();//0自动 1一号池 2二号池 3人工投放
- BigDecimal yymdOne = param.getYymdOne();
- BigDecimal yymdTwo = param.getYymdTwo();
- BigDecimal sxpsOne = param.getSxpsOne();
- BigDecimal sxpsTwo = param.getSxpsTwo();
- //计算
- /*if(!Objects.isNull(whichCZ)) {
- if(3 == whichCZ){
- return medicineAmountOne;
- }
- //2024年09月19日11:30:06 锡林浩特,碳源投放是1池和2池分开投放的
- //计算1号池的值
- //计算二号池的值
- //判断,返回值
- if(0 == whichCZ)//锡林浩特没有这个逻辑,连个池子是分开的
- return null;
- else if(1 == whichCZ) {
- return getResultByDiff(hycXsyTypeOne, hycXsyOne, htfksdOne, qycAdTypeOne, qycAdOne, qycYxyTypeOne, qycYxyOne, xzxsOne, jzxsOne, jsLlTypeOne, jsLlOne, slfpxsOne, kzxsOne, jsCodTypeOne, jsCodOne, zhxsOne, tydlOne, "one", yymdOne, sxpsOne);
- }else if(2 == whichCZ)
- return getResultByDiff(hycXsyTypeTwo, hycXsyTwo, htfksdTwo, qycAdTypeTwo, qycAdTwo, qycYxyTypeTwo, qycYxyTwo, xzxsTwo, jzxsTwo, jsLlTypeTwo, jsLlTwo, slfpxsTwo, kzxsTwo, jsCodTypeTwo, jsCodTwo, zhxsTwo, tydlTwo, "two", yymdTwo, sxpsTwo);
- else {
- return null;//错误的配置
- }
- }*/
- //2024年09月24日14:35:32 先判断是哪个池子 再判断是否是手动
- Integer typeOne = param.getTypeOne();
- if(Objects.isNull(typeOne)) {
- typeOne = 0;
- }
- Integer typeTwo = param.getTypeTwo();
- if(Objects.isNull(typeTwo)) {
- typeTwo = 0;
- }
- if(1 == whichCZ) {
- if(typeOne == 1){//人工
- return param.getMedicineAmountOne();
- }else {//自动
- return getResultByDiff(hycXsyTypeOne, hycXsyOne, htfksdOne, qycAdTypeOne, qycAdOne, qycYxyTypeOne, qycYxyOne, xzxsOne, jzxsOne, jsLlTypeOne, jsLlOne, slfpxsOne, kzxsOne, jsCodTypeOne, jsCodOne, zhxsOne, tydlOne, "one", yymdOne, sxpsOne);
- }
- }else if(2 == whichCZ) {
- if(typeTwo == 1){//人工
- return param.getMedicineAmountTwo();
- }else {//自动
- return getResultByDiff(hycXsyTypeTwo, hycXsyTwo, htfksdTwo, qycAdTypeTwo, qycAdTwo, qycYxyTypeTwo, qycYxyTwo, xzxsTwo, jzxsTwo, jsLlTypeTwo, jsLlTwo, slfpxsTwo, kzxsTwo, jsCodTypeTwo, jsCodTwo, zhxsTwo, tydlTwo, "two", yymdTwo, sxpsTwo);
- }
- }else {
- log.error("不支持的类型××××××");
- }
- return null;
- }
- private BigDecimal getResultByDiff(Integer hycXsyType, BigDecimal hycXsyVal, BigDecimal htfksd, Integer qycAdType, BigDecimal qycAdVal, Integer qycYxyType,
- BigDecimal qycYxyVal, BigDecimal xzxs, BigDecimal jzxs, Integer jsLlType, BigDecimal jsLlVal, BigDecimal slfpxs, BigDecimal kzxs, Integer jsCodType,
- BigDecimal jsCodVal, BigDecimal zhxs, BigDecimal tydl, String whichCZ, BigDecimal yymd, BigDecimal sxps) {
- //2024年09月14日10:26:11 不同池子,根据不同类型,获取最新的数据,计算碳源投加量
- //获取最新的实时数据
- SmartAdd smartAdd = this.shuju1Mapper.getNewestData();
- if(!Objects.isNull(smartAdd)){
- if("one".equals(whichCZ)){//一池
- if(!Objects.isNull(hycXsyType)){
- if(1 == hycXsyType){//化验
- hycXsyVal = smartAdd.getHyXsyHYOne();
- }else if(2 == hycXsyType){//预测
- hycXsyVal = smartAdd.getHyXsyYCOne();
- }
- }
- if(!Objects.isNull(qycAdType) && 1 == qycAdType){//化验
- qycAdVal = smartAdd.getQyAdHYOne();
- }
- if(!Objects.isNull(qycYxyType) && 1 == qycYxyType){//化验
- qycYxyVal = smartAdd.getQyXsyHYOne();
- }
- if(!Objects.isNull(jsCodType)){
- if(1 == jsCodType){//仪表
- jsCodVal = smartAdd.getJsCodYB();
- }else if(2 == jsCodType){//化验
- jsCodVal = smartAdd.getJsCodHY();
- }
- }
- if(!Objects.isNull(jsLlType) && 1 == jsLlType){//仪表
- jsLlVal = smartAdd.getJslYB();
- }
- }else {//二池
- if(!Objects.isNull(hycXsyType)){
- if(1 == hycXsyType){//化验
- hycXsyVal = smartAdd.getHyXsyHYTwo();
- }else if(2 == hycXsyType){//预测
- hycXsyVal = smartAdd.getHyXsyYCTwo();
- }
- }
- if(!Objects.isNull(qycAdType) && 1 == qycAdType){//化验
- qycAdVal = smartAdd.getQyAdHYTwo();
- }
- if(!Objects.isNull(qycYxyType) && 1 == qycYxyType){//化验
- qycYxyVal = smartAdd.getQyXsyHYTwo();
- }
- if(!Objects.isNull(jsCodType)){
- if(1 == jsCodType){//仪表
- jsCodVal = smartAdd.getJsCodYB();
- }else if(2 == jsCodType){//化验
- jsCodVal = smartAdd.getJsCodHY();
- }
- }
- if(!Objects.isNull(jsLlType) && 1 == jsLlType){//仪表
- jsLlVal = smartAdd.getJslYB();
- }
- }
- }
- //兜底处理
- if(Objects.isNull(hycXsyVal))
- hycXsyVal = BigDecimal.ZERO;
- if(Objects.isNull(htfksd))
- htfksd = BigDecimal.ZERO;
- if(Objects.isNull(qycAdVal))
- qycAdVal = BigDecimal.ZERO;
- if(Objects.isNull(qycYxyVal))
- qycYxyVal = BigDecimal.ZERO;
- if(Objects.isNull(xzxs))
- xzxs = BigDecimal.ZERO;
- if(Objects.isNull(jzxs))
- jzxs = BigDecimal.ZERO;
- if(Objects.isNull(jsLlVal))
- jsLlVal = BigDecimal.ZERO;
- if(Objects.isNull(slfpxs))
- slfpxs = BigDecimal.ZERO;
- if(Objects.isNull(kzxs))
- kzxs = BigDecimal.ZERO;
- if(Objects.isNull(jsCodVal))
- jsCodVal = BigDecimal.ZERO;
- if(Objects.isNull(zhxs))
- zhxs = BigDecimal.ZERO;
- if(Objects.isNull(tydl))
- return null;//除数不能为0
- if(Objects.isNull(yymd) || yymd.compareTo(BigDecimal.ZERO) <= 0)
- return null;//除数不能为0
- if(Objects.isNull(sxps)){
- sxps = BigDecimal.ZERO;
- }
- //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);
- }
- }
|