|
@@ -90,7 +90,7 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
private BinaryOperator<String> addFc = (a,b)-> BaseUtils.str2BigDecimal(a).add(BaseUtils.str2BigDecimal(b)).toString();
|
|
|
|
|
|
/*按照二级清单编号,合计合同清单{合同金额,变更金额}*/
|
|
|
- private Function<List<InventoryForm>, Map<String, BigDecimal[]>> contractMoneySum = data -> data.stream()
|
|
|
+ private Function<List<InventoryForm>, Map<String, BigDecimal[]>> contractMoneySum = data -> data.stream().filter(e->StringUtils.isNotEmpty(e.getContractMoney()))
|
|
|
.collect(Collectors.groupingBy(
|
|
|
this::getPrefix,
|
|
|
Collectors.reducing(
|
|
@@ -112,13 +112,6 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
|
|
|
|
|
|
|
|
|
- Function<InventoryForm,String> level2Fn=inventoryForm -> {
|
|
|
- String prefix = inventoryForm.getFormNumber();
|
|
|
- if(inventoryForm.getFormName().contains(BTDL)){
|
|
|
- return prefix+":"+BTDL;
|
|
|
- }
|
|
|
- return prefix;
|
|
|
- };
|
|
|
static String BTDL="保通道路";
|
|
|
/**根据清单编号获取支付项目章节编号*/
|
|
|
public String getPrefix(String fn){
|
|
@@ -127,7 +120,7 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
fn= fn.split("-")[0];
|
|
|
for (InventoryForm itf : tec.meterInfo.getChapter()) {
|
|
|
/*204-1-11(保通道路)*/
|
|
|
- String prefix = level2Fn.apply(itf);
|
|
|
+ String prefix = chapterPreFixFc.apply(itf);
|
|
|
if (BaseUtils.isNumber(fn)) {
|
|
|
fn = String.valueOf(100 * (Integer.parseInt(fn) / 100));
|
|
|
}
|
|
@@ -147,6 +140,9 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
if(prefix!=null) {
|
|
|
boolean hasWord = inventoryForm.getFormName().contains(BTDL)||inventoryForm.getFormNumber().contains(BTDL);
|
|
|
String fn= prefix.split("-")[0];
|
|
|
+ if(inventoryForm.getFormName().contains(BTDL)){
|
|
|
+ fn=inventoryForm.getChapter();
|
|
|
+ }
|
|
|
/*204-1-11(保通道路)*/
|
|
|
if (BaseUtils.isNumber(fn)) {
|
|
|
fn = String.valueOf(100 * (Integer.parseInt(fn) / 100));
|
|
@@ -159,14 +155,23 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
return "NULL";
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ /*获取章编号*/
|
|
|
Function<InventoryForm,String> chapterPreFixFc=inventoryForm->{
|
|
|
- if(inventoryForm.getFormName().contains(BTDL)){
|
|
|
- return inventoryForm.getFormNumber()+":"+BTDL;
|
|
|
+ if(inventoryForm.getFormName().contains(BTDL)||inventoryForm.getFormNumber().contains(BTDL)){
|
|
|
+ return inventoryForm.getChapter()+":"+BTDL;
|
|
|
}
|
|
|
return inventoryForm.getFormNumber();
|
|
|
} ;
|
|
|
|
|
|
+ /*章节排序*/
|
|
|
+ ToIntFunction<InventoryForm> toIntFc=itf->{
|
|
|
+ String chapter = itf.getChapter();
|
|
|
+ if(BaseUtils.isNumber(chapter)){
|
|
|
+ return BaseUtils.obj2IntegerZero(chapter);
|
|
|
+ }else{
|
|
|
+ return 1000;
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
/*获取动态行最大行数,codeFind为相关元素码集合 */
|
|
|
public Integer getLineSize(List<String> codeFind){
|
|
@@ -213,8 +218,10 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
}else if(MeterType.START.equals(tec.getMeterType())||MeterType.START_JL.equals(tec.getMeterType())){
|
|
|
/*开工预付款支付证书处理*/
|
|
|
this.specialList.add(new StayPayCalc());
|
|
|
- /*动员预付款-中期支付证书*/
|
|
|
+ /*动员预付款-中期支付证书-施工*/
|
|
|
this.specialList.add(new InterimPayCertStart());
|
|
|
+ /*动员预付款-中期支付证书-监理*/
|
|
|
+ this.specialList.add(new SupervisionCertificateStart());
|
|
|
}
|
|
|
this.specialList.stream().filter(Special::ready).forEach(special->{
|
|
|
try{
|
|
@@ -573,6 +580,49 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
putOut();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Data
|
|
|
+ @EqualsAndHashCode(callSuper = true)
|
|
|
+ public class SupervisionCertificateStart extends BaseSpecial<SupervisionCertificate> implements Special{
|
|
|
+ private final LinkedHashMap<String,String> itemNamesMap=new LinkedHashMap<>();
|
|
|
+ /* Arrays.asList("正常监理服务费","其他费用","附加监理服务费","额外服务费","缺陷期监理服务费","小计","费用调整","合计","监理单位违约金","奖励","动员预付款","扣回动员预付款","实际支付金额");*/
|
|
|
+ /*正整数对应章节,-1是合计项,-100手填,-101 手填扣款项*/
|
|
|
+ {
|
|
|
+ itemNamesMap.put("施工阶段监理服务费(含施工准备期、施工及交工验收期)","100");
|
|
|
+ itemNamesMap.put("缺陷期监理服务费","300");
|
|
|
+ itemNamesMap.put("其他费用","400");
|
|
|
+ itemNamesMap.put("小计","-1");
|
|
|
+ itemNamesMap.put("费用调整","-100");
|
|
|
+ itemNamesMap.put("合计","-1");
|
|
|
+ itemNamesMap.put("监理单位违约金","-101");
|
|
|
+ itemNamesMap.put("奖励","-100");
|
|
|
+ itemNamesMap.put("动员预付款","-100");
|
|
|
+ itemNamesMap.put("扣回动员预付款","-100");
|
|
|
+ itemNamesMap.put("实际支付金额","-1");
|
|
|
+ }
|
|
|
+ @Override
|
|
|
+ public boolean ready() {
|
|
|
+ return MeterType.START_JL.equals(tec.getMeterType());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void parse() {
|
|
|
+ List<InventoryForm> inventoryForms = tec.meterInfo.getInventoryForms();
|
|
|
+ List<InventoryForm> chapters = tec.meterInfo.getChapter();
|
|
|
+ LinkedHashMap<Integer, List<ChangeToken>> changeTokenListMap = tec.meterInfo.getChangeTokenListMap();
|
|
|
+ /* 本期变更 */
|
|
|
+ List<ChangeToken> changeTokenList0 = changeTokenListMap.get(MeterInfo.CUR);
|
|
|
+ /* 上期末变更 */
|
|
|
+ List<ChangeToken> changeTokenList1 = changeTokenListMap.get(MeterInfo.PRE);
|
|
|
+ /* 本期末变更 */
|
|
|
+ List<ChangeToken> changeTokenList2 = changeTokenListMap.get(MeterInfo.END);
|
|
|
+ /*合同金额*/
|
|
|
+ Map<String, BigDecimal[]> contractMoney = contractMoneySum.apply(inventoryForms);
|
|
|
+ LinkedHashMap<String, InventoryForm> dictMap = chapters.stream().collect(Collectors.toMap(e->chapterPreFixFc.apply(e),e -> e, (v1, v2) -> v1,LinkedHashMap::new));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
@Data
|
|
|
@EqualsAndHashCode(callSuper = true)
|
|
|
public class MaterialsArrivalSp extends BaseSpecial<MaterialsArrival> implements Special{
|
|
@@ -610,8 +660,9 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
/*甬台温,开工预付款款,中期支付证书*/
|
|
|
@Override
|
|
|
public boolean ready() {
|
|
|
- return true;
|
|
|
+ return MeterType.START.equals(tec.getMeterType());
|
|
|
}
|
|
|
+
|
|
|
@Override
|
|
|
public void parse() {
|
|
|
builderFormDatas(InterimPaymentCertificate.class);
|
|
@@ -626,7 +677,8 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
List<ChangeToken> changeTokenList2 = changeTokenListMap.get(MeterInfo.END);
|
|
|
/*合同金额*/
|
|
|
Map<String, BigDecimal[]> contractMoney = contractMoneySum.apply(inventoryForms);
|
|
|
- LinkedHashMap<String, InventoryForm> dictMap = chapters.stream().collect(Collectors.toMap(e->chapterPreFixFc.apply(e),e -> e, (v1, v2) -> v1,LinkedHashMap::new));
|
|
|
+
|
|
|
+ LinkedHashMap<String, InventoryForm> dictMap = chapters.stream().sorted(Comparator.comparingInt(toIntFc)).collect(Collectors.toMap(e->chapterPreFixFc.apply(e),e -> e, (v1, v2) -> v1,LinkedHashMap::new));
|
|
|
dictMap.forEach((k,v)->{
|
|
|
BigDecimal[] sum = contractMoney.get(k);
|
|
|
String ch = v.getFormNumber();
|
|
@@ -729,7 +781,8 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
Map<String,BigDecimal> currentMoney= moneySum.apply(current);
|
|
|
/*合同金额*/
|
|
|
Map<String,BigDecimal[]> contractMoney = contractMoneySum.apply(inventoryForms);
|
|
|
- Map<String,InventoryForm> dictMap= chapters.stream().collect(Collectors.toMap(InventoryForm::getFormNumber, e->e,(v1,v2)->v1));
|
|
|
+ /*Map<String,InventoryForm> dictMap= chapters.stream().collect(Collectors.toMap(InventoryForm::getFormNumber, e->e,(v1,v2)->v1));*/
|
|
|
+ LinkedHashMap<String, InventoryForm> dictMap = chapters.stream().sorted(Comparator.comparingInt(toIntFc)).collect(Collectors.toMap(e->chapterPreFixFc.apply(e),e -> e, (v1, v2) -> v1,LinkedHashMap::new));
|
|
|
for(Map.Entry<String,BigDecimal[]> cm:contractMoney.entrySet()){
|
|
|
if(Func.isEmpty(cm.getKey()))continue;
|
|
|
InventoryForm inventoryForm=dictMap.get(cm.getKey());
|
|
@@ -850,13 +903,6 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
t.setPreviousPeriodEndChangeMoney("");
|
|
|
t.setCurrentPeriodChangeMoney("");
|
|
|
t.setCurrentPeriodEndChangeMoney("");
|
|
|
- int over= capacity-dataList.size()-payItemZj.size();
|
|
|
- if(over>0){
|
|
|
- int index = dataList.indexOf(t);
|
|
|
- for(int i=0;i<over;i++){
|
|
|
- dataList.add(index,new InterimPaymentCertificate(""));
|
|
|
- }
|
|
|
- }
|
|
|
});
|
|
|
dataList.addAll(payItemZj);
|
|
|
/*生成中期支付证书可编辑列表*/
|
|
@@ -933,6 +979,17 @@ public class ExecutorMeter extends FormulaExecutor {
|
|
|
}
|
|
|
/*本次实际支付金额合计*/
|
|
|
fieldDataFcMap.put(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9",(List<InterimPaymentCertificate> list)-> Collections.singletonList(list.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(BaseUtils::obj2DoubleZero).sum()));
|
|
|
+
|
|
|
+ /*占位行*/
|
|
|
+ dataList.stream().filter(t->t.getChapterSeq()!=null&&t.getChapterSeq().contains("小计")).findFirst().ifPresent(t->{
|
|
|
+ int over= capacity-dataList.size();
|
|
|
+ if(over>0){
|
|
|
+ int index = dataList.indexOf(t);
|
|
|
+ for(int i=0;i<over;i++){
|
|
|
+ dataList.add(index,new InterimPaymentCertificate(""));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
/*内容输出*/
|
|
|
putOut();
|
|
|
}
|