Ver código fonte

计量系统-扣回统计

qianxb 1 ano atrás
pai
commit
6702e34796

+ 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 - 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")
-    @ApiOperationSupport(order = 14)
+    @ApiOperationSupport(order = 15)
     @ApiOperation(value = "资料关联台账-关联质检资料", notes = "传合同id,计量单id,选中文件id逗号分隔")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "id", value = "计量单id", required = true),
@@ -288,4 +288,18 @@ public class MiddleMeterApplyController extends BladeController {
         middleMeterApplyService.dataLinkFile(id,fileIds);
         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);
 
     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}
         </foreach>
     </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>

+ 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);
+
+    /**
+     * 扣回统计
+     */
+    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.RoundingMode;
 import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 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){
         for (NodeSortVO vo : list) {