Jelajahi Sumber

中期支付证书

yangyj 1 tahun lalu
induk
melakukan
5a34be4560
15 mengubah file dengan 329 tambahan dan 35 penghapusan
  1. 5 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/Structure.java
  2. 71 18
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FunctionMain.java
  3. 4 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterInfo.java
  4. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java
  5. 49 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificateItem.java
  6. 29 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/feign/CertificateItemClient.java
  7. 2 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/InterimPayCertificateVO.java
  8. 60 14
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java
  9. 13 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  10. 24 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/feign/CertificateItemClientImpl.java
  11. 14 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateItemMapper.java
  12. 25 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateItemMapper.xml
  13. 7 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInterimPayCertificateItemService.java
  14. 16 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateItemServiceImpl.java
  15. 7 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateServiceImpl.java

+ 5 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/Structure.java

@@ -10,11 +10,14 @@ import lombok.Data;
 @Data
 public class Structure {
     /**上限,下限*/
-    private static  final  Integer MAX =StateFlag.values().length^2-1,MIN =0;
+    private static  final  Integer MAX =(1<<StateFlag.values().length)-1,MIN =0;
+
+
 
     /*状态标识枚举,对应二进制的第几位*/
     public enum StateFlag {
         /*表头表尾,测量数据,每页固定内容*/
+        /*只能在右边追加状态位*/
         FIXED, MEASURE, HEAD_TAIL;
     }
     /*状态值二进制*/
@@ -24,7 +27,7 @@ public class Structure {
             this.state=Math.min(Math.max(MIN,state),MAX);
         }
     }
-
+    public Structure(){}
 
     public Integer toInt(){
       return Integer.parseInt(String.valueOf(state), 2);

+ 71 - 18
blade-service/blade-business/src/main/java/org/springblade/business/utils/FunctionMain.java → blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FunctionMain.java

@@ -1,16 +1,7 @@
-package org.springblade.business.utils;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
+package org.springblade.manager.vo;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.annotation.TableName;
 import org.apache.http.Consts;
 import org.apache.http.HttpResponse;
 import org.apache.http.NameValuePair;
@@ -19,14 +10,23 @@ import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.message.BasicNameValuePair;
-import com.baomidou.mybatisplus.annotation.TableName;
-import org.springblade.business.entity.DatumPoint;
-import org.springblade.manager.entity.Formula;
-import org.springblade.manager.entity.FormulaBase;
-import org.springblade.manager.vo.FormulaType;
-import sun.misc.VM;
 
 import javax.validation.constraints.Size;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 
 /**
@@ -83,12 +83,14 @@ public class FunctionMain {
     public static String builder(Class<?> clazz) {
         Class<?> su = clazz.getSuperclass();
         if (su != null && !Object.class.toString().equals(su.getName())) {
-            return builder(su) + toMapper(clazz);
+            return  toMapper(clazz)+builder(su);
         } else {
             return toMapper(clazz);
         }
     }
 
+
+
     public static void getToken() {
         HttpClient httpClient = HttpClientBuilder.create().build();
         HttpPost httpPost = new HttpPost("http://localhost:8090/blade-auth/oauth/token");
@@ -99,6 +101,8 @@ public class FunctionMain {
         params.add(new BasicNameValuePair("grant_type", "password"));
         params.add(new BasicNameValuePair("username", "admin"));
         params.add(new BasicNameValuePair("password", "21232f297a57a5a743894a0e4a801fc3"));
+/*        params.add(new BasicNameValuePair("username", "pengct"));
+        params.add(new BasicNameValuePair("password", "e5ba1016745e39f410cf27acbba844"));*/
         params.add(new BasicNameValuePair("scope", "all"));
         params.add(new BasicNameValuePair("tenantId", "000000"));
         httpPost.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8));
@@ -112,7 +116,9 @@ public class FunctionMain {
                 outputStream.write(buffer, 0, index);
             }
             System.out.println("\n");
+/*
             System.out.println("bearer " + JSON.parseObject(outputStream.toString()).getString("access_token"));
+*/
             System.out.print("bearer " + JSON.parseObject(outputStream.toString()).getString("refresh_token"));
         } catch (IOException e) {
             e.printStackTrace();
@@ -176,4 +182,51 @@ public class FunctionMain {
     }
 
 
+
+
+    public static void test() throws ExecutionException, InterruptedException {
+        Thread thread=Thread.currentThread();
+        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
+            try {
+                System.out.println("1"+thread.equals(Thread.currentThread()));
+                Thread.sleep(2000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            return 42;
+        });
+
+        future.whenComplete((result, exception) -> {
+            if (exception == null) {
+                try {
+                    TimeUnit.SECONDS.sleep(3);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                System.out.println("2"+thread.equals(Thread.currentThread()));
+                System.out.println("A");
+            }
+        });
+        TimeUnit.SECONDS.sleep(3);
+        System.out.println("B");
+        System.out.println("Q"+future.get());
+
+        future.whenCompleteAsync((result, exception) -> {
+            if (exception == null) {
+                try {
+                    TimeUnit.SECONDS.sleep(5);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                System.out.println("3"+thread.equals(Thread.currentThread()));
+                System.out.println("C");
+            }
+        });
+        System.out.println("D");
+        System.out.println("F"+future.get());
+        System.out.println("G");
+    }
+
+
+
 }

+ 4 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterInfo.java

@@ -3,6 +3,7 @@ package org.springblade.manager.vo;
 import cn.hutool.log.StaticLog;
 import lombok.Data;
 import org.springblade.manager.dto.TreeNode;
+import org.springblade.meter.entity.InterimPayCertificateItem;
 
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
@@ -61,4 +62,7 @@ public class MeterInfo {
         }
         return Collections.emptyList();
     }
+
+    /*中期支付证书里的*/
+    private List<InterimPayCertificateItem> interimPayCertificateItems =new ArrayList<>();
 }

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java

@@ -131,6 +131,9 @@ InterimPayCertificate extends BaseEntity {
     @ApiModelProperty(value = "每份表格独立的PDF地址")
     private String fileUrlList;
 
+    @ApiModelProperty(value = "支付项集合")
+    @TableField(exist = false)
+    List<InterimPayCertificateItem> payList;
 /*
     @TableField(exist = false)
     private Set<Map<String,String>> urlListData;

+ 49 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificateItem.java

@@ -0,0 +1,49 @@
+package org.springblade.meter.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * @author yangyj
+ * @Date 2024/5/31 10:44
+ * @description 中期支付证书项目
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("s_interim_pay_certificate_item")
+public class InterimPayCertificateItem extends BaseEntity {
+
+    @ApiModelProperty(value = "中间证书Id")
+    private Long certificateId;
+    @ApiModelProperty(value = "支付章号")
+    private String formName;
+    /**项目名称*/
+    @ApiModelProperty(value = "支付项目名称")
+    private String chapterSeq;
+    /**合同金额*/
+    @ApiModelProperty(value = "合同金额")
+    private String contractAmount;
+    @ApiModelProperty(value = "变更金额")
+    private String revisedTotal;
+    /**变更后的金额*/
+    @ApiModelProperty(value = "变更后金额")
+    private String revisedAmount;
+    /**本期末支付金额*/
+    @ApiModelProperty(value = "本期累计完成金额")
+    private String currentPeriodEndPay;
+    /**上期末支付金额*/
+    @ApiModelProperty(value = "上期末累计完成金额")
+    private String previousPeriodEndPay;
+    /**本期支付金额*/
+    @ApiModelProperty(value = "本期完成金额")
+    private String currentPeriodPay;
+    /**非计量单来源数据*/
+    @ApiModelProperty(value = "非计量单来源数据 1是0否")
+    private Integer noApply;
+    @ApiModelProperty(value = "顺序")
+    private Integer sort;
+}

+ 29 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/feign/CertificateItemClient.java

@@ -0,0 +1,29 @@
+package org.springblade.meter.feign;
+
+import com.alibaba.fastjson.JSONObject;
+import org.springblade.common.constant.LauncherConstant;
+import org.springblade.core.tool.api.R;
+import org.springblade.meter.entity.InterimPayCertificateItem;
+import org.springblade.meter.entity.MeterContractInfo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
+
+@FeignClient(value = LauncherConstant.APPLICATION_METER_NAME)
+public interface CertificateItemClient {
+    /**
+     * 接口前缀
+     */
+    String API_PREFIX = "/api/meter/CertificateItem";
+
+    /**
+     * 获取首件记录
+     */
+    @PostMapping(API_PREFIX + "/saveOrUpdate")
+    void saveOrUpdate(@RequestBody List<InterimPayCertificateItem> items);
+}

+ 2 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/InterimPayCertificateVO.java

@@ -20,6 +20,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.springblade.meter.entity.InterimPayCertificate;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.meter.entity.InterimPayCertificateItem;
 
 import java.util.List;
 
@@ -35,6 +36,6 @@ public class InterimPayCertificateVO extends InterimPayCertificate {
 	private static final long serialVersionUID = 1L;
 
 	@ApiModelProperty(value = "支付项集合")
-	List<Object> payList;
+	List<InterimPayCertificateItem> payList;
 
 }

+ 60 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -15,6 +15,7 @@ import org.springblade.manager.dto.FormData;
 import org.springblade.manager.dto.TreeNode;
 import org.springblade.manager.formula.ElementWriter;
 import org.springblade.manager.vo.*;
+import org.springblade.meter.entity.InterimPayCertificateItem;
 import org.springframework.beans.BeanUtils;
 
 
@@ -77,7 +78,8 @@ public class ExecutorMeter extends FormulaExecutor {
     private BinaryOperator<String> subtractFc = (a,b)-> BaseUtils.str2BigDecimal(a).subtract(BaseUtils.str2BigDecimal(b)).toString();
     /*乘法*/
     private BinaryOperator<String> multiFc = (a,b)-> BaseUtils.str2BigDecimal(a).multiply(BaseUtils.str2BigDecimal(b)).toString();
-
+    /*加法*/
+    private BinaryOperator<String> addFc = (a,b)-> BaseUtils.str2BigDecimal(a).add(BaseUtils.str2BigDecimal(b)).toString();
    /**根据清单编号获取支付项目章节编号*/
     public String getPrefix(String fn){
         if(fn!=null) {
@@ -351,18 +353,18 @@ public class ExecutorMeter extends FormulaExecutor {
                /* Arrays.asList("正常监理服务费","其他费用","附加监理服务费","额外服务费","缺陷期监理服务费","小计","费用调整","合计","监理单位违约金","奖励","动员预付款","扣回动员预付款","实际支付金额");*/
          {
             itemNamesMap.put("正常监理服务费","100");
-             itemNamesMap.put("其他费用","");
-             itemNamesMap.put("附加监理服务费","");
-             itemNamesMap.put("额外服务费","");
+             itemNamesMap.put("其他费用","-100");
+             itemNamesMap.put("附加监理服务费","-100");
+             itemNamesMap.put("额外服务费","-100");
              itemNamesMap.put("缺陷期监理服务费","200");
              itemNamesMap.put("小计","-1");
-             itemNamesMap.put("费用调整","");
+             itemNamesMap.put("费用调整","-100");
              itemNamesMap.put("合计","-1");
-             itemNamesMap.put("监理单位违约金","");
-             itemNamesMap.put("奖励","");
-             itemNamesMap.put("动员预付款","");
-             itemNamesMap.put("扣回动员预付款","");
-             itemNamesMap.put("实际支付金额","");
+             itemNamesMap.put("监理单位违约金","-100");
+             itemNamesMap.put("奖励","-100");
+             itemNamesMap.put("动员预付款","-100");
+             itemNamesMap.put("扣回动员预付款","-100");
+             itemNamesMap.put("实际支付金额","-1");
          }
 
         @Override
@@ -372,22 +374,28 @@ public class ExecutorMeter extends FormulaExecutor {
 
         @Override
         public void parse() {
+
             builderFormDatas(SupervisionCertificate.class);
             List<Payment> pre=tec.meterInfo.getPaymentListMap().get(MeterInfo.PRE);
             List<Payment> cur=tec.meterInfo.getPaymentListMap().get(MeterInfo.CUR);
             List<Payment> end=tec.meterInfo.getPaymentListMap().get(MeterInfo.END);
             Map<SupervisionCertificate,Map<Function<SupervisionCertificate,String>,Consumer<String>>> summaryConfigMap = new HashMap<>();
+            LinkedHashMap<String,InterimPayCertificateItem> previousMap = new LinkedHashMap<>();
+            LinkedHashMap<String,InterimPayCertificateItem> currentMap = new LinkedHashMap<>();
+            List<InterimPayCertificateItem> itemList = tec.meterInfo.getInterimPayCertificateItems();
+            Map<SupervisionCertificate,InterimPayCertificateItem> peerMap = new HashMap<>();
             itemNamesMap.forEach((k,v)->{
                 SupervisionCertificate sc = new SupervisionCertificate();
                 sc.setItemName(k);
                 sc.setMonth(tec.periodInfo.getMonth());
-                if(!v.isEmpty()&&!v.equals("-1")){
+                if(!v.isEmpty()&&!v.equals("-1")&&!v.equals("-100")){
+                    InterimPayCertificateItem current = currentMap.computeIfAbsent(k,w->new InterimPayCertificateItem());
                     List<Payment> p = pre.stream().filter(e->getPrefix(e.getNumber()).equals(v)).collect(Collectors.toList());
                     List<Payment> c = cur.stream().filter(e->getPrefix(e.getNumber()).equals(v)).collect(Collectors.toList());
                     List<Payment> t = end.stream().filter(e->getPrefix(e.getNumber()).equals(v)).collect(Collectors.toList());
-                   t.stream().findFirst().ifPresent(sample->{
-                        sc.setPrice(sample.getPrice());
-                        sc.setContractAmount(sample.getContractMoney());
+                   t.stream().findFirst().ifPresent(payment->{
+                        sc.setPrice(payment.getPrice());
+                        sc.setContractAmount(payment.getContractMoney());
                         /*本期*/
                         sc.setCurrentAmount(c.stream().map(e->BaseUtils.str2BigDecimal(e.getMoney())).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
                         sc.setCurrentRatio(ratioFc.apply(sc.getCurrentAmount(),sc.getContractAmount()));
@@ -397,17 +405,55 @@ public class ExecutorMeter extends FormulaExecutor {
                         /*本期末*/
                         sc.setPeriodEndAmount(t.stream().map(e->BaseUtils.str2BigDecimal(e.getMoney())).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
                         sc.setPeriodEndRatio(ratioFc.apply(sc.getPeriodEndAmount(),sc.getContractAmount()));
+
+                       current.setFormName(payment.getNumber());
+                       current.setChapterSeq(payment.getName());
+                       current.setContractAmount(payment.getContractMoney());
+                       current.setPreviousPeriodEndPay(sc.getPeriodEndAmount());
+                       current.setCurrentPeriodPay(sc.getCurrentAmount());
+                       current.setCurrentPeriodEndPay(sc.getPeriodEndAmount());
+                       itemList.add(current);
                     });
+
                 }else if(v.equals("-1")){
                     sc.setIsSummary(true);
                     addGetSetConfig(sc,summaryConfigMap,SupervisionCertificate::getContractAmount,sc::setContractAmount);
                     addGetSetConfig(sc,summaryConfigMap,SupervisionCertificate::getPeriodEndAmount,sc::setPeriodEndAmount);
                     addGetSetConfig(sc,summaryConfigMap,SupervisionCertificate::getPreviousEndAmount,sc::setPreviousEndAmount);
                     addGetSetConfig(sc,summaryConfigMap,SupervisionCertificate::getCurrentAmount,sc::setCurrentAmount);
+                    InterimPayCertificateItem current =  currentMap.computeIfAbsent(k,w->new InterimPayCertificateItem());
+                    peerMap.put(sc,current);
+                    current.setChapterSeq(sc.getItemName());
+                    itemList.add(current);
+                }else if(v.equals("-100")){
+                    InterimPayCertificateItem previous = previousMap.get(k);
+                    InterimPayCertificateItem current =  currentMap.computeIfAbsent(k,w->new InterimPayCertificateItem());
+                    sc.setCurrentAmount(current.getCurrentPeriodPay());
+                    sc.setPreviousEndAmount(previous.getCurrentPeriodEndPay());
+                    sc.setPreviousEndAmount(addFc.apply(sc.getCurrentAmount(),sc.getPreviousEndAmount()));
+                    current.setChapterSeq(sc.getItemName());
+                    current.setPreviousPeriodEndPay(sc.getPeriodEndAmount());
+                    current.setCurrentPeriodPay(sc.getCurrentAmount());
+                    current.setCurrentPeriodEndPay(sc.getPeriodEndAmount());
+                    itemList.add(current);
                 }
             });
             /*分行合计列*/
             fieldGetSet(summaryConfigMap,x->!x.getIsSummary());
+            if(peerMap.size()>0) {
+                /*等合计项目计算完毕,再赋值*/
+                peerMap.forEach((sc, item) -> {
+                    item.setPreviousPeriodEndPay(sc.getPeriodEndAmount());
+                    item.setCurrentPeriodPay(sc.getCurrentAmount());
+                    item.setCurrentPeriodEndPay(sc.getPeriodEndAmount());
+                });
+            }
+            /*排序*/
+            List<String> indexSort =new ArrayList<>(itemNamesMap.keySet());
+            itemList.forEach(e->{
+                e.setCertificateId(tec.getReportId());
+                e.setSort(indexSort.indexOf(e.getChapterSeq()));
+            });
             putOut();
         }
     }

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

@@ -38,10 +38,13 @@ import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.vo.*;
+import org.springblade.meter.entity.InterimPayCertificateItem;
+import org.springblade.meter.feign.CertificateItemClient;
 import org.springblade.system.cache.ParamCache;
 import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import javax.validation.constraints.NotNull;
 import java.io.File;
@@ -83,6 +86,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         private final IProjectInfoService projectInfoService;
         private final WbsTreeContractMapper wbsTreeContractMapper;
         private final IFormulaDao formulaDao;
+        private final CertificateItemClient certificateItemClient;
+
 
         public final static String WP="WP";
         public final static String CHAIN="trees";
@@ -2871,9 +2876,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         formulaHandleChains.forEach(FormulaHandleChain::handle);
         tec.after();
         executionTime.info("公式计算");
+        saveInterimPayCertificateItems(tec.meterInfo.getInterimPayCertificateItems());
         return tec.getReportResults();
     }
 
+    @Async
+    public void saveInterimPayCertificateItems(List<InterimPayCertificateItem> items){
+        if(items.size()>0){
+              this.certificateItemClient.saveOrUpdate(items);
+        }
+    }
+
     public void settingCoordsExtend( Map<String,Map<String,String>> coordinateMap){
         /*有些元素无法绑定单元格*/
         if(coordinateMap!=null){

+ 24 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/feign/CertificateItemClientImpl.java

@@ -0,0 +1,24 @@
+package org.springblade.meter.feign;
+
+import lombok.AllArgsConstructor;
+import org.springblade.meter.entity.InterimPayCertificateItem;
+import org.springblade.meter.service.IInterimPayCertificateItemService;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author yangyj
+ * @Date 2024/5/31 15:45
+ * @description TODO
+ */
+@RestController
+@AllArgsConstructor
+public class CertificateItemClientImpl implements CertificateItemClient{
+    private final IInterimPayCertificateItemService iInterimPayCertificateItemService;
+
+    @Override
+    public void saveOrUpdate(List<InterimPayCertificateItem> items) {
+              this.iInterimPayCertificateItemService.saveOrUpdateBatch(items);
+    }
+}

+ 14 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateItemMapper.java

@@ -0,0 +1,14 @@
+package org.springblade.meter.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.manager.vo.FunctionMain;
+import org.springblade.meter.entity.InterimPayCertificateItem;
+
+
+public interface InterimPayCertificateItemMapper  extends BaseMapper<InterimPayCertificateItem> {
+
+    public static void main(String[] args) {
+       FunctionMain.createTable(InterimPayCertificateItem.class,"中期支付证书项目");
+    }
+
+}

+ 25 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateItemMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.meter.mapper.InterimPayCertificateItemMapper">
+    <resultMap id="InterimPayCertificateItemResultMap" type="org.springblade.meter.entity.InterimPayCertificateItem">
+        <result column="certificateId" property="certificate_id"/>
+        <result column="formName" property="form_name"/>
+        <result column="chapterSeq" property="chapter_seq"/>
+        <result column="contractAmount" property="contract_amount"/>
+        <result column="revisedTotal" property="revised_total"/>
+        <result column="revisedAmount" property="revised_amount"/>
+        <result column="currentPeriodEndPay" property="current_period_end_pay"/>
+        <result column="previousPeriodEndPay" property="previous_period_end_pay"/>
+        <result column="currentPeriodPay" property="current_period_pay"/>
+        <result column="noApply" property="no_apply"/>
+        <result column="sort" property="sort"/>
+        <result column="id" property="id"/>
+        <result column="createUser" property="create_user"/>
+        <result column="createDept" property="create_dept"/>
+        <result column="createTime" property="create_time"/>
+        <result column="updateUser" property="update_user"/>
+        <result column="updateTime" property="update_time"/>
+        <result column="status" property="status"/>
+        <result column="isDeleted" property="is_deleted"/>
+    </resultMap>
+</mapper>

+ 7 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInterimPayCertificateItemService.java

@@ -0,0 +1,7 @@
+package org.springblade.meter.service;
+
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.meter.entity.InterimPayCertificateItem;
+
+public interface IInterimPayCertificateItemService extends BaseService<InterimPayCertificateItem> {
+}

+ 16 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateItemServiceImpl.java

@@ -0,0 +1,16 @@
+package org.springblade.meter.service.impl;
+
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.meter.entity.InterimPayCertificateItem;
+import org.springblade.meter.mapper.InterimPayCertificateItemMapper;
+import org.springblade.meter.service.IInterimPayCertificateItemService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yangyj
+ * @Date 2024/5/31 11:34
+ * @description TODO
+ */
+@Service
+public class InterimPayCertificateItemServiceImpl extends BaseServiceImpl<InterimPayCertificateItemMapper, InterimPayCertificateItem> implements IInterimPayCertificateItemService {
+}

+ 7 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateServiceImpl.java

@@ -21,8 +21,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.meter.entity.InterimPayCertificate;
+import org.springblade.meter.entity.InterimPayCertificateItem;
 import org.springblade.meter.entity.MeterPeriod;
 import org.springblade.meter.mapper.InterimPayCertificateMapper;
+import org.springblade.meter.service.IInterimPayCertificateItemService;
 import org.springblade.meter.service.IInterimPayCertificateService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.vo.InterimPayCertificateVO;
@@ -46,6 +48,7 @@ import java.util.stream.Collectors;
 public class InterimPayCertificateServiceImpl extends BaseServiceImpl<InterimPayCertificateMapper, InterimPayCertificate> implements IInterimPayCertificateService {
 
     private  final JdbcTemplate jdbcTemplate;
+    private final IInterimPayCertificateItemService interimPayCertificateItemService;
 
     /**
      * 新增 中期支付证书
@@ -117,9 +120,13 @@ public class InterimPayCertificateServiceImpl extends BaseServiceImpl<InterimPay
     public InterimPayCertificateVO detail(Long id) {
         InterimPayCertificateVO vo = baseMapper.getById(id);
         //设置支付项集合
+        List<InterimPayCertificateItem> items = this.interimPayCertificateItemService.list(Wrappers.<InterimPayCertificateItem>lambdaQuery().eq(InterimPayCertificateItem::getCertificateId,id));
+        vo.setPayList(items);
         return vo;
     }
 
+
+
     /**
      * 重新计算 中期支付证书
      */