yangyj 1 سال پیش
والد
کامیت
16e2044aa2

+ 20 - 4
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/EvaSummary.java

@@ -21,6 +21,7 @@ import java.util.stream.IntStream;
 @Data
 public abstract class EvaSummary<T> {
     protected  Integer  rowSize=20;
+    /**动态行元素*/
     protected  final List<FormData> fds = new ArrayList<>();
     protected  final List<T> datas = new ArrayList<>();
     protected  Map<String, BiFunction<List<T>,Integer,List<Object>>> fm = new HashMap<>();
@@ -51,20 +52,25 @@ public abstract class EvaSummary<T> {
         if(wtcList.size()>0) {
             WbsTreeContract w = wtcList.get(0);
             this.sql="update "+w.getInitTableName()+" set "+this.fds.stream().map(e->e.getKey()+"=?").collect(Collectors.joining(","))+" where p_key_id =?";
-            Map<Integer, List<T>> pages = IntStream.range(0, datas.size()).boxed()
+            LinkedHashMap<Integer, List<T>> pages = IntStream.range(0, datas.size()).boxed()
                     .collect(Collectors.groupingBy(
                             i -> i / rowSize,
                             LinkedHashMap::new,
                             Collectors.mapping(datas::get, Collectors.toList())
                     ));
 
+            int index=1;
             for (Map.Entry<Integer, List<T>> entry : pages.entrySet()) {
+                /*每一页就是一条插入记录*/
                 int k = entry.getKey();
                 if (wtcList.size() <= k) {
                     break;
                 }
                 List<T> v = entry.getValue();
-                List<Object> l=this.fds.stream().map(fd->putEd(k,v,fd)).collect(Collectors.toList());
+                /*是否是最后一页,fb02最后一页汇总用到*/
+                boolean isLast=index==pages.size();
+                index++;
+                List<Object> l=this.fds.stream().map(fd->putEd(k,v,fd,datas,isLast)).collect(Collectors.toList());
                 l.add(wtcList.get(k).getPKeyId());
                 params.add(l.toArray());
             }
@@ -74,11 +80,21 @@ public abstract class EvaSummary<T> {
     }
 
     /**把数据放到对应元素*/
-    private String putEd(int pn, List<T> items, FormData fd){
+    private String putEd(int pn, List<T> items, FormData fd,List<T>datas,boolean isLastPage){
         BiFunction<List<T>,Integer,List<Object>> fc = this.fm.get(fd.getCode());
         if(fc!=null) {
-            List<Object> data = fc.apply(items,pn);
+            List<Object> data ;
             List<ElementData> list = new ArrayList<>();
+            if("m_20231027094746_1717719707244560384:key_19".equals(fd.getCode())){
+                if(isLastPage){
+                    /*分部评定02表,最后一页需要汇总计算,其它也插入空白*/
+                    data  = fc.apply(datas,pn);
+                }else{
+                    data=Collections.singletonList("");
+                }
+            }else {
+                data  = fc.apply(items,pn);
+            }
             for (int i = 0; i < data.size(); i++) {
                 Coords c = fd.getCoordsList().get(i);
                 list.add(new ElementData(pn, 0, data.get(i), c.getX(), c.getY()));

+ 19 - 6
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FB02.java

@@ -3,6 +3,8 @@ package org.springblade.manager.vo;
 import com.alibaba.fastjson.JSON;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.FormulaDataBlock;
@@ -10,6 +12,7 @@ import org.springblade.manager.entity.FormulaDataBlock;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.function.BiFunction;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -42,7 +45,7 @@ public class FB02 extends EvaSummary<Item02>{
 
     @Override
     public boolean checked() {
-        return subItem!=null&&sn!=null&&name!=null&&passRate!=null&&weight!=null&&wAvg!=null;
+        return subItem!=null&&sn!=null&&name!=null&&passRate!=null&&weight!=null;
     }
 
 
@@ -65,11 +68,18 @@ public class FB02 extends EvaSummary<Item02>{
                   this.fm.put(fd.getCode(),(List<Item02> l,Integer pn)->l.stream().map(Item02::getWeight).collect(Collectors.toList()));
               }else if(fd.getEName().trim().contains("得分")&&fd.getEName().trim().contains("权值")){
                   this.wAvg=fd;
-                  this.fm.put(fd.getCode(),(List<Item02> l,Integer pn)-> Collections.singletonList(l.stream()
-                          .mapToDouble(item -> item.getPassRate() * item.getWeight())
-                          .sum() / l.stream()
-                          .mapToInt(Item02::getWeight)
-                          .sum()));
+                  BiFunction<List<Item02>,Integer,List<Object>> fc= (l,pn)-> {
+                      double score=  l.stream()
+                              .mapToDouble(item -> item.getPassRate() * item.getWeight())
+                              .sum() / l.stream()
+                              .mapToInt(Item02::getWeight)
+                              .sum();
+                      String s= BaseUtils.str2BigDecimal(score).setScale(2,RoundingMode.HALF_UP).stripTrailingZeros().toPlainString();
+                      List<Object> result = new ArrayList<>();
+                      result.add(s);
+                      return  result;
+                  };
+                  this.fm.put(fd.getCode(),fc);
               }
               if(this.subItem!=null&&this.name!=null&&this.passRate!=null&&this.weight!=null&&this.sn!=null&&this.wAvg!=null){
                   /*匹配完成*/
@@ -91,6 +101,9 @@ public class FB02 extends EvaSummary<Item02>{
                 String name = eb.getEName();
                 Item02 xm = new Item02();
                 xm.setName(checkItemName(name));
+                if(name.contains("△")){
+                    xm.setWeight(2);
+                }
                 xm.setSubItem(swNameMap.get(fdb.getSwId().toString()));
                 List<ItemBlock> ib = eb.getList();
                 int total = ib.stream().mapToInt(ItemBlock::getSubTotal).sum();