|
@@ -2,12 +2,16 @@ package com.fjhx.service.supplier.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.convert.Convert;
|
|
import cn.hutool.core.convert.Convert;
|
|
|
|
+import cn.hutool.core.date.DateField;
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
+import com.fjhx.base.StorageBaseEntity;
|
|
import com.fjhx.entity.common.CommonFile;
|
|
import com.fjhx.entity.common.CommonFile;
|
|
|
|
+import com.fjhx.entity.contract.Contract;
|
|
import com.fjhx.entity.supplier.Supplier;
|
|
import com.fjhx.entity.supplier.Supplier;
|
|
import com.fjhx.entity.supplier.SupplierBank;
|
|
import com.fjhx.entity.supplier.SupplierBank;
|
|
import com.fjhx.entity.supplier.SupplierContacts;
|
|
import com.fjhx.entity.supplier.SupplierContacts;
|
|
@@ -17,18 +21,18 @@ import com.fjhx.mapper.supplier.SupplierMapper;
|
|
import com.fjhx.params.supplier.SupplierKeepVo;
|
|
import com.fjhx.params.supplier.SupplierKeepVo;
|
|
import com.fjhx.params.supplier.SupplierVo;
|
|
import com.fjhx.params.supplier.SupplierVo;
|
|
import com.fjhx.service.common.CommonFileService;
|
|
import com.fjhx.service.common.CommonFileService;
|
|
|
|
+import com.fjhx.service.contract.ContractService;
|
|
import com.fjhx.service.supplier.SupplierBankService;
|
|
import com.fjhx.service.supplier.SupplierBankService;
|
|
import com.fjhx.service.supplier.SupplierContactsService;
|
|
import com.fjhx.service.supplier.SupplierContactsService;
|
|
import com.fjhx.service.supplier.SupplierKeepService;
|
|
import com.fjhx.service.supplier.SupplierKeepService;
|
|
import com.fjhx.service.supplier.SupplierService;
|
|
import com.fjhx.service.supplier.SupplierService;
|
|
|
|
+import com.fjhx.utils.BigDecimalUtil;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.HashMap;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
+import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -54,6 +58,9 @@ public class SupplierServiceImpl extends ServiceImpl<SupplierMapper, Supplier> i
|
|
@Autowired
|
|
@Autowired
|
|
private CommonFileService commonFileService;
|
|
private CommonFileService commonFileService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private ContractService contractService;
|
|
|
|
+
|
|
private static final Object obj = new Object();
|
|
private static final Object obj = new Object();
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -240,6 +247,77 @@ public class SupplierServiceImpl extends ServiceImpl<SupplierMapper, Supplier> i
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public Page<Map<String, Object>> pagePurchase(Map<String, String> condition) {
|
|
|
|
+ Page<Map<String, Object>> page = getPage(condition);
|
|
|
|
+
|
|
|
|
+ List<Map<String, Object>> records = page.getRecords();
|
|
|
|
+ if (records.size() == 0) {
|
|
|
|
+ return page;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ List<Long> idList = records.stream().map(item -> Convert.toLong(item.get("id"))).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ List<Contract> list = contractService.list(Wrappers.<Contract>lambdaQuery()
|
|
|
|
+ .in(Contract::getSupplierId, idList)
|
|
|
|
+ .select(StorageBaseEntity::getCreateTime, Contract::getAmountMoney)
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ Map<Long, List<Contract>> listBySupplierId = list.stream().collect(Collectors.groupingBy(Contract::getSupplierId));
|
|
|
|
+
|
|
|
|
+ // 当前日期
|
|
|
|
+ Date date = new Date();
|
|
|
|
+ // 今年开始时间
|
|
|
|
+ Date year = DateUtil.beginOfYear(date);
|
|
|
|
+ // 去年开始时间
|
|
|
|
+ Date lastYear = DateUtil.offset(year, DateField.YEAR, -1);
|
|
|
|
+ // 本月
|
|
|
|
+ Date month = DateUtil.beginOfMonth(date);
|
|
|
|
+ // 上月
|
|
|
|
+ Date lastMonth = DateUtil.offsetMonth(month, -1);
|
|
|
|
+
|
|
|
|
+ for (Map<String, Object> record : records) {
|
|
|
|
+ Long supplierId = Convert.toLong(record.get("id"));
|
|
|
|
+ List<Contract> contractList = listBySupplierId.get(supplierId);
|
|
|
|
+
|
|
|
|
+ // 总额
|
|
|
|
+ BigDecimal sumMoney = contractList.stream()
|
|
|
|
+ .map(Contract::getAmountMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+
|
|
|
|
+ // 去年
|
|
|
|
+ BigDecimal lastYearMoney = contractList.stream()
|
|
|
|
+ .filter(item -> BigDecimalUtil.ge(lastYear, item.getCreateTime()) && BigDecimalUtil.lt(year, item.getCreateTime()))
|
|
|
|
+ .map(Contract::getAmountMoney)
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+
|
|
|
|
+ // 今年
|
|
|
|
+ BigDecimal yearMoney = contractList.stream()
|
|
|
|
+ .filter(item -> BigDecimalUtil.ge(year, item.getCreateTime()))
|
|
|
|
+ .map(Contract::getAmountMoney)
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+
|
|
|
|
+ // 上月
|
|
|
|
+ BigDecimal lastMonthMoney = contractList.stream()
|
|
|
|
+ .filter(item -> BigDecimalUtil.ge(lastMonth, item.getCreateTime()) && BigDecimalUtil.lt(month, item.getCreateTime()))
|
|
|
|
+ .map(Contract::getAmountMoney)
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+
|
|
|
|
+ // 本月
|
|
|
|
+ BigDecimal monthMoney = contractList.stream()
|
|
|
|
+ .filter(item -> BigDecimalUtil.ge(month, item.getCreateTime()))
|
|
|
|
+ .map(Contract::getAmountMoney)
|
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+
|
|
|
|
+ record.put("sumMoney", sumMoney);
|
|
|
|
+ record.put("lastYearMoney", lastYearMoney);
|
|
|
|
+ record.put("yearMoney", yearMoney);
|
|
|
|
+ record.put("lastMonthMoney", lastMonthMoney);
|
|
|
|
+ record.put("monthMoney", monthMoney);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return page;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 生成label
|
|
* 生成label
|
|
*/
|
|
*/
|