yangyj 7 月之前
父節點
當前提交
2a8da3eb77

+ 9 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java

@@ -88,6 +88,15 @@ public class MeterPeriodInfo implements  DataModel{
     /**动员预付关联*/
     private String materialIds;
 
+    /**计量期年*/
+    private Integer periodYear;
+    /**计量期月*/
+    private Integer periodMonth;
+
+    public  Integer getYearMonthInt(){
+        return this.periodYear*100+this.periodMonth;
+    }
+
     public String getStartDateStr() {
         return BaseUtils.toDateStr(startDate);
     }

+ 9 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/StartPayForm.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.vo;
 
 import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
 import java.time.LocalDate;
@@ -32,4 +33,12 @@ public class StartPayForm {
     /**业务日期*/
     private LocalDate busDate;
 
+    /**计量期年*/
+    private Integer periodYear;
+    /**计量期月*/
+    private Integer periodMonth;
+
+    public  Integer getYearMonthInt(){
+        return this.periodYear*100+this.periodMonth;
+    }
 }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -86,11 +86,11 @@ public class ExecutorInit extends FormulaExecutor {
         //dataModel2FormData(baseInfo);
     }
     private MeterPeriodInfo addPeriodInfo(){
+        /*加载合同材料、材料清单*/
+        tec.meterInfo.setMaterialsAll(materialFormFc.apply(tec.getContractId()));
         if(MeterType.MATERIAL.equals(tec.getMeterType())||MeterType.START.equals(tec.getMeterType())||MeterType.START_JL.equals(tec.getMeterType())){
             /*加载计量期信息*/
             tec.periodInfo=meterPeriodFc.apply(tec.getReportId());
-            /*加载合同材料、材料清单*/
-            tec.meterInfo.setMaterialsAll(materialFormFc.apply(tec.getContractId()));
         }else if(MeterType.INTERIM.equals(tec.getMeterType())||MeterType.INTERIM_JL.equals(tec.getMeterType())){
             /*计量期*/
             periodInfo();;

+ 26 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -232,6 +232,7 @@ public class ExecutorMeter extends FormulaExecutor {
             this.specialList.add(new MaterialSp());
             this.specialList.add(new MaterialsArrivalSp());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
+            this.specialList.add(new MaterialSp());
             /*材料*/
             this.specialList.add(new MaterialsArrivalSp());
             /*中期支付证书*/
@@ -466,7 +467,11 @@ public class ExecutorMeter extends FormulaExecutor {
         public void parse() {
             builderFormDatas(MaterialPriceDifferential.class);
             /*本期材料*/
-            materials=tec.meterInfo.getMaterialsAll().stream().filter(e->tec.getPeriodId().equals(e.getPeriodId())).collect(Collectors.toList());
+            if(MeterType.INTERIM.equals(tec.getMeterType())){
+                materials=tec.meterInfo.getMaterialsAll();
+            }else{
+                materials=tec.meterInfo.getMaterialsAll().stream().filter(e->tec.getPeriodId().equals(e.getPeriodId())).collect(Collectors.toList());
+            }
             if(materials.size()>0){
                 dataList.addAll(materials.stream().map(e->{
                     MaterialPriceDifferential mpd = new MaterialPriceDifferential();
@@ -1049,6 +1054,7 @@ public class ExecutorMeter extends FormulaExecutor {
                          /*中期计量第一期之前的*/
                         List<StartPayForm> startPayForm = tec.getMeterInfo().getStartPayFormAll();
                         if(startPayForm.size()>0){
+                            InterimPayCertificateItem preStart = previousMap.get("动员预付款");
                             if(StringUtils.isNotEmpty(tec.getPeriodInfo().getStartIds())) {
                                 String[] startIds = tec.getPeriodInfo().getStartIds().split(",");
                                 if (Arrays.stream(startIds).anyMatch(BaseUtils::isNumber)) {
@@ -1062,21 +1068,24 @@ public class ExecutorMeter extends FormulaExecutor {
                                         return false;
                                     }).collect(Collectors.toList());
                                     if (Func.isNotEmpty(list)) {
-                                        StartPayForm relate = list.get(list.size() - 1);
-                                        BigDecimal pre = startPayForm.stream().filter(s -> s.getPeriodSort() <relate.getPeriodSort()).map(s -> BaseUtils.str2BigDecimal(s.getMeterMoney())).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                        StartPayForm relate = list.get(0);
+                                       /* BigDecimal pre = startPayForm.stream().filter(s -> s.getPeriodSort() <relate.getPeriodSort()).map(s -> BaseUtils.str2BigDecimal(s.getMeterMoney())).reduce(BigDecimal.ZERO, BigDecimal::add);*/
                                         BigDecimal cur = list.stream().map(s -> BaseUtils.str2BigDecimal(s.getMeterMoney())).reduce(BigDecimal.ZERO, BigDecimal::add);
                                         startPay.setCurrentPeriodPay(cur.toPlainString());
-                                        startPay.setPreviousPeriodEndPay(pre.toPlainString());
+                                        if(preStart!=null) {
+                                            /*获取上期末支付*/
+                                            startPay.setPreviousPeriodEndPay(preStart.getPreviousPeriodEndPay());
+                                        }
                                         startPay.setCurrentPeriodEndPay(addFc.apply(startPay.getCurrentPeriodPay(), startPay.getPreviousPeriodEndPay()));
                                     }
                                 }
                             }else{
-                                InterimPayCertificateItem preStart = previousMap.get("动员预付款");
                                 if(preStart!=null) {
                                     startPay.setPreviousPeriodEndPay(preStart.getCurrentPeriodEndPay());
                                     startPay.setCurrentPeriodEndPay(preStart.getCurrentPeriodEndPay());
                                 }else{
-                                    BigDecimal first = startPayForm.stream().map(s -> BaseUtils.str2BigDecimal(s.getMeterMoney())).reduce(BigDecimal.ZERO, BigDecimal::add);
+                                    /*不存在上期,则认为是第一期,需要根据计量期时间筛选*/
+                                    BigDecimal first = startPayForm.stream().filter(s->s.getYearMonthInt()<=tec.periodInfo.getYearMonthInt()).map(s -> BaseUtils.str2BigDecimal(s.getMeterMoney())).reduce(BigDecimal.ZERO, BigDecimal::add);
                                     startPay.setPreviousPeriodEndPay(first.toPlainString());
                                     startPay.setCurrentPeriodEndPay(first.toPlainString());
                                 }
@@ -1204,16 +1213,24 @@ public class ExecutorMeter extends FormulaExecutor {
                          }
                          finalBlj.setCurrentPeriodEndPay(multiFc.apply(t.getCurrentPeriodEndPay(),"0.1"));
                          dataList.stream().filter(e-> "实际支付".equals(e.getChapterSeq())).findFirst().ifPresent(w->{
-                             w.setCurrentPeriodPay(subtractFc.apply(w.getCurrentPeriodPay(),finalBlj.getCurrentPeriodPay()));
+                             w.setCurrentPeriodPay(StringUtils.number2String(subtractFc.apply(w.getCurrentPeriodPay(),finalBlj.getCurrentPeriodPay()),0));
                              if(BaseUtils.obj2DoubleZero(t.getPreviousPeriodEndPay())>0) {
-                                 w.setPreviousPeriodEndPay(subtractFc.apply(w.getPreviousPeriodEndPay(), finalBlj.getPreviousPeriodEndPay()));
+                                 w.setPreviousPeriodEndPay(StringUtils.number2String(subtractFc.apply(w.getPreviousPeriodEndPay(), finalBlj.getPreviousPeriodEndPay()),0));
                              }
-                             w.setCurrentPeriodEndPay(subtractFc.apply(w.getCurrentPeriodEndPay(),finalBlj.getCurrentPeriodEndPay()));
+                             w.setCurrentPeriodEndPay(StringUtils.number2String(subtractFc.apply(w.getCurrentPeriodEndPay(),finalBlj.getCurrentPeriodEndPay()),0));
+                         });
+                         itemList.stream().filter(item->"保留金".equals(item.getChapterSeq())).findFirst().ifPresent(w->{
+                             w.setPreviousPeriodEndPay(finalBlj.getPreviousPeriodEndPay());
+                             w.setCurrentPeriodPay(finalBlj.getCurrentPeriodPay());
+                             w.setCurrentPeriodEndPay(finalBlj.getCurrentPeriodEndPay());
                          });
                      });
                      if(peerMap.size()>0) {
                          /*等合计项目计算完毕,再赋值*/
                          peerMap.forEach((sc, item) -> {
+                             if("合计".equals(item.getChapterSeq())){
+                                 item.setContractAmount(sc.getContractAmount());
+                             }
                              item.setPreviousPeriodEndPay(sc.getPreviousPeriodEndPay());
                              item.setCurrentPeriodPay(sc.getCurrentPeriodPay());
                              item.setCurrentPeriodEndPay(sc.getCurrentPeriodEndPay());

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java

@@ -134,7 +134,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, List<StartPayForm>> getStayPayFormFc() {
         return  contractId->{
-            String sql="select  a.file_names file_name,a.calculate_formula,a.apply_cause,a.pay_date, a.meter_money meterMoney,a.business_date bus_date ,b.id meterPeriodId,b.sort periodSort from s_start_pay_meter_form a join s_meter_period b on a.meter_period_id =b.id  where  a.is_deleted =0  and a.contract_id="+contractId;
+            String sql="select  a.file_names file_name,a.calculate_formula,a.apply_cause,a.pay_date, a.meter_money meterMoney,a.business_date bus_date ,b.id meterPeriodId,b.sort periodSort ,b.period_year,b.period_month from s_start_pay_meter_form a join s_meter_period b on a.meter_period_id =b.id  where  a.is_deleted =0  and a.contract_id="+contractId;
             return getEntityList(sql,StartPayForm.class);
         };
     }
@@ -151,7 +151,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, List<MeterPeriodInfo>> getInterimMeterPeriodAllFc() {
           return contractId->{
-            String sql="select a.id,a.pay_number,a.start_date,b.end_date, a.period_number periodNumber,a.sort ,b.print_date formPrintDate ,b.pay_money curTotal,b.id reportId,b.start_date,b.end_date,b.start_period_ids start_ids ,b.material_period_ids material_ids  from  s_contract_meter_period a join s_interim_pay_certificate b on a.id=b.contract_period_id where a.is_deleted=0 and  b.is_deleted=0 and b.contract_id="+contractId+" order by a.sort";
+            String sql="select a.period_year ,a.period_month, a.id,a.pay_number,a.start_date,b.end_date, a.period_number periodNumber,a.sort ,b.print_date formPrintDate ,b.pay_money curTotal,b.id reportId,b.start_date,b.end_date,b.start_period_ids start_ids ,b.material_period_ids material_ids  from  s_contract_meter_period a join s_interim_pay_certificate b on a.id=b.contract_period_id where a.is_deleted=0 and  b.is_deleted=0 and b.contract_id="+contractId+" order by a.sort";
             return   getEntityList(sql,MeterPeriodInfo.class);
         };
     }