|
@@ -23,6 +23,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.function.BiFunction;
|
|
|
import java.util.function.BinaryOperator;
|
|
|
+import java.util.function.Consumer;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.IntStream;
|
|
@@ -494,12 +495,28 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
interimPaymentCertificates= new ArrayList<>(paymentCertificateMap.values());
|
|
|
/*合同段支付项*/
|
|
|
List<MidPayItem> midPayItemList=tec.meterInfo.getMidPayItemList();
|
|
|
+ Map<InterimPaymentCertificate,Map<Function<InterimPaymentCertificate,String>,Consumer<String>>> summaryConfigMap = new HashMap<>();
|
|
|
+ Map<Function<InterimPaymentCertificate,String>,Consumer<String>> getSetMap = new HashMap<>();
|
|
|
if(Func.isNotEmpty(midPayItemList)){
|
|
|
List<InterimPaymentCertificate> payItemZj=new ArrayList<>();
|
|
|
if(MeterInfo.MB_ZJ.equals(tec.meterInfo.getConfig())){
|
|
|
- payItemZj.add(new InterimPaymentCertificate("小计"));
|
|
|
+ InterimPaymentCertificate xj=new InterimPaymentCertificate("小计");
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getContractAmount,xj::setContractAmount);
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getRevisedTotal,xj::setRevisedTotal);
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getRevisedAmount,xj::setRevisedAmount);
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodEndPay,xj::setCurrentPeriodEndPay);
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodEndChangeMoney,xj::setCurrentPeriodEndChangeMoney);
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getPreviousPeriodEndPay,xj::setPreviousPeriodEndPay);
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getPreviousPeriodEndChangeMoney,xj::setPreviousPeriodEndChangeMoney);
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodPay,xj::setCurrentPeriodPay);
|
|
|
+ addGetSetConfig(xj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodChangeMoney,xj::setCurrentPeriodChangeMoney);
|
|
|
+ payItemZj.add(xj);
|
|
|
payItemZj.add(new InterimPaymentCertificate("价格调整"));
|
|
|
- payItemZj.add(new InterimPaymentCertificate("合计"));
|
|
|
+ InterimPaymentCertificate hj = new InterimPaymentCertificate("合计");
|
|
|
+ addGetSetConfig(hj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodEndPay,hj::setCurrentPeriodEndPay);
|
|
|
+ addGetSetConfig(hj,summaryConfigMap,InterimPaymentCertificate::getPreviousPeriodEndPay,hj::setPreviousPeriodEndPay);
|
|
|
+ addGetSetConfig(hj,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodPay,hj::setCurrentPeriodPay);
|
|
|
+ payItemZj.add(hj);
|
|
|
payItemZj.add(new InterimPaymentCertificate("索赔金额"));
|
|
|
payItemZj.add(new InterimPaymentCertificate("违约罚金"));
|
|
|
payItemZj.add(new InterimPaymentCertificate("迟付款利息"));
|
|
@@ -508,16 +525,17 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
payItemZj.add(new InterimPaymentCertificate("材料设备垫付款"));
|
|
|
payItemZj.add(new InterimPaymentCertificate("扣回材料设备垫付款"));
|
|
|
payItemZj.add(new InterimPaymentCertificate("保留金"));
|
|
|
- payItemZj.add(new InterimPaymentCertificate("实际支付"));
|
|
|
+ InterimPaymentCertificate sjzf=new InterimPaymentCertificate("实际支付");
|
|
|
+ addGetSetConfig(sjzf,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodEndPay,sjzf::setCurrentPeriodEndPay);
|
|
|
+ addGetSetConfig(sjzf,summaryConfigMap,InterimPaymentCertificate::getPreviousPeriodEndPay,sjzf::setPreviousPeriodEndPay);
|
|
|
+ addGetSetConfig(sjzf,summaryConfigMap,InterimPaymentCertificate::getCurrentPeriodPay,sjzf::setCurrentPeriodPay);
|
|
|
+ payItemZj.add(sjzf);
|
|
|
}
|
|
|
midPayItemList.forEach(e->{
|
|
|
InterimPaymentCertificate ipc = paymentCertificateMap.get(e.getPayNumber());
|
|
|
if(ipc==null){
|
|
|
- if(MeterInfo.MB_ZJ.equals(tec.meterInfo.getConfig())){
|
|
|
- if((e.getPayName().contains("章")||e.getPayName().contains("暂定"))){
|
|
|
- ipc = new InterimPaymentCertificate(e.getPayName());
|
|
|
- }
|
|
|
- }else {
|
|
|
+ /*浙江的按照实际的计量单元去显示*/
|
|
|
+ if(!MeterInfo.MB_ZJ.equals(tec.meterInfo.getConfig())) {
|
|
|
ipc = new InterimPaymentCertificate(e.getPayName());
|
|
|
}
|
|
|
}
|
|
@@ -526,7 +544,18 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
}
|
|
|
});
|
|
|
if(payItemZj.size()>0){
|
|
|
+ dataList.stream().filter(t->t.getFormName()!=null&&t.getFormName().contains("暂定金")).findFirst().ifPresent(t->{
|
|
|
+ t.setCurrentPeriodPay("");
|
|
|
+ t.setCurrentPeriodEndPay("");
|
|
|
+ t.setPreviousPeriodEndPay("");
|
|
|
+ t.setPreviousPeriodEndChangeMoney("");
|
|
|
+ t.setCurrentPeriodChangeMoney("");
|
|
|
+ t.setCurrentPeriodEndChangeMoney("");
|
|
|
+ });
|
|
|
dataList.addAll(payItemZj);
|
|
|
+ /*分行合计列*/
|
|
|
+ fieldGetSet(summaryConfigMap);
|
|
|
+ /*计算合计值*/
|
|
|
}
|
|
|
}
|
|
|
/*数据获取end*/
|
|
@@ -691,6 +720,8 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
private Integer changeTotal =0;
|
|
|
/**完成数量*/
|
|
|
private Integer completed=0;
|
|
|
+ /**单价*/
|
|
|
+ private String price;
|
|
|
/* 本次完成数量
|
|
|
private Integer currentPeriodCompleted=0;
|
|
|
累计完成数量
|
|
@@ -719,6 +750,7 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
this.contractMoney =new BigDecimal(p.getContractMoney());
|
|
|
this.changeMoney =new BigDecimal(p.getChangeMoney());
|
|
|
this.money=p.getMoneyAsBigDecimal();
|
|
|
+ this.price=p.getPrice();
|
|
|
}
|
|
|
|
|
|
/*同一个清单累加*/
|
|
@@ -778,6 +810,7 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
sis.setChangeTotal(main.getChangeTotal().toString());
|
|
|
sis.setContractMoney(main.getContractMoney().toString());
|
|
|
sis.setChangeMoney(main.getChangeMoney().toString());
|
|
|
+ sis.setPrice(main.getPrice());
|
|
|
if(cur!=null){
|
|
|
sis.setCurrentPeriodCompleted(cur.getCompleted().toString());
|
|
|
}
|
|
@@ -800,7 +833,7 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
totalList.forEach(e->{
|
|
|
subprojectInterimPaymentSummary.add(e.copy());
|
|
|
});
|
|
|
- LinkedHashMap<String,List<SubprojectInterimPaymentSummary>> chapterGroup= totalList.stream().collect(Collectors.groupingBy(e->getPrefix(e.getFormNumber()),LinkedHashMap::new,Collectors.toList()));
|
|
|
+ LinkedHashMap<String,List<SubprojectInterimPaymentSummary>> chapterGroup= totalList.stream().sorted(Comparator.comparing(e->getPrefix(e.getFormNumber()))).collect(Collectors.groupingBy(e->getPrefix(e.getFormNumber()),LinkedHashMap::new,Collectors.toList()));
|
|
|
AtomicInteger loop = new AtomicInteger(chapterGroup.size());
|
|
|
List<String> chapterNames= new ArrayList<>();
|
|
|
chapterGroup.forEach((k,v)->{
|
|
@@ -1295,12 +1328,21 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
pageNumber(clazz);
|
|
|
FormulaUtils.put2FormData(fdm, fieldDataFcMap,dataList);
|
|
|
};
|
|
|
-
|
|
|
- /* public void write(Object data){
|
|
|
- FormulaUtils.elementFindByKey(fdm,"key_24").ifPresent(t->{
|
|
|
- elementWriter.write(t,data);
|
|
|
+ /*批量计算列表中之前的字段和,并赋值到当前字段*/
|
|
|
+ public void fieldGetSet(Map<T,Map<Function<T,String>,Consumer<String>>> gsMap){
|
|
|
+ gsMap.forEach((b,m)->{
|
|
|
+ List<T> dl = dataList.stream().limit(dataList.indexOf(b)).collect(Collectors.toList());
|
|
|
+ m.forEach((f,c)->{
|
|
|
+ c.accept(dl.stream().map(f).map(BaseUtils::str2BigDecimal).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
|
|
|
+ });
|
|
|
});
|
|
|
- }*/
|
|
|
+ }
|
|
|
+
|
|
|
+ public void addGetSetConfig(T b,Map<T,Map<Function<T,String>,Consumer<String>>> gsMap,Function<T,String>f,Consumer<String> c){
|
|
|
+ Map<Function<T,String>,Consumer<String>> configMap = gsMap.computeIfAbsent(b,k->new HashMap<>());
|
|
|
+ configMap.put(f,c);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
interface Special{
|
|
|
/**是否满足执行条件*/
|