|
@@ -5,16 +5,17 @@ import com.mixsmart.utils.StringUtils;
|
|
|
import lombok.Data;
|
|
|
import lombok.EqualsAndHashCode;
|
|
|
import org.springblade.core.tool.utils.Func;
|
|
|
-import org.springblade.manager.dto.Coords;
|
|
|
import org.springblade.manager.dto.ElementData;
|
|
|
import org.springblade.manager.dto.FormData;
|
|
|
import org.springblade.manager.formula.FormulaExecutor;
|
|
|
+import org.springblade.manager.formula.NodeTable;
|
|
|
import org.springblade.manager.vo.BaseInfo;
|
|
|
import org.springblade.manager.vo.Material;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Optional;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.IntStream;
|
|
@@ -35,9 +36,13 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
|
|
|
@Override
|
|
|
public void handle() {
|
|
|
- MaterialCalc materialCalc = new MaterialCalc(tec.getFormDataList());
|
|
|
- this.specialList.add(materialCalc);
|
|
|
- this.specialList.forEach(Special::parse);
|
|
|
+ for(NodeTable nodeTable:tec.getTableAll()){
|
|
|
+ if(Material.TBN_CH.equals(nodeTable.getNodeName())){
|
|
|
+ MaterialCalc materialCalc = new MaterialCalc(tec.getFormDataList());
|
|
|
+ this.specialList.add(materialCalc);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.specialList.stream().filter(Special::ready).forEach(Special::parse);
|
|
|
}
|
|
|
@Data
|
|
|
public class MaterialCalc implements Special{
|
|
@@ -61,7 +66,23 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
private String totalAdvance;
|
|
|
private List<FormData> fds=new ArrayList<>();
|
|
|
public MaterialCalc(List<FormData> list) {
|
|
|
- for(FormData fd:list){
|
|
|
+ Optional<FormData> fop= list.stream().filter(e->e.executable()&&"MATERIAL".equals(e.getFormula().getNumber())).findAny();
|
|
|
+ List<FormData> candidate = new ArrayList<>();
|
|
|
+ if(fop.isPresent()){
|
|
|
+ List<String> relyList= fop.get().getFormula().getRelyList();
|
|
|
+ for(FormData t:list){
|
|
|
+ if(relyList.contains(t.getCode())) {
|
|
|
+ candidate.add(t);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ /*假如不存在配置,则尝试自动识别*/
|
|
|
+ candidate.addAll(list);
|
|
|
+ }
|
|
|
+ select(candidate);
|
|
|
+ }
|
|
|
+ public void select(List<FormData> candidate ){
|
|
|
+ for(FormData fd:candidate){
|
|
|
if(fd.getEName().contains("序号")){
|
|
|
this.index=fd;
|
|
|
fds.add(fd);
|
|
@@ -110,6 +131,12 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean ready() {
|
|
|
+ return fds.size()==14;
|
|
|
+ }
|
|
|
+
|
|
|
public void parse(){
|
|
|
/*加载合同材料、材料清单*/
|
|
|
/* b.material_name name,b.unit,b.price,a.meter_amount amount,a.material_source source
|
|
@@ -158,6 +185,7 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
}
|
|
|
|
|
|
public interface Special{
|
|
|
+ boolean ready();
|
|
|
void parse();
|
|
|
}
|
|
|
}
|