|
@@ -49,6 +49,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
|
+import java.time.temporal.ChronoUnit;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
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){
|
|
private void gatherSortNode(List<NodeSortVO> list,List<Long> ids){
|
|
for (NodeSortVO vo : list) {
|
|
for (NodeSortVO vo : list) {
|