소스 검색

王耀栋--工作台模块代码,pdf合并单元格

wangyaodong 3 년 전
부모
커밋
0fe7690289

+ 1 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/project/ctrl/SimulationProjectCtrl.java

@@ -176,7 +176,7 @@ public class SimulationProjectCtrl {
      */
     @RequestMapping("exportProjectReportById")
     @ResponseBody
-    public void exportProjectReportById(@RequestBody SimulationManualProjectParam param) throws Exception {
+    public void exportProjectReportById(@RequestBody SimulationManualProjectParam param) {
         service.exportProjectReport(param);
     }
 

+ 271 - 55
simulation-resource-server/src/main/java/com/css/simulation/resource/project/impl/SimulationProjectServiceImpl.java

@@ -1908,7 +1908,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     }
 
     @Override
-    public void exportProjectReport(SimulationManualProjectParam param) throws Exception {
+    public void exportProjectReport(SimulationManualProjectParam param) {
         Document document = new Document(PageSize.A4);
         OutputStream os = null;
         try {
@@ -2040,7 +2040,6 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
             List<SubScListVo> subListScoreLi = vo.getSubListScoreLi();
 
-//            Map<String, Integer> m = new LinkedHashMap<>();
             List<String[]> list = new ArrayList<>();
             for(SubScListVo slv : subListScoreLi){
                 String[] slsi = new String[size];
@@ -2086,53 +2085,17 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
                 slsi[size-2] = slv.getLastScore();
                 slsi[size-1] = slv.getFirstScore();
 
-/*                //合并计数
-                if(m.get(slv.getSublistName1()) == null){
-                    m.put(slv.getSublistName1(), 1);
-                }else{
-                    m.put(slv.getSublistName1(), m.get(slv.getSublistName1())+1);
-                }*/
                 list.add(slsi);
 
 //                addDataList(pdfPTable2, font, slsi);
             }
 
 
+            Map map = getSubScListCombineCoord(subListScoreLi, size);
 
-
-/*            //添加数据(合并单元格)
-            int rowIndex=0;//行坐标
-            for(int i=0; i<list.size();i++){
-                String[] strings = list.get(i);
-                for(int j=0; j<strings.length; j++){
-                    //rowIndex,0 合并操作
-                    if(i == rowIndex && j ==0 ){
-                        PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j],defaultFont(font)));
-                        Integer integer = m.get(strings[j]);//合并行数
-                        pdfPCell.setRowspan(integer);
-                        rowIndex += integer;//定位到下一次合并行坐标之前
-                        pdfPTable2.addCell(pdfPCell);
-
-                    }
-                    //未到下一次合并行,不加第一列
-                    else if(i<rowIndex && j !=0){
-
-                        PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j],defaultFont(font)));
-                        pdfPTable2.addCell(pdfPCell);
-                    }
-
-
-                }
-
-            }*/
-
-            Map map = getSceneScListCombineCoord(subListScoreLi, size);
-
-            List<CombineCoordVo> combineCoordList = (List<CombineCoordVo>) map.get("combineCoordList");
+            Map<String, Integer> combineCoordList = (Map<String, Integer>) map.get("combineCoordList");
             List<String> skipCoordList = (List<String>) map.get("skipCoordList");
 
-            boolean b = false;
-            int num = 0;
             for(int i=0; i<list.size();i++){
                 String[] strings = list.get(i);
                 for(int j=0; j<strings.length; j++){
@@ -2144,16 +2107,11 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
                         continue;
                     }
                     PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j],defaultFont(font)));
+
                     //是否要合并
-                    for(CombineCoordVo v : combineCoordList){
-                        if(coord.equals(v.getCoord())){
-                            b = true;
-                            num = v.getRepetitionNum();
-                            break;
-                        }
-                    }
-                    if(b){
-                        pdfPCell.setRowspan(num);
+                    Integer n =  combineCoordList.get(coord);
+                    if(n != null){
+                        pdfPCell.setRowspan(n);
                     }
 
                     pdfPTable2.addCell(pdfPCell);
@@ -2187,6 +2145,8 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
             addTitleList(pdfPTable3, font, slt2);
             List<SceneScListVo> sceneScoreLi = vo.getSceneScoreLi();
 
+            List<String[]> list2 = new ArrayList<>();
+
             for(SceneScListVo sslv : sceneScoreLi){
                 String[] ssli = new String[size2];
                 for(int i=0;i<size2;i++){
@@ -2232,14 +2192,55 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
                 ssli[size2-2] = sslv.getTargetEvaluate();
                 ssli[size2-1] = sslv.getScoreExplain();
 
-                addDataList(pdfPTable3, font, ssli);
+                list2.add(ssli);
+
+//                addDataList(pdfPTable3, font, ssli);
             }
+
+            Map map2 = getSceneScListCombineCoord(sceneScoreLi, size2);
+
+            Map<String, Integer> combineCoordList2 = (Map<String, Integer>) map2.get("combineCoordList");
+            List<String> skipCoordList2 = (List<String>) map2.get("skipCoordList");
+
+            boolean b2 = false;
+            int num2 = 0;
+            for(int i=0; i<list2.size();i++){
+                String[] strings = list2.get(i);
+                for(int j=0; j<strings.length; j++){
+                    String coord = i+","+j;
+
+                    //是否要跳过
+                    boolean contains = skipCoordList2.contains(coord);
+                    if(contains){
+                        continue;
+                    }
+                    PdfPCell pdfPCell = new PdfPCell(new Paragraph(strings[j],defaultFont(font)));
+                    //是否要合并
+                    Integer n =  combineCoordList2.get(coord);
+                    if(n != null){
+                        pdfPCell.setRowspan(n);
+                    }
+
+                    pdfPTable3.addCell(pdfPCell);
+
+
+                }
+            }
+
             document.add(pdfPTable3);
 
 
-        } finally {
+        } catch (Exception e){
+            e.printStackTrace();
+
+        }
+        finally {
             document.close();
-            os.close();
+            try {
+                os.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
         }
 
     }
@@ -2248,10 +2249,11 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     /**
      * 获取所有要合并的下标、每个下标索要合并的行数、要跳过创建表格的下标
      */
-    private Map getSceneScListCombineCoord(List<SubScListVo> voList, int size){
+    private Map getSubScListCombineCoord(List<SubScListVo> voList, int size){
         int sublistNameSize = size-4;//指标最大级数
         HashMap<String, Object> resultMap = new HashMap<>();
         Map<String, CombineCoordVo> map = new HashMap<>();
+        Map<String, Integer>  combineCoordMap= new HashMap<>(); //要合并的格子下标
         List<String>  skipCoordList= new ArrayList<>(); //要跳过的格子下标
 
         for(int i=0; i<voList.size(); i++){
@@ -2261,6 +2263,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
                 String sublistName1 = vo.getSublistName1();
                 if(!isEmpty(sublistName1)){
                     setCoord(map, sublistName1,i+",0", skipCoordList);
+                    setCoord(map, sublistName1+"firstScore",i+","+(size-1), skipCoordList);
                 }
 
             }else if(sublistNameSize == 2){
@@ -2270,6 +2273,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
                 if(!isEmpty(sublistName1)){
                     setCoord(map, sublistName1,i+",0", skipCoordList);
+                    setCoord(map, sublistName1+"firstScore",i+","+(size-1), skipCoordList);
                 }
                 if(!isEmpty(sublistName2)){
                     setCoord(map, sublistName2,i+",1", skipCoordList);
@@ -2283,6 +2287,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
                 if(!isEmpty(sublistName1)){
                     setCoord(map, sublistName1,i+",0", skipCoordList);
+                    setCoord(map, sublistName1+"firstScore",i+","+(size-1), skipCoordList);
                 }
                 if(!isEmpty(sublistName2)){
                     setCoord(map, sublistName2,i+",1", skipCoordList);
@@ -2299,6 +2304,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
                 if(!isEmpty(sublistName1)){
                     setCoord(map, sublistName1,i+",0", skipCoordList);
+                    setCoord(map, sublistName1+"firstScore",i+","+(size-1), skipCoordList);
                 }
                 if(!isEmpty(sublistName2)){
                     setCoord(map, sublistName2,i+",1", skipCoordList);
@@ -2321,6 +2327,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
                 if(!isEmpty(sublistName1)){
                     setCoord(map, sublistName1,i+",0", skipCoordList);
+                    setCoord(map, sublistName1+"firstScore",i+","+(size-1), skipCoordList);
                 }
                 if(!isEmpty(sublistName2)){
                     setCoord(map, sublistName2,i+",1", skipCoordList);
@@ -2347,6 +2354,7 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
                 if(!isEmpty(sublistName1)){
                     setCoord(map, sublistName1,i+",0", skipCoordList);
+                    setCoord(map, sublistName1+"firstScore",i+","+(size-1), skipCoordList);
                 }
                 if(!isEmpty(sublistName2)){
                     setCoord(map, sublistName2,i+",1", skipCoordList);
@@ -2366,15 +2374,23 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
 
             }
 
+
+
         }
 
-        List<CombineCoordVo> combineCoordVoList = new ArrayList<>();
+        /*List<CombineCoordVo> combineCoordVoList = new ArrayList<>();
 
         for(String k : map.keySet()){
             combineCoordVoList.add(map.get(k));
+        }*/
+
+        for(String k : map.keySet()){
+            CombineCoordVo combineCoordVo = map.get(k);
+            combineCoordMap.put(combineCoordVo.getCoord(),combineCoordVo.getRepetitionNum());
         }
 
-        resultMap.put("combineCoordList", combineCoordVoList);
+
+        resultMap.put("combineCoordList", combineCoordMap);
         resultMap.put("skipCoordList", skipCoordList);
 
         return resultMap;
@@ -2382,6 +2398,206 @@ public class SimulationProjectServiceImpl implements SimulationProjectService {
     }
 
 
+    /**
+     * 获取所有要合并的下标、每个下标索要合并的行数、要跳过创建表格的下标
+     */
+    private Map getSceneScListCombineCoord(List<SceneScListVo> voList, int size){
+        int sublistNameSize = size-5;//指标最大级数
+        HashMap<String, Object> resultMap = new HashMap<>();
+        Map<String, CombineCoordVo> map = new HashMap<>();
+        Map<String, Integer>  combineCoordMap= new HashMap<>(); //要合并的格子下标
+        List<String>  skipCoordList= new ArrayList<>(); //要跳过的格子下标
+
+        for(int i=0; i<voList.size(); i++){
+            SceneScListVo vo = voList.get(i);
+            if(sublistNameSize == 1){
+                //一级
+                String sublistName1 = vo.getSublistName1();
+                if(!isEmpty(sublistName1)){
+                    setCoord(map, sublistName1,i+",0", skipCoordList);
+                    setCoord(map, sublistName1+"scoreExplain",i+","+(size-1), skipCoordList);
+                }
+
+            }else if(sublistNameSize == 2){
+                //二级
+                String sublistName1 = vo.getSublistName1();
+                String sublistName2 = vo.getSublistName2();
+
+                if(!isEmpty(sublistName1)){
+                    setCoord(map, sublistName1,i+",0", skipCoordList);
+                }
+                if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2,i+",1", skipCoordList);
+
+                }
+                if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else{
+                    setCoord(map, sublistName1+"scoreExplain",i+","+(size-1), skipCoordList);
+                }
+
+            }else if(sublistNameSize == 3){
+                //三级
+                String sublistName1 = vo.getSublistName1();
+                String sublistName2 = vo.getSublistName2();
+                String sublistName3 = vo.getSublistName3();
+
+                if(!isEmpty(sublistName1)){
+                    setCoord(map, sublistName1,i+",0", skipCoordList);
+                }
+                if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2,i+",1", skipCoordList);
+                }
+                if(!isEmpty(sublistName3)){
+                    setCoord(map, sublistName3,i+",2", skipCoordList);
+
+                }
+                if(!isEmpty(sublistName3)){
+                    setCoord(map, sublistName3+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else{
+                    setCoord(map, sublistName1+"scoreExplain",i+","+(size-1), skipCoordList);
+                }
+            }else if(sublistNameSize == 4){
+                //四级
+                String sublistName1 = vo.getSublistName1();
+                String sublistName2 = vo.getSublistName2();
+                String sublistName3 = vo.getSublistName3();
+                String sublistName4 = vo.getSublistName4();
+
+                if(!isEmpty(sublistName1)){
+                    setCoord(map, sublistName1,i+",0", skipCoordList);
+                }
+                if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2,i+",1", skipCoordList);
+                }
+                if(!isEmpty(sublistName3)){
+                    setCoord(map, sublistName3,i+",2", skipCoordList);
+                }
+                if(!isEmpty(sublistName4)){
+                    setCoord(map, sublistName4,i+",3", skipCoordList);
+                }
+
+                if(!isEmpty(sublistName4)){
+                    setCoord(map, sublistName4+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName3)){
+                    setCoord(map, sublistName3+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else{
+                    setCoord(map, sublistName1+"scoreExplain",i+","+(size-1), skipCoordList);
+                }
+
+
+            }else if(sublistNameSize == 5){
+                //五级
+                String sublistName1 = vo.getSublistName1();
+                String sublistName2 = vo.getSublistName2();
+                String sublistName3 = vo.getSublistName3();
+                String sublistName4 = vo.getSublistName4();
+                String sublistName5 = vo.getSublistName5();
+
+                if(!isEmpty(sublistName1)){
+                    setCoord(map, sublistName1,i+",0", skipCoordList);
+                }
+                if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2,i+",1", skipCoordList);
+                }
+                if(!isEmpty(sublistName3)){
+                    setCoord(map, sublistName3,i+",2", skipCoordList);
+                }
+                if(!isEmpty(sublistName4)){
+                    setCoord(map, sublistName4,i+",3", skipCoordList);
+                }
+                if(!isEmpty(sublistName5)){
+                    setCoord(map, sublistName5,i+",4", skipCoordList);
+                }
+
+                if(!isEmpty(sublistName5)){
+                    setCoord(map, sublistName5+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName4)){
+                    setCoord(map, sublistName4+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName3)){
+                    setCoord(map, sublistName3+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else{
+                    setCoord(map, sublistName1+"scoreExplain",i+","+(size-1), skipCoordList);
+                }
+
+
+            }else if(sublistNameSize == 6){
+                //六级
+                String sublistName1 = vo.getSublistName1();
+                String sublistName2 = vo.getSublistName2();
+                String sublistName3 = vo.getSublistName3();
+                String sublistName4 = vo.getSublistName4();
+                String sublistName5 = vo.getSublistName5();
+                String sublistName6 = vo.getSublistName6();
+
+                if(!isEmpty(sublistName1)){
+                    setCoord(map, sublistName1,i+",0", skipCoordList);
+                }
+                if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2,i+",1", skipCoordList);
+                }
+                if(!isEmpty(sublistName3)){
+                    setCoord(map, sublistName3,i+",2", skipCoordList);
+                }
+                if(!isEmpty(sublistName4)){
+                    setCoord(map, sublistName4,i+",3", skipCoordList);
+                }
+                if(!isEmpty(sublistName5)){
+                    setCoord(map, sublistName5,i+",4", skipCoordList);
+                }
+                if(!isEmpty(sublistName6)){
+                    setCoord(map, sublistName6,i+",5", skipCoordList);
+                    setCoord(map, sublistName1+"scoreExplain",i+","+(size-1), skipCoordList);
+                }
+
+                if(!isEmpty(sublistName6)){
+                    setCoord(map, sublistName6+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName5)){
+                    setCoord(map, sublistName5+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName4)){
+                    setCoord(map, sublistName4+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName3)){
+                    setCoord(map, sublistName3+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else if(!isEmpty(sublistName2)){
+                    setCoord(map, sublistName2+"scoreExplain",i+","+(size-1), skipCoordList);
+                }else{
+                    setCoord(map, sublistName1+"scoreExplain",i+","+(size-1), skipCoordList);
+                }
+
+            }
+
+
+
+        }
+
+        /*List<CombineCoordVo> combineCoordVoList = new ArrayList<>();
+
+        for(String k : map.keySet()){
+            combineCoordVoList.add(map.get(k));
+        }*/
+
+        for(String k : map.keySet()){
+            CombineCoordVo combineCoordVo = map.get(k);
+            combineCoordMap.put(combineCoordVo.getCoord(),combineCoordVo.getRepetitionNum());
+        }
+
+        resultMap.put("combineCoordList", combineCoordMap);
+        resultMap.put("skipCoordList", skipCoordList);
+
+        return resultMap;
+
+    }
+
+
+
+
+
     private void setCoord(Map<String, CombineCoordVo> map, String key, String coord, List<String>  skipCoordList){
         CombineCoordVo value = map.get(key);
         if(value != null){

+ 1 - 1
simulation-resource-server/src/main/java/com/css/simulation/resource/project/service/SimulationProjectService.java

@@ -46,7 +46,7 @@ public interface SimulationProjectService {
 
     ResponseBodyVO selectEvaluationLevel();
 
-    void exportProjectReport(SimulationManualProjectParam param) throws Exception;
+    void exportProjectReport(SimulationManualProjectParam param);
 
     //根据算法id获取最新的一条报告id
     String selectProjectReportIdByAlgorithmId(String algorithmId);