whyclxw
2025-05-28 e16302f9d475c7cc4dd18c5abf1a23cb5502e362
src/main/java/com/whyc/service/BatttestdataInfService.java
@@ -145,7 +145,15 @@
                } else if (fbsDeviceId / 100000 == 4815) {
                    //FBO4815设备放电停止原因
                    tinf.setTestStoptypeReason(BattTestData.getStopType_4815(tinf.getTestStoptype()));
                } else {
                }  else if (fbsDeviceId / 100000 == 6001) {
                    //6001设备放电停止原因
                    tinf.setTestStoptypeReason(BattTestData.getStopType_6001(tinf.getTestStoptype()));
                }else if ((fbsDeviceId / 10000 == 61853)||(fbsDeviceId / 100000 == 6186)||(fbsDeviceId / 100000 == 6286)) {
                    //61853设备放电停止原因
                    tinf.setTestStoptypeReason(BattTestData.getStopType_61853(tinf.getTestStoptype()));
                }else if((fbsDeviceId / 100000 == 6183)||(fbsDeviceId / 100000 == 6184)){
                    tinf.setTestStoptypeReason(BattTestData.getStopType_6183_4(tinf.getTestStoptype()));
                }else {
                    tinf.setTestStoptypeReason(BattTestData.getStopType(tinf.getTestStarttype(), tinf.getTestStoptype()));
                }
            });
@@ -199,12 +207,20 @@
            } else if (devId / 100000 == 4815) {
                //FBO4815设备放电停止原因
                tinf.setTestStoptypeReason(BattTestData.getStopType_4815(tinf.getTestStoptype()));
            } else if (devId / 100000 == 6001) {
                //6001设备放电停止原因
                tinf.setTestStoptypeReason(BattTestData.getStopType_6001(tinf.getTestStoptype()));
            } else if ((devId / 10000 == 61853)|| (devId / 100000 == 6186)|| (devId / 100000 == 6286)) {
                //61853设备放电停止原因
                tinf.setTestStoptypeReason(BattTestData.getStopType_61853(tinf.getTestStoptype()));
            } else if (devId / 100000 == 9149) {
                //FBO9149设备放电停止原因
                tinf.setTestStoptypeReason(BattTestData.getStopType_9149(tinf.getTestStoptype()));
            }else if (devId / 100000 == 9150) {
                //山东定制9150设备放电停止原因
                tinf.setTestStoptypeReason(BattTestData.getStopType_9150(tinf.getTestStoptype()));
            }else if((devId / 100000 == 6183)||(devId / 100000 == 6184)){
                tinf.setTestStoptypeReason(BattTestData.getStopType_6183_4(tinf.getTestStoptype()));
            }else {
                tinf.setTestStoptypeReason(BattTestData.getStopType(tinf.getTestStarttype(), tinf.getTestStoptype()));
            }
@@ -258,6 +274,12 @@
            } else if (devId / 100000 == 4815) {
                //FBO4815设备放电停止原因
                tinf.setTestStoptypeReason(BattTestData.getStopType_4815(tinf.getTestStoptype()));
            } else if (devId / 100000 == 6001) {
                //6001设备放电停止原因
                tinf.setTestStoptypeReason(BattTestData.getStopType_6001(tinf.getTestStoptype()));
            } else if ((devId / 10000 == 61853)|| (devId / 100000 == 6186)|| (devId / 100000 == 6286)) {
                //61853设备放电停止原因和6186
                tinf.setTestStoptypeReason(BattTestData.getStopType_61853(tinf.getTestStoptype()));
            } else if (devId / 100000 == 9149) {
                //FBO9149设备放电停止原因
                tinf.setTestStoptypeReason(BattTestData.getStopType_9149(tinf.getTestStoptype()));
@@ -288,9 +310,36 @@
    }
    //1.4电池组性能评估(根据电池组id查询所有的放电记录求出放电总次数,最高历史容量,最低历史容量,平均容量,最新测试容量)
    public Map<String, Object> searchDischargeTest(Integer battGroupId, float monCapStd, float monVolStd, Date recordStartTime, Date recordEndTime) {
    public Map<String, Object> searchDischargeTest(Integer battGroupId, float monCapStd, float monVolStd, Date recordStartTime, Date recordEndTime,int wj) {
        List<BatttestdataInf> list = new ArrayList<>();
        list=mapper.searchDischargeTest(battGroupId, recordStartTime, recordEndTime);
        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<BatttestdataInf> testList = new LinkedList<>();
        int sum = 0;//总测试次数
        float cap = 0f;//实际容量
@@ -299,29 +348,10 @@
        float minCap = 10000f;//最低容量
        float avgCap = 0f;//平均容量
        float lastCap = 0f;//最近测试容量
        Map<String, Object> map = new HashMap<>();
        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");
        }
        for (int i = 0; i < list.size(); i++) {
            BatttestdataInf 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);
           /* float testcap = binf.getTestCap();
            float maxMonvol = binf.getMaxMonvol();
            float minMonvol = binf.getMinMonvol();
            if (battGroupId == 1000145) {
                System.out.println(battGroupId + " " + monCapStd + " " + hourRate + " " + testcap + " " + maxMonvol + " " + minMonvol + " " + monVolStd + " " + BattCapFactory.CapType_Real + " ");
            }*/
            binf.setRealCap(cap);
            testList.add(binf);
            if (sum == 0) {
@@ -576,6 +606,13 @@
        return hrQuarter;
    }
    //山西晋源特定接口
    public int getHrQuarterZCJY() {
        int hrQuarter = mapper.getHrQuarterZCJY();
        return hrQuarter;
    }
    //蓄电池组优劣分析(用蓄电池组组后评估的统计)
    public Response getGroupAnalysis(int userId) {
        try {
@@ -603,8 +640,7 @@
            int goodSum = 0;
            //未正常
            int noHrDisNum = 0;
            //实际容量
            float cap = 0f;
            //去年的数据----------------
            //小于capAlarm
            int oldalarmNum = 0;
@@ -614,12 +650,15 @@
            int oldgoodSum = 0;
            //未正常
            int oldnoHrDisNum = 0;
            //实际容量去年
            float oldcap = 0f;
            //0.查询所有的电池组
            List<Battinf> binfList = binfMapper.getBinfList(userId);
            if (binfList != null && binfList.size() > 0) {
                for (Battinf binf : binfList) {
                    //实际容量
                    float cap = 0f;
                    //实际容量去年
                    float oldcap = 0f;
                    int battgroupId = binf.getBattGroupId();
                    float monCapStd = binf.getMonCapStd();
                    float monVolstd = binf.getMonVolStd();
@@ -761,7 +800,8 @@
            int year = Year.now().getValue();
            Date nowDateStart=ThreadLocalUtil.parse(year+"-01-01 00:00:00",1);
            Date nowDateEnd=ThreadLocalUtil.parse(year+"-12-31 23:59:59",1);
            Date oldDate=ThreadLocalUtil.parse((year-1)+"-01-01 00:00:00",1);
            Date oldDateStart=ThreadLocalUtil.parse((year-1)+"-01-01 00:00:00",1);
            Date oldDateEnd=ThreadLocalUtil.parse((year-1)+"-12-31 23:59:59",1);
            //小于capAlarm
            int alarmNum = 0;
            //小于capChange
@@ -770,8 +810,7 @@
            int goodSum = 0;
            //未正常
            int noHrDisNum = 0;
            //实际容量
            float cap = 0f;
            //去年的数据----------------
            //小于capAlarm
            int oldalarmNum = 0;
@@ -781,22 +820,27 @@
            int oldgoodSum = 0;
            //未正常
            int oldnoHrDisNum = 0;
            //实际容量去年
            float oldcap = 0f;
            //0.查询所有的电池组
            List<Battinf> binfList = binfMapper.getBinfList(userId);
            if (binfList != null && binfList.size() > 0) {
                for (Battinf binf : binfList) {
                    int battgroupId = binf.getBattGroupId();
                    float monCapStd = binf.getMonCapStd();
                    float monVolstd = binf.getMonVolStd();
                    //实际容量
                    float cap = 0f;
                    float oldcap = 0f;
                    //放电次数
                    int disNum = 0;
                    int olddisNum = 0;
                    int battgroupId = binf.getBattGroupId();
                    float monCapStd = binf.getMonCapStd();
                    float monVolstd = binf.getMonVolStd();
                    //1.查出符合条件的电池组(核容数据)按照时间倒叙排序的第一个(本年度)
                    BatttestdataInf inf = mapper.getGroupAnalysisQB_WJ(battgroupId,nowDateStart,nowDateEnd);
                    //1.查出符合条件的电池组(核容数据)按照时间倒叙排序的第一个(上一年度)
                    BatttestdataInf oldinf = mapper.getGroupAnalysisQBOld_WJ(battgroupId,oldDate);
                    BatttestdataInf oldinf = mapper.getGroupAnalysisQB_WJ(battgroupId,oldDateStart,oldDateEnd);
                    if (inf != null) {
                        disNum=1;
                        int hourRate = BattCapFactory.GetHourRate(monCapStd, inf.getTestCurr());
@@ -809,55 +853,214 @@
                    }
                    //查询电池告警内阻告警
                    List listALmRes = alarmDataMapper.getAlm2(battgroupId);
                        //未放电:本年度未放电,且无内阻告警<13,14>(预告警(重要),告警(紧急))-----本年度
                        if( (disNum==0) ){
                            noHrDisNum+=1;
                        }
                        //优秀:本年度已放电,且容量健康,无内阻告警(预告警(重要),告警(紧急))
                        if( (disNum>0)&&(cap > capAlarm * monCapStd)&&(listALmRes.size()<=0)){
                            goodSum+=1;
                        }
                        /*劣化:本年度未放电,内阻告警(预告警(重要),告警(紧急))
                         *容量小于劣化阈值,大于损坏阈值,内阻告警(预告警,告警)
                         *     容量小于劣化阈值,内阻正常
                         *     容量正常,内阻告警(预告警,告警)
                         */
                        if (((disNum==0)&&(listALmRes.size()>0))
                                ||((disNum>0)&&(cap <= capAlarm * monCapStd && cap >= capChange * monCapStd)&&(listALmRes.size()>0))
                                ||((disNum>0)&&(cap <= capAlarm * monCapStd)&&(listALmRes.size()<=0))
                                ||(disNum>0)&&(cap > capAlarm * monCapStd)&&(listALmRes.size()>0)){
                            alarmNum+=1;
                        }
                        //损坏:容量低,内阻告警
                        if((disNum>0)&&(cap< capChange * monCapStd)&&(listALmRes.size()>0)){
                            changeNum+=1;
                        }
                        //未放电:本年度未放电,且无内阻告警<13,14>(预告警(重要),告警(紧急))-----其他年度
                        if( (olddisNum==0) ){
                            oldnoHrDisNum+=1;
                        }
                        //优秀:本年度已放电,且容量健康,无内阻告警(预告警(重要),告警(紧急))
                        if( (olddisNum>0)&&(oldcap > capAlarm * monCapStd)&&(listALmRes.size()<=0)){
                            oldgoodSum+=1;
                        }
                        /*劣化:本年度未放电,内阻告警(预告警(重要),告警(紧急))
                         *容量小于劣化阈值,大于损坏阈值,内阻告警(预告警,告警)
                         *     容量小于劣化阈值,内阻正常
                         *     容量正常,内阻告警(预告警,告警)
                         */
                        if (((olddisNum==0)&&(listALmRes.size()>0))
                                ||((olddisNum>0)&&(oldcap <= capAlarm * monCapStd && oldcap >= capChange * monCapStd)&&(listALmRes.size()>0))
                                ||((olddisNum>0)&&(oldcap <= capAlarm * monCapStd)&&(listALmRes.size()<=0))
                                ||(olddisNum>0)&&(oldcap > capAlarm * monCapStd)&&(listALmRes.size()>0)){
                            oldalarmNum+=1;
                        }
                        //损坏:容量低,内阻告警
                        if((olddisNum>0)&&(oldcap< capChange * monCapStd)&&(listALmRes.size()>0)){
                            oldchangeNum+=1;
                        }
                    }
            }
            Map<String, Integer> numMap = new HashMap<>();
            numMap.put("alarmNum", alarmNum);
            numMap.put("changeNum", changeNum);
            //总电池组(分类)
            int groupNum = binfMapper.geGroupCount(userId);
            numMap.put("groupNum", groupNum);
            /*//已放电电池组数
            int inDischargeNum = binfMapper.searchInDischarge(userId);*/
            //蓄电池优良(已经放电数-告警数)
            numMap.put("goodSum", goodSum);
             /*本年度已核容放电电池组(testdate_inf中test_type=3,test_startType=3)
             int hrDisNum = testInfService.getHrQuarter(userId);
            * 修改为:领导层本年度已放数 仅需要统计放电正常停止的 正常停止的条件如下:
                stop_type:
                2-放电时间到终止并且放电时间超过2小时
                3-放电容量到终止
                4-单体电压下限到终止
                6-组端电压下限到终止*/
            //int hrDisNum = mapper.getHrQuarterZC(userId);
            numMap.put("noHrDisNum", noHrDisNum);
            //去年----------------------------统计
            Map<String, Integer> oldnumMap = new HashMap<>();
            oldnumMap.put("alarmNum", oldalarmNum);
            oldnumMap.put("changeNum", oldchangeNum);
            //总电池组(分类)
            oldnumMap.put("groupNum", groupNum);
            //蓄电池优良(已经放电数-告警数)
            oldnumMap.put("goodSum", oldgoodSum);
             /*本年度已核容放电电池组(testdate_inf中test_type=3,test_startType=3)
             int hrDisNum = testInfService.getHrQuarter(userId);
            * 修改为:领导层本年度已放数 仅需要统计放电正常停止的 正常停止的条件如下:
                stop_type:
                2-放电时间到终止并且放电时间超过2小时
                3-放电容量到终止
                4-单体电压下限到终止
                6-组端电压下限到终止*/
            oldnumMap.put("noHrDisNum", oldnoHrDisNum);
            return new Response().setIII(1, true, numMap,oldnumMap, "蓄电池组优劣分析");
        } catch (Exception e) {
            return new Response<>().set(1, false, "发生异常:" + e.getCause());
        }
    }
    //蓄电池组优劣分析(用蓄电池组组后评估的统计)
    public Response getGroupAnalysis3(int userId) {
        try {
            //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;
            }
            //获取当前年
            int year = Year.now().getValue();
            Date nowDateStart=ThreadLocalUtil.parse(year+"-01-01 00:00:00",1);
            Date nowDateEnd=ThreadLocalUtil.parse(year+"-12-31 23:59:59",1);
            Date oldDateStart=ThreadLocalUtil.parse((year-1)+"-01-01 00:00:00",1);
            Date oldDateEnd=ThreadLocalUtil.parse((year-1)+"-12-31 23:59:59",1);
            //小于capAlarm
            int alarmNum = 0;
            //小于capChange
            int changeNum = 0;
            //放电正常
            int goodSum = 0;
            //未正常
            int noHrDisNum = 0;
            //去年的数据----------------
            //小于capAlarm
            int oldalarmNum = 0;
            //小于capChange
            int oldchangeNum = 0;
            //放电正常
            int oldgoodSum = 0;
            //未正常
            int oldnoHrDisNum = 0;
            //0.查询所有的电池组
            List<Battinf> binfList = binfMapper.getBinfList(userId);
            if (binfList != null && binfList.size() > 0) {
                for (Battinf binf : binfList) {
                    //实际容量
                    float cap = 0f;
                    float oldcap = 0f;
                    //放电次数
                    int disNum = 0;
                    int olddisNum = 0;
                    int battgroupId = binf.getBattGroupId();
                    float monCapStd = binf.getMonCapStd();
                    float monVolstd = binf.getMonVolStd();
                    //1.查出符合条件的电池组(核容数据)按照时间倒叙排序的第一个(本年度)
                    BatttestdataInf inf = mapper.getGroupAnalysisQB_WJ(battgroupId,nowDateStart,nowDateEnd);
                    //1.查出符合条件的电池组(核容数据)按照时间倒叙排序的第一个(上一年度)
                    BatttestdataInf oldinf = mapper.getGroupAnalysisQB_WJ(battgroupId,oldDateStart,oldDateEnd);
                    if (inf != null) {
                        disNum=1;
                        int hourRate = BattCapFactory.GetHourRate(monCapStd, inf.getTestCurr());
                        cap = (float) BattCapFactory.GetMonomerCap(monCapStd, hourRate, inf.getTestCap(), inf.getMaxMonvol(), inf.getMinMonvol(), monVolstd, BattCapFactory.CapType_Real);
                    }
                    if(oldinf!=null){
                        olddisNum=1;
                        int oldhourRate = BattCapFactory.GetHourRate(monCapStd, oldinf.getTestCurr());
                        oldcap = (float) BattCapFactory.GetMonomerCap(monCapStd, oldhourRate, oldinf.getTestCap(), oldinf.getMaxMonvol(), oldinf.getMinMonvol(), monVolstd, BattCapFactory.CapType_Real);
                    }
                    //未放电:本年度未放电,且无内阻告警<13,14>(预告警(重要),告警(紧急))-----本年度
                    if( (disNum==0)&&(listALmRes.size()<=0) ){
                    if( (disNum==0) ){
                        noHrDisNum+=1;
                    }
                    //优秀:本年度已放电,且容量健康,无内阻告警(预告警(重要),告警(紧急))
                    if( (disNum>0)&&(cap > capAlarm * monCapStd)&&(listALmRes.size()<=0)){
                    //优秀:本年度已放电,且容量健康)
                    if( (disNum>0)&&(cap > capAlarm * monCapStd)){
                        goodSum+=1;
                    }
                    /*劣化:本年度未放电,内阻告警(预告警(重要),告警(紧急))
                     *容量小于劣化阈值,大于损坏阈值,内阻告警(预告警,告警)
                     *     容量小于劣化阈值,内阻正常
                     *     容量正常,内阻告警(预告警,告警)
                    /*劣化:
                     *容量小于劣化阈值,大于损坏阈值
                     */
                    if (((disNum==0)&&(listALmRes.size()>0))
                            ||((disNum>0)&&(cap <= capAlarm * monCapStd && cap >= capChange * monCapStd)&&(listALmRes.size()>0))
                            ||((disNum>0)&&(cap <= capAlarm * monCapStd)&&(listALmRes.size()<=0))
                            ||(disNum>0)&&(cap > capAlarm * monCapStd)&&(listALmRes.size()>0)){
                    if (((disNum>0)&&(cap <= capAlarm * monCapStd && cap >= capChange * monCapStd))){
                        alarmNum+=1;
                    }
                    //损坏:容量低,内阻告警
                    if((disNum!=0)&&(cap< capChange * monCapStd)&&(listALmRes.size()>0)){
                       changeNum+=1;
                    //损坏:容量低
                    if((disNum>0)&&(cap< capChange * monCapStd)){
                        changeNum+=1;
                    }
                    //未放电:本年度未放电,且无内阻告警<13,14>(预告警(重要),告警(紧急))-----其他年度
                    if( (olddisNum==0)&&(listALmRes.size()<=0) ){
                    if( (olddisNum==0) ){
                        oldnoHrDisNum+=1;
                    }
                    //优秀:本年度已放电,且容量健康,无内阻告警(预告警(重要),告警(紧急))
                    if( (olddisNum>0)&&(oldcap > capAlarm * monCapStd)&&(listALmRes.size()<=0)){
                    //优秀:本年度已放电,且容量健康)
                    if( (olddisNum>0)&&(oldcap > capAlarm * monCapStd)){
                        oldgoodSum+=1;
                    }
                    /*劣化:本年度未放电,内阻告警(预告警(重要),告警(紧急))
                     *容量小于劣化阈值,大于损坏阈值,内阻告警(预告警,告警)
                     *     容量小于劣化阈值,内阻正常
                     *     容量正常,内阻告警(预告警,告警)
                    /*劣化
                     *容量小于劣化阈值,大于损坏阈值
                     *
                     */
                    if (((olddisNum==0)&&(listALmRes.size()>0))
                            ||((olddisNum>0)&&(oldcap <= capAlarm * monCapStd && oldcap >= capChange * monCapStd)&&(listALmRes.size()>0))
                            ||((olddisNum>0)&&(oldcap <= capAlarm * monCapStd)&&(listALmRes.size()<=0))
                            ||(olddisNum>0)&&(oldcap > capAlarm * monCapStd)&&(listALmRes.size()>0)){
                    if (((olddisNum>0)&&(oldcap <= capAlarm * monCapStd && oldcap >= capChange * monCapStd))){
                        oldalarmNum+=1;
                    }
                    //损坏:容量低,内阻告警
                    if((olddisNum!=0)&&(oldcap< capChange * monCapStd)&&(listALmRes.size()>0)){
                    //损坏:容量低
                    if((olddisNum>0)&&(oldcap< capChange * monCapStd)){
                        oldchangeNum+=1;
                    }
                }
            }
            Map<String, Integer> numMap = new HashMap<>();
            numMap.put("alarmNum", alarmNum);
@@ -1008,6 +1211,12 @@
                        } else if (inf.getFBSDeviceId() / 100000 == 4815) {
                            //FBO4815设备放电停止原因
                            inf.setTestStoptypeReason(BattTestData.getStopType_4815(inf.getTestStoptype()));
                        } else if (inf.getFBSDeviceId() / 100000 == 6001) {
                            //6001设备放电停止原因
                            inf.setTestStoptypeReason(BattTestData.getStopType_6001(inf.getTestStoptype()));
                        } else if ((inf.getFBSDeviceId() / 10000 == 61853)||(inf.getFBSDeviceId() / 100000 == 6186)||(inf.getFBSDeviceId() / 100000 == 6286)) {
                            //61853设备放电停止原因
                            inf.setTestStoptypeReason(BattTestData.getStopType_61853(inf.getTestStoptype()));
                        } else if (inf.getFBSDeviceId() / 100000 == 9149) {
                            //FBO4815设备放电停止原因
                            inf.setTestStoptypeReason(BattTestData.getStopType_9149(inf.getTestStoptype()));
@@ -1145,4 +1354,17 @@
        }
        return new Response().setIII(1, true, sCountMap,sCapMap, "能效统计");
    }
    //1.获取当前最大的放电信息testRecordCount
    public BatttestdataInf getMaxRecord(int battGroupId) {
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("battGroupId",battGroupId);
        wrapper.last("limit 1");
        wrapper.orderByDesc("test_record_count");
        BatttestdataInf tinf=mapper.selectOne(wrapper);
        return tinf;
    }
    //3.将tinf补齐
    public void insertTinf(BatttestdataInf tinf) {
        mapper.insert(tinf);
    }
}