whyclxw
2024-06-27 f8479e6f138343b091b3ceeb7b232e75b3247946
蓄电池组后评估测试版
7个文件已修改
8个文件已添加
2070 ■■■■■ 已修改文件
src/main/java/com/whyc/controller/BattTestInfController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/AlarmDaoFactory.java 1382 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/BattCapFactory.java 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/dto/ReportBattDTO.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/AlarmParamMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BattAlarmMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BattInfMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/mapper/BattTestInfMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/AlarmParam.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/BattTestInf.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/BattTestInfService.java 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/util/PageInfoUtils.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BattAlarmMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BattInfMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BattTestInfMapper.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/BattTestInfController.java
@@ -1,15 +1,14 @@
package com.whyc.controller;
import com.whyc.dto.ReportBattDTO;
import com.whyc.dto.Response;
import com.whyc.service.BattTestInfDataService;
import com.whyc.service.BattTestInfService;
import com.whyc.util.ActionUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@RestController
@Api(tags = "电池组充放电记录")
@@ -34,4 +33,14 @@
        Response res=dataService.getTDataHis(binfId,testRecordCount);
        return res;
    }
    /**
     * 蓄电池组后评估
     */
    @PostMapping("searchGroupAssess")
    @ApiOperation(notes = "searchByCondition ", value = "蓄电池组后评估")
    public Response searchByCondition(@RequestParam int pageNum,@RequestParam int pageSize, @RequestBody ReportBattDTO tinf) {
        //UserInf userInf = ActionUtil.getUser();
        return service.searchGroupAssess(pageNum,pageSize,tinf,1001);
    }
}
src/main/java/com/whyc/dto/AlarmDaoFactory.java
New file
@@ -0,0 +1,1382 @@
package com.whyc.dto;
public class AlarmDaoFactory {
    public static final int Alarm_All = 0;                //--全部
    public static final int Alarm_vol_Online = 119001;    //--在线电压
    public static final int Alarm_vol_Group = 119002;     //--组端电压
    public static final int Alarm_curr_Charge = 119003;   //--充电电流
    public static final int Alarm_curr_Discharge = 119004;//--放电电流
    public static final int Alarm_vol_Monomer = 119005;   //--单体电压
    public static final int Alarm_tmp_Monomer = 119006;   //--单体温度
    public static final int Alarm_res_Monomer = 119007;   //--单体内阻
    public static final int Alarm_res_Conn = 119008;      //--连接条阻抗
    public final static int ALM_TYPE_DisChargeMonVol_ID = 119009; //--放电过程中落后单体告警
    public static final int Alarm_CapAlarm = 119010;      //--容量告警告警
    public static final int Alarm_CapChange = 119011;      //--容量更换告警
    public final static int ALM_TYPE_MONLYVOL_ID = 119012;       //漏液电压告警
    public final static int ALM_TYPE_MONREALCAP_ID = 119013;      //单体预估容量告警
    public final static int ALM_SIGNAL_ID_Null = 0;
    public final static int ALM_SIGNAL_ID_OnlineVolHigh = 1;
    public final static int ALM_SIGNAL_ID_OnlineVolLow = 2;
    public final static int ALM_SIGNAL_ID_GroupVolHigh = 3;
    public final static int ALM_SIGNAL_ID_GroupVolLow = 4;
    public final static int ALM_SIGNAL_ID_ChargeCurrHigh = 5;
    public final static int ALM_SIGNAL_ID_ChargeCurrLow = 6;
    public final static int ALM_SIGNAL_ID_DisChargeCurrHigh = 7;
    public final static int ALM_SIGNAL_ID_DisChargeCurrLow = 8;
    public final static int ALM_SIGNAL_ID_MonVolHigh = 9;
    public final static int ALM_SIGNAL_ID_MonVolLow = 10;
    public final static int ALM_SIGNAL_ID_MonTmpHigh = 11;
    public final static int ALM_SIGNAL_ID_MonTmpLow = 12;
    public final static int ALM_SIGNAL_ID_MonResHigh = 13;
    public final static int ALM_SIGNAL_ID_MonResLow = 14;
    public final static int ALM_SIGNAL_ID_ConnResHigh = 15;
    public final static int ALM_SIGNAL_ID_ConnResLow = 16;
    public final static int ALM_SIGNAL_ID_DischargeMonVolHigh = 17;
    public final static int ALM_SIGNAL_ID_DischargeMonVolLow = 18;
    public static final int Alarm_IGNAL_ID_CapAlarmLow =19;
    public static final int Alarm_IGNAL_ID_CapAlarmHigh =20;
    public static final int Alarm_IGNAL_ID_CapChangeLow =21;
    public static final int Alarm_IGNAL_ID_CapChangeHigh =22;
    /**电源告警 */
    public static final int acIn1_over_volA            =110001;
    public static final int acIn1_under_volA        =110002;
    public static final int acIn1_less_A            =110003;
    public static final int acIn1_over_volB            =110004;
    public static final int acIn1_under_volB        =110005;
    public static final int acIn1_less_B            =110006;
    public static final int acIn1_over_volC            =110007;
    public static final int acIn1_under_volC        =110008;
    public static final int acIn1_less_C            =110009;
    public static final int acIn1_powerdown            =110010;
    public static final int acIn1_thunder_err        =110011;
    public static final int dcOut_over_vol            =110012;
    public static final int dcOut_under_vol            =110013;
    public static final int loader_fuse                =110014;
    public static final int battgroup1_fuse            =110015;
    public static final int battgroup2_fuse            =110016;
    public static final int acdcMod1_err            =110017;
    public static final int acdcMod2_err            =110018;
    public static final int acdcMod3_err            =110019;
    public static final int acdcMod4_err            =110020;
    public static final int acdcMod5_err            =110021;
    public static final int acdcMod6_err            =110022;
    public static final int acdcMod7_err            =110023;
    public static final int acdcMod8_err            =110024;
    public static final int acdcMod9_err            =110025;
    public static final int acdcMod10_err            =110026;
    public static final int acdcMod11_err            =110027;
    public static final int acdcMod12_err            =110028;
    public static final int acdcMod13_err            =110029;
    public static final int acdcMod14_err            =110030;
    public static final int acdcMod15_err            =110031;
    public static final int acdcMod16_err            =110032;
    public static final int acIn_total_alarm        =110033;
    public static final int dcOut_total_alarm        =110034;
    public static final int acb1_over_currA            =110035;
    public static final int acb1_over_currB            =110036;
    public static final int acb1_over_currC            =110037;
    public static final int acIn_monitorerr            =110038;
    public static final int dcOut_over_curr            =110039;
    public static final int total_alarm                =110040;
    public static final int battgroup1_volLow        =110041;
    public static final int battgroup2_volLow        =110042;
    public static final int battgroup1_down            =110043;
    public static final int battgroup2_down            =110044;
    public static final int battgroup1_overChgCurr    =110045;
    public static final int battgroup2_overChgCurr    =110046;
    public static final int acdcMod1_overVol        =110047;
    public static final int acdcMod2_overVol        =110048;
    public static final int acdcMod3_overVol        =110049;
    public static final int acdcMod4_overVol        =110050;
    public static final int acdcMod5_overVol        =110051;
    public static final int acdcMod6_overVol        =110052;
    public static final int acdcMod7_overVol        =110053;
    public static final int acdcMod8_overVol        =110054;
    public static final int acdcMod9_overVol        =110055;
    public static final int acdcMod10_overVol        =110056;
    public static final int acdcMod11_overVol        =110057;
    public static final int acdcMod12_overVol        =110058;
    public static final int acdcMod13_overVol        =110059;
    public static final int acdcMod14_overVol        =110060;
    public static final int acdcMod15_overVol        =110061;
    public static final int acdcMod16_overVol        =110062;
    public static final int acdcMod1_underVol        =110063;
    public static final int acdcMod2_underVol        =110064;
    public static final int acdcMod3_underVol        =110065;
    public static final int acdcMod4_underVol        =110066;
    public static final int acdcMod5_underVol        =110067;
    public static final int acdcMod6_underVol        =110068;
    public static final int acdcMod7_underVol        =110069;
    public static final int acdcMod8_underVol        =110070;
    public static final int acdcMod9_underVol        =110071;
    public static final int acdcMod10_underVol        =110072;
    public static final int acdcMod11_underVol        =110073;
    public static final int acdcMod12_underVol        =110074;
    public static final int acdcMod13_underVol        =110075;
    public static final int acdcMod14_underVol        =110076;
    public static final int acdcMod15_underVol        =110077;
    public static final int acdcMod16_underVol        =110078;
    public static final int acdcMod1_overCurr        =110079;
    public static final int acdcMod2_overCurr        =110080;
    public static final int acdcMod3_overCurr        =110081;
    public static final int acdcMod4_overCurr        =110082;
    public static final int acdcMod5_overCurr        =110083;
    public static final int acdcMod6_overCurr        =110084;
    public static final int acdcMod7_overCurr        =110085;
    public static final int acdcMod8_overCurr        =110086;
    public static final int acdcMod9_overCurr        =110087;
    public static final int acdcMod10_overCurr        =110088;
    public static final int acdcMod11_overCurr        =110089;
    public static final int acdcMod12_overCurr        =110090;
    public static final int acdcMod13_overCurr        =110091;
    public static final int acdcMod14_overCurr        =110092;
    public static final int acdcMod15_overCurr        =110093;
    public static final int acdcMod16_overCurr        =110094;
    public static final int acdcMod1_acErr            =110095;
    public static final int acdcMod2_acErr            =110096;
    public static final int acdcMod3_acErr            =110097;
    public static final int acdcMod4_acErr            =110098;
    public static final int acdcMod5_acErr            =110099;
    public static final int acdcMod6_acErr            =110100;
    public static final int acdcMod7_acErr            =110101;
    public static final int acdcMod8_acErr            =110102;
    public static final int acdcMod9_acErr            =110103;
    public static final int acdcMod10_acErr            =110104;
    public static final int acdcMod11_acErr            =110105;
    public static final int acdcMod12_acErr            =110106;
    public static final int acdcMod13_acErr            =110107;
    public static final int acdcMod14_acErr            =110108;
    public static final int acdcMod15_acErr            =110109;
    public static final int acdcMod16_acErr            =110110;
    public static final int acIn1_trip                =110111;
    public static final int acIn2_trip                =110112;
    public static final int acIn1_fuse                =110113;
    public static final int acIn2_fuse                =110114;
    public static final int acIn1_unbanlance        =110115;
    public static final int acIn2_unbanlance        =110116;
    public static final int acIn1_freqerr = 110117;
    public static final int acIn2_freqerr = 110118;
    public static final int comm_err = 110119;
    public static final int powerdev_commErr = 110120;
    public static final int userAcIn1_PowerDown = 110121;
    public static final int userAcIn2_PowerDown = 110122;
    public static final int userAcIn1_CommErr = 110123;
    public static final int userAcIn2_CommErr = 110124;
    public static final int temp_CommErr1 = 110125;
    public static final int temp_CommErr2 = 110126;
    public static final int temp_CommErr3 = 110127;
    public static final int humi_CommErr1 = 110128;
    public static final int humi_CommErr2 = 110129;
    public static final int humi_CommErr3 = 110130;
    public static final int smoke_Alarm1 = 110131;
    public static final int smoke_Alarm2 = 110132;
    public static final int smoke_Alarm3 = 110133;
    public static final int smoke_CommErr1 = 110134;
    public static final int smoke_CommErr2 = 110135;
    public static final int smoke_CommErr3 = 110136;
    public static final int acIn2_over_volA = 110137;
    public static final int acIn2_under_volA = 110138;
    public static final int acIn2_less_A = 110139;
    public static final int acIn2_over_volB = 110140;
    public static final int acIn2_under_volB = 110141;
    public static final int acIn2_less_B = 110142;
    public static final int acIn2_over_volC = 110143;
    public static final int acIn2_under_volC = 110144;
    public static final int acIn2_less_C = 110145;
    public static final int power_alm = 110146;
    public static final int powerdown_commErr = 110147;
    /*public static String getAlarmName(int type)
    {
        String Alarm_name = "未知";
        switch(type)                       //告警名称
        {
             case 1 :  Alarm_name = "在线电压高";break;
             case 2 :  Alarm_name = "在线电压低"; break;
             case 3 :  Alarm_name = "组端电压高";break;
             case 4 :  Alarm_name = "组端电压低"; break;
             case 5 :  Alarm_name = "充电电流大";break;
             case 6 :  Alarm_name = "充电电流低"; break;
             case 7 :  Alarm_name = "放电电流大";break;
             case 8 :  Alarm_name = "放电电流低"; break;
             case 9 :  Alarm_name = "单体电压高";break;
             case 10 : Alarm_name = "单体电压低"; break;
             case 11 : Alarm_name = "单体温度高";break;
             case 12 : Alarm_name = "单体温度低";break;
             case 13 : Alarm_name = "单体内阻高";break;
             case 14 : Alarm_name = "单体内阻低"; break;
             case 15 : Alarm_name = "连接条阻抗高";break;
             case 16 : Alarm_name = "连接条阻抗低"; break;
             case 17 : Alarm_name = "放电单体电压高";break;
             case 18 : Alarm_name = "放电单体电压低";break;
             case 19 : Alarm_name = "容量告警容量低";break;
             case 20 : Alarm_name = "容量告警容量高";break;
             case 21 : Alarm_name = "容量更换容量低";break;
             case 22 : Alarm_name = "容量更换容量高";break;
             case 23 : Alarm_name = "电池正极漏液";break;
             case 24 : Alarm_name = "电池负极漏液 ";break;
        }
        return Alarm_name;
    }*/
    public static String getAlarmName(int type) {
        String Alarm_name = "NONE";
        switch (type)                       //告警名称
        {
            case 1:
                Alarm_name = "HighOnlineVoltage";
                break;
            case 2:
                Alarm_name = "LowOnlineVoltage";
                break;
            case 3:
                Alarm_name = "HighGroupVoltage";
                break;
            case 4:
                Alarm_name = "LowGroupVoltage";
                break;
            case 5:
                Alarm_name = "HighChargingCurrent";
                break;
            case 6:
                Alarm_name = "LowChargingCurrent";
                break;
            case 7:
                Alarm_name = "HighDischargCurrent";
                break;
            case 8:
                Alarm_name = "LowDischargCurrent";
                break;
            case 9:
                Alarm_name = "HighIndividualVoltage";
                break;
            case 10:
                Alarm_name = "LowIndividualVoltage";
                break;
            case 11:
                Alarm_name = "HighMonomerTemperature";
                break;
            case 12:
                Alarm_name = "LowMonomerTemperature";
                break;
            case 13:
                Alarm_name = "HighIndividualResistance";
                break;
            case 14:
                Alarm_name = "LowIndividualResistance";
                break;
            case 15:
                Alarm_name = "HighConnectionBarImpedance";
                break;
            case 16:
                Alarm_name = "LowConnectionBarImpedance";
                break;
            case 17:
                Alarm_name = "HighDischargeUnitVoltage";
                break;
            case 18:
                Alarm_name = "LowDischargeUnitVoltage";
                break;
            case 19:
                Alarm_name = "LowCapacityAlarmCapacity";
                break;
            case 20:
                Alarm_name = "HighCapacityAlarmCapacity";
                break;
            case 21:
                Alarm_name = "LowCapacityReplaceCapacity";
                break;
            case 22:
                Alarm_name = "HighCapacityReplaceCapacity";
                break;
            case 23:
                Alarm_name = "BatteryPositiveElectrodeLeakage";
                break;
            case 24:
                Alarm_name = "BatteryNegativeElectrodeLeakage";
                break;
        }
        return Alarm_name;
    }
    /*public static String getAlarmType(int type) {
        String Alarm_Type = "未知";
        switch (type) {
            case 1:
                Alarm_Type = "一级告警";
                break;
            case 2:
                Alarm_Type = "二级告警";
                break;
            case 3:
                Alarm_Type = "三级告警";
                break;
            case 4:
                Alarm_Type = "四级告警";
                break;
            case 5:
                Alarm_Type = "五级告警";
                break;
            case 6:
                Alarm_Type = "六级告警";
                break;
            case 7:
                Alarm_Type = "七级告警";
                break;
            case 8:
                Alarm_Type = "八级告警";
                break;
            case 9:
                Alarm_Type = "九级告警";
                break;
            case 10:
                Alarm_Type = "十级告警";
                break;
        }
        return Alarm_Type;
    }*/
    public static String getAlarmType(int type) {
        String Alarm_Type = "NONE";
        switch (type) {
            case 1:
                Alarm_Type = "level1Alarm";
                break;
            case 2:
                Alarm_Type = "level2Alarm";
                break;
            case 3:
                Alarm_Type = "level3Alarm";
                break;
            case 4:
                Alarm_Type = "level4Alarm";
                break;
            case 5:
                Alarm_Type = "level5Alarm";
                break;
            case 6:
                Alarm_Type = "level6Alarm";
                break;
            case 7:
                Alarm_Type = "level7Alarm";
                break;
            case 8:
                Alarm_Type = "level8Alarm";
                break;
            case 9:
                Alarm_Type = "level9Alarm";
                break;
            case 10:
                Alarm_Type = "level10Alarm";
                break;
        }
        return Alarm_Type;
    }
    /*public static String getdevName(int type)
    {
        String dev_name = "未知";
        switch(type)                       //告警名称
        {
            case 119020:
                dev_name = "通讯故障";
                break;
            case 618501:
                dev_name = "继电器告警";
                break;
            case 618502:
                dev_name = "通讯告警";
                break;
            case 618503:
                dev_name = "设备过温告警";
                break;
            case 618504:
                dev_name = "二极管D1告警";
                break;
            case 618505:
                dev_name = "干接点告警";
                break;
            case 618506:
                dev_name = "异常核容或养护终止告警";
                break;
            case 119023:
                dev_name = "续航不足告警";
                break;
            case 119024:
                dev_name = "基站停电告警";
                break;
            case 119025:
                dev_name = "基站发电告警";
                break;
            case 119026:
                dev_name = "基站掉站告警";
                break;
            case 119027:
                dev_name = "基站开门告警";
                break;
            case 119028:
                dev_name = "设备高温告警";
                break;
            case 119032:
                dev_name = "设备SD卡故障";
                break;
            case 119033:
                dev_name = "采集线告警";
                break;
            case 119034:
                dev_name = "停电电流均衡告警";
                break;
        }
        return dev_name;
    }*/
    public static String getdevName(int type) {
        String dev_name = "NONE";
        switch (type)                       //告警名称
        {
            case 119020:
                dev_name = "CommunicationFailure";
                break;
            case 618501:
                dev_name = "RelayAlarm";
                break;
            case 618502:
                dev_name = "CommunicationAlarm";
                break;
            case 618503:
                dev_name = "EquipmentOverTemperatureAlarm";
                break;
            case 618504:
                dev_name = "DiodeD1Alarm";
                break;
            case 618505:
                dev_name = "DryContactAlarm";
                break;
            case 618506:
                dev_name = "AbnormalNuclearCapacityOrMaintenanceTerminationAlarm";
                break;
            case 119023:
                dev_name = "InsufficientBatteryLifeAlarm";
                break;
            case 119024:
                dev_name = "BaseStationPowerOutageAlarm";
                break;
            case 119025:
                dev_name = "BaseStationPowerGenerationAlarm";
                break;
            case 119026:
                dev_name = "BaseStationDropAlarm";
                break;
            case 119027:
                dev_name = "BaseStationDoorOpeningAlarm";
                break;
            case 119028:
                dev_name = "EquipmentHighTemperatureAlarm";
                break;
            case 119032:
                dev_name = "DeviceSDCardFailure";
                break;
            case 119033:
                dev_name = "AcquisitionLineAlarm";
                break;
            case 119034:
                dev_name = "PowerOutageCurrentBalanceAlarm";
                break;
        }
        return dev_name;
    }
    /**
     * 设备alm_type和电池alm_signal_id,电源告警的alarmType获取对应的告警类型
     *
     * @param type
     * @return
     */
    public static String getAllAlarmName(int type) {
        String Alarm_name = "未知";
        switch (type)                       //告警名称
        {
            //电池告警
            case 1:
                Alarm_name = "在线电压高";
                break;
            case 2:
                Alarm_name = "在线电压低";
                break;
            case 3:
                Alarm_name = "组端电压高";
                break;
            case 4:
                Alarm_name = "组端电压低";
                break;
            case 5:
                Alarm_name = "充电电流大";
                break;
            case 6:
                Alarm_name = "充电电流低";
                break;
            case 7:
                Alarm_name = "放电电流大";
                break;
            case 8:
                Alarm_name = "放电电流低";
                break;
            case 9:
                Alarm_name = "单体电压高";
                break;
            case 10:
                Alarm_name = "单体电压低";
                break;
            case 11:
                Alarm_name = "单体温度高";
                break;
            case 12:
                Alarm_name = "单体温度低";
                break;
            case 13:
                Alarm_name = "单体内阻高";
                break;
            case 14:
                Alarm_name = "单体内阻低";
                break;
            case 15:
                Alarm_name = "连接条阻抗高";
                break;
            case 16:
                Alarm_name = "连接条阻抗低";
                break;
            case 17:
                Alarm_name = "放电单体电压高";
                break;
            case 18:
                Alarm_name = "放电单体电压低";
                break;
            case 19:
                Alarm_name = "容量告警容量低";
                break;
            case 20:
                Alarm_name = "容量告警容量高";
                break;
            case 21:
                Alarm_name = "容量更换容量低";
                break;
            case 22:
                Alarm_name = "容量更换容量高";
                break;
            case 23:
                Alarm_name = "漏液电压高";
                break;
            case 24:
                Alarm_name = "漏液电压低 ";
                break;
            //设备告警
            case 119020:
                Alarm_name = "通讯故障";
                break;
            case 618501:
                Alarm_name = "继电器告警";
                break;
            case 618502:
                Alarm_name = "通讯告警";
                break;
            case 618503:
                Alarm_name = "设备过温告警";
                break;
            case 618504:
                Alarm_name = "二极管D1告警";
                break;
            case 618505:
                Alarm_name = "干接点告警";
                break;
            case 618506:
                Alarm_name = "异常核容或养护终止告警";
                break;
            case 119023:
                Alarm_name = "续航不足告警";
                break;
            case 119024:
                Alarm_name = "基站停电告警";
                break;
            case 119025:
                Alarm_name = "基站发电告警";
                break;
            case 119026:
                Alarm_name = "基站掉站告警";
                break;
            case 119027:
                Alarm_name = "基站开门告警";
                break;
            case 119028:
                Alarm_name = "设备高温告警";
                break;
            case 119032:
                Alarm_name = "设备SD卡故障";
                break;
            case 119033:
                Alarm_name = "采集线告警";
                break;
            case 119034:
                Alarm_name = "停电电流均衡告警";
                break;
            //电源告警
            case acIn1_over_volA:
                Alarm_name = "1路交流A相过压";
                break;
            case acIn1_under_volA:
                Alarm_name = "1路交流A相欠压";
                break;
            case acIn1_less_A:
                Alarm_name = "1路交流A相缺相";
                break;
            case acIn1_over_volB:
                Alarm_name = "1路交流B相过压";
                break;
            case acIn1_under_volB:
                Alarm_name = "1路交流B相欠压";
                break;
            case acIn1_less_B:
                Alarm_name = "1路交流B相缺相";
                break;
            case acIn1_over_volC:
                Alarm_name = "1路交流C相过压";
                break;
            case acIn1_under_volC:
                Alarm_name = "1路交流C相欠压";
                break;
            case acIn1_less_C:
                Alarm_name = "1路交流C相缺相";
                break;
            case acIn1_powerdown:
                Alarm_name = "交流停电";
                break;
            case acIn1_thunder_err:
                Alarm_name = "防雷器故障";
                break;
            case dcOut_over_vol:
                Alarm_name = "直流电压过高";
                break;
            case dcOut_under_vol:
                Alarm_name = "直流电压过低";
                break;
            case loader_fuse:
                Alarm_name = "负载熔断";
                break;
            case battgroup1_fuse:
                Alarm_name = "电池组1熔断";
                break;
            case battgroup2_fuse:
                Alarm_name = "电池组2熔断";
                break;
            case acdcMod1_err:
                Alarm_name = "整流器1总故障";
                break;
            case acdcMod2_err:
                Alarm_name = "整流器2总故障";
                break;
            case acdcMod3_err:
                Alarm_name = "整流器3总故障";
                break;
            case acdcMod4_err:
                Alarm_name = "整流器4总故障";
                break;
            case acdcMod5_err:
                Alarm_name = "整流器5总故障";
                break;
            case acdcMod6_err:
                Alarm_name = "整流器6总故障";
                break;
            case acdcMod7_err:
                Alarm_name = "整流器7总故障";
                break;
            case acdcMod8_err:
                Alarm_name = "整流器8总故障";
                break;
            case acdcMod9_err:
                Alarm_name = "整流器9总故障";
                break;
            case acdcMod10_err:
                Alarm_name = "整流器10总故障";
                break;
            case acdcMod11_err:
                Alarm_name = "整流器11总故障";
                break;
            case acdcMod12_err:
                Alarm_name = "整流器12总故障";
                break;
            case acdcMod13_err:
                Alarm_name = "整流器13总故障";
                break;
            case acdcMod14_err:
                Alarm_name = "整流器14总故障";
                break;
            case acdcMod15_err:
                Alarm_name = "整流器15总故障";
                break;
            case acdcMod16_err:
                Alarm_name = "整流器16总故障";
                break;
            case acIn_total_alarm:
                Alarm_name = "交流总故障";
                break;
            case dcOut_total_alarm:
                Alarm_name = "直流总故障";
                break;
            case acb1_over_currA:
                Alarm_name = "交流A相过流";
                break;
            case acb1_over_currB:
                Alarm_name = "交流B相过流";
                break;
            case acb1_over_currC:
                Alarm_name = "交流C相过流";
                break;
            case acIn_monitorerr:
                Alarm_name = "监控器故障";
                break;
            case dcOut_over_curr:
                Alarm_name = "直流过流";
                break;
            case total_alarm:
                Alarm_name = "开关柜总报警";
                break;
            case battgroup1_volLow:
                Alarm_name = "电池组1电压低";
                break;
            case battgroup2_volLow:
                Alarm_name = "电池组2电压低";
                break;
            case battgroup1_down:
                Alarm_name = "电池组1下电";
                break;
            case battgroup2_down:
                Alarm_name = "电池组2下电";
                break;
            case battgroup1_overChgCurr:
                Alarm_name = "电池组1充电过流";
                break;
            case battgroup2_overChgCurr:
                Alarm_name = "电池组2充电过流";
                break;
            case acdcMod1_overVol:
                Alarm_name = "整流器1过压";
                break;
            case acdcMod2_overVol:
                Alarm_name = "整流器2过压";
                break;
            case acdcMod3_overVol:
                Alarm_name = "整流器3过压";
                break;
            case acdcMod4_overVol:
                Alarm_name = "整流器4过压";
                break;
            case acdcMod5_overVol:
                Alarm_name = "整流器5过压";
                break;
            case acdcMod6_overVol:
                Alarm_name = "整流器6过压";
                break;
            case acdcMod7_overVol:
                Alarm_name = "整流器7过压";
                break;
            case acdcMod8_overVol:
                Alarm_name = "整流器8过压";
                break;
            case acdcMod9_overVol:
                Alarm_name = "整流器9过压";
                break;
            case acdcMod10_overVol:
                Alarm_name = "整流器10过压";
                break;
            case acdcMod11_overVol:
                Alarm_name = "整流器11过压";
                break;
            case acdcMod12_overVol:
                Alarm_name = "整流器12过压";
                break;
            case acdcMod13_overVol:
                Alarm_name = "整流器13过压";
                break;
            case acdcMod14_overVol:
                Alarm_name = "整流器14过压";
                break;
            case acdcMod15_overVol:
                Alarm_name = "整流器15过压";
                break;
            case acdcMod16_overVol:
                Alarm_name = "整流器16过压";
                break;
            case acdcMod1_underVol:
                Alarm_name = "整流器1欠压";
                break;
            case acdcMod2_underVol:
                Alarm_name = "整流器2欠压";
                break;
            case acdcMod3_underVol:
                Alarm_name = "整流器3欠压";
                break;
            case acdcMod4_underVol:
                Alarm_name = "整流器4欠压";
                break;
            case acdcMod5_underVol:
                Alarm_name = "整流器5欠压";
                break;
            case acdcMod6_underVol:
                Alarm_name = "整流器6欠压";
                break;
            case acdcMod7_underVol:
                Alarm_name = "整流器7欠压";
                break;
            case acdcMod8_underVol:
                Alarm_name = "整流器8欠压";
                break;
            case acdcMod9_underVol:
                Alarm_name = "整流器9欠压";
                break;
            case acdcMod10_underVol:
                Alarm_name = "整流器10欠压";
                break;
            case acdcMod11_underVol:
                Alarm_name = "整流器11欠压";
                break;
            case acdcMod12_underVol:
                Alarm_name = "整流器12欠压";
                break;
            case acdcMod13_underVol:
                Alarm_name = "整流器13欠压";
                break;
            case acdcMod14_underVol:
                Alarm_name = "整流器14欠压";
                break;
            case acdcMod15_underVol:
                Alarm_name = "整流器15欠压";
                break;
            case acdcMod16_underVol:
                Alarm_name = "整流器16欠压";
                break;
            case acdcMod1_overCurr:
                Alarm_name = "整流器1过流";
                break;
            case acdcMod2_overCurr:
                Alarm_name = "整流器2过流";
                break;
            case acdcMod3_overCurr:
                Alarm_name = "整流器3过流";
                break;
            case acdcMod4_overCurr:
                Alarm_name = "整流器4过流";
                break;
            case acdcMod5_overCurr:
                Alarm_name = "整流器5过流";
                break;
            case acdcMod6_overCurr:
                Alarm_name = "整流器6过流";
                break;
            case acdcMod7_overCurr:
                Alarm_name = "整流器7过流";
                break;
            case acdcMod8_overCurr:
                Alarm_name = "整流器8过流";
                break;
            case acdcMod9_overCurr:
                Alarm_name = "整流器9过流";
                break;
            case acdcMod10_overCurr:
                Alarm_name = "整流器10过流";
                break;
            case acdcMod11_overCurr:
                Alarm_name = "整流器11过流";
                break;
            case acdcMod12_overCurr:
                Alarm_name = "整流器12过流";
                break;
            case acdcMod13_overCurr:
                Alarm_name = "整流器13过流";
                break;
            case acdcMod14_overCurr:
                Alarm_name = "整流器14过流";
                break;
            case acdcMod15_overCurr:
                Alarm_name = "整流器15过流";
                break;
            case acdcMod16_overCurr:
                Alarm_name = "整流器16过流";
                break;
            case acdcMod1_acErr:
                Alarm_name = "整流器1交流异常";
                break;
            case acdcMod2_acErr:
                Alarm_name = "整流器2交流异常";
                break;
            case acdcMod3_acErr:
                Alarm_name = "整流器3交流异常";
                break;
            case acdcMod4_acErr:
                Alarm_name = "整流器4交流异常";
                break;
            case acdcMod5_acErr:
                Alarm_name = "整流器5交流异常";
                break;
            case acdcMod6_acErr:
                Alarm_name = "整流器6交流异常";
                break;
            case acdcMod7_acErr:
                Alarm_name = "整流器7交流异常";
                break;
            case acdcMod8_acErr:
                Alarm_name = "整流器8交流异常";
                break;
            case acdcMod9_acErr:
                Alarm_name = "整流器9交流异常";
                break;
            case acdcMod10_acErr:
                Alarm_name = "整流器10交流异常";
                break;
            case acdcMod11_acErr:
                Alarm_name = "整流器11交流异常";
                break;
            case acdcMod12_acErr:
                Alarm_name = "整流器12交流异常";
                break;
            case acdcMod13_acErr:
                Alarm_name = "整流器13交流异常";
                break;
            case acdcMod14_acErr:
                Alarm_name = "整流器14交流异常";
                break;
            case acdcMod15_acErr:
                Alarm_name = "整流器15交流异常";
                break;
            case acdcMod16_acErr:
                Alarm_name = "整流器16交流异常";
                break;
            case acIn1_trip:
                Alarm_name = "交流输入1跳闸";
                break;
            case acIn2_trip:
                Alarm_name = "交流输入2跳闸";
                break;
            case acIn1_fuse:
                Alarm_name = "交流输入1熔丝告警";
                break;
            case acIn2_fuse:
                Alarm_name = "交流输入2熔丝告警";
                break;
            case acIn1_unbanlance:
                Alarm_name = "交流输入1三相不平衡";
                break;
            case acIn2_unbanlance:
                Alarm_name = "交流输入2三相不平衡";
                break;
            case acIn1_freqerr:
                Alarm_name = "交流输入1频率异常";
                break;
            case acIn2_freqerr:
                Alarm_name = "交流输入2频率异常";
                break;
            case comm_err:
                Alarm_name = "协转通信故障";
                break;
            case powerdev_commErr:
                Alarm_name = "电源通信故障";
                break;
            case userAcIn1_PowerDown:
                Alarm_name = "交流输入1停电";
                break;
            case userAcIn2_PowerDown:
                Alarm_name = "交流输入2停电";
                break;
            case userAcIn1_CommErr:
                Alarm_name = "交流1采集通信故障";
                break;
            case userAcIn2_CommErr:
                Alarm_name = "交流2采集通信故障";
                break;
            case temp_CommErr1         : Alarm_name =    "温感1通信故障";break;
            case temp_CommErr2         : Alarm_name =    "温感2通信故障";break;
            case temp_CommErr3:
                Alarm_name = "温感3通信故障";
                break;
            case humi_CommErr1:
                Alarm_name = "湿感1通信故障";
                break;
            case humi_CommErr2:
                Alarm_name = "湿感2通信故障";
                break;
            case humi_CommErr3:
                Alarm_name = "湿感3通信故障";
                break;
            case smoke_Alarm1:
                Alarm_name = "烟感1报警";
                break;
            case smoke_Alarm2:
                Alarm_name = "烟感2报警";
                break;
            case smoke_Alarm3:
                Alarm_name = "烟感3报警";
                break;
            case smoke_CommErr1:
                Alarm_name = "烟感1通信故障";
                break;
            case smoke_CommErr2:
                Alarm_name = "烟感2通信故障";
                break;
            case smoke_CommErr3:
                Alarm_name = "烟感3通信故障";
                break;
            case acIn2_over_volA:
                Alarm_name = "2路交流A相过压";
                break;
            case acIn2_under_volA:
                Alarm_name = "2路交流A相欠压";
                break;
            case acIn2_less_A:
                Alarm_name = "2路交流A相缺相";
                break;
            case acIn2_over_volB:
                Alarm_name = "2路交流B相过压";
                break;
            case acIn2_under_volB:
                Alarm_name = "2路交流B相欠压";
                break;
            case acIn2_less_B:
                Alarm_name = "2路交流B相缺相";
                break;
            case acIn2_over_volC:
                Alarm_name = "2路交流C相过压";
                break;
            case acIn2_under_volC:
                Alarm_name = "2路交流C相欠压";
                break;
            case acIn2_less_C:
                Alarm_name = "2路交流C相缺相";
                break;
            case power_alm:
                Alarm_name = "电源告警";
                break;
            case powerdown_commErr:
                Alarm_name = "交流停电通信故障";
                break;
            default:
                Alarm_name = "未知告警";
                break;
        }
        return Alarm_name;
    }
    /*
    * ups告警对应关系*/
    public static String getUpsAlarmName(int type) {
        String Alarm_name = "未知";
        switch (type)                       //告警名称
        {
            //电池告警
            case 116001:
                Alarm_name = "逆变器不同步";
                break;
            case 116002:
                Alarm_name = "主路电压异常";
                break;
            case 116003:
                Alarm_name = "整流器异常";
                break;
            case 116004:
                Alarm_name = "逆变器异常";
                break;
            case 116005:
                Alarm_name = "旁路异常";
                break;
            case 116006:
                Alarm_name = "电池电压低于下限";
                break;
            case 116007:
                Alarm_name = "电池电压过高";
                break;
            case 116008:
                Alarm_name = "电池未接入";
                break;
            case 116009:
                Alarm_name = "电池电压低预告警";
                break;
            case 116010:
                Alarm_name = "电池接反";
                break;
            case 116011:
                Alarm_name = "ParaMonCAN通讯异常";
                break;
            case 116012:
                Alarm_name = "PowerCAN通讯异常";
                break;
            case 116013:
                Alarm_name = "整流DSP程序错误";
                break;
            case 116014:
                Alarm_name = "整流FPGA程序错误";
                break;
            case 116015:
                Alarm_name = "逆变DSP程序错误";
                break;
            case 116016:
                Alarm_name = "逆变FPGA程序错误";
                break;
            case 116017:
                Alarm_name = "旁路DSP程序错误";
                break;
            case 116018:
                Alarm_name = "旁路FPGA程序错误";
                break;
            case 116019:
                Alarm_name = "机架内离散总线通讯异常";
                break;
            case 116020:
                Alarm_name = "机架间离散总线通讯异常";
                break;
            case 116021:
                Alarm_name = "主控模块设置不匹配";
                break;
            case 116022:
                Alarm_name = "LBS异常";
                break;
            case 116023:
                Alarm_name = "紧急关机";
                break;
            case 116024:
                Alarm_name = "旁路晶闸管故障 ";
                break;
            case 116025:
                Alarm_name = "旁路相序反";
                break;
            case 116026:
                Alarm_name = "旁路过流";
                break;
            case 116027:
                Alarm_name = "旁路异常关机";
                break;
            case 116028:
                Alarm_name = "切换次数限制";
                break;
            case 116029:
                Alarm_name = "ECO切换次数限制";
                break;
            case 116030:
                Alarm_name = "ParaPowerCan通讯异常";
                break;
            case 116031:
                Alarm_name = "电池放电限流";
                break;
            case 116032:
                Alarm_name = "放电器故障";
                break;
            case 116033:
                Alarm_name = "充电器故障";
                break;
            case 116034:
                Alarm_name = "LBS连接线异常";
                break;
            case 116035:
                Alarm_name = "电池需维护";
                break;
            case 116036:
                Alarm_name = "电池过温";
                break;
            case 116037:
                Alarm_name = "电池接地故障";
                break;
            case 116038:
                Alarm_name = "主路频率异常";
                break;
            case 116039:
                Alarm_name = "模块过温";
                break;
            case 116040:
                Alarm_name = "从控模块设置不匹配";
                break;
            case 116041:
                Alarm_name = "接口模块设置不匹配";
                break;
            case 116042:
                Alarm_name = "均充超时";
                break;
            case 116043:
                Alarm_name = "辅助电源掉电";
                break;
            case 116044:
                Alarm_name = "主路相序反 ";
                break;
            case 116045:
                Alarm_name = "整流器软启动失败 ";
                break;
            case 116046:
                Alarm_name = "用户操作错误";
                break;
            case 116047:
                Alarm_name = "输出熔丝断";
                break;
            case 116048:
                Alarm_name = "输出过载";
                break;
            case 116049:
                Alarm_name = "系统过载";
                break;
            case 116050:
                Alarm_name = "输出过载超时";
                break;
            case 116051:
                Alarm_name = "负载冲击转旁路";
                break;
            case 116052:
                Alarm_name = "并机均流异常";
                break;
            case 116053:
                Alarm_name = "母线异常关机";
                break;
            case 116054:
                Alarm_name = "临机请求转旁路 ";
                break;
            case 116055:
                Alarm_name = "直流母线过压 ";
                break;
            case 116056:
                Alarm_name = "MonCAN通讯异常 ";
                break;
            case 116057:
                Alarm_name = "输入缺零故障";
                break;
            case 116058:
                Alarm_name = "逆变继电器故障";
                break;
            case 116059:
                Alarm_name = "主路反灌";
                break;
            case 116060:
                Alarm_name = "输入电流异常";
                break;
            case 116061:
                Alarm_name = "输出电压异常";
                break;
            case 116062:
                Alarm_name = "输入电流超限";
                break;
            case 116063:
                Alarm_name = "旁路过温";
                break;
            case 116064:
                Alarm_name = "邻机旁路晶闸管故障 ";
                break;
            case 116065:
                Alarm_name = "并机连接线异常 ";
                break;
            case 116066:
                Alarm_name = "充电器过温";
                break;
            case 116067:
                Alarm_name = "电池端口短路";
                break;
            case 116068:
                Alarm_name = "电池房环境异常";
                break;
            case 116069:
                Alarm_name = "风扇异常";
                break;
            case 116070:
                Alarm_name = "旁路缺零故障";
                break;
            case 116071:
                Alarm_name = "旁路接管";
                break;
            case 116072:
                Alarm_name = "BCB1 状态异常";
                break;
            case 116073:
                Alarm_name = "BCB2 状态异常";
                break;
            case 116074:
                Alarm_name = "BCB3 状态异常 ";
                break;
            case 116075:
                Alarm_name = "BCB4 状态异常 ";
                break;
            case 116076:
                Alarm_name = "旁路SCR风扇异常 ";
                break;
            case 116077:
                Alarm_name = "平衡电路故障";
                break;
            case 116078:
                Alarm_name = "平衡电路过流";
                break;
            case 116079:
                Alarm_name = "平衡电路过温";
                break;
            case 116080:
                Alarm_name = "失去冗余";
                break;
            case 116081:
                Alarm_name = "容量过载";
                break;
            case 116082:
                Alarm_name = "功率板设置不匹配";
                break;
            case 116083:
                Alarm_name = "旁路设置不匹配";
                break;
            case 116084:
                Alarm_name = "上抽风风扇异常 ";
                break;
            case 116085:
                Alarm_name = "系统A相输出熔丝断 ";
                break;
            case 116086:
                Alarm_name = "系统B相输出熔丝断";
                break;
            case 116087:
                Alarm_name = "系统C相输出熔丝断";
                break;
            case 116088:
                Alarm_name = "旁路无效";
                break;
            case 116089:
                Alarm_name = "整流器过流";
                break;
            case 116090:
                Alarm_name = "旁路过流超时";
                break;
            case 116091:
                Alarm_name = "输出零地过压";
                break;
            case 116092:
                Alarm_name = "输入熔丝断";
                break;
            case 116093:
                Alarm_name = "旁路熔丝断";
                break;
            case 116120:
                Alarm_name = "协转与UPS通信故障 ";
                break;
            case 116121:
                Alarm_name = "平台与协转通信故障 ";
                break;
            default:
                Alarm_name = "未知告警";
                break;
        }
        return Alarm_name;
    }
}
src/main/java/com/whyc/dto/BattCapFactory.java
New file
@@ -0,0 +1,162 @@
package com.whyc.dto;
public class BattCapFactory {
    public static int  CapType_Rest = 0;            //当查询剩余容量时传递
    public static int  CapType_Real = 1;            //当查询实际容量时传递
    public static int  CapType_type=2;       //容量
    public static int  CapType_name=1;       //次低
    public static int  CapType_method=0;     //标称
    // 获取标纯电流
    public static double GetFDCurrent(double stdcap, int hourrate)
    {
        double res = 0.055;
        switch(hourrate)
        {
            case 1: res = 0.514; break;
            case 2: res = 0.306; break;
            case 3: res = 0.250; break;
            case 4: res = 0.200; break;
            case 5: res = 0.166; break;
            case 6: res = 0.146; break;
            case 7: res = 0.131; break;
            case 8: res = 0.118; break;
            case 9: res = 0.108; break;
            case 10: res = 0.100; break;
            case 20: res = 0.055; break;
            default: res = 0.055; break;
        }
        return (stdcap * res);
    }
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    // 获取放电小时率        stdah:标纯容量          current:当前电流
    public static int GetHourRate(double stdah, double current)
    {
        int index = 0;
        double value[]={5.14, 3.06, 2.50, 2.00, 1.66, 1.46, 1.31, 1.18, 1.08, 1.00, 0.55, 0.40};
        double res;
        current = Math.abs(current);
        res = current/(stdah/10);
        if(res >= 5.14) return 1;
        else if(res <= 0.55) return 20;
        else
        {
            for(index=0; index<10; index++)
            {
                if((res<=value[index]) && (res>value[index+1]))
                    break;
                else continue;
            }
            if((value[index]-res) < (res-value[index+1]))
            {
                return (index+1);
            }
            else
            {
                if(index+2 > 10) return (20);
                else return (index+2);
            }
        }
    }
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    public static double N_TO_10H(int n_H)
    {
        switch(n_H)
        {
            case  1 : return(1/0.55);
            case  2 : return(1/0.61);
            case  3 : return(1/0.75);
            case  4 : return(1/0.79);
            case  5 : return(1/0.833);
            case  6 : return(1/0.876);
            case  7 : return(1/0.917);
            case  8 : return(1/0.944);
            case  9 : return(1/0.974);
            case  10: return(1/1);
            case  20: return(1/1.1);
        }
        return 1.0;
    }
    //-------------------------------------------------------------------------------
    //-------------------------------------------------------------------------------
    //获取剩余容量    STDAH:标称容量        HourRate:放电小时率    SumAH:测试容量        MaxMonomerVol:最大电池电压        MonomerVol:当前电池组的最低单体电压
    //MonomerVolType:电池电压类型 电池标称电压    2v,6v,12v    CapType:容量类型(定值是常量)
                                                         //小时率        已测试容量            最容量
    public static double GetMonomerCap(double STDAH, int HourRate, double SumAH, double MaxMonomerVol,
                                        double MonomerVol, double MonomerVolType, int CapType)
    {
        if((MaxMonomerVol - MonomerVolType*0.9) <= 0)
            return 0;
        if(SumAH < 0)
            SumAH *= (-1);
        double tmp_cap;
        tmp_cap = MonomerVol - MonomerVolType * 0.9;
        tmp_cap *= (STDAH - SumAH * N_TO_10H(HourRate));
        double dt_vol = MaxMonomerVol - MonomerVolType*0.9;
        if(dt_vol < 0.01)
            dt_vol = 0.01;
        tmp_cap = tmp_cap/dt_vol;
        if(tmp_cap < 0)
            tmp_cap = 0;
        if(CapType == CapType_Rest)
            return tmp_cap;
        else if(CapType == CapType_Real)
            return (tmp_cap + SumAH * N_TO_10H(HourRate));
        else
            return ((tmp_cap + SumAH * N_TO_10H(HourRate))*100 / STDAH);
    }
    //----------------------------------------------------------------------------------
    //----------------------------------------------------------------------------------
    //获取后备时间
    public static int GetRestTimeSecond(double restcap, double curr)
    {
        double tmp_curr = Math.abs(curr);
        if(tmp_curr < 0.1)
            tmp_curr = 0.1;
        int rest_time = (int)((restcap / tmp_curr) * 3600);
        if(rest_time > (99*3600))
            rest_time = (99*3600);
        return rest_time;
    }
    //判断通过实际容量判断某次放电测试是否有效
    /*
     * STDAH:标存容量
     * param:容量有效参数*/
    public static  int Judge(double realCap,float param,double STDAH){
        int flag=0;
        if(Math.abs(realCap)>(param*STDAH)){
            flag=1;
        }else{
            flag=0;
        }
        return flag;
        }
    //判断通过实际容量判断某次放电测试是否有效
        /*
         * STDAH:标存容量
         * param:容量告警参数*/
    public static  int JudgeAlarm(double realCap,float param,float Cparam,double STDAH){
        int flag=0;
        if(realCap>(param*STDAH)){
            flag=1;
        }else{
            if(realCap<(Cparam*STDAH)){
                flag=AlarmDaoFactory.Alarm_CapChange;
            }else{
                flag=AlarmDaoFactory.Alarm_CapAlarm;
            }
        }
        return flag;
 }
}
src/main/java/com/whyc/dto/ReportBattDTO.java
New file
@@ -0,0 +1,54 @@
package com.whyc.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ReportBattDTO {
    /**站点信息*/
    private String stationName;
    private String stationName1;//省
    private Integer battGroupId;
    /**
     * 电池测试类型
     */
    @ApiModelProperty("0:无;1:浮充;2:充电;3:放电;4:均充;5:电导/内阻;6:电导;7:温度;8:连接条;9:在线监测")
    private Integer testType;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date recordStartTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date recordEndTime;
    /**
     * 放电类型
     */
    @ApiModelProperty("测试仪表类型:停电放电;假负载放电2;节能放电3")
    private Integer testStartType;
    private Integer monNum;
    /**
     * 性能筛选
     */
    @ApiModelProperty("全部:-1;未放电:0;优秀:1;劣化:2,损坏:3")
    private Integer assess;
    /**
     * 性能筛选
     */
    @ApiModelProperty("全部:-1;本年:0;往年:1")
    private Integer wj;
    /**
     * 统计方式
     */
    @ApiModelProperty("容量+内阻:0;容量:1")
    private Integer statictype;
}
src/main/java/com/whyc/mapper/AlarmParamMapper.java
New file
@@ -0,0 +1,6 @@
package com.whyc.mapper;
import com.whyc.pojo.AlarmParam;
public interface AlarmParamMapper extends CustomMapper<AlarmParam>{
}
src/main/java/com/whyc/mapper/BattAlarmMapper.java
@@ -12,4 +12,6 @@
    List<BattAlarm> getBattAlarm(int almLevel, Date startTime, Date endTime);
    //在用电池组实时推送告警信息
    List<BattAlarm> getResBattAlm(int binfId);
    //查询电池告警(2024。4.15修改)
    List<BattAlarm> getAlm2(Integer battGroupId);
}
src/main/java/com/whyc/mapper/BattInfMapper.java
@@ -2,5 +2,10 @@
import com.whyc.pojo.BattInf;
import java.util.List;
public interface BattInfMapper extends CustomMapper<BattInf>{
    //查询符合条件的电池组
    List<BattInf> searchGroupAssess();
}
src/main/java/com/whyc/mapper/BattTestInfMapper.java
@@ -2,5 +2,14 @@
import com.whyc.pojo.BattTestInf;
import java.util.Date;
import java.util.List;
public interface BattTestInfMapper extends CustomMapper<BattTestInf>{
    List<BattTestInf> searchDischargeTest(Integer battGroupId, Date recordStartTime, Date recordEndTime);
    //查往年的放电记录
    List<BattTestInf> searchDischargeTest_WJ(Integer battGroupId, Date recordStartTime);
}
src/main/java/com/whyc/pojo/AlarmParam.java
New file
@@ -0,0 +1,68 @@
package com.whyc.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
 * <p>
 *
 * </p>
 *
 * @author lxw
 * @since 2021-12-14
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName(schema ="db_param",value = "alarm_param")
@ApiModel(value="AlarmParam对象", description="")
public class AlarmParam implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableField("num")
    @ApiModelProperty("主键编号")
    private Integer num;
    @TableField("alm_id")
    @ApiModelProperty("告警id")
    private Integer almId;
    @TableField("alm_name")
    @ApiModelProperty("告警名称")
    private String almName;
    @TableField("alm_high_coe")
    @ApiModelProperty("上限告警阈值")
    private Float almHighCoe;
    @TableField("alm_low_coe")
    @ApiModelProperty("下限告警阈值")
    private Float almLowCoe;
    @TableField("alm_high_en")
    @ApiModelProperty("上限告警使能")
    private Integer almHighEn;
    @TableField("alm_low_en")
    @ApiModelProperty("下限告警使能")
    private Integer almLowEn;
    @TableField("alm_high_level")
    @ApiModelProperty("上限告警等级")
    private Integer almHighLevel;
    @TableField("alm_low_level")
    @ApiModelProperty("下限告警等级")
    private Integer almLowLevel;
}
src/main/java/com/whyc/pojo/BattTestInf.java
@@ -92,4 +92,7 @@
    @TableField("min_monvol")
    @ApiModelProperty("最小单体电压")
    private Float minMonvol;
    @TableField(exist = false)
    private float realCap;
}
src/main/java/com/whyc/service/BattTestInfService.java
@@ -4,18 +4,36 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.whyc.dto.BattCapFactory;
import com.whyc.dto.ReportBattDTO;
import com.whyc.dto.Response;
import com.whyc.mapper.AlarmParamMapper;
import com.whyc.mapper.BattAlarmMapper;
import com.whyc.mapper.BattInfMapper;
import com.whyc.mapper.BattTestInfMapper;
import com.whyc.pojo.AlarmParam;
import com.whyc.pojo.BattAlarm;
import com.whyc.pojo.BattInf;
import com.whyc.pojo.BattTestInf;
import com.whyc.util.PageInfoUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
@Service
public class BattTestInfService {
    @Autowired(required = false)
    private BattTestInfMapper mapper;
    @Autowired(required = false)
    private BattInfMapper binfMapper;
    @Autowired(required = false)
    private AlarmParamMapper alarmParamMapper;
    @Autowired(required = false)
    private BattAlarmMapper alarmMapper;
    //查询充放电记录
    public Response getTinfHis(int binfId, int pageNum, int pageSize) {
@@ -26,4 +44,239 @@
        PageInfo pageInfo=new PageInfo(list);
        return new Response().setII(1,list!=null,pageInfo,"查询充放电记录");
    }
    //1.4电池性能评估
    public Response searchGroupAssess(int pageNum, int pageSize, ReportBattDTO tinf, int userId){
        //List<BattInf> battinfList = binfMapper.searchGroupAssess(tinf, userId);
        List<BattInf> battinfList = binfMapper.searchGroupAssess();
        List<Map> result = new ArrayList<>();
        Integer assess = tinf.getAssess();//性能筛选
        Integer wj = tinf.getWj();//往年还是本年
        Integer statictype= tinf.getStatictype();//统计方式
        if (assess == null) {
            assess = -1;
        }
        if (wj == null) {
            wj = -1;
        }
        if (battinfList != null && battinfList.size() > 0) {
            for (BattInf binf : battinfList) {
                Integer battGroupId = binf.getBinfId();
                Map<String, Object> map=new HashMap<>();
                Map<String, Object> batttestdataInfList = searchDischargeTest(battGroupId, binf.getMonCap(), binf.getMonVol(), tinf.getRecordStartTime(), tinf.getRecordEndTime(),wj);
                if(statictype==0){
                    //对每个电池组状态进行判断(容量+内阻)
                    map = getAssess2(binf, batttestdataInfList,assess);
                }else{
                    //对每个电池组状态进行判断(容量)
                    map = getAssess3(binf, batttestdataInfList,assess);
                }
                if (assess == -1) {
                    result.add(map);
                } else {
                    if (map.get("flag") == assess) {
                        result.add(map);
                    }
                }
            }
        }
        PageInfo pageInfo = PageInfoUtils.list2PageInfo(result, pageNum, pageSize);
        return new Response().set(1, pageInfo, "查询成功");
    }
    //1.4电池组性能评估(根据电池组id查询所有的放电记录求出放电总次数,最高历史容量,最低历史容量,平均容量,最新测试容量)
    public Map<String, Object> searchDischargeTest(Integer battGroupId, float monCapStd, float monVolStd, Date recordStartTime, Date recordEndTime, int wj) {
        List<BattTestInf> list = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        if(wj==0){//本年
            list=mapper.searchDischargeTest(battGroupId, recordStartTime, recordEndTime);
            if( list.size()==0){
                map.put("wj", "N");
            }else{
                map.put("wj", "J");
            }
        }else if(wj==1){//往年
            list = mapper.searchDischargeTest_WJ(battGroupId, recordStartTime);
            if( list.size()==0){
                map.put("wj", "N");
            }else{
                map.put("wj", "W");
            }
        }else if(wj==-1){//全部
            list=mapper.searchDischargeTest(battGroupId, recordStartTime, recordEndTime);
            if( list.size()==0){
                list = mapper.searchDischargeTest_WJ(battGroupId, recordStartTime);
                if( list.size()==0){
                    map.put("wj", "N");
                }else{
                    map.put("wj", "W");
                }
            }else{
                map.put("wj", "J");
            }
        }
        List<BattTestInf> testList = new LinkedList<>();
        int sum = 0;//总测试次数
        float cap = 0f;//实际容量
        float allCap = 0f;//总容量
        float maxCap = 0f;//最高容量
        float minCap = 10000f;//最低容量
        float avgCap = 0f;//平均容量
        float lastCap = 0f;//最近测试容量
        for (int i = 0; i < list.size(); i++) {
            BattTestInf binf = list.get(i);
            int hourRate = BattCapFactory.GetHourRate(monCapStd, binf.getTestCurr());
            cap = (float) BattCapFactory.GetMonomerCap(monCapStd, hourRate, binf.getTestCap(), binf.getMaxMonvol(), binf.getMinMonvol(), monVolStd, BattCapFactory.CapType_Real);
            binf.setRealCap(cap);
            testList.add(binf);
            if (sum == 0) {
                lastCap = cap;
            }
            if (maxCap <= cap) {
                maxCap = cap;//最大
            }
            if (minCap >= cap) {
                minCap = cap;//最小
            }
            allCap += cap;
            sum++;
        }
        if (sum != 0) {
            avgCap = allCap / sum;//平均容量
        } else {
            avgCap = 0;
            minCap = 0;
        }
        map.put("battGroupid", battGroupId);
        map.put("sum", sum);
        map.put("maxCap", maxCap);
        map.put("avgCap", avgCap);
        map.put("minCap", minCap);
        map.put("lastCap", lastCap);
        map.put("testList", testList);
        return map;
    }
    //筛选蓄电池组后评性能(2024。4.15修改)
    public Map<String, Object> getAssess2(BattInf binf, Map<String, Object> mapList,int assess) {
        Map<String, Object> map = new HashMap();
        map.put("battinf", binf);
        map.put("battTestDataInf", mapList);
        map.put("wj",mapList.get("wj"));
        //直接去集合第2个数(放电次数),第6个数(实际预估容量:最近一次核容的实际容量)
        int battGroupId = (int) mapList.get("battGroupid");
        int disNum = (int) mapList.get("sum");
        float realCap = (Float) mapList.get("lastCap");
        float monCapStd = binf.getMonCap();
        //0.查询劣化(告警)和损坏(更换)的阈值
        QueryWrapper<AlarmParam> alarmWrapper = new QueryWrapper();
        alarmWrapper.and(wrapper -> {
            return wrapper.eq("alm_name", "Batt_Alarm_Type_CapAlarm").or().eq("alm_name", "Batt_Alarm_Type_CapChange");
        });
        alarmWrapper.orderByAsc("alm_id");
        List<AlarmParam> paramList = alarmParamMapper.selectList(alarmWrapper);
        float capAlarm = 0f;
        float capChange = 0f;
        if (paramList != null && paramList.size() > 0) {
            capAlarm = paramList.get(0).getAlmLowCoe();//劣化参数0.8
            capChange = paramList.get(1).getAlmLowCoe();//损坏参数0.6
        } else {
            capAlarm = 0.8f;
            capChange = 0.6f;
        }
        //查询电池告警(内阻告警)
        List listALmRes = getAlm2(battGroupId);
        map.put("noDisAlmSH",listALmRes);
        //未放电:本年度未放电
        if( (disNum==0) ){
            map.put("flag",0);
        }
        //优秀:本年度已放电,且容量健康,无内阻告警(预告警(重要),告警(紧急))
        if( (disNum>0)&&(realCap > capAlarm * monCapStd)&&(listALmRes.size()<=0)){
            map.put("flag",1);
        }
        /*劣化:本年度未放电,内阻告警(预告警(重要),告警(紧急))
         *容量小于劣化阈值,大于损坏阈值,内阻告警(预告警,告警)
         *     容量小于劣化阈值,内阻正常
         *     容量正常,内阻告警(预告警,告警)
         */
        if (((disNum==0)&&(listALmRes.size()>0))
                ||((disNum>0)&&(realCap <= capAlarm * monCapStd && realCap >= capChange * monCapStd)&&(listALmRes.size()>0))
                ||((disNum>0)&&(realCap <= capAlarm * monCapStd)&&(listALmRes.size()<=0))
                ||(disNum>0)&&(realCap > capAlarm * monCapStd)&&(listALmRes.size()>0)){
            if((assess==0)&&(disNum==0)){
                map.put("flag",0);
            }else{
                map.put("flag",2);
            }
        }
        //损坏:容量低,内阻告警
        if((disNum!=0)&&(realCap< capChange * monCapStd)&&(listALmRes.size()>0)){
            map.put("flag",3);
        }
        return map;
    }
    //查询电池告警(2024。4.15修改)
    /*未放电:本年度未放电
     *优秀:本年度已放电,且容量健康,无内阻告警(预告警(重要),告警(紧急))
     *劣化:本年度未放电,内阻告警(预告警(重要),告警(紧急))
     *     容量小于劣化阈值,大于损坏阈值,内阻告警(预告警,告警)
     *     容量小于劣化阈值,内阻正常
     *     容量正常,内阻告警(预告警,告警)
     * 损坏:容量低,内阻告警
     * */
    private List getAlm2(Integer battGroupId) {
        List list = alarmMapper.getAlm2(battGroupId);
        return list;
    }
    //筛选蓄电池组后评性能(2024。4.15修改)
    public Map<String, Object> getAssess3(BattInf binf, Map<String, Object> mapList,int assess) {
        Map<String, Object> map = new HashMap();
        map.put("battinf", binf);
        map.put("battTestDataInf", mapList);
        map.put("wj", mapList.get("wj"));
        //直接去集合第2个数(放电次数),第6个数(实际预估容量:最近一次核容的实际容量)
        int battGroupId = (int) mapList.get("battGroupid");
        int disNum = (int) mapList.get("sum");
        float realCap = (Float) mapList.get("lastCap");
        float monCapStd = binf.getMonCap();
        //0.查询劣化(告警)和损坏(更换)的阈值
        QueryWrapper<AlarmParam> alarmWrapper = new QueryWrapper();
        alarmWrapper.and(wrapper -> {
            return wrapper.eq("alm_name", "Batt_Alarm_Type_CapAlarm").or().eq("alm_name", "Batt_Alarm_Type_CapChange");
        });
        alarmWrapper.orderByAsc("alm_id");
        List<AlarmParam> paramList = alarmParamMapper.selectList(alarmWrapper);
        float capAlarm = 0f;
        float capChange = 0f;
        if (paramList != null && paramList.size() > 0) {
            capAlarm = paramList.get(0).getAlmLowCoe();//劣化参数0.8
            capChange = paramList.get(1).getAlmLowCoe();//损坏参数0.6
        } else {
            capAlarm = 0.8f;
            capChange = 0.6f;
        }
        //未放电:本年度未放电
        if ((disNum == 0)) {
            map.put("flag", 0);
        }
        //优秀:本年度已放电,且容量健康)
        if ((disNum > 0) && (realCap > capAlarm * monCapStd)) {
            map.put("flag", 1);
        }
        /*劣化:
         *容量小于劣化阈值,大于损坏阈值
         */
        if (((disNum > 0) && (realCap <= capAlarm * monCapStd && realCap >= capChange * monCapStd))) {
            map.put("flag", 2);
        }
        //损坏:容量低
        if ((disNum > 0) && (realCap < capChange * monCapStd)) {
            map.put("flag", 3);
        }
        return map;
    }
}
src/main/java/com/whyc/util/PageInfoUtils.java
New file
@@ -0,0 +1,49 @@
package com.whyc.util;
import com.github.pagehelper.PageInfo;
import java.util.LinkedList;
import java.util.List;
public class PageInfoUtils {
    public static <T> PageInfo<T> list2PageInfo(List<T> arrayList, Integer pageNum, Integer pageSize) {
        //实现list分页
        //PageHelper.startPage(pageNum, pageSize);
        int pageStart = pageNum == 1 ? 0 : (pageNum - 1) * pageSize;
        int pageEnd = arrayList.size() < pageSize * pageNum ? arrayList.size() : pageSize * pageNum;
        List<T> pageResult = new LinkedList<T>();
        if (arrayList.size() > pageStart) {
            pageResult = arrayList.subList(pageStart, pageEnd);
        }
        PageInfo<T> pageInfo = new PageInfo<T>(pageResult);
        //获取PageInfo其他参数
        pageInfo.setTotal(arrayList.size());
        int endRow = pageInfo.getEndRow() == 0 ? 0 : (pageNum - 1) * pageSize + pageInfo.getEndRow() + 1;
        pageInfo.setEndRow(endRow);
        boolean hasNextPage = arrayList.size() <= pageSize * pageNum ? false : true;
        pageInfo.setHasNextPage(hasNextPage);
        boolean hasPreviousPage = pageNum == 1 ? false : true;
        pageInfo.setHasPreviousPage(hasPreviousPage);
        pageInfo.setIsFirstPage(!hasPreviousPage);
        boolean isLastPage = (arrayList.size() > pageSize * (pageNum - 1) && arrayList.size() <= pageSize * pageNum) ? true : false;
        pageInfo.setIsLastPage(isLastPage);
        int pages = arrayList.size() % pageSize == 0 ? arrayList.size() / pageSize : (arrayList.size() / pageSize) + 1;
        pageInfo.setNavigateLastPage(pages);
        int[] navigatePageNums = new int[pages];
        for (int i = 1; i < pages; i++) {
            navigatePageNums[i - 1] = i;
        }
        pageInfo.setNavigatepageNums(navigatePageNums);
        int nextPage = pageNum < pages ? pageNum + 1 : 0;
        pageInfo.setNextPage(nextPage);
        pageInfo.setPageNum(pageNum);
        pageInfo.setPageSize(pageSize);
        pageInfo.setPages(pages);
        pageInfo.setPrePage(pageNum - 1);
        pageInfo.setSize(pageInfo.getList().size());
        int starRow = arrayList.size() < pageSize * pageNum ? 1 + pageSize * (pageNum - 1) : 0;
        pageInfo.setStartRow(starRow);
        return pageInfo;
    }
}
src/main/resources/mapper/BattAlarmMapper.xml
@@ -22,4 +22,13 @@
            order by batt_alarm.alm_start_time asc
        </where>
    </select>
    <select id="getAlm2" resultType="com.whyc.pojo.BattAlarm">
        SELECT distinct *
        from db_alarm.tb_battalarm_data
        <where>
            BattGroupId=#{battGroupId}
            and alm_signal_id in(13)
            and alm_severity=1
        </where>
    </select>
</mapper>
src/main/resources/mapper/BattInfMapper.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.whyc.mapper.BattInfMapper">
    <select id="searchGroupAssess" resultType="com.whyc.pojo.BattInf">
        select * from db_batt.batt_inf order by binf_id asc
    </select>
</mapper>
src/main/resources/mapper/BattTestInfMapper.xml
New file
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.whyc.mapper.BattTestInfMapper">
    <select id="searchDischargeTest" resultType="com.whyc.pojo.BattTestInf">
        select
        battgroupid,test_curr,max_monvol,min_monvol,test_cap,test_starttime,record_time,test_timelong,test_stoptype
        from db_batt_testdata.tb_batttestdata_inf
        <where>
            db_batt_testdata.tb_batttestdata_inf.data_available=1
            and test_starttype=3 and test_type=3
            and (test_stoptype in (3, 4, 6)
            or (test_stoptype=2 and test_timelong>=7200))
            <if test="battGroupId!=null">
                and battgroupid=#{battGroupId}
            </if>
            <if test="recordStartTime!=null and recordEndTime!=null">
                and record_time>=#{recordStartTime} and record_time&lt;=#{recordEndTime}
            </if>
        </where>
        ORDER BY tb_batttestdata_inf.BattGroupId asc, test_starttime desc
    </select>
    <select id="searchDischargeTest_WJ" resultType="com.whyc.pojo.BattTestInf">
        select
        battgroupid,test_curr,max_monvol,min_monvol,test_cap,test_starttime,record_time,test_timelong,test_stoptype
        from db_batt_testdata.tb_batttestdata_inf
        <where>
            db_batt_testdata.tb_batttestdata_inf.data_available=1
            and test_starttype=3 and test_type=3
            and (test_stoptype in (3, 4, 6)
            or (test_stoptype=2 and test_timelong>=7200))
            <if test="battGroupId!=null">
                and battgroupid=#{battGroupId}
            </if>
            <if test="recordStartTime!=null">
                and record_time&lt;#{recordStartTime}
            </if>
        </where>
        ORDER BY tb_batttestdata_inf.BattGroupId asc, test_starttime desc
    </select>
</mapper>