yzc hai 11 meses
pai
achega
b54baa72c8

+ 8 - 0
hx-form/src/main/java/com/fjhx/form/controller/ReportController.java

@@ -79,4 +79,12 @@ public class ReportController {
         return reportService.receivableCheck(dto);
     }
 
+    /**
+     * 帐龄分析
+     */
+    @PostMapping("/finance/agingAnalysis")
+    List<ReceivableCheckBo> agingAnalysis(@RequestBody ReceivableCheckSelectDto dto) {
+        return reportService.receivableCheck(dto);
+    }
+
 }

+ 7 - 0
hx-form/src/main/java/com/fjhx/form/entity/ReceivableCheckBo.java

@@ -13,4 +13,11 @@ public class ReceivableCheckBo {
     private Long saleUserId;
     private String saleUserName;
     private BigDecimal receivableAmount;
+
+
+    private BigDecimal ageLess30Amount;
+    private BigDecimal age30To60Amount;
+    private BigDecimal age60To90Amount;
+    private BigDecimal age90To120Amount;
+    private BigDecimal ageGreater120Amount;
 }

+ 10 - 1
hx-form/src/main/java/com/fjhx/form/entity/ReceivableCheckSelectDto.java

@@ -1,19 +1,28 @@
 package com.fjhx.form.entity;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 @Getter
 @Setter
 public class ReceivableCheckSelectDto extends BaseSelectDto {
     /**
      * 核对日期
      */
-    private String checkDate;
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM")
+    private Date checkDate;
 
     /**
      * 业务员id
      */
     private Long saleUserId;
+
+    /**
+     * 账龄
+     */
+    private String accountAge;
 }

+ 16 - 2
hx-form/src/main/java/com/fjhx/form/service/impl/ReportServiceImpl.java

@@ -269,16 +269,30 @@ public class ReportServiceImpl implements ReportService {
     @Override
     public List<ReceivableCheckBo> receivableCheck(ReceivableCheckSelectDto dto) {
         Assert.notEmpty(dto.getCheckDate(), "核对日期不能为空!");
+        dto.setCheckDate(DateUtil.endOfMonth(dto.getCheckDate()));
+
         IWrapper<Object> wrapper = IWrapper.getWrapper();
         wrapper.keyword(dto.getKeyword(), new SqlField("cu.name"), new SqlField("cu.short_name"));
         wrapper.eq("cu.user_id", dto.getSaleUserId());
+
+        //帐龄过滤
+        wrapper.ne(ObjectUtil.equals(dto.getAccountAge(), "0~30"), "c1.ageLess30Amount", 0);
+        wrapper.ne(ObjectUtil.equals(dto.getAccountAge(), "30~60"), "c1.age30To60Amount", 0);
+        wrapper.ne(ObjectUtil.equals(dto.getAccountAge(), "60~90"), "c1.age60To90Amount", 0);
+        wrapper.ne(ObjectUtil.equals(dto.getAccountAge(), "90~120"), "c1.age90To120Amount", 0);
+        wrapper.ne(ObjectUtil.equals(dto.getAccountAge(), "120以上"), "c1.ageGreater120Amount", 0);
+
         List<ReceivableCheckBo> list = reportMapper.receivableCheck(dto, wrapper);
         UserUtil.assignmentNickName(list, ReceivableCheckBo::getSaleUserId, ReceivableCheckBo::setSaleUserName);
         //添加总计行
-        BigDecimal reduce = list.stream().map(ReceivableCheckBo::getReceivableAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
         ReceivableCheckBo sumBo = new ReceivableCheckBo();
         sumBo.setSaleUserName("总计");
-        sumBo.setReceivableAmount(reduce);
+        sumBo.setReceivableAmount(list.stream().map(ReceivableCheckBo::getReceivableAmount).reduce(BigDecimal.ZERO, BigDecimal::add));
+        sumBo.setAgeLess30Amount(list.stream().map(ReceivableCheckBo::getAgeLess30Amount).reduce(BigDecimal.ZERO, BigDecimal::add));
+        sumBo.setAge30To60Amount(list.stream().map(ReceivableCheckBo::getAge30To60Amount).reduce(BigDecimal.ZERO, BigDecimal::add));
+        sumBo.setAge60To90Amount(list.stream().map(ReceivableCheckBo::getAge60To90Amount).reduce(BigDecimal.ZERO, BigDecimal::add));
+        sumBo.setAge90To120Amount(list.stream().map(ReceivableCheckBo::getAge90To120Amount).reduce(BigDecimal.ZERO, BigDecimal::add));
+        sumBo.setAgeGreater120Amount(list.stream().map(ReceivableCheckBo::getAgeGreater120Amount).reduce(BigDecimal.ZERO, BigDecimal::add));
         list.add(sumBo);
         return list;
     }

+ 44 - 13
hx-form/src/main/resources/mapper/ReportMapper.xml

@@ -127,20 +127,51 @@
     <select id="receivableCheck" resultType="com.fjhx.form.entity.ReceivableCheckBo">
         SELECT cu.`name`     AS customerName,
                cu.short_name AS customerShortName,
-               cu.user_id    AS saleUserId,
-               c1.receivable_amount
+               cu.user_id    as saleUserId,
+               c1.receivable_amount,
+               c1.ageLess30Amount,
+               c1.age30To60Amount,
+               c1.age60To90Amount,
+               c1.age90To120Amount,
+               c1.ageGreater120Amount
         FROM customer cu
-                 JOIN (SELECT c.buy_corporation_id,
-                              IFNULL(sum(cor1.truck_amount), 0) - IFNULL(sum(cc1.claim_amount), 0) AS receivable_amount
-                       FROM contract c
-                                LEFT JOIN (SELECT cor.contract_id, sum(cor.truck_quantity * cor.price) AS truck_amount
-                                           FROM contract_outbound_records cor
-                                           GROUP BY cor.contract_id) cor1 ON cor1.contract_id = c.id
-                                LEFT JOIN (SELECT cc.contract_id, sum(cc.money) AS claim_amount
-                                           FROM claim_contract cc
-                                           GROUP BY cc.contract_id) cc1 ON cc1.contract_id = c.id
-                       WHERE c.create_time &lt;= #{dto.checkDate}
-                       GROUP BY c.buy_corporation_id
+                 JOIN (SELECT t1.buy_corporation_id,
+                              sum(t1.receivable_amount)                                                               AS receivable_amount,
+                              sum(
+                                      IF
+                                          (t1.account_age &lt;= 30, t1.receivable_amount,
+                                           0))                                                                        AS ageLess30Amount,
+                              sum(
+                                      IF
+                                          (t1.account_age > 30 AND t1.account_age &lt;= 60, t1.receivable_amount,
+                                           0))                                                                        AS age30To60Amount,
+                              sum(
+                                      IF
+                                          (t1.account_age > 60 AND t1.account_age &lt;= 90, t1.receivable_amount,
+                                           0))                                                                        AS age60To90Amount,
+                              sum(
+                                      IF
+                                          (t1.account_age > 90 AND t1.account_age &lt;= 120, t1.receivable_amount,
+                                           0))                                                                        AS age90To120Amount,
+                              sum(
+                                      IF
+                                          (t1.account_age > 120, t1.receivable_amount,
+                                           0))                                                                        AS ageGreater120Amount
+                       FROM (SELECT c.buy_corporation_id,
+                                    IFNULL(cor1.truck_amount, 0) - IFNULL(cc1.claim_amount, 0) AS receivable_amount,
+                                    IFNULL(DATEDIFF(#{dto.checkDate}, cor1.firstTruckDate), 0) AS account_age
+                             FROM contract c
+                                      LEFT JOIN (SELECT cor.contract_id,
+                                                        sum(cor.truck_quantity * cor.price) AS truck_amount,
+                                                        min(coi.truck_date)                 AS firstTruckDate
+                                                 FROM contract_outbound_records cor
+                                                          JOIN contract_outbound_info coi ON cor.record_id = coi.id
+                                                 GROUP BY cor.contract_id) cor1 ON cor1.contract_id = c.id
+                                      LEFT JOIN (SELECT cc.contract_id, sum(cc.money) AS claim_amount
+                                                 FROM claim_contract cc
+                                                 GROUP BY cc.contract_id) cc1 ON cc1.contract_id = c.id
+                             WHERE c.create_time &lt;= #{dto.checkDate}) t1
+                       GROUP BY t1.buy_corporation_id
                        HAVING receivable_amount != 0) c1 ON c1.buy_corporation_id = cu.id
             ${ew.customSqlSegment}
     </select>