Просмотр исходного кода

杰生重构 合同付款供应商统计

home 2 лет назад
Родитель
Сommit
3ff360ceea

+ 25 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/contract/SupplierInfo.java

@@ -0,0 +1,25 @@
+package com.fjhx.params.contract;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SupplierInfo {
+
+    /**
+     * 供应商id
+     */
+    private Long supplierId;
+
+    /**
+     * 供应商名称
+     */
+    private Long supplierName;
+
+    /**
+     * 总计金额
+     */
+    private BigDecimal totalAmount;
+
+}

+ 54 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/contract/SupplierStatisticsResult.java

@@ -0,0 +1,54 @@
+package com.fjhx.params.contract;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class SupplierStatisticsResult {
+
+    /**
+     * 标题类型
+     * 0: 全部
+     * 1: 50万以上
+     * 2: 20-50万
+     * 3: 10-20万
+     * 4: 5-10万
+     * 5: 5万以下
+     */
+    private Integer titleType;
+
+    /**
+     * 供应商信息列表
+     */
+    private List<SupplierInfo> supplierInfoList = new ArrayList<>();
+
+    /**
+     * 获取条数
+     */
+    public Integer getCount() {
+        return supplierInfoList.size();
+    }
+
+    /**
+     * 展示标题
+     */
+    public String getTitle() {
+        switch (titleType) {
+            case 0:
+                return "全部";
+            case 1:
+                return "50万以上";
+            case 2:
+                return "20-50万";
+            case 3:
+                return "10-20万";
+            case 4:
+                return "5-10万";
+            default:
+                return "5万以下";
+        }
+    }
+
+}

+ 14 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/controller/contract/ContractPayController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.entity.contract.ContractPay;
 import com.fjhx.params.contract.ContractPayVo;
 import com.fjhx.params.contract.DateStatisticsResult;
+import com.fjhx.params.contract.SupplierStatisticsResult;
 import com.fjhx.service.contract.ContractPayService;
 import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -53,11 +55,23 @@ public class ContractPayController {
         return R.success();
     }
 
+    /**
+     * 合同付款日期统计
+     */
     @PostMapping("/dateStatistics")
     public R dateStatistics() {
         Map<Integer, DateStatisticsResult> result = contractPayService.dateStatistics();
         return R.success(result);
     }
 
+    /**
+     * 合同付款供应商统计
+     */
+    @PostMapping("/supplierStatistics")
+    public R supplierStatistics(@RequestBody DateStatisticsResult dateStatisticsResult) {
+        List<SupplierStatisticsResult> result = contractPayService.supplierStatistics(dateStatisticsResult);
+        return R.success(result);
+    }
+
 }
 

+ 5 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/contract/ContractPayMapper.java

@@ -1,8 +1,11 @@
 package com.fjhx.mapper.contract;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fjhx.entity.contract.ContractPay;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fjhx.params.contract.DateStatisticsVo;
+import com.fjhx.params.contract.SupplierInfo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -16,4 +19,6 @@ import java.util.List;
  */
 public interface ContractPayMapper extends BaseMapper<ContractPay> {
 
+    List<SupplierInfo> getSupplierInfoList(@Param("ew") QueryWrapper<Object> wrapper);
+
 }

+ 9 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/contract/ContractPayMapper.xml

@@ -2,4 +2,13 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.fjhx.mapper.contract.ContractPayMapper">
 
+    <select id="getSupplierInfoList" resultType="com.fjhx.params.contract.SupplierInfo">
+        select c.supplier_id        supplierId,
+               s.name               supplierName,
+               sum(c.adjust_amount) totalAmount
+        from contract c
+                 left join supplier s on c.supplier_id = s.id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 3 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/ContractPayService.java

@@ -5,6 +5,7 @@ import com.fjhx.entity.contract.ContractPay;
 import com.fjhx.params.contract.ContractPayVo;
 import com.fjhx.base.StorageBaseService;
 import com.fjhx.params.contract.DateStatisticsResult;
+import com.fjhx.params.contract.SupplierStatisticsResult;
 
 import java.util.List;
 import java.util.Map;
@@ -29,4 +30,6 @@ public interface ContractPayService extends StorageBaseService<ContractPay> {
 
     Map<Integer, DateStatisticsResult> dateStatistics();
 
+    List<SupplierStatisticsResult> supplierStatistics(DateStatisticsResult dateStatisticsResult);
+
 }

+ 81 - 8
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractPayServiceImpl.java

@@ -1,6 +1,7 @@
 package com.fjhx.service.contract.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,6 +15,8 @@ import com.fjhx.enums.ContractStatusEnum;
 import com.fjhx.mapper.contract.ContractPayMapper;
 import com.fjhx.params.contract.ContractPayVo;
 import com.fjhx.params.contract.DateStatisticsResult;
+import com.fjhx.params.contract.SupplierInfo;
+import com.fjhx.params.contract.SupplierStatisticsResult;
 import com.fjhx.service.contract.ContractPayService;
 import com.fjhx.service.contract.ContractService;
 import com.fjhx.utils.WrapperUtil;
@@ -21,10 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -84,6 +84,9 @@ public class ContractPayServiceImpl extends ServiceImpl<ContractPayMapper, Contr
 
         Date date = new Date();
 
+        // 初始化返回结果
+        Map<Integer, DateStatisticsResult> result = initDateStatisticsResult(date);
+
         // 获取合同完成但未付款的数据
         List<Contract> contractList = contractService.list(Wrappers.<Contract>lambdaQuery()
                 .select(Contract::getAdjustAmount, Contract::getBackAmount, Contract::getHadPayAmount,
@@ -93,9 +96,6 @@ public class ContractPayServiceImpl extends ServiceImpl<ContractPayMapper, Contr
                         .or(w -> w.gt(Contract::getAccountDate, 0)
                                 .eq(Contract::getStatus, ContractStatusEnum.COMPLETED.getType()))));
 
-        // 初始化返回结果
-        Map<Integer, DateStatisticsResult> result = initResult(date);
-
         // 赋值合同未付款
         for (Contract contract : contractList) {
 
@@ -125,6 +125,7 @@ public class ContractPayServiceImpl extends ServiceImpl<ContractPayMapper, Contr
 
         // 获取本月付款记录
         List<ContractPay> contractPayList = list(Wrappers.<ContractPay>lambdaQuery()
+                .select(StorageBaseEntity::getCreateTime, ContractPay::getType, ContractPay::getPayAmount)
                 .between(StorageBaseEntity::getCreateTime, DateUtil.beginOfMonth(date), DateUtil.endOfMonth(date)));
 
         // 分别统计出上半月和下班月的付款
@@ -152,12 +153,84 @@ public class ContractPayServiceImpl extends ServiceImpl<ContractPayMapper, Contr
         return result;
     }
 
+    @Override
+    public List<SupplierStatisticsResult> supplierStatistics(DateStatisticsResult dateStatisticsResult) {
+        // 初始化返回值
+        List<SupplierStatisticsResult> result = initSupplierStatisticsResult();
+
+        Integer type = dateStatisticsResult.getType();
+        // 历史账期没有需要付款的记录
+        if (ObjectUtil.equals(type, 1)) {
+            return result;
+        }
+
+        Date beginTime = dateStatisticsResult.getBeginTime();
+        Date endTime = dateStatisticsResult.getEndTime();
+
+        QueryWrapper<Object> wrapper = Wrappers.query();
+
+        String whereTime = "date_add( c.complete_time , interval c.account_date day)";
+
+        wrapper.lt("c.pay_status", ContractPayStatusEnum.COMPLETED)
+                .and(q -> q.eq("c.account_date", 0)
+                        .or(w -> w.gt("c.account_date", 0)
+                                .eq("c.status", ContractStatusEnum.COMPLETED.getType())))
+                .ge(ObjectUtil.notEqual(type, 2) && ObjectUtil.isNotEmpty(beginTime), whereTime, beginTime)
+                .le(ObjectUtil.isNotEmpty(endTime), whereTime, endTime)
+                .groupBy("c.supplier_id");
+
+        List<SupplierInfo> supplierInfoList = baseMapper.getSupplierInfoList(wrapper);
+
+        if (supplierInfoList.size() == 0) {
+            return result;
+        }
+
+        Map<Integer, List<SupplierInfo>> collect = supplierInfoList.stream().collect(Collectors.groupingBy(
+                supplierInfo -> {
+                    BigDecimal totalAmount = supplierInfo.getTotalAmount();
+                    if (totalAmount.compareTo(new BigDecimal("500000")) > 0) {
+                        return 1;
+                    }
+                    if (totalAmount.compareTo(new BigDecimal("200000")) > 0) {
+                        return 2;
+                    }
+                    if (totalAmount.compareTo(new BigDecimal("100000")) > 0) {
+                        return 3;
+                    }
+                    if (totalAmount.compareTo(new BigDecimal("50000")) > 0) {
+                        return 4;
+                    }
+                    return 5;
+                }
+        ));
+
+        result.get(0).setSupplierInfoList(supplierInfoList);
+        collect.forEach((k, v) -> result.get(k).setSupplierInfoList(v));
+
+        return result;
+    }
+
+    /**
+     * 初始化供应商统计结果集
+     *
+     * @return
+     */
+    private List<SupplierStatisticsResult> initSupplierStatisticsResult() {
+        List<SupplierStatisticsResult> result = new ArrayList<>();
+        for (int i = 0; i < 6; i++) {
+            SupplierStatisticsResult supplierStatisticsResult = new SupplierStatisticsResult();
+            supplierStatisticsResult.setTitleType(i);
+            result.add(supplierStatisticsResult);
+        }
+        return result;
+    }
+
     /**
      * 合同付款时间段统计返回值初始化
      *
      * @param date 当前日期
      */
-    private Map<Integer, DateStatisticsResult> initResult(Date date) {
+    private Map<Integer, DateStatisticsResult> initDateStatisticsResult(Date date) {
 
         Map<Integer, DateStatisticsResult> result = new LinkedHashMap<>();