Parcourir la source

计量公式相关

yangyj il y a 1 an
Parent
commit
d38fc7ce34

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

@@ -121,6 +121,10 @@ public class BaseUtils {
       return Pattern.matches(NUM_REG,stringValue);
     }
 
+    public static  boolean isNotNumber(Object value){
+        return !isNumber(value);
+    }
+
     /**
      * @Description  根据指定大小对LIST进行切分
      * @Param [list, chunkSize:每一段长度]

+ 21 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/AdvancePaymentCertificate.java

@@ -0,0 +1,21 @@
+package org.springblade.manager.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+/**
+ * @author yangyj
+ * @Date 2024/2/26 15:57
+ * @description 开工预付款支付证书
+ */
+public class AdvancePaymentCertificate {
+    public static final String ID="20280000000";
+    public static final String TBN="APayCert";
+    public static final String TBN_CH="开工预付款支付证书";
+    /**项目名称*/
+    @JSONField(name = "key_1",label="上次开工预付款",ordinal = 1)
+    private String previousStayPay;
+    @JSONField(name = "key_2",label="本次申请预付开工预付款",ordinal = 2)
+    private String currentStayPay;
+    @JSONField(name = "key_3",label="累计预付开工预付款",ordinal = 3)
+    private String totalStayPay;
+}

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

@@ -0,0 +1,22 @@
+package org.springblade.manager.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+ * @author yangyj
+ * @Date 2024/2/26 16:24
+ * @description 开工预付款计量清单
+ */
+@Data
+public class StartPayForm {
+    /**计量期id*/
+    private Long meterPeriodId;
+    /**
+     * 计量金额
+     */
+    private String meterMoney;
+    /**计量期排序*/
+    private Integer periodSort;
+}

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

@@ -144,7 +144,7 @@ public class FormulaController {
                 old.setMap(fa.getMap());
                 old.setDev(fa.getDev());
                 old.setScale(fa.getScale());
-                this.service.updateById(old);
+              //  this.service.updateById(old);
                 this.service.update(Wrappers.<Formula>lambdaUpdate().set(Formula::getFormula,fa.getFormula()).set(Formula::getMap,fa.getMap()).set(Formula::getRely,fa.getRely()).set(Formula::getDev,fa.getDev()).set(Formula::getScale,fa.getScale()).eq(Formula::getId,fa.getId()));
                 return R.data(fa.getId());
             }

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -294,6 +294,7 @@ public class WbsTreeController extends BladeController {
          Set<String> set = new HashSet<>();
          set.add(BaseInfo.ID);
          set.add(MeterPeriodInfo.ID);
+         set.add(AdvancePaymentCertificate.ID);
          set.add(InterimPaymentCertificate.ID);
          set.add(InterimPaymentSummary.ID);
          set.add(SubprojectInterimPaymentSummary.ID);
@@ -307,6 +308,7 @@ public class WbsTreeController extends BladeController {
     static {
         MODEL_MAP.put(BaseInfo.ID,FormulaUtils.toElementVos(BaseInfo.class));
         MODEL_MAP.put(MeterPeriodInfo.ID,FormulaUtils.toElementVos(MeterPeriodInfo.class));
+        MODEL_MAP.put(AdvancePaymentCertificate.ID,FormulaUtils.toElementVos(AdvancePaymentCertificate.class));
         MODEL_MAP.put(InterimPaymentCertificate.ID,FormulaUtils.toElementVos(InterimPaymentCertificate.class));
         MODEL_MAP.put(InterimPaymentSummary.ID,FormulaUtils.toElementVos(InterimPaymentSummary.class));
         MODEL_MAP.put(SubprojectInterimPaymentSummary.ID,FormulaUtils.toElementVos(SubprojectInterimPaymentSummary.class));

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

@@ -3,12 +3,16 @@ package org.springblade.manager.formula.impl;
 import com.mixsmart.utils.FormulaUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.common.utils.BaseUtils;
+import org.springblade.core.tool.utils.RegexUtil;
 import org.springblade.manager.dto.TreeNode;
 import org.springblade.manager.vo.*;
 
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Function;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @author yangyj
@@ -38,6 +42,13 @@ 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())){
             /*计量期*/

+ 37 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -36,6 +36,7 @@ public class ExecutorMeter extends FormulaExecutor {
     private Function<Long, List<Payment>> paymentListFc;
     private Function<Long, List<InventoryForm>> inventoryFormFc;
     private Function<Long, List<MeterApply>> meterApplyFc;
+    private Function<Long, List<StartPayForm>> stayPayFormFc;
     private ElementWriter elementWriter;
     /*执行链*/
     private List<Special> specialList = new ArrayList<>();
@@ -93,6 +94,7 @@ public class ExecutorMeter extends FormulaExecutor {
     public void handle() {
         this.elementWriter=new MeterElementWriter();
         if(MeterType.MATERIAL.equals(tec.getMeterType())){
+            /*材料预付款支付申请表处理*/
             this.specialList.add(new MaterialCalc());
         }else if(MeterType.INTERIM.equals(tec.getMeterType())){
             this.specialList.add(new InterimPayCert());
@@ -101,11 +103,46 @@ public class ExecutorMeter extends FormulaExecutor {
             this.specialList.add(new SubIMeterPay());
             this.specialList.add(new IMeterPaySummary());
             this.specialList.add(new IMeter());
+        }else if(MeterType.START.equals(tec.getMeterType())){
+            /*开工预付款支付证书处理*/
+            this.specialList.add(new StayPayCalc());
         }
         this.specialList.stream().filter(Special::ready).forEach(Special::parse);
     }
 
+    @Data
+    public  class StayPayCalc implements Special{
+
+        @Override
+        public boolean ready() {
+            return true;
+        }
 
+        public void parse(){
+            LinkedHashMap<String,FormData>  fdm = FormulaUtils.toFormDataMap(AdvancePaymentCertificate.class);
+            List<StartPayForm> startPayForms= stayPayFormFc.apply(tec.getContractId());
+            if(Func.isNotEmpty(startPayForms)){
+                startPayForms.sort(Comparator.comparingInt(StartPayForm::getPeriodSort));
+                double sum,previousD,currentD;
+                List<StartPayForm> current = startPayForms.stream().filter(s->s.getMeterPeriodId().equals(tec.getPeriodId())).collect(Collectors.toList());
+                if(current.size()>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("key_3"),StringUtils.number2String(sum,2));
+                    currentD=startPayForms.stream().mapToDouble(s->Double.parseDouble(s.getMeterMoney())).sum();
+                    elementWriter.write(fdm.get("key_2"),StringUtils.number2String(currentD,2));
+                    /*上一期*/
+                  Optional<Integer> op=startPayForms.stream().map(StartPayForm::getPeriodSort).filter(s->s<one.getPeriodSort()).max(Comparator.comparingInt(s->s));
+                  if(op.isPresent()){
+                      previousD= startPayForms.stream().filter(s->s.getPeriodSort().equals(one.getPeriodSort())).mapToDouble(s->Double.parseDouble(s.getMeterMoney())).sum();
+                      elementWriter.write(fdm.get("key_1"),StringUtils.number2String(previousD,2));
+                  }
+                }
+            }
+        }
+
+    }
 
     @Data
     public  class MaterialCalc implements Special{

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaDao.java

@@ -12,6 +12,8 @@ public interface IFormulaDao {
     Function<Long, MeterPeriodInfo> getMeterPeriodFc();
     /**获取清单信息*/
     Function<Long, List<Material>> getMaterialFormFc();
+    /**开工预付款支付清单*/
+    Function<Long, List<StartPayForm>> getStayPayFormFc();
     /**获取中间计量期*/
     Function<Long, MeterPeriodInfo> getInterimMeterPeriodFc();
     /**获取支付数据*/

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

@@ -53,7 +53,7 @@ public class FormulaDaoImpl implements IFormulaDao {
            List<MeterPeriodInfo> beans = this.jdbcTemplate.query("select b.id,b.period_number periodNumber,b.period_name periodName,a.print_date formPrintDate ,a.repayment_cause cause from s_material_start_statement a join  s_meter_period b on a.meter_period_id=b.id where a.id="+id, new BeanPropertyRowMapper<>(MeterPeriodInfo.class));
             if(beans.size()>0){
                 MeterPeriodInfo bean = beans.get(0);
-                List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList("select sum(b.current_amount) currentAmount from s_meter_period a join s_meter_period b on (a.contract_id=b.contract_id and a.type=b.type) where a.id="+id+" and b.id<>"+id);
+                List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList("select sum(b.current_amount) currentAmount from s_meter_period a join s_meter_period b on (a.contract_id=b.contract_id and a.type=b.type) where a.id="+bean.getId()+" and  a.sort>b.sort");
                 if(listMap.size()>0) {
                     String str=StringUtils.handleNull(listMap.get(0).get("currentAmount"));
                     if(StringUtils.isNumber(str)) {
@@ -74,6 +74,13 @@ public class FormulaDaoImpl implements IFormulaDao {
         };
     }
 
+    @Override
+    public Function<Long, List<StartPayForm>> getStayPayFormFc() {
+        return  contractId->{
+            String sql="select 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.approve_status =2 and a.contract_id="+contractId;
+            return getEntityList(sql,StartPayForm.class);
+        };
+    }
 
 
     @Override

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

@@ -259,6 +259,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     static {
         Map<String, String[]> titleMap = new LinkedHashMap<>();
         titleMap.put(BaseInfo.TBN_CH, new String[]{BaseInfo.TBN, BaseInfo.ID});
+        titleMap.put(AdvancePaymentCertificate.TBN_CH, new String[]{AdvancePaymentCertificate.TBN, AdvancePaymentCertificate.ID});
         titleMap.put(MeterPeriodInfo.TBN_CH, new String[]{MeterPeriodInfo.TBN, MeterPeriodInfo.ID});
         titleMap.put(InterimPaymentCertificate.TBN_CH, new String[]{InterimPaymentCertificate.TBN, InterimPaymentCertificate.ID});
         titleMap.put(InterimPaymentSummary.TBN_CH, new String[]{InterimPaymentSummary.TBN, InterimPaymentSummary.ID});

+ 34 - 37
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -2646,56 +2646,53 @@ public class TaskController extends BladeController {
                         if(Func.isNotEmpty(rs.getData())){
                             PdfReader reader = null;
                             Document doc = new Document();
-                            PdfCopy pdfCopy;
-                            pdfCopy = new PdfCopy(doc, new FileOutputStream(rs.getPdfPath()));
+                            PdfCopy  pdfCopy = new PdfCopy(doc, new FileOutputStream(rs.getPdfPath()));
                             int pageCount;
                             doc.open();
                             String tile=rs.getName().contains("封面")?projectName:projectName+StringPool.DASH+rs.getName();
                             for(Map<String,Object> dataMap:rs.getData()){
-                                if (Func.isNotEmpty(dataMap)) {
-                                    try {
-                                        Workbook workbook  = WorkbookFactory.create(new ByteArrayInputStream(excelByte));
-                                        //获取工作表
-                                        Sheet sheet = workbook.getSheetAt(0);
-                                        sheet.setForceFormulaRecalculation(true);
-                                        // 循环Key
+                                try {
+                                    Workbook workbook  = WorkbookFactory.create(new ByteArrayInputStream(excelByte));
+                                    //获取工作表
+                                    Sheet sheet = workbook.getSheetAt(0);
+                                    sheet.setForceFormulaRecalculation(true);
+                                    if(Func.isNotEmpty(dataMap)) {
                                         for (String keys : dataMap.keySet()) {
                                             int y1 = Func.toInt(keys.split("_")[0]);
                                             int x1 = Func.toInt(keys.split("_")[1]);
-                                            Row row = sheet.getRow(y1-1);
+                                            Row row = sheet.getRow(y1 - 1);
                                             if (row != null) {
-                                                Cell cell = row.getCell(x1-1);
-                                                if(cell!=null) {
+                                                Cell cell = row.getCell(x1 - 1);
+                                                if (cell != null) {
                                                     cell.setCellValue(dataMap.getOrDefault(keys, StringPool.EMPTY).toString());
-                                                }else{
-                                                    System.out.println(keys+"不存在");
+                                                } else {
+                                                    System.out.println(keys + "不存在");
                                                 }
                                             }
                                         }
-                                        /*设置表头*/
-                                        setTitle(sheet,tile);
-                                        /*输出到内存*/
-                                        //去掉表格虚线
-                                        sheet.setPrintGridlines(false);
-                                        //设置 整个工作表为一页
-                                        sheet.setFitToPage(true);
-                                        sheet.getPrintSetup().setPaperSize(PrintSetup.A4_PAPERSIZE);
-                                        ByteArrayOutputStream out = new ByteArrayOutputStream();
-                                        workbook.write(out);
-                                        workbook.write(new FileOutputStream(rs.getExcelPath()));
-                                        com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook( new ByteArrayInputStream(out.toByteArray()));
-                                        out.reset();
-                                        wb.save(out, SaveFormat.PDF);
-                                        reader = new PdfReader(new ByteArrayInputStream(out.toByteArray()));
-                                        pageCount = reader.getNumberOfPages();
-                                        for (int i = 1; i <= pageCount; ++i) {
-                                            pdfCopy.addPage(pdfCopy.getImportedPage(reader, i));
-                                        }
-                                        out.close();
-                                        workbook.close();
-                                    }catch (Exception e){
-                                        e.printStackTrace();
                                     }
+                                    /*设置表头*/
+                                    setTitle(sheet,tile);
+                                    //去掉表格虚线
+                                    sheet.setPrintGridlines(false);
+                                    //设置 整个工作表为一页
+                                    sheet.setFitToPage(true);
+                                    sheet.getPrintSetup().setPaperSize(PrintSetup.A4_PAPERSIZE);
+                                    ByteArrayOutputStream out = new ByteArrayOutputStream();
+                                    workbook.write(out);
+                                    workbook.write(new FileOutputStream(rs.getExcelPath()));
+                                    com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook( new ByteArrayInputStream(out.toByteArray()));
+                                    out.reset();
+                                    wb.save(out, SaveFormat.PDF);
+                                    reader = new PdfReader(new ByteArrayInputStream(out.toByteArray()));
+                                    pageCount = reader.getNumberOfPages();
+                                    for (int i = 1; i <= pageCount; ++i) {
+                                        pdfCopy.addPage(pdfCopy.getImportedPage(reader, i));
+                                    }
+                                    out.close();
+                                    workbook.close();
+                                }catch (Exception e){
+                                    e.printStackTrace();
                                 }
                             }
                             pdfCopy.flush();