yangyj 1 년 전
부모
커밋
04a1f3155f

+ 2 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterType.java

@@ -9,6 +9,7 @@ public enum MeterType {
     START(2,"动员预付款报表"),
     /***/
     INTERIM_JL(3,"监理计量报表"),
+    MATERIAL_JL(4,"材料预付款报表"),
     START_JL(5,"监理动员预付款报表");
     private final int index;
     private final String name;
@@ -27,7 +28,7 @@ public enum MeterType {
         if(contractType==2&&(index==0||index==2)){
             index=index+3;
         }
-        if (index >= 0 && index < values.length) {
+        if (index >= 0 && index<=5) {
             return values[index];
         } else {
            return values[0];

+ 12 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -1758,20 +1758,28 @@ public class ExecutorMeter extends FormulaExecutor {
         public boolean ready() {
              return isZJ&&current.size()>0;
         }
-        private Function<MeterApply,String> chapterNumberFc= meterApply -> {
+        private BiFunction<MeterApply,Map<Long,List<Payment>>,String> chapterNumberFc= (meterApply,pGroup) -> {
+            List<Payment> paymentList = pGroup.get(meterApply.getId());
+            if(paymentList!=null&&!paymentList.isEmpty()){
+                Payment pm =paymentList.get(0);
+                String pnb=  pm.getNumber().split("-")[0];
+                if(BaseUtils.isNumber(pnb)){
+                    return 100 * (Integer.parseInt(pnb) / 100) +"章";
+                }
+            }
           String[]  arr= meterApply.getMeterNumber().split("-");
           return BaseUtils.handleObj2Integer(arr[arr.length-1])*100+"章";
         };
         private Function<NodeTable,String> chapterNumberTableFc= nodeTable -> RegexUtil.findResult("\\d+章",nodeTable.getNodeName());
-
+        private  Map<Long,List<Payment>> paymentGroup=new HashMap<>();
         @Override
         public void parse() {
             builderFormDatas(InterimMeter.class);
             List<MeterApply> meterApplyList=meterApplyFc.apply(tec.getPeriodId());
-            LinkedHashMap<String,List<MeterApply>> meterApplyGroup = meterApplyList.stream().collect(Collectors.groupingBy(chapterNumberFc,LinkedHashMap::new,Collectors.toList()));
+            paymentGroup = current.stream().collect(Collectors.groupingBy(Payment::getMiddleMeterId));
+            LinkedHashMap<String,List<MeterApply>> meterApplyGroup = meterApplyList.stream().collect(Collectors.groupingBy(e->chapterNumberFc.apply(e,paymentGroup),LinkedHashMap::new,Collectors.toList()));
             /*删除没有计量的章节,返回需要显示的章节*/
             LinkedHashMap<String,NodeTable> table2E16Map= removeNodeTable(meterApplyGroup);
-            Map<Long,List<Payment>> paymentGroup = current.stream().collect(Collectors.groupingBy(Payment::getMiddleMeterId));
             /*支付号,项目名称,单位,申报数量*/
             Function<Function<InterimMeter,List<String>>,Function<List<InterimMeter>, List<Object>>> interimMeters2oListFc=i2s->dl->dl.stream().flatMap(e->i2s.apply(e).stream()).collect(Collectors.toList());
             fieldDataFcMap.put(InterimMeter.TBN+":key_10",interimMeters2oListFc.apply(InterimMeter::getFormNumberList));

+ 41 - 10
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -29,6 +29,7 @@ import lombok.Data;
 import net.logstash.logback.encoder.org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.util.IOUtils;
@@ -3295,7 +3296,16 @@ public class TaskController extends BladeController {
                 /*准备*/
                 reportResults.forEach(rs -> {
                     if(rs.getInitTableName().equals("m_20240325154016_1772166597482381312")){
-                        rs.setDeleteRow("13,15");
+                        List<Map.Entry<String,Object>> entries=rs.getData().get(0).entrySet().stream().filter(e->Integer.parseInt(e.getKey().split("_")[1])==1).sorted(Comparator.comparingInt(e->Integer.parseInt(e.getKey().split("_")[0]))).collect(Collectors.toList());
+                        List<String> list =entries.stream().map(e->e.getValue().toString()).collect(Collectors.toList());
+                       int index= list.indexOf("小计");
+                       if(index>0) {
+                           Map.Entry<String,Object> head=entries.get(index-1);
+                           Map.Entry<String,Object> tail=entries.get(index);
+                           String start=(Integer.parseInt(head.getKey().split("_")[0])+1-1)+"";
+                           String end=(Integer.parseInt(tail.getKey().split("_")[0])-1-1)+"";
+                           rs.setDeleteRow(start+","+end);
+                       }
                     }
                     /*初始化路径*/
                     rs.pathInit(file_path,report.getContractId());
@@ -3390,7 +3400,7 @@ public class TaskController extends BladeController {
                                 if(deleteRow!=null&&!deleteRow.isEmpty()){
                                    LinkedList<Integer> rowIds=  Arrays.stream(deleteRow.split("\\D+")).map(Integer::parseInt).collect(Collectors.toCollection(LinkedList::new));
                                    if(rowIds.size()>=2) {
-                                      // deleteRows2(sheet, rowIds.getFirst(), rowIds.getLast());
+                                       deleteRows2(sheet, rowIds.getFirst(), rowIds.getLast());
                                    }
                                 }
                                 //去掉表格虚线
@@ -3492,18 +3502,39 @@ public class TaskController extends BladeController {
     }
     public  void deleteRows2(Sheet sheet, int startRow, int endRow) {
         int lastRowNum = sheet.getLastRowNum();
-        deleteMergedRegions(sheet, Objects.requireNonNull(getMergedRegions(sheet, coords2Int("A" + (startRow+1) + "~" + "R" + (endRow+1)))));
-        for (int i = endRow; i >= startRow; i--) {
-            deleteMergedRegions(sheet,i);
-            Row row = sheet.getRow(i);
-            if (row != null) {
-                sheet.removeRow(row);
+       /* deleteMergedRegions(sheet, Objects.requireNonNull(getMergedRegions(sheet, coords2Int("A" + (startRow+1) + "~" + "R" + (endRow+1)))));*/
+       CellStyle cellStyle=  sheet.getWorkbook().createCellStyle();
+       cellStyle.setBorderBottom(BorderStyle.NONE);
+        cellStyle.setBorderTop(BorderStyle.NONE);
+        cellStyle.setBorderLeft(BorderStyle.NONE);
+        cellStyle.setBorderRight(BorderStyle.NONE);
+        for(int i=startRow;i<=endRow;i++){
+            for(Cell cell:sheet.getRow(i)){
+                cell.setCellStyle(cellStyle);
             }
+            sheet.getRow(i).setZeroHeight(true);
         }
         /*deleteMergedRegions(sheet, Objects.requireNonNull(getMergedRegions(sheet, coords2Int("A" + (startRow+1) + "~" + "R" + (endRow+1)))));*/
-        sheet.shiftRows(endRow + 1, lastRowNum, -3);
-        System.out.println();
+        //sheet.shiftRows(endRow + 1, lastRowNum, -3);
     }
+
+    public static void mainT(String[] args) throws IOException, InvalidFormatException {
+        byte[] excelByte = CommonUtil.InputStreamToBytes(new FileInputStream("C:\\upload\\pdf\\a.xlsx"));
+        Workbook workbook = WorkbookFactory.create(new ByteArrayInputStream(excelByte));
+        //获取工作表
+        Sheet sheet = workbook.getSheetAt(0);
+        int lastRowNum = sheet.getLastRowNum();
+        int startRow=13,endRow=15;
+        /*deleteMergedRegions(sheet, Objects.requireNonNull(getMergedRegions(sheet, coords2Int("A" + (startRow+1) + "~" + "R" + (endRow+1)))));*/
+        sheet.getMergedRegions();
+        for(int i=startRow;i<=endRow;i++){
+            sheet.getRow(i).setZeroHeight(true);
+        }
+        /*sheet.shiftRows(endRow+1, endRow+1, -1);*/
+
+        workbook.write(new FileOutputStream("C:\\upload\\pdf\\a2.xlsx"));
+    }
+
     public static void deleteMergedRegions(Sheet sheet, List<CellRangeAddress> regionsToDelete) {
         for (CellRangeAddress region : regionsToDelete) {
             // 获取合并区域的数量