whycxzp
2023-03-28 aaa2e601eb2a6806e761d4424fcaaf43a95fdcfd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package com.whyc.service;
 
import com.whyc.dto.BattCapFactory;
import com.whyc.mapper.BattTestDataStopMapper;
import com.whyc.pojo.BattTestDataStop;
import com.whyc.pojo.BatttestdataInf;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
 
@Service
public class BattTestDataStopService {
 
    @Resource
    private BattTestDataStopMapper mapper;
 
    /**计算落后信息
     * @param battTestDataInf*/
    public BatttestdataInf calcBehindInfo(BatttestdataInf battTestDataInf) {
        //筛选落后单体,计算总电压
        List<BattTestDataStop> stopList = mapper.getList(battTestDataInf.getBattGroupId(), battTestDataInf.getTestRecordCount());
        double realCap = 0;//实际容量
        double STDAH = 0;//标存容量
        int hourRate = 0;//小时率
        double current = 0;//当前电流
        double SumAH = 0;//测试容量
        double MaxMonomerVol = 0;//最大电压
        double MonomerVol = 0; //最小电压
        double MonomerVolType = 0;//电池电压类型
        int flag = 1;//电池单体告警标识
        float sumVol = 0;//一组电池电压总值
        List<BattTestDataStop> listBehind = new ArrayList<>();//存放落后单体
        if (stopList != null && stopList.size() > 0) {
            for (int i = 0; i < stopList.size(); i++) {
                STDAH = battTestDataInf.getBattInf().getMonCapStd();//标称电容
                MonomerVolType = battTestDataInf.getBattInf().getMonVolStd();//电压类型
                current = stopList.get(i).getTestCurr();
                SumAH = stopList.get(i).getTestCap();
                MaxMonomerVol = battTestDataInf.getMaxMonvol();//最大电压
                MonomerVol = stopList.get(i).getMonVol();
                sumVol += MonomerVol;//总电压值
                hourRate = BattCapFactory.GetHourRate(STDAH, current);
                realCap = BattCapFactory.GetMonomerCap(STDAH, hourRate, SumAH, MaxMonomerVol, MonomerVol, MonomerVolType, BattCapFactory.CapType_Real);
                flag = BattCapFactory.JudgeAlarm(realCap, battTestDataInf.getAlarmLowCoe4CapAlarm(), battTestDataInf.getAlarmLowCoe4CapChange(), STDAH);
                if (flag != 1) {
                    stopList.get(i).setGroupVol(sumVol);
                    listBehind.add(stopList.get(i));
                } else {
                    continue;
                }
                flag = 1;
            }
        }
        //查询平均截止电压值
        Float avgVol = mapper.calcAvgVol(battTestDataInf.getBattGroupId(), battTestDataInf.getTestRecordCount());
        if(avgVol!=null){
            avgVol = BigDecimal.valueOf(avgVol).setScale(3, BigDecimal.ROUND_HALF_UP).floatValue();
            battTestDataInf.setAvgVol(avgVol);
        }
 
        //整理编号和电压
        if (listBehind != null && listBehind.size() > 0) {
            //落后单体编号
            String numStrN = "";
            //落后单体电压
            String numStrV = "";
            //落后单体数
            Integer monSum = listBehind.size();
 
            for (int i = 0; i < listBehind.size(); i++) {
                numStrN += ",";
                numStrN += listBehind.get(i).getMonNum().toString();
                numStrV += ",";
                Float mon_vol = (float) Math.round(listBehind.get(i).getMonVol() * 1000) / 1000;
                numStrV += mon_vol.toString();
 
            }
            numStrN = numStrN.substring(1, numStrN.length());
            numStrV = numStrV.substring(1, numStrV.length());
            battTestDataInf.setCapBehindMonVol(numStrV);
            battTestDataInf.setCapBehindMonCode(numStrN);
            battTestDataInf.setCapBehindMonNum(monSum);
        }
 
        return battTestDataInf;
    }
}