소스 검색

计量公式相关

yangyj 1 년 전
부모
커밋
97b0301130

+ 21 - 0
blade-common/src/main/java/org/springblade/common/utils/BaseUtils.java

@@ -125,6 +125,27 @@ public class BaseUtils {
         return !isNumber(value);
     }
 
+
+    public static BigDecimal str2BigDecimal(Object s){
+        if(isNumber(s)){
+            return new BigDecimal(s.toString());
+        }else{
+            return ZERO;
+        }
+    }
+
+    /*默认返回零*/
+    public static Double obj2DoubleZero(Object obj) {
+       if(isNumber(obj)){
+           if(obj instanceof Number){
+               return (double) obj;
+           }
+           return Double.parseDouble(obj.toString());
+       }
+       return 0D;
+    }
+
+
     /**
      * @Description  根据指定大小对LIST进行切分
      * @Param [list, chunkSize:每一段长度]

+ 6 - 2
blade-service-api/blade-business-api/src/main/java/org/springblade/business/utils/NumberUtil.java

@@ -451,7 +451,7 @@ public class NumberUtil {
             strRMB = strRMB.replaceAll("点", "圆");
             String s1 = strRMB.substring(0, strRMB.indexOf("圆") + 1);
             String s2 = strRMB.substring(strRMB.indexOf("圆") + 1);
-            strRMB = s1 + s2.charAt(0) + "角" + s2.charAt(1) + "分";
+            strRMB = s1 + s2.charAt(0) + (s2.charAt(0)=='零'?"":"角") +  (s2.charAt(1)=='零'?"":(s2.charAt(1) + "分"));
         } else {
             strRMB = strRMB + "圆整";
         }
@@ -459,7 +459,11 @@ public class NumberUtil {
     }
 
 /*    public static void main(String[] args) {
-        System.out.println(numberToRMB(26871254.32));
+        System.out.println(numberToRMB(5.01D));
+        System.out.println(numberToRMB(5.1D));
+        System.out.println(numberToRMB(5.10D));
+        System.out.println(numberToRMB(5.00D));
+        System.out.println(numberToRMB(5.11D));
     }*/
 
 }

+ 10 - 3
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/InterimPaymentCertificate.java

@@ -2,6 +2,7 @@ package org.springblade.manager.vo;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import lombok.Data;
+import org.springblade.common.utils.BaseUtils;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -51,14 +52,20 @@ public class InterimPaymentCertificate {
     private String constructionTotal;
     /**是否是汇总小结数据,输出的时候显示,计算的时候不参与*/
     private Boolean isSummary=false;
+    /**章次*/
+    private String chapterSeq;
+
+    public InterimPaymentCertificate(String itemName) {
+        this.itemName = itemName;
+    }
 
     public void calculate(){
-        BigDecimal previousPeriodEndPayBd = new BigDecimal(previousPeriodEndPay);
-        BigDecimal currentPeriodPayBd = new BigDecimal(currentPeriodPay);
+        BigDecimal previousPeriodEndPayBd = BaseUtils.str2BigDecimal(previousPeriodEndPay);
+        BigDecimal currentPeriodPayBd = BaseUtils.str2BigDecimal(currentPeriodPay);
         BigDecimal currentPeriodEndPayBd = previousPeriodEndPayBd.add(currentPeriodPayBd);
         this.currentPeriodEndPay = currentPeriodEndPayBd.toString();
         if(BigDecimal.ZERO.compareTo(currentPeriodEndPayBd)<0) {
-            BigDecimal payRatioBd = currentPeriodPayBd.multiply(new BigDecimal(100)).divide(currentPeriodEndPayBd, 2, RoundingMode.HALF_UP);
+            BigDecimal payRatioBd = currentPeriodEndPayBd.multiply(new BigDecimal(100)).divide(BaseUtils.str2BigDecimal(this.contractAmount), 2, RoundingMode.HALF_UP);
             this.payRatio = payRatioBd.toString();
         }
     }

+ 18 - 5
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java

@@ -25,10 +25,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang.StringUtils;
@@ -131,7 +129,7 @@ public class InterimPayCertificate extends BaseEntity {
     @ApiModelProperty(value = "每份表格独立的PDF地址")
     private String fileUrlList;
 
-    @TableField(exist = false)
+/*    @TableField(exist = false)
     private List<Map<String,String>> urlListData = new ArrayList<>();
     public List<Map<String,String>> getUrlListData() {
         if(fileUrlList!=null && StringUtils.isNotEmpty(fileUrlList)){
@@ -148,5 +146,20 @@ public class InterimPayCertificate extends BaseEntity {
 
     public void setUrlListData(List<Map<String,String>> urlListData) {
         this.urlListData = urlListData;
+    }*/
+
+    public List<Map<String,String>> getUrlListData() {
+        if(StringUtils.isNotEmpty(fileUrlList)){
+           LinkedHashMap<String,String> titleUrlMap= JSON.parseObject(fileUrlList, LinkedHashMap.class);
+           if(Func.isNotEmpty(titleUrlMap)){
+               return titleUrlMap.entrySet().stream().map(kv->{
+                   Map<String,String> map=new HashMap<>();
+                   map.put("title",kv.getKey());
+                   map.put("url",kv.getValue());
+                   return map;
+               }).collect(Collectors.toList());
+           }
+        }
+        return null;
     }
 }

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

@@ -42,13 +42,6 @@ public class ExecutorInit extends FormulaExecutor {
         if(MeterType.MATERIAL.equals(tec.getMeterType())||MeterType.START.equals(tec.getMeterType())){
             /*加载计量期信息*/
             tec.periodInfo=meterPeriodFc.apply(tec.getReportId());
-            String periodNumber = tec.periodInfo.getPeriodNumber();
-            if(!BaseUtils.isNumber(periodNumber)){
-                periodNumber= RegexUtil.findResult("[\\d一二三四五六七八九十]+",periodNumber);
-              if(periodNumber!=null){
-                  tec.periodInfo.setPeriodNumber(periodNumber);
-              }
-            }
             tec.setPeriodId(tec.periodInfo.getId());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
             /*计量期*/
@@ -56,6 +49,13 @@ public class ExecutorInit extends FormulaExecutor {
             /*计量单元树*/
             tec.setMeterTreeMap(getMeterTreeMapAsync(tec.getContractId()));
         }
+        String periodNumber = tec.periodInfo.getPeriodNumber();
+        if(!BaseUtils.isNumber(periodNumber)){
+            periodNumber= RegexUtil.findResult("[\\d一二三四五六七八九十]+",periodNumber);
+            if(periodNumber!=null){
+                tec.periodInfo.setPeriodNumber(periodNumber);
+            }
+        }
         tec.formDataMap.putAll(FormulaUtils.toFormDataMap(tec.periodInfo));
 
 

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

@@ -338,14 +338,19 @@ public class ExecutorMeter extends FormulaExecutor {
                  Map<String,BigDecimal> currentMoney= this.moneySum.apply(current);
                 /*合同金额*/
                  Map<String,BigDecimal[]> contractMoney = this.contractMoneySum.apply(inventoryForms);
+                 Map<String,InventoryForm> dictMap= chapters.stream().collect(Collectors.toMap(InventoryForm::getFormNumber, e->e));
                  for(Map.Entry<String,BigDecimal[]> cm:contractMoney.entrySet()){
                        if(Func.isEmpty(cm.getKey()))continue;
-                      InterimPaymentCertificate ipc = new InterimPaymentCertificate();
+                     InventoryForm inventoryForm=dictMap.get(cm.getKey());
+                      InterimPaymentCertificate ipc = new InterimPaymentCertificate(inventoryForm.getFormName());
+                      /*中期支付汇总的章次*/
+                      String ch=inventoryForm.getFormNumber();
+                      ipc.setChapterSeq(ch+(BaseUtils.isNumber(ch)?"章":""));
                       BigDecimal[]  bmMoney =cm.getValue();
                       ipc.setContractAmount(bmMoney[0].toString());
                       ipc.setRevisedAmount(bmMoney[1].toString());
-                      ipc.setPreviousPeriodEndPay(previousMoney.getOrDefault(cm.getKey(),BigDecimal.ZERO).toString());
-                      ipc.setCurrentPeriodPay(currentMoney.getOrDefault(cm.getKey(),BigDecimal.ZERO).toString());
+                      ipc.setPreviousPeriodEndPay(StringUtils.handleNull(previousMoney.get(cm.getKey())));
+                      ipc.setCurrentPeriodPay(StringUtils.handleNull(currentMoney.get(cm.getKey())));
                       /*由已知求未知*/
                       ipc.calculate();
                       dataList.add(ipc);
@@ -353,7 +358,8 @@ public class ExecutorMeter extends FormulaExecutor {
              }
             /*数据获取end*/
             /*本期实际支付合计计算*/
-             double total=dataList.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(Double::parseDouble).sum();
+            interimPaymentCertificates=dataList;
+             double total=dataList.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(BaseUtils::obj2DoubleZero).sum();
              if(total>0){
                  FormData ft =tec.formDataMap.get(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9");
                  put2FormData(ft,total);
@@ -362,7 +368,7 @@ public class ExecutorMeter extends FormulaExecutor {
                  FormData constructFd =tec.formDataMap.get(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_11");
                  put2FormData(constructFd,StringUtils.number2String(total*0.75,2));
              }
-            fieldDataFcMap.put(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9",(List<InterimPaymentCertificate> list)-> Collections.singletonList(list.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(Double::parseDouble).sum()));
+            fieldDataFcMap.put(InterimPaymentCertificate.TBN+ StringPool.COLON+"key_9",(List<InterimPaymentCertificate> list)-> Collections.singletonList(list.stream().map(InterimPaymentCertificate::getCurrentPeriodPay).mapToDouble(BaseUtils::obj2DoubleZero).sum()));
             /*内容输出*/
             putOut();
         }
@@ -381,7 +387,7 @@ public class ExecutorMeter extends FormulaExecutor {
         }
 
         /*合计字段*/
-        BiFunction<List<InterimPaymentSummary>,Function<InterimPaymentSummary,String>,String> bfc= (list,fc) -> StringUtils.number2String(list.stream().map(fc).mapToDouble(Double::parseDouble).sum(),1);
+        BiFunction<List<InterimPaymentSummary>,Function<InterimPaymentSummary,String>,String> bfc= (list,fc) -> StringUtils.number2String(list.stream().map(fc).mapToDouble(BaseUtils::obj2DoubleZero).sum(),1);
 
 
         @Override

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

@@ -90,7 +90,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, MeterPeriodInfo> getInterimMeterPeriodFc() {
         return certificateId->{
-            String sql="select a.period_number number,a.sort 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.id="+certificateId;
+            String sql="select a.period_number periodNumber,a.sort ,b.print_date formPrintDate 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.id="+certificateId;
             return this.jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(MeterPeriodInfo.class));
         };
     }