Sfoglia il codice sorgente

优化报表中上父格及左父格在数据迭代过程中的动态设置算法,以确保在复杂迭代模式下依然能正确设置单元格父格

master
jacky6024 6 anni fa
parent
commit
5824860e28
  1. 22
      ureport2-core/src/main/java/com/bstek/ureport/build/cell/down/CellDownDuplicateUnit.java
  2. 7
      ureport2-core/src/main/java/com/bstek/ureport/build/cell/down/CellDownDuplicator.java
  3. 22
      ureport2-core/src/main/java/com/bstek/ureport/build/cell/right/CellRightDuplicateUnit.java
  4. 7
      ureport2-core/src/main/java/com/bstek/ureport/build/cell/right/CellRightDuplicator.java

22
ureport2-core/src/main/java/com/bstek/ureport/build/cell/down/CellDownDuplicateUnit.java

@ -15,7 +15,9 @@
******************************************************************************/
package com.bstek.ureport.build.cell.down;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.bstek.ureport.build.Context;
import com.bstek.ureport.model.Cell;
@ -39,10 +41,13 @@ public class CellDownDuplicateUnit {
this.downDuplicate=new DownDuplicate(mainCell,rowSize,context);
}
public void duplicate(Cell cell,int index){
Map<Cell,Cell> newCellMap=new HashMap<Cell,Cell>();
newCellMap.put(mainCell, cell);
downDuplicate.setIndex(index);
for(CellDownDuplicator childDuplicator:downDuplocatorWrapper.getMainCellChildren()){
Cell newCell=childDuplicator.duplicateChildrenCell(downDuplicate, cell, mainCell,mainCell,cell,false);
processChildrenCells(newCell,childDuplicator.getCell(),cell,downDuplicate,childDuplicator.isNonChild());
Cell newCell=childDuplicator.duplicateChildrenCell(downDuplicate, cell, mainCell,false);
newCellMap.put(childDuplicator.getCell(), newCell);
processChildrenCells(newCell,childDuplicator.getCell(),newCellMap,downDuplicate,childDuplicator.isNonChild());
childDuplicator.setNonChild(false);
}
for(CellDownDuplicator cellDownDuplicator:downDuplocatorWrapper.getCellDuplicators()){
@ -54,20 +59,27 @@ public class CellDownDuplicateUnit {
cell.getColumn().getCells().add(cell);
context.addReportCell(cell);
downDuplicate.reset();
for(Cell newCell:newCellMap.values()){
Cell originTopCell=newCell.getTopParentCell();
if(originTopCell!=null && newCellMap.containsKey(originTopCell)){
newCell.setTopParentCell(newCellMap.get(originTopCell));
}
}
}
public void complete(){
downDuplicate.complete();
}
private void processChildrenCells(Cell cell,Cell originalCell,Cell newMainCell,DownDuplicate downDuplicate,boolean parentNonChild){
private void processChildrenCells(Cell cell,Cell originalCell,Map<Cell,Cell> newCellMap,DownDuplicate downDuplicate,boolean parentNonChild){
List<CellDownDuplicator> childCellDownDuplicators=downDuplocatorWrapper.fetchChildrenDuplicator(originalCell);
if(childCellDownDuplicators==null){
return;
}
for(CellDownDuplicator duplicator:childCellDownDuplicators){
Cell newCell=duplicator.duplicateChildrenCell(downDuplicate, cell, originalCell,mainCell,newMainCell,parentNonChild);
processChildrenCells(newCell,duplicator.getCell(),newMainCell,downDuplicate,duplicator.isNonChild());
Cell newCell=duplicator.duplicateChildrenCell(downDuplicate, cell, originalCell,parentNonChild);
newCellMap.put(duplicator.getCell(), newCell);
processChildrenCells(newCell,duplicator.getCell(),newCellMap,downDuplicate,duplicator.isNonChild());
duplicator.setNonChild(false);
}
}

7
ureport2-core/src/main/java/com/bstek/ureport/build/cell/down/CellDownDuplicator.java

@ -67,7 +67,7 @@ public class CellDownDuplicator {
return null;
}
public Cell duplicateChildrenCell(DownDuplicate downDuplicate,Cell leftParent,Cell originalCell,Cell mainCell,Cell newMainCell,boolean parentNonChild){
public Cell duplicateChildrenCell(DownDuplicate downDuplicate,Cell leftParent,Cell originalCell,boolean parentNonChild){
Cell newCell=cell.newCell();
Row newRow=downDuplicate.newRow(newCell.getRow(),cellRowNumber);
newRow.getCells().add(newCell);
@ -81,11 +81,6 @@ public class CellDownDuplicator {
}else{
nonChild=true;
}
if(newCell.getTopParentCell()==originalCell){
newCell.setTopParentCell(leftParent);
}else if(newCell.getTopParentCell()==mainCell){
newCell.setTopParentCell(newMainCell);
}
Cell leftParentCell=newCell.getLeftParentCell();
if(leftParentCell!=null){
leftParentCell.addRowChild(newCell);

22
ureport2-core/src/main/java/com/bstek/ureport/build/cell/right/CellRightDuplicateUnit.java

@ -15,7 +15,9 @@
******************************************************************************/
package com.bstek.ureport.build.cell.right;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.bstek.ureport.build.Context;
import com.bstek.ureport.model.Cell;
@ -39,10 +41,13 @@ public class CellRightDuplicateUnit {
this.rightDuplicate=new RightDuplicate(mainCell,colSize,context);
}
public void duplicate(Cell cell,int index){
Map<Cell,Cell> newCellMap=new HashMap<Cell,Cell>();
newCellMap.put(mainCell, cell);
rightDuplicate.setIndex(index);
for(CellRightDuplicator childDuplicator:rightDuplocatorWrapper.getMainCellChildren()){
Cell newCell=childDuplicator.duplicateChildrenCell(rightDuplicate,cell,mainCell,mainCell,cell,false);
processChildrenCells(newCell,childDuplicator.getCell(),cell,rightDuplicate,context,childDuplicator.isNonChild());
Cell newCell=childDuplicator.duplicateChildrenCell(rightDuplicate,cell,mainCell,false);
newCellMap.put(childDuplicator.getCell(), newCell);
processChildrenCells(newCell,childDuplicator.getCell(),newCellMap,rightDuplicate,childDuplicator.isNonChild());
childDuplicator.setNonChild(false);
}
for(CellRightDuplicator cellRightDuplicator:rightDuplocatorWrapper.getCellDuplicators()){
@ -54,20 +59,27 @@ public class CellRightDuplicateUnit {
cell.getRow().getCells().add(cell);
context.addReportCell(cell);
rightDuplicate.reset();
for(Cell newCell:newCellMap.values()){
Cell originLeftCell=newCell.getLeftParentCell();
if(originLeftCell!=null && newCellMap.containsKey(originLeftCell)){
newCell.setLeftParentCell(newCellMap.get(originLeftCell));
}
}
}
public void complete(){
rightDuplicate.complete();
}
private void processChildrenCells(Cell cell,Cell originalCell,Cell newMainCell,RightDuplicate rightDuplicate,Context context,boolean parentNonChild){
private void processChildrenCells(Cell cell,Cell originalCell,Map<Cell,Cell> newCellMap,RightDuplicate rightDuplicate,boolean parentNonChild){
List<CellRightDuplicator> childCellRightDuplicators=rightDuplocatorWrapper.fetchChildrenDuplicator(originalCell);
if(childCellRightDuplicators==null){
return;
}
for(CellRightDuplicator duplicator:childCellRightDuplicators){
Cell newCell=duplicator.duplicateChildrenCell(rightDuplicate,cell,originalCell,mainCell,newMainCell,parentNonChild);
processChildrenCells(newCell,duplicator.getCell(),newMainCell,rightDuplicate,context,duplicator.isNonChild());
Cell newCell=duplicator.duplicateChildrenCell(rightDuplicate,cell,originalCell,parentNonChild);
newCellMap.put(duplicator.getCell(), newCell);
processChildrenCells(newCell,duplicator.getCell(),newCellMap,rightDuplicate,duplicator.isNonChild());
duplicator.setNonChild(false);
}
}

7
ureport2-core/src/main/java/com/bstek/ureport/build/cell/right/CellRightDuplicator.java

@ -87,7 +87,7 @@ public class CellRightDuplicator {
context.addBlankCell(newBlankCell);
}
public Cell duplicateChildrenCell(RightDuplicate rightDuplicate,Cell topParent,Cell originalCell,Cell mainCell,Cell newMainCell,boolean parentNonChild){
public Cell duplicateChildrenCell(RightDuplicate rightDuplicate,Cell topParent,Cell originalCell,boolean parentNonChild){
Cell newCell=cell.newCell();
Column newCol=rightDuplicate.newColumn(newCell.getColumn(),cellColNumber);
newCol.getCells().add(newCell);
@ -101,11 +101,6 @@ public class CellRightDuplicator {
}else{
nonChild=true;
}
if(newCell.getLeftParentCell()==originalCell){
newCell.setLeftParentCell(topParent);
}else if(newCell.getLeftParentCell()==mainCell){
newCell.setLeftParentCell(newMainCell);
}
Cell leftParentCell=newCell.getLeftParentCell();
if(leftParentCell!=null){
leftParentCell.addRowChild(newCell);

Caricamento…
Annulla
Salva