浏览代码

开工预付款合计

yangyj 1 年之前
父节点
当前提交
6e158fe9a5

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

@@ -25,4 +25,6 @@ public class StartPayForm {
     private String calculateFormula;
     private String calculateFormula;
     /**申请依据*/
     /**申请依据*/
     private String applyCause;
     private String applyCause;
+    /**支付期限*/
+    private String payDate;
 }
 }

+ 23 - 2
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -863,10 +863,31 @@ public class FormulaUtils {
         }
         }
     }
     }
 
 
+    public static LinkedHashMap<String,String> analyzeHtml(String uri,String key,Document document){
+        try {
+            String filter=" [keyname]";
+            if(Func.isNotBlank(key)){
+                filter="[keyname^="+key+"__]";
+            }
+            if(document==null){
+                InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(uri);
+                document=Jsoup.parse(IoUtil.readToString(inputStreamByUrl));
+            }
+        LinkedHashMap<String,String> map=     document.select("table").first()
+                    .select(filter).stream()
+                    .filter(d -> Func.isNotEmpty(d.attr("keyname"))&&d.attr("keyname").split("__")[0].length()>3)
+                    .sorted(Comparator.comparingInt(e->Integer.parseInt(e.attr("keyname").split("__")[0].split("_")[1])))
+                    .collect(Collectors.toMap(e->e.attr("placeholder"),e->e.attr("keyname"),(v1,v2)-> v1+","+v2,LinkedHashMap::new));
+            return map;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return new LinkedHashMap<>();
+    }
+
 /*    public static void main(String[] args) {
 /*    public static void main(String[] args) {
         String uri="C:\\www\\wwwroot\\Users\\hongchuangyanfa\\Desktop\\privateUrl\\1661661730033369088.html";
         String uri="C:\\www\\wwwroot\\Users\\hongchuangyanfa\\Desktop\\privateUrl\\1661661730033369088.html";
-        getElementExcelCoords(uri,"",null);
-        System.out.println();
+        analyzeHtml(uri,"",null);
     }*/
     }*/
 
 
     /*解析html里的电签关键字*/
     /*解析html里的电签关键字*/

+ 6 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/FormulaController.java

@@ -871,6 +871,12 @@ public class FormulaController {
         return R.data(this.service.formulasForNode(pkeyId,tableName, elementName));
         return R.data(this.service.formulasForNode(pkeyId,tableName, elementName));
     }
     }
 
 
+
+    @GetMapping("/analyzeForm")
+    public R<Object> analyzeForm(@NotNull Long pkeyId,String elementName,Integer type){
+        return R.data(this.service.analyzeForm(pkeyId, elementName, type));
+    }
+
     @GetMapping("/test")
     @GetMapping("/test")
     public R<Object> meter(Long contractId,Long reportId ,Integer type){
     public R<Object> meter(Long contractId,Long reportId ,Integer type){
         /*合同段id,报表Id,报表类型中间计量0,材料1,开工2*/
         /*合同段id,报表Id,报表类型中间计量0,材料1,开工2*/

+ 31 - 21
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -253,39 +253,46 @@ public class ExecutorMeter extends FormulaExecutor {
             List<StartPayForm> startPayForms= stayPayFormFc.apply(tec.getContractId());
             List<StartPayForm> startPayForms= stayPayFormFc.apply(tec.getContractId());
             if(Func.isNotEmpty(startPayForms)){
             if(Func.isNotEmpty(startPayForms)){
                 startPayForms.sort(Comparator.comparingInt(StartPayForm::getPeriodSort));
                 startPayForms.sort(Comparator.comparingInt(StartPayForm::getPeriodSort));
-                double sum,previousD,currentD;
+                BigDecimal sum,previousD,currentD;
                 List<StartPayForm> current = startPayForms.stream().filter(s->s.getMeterPeriodId().equals(tec.getPeriodId())).collect(Collectors.toList());
                 List<StartPayForm> current = startPayForms.stream().filter(s->s.getMeterPeriodId().equals(tec.getPeriodId())).collect(Collectors.toList());
                 if(current.size()>0){
                 if(current.size()>0){
                     StartPayForm one = current.get(0);
                     StartPayForm one = current.get(0);
-                    sum= startPayForms.stream().filter(s->s.getPeriodSort()<=one.getPeriodSort()).mapToDouble(s->Double.parseDouble(s.getMeterMoney())).sum();
-                    /*累计*/
-                    elementWriter.write(fdm.get(AdvancePaymentCertificate.TBN+":key_3"),StringUtils.number2String(sum,2));
-                    sumStart=StringUtils.number2String(sum,3);
-                    currentD=current.stream().mapToDouble(s->Double.parseDouble(s.getMeterMoney())).sum();
-                    elementWriter.write(fdm.get(AdvancePaymentCertificate.TBN+":key_2"),StringUtils.number2String(currentD,2));
-                    currentStart=StringUtils.number2String(currentD,3);
+                    sum= startPayForms.stream().filter(s->s.getPeriodSort()<=one.getPeriodSort()).map(s->BaseUtils.str2BigDecimal(s.getMeterMoney())).reduce(BigDecimal.ZERO,BigDecimal::add);
+                    sumStart=sum.toPlainString();
+                    currentD=current.stream().map(s->BaseUtils.str2BigDecimal(s.getMeterMoney())).reduce(BigDecimal.ZERO,BigDecimal::add);;
+                    currentStart=currentD.toPlainString();
                     tec.getPeriodInfo().setCurTotal(currentStart);
                     tec.getPeriodInfo().setCurTotal(currentStart);
-                    FormulaUtils.elementFindByKey(fdm,"key_5").ifPresent(t->{
-                        elementWriter.write(t,one.getFileName());
-                    });
+                    tec.getPeriodInfo().setTotal(sumStart);
+                    Map<String,Object> dataMap= new HashMap<>();
+                    /*本期支付*/
+                    dataMap.put("key_2",currentD.toPlainString());
+                    /*累计*/
+                    dataMap.put("key_3",sum.toPlainString());
+                    dataMap.put("key_5",one.getFileName());
                     /*计算式*/
                     /*计算式*/
-                    FormulaUtils.elementFindByKey(fdm,"key_6").ifPresent(t->{
-                        elementWriter.write(t,one.getCalculateFormula());
-                    });
+                    dataMap.put("key_6",one.getCalculateFormula());
                     /*申请依据*/
                     /*申请依据*/
-                    FormulaUtils.elementFindByKey(fdm,"key_7").ifPresent(t->{
-                        elementWriter.write(t,one.getApplyCause());
-                    });
+                    dataMap.put("key_7",one.getApplyCause());
+                    /*支付期限*/
+                    dataMap.put("key_8",one.getPayDate());
                     /*上一期*/
                     /*上一期*/
                   Optional<Integer> op=startPayForms.stream().map(StartPayForm::getPeriodSort).filter(s->s<one.getPeriodSort()).max(Comparator.comparingInt(s->s));
                   Optional<Integer> op=startPayForms.stream().map(StartPayForm::getPeriodSort).filter(s->s<one.getPeriodSort()).max(Comparator.comparingInt(s->s));
                   if(op.isPresent()){
                   if(op.isPresent()){
-                      previousD= startPayForms.stream().filter(s->s.getPeriodSort().equals(one.getPeriodSort())).mapToDouble(s->Double.parseDouble(s.getMeterMoney())).sum();
-                      elementWriter.write(fdm.get(AdvancePaymentCertificate.TBN+":key_1"),StringUtils.number2String(previousD,2));
+                      previousD= startPayForms.stream().filter(s->s.getPeriodSort().equals(one.getPeriodSort())).map(s->BaseUtils.str2BigDecimal(s.getMeterMoney())).reduce(BigDecimal.ZERO,BigDecimal::add);
+                      dataMap.put("key_1",previousD.toPlainString());
+                      tec.getPeriodInfo().setPreTotal(previousD.toPlainString());
                   }
                   }
+                  setValue(dataMap,fdm);
                 }
                 }
             }
             }
-
-
+        }
+        /*写入目标元素*/
+        public void setValue(Map<String,Object> dataMap,LinkedHashMap<String,FormData>  fdm){
+            dataMap.forEach((k,v)->{
+                FormulaUtils.elementFindByKey(fdm,k).ifPresent(t->{
+                    elementWriter.write(t,v);
+                });
+            });
         }
         }
 
 
     }
     }
@@ -642,6 +649,9 @@ public class ExecutorMeter extends FormulaExecutor {
                 if("小计".equals(k)){
                 if("小计".equals(k)){
                     addGetSetConfig(sc, summaryConfigMap, SupervisionCertificate::getContractAmount, sc::setContractAmount);
                     addGetSetConfig(sc, summaryConfigMap, SupervisionCertificate::getContractAmount, sc::setContractAmount);
                 }
                 }
+                if("合计".equals(k)){
+                    addGetSetConfig(sc, summaryConfigMap, SupervisionCertificate::getContractAmount, sc::setContractAmount);
+                }
                 if("动员预付款".equals(k)){
                 if("动员预付款".equals(k)){
                     sc.setContractAmount(StringUtils.handleNull(tec.meterInfo.getBaseInfo().getDyTotalAmount()));
                     sc.setContractAmount(StringUtils.handleNull(tec.meterInfo.getBaseInfo().getDyTotalAmount()));
                     sc.setCurrentAmount(currentStart);
                     sc.setCurrentAmount(currentStart);

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaService.java

@@ -92,5 +92,9 @@ public interface IFormulaService extends BaseService<Formula> {
     /**计量公式执行 0中间,1材料,2开工*/
     /**计量公式执行 0中间,1材料,2开工*/
     List<ReportResult> execute3(Long contractId, Long periodId, Integer type);
     List<ReportResult> execute3(Long contractId, Long periodId, Integer type);
 
 
+   /**获取当前节点的所有元素执行公式,可以按表和元素名筛选*/
     R<Object>formulasForNode(Long pkeyId,String tableName,String elementName);
     R<Object>formulasForNode(Long pkeyId,String tableName,String elementName);
+    /**获取当前节点的所有元素单元格坐标,可以按表和元素名筛选*/
+    R<Object>analyzeForm(Long pkeyId,String elementName,Integer type);
+
 }
 }

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

@@ -133,7 +133,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     @Override
     public Function<Long, List<StartPayForm>> getStayPayFormFc() {
     public Function<Long, List<StartPayForm>> getStayPayFormFc() {
         return  contractId->{
         return  contractId->{
-            String sql="select  a.file_names file_name,a.calculate_formula,a.apply_cause,  a.meter_money meterMoney ,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 ,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;
             return getEntityList(sql,StartPayForm.class);
             return getEntityList(sql,StartPayForm.class);
         };
         };
     }
     }

+ 30 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -1928,6 +1928,36 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             return R.data("节点不存在");
             return R.data("节点不存在");
     }
     }
 
 
+    @Override
+    public R<Object> analyzeForm(Long pkeyId,  String elementName,Integer type) {
+         WbsTreeContract wtc=wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId,pkeyId));
+         if(wtc!=null) {
+             LinkedHashMap<String, String> elementKeyMap = FormulaUtils.analyzeHtml(wtc.getHtmlUrl(), null, null);
+             LinkedHashMap<String, Object> fdm = new LinkedHashMap<>();
+             Predicate<String> nameTest= s-> true;
+             if(StringUtils.isNotEmpty(elementName)){
+                 nameTest=s->s.contains(elementName);
+             }
+             Predicate<String> finalNameTest = nameTest;
+             elementKeyMap.forEach((k, v)->{
+                 if(finalNameTest.test(elementName)) {
+                     if(type==0) {
+                         LinkedHashMap<String, Object> element = new LinkedHashMap<>();
+                         fdm.put(k, element);
+                         element.putAll(Arrays.stream(v.split(",")).map(e -> e.split("__"))
+                                 .sorted(Comparator.comparingInt(a -> Integer.parseInt(a[1].split("_")[0])))
+                                 .collect(Collectors.groupingBy(a -> a[0], Collectors.mapping(a -> a[1].split("_"), Collectors.toList()))));
+                     }else if(type==1){
+                         fdm.put(k,Arrays.stream(v.split(",")).map(e -> e.split("__")[0]).collect(Collectors.toList()));
+                     }
+                 }
+             });
+             return R.data(fdm);
+         }
+
+        return null;
+    }
+
     @Override
     @Override
     public void formulaInto(List<FormData> curFormDatas, String projectId, String nodeId, ExecuteType executeType) {
     public void formulaInto(List<FormData> curFormDatas, String projectId, String nodeId, ExecuteType executeType) {
         if(executeType.equals(ExecuteType.INSPECTION)){
         if(executeType.equals(ExecuteType.INSPECTION)){