|
@@ -73,7 +73,14 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
return fn;
|
|
|
}
|
|
|
|
|
|
- public Function<String,String> preFixFc= this::getPrefix;
|
|
|
+ public Function<String,String> preFixFc= this::getPrefix;
|
|
|
+
|
|
|
+ public <T> LinkedHashMap<String,FormData> builderFormDatas(T bean){
|
|
|
+ LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(bean);
|
|
|
+ Map<String,Function<List<T>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(bean.getClass());
|
|
|
+ tec.getFormDataMap().putAll(fdm);
|
|
|
+ return fdm;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public void handle() {
|
|
@@ -325,8 +332,7 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
}
|
|
|
|
|
|
/*合计字段*/
|
|
|
- BiFunction<List<InterimPaymentSummary>,Function<InterimPaymentSummary,String>,String>
|
|
|
- bfc= (list,fc) -> StringUtils.number2String(list.stream().map(fc).mapToDouble(Double::parseDouble).sum(),1);
|
|
|
+ BiFunction<List<InterimPaymentSummary>,Function<InterimPaymentSummary,String>,String> bfc= (list,fc) -> StringUtils.number2String(list.stream().map(fc).mapToDouble(Double::parseDouble).sum(),1);
|
|
|
|
|
|
|
|
|
@Override
|
|
@@ -359,9 +365,6 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
@Data
|
|
|
public class SubIPaySum implements Special{
|
|
|
private Integer capacity=10;
|
|
@@ -535,43 +538,56 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
return current.size()>0;
|
|
|
}
|
|
|
|
|
|
+ public BiFunction<Payment,Payment,SubInterimMeterPaySummary> payment2Smps=(payment,prePayment)->{
|
|
|
+ SubInterimMeterPaySummary smps= new SubInterimMeterPaySummary();
|
|
|
+ smps.setItemName(payment.getName());
|
|
|
+ smps.setFormNumber(payment.getNumber());
|
|
|
+ smps.setUnit(payment.getUnit());
|
|
|
+ smps.setRevisedTotal(payment.getChangeTotal());
|
|
|
+ smps.setCurrentPeriodCompleted(payment.getCompleted());
|
|
|
+ smps.setCompleted(payment.getCompleted()+prePayment.getCompleted());
|
|
|
+ smps.setRevisedAmount(payment.getChangeMoney());
|
|
|
+ smps.setCurrentPeriodPay(payment.getMoney());
|
|
|
+ smps.setCurrentPeriodEndPay(new BigDecimal(payment.getMoney()).add(new BigDecimal(prePayment.getMoney())));
|
|
|
+ return smps;
|
|
|
+ };
|
|
|
+
|
|
|
@Override
|
|
|
public void parse() {
|
|
|
/*按照计量单元和单元内的清单顺序排序显示计量清单,并且把计量单元的层级一并显示*/
|
|
|
/*根据每一期的s_middle_meter_apply,s_inventory_form_apply 获取对应的计量清单,然后根据清单Id配合s_inventory_form_meter查找计量单元信息*/
|
|
|
/*s_change_token_inventory每个清单关联的变更令,s_change_token_meter每个计量单元关联的变更令*/
|
|
|
+ LinkedHashMap<String,FormData> fdm = FormulaUtils.toFormDataMap(new SubInterimMeterPaySummary());
|
|
|
+ Map<String,Function<List<SubInterimMeterPaySummary>,List<Object>>> functionMap =FormulaUtils.fieldDataFcMap(SubInterimMeterPaySummary.class);
|
|
|
+ tec.getFormDataMap().putAll(fdm);
|
|
|
try {
|
|
|
Map<Long, TreeNode<MeterTree>> treeNodeMap = tec.getMeterTreeMap().get();
|
|
|
Optional<TreeNode<MeterTree>> optionalTreeNode= treeNodeMap.values().stream().filter(TreeNode::isTop).findAny();
|
|
|
if(optionalTreeNode.isPresent()) {
|
|
|
/*计量单元根节点*/
|
|
|
TreeNode<MeterTree> top= optionalTreeNode.get();
|
|
|
- List<TreeNode<MeterTree>> treeNodeList = new ArrayList<>();
|
|
|
Map<Long, List<Payment>> paymentGroup = current.stream().collect(Collectors.groupingBy(Payment::getMeterId));
|
|
|
Map<String,Payment> preMeterPaymentGroup = previous.stream().collect(Collectors.toMap(Payment::meterFormKey,p->p,(p1,p2)->p2));
|
|
|
FormulaUtils.treeNodeSort(0,top);
|
|
|
current.forEach(e -> {
|
|
|
TreeNode<MeterTree> meterTreeNode=treeNodeMap.get(e.getMeterId());
|
|
|
if(meterTreeNode!=null){
|
|
|
- treeNodeList.add(meterTreeNode);
|
|
|
+ MeterTree meterUnit = meterTreeNode.getValue();
|
|
|
+ List<Payment> paymentList = paymentGroup.get(meterUnit.getId());
|
|
|
+ for(Payment payment:paymentList){
|
|
|
+ Payment prePayment = preMeterPaymentGroup.get(meterUnit.getId().toString()+payment.getFormId());
|
|
|
+ this.treeNodeCheckedCount(meterTreeNode,payment,prePayment);
|
|
|
+ }
|
|
|
}
|
|
|
});
|
|
|
- if(treeNodeList.size()>0){
|
|
|
- treeNodeList.sort(Comparator.comparingInt(TreeNode::getSort));
|
|
|
- for(TreeNode<MeterTree> node:treeNodeList){
|
|
|
- MeterTree meterUnit = node.getValue();
|
|
|
- List<MeterTree> chains = FormulaUtils.treeNodeChains(node);
|
|
|
- List<Payment> paymentList = paymentGroup.get(meterUnit.getId());
|
|
|
- for(Payment payment:paymentList){
|
|
|
- Payment prePayment = preMeterPaymentGroup.get(meterUnit.getId().toString()+payment.getFormId());
|
|
|
- SubInterimMeterPaySummary smps= new SubInterimMeterPaySummary();
|
|
|
- smps.setItemName(payment.getName());
|
|
|
- smps.setFormNumber(payment.getNumber());
|
|
|
- smps.setUnit(payment.getUnit());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ List<List<SubInterimMeterPaySummary>> pageData =traversal(top);
|
|
|
+ List<SubInterimMeterPaySummary> dataList= pageData.stream().flatMap(list->{
|
|
|
+ List<SubInterimMeterPaySummary> tmp =new ArrayList<>(list);
|
|
|
+ tmp.add(new SubInterimMeterPaySummary());
|
|
|
+ return tmp.stream();
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ /*内容输出*/
|
|
|
+ FormulaUtils.put2FormData(fdm,functionMap,dataList);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
@@ -579,9 +595,59 @@ public class ExecutorSpecial extends FormulaExecutor {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /*溯源并计算累计支付*/
|
|
|
+ public void treeNodeCheckedCount(TreeNode<MeterTree> tmp,Payment payment, Payment prePayment ){
|
|
|
+ tmp.setChecked(true);
|
|
|
+ MeterTree meterTree = tmp.getValue();
|
|
|
+ if(meterTree.peer==null){
|
|
|
+ meterTree.peer= payment2Smps.apply(payment,prePayment);
|
|
|
+ }
|
|
|
+ int loop = 10;
|
|
|
+ TreeNode<MeterTree> node=tmp.getParent();
|
|
|
+ SubInterimMeterPaySummary sp= meterTree.peer;
|
|
|
+ while (node!=null&&loop-->0){
|
|
|
+ node.setChecked(true);
|
|
|
+ MeterTree tmpTree= node.getValue();
|
|
|
+ SubInterimMeterPaySummary ss=tmpTree.peer;
|
|
|
+ if(ss==null){
|
|
|
+ /*不存在则新增*/
|
|
|
+ ss = new SubInterimMeterPaySummary();
|
|
|
+ ss.setItemName(meterTree.getNodeName());
|
|
|
+ ss.setCurrentPeriodEndPay(sp.getCurrentPeriodEndPay());
|
|
|
+ tmpTree.peer=ss;
|
|
|
+ }else{
|
|
|
+ /*已存在则相加*/
|
|
|
+ ss.setCurrentPeriodEndPay(ss.getCurrentPeriodEndPay().add(sp.getCurrentPeriodEndPay()));
|
|
|
+ }
|
|
|
+ node=node.getParent();
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- public void traversal(TreeNode<MeterTree> top){
|
|
|
+ /*遍历树获取smps*/
|
|
|
+ public List<List<SubInterimMeterPaySummary>> traversal(TreeNode<MeterTree> top){
|
|
|
+ List<List<SubInterimMeterPaySummary>> total = new ArrayList<>();
|
|
|
+ if(top.hasChildren()) {
|
|
|
+ List<TreeNode<MeterTree>> parts = top.getChildren();
|
|
|
+ for(TreeNode<MeterTree> node :parts){
|
|
|
+ List<SubInterimMeterPaySummary> list = new ArrayList<>();
|
|
|
+ toSmps(node,list);
|
|
|
+ if(list.size()>0){
|
|
|
+ total.add(list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return total;
|
|
|
+ }
|
|
|
|
|
|
+ public void toSmps(TreeNode<MeterTree> node,List<SubInterimMeterPaySummary> list){
|
|
|
+ if(node.isChecked()){
|
|
|
+ list.add(node.getValue().getPeer());
|
|
|
+ if(node.hasChildren()){
|
|
|
+ for(TreeNode<MeterTree> child:node.getChildren()){
|
|
|
+ toSmps(child,list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
}
|