浏览代码

Merge remote-tracking branch 'origin/master'

liuyc 1 年之前
父节点
当前提交
88c20a7b17

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

@@ -129,6 +129,7 @@ public class InterimPayCertificate extends BaseEntity {
     @ApiModelProperty(value = "每份表格独立的PDF地址")
     @ApiModelProperty(value = "每份表格独立的PDF地址")
     private String fileUrlList;
     private String fileUrlList;
 
 
+/*
     @TableField(exist = false)
     @TableField(exist = false)
     private Set<Map<String,String>> urlListData;
     private Set<Map<String,String>> urlListData;
     public Set<Map<String,String>> getUrlListData() {
     public Set<Map<String,String>> getUrlListData() {
@@ -144,5 +145,21 @@ public class InterimPayCertificate extends BaseEntity {
         }
         }
         return urlListData;
         return urlListData;
     }
     }
+*/
+
+    public List<Map<String,String>> getUrlListData() {
+        if(StringUtils.isNotEmpty(fileUrlList)){
+            LinkedHashMap<String,String> titleUrlMap= JSON.parseObject(fileUrlList, LinkedHashMap.class);
+            if(Func.isNotEmpty(titleUrlMap)){
+                return titleUrlMap.entrySet().stream().map(kv->{
+                    Map<String,String> map=new HashMap<>();
+                    map.put("title",kv.getKey());
+                    map.put("url",kv.getValue());
+                    return map;
+                }).collect(Collectors.toList());
+            }
+        }
+        return null;
+    }
 
 
 }
 }

+ 45 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/DeductStatisticsVO.java

@@ -0,0 +1,45 @@
+package org.springblade.meter.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Param   扣回统计
+ * @Author wangwl
+ * @Date 2024/2/29 9:18
+ **/
+@Data
+public class DeductStatisticsVO {
+
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal allMoney;
+
+    @ApiModelProperty(value = "还剩1天")
+    private BigDecimal oneDayMoney;
+
+    @ApiModelProperty(value = "还剩10天")
+    private BigDecimal tenDaysMoney;
+
+    @ApiModelProperty(value = "还剩30天")
+    private BigDecimal thirtyDaysMoney;
+
+    @ApiModelProperty(value = "还剩60天")
+    private BigDecimal sixtyDaysMoney;
+
+    @ApiModelProperty(value = "超过截至日期")
+    private BigDecimal overDateMoney;
+
+    public DeductStatisticsVO() {
+    }
+
+    public DeductStatisticsVO(BigDecimal allMoney, BigDecimal oneDayMoney, BigDecimal tenDaysMoney, BigDecimal thirtyDaysMoney, BigDecimal sixtyDaysMoney, BigDecimal overDateMoney) {
+        this.allMoney = allMoney;
+        this.oneDayMoney = oneDayMoney;
+        this.tenDaysMoney = tenDaysMoney;
+        this.thirtyDaysMoney = thirtyDaysMoney;
+        this.sixtyDaysMoney = sixtyDaysMoney;
+        this.overDateMoney = overDateMoney;
+    }
+}

+ 15 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -441,10 +441,12 @@ public class ExecutorMeter extends FormulaExecutor {
             private Integer contractTotal=0;
             private Integer contractTotal=0;
             /**变更数量*/
             /**变更数量*/
             private Integer changeTotal =0;
             private Integer changeTotal =0;
-            /**本次完成数量*/
+            /**完成数量*/
+            private Integer completed=0;
+/*            本次完成数量
             private Integer currentPeriodCompleted=0;
             private Integer currentPeriodCompleted=0;
-            /**累计完成数量*/
-            private Integer currentPeriodEndCompleted =0;
+            累计完成数量
+            private Integer currentPeriodEndCompleted =0;*/
             /**合同金额*/
             /**合同金额*/
             private BigDecimal contractMoney =BigDecimal.ZERO;
             private BigDecimal contractMoney =BigDecimal.ZERO;
             /**变更后A金额*/
             /**变更后A金额*/
@@ -465,7 +467,7 @@ public class ExecutorMeter extends FormulaExecutor {
                     this.unit = p.getUnit();
                     this.unit = p.getUnit();
                     this.contractTotal=p.getContractTotal();
                     this.contractTotal=p.getContractTotal();
                     this.changeTotal = p.getChangeTotal();
                     this.changeTotal = p.getChangeTotal();
-                    this.currentPeriodCompleted =p.getCompleted();
+                    this.completed =p.getCompleted();
                     this.contractMoney =new BigDecimal(p.getContractMoney());
                     this.contractMoney =new BigDecimal(p.getContractMoney());
                     this.changeMoney =new BigDecimal(p.getChangeMoney());
                     this.changeMoney =new BigDecimal(p.getChangeMoney());
                     this.money=p.getMoneyAsBigDecimal();
                     this.money=p.getMoneyAsBigDecimal();
@@ -477,7 +479,7 @@ public class ExecutorMeter extends FormulaExecutor {
                     this.itemName=next.itemName;
                     this.itemName=next.itemName;
                 }
                 }
                 /*本期完成*/
                 /*本期完成*/
-                this.currentPeriodCompleted =next.getCurrentPeriodCompleted()+this.currentPeriodCompleted;;
+                this.completed =next.completed+this.completed;;
                 return this;
                 return this;
             }
             }
 
 
@@ -487,15 +489,17 @@ public class ExecutorMeter extends FormulaExecutor {
                      this.currentPeriodPay=this.money.add(BigDecimal.ZERO);
                      this.currentPeriodPay=this.money.add(BigDecimal.ZERO);
                      this.money=this.money.add(previous.money);
                      this.money=this.money.add(previous.money);
                      this.currentPeriodEndPay=this.money;
                      this.currentPeriodEndPay=this.money;
+                     this.completed=this.completed+previous.completed;
                  }
                  }
                 return this;
                 return this;
             }
             }
         }
         }
 
 
         /*按清单编号求和*/
         /*按清单编号求和*/
-        public  Map<String,Summary> toSummary(List<Payment> payments) {
+        public  LinkedHashMap<String,Summary> toSummary(List<Payment> payments) {
             return payments.stream()
             return payments.stream()
                     .collect(Collectors.groupingBy(Payment::getNumber,
                     .collect(Collectors.groupingBy(Payment::getNumber,
+                            LinkedHashMap::new,
                             Collectors.collectingAndThen(
                             Collectors.collectingAndThen(
                                     Collectors.mapping(Summary::new, Collectors.reducing(Summary::add)),
                                     Collectors.mapping(Summary::new, Collectors.reducing(Summary::add)),
                                     op -> op.orElseGet(Summary::new)
                                     op -> op.orElseGet(Summary::new)
@@ -507,8 +511,8 @@ public class ExecutorMeter extends FormulaExecutor {
         @Override
         @Override
         public void parse() {
         public void parse() {
             builderFormDatas(SubprojectInterimPaymentSummary.class);
             builderFormDatas(SubprojectInterimPaymentSummary.class);
-            Map<String,Summary> currentSummary = toSummary(current);
-            Map<String,Summary> preSummary = toSummary(previous);
+            LinkedHashMap<String,Summary> currentSummary = toSummary(current);
+            LinkedHashMap<String,Summary> preSummary = toSummary(previous);
             List<SubprojectInterimPaymentSummary> totalList = new ArrayList<>();
             List<SubprojectInterimPaymentSummary> totalList = new ArrayList<>();
             for(Map.Entry<String,Summary> form:currentSummary.entrySet()){
             for(Map.Entry<String,Summary> form:currentSummary.entrySet()){
                 SubprojectInterimPaymentSummary sis = new SubprojectInterimPaymentSummary();
                 SubprojectInterimPaymentSummary sis = new SubprojectInterimPaymentSummary();
@@ -521,10 +525,11 @@ public class ExecutorMeter extends FormulaExecutor {
                 sis.setChangeTotal(summary.getChangeTotal().toString());
                 sis.setChangeTotal(summary.getChangeTotal().toString());
                 sis.setContractMoney(summary.getContractMoney().toString());
                 sis.setContractMoney(summary.getContractMoney().toString());
                 sis.setChangeMoney(summary.getChangeMoney().toString());
                 sis.setChangeMoney(summary.getChangeMoney().toString());
-                sis.setCurrentPeriodCompleted(summary.getCurrentPeriodCompleted().toString());
+                sis.setCurrentPeriodCompleted(summary.getCompleted().toString());
+                sis.setCurrentPeriodPay(summary.getCurrentPeriodPay().toString());
                 /*当前期和往期统计*/
                 /*当前期和往期统计*/
                 summary.merge(pre);
                 summary.merge(pre);
-                sis.setCurrentPeriodPay(summary.getCurrentPeriodPay().toString());
+                sis.setCompleted(summary.getCompleted().toString());
                 sis.setCurrentPeriodEndPay(summary.getCurrentPeriodEndPay().toString());
                 sis.setCurrentPeriodEndPay(summary.getCurrentPeriodEndPay().toString());
                 sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
                 sis.setPayRatio(ratioFc.apply(sis.getCurrentPeriodEndPay(),sis.getChangeMoney()));
                 totalList.add(sis);
                 totalList.add(sis);

+ 15 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java

@@ -278,7 +278,7 @@ public class MiddleMeterApplyController extends BladeController {
      * 资料关联台账-关联质检资料
      * 资料关联台账-关联质检资料
      */
      */
     @GetMapping("/dataLinkFile")
     @GetMapping("/dataLinkFile")
-    @ApiOperationSupport(order = 14)
+    @ApiOperationSupport(order = 15)
     @ApiOperation(value = "资料关联台账-关联质检资料", notes = "传合同id,计量单id,选中文件id逗号分隔")
     @ApiOperation(value = "资料关联台账-关联质检资料", notes = "传合同id,计量单id,选中文件id逗号分隔")
     @ApiImplicitParams(value = {
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "id", value = "计量单id", required = true),
             @ApiImplicitParam(name = "id", value = "计量单id", required = true),
@@ -288,4 +288,18 @@ public class MiddleMeterApplyController extends BladeController {
         middleMeterApplyService.dataLinkFile(id,fileIds);
         middleMeterApplyService.dataLinkFile(id,fileIds);
         return R.success("关联成功");
         return R.success("关联成功");
     }
     }
+
+    /**
+     * 扣回统计
+     */
+    @GetMapping("/deductStatistics")
+    @ApiOperationSupport(order = 16)
+    @ApiOperation(value = "扣回统计", notes = "传入合同id,返回6个统计值")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+    })
+    public R<DeductStatisticsVO> deductStatistics(Long contractId) {
+        DeductStatisticsVO vo = middleMeterApplyService.deductStatistics(contractId);
+        return R.data(vo);
+    }
 }
 }

+ 2 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java

@@ -100,4 +100,6 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
     WbsNodeVO getNodeInfo(@Param("pId") Long pId);
     WbsNodeVO getNodeInfo(@Param("pId") Long pId);
 
 
     List<InformationQuery>  getQueryDataByIds(@Param("ids") List<Long> ids);
     List<InformationQuery>  getQueryDataByIds(@Param("ids") List<Long> ids);
+
+    List<MiddleMeterApply> getALLUnLinkDataApply(@Param("contractId") Long contractId);
 }
 }

+ 7 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml

@@ -317,6 +317,13 @@
             #{id}
             #{id}
         </foreach>
         </foreach>
     </select>
     </select>
+    <select id="getALLUnLinkDataApply" resultType="org.springblade.meter.entity.MiddleMeterApply">
+        SELECT id,ifnull(meter_money,0) as meter_money,
+               DATE_ADD(business_date, INTERVAL 3 MONTH) as business_date
+        FROM s_middle_meter_apply
+        WHERE contract_id = #{contractId} and is_deleted = 0 and approve_status = 2
+                and is_link_data = 0
+    </select>
 
 
 
 
 </mapper>
 </mapper>

+ 5 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java

@@ -80,4 +80,9 @@ public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply>
      * 资料关联台账-关联质检资料
      * 资料关联台账-关联质检资料
      */
      */
     void dataLinkFile( Long id, String fileIds);
     void dataLinkFile( Long id, String fileIds);
+
+    /**
+     * 扣回统计
+     */
+    DeductStatisticsVO deductStatistics(Long contractId);
 }
 }

+ 66 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -49,6 +49,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -895,6 +896,71 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
 
 
     }
     }
 
 
+    /**
+     * 扣回统计
+     */
+    @Override
+    public DeductStatisticsVO deductStatistics(Long contractId) {
+        DeductStatisticsVO vo = new DeductStatisticsVO(BigDecimal.ZERO,BigDecimal.ZERO,BigDecimal.ZERO,BigDecimal.ZERO,BigDecimal.ZERO,BigDecimal.ZERO);
+        //找出当前合同下所有中间计量申请状态是已审批,并且资料关联状态是0的
+        List<MiddleMeterApply> list = baseMapper.getALLUnLinkDataApply(contractId);
+        //按照需求统计
+        if (list.size() != 0){
+            //所有
+            BigDecimal b1 = list.stream().map(l -> l.getMeterMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            //今天截至
+            BigDecimal b2 = list.stream().filter(l -> l.getBusinessDate().equals(LocalDate.now())).map(l -> l.getMeterMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            //距离截至日期小于等于10天
+            BigDecimal b3 = list.stream().filter(l -> {
+                int daysBetween = (int)ChronoUnit.DAYS.between( LocalDate.now(),l.getBusinessDate());
+                if (daysBetween >= 0){
+                    if (daysBetween < 10){
+                        return true;
+                    }else {
+                        return false;
+                    }
+                }else {
+                    return false;
+                }
+            }).map(l -> l.getMeterMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            //距离截至日期小于等于30天
+            BigDecimal b4 = list.stream().filter(l -> {
+                int daysBetween = (int)ChronoUnit.DAYS.between( LocalDate.now(),l.getBusinessDate());
+                if (daysBetween >= 0){
+                    if (daysBetween < 30){
+                        return true;
+                    }else {
+                        return false;
+                    }
+                }else {
+                    return false;
+                }
+            }).map(l -> l.getMeterMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            //距离截至日期小于等于60天
+            BigDecimal b5 = list.stream().filter(l -> {
+                int daysBetween = (int)ChronoUnit.DAYS.between( LocalDate.now(),l.getBusinessDate());
+                if (daysBetween >= 0){
+                    if (daysBetween < 60){
+                        return true;
+                    }else {
+                        return false;
+                    }
+                }else {
+                    return false;
+                }
+            }).map(l -> l.getMeterMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            //截至日期超过今天
+            BigDecimal b6 = list.stream().filter(l -> LocalDate.now().compareTo(l.getBusinessDate()) > 0).map(l -> l.getMeterMoney()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            vo.setAllMoney(b1);
+            vo.setOneDayMoney(b2);
+            vo.setTenDaysMoney(b3);
+            vo.setThirtyDaysMoney(b4);
+            vo.setSixtyDaysMoney(b5);
+            vo.setOverDateMoney(b6);
+        }
+        return vo;
+    }
+
     //递归方法
     //递归方法
     private void gatherSortNode(List<NodeSortVO> list,List<Long> ids){
     private void gatherSortNode(List<NodeSortVO> list,List<Long> ids){
         for (NodeSortVO vo : list) {
         for (NodeSortVO vo : list) {