|
@@ -1,15 +1,11 @@
|
|
|
package org.springblade.manager.vo;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import lombok.Data;
|
|
|
-import org.springblade.core.tool.utils.Func;
|
|
|
-import org.springblade.core.tool.utils.StringPool;
|
|
|
-import org.springblade.manager.dto.Coords;
|
|
|
-import org.springblade.manager.dto.ElementData;
|
|
|
+import lombok.EqualsAndHashCode;
|
|
|
import org.springblade.manager.dto.FormData;
|
|
|
-import org.springblade.manager.entity.WbsTreeContract;
|
|
|
-
|
|
|
+import org.springblade.manager.entity.FormulaDataBlock;
|
|
|
import java.util.*;
|
|
|
-import java.util.function.BiFunction;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.IntStream;
|
|
|
|
|
@@ -18,47 +14,15 @@ import java.util.stream.IntStream;
|
|
|
* @Date 2023/11/1 17:24
|
|
|
* @description 评定表FB02
|
|
|
*/
|
|
|
+@EqualsAndHashCode(callSuper = true)
|
|
|
@Data
|
|
|
-public class FB02 {
|
|
|
+public class FB02 extends EvaSummary<Item02>{
|
|
|
private FormData subItem;
|
|
|
private FormData sn;
|
|
|
private FormData name;
|
|
|
private FormData passRate;
|
|
|
private FormData weight;
|
|
|
- private Integer rowSize=20;
|
|
|
- private List<FormData> fds = new ArrayList<>();
|
|
|
- private List<Item> datas = new ArrayList<>();
|
|
|
- private Map<String, BiFunction<List<Item>,Integer,List<Object>>> fm = new HashMap<>();
|
|
|
- private List<String> sqlList = new ArrayList<>();
|
|
|
-
|
|
|
-
|
|
|
- @Data
|
|
|
- public static class Item{
|
|
|
- private String subItem;
|
|
|
- private String name;
|
|
|
- private Double passRate=100d;
|
|
|
- private Integer weight=1;
|
|
|
- public Item(String subItem, String name, Double passRate, Integer weight) {
|
|
|
- this.subItem = subItem;
|
|
|
- this.name = name;
|
|
|
- this.passRate = passRate;
|
|
|
- this.weight = weight;
|
|
|
- }
|
|
|
- public Item() {
|
|
|
- }
|
|
|
-
|
|
|
- public String getName() {
|
|
|
- return name;
|
|
|
- }
|
|
|
-
|
|
|
- public void setName(String name) {
|
|
|
- if(name!=null&&name.contains("△")){
|
|
|
- this.weight=2;
|
|
|
- }
|
|
|
- this.name = name;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ @Override
|
|
|
public Integer getPageNum(){
|
|
|
if(this.name!=null){
|
|
|
return (this.getDatas().size()/this.name.getCoordsList().size())+1;
|
|
@@ -66,23 +30,24 @@ public class FB02 {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
public FB02(List<FormData> processFds) {
|
|
|
for(FormData fd:processFds){
|
|
|
if(fd.getEName().contains("分项工程名称")){
|
|
|
this.subItem=fd;
|
|
|
- this.fm.put(fd.getCode(),(List<Item> l,Integer pn)->l.stream().map(Item::getSubItem).collect(Collectors.toList()));
|
|
|
+ this.fm.put(fd.getCode(),(List<Item02> l,Integer pn)->l.stream().map(Item02::getSubItem).collect(Collectors.toList()));
|
|
|
}else if(fd.getEName().contains("序号")){
|
|
|
this.sn=fd;
|
|
|
- this.fm.put(fd.getCode(),(List<Item> l,Integer pn)->IntStream.range(0, l.size()).boxed().map(i->i+pn*l.size()).collect(Collectors.toList()));
|
|
|
+ this.fm.put(fd.getCode(),(List<Item02> l,Integer pn)->IntStream.range(0, l.size()).boxed().map(i->i+pn*l.size()).collect(Collectors.toList()));
|
|
|
}else if(fd.getEName().contains("实测项目")){
|
|
|
this.name=fd;
|
|
|
- this.fm.put(fd.getCode(),(List<Item> l,Integer pn)->l.stream().map(Item::getName).collect(Collectors.toList()));
|
|
|
+ this.fm.put(fd.getCode(),(List<Item02> l,Integer pn)->l.stream().map(Item02::getName).collect(Collectors.toList()));
|
|
|
}else if(fd.getEName().contains("实测合格率")){
|
|
|
this.passRate=fd;
|
|
|
- this.fm.put(fd.getCode(),(List<Item> l,Integer pn)->l.stream().map(Item::getPassRate).collect(Collectors.toList()));
|
|
|
+ this.fm.put(fd.getCode(),(List<Item02> l,Integer pn)->l.stream().map(Item02::getPassRate).collect(Collectors.toList()));
|
|
|
}else if(fd.getEName().trim().equals("权值")){
|
|
|
this.weight=fd;
|
|
|
- this.fm.put(fd.getCode(),(List<Item> l,Integer pn)->l.stream().map(Item::getWeight).collect(Collectors.toList()));
|
|
|
+ this.fm.put(fd.getCode(),(List<Item02> l,Integer pn)->l.stream().map(Item02::getWeight).collect(Collectors.toList()));
|
|
|
}
|
|
|
if(this.subItem!=null&&this.name!=null&&this.passRate!=null&&this.weight!=null&&this.sn!=null){
|
|
|
/*匹配完成*/
|
|
@@ -96,73 +61,27 @@ public class FB02 {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void initFdCoords(Map<String,String> tableKeysCoordsMap){
|
|
|
- boolean f=false;
|
|
|
- for(FormData fd:this.fds){
|
|
|
- String coords =tableKeysCoordsMap.get(fd.getKey());
|
|
|
- if(Func.isNotBlank(coords)){
|
|
|
- fd.flushCoords(coords);
|
|
|
- f=true;
|
|
|
- }
|
|
|
- }
|
|
|
- if(f) {
|
|
|
- this.rowSize = this.fds.get(0).getCoordsList().size();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public boolean flush( List<WbsTreeContract> wtcList){
|
|
|
- if(wtcList.size()>0) {
|
|
|
- Map<Integer, List<Item>> pages = IntStream.range(0, datas.size()).boxed()
|
|
|
- .collect(Collectors.groupingBy(
|
|
|
- i -> i / rowSize,
|
|
|
- LinkedHashMap::new,
|
|
|
- Collectors.mapping(datas::get, Collectors.toList())
|
|
|
- ));
|
|
|
-
|
|
|
- for (Map.Entry<Integer, List<Item>> entry : pages.entrySet()) {
|
|
|
- int k = entry.getKey();
|
|
|
- if (wtcList.size() <= k) {
|
|
|
- break;
|
|
|
+ public void source(List<FormulaDataBlock> formulaDataBlocks, Map<String,String> swNameMap ){
|
|
|
+ formulaDataBlocks.forEach(fdb -> {
|
|
|
+ List<ElementBlock> elementBlockList = JSON.parseArray(fdb.getVal(), ElementBlock.class);
|
|
|
+ elementBlockList.forEach(eb -> {
|
|
|
+ String name = eb.getEName();
|
|
|
+ Item02 xm = new Item02();
|
|
|
+ xm.setName(name);
|
|
|
+ xm.setSubItem(swNameMap.get(fdb.getSwId().toString()));
|
|
|
+ List<ItemBlock> ib = eb.getList();
|
|
|
+ int total = ib.stream().mapToInt(ItemBlock::getSubTotal).sum();
|
|
|
+ int pass = ib.stream().mapToInt(ItemBlock::getSubPass).sum();
|
|
|
+ if (total > 0) {
|
|
|
+ double rate = (double) pass / (double) total;
|
|
|
+ if (rate >= 0 && rate <= 100) {
|
|
|
+ xm.setPassRate(rate);
|
|
|
+ }
|
|
|
}
|
|
|
- List<Item> v = entry.getValue();
|
|
|
- WbsTreeContract w = wtcList.get(k);
|
|
|
- StringBuilder sb =new StringBuilder();
|
|
|
- this.fds.forEach(fd -> {
|
|
|
- sb.append(putEd(k,v,fd,w)).append(StringPool.COMMA);
|
|
|
- });
|
|
|
- String template="update "+w.getInitTableName()+" set "+sb.deleteCharAt(sb.length()-1)+" where id ="+w.getPKeyId();
|
|
|
- sqlList.add(template);
|
|
|
- }
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
- return false;
|
|
|
+ this.getDatas().add(xm);
|
|
|
+ });
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- /**把数据放到对应元素*/
|
|
|
- private String putEd(int pn,List<Item> items, FormData fd,WbsTreeContract w){
|
|
|
- BiFunction<List<Item>,Integer,List<Object>> fc = this.fm.get(fd.getCode());
|
|
|
- if(fc!=null) {
|
|
|
- List<Object> data = fc.apply(items,pn);
|
|
|
- List<ElementData> list = new ArrayList<>();
|
|
|
- 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()));
|
|
|
- }
|
|
|
- fd.getValues().addAll(list);
|
|
|
- return fd.getKey()+StringPool.EQUALS+StringPool.SINGLE_QUOTE+recovery(list)+StringPool.SINGLE_QUOTE;
|
|
|
- }
|
|
|
- return StringPool.EMPTY;
|
|
|
- }
|
|
|
-
|
|
|
- public String recovery(List<ElementData> dataList) {
|
|
|
- if (Func.isNotEmpty(dataList)) {
|
|
|
- return dataList.stream().filter(e -> !e.isEmpty()).map(e -> e.stringValue() + "_^_" + e.getY() + "_" + e.getX()).collect(Collectors.joining("☆"));
|
|
|
- }
|
|
|
- return StringPool.EMPTY;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
|
|
|
}
|