|
@@ -15,6 +15,7 @@ import org.springblade.manager.dto.FormData;
|
|
|
import org.springblade.manager.dto.TreeNode;
|
|
|
import org.springblade.manager.formula.ElementWriter;
|
|
|
import org.springblade.manager.vo.*;
|
|
|
+import org.springblade.meter.entity.InterimPayCertificateItem;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
|
|
|
@@ -77,7 +78,8 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
private BinaryOperator<String> subtractFc = (a,b)-> BaseUtils.str2BigDecimal(a).subtract(BaseUtils.str2BigDecimal(b)).toString();
|
|
|
/*乘法*/
|
|
|
private BinaryOperator<String> multiFc = (a,b)-> BaseUtils.str2BigDecimal(a).multiply(BaseUtils.str2BigDecimal(b)).toString();
|
|
|
-
|
|
|
+ /*加法*/
|
|
|
+ private BinaryOperator<String> addFc = (a,b)-> BaseUtils.str2BigDecimal(a).add(BaseUtils.str2BigDecimal(b)).toString();
|
|
|
/**根据清单编号获取支付项目章节编号*/
|
|
|
public String getPrefix(String fn){
|
|
|
if(fn!=null) {
|
|
@@ -351,18 +353,18 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
/* Arrays.asList("正常监理服务费","其他费用","附加监理服务费","额外服务费","缺陷期监理服务费","小计","费用调整","合计","监理单位违约金","奖励","动员预付款","扣回动员预付款","实际支付金额");*/
|
|
|
{
|
|
|
itemNamesMap.put("正常监理服务费","100");
|
|
|
- itemNamesMap.put("其他费用","");
|
|
|
- itemNamesMap.put("附加监理服务费","");
|
|
|
- itemNamesMap.put("额外服务费","");
|
|
|
+ itemNamesMap.put("其他费用","-100");
|
|
|
+ itemNamesMap.put("附加监理服务费","-100");
|
|
|
+ itemNamesMap.put("额外服务费","-100");
|
|
|
itemNamesMap.put("缺陷期监理服务费","200");
|
|
|
itemNamesMap.put("小计","-1");
|
|
|
- itemNamesMap.put("费用调整","");
|
|
|
+ itemNamesMap.put("费用调整","-100");
|
|
|
itemNamesMap.put("合计","-1");
|
|
|
- itemNamesMap.put("监理单位违约金","");
|
|
|
- itemNamesMap.put("奖励","");
|
|
|
- itemNamesMap.put("动员预付款","");
|
|
|
- itemNamesMap.put("扣回动员预付款","");
|
|
|
- itemNamesMap.put("实际支付金额","");
|
|
|
+ itemNamesMap.put("监理单位违约金","-100");
|
|
|
+ itemNamesMap.put("奖励","-100");
|
|
|
+ itemNamesMap.put("动员预付款","-100");
|
|
|
+ itemNamesMap.put("扣回动员预付款","-100");
|
|
|
+ itemNamesMap.put("实际支付金额","-1");
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -372,22 +374,28 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
|
|
|
@Override
|
|
|
public void parse() {
|
|
|
+
|
|
|
builderFormDatas(SupervisionCertificate.class);
|
|
|
List<Payment> pre=tec.meterInfo.getPaymentListMap().get(MeterInfo.PRE);
|
|
|
List<Payment> cur=tec.meterInfo.getPaymentListMap().get(MeterInfo.CUR);
|
|
|
List<Payment> end=tec.meterInfo.getPaymentListMap().get(MeterInfo.END);
|
|
|
Map<SupervisionCertificate,Map<Function<SupervisionCertificate,String>,Consumer<String>>> summaryConfigMap = new HashMap<>();
|
|
|
+ LinkedHashMap<String,InterimPayCertificateItem> previousMap = new LinkedHashMap<>();
|
|
|
+ LinkedHashMap<String,InterimPayCertificateItem> currentMap = new LinkedHashMap<>();
|
|
|
+ List<InterimPayCertificateItem> itemList = tec.meterInfo.getInterimPayCertificateItems();
|
|
|
+ Map<SupervisionCertificate,InterimPayCertificateItem> peerMap = new HashMap<>();
|
|
|
itemNamesMap.forEach((k,v)->{
|
|
|
SupervisionCertificate sc = new SupervisionCertificate();
|
|
|
sc.setItemName(k);
|
|
|
sc.setMonth(tec.periodInfo.getMonth());
|
|
|
- if(!v.isEmpty()&&!v.equals("-1")){
|
|
|
+ if(!v.isEmpty()&&!v.equals("-1")&&!v.equals("-100")){
|
|
|
+ InterimPayCertificateItem current = currentMap.computeIfAbsent(k,w->new InterimPayCertificateItem());
|
|
|
List<Payment> p = pre.stream().filter(e->getPrefix(e.getNumber()).equals(v)).collect(Collectors.toList());
|
|
|
List<Payment> c = cur.stream().filter(e->getPrefix(e.getNumber()).equals(v)).collect(Collectors.toList());
|
|
|
List<Payment> t = end.stream().filter(e->getPrefix(e.getNumber()).equals(v)).collect(Collectors.toList());
|
|
|
- t.stream().findFirst().ifPresent(sample->{
|
|
|
- sc.setPrice(sample.getPrice());
|
|
|
- sc.setContractAmount(sample.getContractMoney());
|
|
|
+ t.stream().findFirst().ifPresent(payment->{
|
|
|
+ sc.setPrice(payment.getPrice());
|
|
|
+ sc.setContractAmount(payment.getContractMoney());
|
|
|
/*本期*/
|
|
|
sc.setCurrentAmount(c.stream().map(e->BaseUtils.str2BigDecimal(e.getMoney())).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
|
|
|
sc.setCurrentRatio(ratioFc.apply(sc.getCurrentAmount(),sc.getContractAmount()));
|
|
@@ -397,17 +405,55 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
/*本期末*/
|
|
|
sc.setPeriodEndAmount(t.stream().map(e->BaseUtils.str2BigDecimal(e.getMoney())).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
|
|
|
sc.setPeriodEndRatio(ratioFc.apply(sc.getPeriodEndAmount(),sc.getContractAmount()));
|
|
|
+
|
|
|
+ current.setFormName(payment.getNumber());
|
|
|
+ current.setChapterSeq(payment.getName());
|
|
|
+ current.setContractAmount(payment.getContractMoney());
|
|
|
+ current.setPreviousPeriodEndPay(sc.getPeriodEndAmount());
|
|
|
+ current.setCurrentPeriodPay(sc.getCurrentAmount());
|
|
|
+ current.setCurrentPeriodEndPay(sc.getPeriodEndAmount());
|
|
|
+ itemList.add(current);
|
|
|
});
|
|
|
+
|
|
|
}else if(v.equals("-1")){
|
|
|
sc.setIsSummary(true);
|
|
|
addGetSetConfig(sc,summaryConfigMap,SupervisionCertificate::getContractAmount,sc::setContractAmount);
|
|
|
addGetSetConfig(sc,summaryConfigMap,SupervisionCertificate::getPeriodEndAmount,sc::setPeriodEndAmount);
|
|
|
addGetSetConfig(sc,summaryConfigMap,SupervisionCertificate::getPreviousEndAmount,sc::setPreviousEndAmount);
|
|
|
addGetSetConfig(sc,summaryConfigMap,SupervisionCertificate::getCurrentAmount,sc::setCurrentAmount);
|
|
|
+ InterimPayCertificateItem current = currentMap.computeIfAbsent(k,w->new InterimPayCertificateItem());
|
|
|
+ peerMap.put(sc,current);
|
|
|
+ current.setChapterSeq(sc.getItemName());
|
|
|
+ itemList.add(current);
|
|
|
+ }else if(v.equals("-100")){
|
|
|
+ InterimPayCertificateItem previous = previousMap.get(k);
|
|
|
+ InterimPayCertificateItem current = currentMap.computeIfAbsent(k,w->new InterimPayCertificateItem());
|
|
|
+ sc.setCurrentAmount(current.getCurrentPeriodPay());
|
|
|
+ sc.setPreviousEndAmount(previous.getCurrentPeriodEndPay());
|
|
|
+ sc.setPreviousEndAmount(addFc.apply(sc.getCurrentAmount(),sc.getPreviousEndAmount()));
|
|
|
+ current.setChapterSeq(sc.getItemName());
|
|
|
+ current.setPreviousPeriodEndPay(sc.getPeriodEndAmount());
|
|
|
+ current.setCurrentPeriodPay(sc.getCurrentAmount());
|
|
|
+ current.setCurrentPeriodEndPay(sc.getPeriodEndAmount());
|
|
|
+ itemList.add(current);
|
|
|
}
|
|
|
});
|
|
|
/*分行合计列*/
|
|
|
fieldGetSet(summaryConfigMap,x->!x.getIsSummary());
|
|
|
+ if(peerMap.size()>0) {
|
|
|
+ /*等合计项目计算完毕,再赋值*/
|
|
|
+ peerMap.forEach((sc, item) -> {
|
|
|
+ item.setPreviousPeriodEndPay(sc.getPeriodEndAmount());
|
|
|
+ item.setCurrentPeriodPay(sc.getCurrentAmount());
|
|
|
+ item.setCurrentPeriodEndPay(sc.getPeriodEndAmount());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ /*排序*/
|
|
|
+ List<String> indexSort =new ArrayList<>(itemNamesMap.keySet());
|
|
|
+ itemList.forEach(e->{
|
|
|
+ e.setCertificateId(tec.getReportId());
|
|
|
+ e.setSort(indexSort.indexOf(e.getChapterSeq()));
|
|
|
+ });
|
|
|
putOut();
|
|
|
}
|
|
|
}
|