|
@@ -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<>();
|
|
|
|