From b46f7fa6d77852ae9e28a062da234a2ddf9405fb Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期一, 31 三月 2025 16:09:51 +0800
Subject: [PATCH] 2025-3-22定制修改导出去掉容量和连接条

---
 src/main/java/com/whyc/dto/XmlFileOpreate.java |  247 +++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 206 insertions(+), 41 deletions(-)

diff --git a/src/main/java/com/whyc/dto/XmlFileOpreate.java b/src/main/java/com/whyc/dto/XmlFileOpreate.java
index d180d3b..1911faf 100644
--- a/src/main/java/com/whyc/dto/XmlFileOpreate.java
+++ b/src/main/java/com/whyc/dto/XmlFileOpreate.java
@@ -2,6 +2,7 @@
 
 
 import com.whyc.pojo.*;
+import com.whyc.util.MathUtil;
 import org.dom4j.Document;
 import org.dom4j.DocumentException;
 import org.dom4j.Element;
@@ -64,7 +65,12 @@
             }
 
             file_node=node.element("batt_res");
-            fparam.setBattRes(Float.parseFloat(file_node.getTextTrim()));
+            if(file_node!=null){
+                fparam.setBattRes(Float.parseFloat(file_node.getTextTrim()));
+            }else{
+                fparam.setBattRes(0f);
+            }
+
             file_node=node.element("batt_res_good");
             if(file_node!=null){
                 fparam.setBattResGood(Float.parseFloat(file_node.getTextTrim()));
@@ -100,27 +106,100 @@
             if(file_node!=null){
                 fparam.setConnResBad(Float.parseFloat(file_node.getTextTrim()));
             }
+
+            float battCap=fparam.getBattCap();//鏍囩О瀹归噺
+            float battRes=fparam.getBattRes();//鏍囩О鍐呴樆
             //-----鏍规嵁groupNum鐨勫�艰鍙栨祴璇曟暟鎹�---------------------------//
             Iterator nodes = rootnode.elementIterator("node_batt_num");
             BattgroupInfo battInfo=new BattgroupInfo();
             List<BattgroupData> battDataList=new ArrayList();
-
-            while (nodes.hasNext()){
-                node= (Element) nodes.next();
-                BattgroupData battData=new BattgroupData();
-                battData.setMonNum(Integer.parseInt(node.attributeValue("batt_num")));
-                file_node=node.element("bv_1");
-                battData.setBv(file_node.getTextTrim());
-                file_node=node.element("br_1");
-                battData.setBr(file_node.getTextTrim());
-                file_node=node.element("bs_1");
-                battData.setBs(file_node.getTextTrim());
-                file_node=node.element("cr_1");
-                battData.setCr(file_node.getTextTrim());
-                battDataList.add(battData);
+            //List<Float> list=new ArrayList();//瀛樻斁鎵�鏈夌殑鍐呴樆鏁版嵁
+            List<Float> avglist=new ArrayList();//瀛樻斁鏈夋晥鐨勫唴闃绘暟鎹敤浜庤绠楀亸宸巼锛堝綋鏍囩О鍐呴樆涓�0鏃讹紝鐢ㄥ钩鍐呴樆锛�
+            int avgNum=0;
+            if(nodes!=null){
+                while (nodes.hasNext()){
+                    node= (Element) nodes.next();
+                    BattgroupData battData=new BattgroupData();
+                    battData.setMonNum(Integer.parseInt(node.attributeValue("batt_num")));
+                    file_node=node.element("bv_1");
+                    battData.setBv(file_node.getTextTrim());
+                    file_node=node.element("br_1");
+                    String br=file_node.getTextTrim();
+                    battData.setBr(br);
+                    /*float esCap=0f;
+                    if(battRes==0){
+                        esCap=1;
+                    }else{
+                        esCap=battRes/Float.valueOf(br);
+                    }
+                    battData.setEstimatedCap(esCap*battCap);*/
+                    /* float preCapPercent=MathUtil.getPreCapTest(Float.valueOf(br),battRes);
+                    //瀹归噺鐧惧垎姣斾慨鏀�
+                    battData.setPreCapPercent(preCapPercent);
+                    //棰勪及瀹归噺
+                    battData.setEstimatedCap(preCapPercent*battCap);
+                   //鍐呴樆鍋忓樊鐜囪缃粯璁ゅ�间负0
+                    if(battRes==0){
+                        battData.setResDevRate(Float.POSITIVE_INFINITY);
+                    }else{
+                        float resDevRate=(Float.valueOf(br)-battRes)/battRes;
+                        battData.setResDevRate(resDevRate);
+                    }*/
+                    file_node=node.element("bs_1");
+                    battData.setBs(file_node.getTextTrim());
+                    file_node=node.element("cr_1");
+                    battData.setCr(file_node.getTextTrim());
+                    battDataList.add(battData);
+                    //list.add(Float.valueOf(battData.getBr()));
+                    //鑾峰彇鏈夋晥鍐呴樆
+                    if(Float.parseFloat(battData.getBv())>0&&Float.parseFloat(battData.getBr())>0){
+                        avgNum++;
+                        avglist.add(Float.parseFloat(battData.getBr()));
+                    }
+                }
             }
             battInfo.setBattDataList(battDataList);
+            battInfo.setTestTime(ActionUtil.sdfwithALL.parse(testTime));
             fileInfo.getBattInfoList().add(battInfo);
+            //褰撴爣绉板唴闃讳负0鏃讹紝璁$畻鏈�浣庝笁鍒嗕箣涓�鍗曚綋鏁板唴闃绘暟鎹殑骞冲潎鍊�
+            if(fparam.getBattRes()==0){
+                /*if(list!=null&&list.size()>0){
+                    int battNum= (int) Math.ceil(list.size()/3);
+                    float resSum=0f;
+                    Collections.sort(list);
+                    for(int i=0;i<battNum;i++){
+                        resSum=resSum+list.get(i);
+                    }
+                    String avgRes=String.format("%.2f",resSum/battNum);
+                    fparam.setBattRes(Float.valueOf(avgRes));
+                }*/
+                //璁$畻骞冲眬鍐呴樆
+                if(avglist!=null&&avglist.size()>0){
+                    Collections.sort(avglist);
+                    System.err.println(avglist.toString());
+                    float sunBr=0f;
+                    avgNum= (int) Math.ceil(0.01*avgNum*(100-fparam.getSamplePercent()));
+                    int effNum=0;
+                    for (int i=0;i<avglist.size();i++) {
+                        if(i!=0&&i<=avgNum){
+                            sunBr+=avglist.get(i);
+                            effNum++;
+                        }
+                    }
+                    String avgRes=String.format("%.2f",sunBr/effNum);
+                    fparam.setBattRes(Float.valueOf(avgRes));
+                }
+            }
+            float effRes=fparam.getBattRes();  //鏈夋晥鐨勬爣绉板唴闃�
+            for (BattgroupData battData:battInfo.getBattDataList()) {
+                float resDevRate=(Float.valueOf(battData.getBr())-effRes)/effRes;
+                battData.setResDevRate(resDevRate);
+                float preCapPercent=MathUtil.getPreCapTest(Float.valueOf(battData.getBr()),effRes);
+                //瀹归噺鐧惧垎姣斾慨鏀�
+                battData.setPreCapPercent(preCapPercent);
+                //棰勪及瀹归噺
+                battData.setEstimatedCap(preCapPercent*battCap);
+            }
             fileInfo.setFileParam(fparam);
             fiso.close();
         } catch (NullPointerException | NumberFormatException | DocumentException | ParseException | FileNotFoundException e) {
@@ -196,7 +275,12 @@
             file_node=node.element("batt_vol");
             fparam.setBattVol(Float.parseFloat(file_node.getTextTrim()));
             file_node=node.element("batt_res");
-            fparam.setBattRes(Float.parseFloat(file_node.getTextTrim()));
+            if(file_node!=null){
+                fparam.setBattRes(Float.parseFloat(file_node.getTextTrim()));
+            }else{
+                fparam.setBattRes(0f);
+            }
+
             file_node=node.element("gropNum");
             fparam.setGroupNum(Integer.parseInt(file_node.getTextTrim()));
 
@@ -224,30 +308,107 @@
 
             //-----鏍规嵁groupNum鐨勫�艰鍙栨祴璇曟暟鎹�---------------------------//
             Iterator nodes = rootnode.elementIterator("node_group_num");
-            while (nodes.hasNext()){
-                node= (Element) nodes.next();
-                Iterator iterator1 = node.elementIterator();
-                BattgroupInfo battInfo=new BattgroupInfo();
-                List<BattgroupData> battDataList=new ArrayList();
-                while (iterator1.hasNext()){
-                    file_node= (Element) iterator1.next();
-                    BattgroupData battData=new BattgroupData();
-                    battData.setMonNum(Integer.parseInt(file_node.attributeValue("batt_num")));
-                    batt_node=file_node.element("bv_1");
-                    battData.setBv(batt_node.getTextTrim());
-                    batt_node=file_node.element("br_1");
-                    battData.setBr(batt_node.getTextTrim());
-                    batt_node=file_node.element("bs_1");
-                    battData.setBs(batt_node.getTextTrim());
-                    batt_node=file_node.element("cr_1");
-                    battData.setCr(batt_node.getTextTrim());
-                    batt_node=file_node.element("er_1");
-                    battData.setEr(Integer.parseInt(batt_node.getTextTrim()));
-                    battDataList.add(battData);
+
+            float battCap=fparam.getBattCap();//鏍囩О瀹归噺
+            float battRes=fparam.getBattRes();//鏍囩О鍐呴樆
+
+            if(nodes!=null){
+                while (nodes.hasNext()){
+                    node= (Element) nodes.next();
+                    Iterator iterator1 = node.elementIterator();
+                    BattgroupInfo battInfo=new BattgroupInfo();
+                    List<BattgroupData> battDataList=new ArrayList();
+                    //List<Float> list=new ArrayList();//瀛樻斁鎵�鏈夌殑鍐呴樆鏁版嵁
+                    List<Float> avglist=new ArrayList();//瀛樻斁鏈夋晥鐨勫唴闃绘暟鎹敤浜庤绠楀亸宸巼锛堝綋鏍囩О鍐呴樆涓�0鏃讹紝鐢ㄥ钩鍐呴樆锛�
+                    int avgNum=0;
+                    while (iterator1.hasNext()){
+                        file_node= (Element) iterator1.next();
+                        BattgroupData battData=new BattgroupData();
+                        battData.setMonNum(Integer.parseInt(file_node.attributeValue("batt_num")));
+                        batt_node=file_node.element("bv_1");
+                        battData.setBv(batt_node.getTextTrim());
+                        batt_node=file_node.element("br_1");
+                        String br=batt_node.getTextTrim();
+                        battData.setBr(br);
+                       /* float esCap=0f;
+                        if(battRes==0){
+                            esCap=1;
+                        }else{
+                            esCap=battRes/Float.valueOf(br);
+                        }
+                        battData.setEstimatedCap(esCap*battCap);*/
+                        /*float preCapPercent=MathUtil.getPreCapTest(Float.valueOf(br),battRes);
+                        //瀹归噺鐧惧垎姣斾慨鏀�
+                        battData.setPreCapPercent(preCapPercent);
+                        //棰勪及瀹归噺
+                        battData.setEstimatedCap(preCapPercent*battCap);
+                        //鍐呴樆鍋忓樊鐜�
+                        if(battRes==0){
+                            battData.setResDevRate(Float.POSITIVE_INFINITY);
+                        }else{
+                            float resDevRate=(Float.valueOf(br)-battRes)/battRes;
+                            battData.setResDevRate(resDevRate);
+                        }*/
+
+                        batt_node=file_node.element("bs_1");
+                        battData.setBs(batt_node.getTextTrim());
+                        batt_node=file_node.element("cr_1");
+                        battData.setCr(batt_node.getTextTrim());
+                        batt_node=file_node.element("er_1");
+                        battData.setEr(Integer.parseInt(batt_node.getTextTrim()));
+                        battDataList.add(battData);
+                        //list.add(Float.valueOf(battData.getBr()));
+                        //鑾峰彇鏈夋晥鍐呴樆
+                        if(Float.parseFloat(battData.getBv())>0&&Float.parseFloat(battData.getBr())>0){
+                            avgNum++;
+                            avglist.add(Float.parseFloat(battData.getBr()));
+                        }
+                    }
+                    battInfo.setTestTime(ActionUtil.sdfwithALL.parse(testTime));
+                    battInfo.setBattDataList(battDataList);
+                    fileInfo.getBattInfoList().add(battInfo);
+                    //褰撴爣绉板唴闃讳负0鏃讹紝璁$畻鏈�浣庝笁鍒嗕箣涓�鍗曚綋鏁板唴闃绘暟鎹殑骞冲潎鍊�
+                    /*if(fparam.getBattRes()==0){
+                        if(list!=null&&list.size()>0){
+                            int battNum= (int) Math.ceil(list.size()/3);
+                            float resSum=0f;
+                            Collections.sort(list);
+                            for(int i=0;i<battNum;i++){
+                                resSum=resSum+list.get(i);
+                            }
+                            String avgRes=String.format("%.2f",resSum/battNum);
+                            fparam.setBattRes(Float.valueOf(avgRes));
+                        }
+                    }*/
+                    if(fparam.getBattRes()==0){
+                        //璁$畻骞冲眬鍐呴樆
+                        if(avglist!=null&&avglist.size()>0){
+                            Collections.sort(avglist);
+                            System.err.println(avglist.toString());
+                            float sunBr=0f;
+                            avgNum= (int) Math.ceil(0.01*avgNum*(100-fparam.getSamplePercent()));
+                            int effNum=0;
+                            for (int i=0;i<avglist.size();i++) {
+                                if(i!=0&&i<=avgNum){
+                                    sunBr+=avglist.get(i);
+                                    effNum++;
+                                }
+                            }
+                            String avgRes=String.format("%.2f",sunBr/effNum);
+                            fparam.setBattRes(Float.valueOf(avgRes));
+                        }
+                    }
+                    float effRes=fparam.getBattRes();  //鏈夋晥鐨勬爣绉板唴闃�
+                    for (BattgroupData battData:battInfo.getBattDataList()) {
+                        float resDevRate=(Float.valueOf(battData.getBr())-effRes)/effRes;
+                        battData.setResDevRate(resDevRate);
+                        float preCapPercent=MathUtil.getPreCapTest(Float.valueOf(battData.getBr()),effRes);
+                        //瀹归噺鐧惧垎姣斾慨鏀�
+                        battData.setPreCapPercent(preCapPercent);
+                        //棰勪及瀹归噺
+                        battData.setEstimatedCap(preCapPercent*battCap);
+                    }
                 }
-                battInfo.setTestTime(ActionUtil.sdfwithALL.parse(testTime));
-                battInfo.setBattDataList(battDataList);
-                fileInfo.getBattInfoList().add(battInfo);
             }
             fileInfo.setFileParam(fparam);
             fiso.close();
@@ -262,6 +423,8 @@
         }
         return  fileInfo;
     }
+
+
     //瑙f瀽xml鏂囦欢
     public static FileInfo readXml(String xmlFilePath)
     {
@@ -280,7 +443,7 @@
                 switch (version){
                     case "V2.0": fileInfo=readFBR_6000NT_bj(xmlFilePath);break;
                     case "V2.7": fileInfo=readFBR_6000NT_jc(xmlFilePath);break;
-                    default:break;
+                    default:fileInfo=readFBR_6000NT_bj(xmlFilePath);break;
                 }
             }
             fiso.close();
@@ -305,7 +468,9 @@
                 //System.out.println(mapKey+":"+mapValue);
                 //寰楀埌绗竴涓猰apKey鑺傜偣
                 Node node=document.selectSingleNode("//"+mapKey);
-                node.setText(mapValue);
+                if(node!=null){
+                    node.setText(mapValue);
+                }
             }
             OutputFormat format = OutputFormat.createPrettyPrint();
             format.setEncoding("UTF-8");//榛樿鐨勭紪鐮佸氨鏄疷TF-8

--
Gitblit v1.9.1