Ver código fonte

万盛计量跨期bug,G10公式坐标bug

chenr 9 meses atrás
pai
commit
049aac28ad
13 arquivos alterados com 483 adições e 75 exclusões
  1. 23 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/feign/InterimPayCertificateItemClient.java
  2. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MonthlyReportVo.java
  3. 16 2
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java
  4. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  5. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java
  6. 56 18
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  7. 283 49
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  8. 15 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  9. 3 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/InterimPayCertificateController.java
  10. 7 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInterimPayCertificateItemService.java
  11. 24 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateItemClientImpl.java
  12. 42 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateItemServiceImpl.java
  13. 7 4
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateServiceImpl.java

+ 23 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/feign/InterimPayCertificateItemClient.java

@@ -0,0 +1,23 @@
+package org.springblade.meter.feign;
+
+import org.springblade.common.constant.LauncherConstant;
+import org.springblade.meter.entity.InterimPayCertificateItem;
+import org.springblade.meter.vo.MonthlyReportVo;
+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;
+
+@FeignClient(value = LauncherConstant.APPLICATION_METER_NAME)
+public interface InterimPayCertificateItemClient {
+
+    String API_PREFIX = "/InterimPayCertificateItem";
+
+    @PostMapping("/addInterimPayCertificateItem")
+    void addInterimPayCertificateItem(@RequestParam Long certificateId, @RequestBody List<MonthlyReportVo> values);
+
+    @PostMapping("/updateInterimPayCertificateItem")
+    void updateInterimPayCertificateItem(@RequestBody List<InterimPayCertificateItem> list4);
+}

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MonthlyReportVo.java

@@ -41,6 +41,9 @@ public class MonthlyReportVo {
        @ApiModelProperty(value = "到本期末完成占C的%")
       private String nowEndC;
 
+       @ApiModelProperty(value = "章编号")
+       private String chapterSeq;
+
 
 
 }

+ 16 - 2
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -522,8 +522,22 @@ public class CustomFunction {
     private static Object dateCp(Object d1, Object d2, Boolean isAsc) {
         if (d1 != null && d2 != null) {
             Map<DateTime, Object> map = new HashMap<>();
-            DateTime dt1 = new DateTime(d1.toString());
-            DateTime dt2 = new DateTime(d2.toString());
+            String day1 = d1.toString();
+            day1=day1.replace("年","-");
+            day1=day1.replace("月","-");
+            if(day1.indexOf("日")>0){
+                day1= day1.substring(0,day1.indexOf("日"));
+            }
+            String day2 = d2.toString();
+            day2= day2.replace("年","-");
+            day2= day2.replace("月","-");
+            if(day2.indexOf("日")>0){
+                day2=day2.substring(0,day2.indexOf("日"));
+            }
+            day1=day1.replace("\"", "");
+            day2=day2.replace("\"", "");
+            DateTime dt1 = new DateTime(day1);
+            DateTime dt2 = new DateTime(day2);
             map.put(dt1, d1);
             map.put(dt2, d2);
             List<DateTime> list = new ArrayList<>();

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

@@ -65,6 +65,7 @@ import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.resource.vo.NewBladeFile;
 import org.springblade.system.cache.ParamCache;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
@@ -129,6 +130,7 @@ public class ExcelTabController extends BladeController {
     // 元素信息表-
     private final IWbsFormElementService wbsFormElementService;
 
+
     // 元素信息表-
     private final IWbsTreeContractService wbsTreeContractService;
 

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -2,6 +2,7 @@ package org.springblade.manager.formula.impl;
 
 
 import cn.hutool.core.util.HashUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.log.StaticLog;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -428,7 +429,7 @@ public class TableElementConverter implements ITableElementConverter {
                                 }
                             }
                             LinkedHashMap<Integer, List<ElementData>> pages = elementDataList.stream().collect(Collectors.groupingBy(ElementData::getIndex, LinkedHashMap::new, Collectors.toList()));
-                            if( Func.isNotEmpty(fd.getFormula()) && Func.isNull(fd.getFormula()) && "ZHIZUO".equals(fd.getFormula().getNumber())){
+                            if(ObjectUtil.isNotEmpty(fd.getFormula())&&ObjectUtil.isNotEmpty(fd.getFormula().getNumber())&&"ZHIZUO".equals(fd.getFormula().getNumber())){
                                 HashMap<Long, String> map = RandomNumberHolder.getRandomNumber();
                                 if(!map.entrySet().isEmpty()){
                                     String nodeName = map.entrySet().iterator().next().getValue();

+ 56 - 18
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -23,6 +23,8 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.util.IOUtils;
+import org.apache.poi.xssf.usermodel.XSSFFont;
+import org.apache.poi.xssf.usermodel.XSSFRichTextString;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
@@ -67,6 +69,7 @@ import org.springblade.manager.vo.*;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springblade.system.cache.ParamCache;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.dao.DataAccessException;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
@@ -2045,10 +2048,6 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 }
             }
         }
-
-        if (pkeyId == 1783397446617923584L) {
-            System.out.println("1231");
-        }
         //数据不为空
         if (StringUtils.isNotEmpty(wbsTreeContract.getHtmlUrl())) {
             InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(wbsTreeContract.getHtmlUrl());
@@ -2255,20 +2254,59 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     if (row != null) {
                         Cell cell = row.getCell(x1 - 1);
                         if (cell != null || ObjectUtils.isNotEmpty(cell)) {
-                            short fontIndex = cell.getCellStyle().getFontIndex();
-                            Font oldfontAt = workbook.getFontAt(fontIndex);
-                            Font redFont = workbook.createFont();
-                            redFont.setColor(IndexedColors.WHITE.getIndex()); //设置字体颜色
-                            redFont.setFontHeightInPoints(Short.valueOf("1"));//设置字体大小
-                            redFont.setFontName(oldfontAt.getFontName());//设置字体
-                            String CellValue = cell.getStringCellValue().trim();
-
-                            CellStyle newStyle = workbook.createCellStyle(); //创建单元格样式
-                            newStyle.cloneStyleFrom(cell.getCellStyle());
-                            newStyle.setFont(redFont);
-                            newStyle.setShrinkToFit(true);
-                            cell.setCellStyle(newStyle);
-                            cell.setCellValue(dqid);
+//                            short fontIndex = cell.getCellStyle().getFontIndex();
+//                            Font oldfontAt = workbook.getFontAt(fontIndex);
+//                            Font redFont = workbook.createFont();
+//                            redFont.setColor(IndexedColors.WHITE.getIndex()); //设置字体颜色
+//                            redFont.setFontHeightInPoints(Short.valueOf("1"));//设置字体大小
+//                            redFont.setFontName(oldfontAt.getFontName());//设置字体
+//                            String CellValue = cell.getStringCellValue().trim();
+//
+//                            CellStyle newStyle = workbook.createCellStyle(); //创建单元格样式
+//                            newStyle.cloneStyleFrom(cell.getCellStyle());
+//                            newStyle.setFont(redFont);
+//                            newStyle.setShrinkToFit(true);
+//                            cell.setCellStyle(newStyle);
+//                            cell.setCellValue(dqid);
+                             // 获取单元格的现有值
+                            String existingValue = cell.getStringCellValue();
+                            // 获取单元格的现有富文本字符串
+                            RichTextString existingRichTextString = cell.getRichStringCellValue();
+                             // 创建一个新的副文本字符串,原有值+电签ID
+                            RichTextString richTextString = workbook.getCreationHelper().createRichTextString(existingValue + dqid);
+                            // 复制原有部分的字体格式
+                            if (existingRichTextString instanceof XSSFRichTextString) {
+                                XSSFRichTextString xssfRichTextString = (XSSFRichTextString) existingRichTextString;
+                                for (int i = 0; i < xssfRichTextString.numFormattingRuns(); i++) {
+                                    XSSFFont runFont = xssfRichTextString.getFontOfFormattingRun(i);
+                                    Font font = workbook.createFont();
+                                    font.setColor(runFont.getXSSFColor().getIndexed());
+                                    font.setFontHeightInPoints(runFont.getFontHeightInPoints());
+                                    font.setBold(runFont.getBold());
+                                    font.setItalic(runFont.getItalic());
+                                    font.setUnderline(runFont.getUnderline());
+                                    font.setTypeOffset(runFont.getTypeOffset());
+                                    font.setCharSet(runFont.getCharSet());
+                                    font.setStrikeout(runFont.getStrikeout());
+                                    font.setFontName(runFont.getFontName());
+                                    int startIdx = xssfRichTextString.getIndexOfFormattingRun(i);
+                                    int endIdx = Math.min(startIdx + xssfRichTextString.getLengthOfFormattingRun(i), existingValue.length());
+                                    //根据原有值的长度,起始位置和结束位置设置成原有的文本格式
+                                    richTextString.applyFont(startIdx, endIdx, font);
+                                }
+                            } else {
+                                // 如果没有富文本格式,则使用默认字体
+                                Font defaultFont = workbook.createFont();
+                                richTextString.applyFont(0, existingValue.length(), defaultFont);
+                            }
+                            // 设置新增部分的字体
+                            Font newFont = workbook.createFont();
+                            newFont.setColor(IndexedColors.WHITE.getIndex());
+                            newFont.setFontHeightInPoints(Short.valueOf("1")); // 可根据需要调整字体大小
+                            //从原有值之后,电签ID开始设置成新的格式。
+                            richTextString.applyFont(existingValue.length(), existingValue.length() + dqid.length(), newFont);
+                             // 将副文本字符串设置到单元格
+                            cell.setCellValue(richTextString);
                         }
                     }
                 }

+ 283 - 49
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -51,10 +51,7 @@ import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.utils.PeriodContractUtil;
 import org.springblade.manager.vo.*;
 import org.springblade.meter.entity.*;
-import org.springblade.meter.feign.CertificateItemClient;
-import org.springblade.meter.feign.CollectionUtilsClient;
-import org.springblade.meter.feign.IContractInventoryFormClient;
-import org.springblade.meter.feign.MiddleMeterApplyClient;
+import org.springblade.meter.feign.*;
 import org.springblade.meter.vo.*;
 import org.springblade.resource.feign.CommonFileClient;
 import org.springblade.resource.feign.NewIOSSClient;
@@ -132,6 +129,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         private final CertificateItemClient certificateItemClient;
         private final NewIOSSClient newIOSSClient;
         private final CommonFileClient commonFileClient;
+        private final InterimPayCertificateItemClient interimPayCertificateItemClient;
         @Lazy
         @Autowired
         private final MiddleMeterApplyClient middleMeterApplyClient;
@@ -2353,7 +2351,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         //获取中间支付审核表的pdfurl
         ReportResult intermediatePaymentPDF = getIntermediatePaymentPDF(url1,contractId,periodId,list,redisId,htmlUrl1,blReserveFundsRatioNew,projectName,changeMoneyNew);
         //获取补助款申请支付审核表pdfUrl
-        ReportResult subsidyApplicationPaymentReviewPDF = getSubsidyApplicationPaymentReviewPDF(url2,contractId,periodId,list,htmlUrl2,blReserveFundsRatioNew,projectName);
+        ReportResult subsidyApplicationPaymentReviewPDF = getSubsidyApplicationPaymentReviewPDF(url2,contractId,periodId,list,htmlUrl2,blReserveFundsRatioNew,projectName,projectId,reportId);
         //获取中间计量支付证书pdfUrl
         ReportResult intermediateMeasurementPaymentCertificatePDF = getIntermediateMeasurementPaymentCertificatePDF(url3,contractId,periodId,list,htmlUrl3,blReserveFundsRatioNew,projectName);
         //获取清单支付报表PDF
@@ -2593,7 +2591,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     /**
      *补助款申请支付审核表获取PDFurl
      */
-    private ReportResult getSubsidyApplicationPaymentReviewPDF(String url2, Long contractId, Long periodId, List<ContractMeterPeriod> list,String htmlUrl,BigDecimal blReserveFundsRatioNew,String projectName) {
+    private ReportResult getSubsidyApplicationPaymentReviewPDF(String url2, Long contractId, Long periodId, List<ContractMeterPeriod> list,String htmlUrl,BigDecimal blReserveFundsRatioNew,String projectName,Long projectId,Long reportId) {
         //判断当前是否是只有1期计量
         Boolean isOnePeriod = false;
         ContractMeterPeriod contractMeterPeriod = list.get(0);
@@ -2618,7 +2616,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             modInput = CommonUtil.getOSSInputStream(url2);
             workbook = WorkbookFactory.create(modInput);
             Sheet sheet = workbook.getSheetAt(0);
-
             //***************************************************************建安费*************************************************************************
             Cell a6 = getCellByAddress(sheet, "A6");
             a6.setCellValue("建安费");
@@ -2678,15 +2675,53 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             //***************************************************************其他费用*************************************************************************
             Cell a7 = getCellByAddress(sheet, "A7");
             a7.setCellValue("其他费用");
+            //上期末累计支付(其他费用)
+            BigDecimal beforeEndMoney=new BigDecimal("0");
+            //本期累计支付(其他费用)
+            BigDecimal nowMoney=new BigDecimal("0");
+            //本期末累计支付(其他费用)
+            BigDecimal endMoney=new BigDecimal("0");
+            if(list.size()>0){
+                OptionalInt index=IntStream.range(0, list.size())
+                    .filter(i -> list.get(i).getId().equals(periodId))
+                    .findFirst();
+                //j大于0 说明需要计算之前的值
+                if(index.isPresent()){
+                    int j = index.getAsInt();
+                    if(j>0){
+                        String reportIdSql="Select id from s_interim_pay_certificate where contract_period_id="+list.get(j-1).getId()+" and is_deleted=0";
+                        Long cerid = jdbcTemplate.queryForObject(reportIdSql, Long.class);
+                        Object o = bladeRedis.get("repordId" + cerid + "elseEndMoney");
+                        if(o!=null){
+                            beforeEndMoney =(BigDecimal) o;
+                        }
+                    }
+                }
+            }
+            String sql3="Select * From s_interim_pay_certificate_item where certificate_id="+reportId+" and chapter_seq='其他费用'"+" and is_deleted=0";
+            List<InterimPayCertificateItem> query3 = jdbcTemplate.query(sql3, new BeanPropertyRowMapper<>(InterimPayCertificateItem.class));
+            if(!query3.isEmpty()){
+                InterimPayCertificateItem item = query3.get(0);
+                if(ObjectUtil.isNotEmpty(item.getCurrentPeriodPay())){
+                    nowMoney=nowMoney.add(new BigDecimal(item.getCurrentPeriodPay()));
+                }
+            }
+            endMoney=beforeEndMoney.add(nowMoney);
+            bladeRedis.set("repordId"+reportId+"elseEndMoney",endMoney);
+
             //------------------------------------------------------------项目总投资------------------------------------------------------------
             Cell b7 = getCellByAddress(sheet, "B7");
-            b7.setCellValue("");
+            if(projectId.equals(1701065246615506946L)&&contractId.equals(1701169960321519618L)){
+                b7.setCellValue("1129800");
+            }else {
+                b7.setCellValue("");
+            }
             //------------------------------------------------------------上期末累计计量金额------------------------------------------------------------
             Cell d7 = getCellByAddress(sheet, "D7");
             d7.setCellValue("0");
             //------------------------------------------------------------上期末累计支付金额------------------------------------------------------------
             Cell e7 = getCellByAddress(sheet, "E7");
-            e7.setCellValue("0");
+            e7.setCellValue(beforeEndMoney.toString());
             //------------------------------------------------------------本期计量金额------------------------------------------------------------
             Cell g7 = getCellByAddress(sheet, "G7");
             g7.setCellValue("0");
@@ -2696,24 +2731,27 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             h7.setCellValue("0");
             //------------------------------------------------------------本期支付金额------------------------------------------------------------
             Cell i7 = getCellByAddress(sheet, "I7");
-            i7.setCellValue("0");
+            i7.setCellValue(nowMoney.toString());
             //------------------------------------------------------------本期末累计支付金额------------------------------------------------------------
             Cell k7 = getCellByAddress(sheet, "K7");
-            k7.setCellValue("0");
+            k7.setCellValue(endMoney.toString());
             //------------------------------------------------------------支付比例------------------------------------------------------------
             Cell m7 = getCellByAddress(sheet, "M7");
 
-
             //***************************************************************合计*************************************************************************
             //------------------------------------------------------------项目总投资------------------------------------------------------------
             Cell b8 = getCellByAddress(sheet, "B8");
-            b8.setCellValue(totalMoney.toString());
+            if(projectId.equals(1701065246615506946L)&&contractId.equals(1701169960321519618L)){
+                b8.setCellValue(totalMoney.add(new BigDecimal("1129800")).toString());
+            }else {
+                b8.setCellValue(totalMoney.toString());
+            }
             //------------------------------------------------------------上期末累计计量金额------------------------------------------------------------
             Cell d8 = getCellByAddress(sheet, "D8");
             d8.setCellValue(allMoney.toString());
             //------------------------------------------------------------上期末累计支付金额------------------------------------------------------------
             Cell e8 = getCellByAddress(sheet, "E8");
-            e8.setCellValue(lastEndPay.toString());
+            e8.setCellValue(lastEndPay.add(beforeEndMoney).toString());
             //------------------------------------------------------------本期计量金额------------------------------------------------------------
             Cell g8 = getCellByAddress(sheet, "G8");
             g8.setCellValue(AllcurrentMeterTotal.toString());
@@ -2723,10 +2761,10 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             h8.setCellValue(allMoneyNow.toString());
             //------------------------------------------------------------本期支付金额------------------------------------------------------------
             Cell i8 = getCellByAddress(sheet, "I8");
-            i8.setCellValue(currentPay.toString());
+            i8.setCellValue(currentPay.add(nowMoney).toString());
             //------------------------------------------------------------本期末累计支付金额------------------------------------------------------------
             Cell k8 = getCellByAddress(sheet, "K8");
-            k8.setCellValue(endPay.toString());
+            k8.setCellValue(endPay.add(endMoney).toString());
             //------------------------------------------------------------支付比例------------------------------------------------------------
             Cell m8 = getCellByAddress(sheet, "M8");
 
@@ -2841,32 +2879,47 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             a5.setCellValue(totalMoney.toString());
             //------------------------------------------------------------上期末累计变更------------------------------------------------------------
             BigDecimal lastEndChangeMoney = new BigDecimal(0);
-
             if (isOnePeriod){
                 lastEndChangeMoney = lastEndChangeMoney;
             }else {
-                //根据开始时间获取当前计量期之前的所有计量期
-                List<ContractMeterPeriod> listFlitered = list.stream().filter(item -> item.getStartDate().isBefore(startDate)).collect(Collectors.toList());
-                for (ContractMeterPeriod contractMeterPeriod : listFlitered) {
-                    //本期变更
-                    BigDecimal changeMoneyNow = new BigDecimal(0);
-                    String sql2 = "SELECT change_money, change_approval_date FROM `s_change_token_form` WHERE contract_id = '"+contractId +"' and approve_status = 2 and command_status = 1 and is_deleted = 0 ";
-                    List<ChangeToken> changeTokens = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(ChangeToken.class));
-                    List<ChangeToken> collect = changeTokens.stream()
-                            .filter(c -> c.getChangeApprovalDate().isAfter(contractMeterPeriod.getStartDate()) && c.getChangeApprovalDate().isBefore(contractMeterPeriod.getEndDate()))
-                            .collect(Collectors.toList());
-                    if(ObjectUtil.isNotEmpty(collect)){
-                        for (ChangeToken changeToken : collect) {
-                            changeMoneyNow =  changeMoneyNow.add(changeToken.getChangeMoney());
+                if(list.size()>0){
+                    OptionalInt index=IntStream.range(0, list.size())
+                        .filter(i -> list.get(i).getId().equals(periodId))
+                        .findFirst();
+                    //j大于0 说明需要计算之前的值
+                    //到上期末完成金额 从redis里面取
+                    BigDecimal beforeEndMoney=BigDecimal.ZERO;
+                    if(index.isPresent()){
+                        int j = index.getAsInt();
+                        if(j>0){
+                            Object o = bladeRedis.get("periodId" + list.get(j - 1).getId() + "lastEndChangeMoneySum");
+                            if(o!=null){
+                                lastEndChangeMoney=(BigDecimal) o;
+                            }
                         }
                     }
-                    changeMoneyNow = changeMoneyNow.setScale(0, RoundingMode.HALF_UP);
-                    lastEndChangeMoney = lastEndChangeMoney.add(changeMoneyNow);
                 }
-            }
-
-            /*Cell c5 = getCellByAddress(sheet, "C5");
-            c5.setCellValue(lastEndChangeMoney.toString());*/
+                 //List<ContractMeterPeriod> listFlitered = list.stream().filter(item -> item.getStartDate().isBefore(startDate)).collect(Collectors.toList());
+//                for (ContractMeterPeriod contractMeterPeriod : listFlitered) {
+//                    //本期变更
+//                    BigDecimal changeMoneyNow = new BigDecimal(0);
+//                    String sql2 = "SELECT change_money, change_approval_date FROM `s_change_token_form` WHERE contract_id = '"+contractId +"' and approve_status = 2 and command_status = 1 and is_deleted = 0 ";
+//                    List<ChangeToken> changeTokens = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(ChangeToken.class));
+//                    List<ChangeToken> collect = changeTokens.stream()
+//                            .filter(c -> c.getChangeApprovalDate().isAfter(contractMeterPeriod.getStartDate()) && c.getChangeApprovalDate().isBefore(contractMeterPeriod.getEndDate()))
+//                            .collect(Collectors.toList());
+//                    if(ObjectUtil.isNotEmpty(collect)){
+//                        for (ChangeToken changeToken : collect) {
+//                            changeMoneyNow =  changeMoneyNow.add(changeToken.getChangeMoney());
+//                        }
+//                    }
+//                    changeMoneyNow = changeMoneyNow.setScale(0, RoundingMode.HALF_UP);
+//                    lastEndChangeMoney = lastEndChangeMoney.add(changeMoneyNow);
+//                }
+
+            }
+            Cell c5 = getCellByAddress(sheet, "C5");
+            c5.setCellValue(lastEndChangeMoney==null?"0":lastEndChangeMoney.toString());
             //------------------------------------------------------------本期变更------------------------------------------------------------
             //获取当前合同段的所有已审批并且已下达的变更令
             /*String sql4 = "SELECT id,change_money,change_approval_date from s_change_token_form where contract_id = '"+contractId +"' and approve_status = 2 and command_status = 1 and is_deleted = 0";
@@ -2883,14 +2936,15 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 }
             }
             changeMoneySum = changeMoneySum.setScale(0, RoundingMode.HALF_UP);*/
-            BigDecimal changemoneySum = changeMoneyNew.subtract(totalMoney).setScale(0, RoundingMode.HALF_UP);
+            BigDecimal changemoneySum = changeMoneyNew.subtract(totalMoney).subtract(lastEndChangeMoney).setScale(0, RoundingMode.HALF_UP);
             Cell e5 = getCellByAddress(sheet, "E5");
             e5.setCellValue(changemoneySum.toString());
             //------------------------------------------------------------本期末累计变更------------------------------------------------------------
             //上期末累计变更+本期变更
-            /*BigDecimal lastEndChangeMoneySum = lastEndChangeMoney.add(changeMoneySum);
+            BigDecimal lastEndChangeMoneySum = lastEndChangeMoney.add(changemoneySum);
             Cell g5 = getCellByAddress(sheet, "G5");
-            g5.setCellValue(lastEndChangeMoneySum.toString());*/
+            g5.setCellValue(lastEndChangeMoneySum.toString());
+            bladeRedis.set("periodId"+periodId+"lastEndChangeMoneySum",lastEndChangeMoneySum);
             //------------------------------------------------------------变更后合同价------------------------------------------------------------
             Cell i5 = getCellByAddress(sheet, "I5");
             i5.setCellValue(changeMoneyNew.toString());
@@ -3230,6 +3284,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             monthlyReport.setCurrentMeterMoney(vo.getContractMoney().setScale(0,RoundingMode.HALF_UP));
             monthlyReport.setAfterCurrentMeterMoney(vo.getChangeMoney().setScale(0,RoundingMode.HALF_UP));
             monthlyReport.setChangeMeterMoney(monthlyReport.getAfterCurrentMeterMoney().subtract(monthlyReport.getCurrentMeterMoney()));
+            monthlyReport.setChapterSeq(vo.getChapterNumber());
             String key=vo.getChapterNumber();
             if(list.size()>0){
                OptionalInt index=IntStream.range(0, list.size())
@@ -3295,6 +3350,40 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             bladeRedis.set("periodId:"+periodId+"formNumber:"+key+"nowEndMoney",monthlyReport.getNowEndMoney());
             values.add(monthlyReport);
         }
+        //处理跨期 到上期末完成金额和工程量
+        for (MonthlyReportVo vo1 : values) {
+            if(vo1.getBeforeEndMoney()==null){
+                if(list.size()>0){
+                    OptionalInt index=IntStream.range(0, list.size())
+                        .filter(i -> list.get(i).getId().equals(periodId))
+                        .findFirst();
+                    //i大于0 说明需要计算之前的值
+                    if(index.isPresent()){
+                        int j = index.getAsInt();
+                        if(j>0){
+                            List<ContractMeterPeriod> list2 = list.subList(0, j);
+                            BigDecimal money=new BigDecimal("0");
+                            for (ContractMeterPeriod period : list2) {
+                                Object o = bladeRedis.get("periodId:"+period.getId()+"formNumber:"+vo1.getChapterSeq()+"nowMoney");
+                                if(o!=null){
+                                    BigDecimal  money1=(BigDecimal) o;
+                                    money= money.add(money1);
+                                }
+                            }
+                            vo1.setBeforeEndMoney(money);
+                            if(vo1.getNowMoney()!=null){
+                                vo1.setNowEndMoney(money.add(vo1.getNowMoney()));
+                            }else {
+                                vo1.setNowEndMoney(money);
+                            }
+                            if(vo1.getNowEndMoney().compareTo(BigDecimal.ZERO)!=0){
+                                bladeRedis.set("periodId:"+periodId+"formNumber:"+vo1.getChapterSeq()+"nowEndMoney",vo1.getNowEndMoney());
+                            }
+                        }
+                    }
+                }
+            }
+        }
         MonthlyReportVo m1 = new MonthlyReportVo();
         m1.setFormNumber("D");
         m1.setFormName("暂定金");
@@ -3431,17 +3520,76 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
         MonthlyReportVo m17 = new MonthlyReportVo();
         m17.setFormName("其他扣款");
+        if(list.size()>0){
+            OptionalInt index=IntStream.range(0, list.size())
+                .filter(i -> list.get(i).getId().equals(periodId))
+                .findFirst();
+            //j大于0 说明需要计算之前的值
+            if(index.isPresent()){
+                int j = index.getAsInt();
+                if(j>0){
+                    String reportIdSql="Select id from s_interim_pay_certificate where contract_period_id="+list.get(j-1).getId()+" and is_deleted=0";
+                    Long cerid = jdbcTemplate.queryForObject(reportIdSql, Long.class);
+                    String sql1="Select * From s_interim_pay_certificate_item where certificate_id="+cerid+" and chapter_seq='其他扣款'";
+                    List<InterimPayCertificateItem> query = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(InterimPayCertificateItem.class));
+                    if(!query.isEmpty()){
+                        InterimPayCertificateItem item = query.get(0);
+                        if(item.getCurrentPeriodEndPay()!=null){
+                            m17.setBeforeEndMoney(new BigDecimal(item.getCurrentPeriodEndPay()));
+                        }
+                    }
+                }
+            }
+        }
+        String sql2="Select * From s_interim_pay_certificate_item where certificate_id="+reportId+" and chapter_seq='其他扣款'"+" and is_deleted=0";
+        List<InterimPayCertificateItem> query = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(InterimPayCertificateItem.class));
+        if(!query.isEmpty()){
+            InterimPayCertificateItem item = query.get(0);
+            if(ObjectUtil.isNotEmpty(item.getCurrentPeriodPay())){
+                m17.setNowMoney(new BigDecimal(item.getCurrentPeriodPay()));
+            }
+        }
         values.add(m17);
+        //支付项里面的其他费用;
+        MonthlyReportVo m = new MonthlyReportVo();
+        m.setFormName("其他费用");
+        if(list.size()>0){
+            OptionalInt index=IntStream.range(0, list.size())
+                .filter(i -> list.get(i).getId().equals(periodId))
+                .findFirst();
+            //j大于0 说明需要计算之前的值
+            if(index.isPresent()){
+                int j = index.getAsInt();
+                if(j>0){
+                    //上一期的支付项其他费用
+                    String reportIdSql="Select id from s_interim_pay_certificate where contract_period_id="+list.get(j-1).getId()+" and is_deleted=0"+" and is_deleted=0";
+                    Long cerid = jdbcTemplate.queryForObject(reportIdSql, Long.class);
+                    String sql1="Select * From s_interim_pay_certificate_item where certificate_id="+cerid+" and chapter_seq='其他费用'";
+                    List<InterimPayCertificateItem> query1 = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(InterimPayCertificateItem.class));
+                    if(!query1.isEmpty()){
+                        InterimPayCertificateItem item = query1.get(0);
+                        if(item.getCurrentPeriodEndPay()!=null){
+                            m.setBeforeEndMoney(new BigDecimal(item.getCurrentPeriodEndPay()));
+                        }
 
+                    }
+                }
+            }
+        }
+        String sql3="Select * From s_interim_pay_certificate_item where certificate_id="+reportId+" and chapter_seq='其他费用'"+" and is_deleted=0";
+        List<InterimPayCertificateItem> query3 = jdbcTemplate.query(sql3, new BeanPropertyRowMapper<>(InterimPayCertificateItem.class));
+        if(!query3.isEmpty()){
+            InterimPayCertificateItem item = query3.get(0);
+            if(ObjectUtil.isNotEmpty(item.getCurrentPeriodPay())){
+                m.setNowMoney(new BigDecimal(item.getCurrentPeriodPay()));
+            }
+        }
         MonthlyReportVo m18 = new MonthlyReportVo();
         m18.setFormName("扣款合计");
-        if(ObjectUtil.isNotEmpty(m13.getBeforeEndMoney())){
-         m18.setBeforeEndMoney(m13.getBeforeEndMoney());
-        }
-        m18.setNowMoney(m13.getNowMoney());
-        m18.setNowEndMoney(m13.getNowEndMoney());
+        m18.setBeforeEndMoney(addWithNullCheck(m13.getBeforeEndMoney(),m17.getBeforeEndMoney()));
+        m18.setNowMoney(addWithNullCheck(m13.getNowMoney(),m17.getNowMoney()));
+        m18.setNowEndMoney(addWithNullCheck(m18.getBeforeEndMoney(),m18.getNowMoney()));
         values.add(m18);
-
         MonthlyReportVo m19 = new MonthlyReportVo();
         m19.setFormName("实际支付");
         if(ObjectUtil.isNotEmpty(m11.getBeforeEndMoney())&&ObjectUtil.isNotEmpty(m18.getBeforeEndMoney())){
@@ -3451,7 +3599,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             if(percentage4.compareTo(BigDecimal.ZERO)!=0){
                 m19.setBeforeEndC(percentage4+"%");
             }
-
         }
         m19.setNowMoney(m11.getNowMoney().subtract(m18.getNowMoney()));
         BigDecimal percentage5 = m19.getNowMoney().divide(m11.getAfterCurrentMeterMoney(), 10, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100"));
@@ -3470,6 +3617,32 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         bladeRedis.set("periodId:"+periodId+"nowMoney",m19.getNowMoney());
         values.add(m19);
         setZeroBigDecimalFieldsToNullInList(values);
+        List<MonthlyReportVo>vos=new ArrayList<>(values);
+        int i = vos.indexOf(m17);
+        if(i!=-1){
+            vos.add(i+1,m);
+        }
+        String sql4="Select * From s_interim_pay_certificate_item where certificate_id="+reportId+" and is_deleted=0";
+        List<InterimPayCertificateItem> list4 = jdbcTemplate.query(sql4, new BeanPropertyRowMapper<>(InterimPayCertificateItem.class));
+        if(list4.isEmpty()){
+            //第一次需要新增支付项
+            interimPayCertificateItemClient.addInterimPayCertificateItem(reportId,vos);
+        }else {
+            //第二次后就是更新
+            for (InterimPayCertificateItem item : list4) {
+                for (MonthlyReportVo vo : vos) {
+                    if(item.getChapterSeq().equals(vo.getFormName())){
+                        item.setCurrentPeriodEndPay(vo.getNowEndMoney()==null?null:vo.getNowEndMoney().toString());
+                        item.setCurrentPeriodPay(vo.getNowMoney()==null?null:vo.getNowMoney().toString());
+                        item.setPreviousPeriodEndPay(vo.getBeforeEndMoney()==null?null:vo.getBeforeEndMoney().toString());
+                    }
+                }
+            }
+            interimPayCertificateItemClient.updateInterimPayCertificateItem(list4);
+        }
+
+
+
         InputStream modInput = null;
         FileInputStream excelFileInput = null;
         FileOutputStream outputStream = null;
@@ -3550,7 +3723,13 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
           reportResult.setName("工程支付月报");
           return reportResult;
     }
-
+    public static BigDecimal addWithNullCheck(BigDecimal b, BigDecimal c) {
+        // 使用 BigDecimal.ZERO 作为默认值
+        BigDecimal bValue = (b == null) ? BigDecimal.ZERO : b;
+        BigDecimal cValue = (c == null) ? BigDecimal.ZERO : c;
+        // 执行加法操作
+        return bValue.add(cValue);
+    }
 
     /**
      * 清单支付报表获取PDF
@@ -3653,7 +3832,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             vo.setNowTotal(detailVO.getAllMeterTotal());
             //本期完成金额
             vo.setNowMoney(detailVO.getAllMeterTotal().multiply(detailVO.getCurrentPrice()).setScale(0, RoundingMode.HALF_UP));
-
+            bladeRedis.set("periodId:"+periodId+"formNumber:"+vo.getFormNumber()+"nowTotal",vo.getNowTotal());
+            bladeRedis.set("periodId:"+periodId+"formNumber:"+vo.getFormNumber()+"nowMoney",vo.getNowMoney());
 
             //大于0表示有上期的 需要添加上期末数据
             if(changeFormDetailMap.size()>0){
@@ -3697,6 +3877,54 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             list1.add(vo);
         }
         list1=list1.stream().sorted(Comparator.comparing(MeterInventoryVO1::getSort)).collect(Collectors.toList());
+        //处理跨期 到上期末完成金额和工程量
+        for (MeterInventoryVO1 vo1 : list1) {
+            if(vo1.getBeforeEndMoney()==null){
+                if(vo1.getFormNumber().equals("419-1-a")){
+                    System.out.println("111");
+                }
+                if(list.size()>0){
+                    OptionalInt index=IntStream.range(0, list.size())
+                        .filter(i -> list.get(i).getId().equals(periodId))
+                        .findFirst();
+                    //i大于0 说明需要计算之前的值
+                    if(index.isPresent()){
+                        int j = index.getAsInt();
+                        if(j>0){
+                            List<ContractMeterPeriod> list2 = list.subList(0, j);
+                            BigDecimal total=new BigDecimal("0");
+                            BigDecimal money=new BigDecimal("0");
+                            for (ContractMeterPeriod period : list2) {
+                                Object o = bladeRedis.get("periodId:" + period.getId() + "formNumber:" + vo1.getFormNumber() + "nowMoney");
+                                Object o1 = bladeRedis.get("periodId:" + period.getId() + "formNumber:" + vo1.getFormNumber() + "nowTotal");
+                                if(o!=null){
+                                    BigDecimal  money1=(BigDecimal) o;
+                                    money= money.add(money1);
+                                }
+                                if(o1!=null){
+                                    BigDecimal  total1=(BigDecimal) o1;
+                                    total= total.add(total1);
+                                }
+                            }
+                            vo1.setBeforeEndMoney(money);
+                            vo1.setBeforeEndTotal(total);
+                            if(vo1.getNowMoney()!=null){
+                                vo1.setNowEndMoney(money.add(vo1.getNowMoney()));
+                            }
+                            if(vo1.getNowTotal()!=null){
+                                vo1.setNowEndTotal(total.add(vo1.getNowTotal()));
+                            }
+                            if(ObjectUtil.isNotEmpty(vo1.getNowEndTotal())&&vo1.getNowEndTotal().compareTo(BigDecimal.ZERO)!=0){
+                                bladeRedis.set("periodId:"+periodId+"formNumber:"+vo1.getFormNumber()+"detailsTotal",vo1.getNowEndTotal());
+                            }
+                            if(ObjectUtil.isNotEmpty(vo1.getNowEndMoney())&&vo1.getNowEndMoney().compareTo(BigDecimal.ZERO)!=0){
+                                bladeRedis.set("periodId:"+periodId+"formNumber:"+vo1.getFormNumber()+"detailsMoney",vo1.getNowEndMoney());}
+
+                        }
+                    }
+                }
+            }
+        }
         setZeroBigDecimalFieldsToNullInList(list1);
         ReportResult reportResult = new ReportResult();
           String suffix=SnowFlakeUtil.getId()+".pdf";
@@ -3704,8 +3932,14 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         String localImgUrl=sysLocalFileUrl+suffix;
         for (MeterInventoryVO1 vo1 : list1) {
             for (ContractInventoryForm form : query) {
-                if(vo1.getFormName().equals(form.getFormName())){
+                if(vo1.getFormNumber().equals(form.getFormNumber())){
                     vo1.setImportNumber(form.getChapterNumber()!=null?form.getChapterNumber():vo1.getFormNumber());
+                    break;
+                }else {
+                    if(vo1.getFormName().equals(form.getFormName())){
+                        vo1.setImportNumber(form.getChapterNumber()!=null?form.getChapterNumber():vo1.getFormNumber());
+                        break;
+                    }
                 }
             }
         }

+ 15 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -36,6 +36,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.bean.NodeVO;
+import org.springblade.manager.controller.ExcelTabController;
 import org.springblade.manager.dto.*;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.excel.WbsExcelBatchUtil;
@@ -50,6 +51,7 @@ import org.springblade.manager.utils.CompositeKey;
 import org.springblade.manager.vo.*;
 import org.springblade.system.cache.ParamCache;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.BadSqlGrammarException;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
@@ -1237,6 +1239,19 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     .eq(WbsTreeContract::getStatus, 1)
                     .ne(WbsTreeContract::getIsBussShow, 2)); //隐藏的表单不操作
 
+            Map<String, List<WbsTreeContract>> collect = tabs.stream().collect(Collectors.groupingBy(WbsTreeContract::getNodeName));
+            for (Map.Entry<String, List<WbsTreeContract>> stringListEntry : collect.entrySet()) {
+                if(stringListEntry.getValue().size()>1){
+                    List<WbsTreeContract> list = stringListEntry.getValue();
+                    for (WbsTreeContract wbsTreeContract : list) {
+                        if(wbsTreeContract.getIsCopeTab()==null||wbsTreeContract.getIsCopeTab()!=2){
+
+                        }
+                    }
+
+                }
+            }
+
             Map<Long, WbsTreeContract> tabMaps = tabs.stream().collect(Collectors.toMap(WbsTreeContract::getPKeyId, Function.identity()));
 
             //初始化表

+ 3 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/InterimPayCertificateController.java

@@ -29,6 +29,7 @@ import org.springblade.meter.entity.ContractMeterPeriod;
 import org.springblade.meter.entity.InterimPayCertificateItem;
 import org.springblade.meter.service.IContractMeterPeriodService;
 import org.springblade.meter.vo.InterimPayCertificateVO;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -48,6 +49,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 @Api(value = "中期支付证书", tags = "中期支付证书接口")
 public class InterimPayCertificateController extends BladeController {
 
+    @Lazy
 	private final TaskController taskController;
 
 	private final IInterimPayCertificateService interimPayCertificateService;
@@ -102,7 +104,7 @@ public class InterimPayCertificateController extends BladeController {
 		}
 		interimPayCertificateService.update2(interimPayCertificate);
 		// taskType 10 代表任务查看pdf
-		taskController.calculate(interimPayCertificate.getId().toString(),0,10);
+        //taskController.calculate(interimPayCertificate.getId().toString(),0,10);
 		return R.success("修改成功");
 	}
 

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

@@ -2,6 +2,13 @@ package org.springblade.meter.service;
 
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.meter.entity.InterimPayCertificateItem;
+import org.springblade.meter.vo.MonthlyReportVo;
+
+import java.util.List;
 
 public interface IInterimPayCertificateItemService extends BaseService<InterimPayCertificateItem> {
+
+    void addInterimPayCertificateItem(Long certificateId, List<MonthlyReportVo> values);
+
+    void updateInterimPayCertificateItem(List<InterimPayCertificateItem> list4);
 }

+ 24 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateItemClientImpl.java

@@ -0,0 +1,24 @@
+package org.springblade.meter.service.impl;
+
+import lombok.AllArgsConstructor;
+import org.springblade.meter.entity.InterimPayCertificateItem;
+import org.springblade.meter.feign.InterimPayCertificateItemClient;
+import org.springblade.meter.service.IInterimPayCertificateItemService;
+import org.springblade.meter.vo.MonthlyReportVo;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+@RestController
+@AllArgsConstructor
+public class InterimPayCertificateItemClientImpl implements InterimPayCertificateItemClient {
+   private final IInterimPayCertificateItemService iInterimPayCertificateItemService;
+    @Override
+    public void addInterimPayCertificateItem(Long certificateId, List<MonthlyReportVo> values) {
+        iInterimPayCertificateItemService.addInterimPayCertificateItem(certificateId,values);
+    }
+
+    @Override
+    public void updateInterimPayCertificateItem(List<InterimPayCertificateItem> list4) {
+        iInterimPayCertificateItemService.updateInterimPayCertificateItem(list4);
+    }
+}

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

@@ -1,10 +1,18 @@
 package org.springblade.meter.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import io.swagger.annotations.ApiModelProperty;
+import org.springblade.common.utils.SnowFlakeUtil;
 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.springblade.meter.vo.MonthlyReportVo;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @author yangyj
@@ -13,4 +21,38 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class InterimPayCertificateItemServiceImpl extends BaseServiceImpl<InterimPayCertificateItemMapper, InterimPayCertificateItem> implements IInterimPayCertificateItemService {
+
+    @Override
+    @Transactional
+    public void addInterimPayCertificateItem(Long certificateId, List<MonthlyReportVo> values) {
+        if(!values.isEmpty()){
+            List<InterimPayCertificateItem>list=new ArrayList<>();
+            for (int i = 0; i < values.size(); i++) {
+                MonthlyReportVo vo = values.get(i);
+                InterimPayCertificateItem item = new InterimPayCertificateItem();
+                item.setCertificateId(certificateId);
+                item.setSort(i);
+                item.setFormName(vo.getChapterSeq());
+                item.setChapterSeq(vo.getFormName());
+                item.setContractAmount(vo.getCurrentMeterMoney()==null?null:vo.getCurrentMeterMoney().toString());
+                item.setRevisedTotal(vo.getChangeMeterMoney()==null?null:vo.getChangeMeterMoney().toString());
+                item.setRevisedAmount(vo.getAfterCurrentMeterMoney()==null?null:vo.getAfterCurrentMeterMoney().toString());
+                item.setCurrentPeriodEndPay(vo.getNowEndMoney()==null?null:vo.getNowEndMoney().toString());
+                item.setPreviousPeriodEndPay(vo.getBeforeEndMoney()==null?null:vo.getBeforeEndMoney().toString());
+                item.setCurrentPeriodPay(vo.getNowMoney()==null?null:vo.getNowMoney().toString());
+                if(vo.getFormName().equals("其他扣款")||vo.getFormName().equals("其他费用")){
+                    item.setNoApply(1);
+                }
+                list.add(item);
+            }
+            saveBatch(list);
+        }
+    }
+
+    @Override
+    public void updateInterimPayCertificateItem(List<InterimPayCertificateItem> list4) {
+        if(!list4.isEmpty()){
+            updateBatchById(list4);
+        }
+    }
 }

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

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Query;
+import org.springblade.meter.controller.TaskController;
 import org.springblade.meter.entity.InterimPayCertificate;
 import org.springblade.meter.entity.InterimPayCertificateItem;
 import org.springblade.meter.entity.MeterPeriod;
@@ -50,9 +51,9 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 public class InterimPayCertificateServiceImpl extends BaseServiceImpl<InterimPayCertificateMapper, InterimPayCertificate> implements IInterimPayCertificateService {
 
-    private  final JdbcTemplate jdbcTemplate;
+
     private final IInterimPayCertificateItemService interimPayCertificateItemService;
-    private final IInterimPayCertificateItemService iInterimPayCertificateItemService;
+
 
     /**
      * 新增 中期支付证书
@@ -80,7 +81,9 @@ public class InterimPayCertificateServiceImpl extends BaseServiceImpl<InterimPay
         }
         List<InterimPayCertificateItem> list = interimPayCertificate.getPayList();
         if(list.size()>0){
-            this.interimPayCertificateItemService.saveOrUpdateBatch(list);
+            for (InterimPayCertificateItem item : list) {
+                this.interimPayCertificateItemService.saveOrUpdate(item);
+            }
         }
         this.updateById(interimPayCertificate);
     }
@@ -128,7 +131,7 @@ 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).orderByAsc(InterimPayCertificateItem::getSort));
+        List<InterimPayCertificateItem> items = this.interimPayCertificateItemService.list(Wrappers.<InterimPayCertificateItem>lambdaQuery().eq(InterimPayCertificateItem::getCertificateId,id).eq(InterimPayCertificateItem::getIsDeleted,0).orderByAsc(InterimPayCertificateItem::getSort));
         vo.setPayList(items);
         return vo;
     }