Przeglądaj źródła

回扣动员预付款

yangyj 1 rok temu
rodzic
commit
f6617cb7e9

+ 25 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/RebateIncentiveAdvPay.java

@@ -2,14 +2,25 @@ package org.springblade.manager.vo;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import lombok.Data;
+import org.springblade.common.utils.BaseUtils;
 
 /**
  * @author yangyj
  * @Date 2024/6/18 17:18
  * @description 回扣动员预付款一览表
+ * #1.当进度总额>(合同总额(不含变更)*30%)的时候开始计算,否则直接按零计
+ * #2.本期扣款=A-上期末扣回款 A=上期末已支付动员预付款总额*(进度总额-合同总额(不含变更)*30%)* 2 / 合同总额(不含变更)
+ * #3.当A>上期末已支付动员预付款总额的时候,本期扣回=上期末已支付动员预付款总额-上期末扣回款
+ * #4.如果本期扣款计算结果<0,则不能显示负数,按零计。
  */
 @Data
 public class RebateIncentiveAdvPay implements  DataModel{
+    /*#1.当进度总额>(合同总额(不含变更)*30%)的时候开始计算,否则直接按零计
+#2.本期扣款=A-上期末扣回款 A=上期末已支付动员预付款总额*(进度总额-合同总额(不含变更)*30%)* 2 / 合同总额(不含变更)
+#3.当A>上期末已支付动员预付款总额的时候,本期扣回=上期末已支付动员预付款总额-上期末扣回款
+#4.如果本期扣款计算结果<0,则不能显示负数,按零计。
+   E=2*((C-A*0.3)*B)/A
+*/
     public static final String ID="20360000000";
     public static final String TBN="RIAdvPay";
     public static final String TBN_CH="回扣动员预付款一览表";
@@ -27,4 +38,18 @@ public class RebateIncentiveAdvPay implements  DataModel{
     private String previousPay ;
     @JSONField(name = "key_4",label="本期扣回金额",ordinal = 10)
     private String currentPay ;
+    public void calc(String contractAmount,String dyTotalAmount){
+        double contractAmountD=BaseUtils.obj2DoubleZero(contractAmount);
+        double x=(2*(BaseUtils.obj2DoubleZero(subtotal)-0.3*contractAmountD)*BaseUtils.obj2DoubleZero(dyTotalAmount))/contractAmountD;
+        if(x<0){
+            /*扣回款本身就是负数*/
+            x=Math.abs(x);
+            String s=Double.toString(x);
+            this.retained =s ;
+            this.currentPay=s;
+            this.endPay=s;
+        }
+
+    }
+
 }

+ 6 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -828,16 +828,14 @@ public class ExecutorMeter extends FormulaExecutor {
                               t.setCurrentPeriodEndChangeMoney("");
                      });
                      RebateIncentiveAdvPay rebateIncentiveAdvPay = new RebateIncentiveAdvPay();
-                     payItemZj.stream().filter(t->t.getChapterSeq()!=null&&t.getChapterSeq().contains("小计")).findFirst().ifPresent(t->{
-                         rebateIncentiveAdvPay.setSubtotal(t.getCurrentPeriodEndPay());
-                     });
-                     payItemZj.stream().filter(t->t.getChapterSeq()!=null&&t.getChapterSeq().contains("扣回动员预付款")).findFirst().ifPresent(t->{
-
-                     });
-                     tec.formDataMap.putAll(FormulaUtils.toFormDataMap(rebateIncentiveAdvPay));
                      dataList.addAll(payItemZj);
                      /*分行合计列,合计的时候需要计入手填部分*/
                      fieldGetSet(summaryConfigMap,x->!x.getIsSummary(),InterimPaymentCertificate::getInvertState);
+                     payItemZj.stream().filter(t->t.getChapterSeq()!=null&&t.getChapterSeq().contains("小计")).findFirst().ifPresent(t->{
+                         rebateIncentiveAdvPay.setSubtotal(t.getCurrentPeriodEndPay());
+                         BaseInfo baseInfo = tec.meterInfo.getBaseInfo();
+                         rebateIncentiveAdvPay.calc(baseInfo.getContractAmount().toPlainString(),baseInfo.getDyTotalAmount().toPlainString());
+                     });
                      if(peerMap.size()>0) {
                          /*等合计项目计算完毕,再赋值*/
                          peerMap.forEach((sc, item) -> {
@@ -846,7 +844,7 @@ public class ExecutorMeter extends FormulaExecutor {
                              item.setCurrentPeriodEndPay(sc.getCurrentPeriodEndPay());
                          });
                      }
-                     FormulaUtils.toFormDataMap(rebateIncentiveAdvPay);
+                     tec.formDataMap.putAll(FormulaUtils.toFormDataMap(rebateIncentiveAdvPay));
                  }
              }
             /*数据获取end*/