浏览代码

中期支付证书监理

yangyj 1 年之前
父节点
当前提交
7de4fdafca

+ 25 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterInfo.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.vo;
 
 import cn.hutool.log.StaticLog;
+import com.aliyuncs.utils.MapUtils;
 import lombok.Data;
 import org.springblade.manager.dto.TreeNode;
 import org.springblade.meter.entity.InterimPayCertificateItem;
@@ -8,6 +9,7 @@ import org.springblade.meter.entity.InterimPayCertificateItem;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
 
 /**
  * @author yangyj
@@ -49,6 +51,11 @@ public class MeterInfo {
     /**支付信息*/
     /*List<Payment> paymentList;*/
     LinkedHashMap<Integer,List<Payment>> paymentListMap;
+
+    /**本期*/
+    public MeterPeriodInfo periodInfo;
+    /**上期*/
+    public MeterPeriodInfo previousPeriodInfo;
     /**需要延后生成FormData(元素对象)*/
     List<DataModel> delay =new LinkedList<>();
     /**合同工程清单*/
@@ -64,5 +71,22 @@ public class MeterInfo {
     }
 
     /*中期支付证书里的*/
-    private List<InterimPayCertificateItem> interimPayCertificateItems =new ArrayList<>();
+    private List<InterimPayCertificateItem> interimPayCertificateItems ;
+
+    public Map<Long,LinkedHashMap<String,InterimPayCertificateItem>> getInterimPayCertificateItemGroup(){
+        if(interimPayCertificateItems!=null){
+            return interimPayCertificateItems.stream()
+                    .collect(Collectors.groupingBy(
+                            InterimPayCertificateItem::getCertificateId,
+                            Collectors.toMap(
+                                    InterimPayCertificateItem::getChapterSeq,
+                                    item -> item,
+                                    (v1,v2)->v1,
+                                    LinkedHashMap::new
+                            )
+                    ));
+        }
+        return new HashMap<>();
+    }
+
 }

+ 2 - 8
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/feign/CertificateItemClient.java

@@ -1,28 +1,22 @@
 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";
+    String API_PREFIX = "/CertificateItem";
 
     /**
-     * 获取首件记录
+     * 保存中期证书项目详情
      */
     @PostMapping(API_PREFIX + "/saveOrUpdate")
     void saveOrUpdate(@RequestBody List<InterimPayCertificateItem> items);

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

@@ -10,6 +10,7 @@ import org.springblade.core.tool.utils.RegexUtil;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.dto.TreeNode;
 import org.springblade.manager.vo.*;
+import org.springblade.meter.entity.InterimPayCertificateItem;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -45,6 +46,7 @@ public class ExecutorInit extends FormulaExecutor {
     private Function<Long, List<Payment>> paymentListFc;
     private Function<Long, List<InventoryForm>> inventoryFormFc;
     private Function<Long, List<MaterialAdjust>> materialAdjustFc;
+    private Function<String, List<InterimPayCertificateItem>> interimPayCertificateItemFc;
 
 
     public static final String SZ="[ 一二三四五六七八九十]+";
@@ -145,9 +147,23 @@ public class ExecutorInit extends FormulaExecutor {
         tec.meterInfo.getMeterPeriodInfoLinkedHashMap().values().forEach(e->{
             if(tec.getReportId().equals(e.getReportId())){
                 tec.periodInfo=e;
+                tec.meterInfo.setPeriodInfo(e);
             }
         });
         tec.periodInfo.setPeriodName(tec.periodInfo.getPeriodNumber());
+        if(tec.periodInfo!=null){
+           List<MeterPeriodInfo> sortList= meterPeriodInfoList.stream().sorted(Comparator.comparingInt(MeterPeriodInfo::getSort)).collect(Collectors.toList());
+           int n = sortList.indexOf(tec.periodInfo);
+           if(n>0){
+               tec.meterInfo.setPreviousPeriodInfo(sortList.get(n-1));
+           }
+        }
+        assert tec.periodInfo != null;
+        String certificateIds=""+tec.periodInfo.getReportId();
+        if(tec.meterInfo.getPreviousPeriodInfo()!=null){
+            certificateIds=certificateIds+","+tec.meterInfo.getPreviousPeriodInfo().getReportId();
+        }
+        tec.meterInfo.setInterimPayCertificateItems(interimPayCertificateItemFc.apply(certificateIds));
     }
 
     private void startInfo(){

+ 26 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -352,7 +352,7 @@ public class ExecutorMeter extends FormulaExecutor {
         private final LinkedHashMap<String,String> itemNamesMap=new LinkedHashMap<>();
                /* Arrays.asList("正常监理服务费","其他费用","附加监理服务费","额外服务费","缺陷期监理服务费","小计","费用调整","合计","监理单位违约金","奖励","动员预付款","扣回动员预付款","实际支付金额");*/
          {
-            itemNamesMap.put("正常监理服务费","100");
+             itemNamesMap.put("正常监理服务费","100");
              itemNamesMap.put("其他费用","-100");
              itemNamesMap.put("附加监理服务费","-100");
              itemNamesMap.put("额外服务费","-100");
@@ -380,11 +380,18 @@ public class ExecutorMeter extends FormulaExecutor {
             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<>();
+            Map<Long,LinkedHashMap<String,InterimPayCertificateItem>>interimPayCertificateItemGroup=tec.meterInfo.getInterimPayCertificateItemGroup();
+            LinkedHashMap<String,InterimPayCertificateItem> previousMap = null;
+            if(tec.meterInfo.getPreviousPeriodInfo()!=null){
+                previousMap=  interimPayCertificateItemGroup.getOrDefault(tec.meterInfo.getPreviousPeriodInfo().getReportId(),new LinkedHashMap<>());
+            }
+            LinkedHashMap<String,InterimPayCertificateItem> currentMap = interimPayCertificateItemGroup.getOrDefault(tec.periodInfo.getReportId(),new LinkedHashMap<>());
             List<InterimPayCertificateItem> itemList = tec.meterInfo.getInterimPayCertificateItems();
+            /*清空历史记录*/
+            itemList.clear();
             Map<SupervisionCertificate,InterimPayCertificateItem> peerMap = new HashMap<>();
-            itemNamesMap.forEach((k,v)->{
+            LinkedHashMap<String, InterimPayCertificateItem> finalPreviousMap = previousMap;
+            itemNamesMap.forEach((k, v)->{
                 SupervisionCertificate sc = new SupervisionCertificate();
                 sc.setItemName(k);
                 sc.setMonth(tec.periodInfo.getMonth());
@@ -406,8 +413,8 @@ 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.setFormName(v);
+                       current.setChapterSeq(k);
                        current.setContractAmount(payment.getContractMoney());
                        current.setPreviousPeriodEndPay(sc.getPeriodEndAmount());
                        current.setCurrentPeriodPay(sc.getCurrentAmount());
@@ -426,17 +433,21 @@ public class ExecutorMeter extends FormulaExecutor {
                     current.setChapterSeq(sc.getItemName());
                     itemList.add(current);
                 }else if(v.equals("-100")){
-                    InterimPayCertificateItem previous = previousMap.get(k);
+                    InterimPayCertificateItem previous = finalPreviousMap.get(k);
                     InterimPayCertificateItem current =  currentMap.computeIfAbsent(k,w->new InterimPayCertificateItem());
                     sc.setCurrentAmount(current.getCurrentPeriodPay());
-                    sc.setPreviousEndAmount(previous.getCurrentPeriodEndPay());
+                    if(previous!=null) {
+                        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());
+                    current.setNoApply(1);
                     itemList.add(current);
                 }
+                dataList.add(sc);
             });
             /*分行合计列*/
             fieldGetSet(summaryConfigMap,x->!x.getIsSummary());
@@ -1491,12 +1502,14 @@ public class ExecutorMeter extends FormulaExecutor {
         };
         /*批量计算列表中之前的字段和,并赋值到当前字段*/
         public void fieldGetSet(Map<T,Map<Function<T,String>,Consumer<String>>> gsMap, Predicate<T> p){
-            gsMap.forEach((b,m)->{
-                List<T> dl = dataList.stream().limit(dataList.indexOf(b)).collect(Collectors.toList());
-                m.forEach((f,c)->{
-                    c.accept(dl.stream().filter(p).map(f).map(BaseUtils::str2BigDecimal).reduce(BigDecimal.ZERO,BigDecimal::add).toString());
+            if(dataList.size()>0) {
+                gsMap.forEach((b, m) -> {
+                    List<T> dl = dataList.stream().limit(dataList.indexOf(b)).collect(Collectors.toList());
+                    m.forEach((f, c) -> {
+                        c.accept(dl.stream().filter(p).map(f).map(BaseUtils::str2BigDecimal).reduce(BigDecimal.ZERO, BigDecimal::add).toString());
+                    });
                 });
-            });
+            }
         }
 
         public void addGetSetConfig(T b,Map<T,Map<Function<T,String>,Consumer<String>>> gsMap,Function<T,String>f,Consumer<String> c){

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

@@ -3,6 +3,7 @@ package org.springblade.manager.service;
 import org.springblade.manager.formula.impl.ExecutorMeter;
 import org.springblade.manager.vo.*;
 import org.springblade.meter.entity.ChangeTokenForm;
+import org.springblade.meter.entity.InterimPayCertificateItem;
 
 import java.util.List;
 import java.util.Map;
@@ -39,4 +40,6 @@ public interface IFormulaDao {
     Function<Long, List<ChangeToken>> getChangeTokenFc();
     /**获取材料调差新*/
     Function<Long, List<MaterialAdjust>> getMaterialAdjustFc();
+    /**获取中期支付证书项目详情*/
+    Function<String, List<InterimPayCertificateItem>> getInterimPayCertificateItemFc();
 }

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

@@ -14,6 +14,7 @@ import org.springblade.manager.service.IFormulaDao;
 import org.springblade.manager.service.IProjectInfoService;
 import org.springblade.manager.vo.*;
 import org.springblade.meter.entity.ChangeTokenForm;
+import org.springblade.meter.entity.InterimPayCertificateItem;
 import org.springblade.meter.entity.MeterContractInfo;
 import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
@@ -201,6 +202,14 @@ public class FormulaDaoImpl implements IFormulaDao {
         };
     }
 
+    @Override
+    public Function<String, List<InterimPayCertificateItem>> getInterimPayCertificateItemFc() {
+        return  certificateIds->{
+            String sql="select * from s_interim_pay_certificate_item where certificate_id in ("+certificateIds+")";
+            return getEntityList(sql,InterimPayCertificateItem.class);
+        };
+    }
+
     public <T> List<T> getEntityList(String sql, Class<T> entityClass) {
         return  jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(entityClass));
     }

+ 2 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/InterimPayCertificateController.java

@@ -25,6 +25,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.meter.entity.InterimPayCertificateItem;
 import org.springblade.meter.vo.InterimPayCertificateVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -49,6 +50,7 @@ public class InterimPayCertificateController extends BladeController {
 
 	private final IInterimPayCertificateService interimPayCertificateService;
 
+
 	/**
 	 * 新增 中期支付证书
 	 */

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

@@ -1,14 +1,10 @@
 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,"中期支付证书项目");
-    }
 
 }

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

@@ -49,6 +49,7 @@ public class InterimPayCertificateServiceImpl extends BaseServiceImpl<InterimPay
 
     private  final JdbcTemplate jdbcTemplate;
     private final IInterimPayCertificateItemService interimPayCertificateItemService;
+    private final IInterimPayCertificateItemService iInterimPayCertificateItemService;
 
     /**
      * 新增 中期支付证书
@@ -74,6 +75,13 @@ public class InterimPayCertificateServiceImpl extends BaseServiceImpl<InterimPay
         if (certificate.getApproveStatus() != 0){
             throw new ServiceException("修改失败,当前证书已上报或已审批");
         }
+        List<InterimPayCertificateItem> list = interimPayCertificate.getPayList();
+        if(list.size()>0){
+            list.forEach(e->{
+                e.setCreateUser(111111111111111111L);
+            });
+            this.interimPayCertificateItemService.saveOrUpdateBatch(list);
+        }
         this.updateById(interimPayCertificate);
     }