|
@@ -480,15 +480,15 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
}
|
|
|
/*本期完成*/
|
|
|
this.completed =next.completed+this.completed;;
|
|
|
+ this.money=this.money.add(next.money);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
/*当前期合并往期计算累计值*/
|
|
|
public Summary merge(Summary previous){
|
|
|
if(previous!=null){
|
|
|
- this.currentPeriodPay=this.money.add(BigDecimal.ZERO);
|
|
|
- this.money=this.money.add(previous.money);
|
|
|
- this.currentPeriodEndPay=this.money;
|
|
|
+ this.currentPeriodPay=this.money;
|
|
|
+ this.currentPeriodEndPay=this.currentPeriodPay.add(previous.money);
|
|
|
this.completed=this.completed+previous.completed;
|
|
|
}
|
|
|
return this;
|
|
@@ -529,7 +529,12 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
sis.setCurrentPeriodPay(summary.getCurrentPeriodPay().toString());
|
|
|
/*当前期和往期统计*/
|
|
|
summary.merge(pre);
|
|
|
+ if(pre!=null){
|
|
|
+ sis.setPreviousPeriodPay(pre.getMoney().toString());
|
|
|
+ sis.setPreviousPeriodCompleted(pre.getCompleted().toString());
|
|
|
+ }
|
|
|
sis.setCompleted(summary.getCompleted().toString());
|
|
|
+ sis.setCurrentPeriodPay(summary.getCurrentPeriodPay().toString());
|
|
|
sis.setCurrentPeriodEndPay(summary.getCurrentPeriodEndPay().toString());
|
|
|
sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
|
|
|
totalList.add(sis);
|
|
@@ -605,10 +610,15 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
smps.setFormNumber(payment.getNumber());
|
|
|
smps.setUnit(payment.getUnit());
|
|
|
smps.setRevisedTotal(StringUtils.handleNull(payment.getChangeTotal()));
|
|
|
+ /*本期完成数量*/
|
|
|
smps.setCurrentPeriodCompleted(StringUtils.handleNull(payment.getCompleted()));
|
|
|
+ /*本期累计完成数量*/
|
|
|
smps.setCompleted(payment.getCompleted().toString());
|
|
|
+ /*变更金额*/
|
|
|
smps.setChangeMoney(payment.getChangeMoney());
|
|
|
+ /*本期支付金额*/
|
|
|
smps.setCurrentPeriodPay(payment.getMoney());
|
|
|
+ /*本期末累计支付金额*/
|
|
|
smps.setCurrentPeriodEndPay(payment.getMoney());
|
|
|
if(prePayment!=null){
|
|
|
smps.completedAdd(prePayment.getCompleted());
|
|
@@ -629,10 +639,12 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
if(opTreeNode.isPresent()) {
|
|
|
/*计量单元根节点*/
|
|
|
TreeNode<MeterTree> top= opTreeNode.get();
|
|
|
+ /*根据计量单元Id分组清单*/
|
|
|
Map<Long, List<Payment>> paymentGroup = current.stream().collect(Collectors.groupingBy(Payment::getMeterId));
|
|
|
+ /*根据计量单元Id和清单Id分组清单*/
|
|
|
Map<String,Payment> preMeterPaymentGroup = previous.stream().collect(Collectors.toMap(Payment::meterFormKey,p->p,(p1,p2)->p2));
|
|
|
FormulaUtils.treeNodeSort(0,top);
|
|
|
- current.forEach(e -> {
|
|
|
+ /* current.forEach(e -> {
|
|
|
TreeNode<MeterTree> meterTreeNode=treeNodeMap.get(e.getMeterId());
|
|
|
if(meterTreeNode!=null){
|
|
|
MeterTree meterUnit = meterTreeNode.getValue();
|
|
@@ -642,6 +654,13 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
this.treeNodeCheckedCount(meterTreeNode,payment,prePayment);
|
|
|
}
|
|
|
}
|
|
|
+ });*/
|
|
|
+ /*路径选中,设置节点采集数据*/
|
|
|
+ paymentGroup.forEach((k,v)->{
|
|
|
+ TreeNode<MeterTree> meterTreeNode=treeNodeMap.get(k);
|
|
|
+ if(meterTreeNode!=null){
|
|
|
+ this.treeNodeCheckedCount(meterTreeNode,v,preMeterPaymentGroup);
|
|
|
+ }
|
|
|
});
|
|
|
/*分组列表,每一组都是一个章节*/
|
|
|
List<List<SubInterimMeterPaySummary>> pageData =traversal(top);
|
|
@@ -675,15 +694,21 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
|
|
|
|
|
|
/*溯源并计算累计支付*/
|
|
|
- public void treeNodeCheckedCount(TreeNode<MeterTree> tmp,Payment payment, Payment prePayment ){
|
|
|
+ public void treeNodeCheckedCount(TreeNode<MeterTree> tmp,List<Payment> payments, Map<String,Payment> preMeterPaymentGroup){
|
|
|
tmp.setChecked(true);
|
|
|
MeterTree meterTree = tmp.getValue();
|
|
|
- if(meterTree.peer==null){
|
|
|
- meterTree.peer= payment2Smps.apply(payment,prePayment);
|
|
|
+ meterTree.peer=new SubInterimMeterPaySummary();
|
|
|
+ meterTree.peer.setItemName(meterTree.getNodeName());
|
|
|
+ meterTree.paymentPeer= new ArrayList<>();
|
|
|
+ for(Payment payment:payments){
|
|
|
+ SubInterimMeterPaySummary pay= payment2Smps.apply(payment,preMeterPaymentGroup.get(meterTree.getId().toString()+payment.getFormId()));
|
|
|
+ /*计算节点的本次付款金额*/
|
|
|
+ meterTree.peer.currentPeriodPayAdd(pay.getCurrentPeriodPay());
|
|
|
+ /*计量单对应信息*/
|
|
|
+ meterTree.paymentPeer.add(pay);
|
|
|
}
|
|
|
int loop = 10;
|
|
|
TreeNode<MeterTree> node=tmp.getParent();
|
|
|
- SubInterimMeterPaySummary sp= meterTree.peer;
|
|
|
while (node!=null&&loop-->0){
|
|
|
node.setChecked(true);
|
|
|
MeterTree tmpTree= node.getValue();
|
|
@@ -691,13 +716,12 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
if(ss==null){
|
|
|
/*不存在则新增*/
|
|
|
ss = new SubInterimMeterPaySummary();
|
|
|
- ss.setItemName(meterTree.getNodeName());
|
|
|
- ss.setCurrentPeriodEndPay(sp.getCurrentPeriodEndPay());
|
|
|
+ ss.setItemName(tmpTree.getNodeName());
|
|
|
+ ss.currentPeriodPayAdd(meterTree.peer.getCurrentPeriodPay());
|
|
|
tmpTree.peer=ss;
|
|
|
- }else{
|
|
|
- /*已存在则相加*/
|
|
|
- ss.currentPeriodEndPayAdd(sp.getCurrentPeriodEndPay());
|
|
|
}
|
|
|
+ /*已存在则相加*/
|
|
|
+ ss.currentPeriodPayAdd(meterTree.peer.getCurrentPeriodPay());
|
|
|
node=node.getParent();
|
|
|
}
|
|
|
|
|
@@ -707,6 +731,7 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
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<>();
|
|
@@ -724,11 +749,18 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
/*获取checked状态的节点*/
|
|
|
public void toSubCollect(TreeNode<MeterTree> node,List<SubInterimMeterPaySummary> list){
|
|
|
if(node.isChecked()){
|
|
|
- list.add(node.getValue().getPeer());
|
|
|
+ MeterTree meterTree= node.getValue();
|
|
|
+ list.add(meterTree.getPeer());
|
|
|
+ /*不是叶子节点就继续找*/
|
|
|
if(node.hasChildren()){
|
|
|
for(TreeNode<MeterTree> child:node.getChildren()){
|
|
|
toSubCollect(child,list);
|
|
|
}
|
|
|
+ }else {
|
|
|
+ /*计量单信息*/
|
|
|
+ if(meterTree.paymentPeer!=null) {
|
|
|
+ list.addAll(meterTree.paymentPeer);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|