From 8de09297dcc5393cc8542f29318b17f5696d4f8d Mon Sep 17 00:00:00 2001
From: shiyunteng <shiyunteng@example.com>
Date: 星期五, 17 七月 2026 09:28:46 +0800
Subject: [PATCH] feat:单点登录 首页及首页跳转

---
 platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java |  996 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 986 insertions(+), 10 deletions(-)

diff --git a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java
index dfecfbd..0956a6f 100644
--- a/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java
+++ b/platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/StatisticServiceImpl.java
@@ -1,35 +1,51 @@
 package com.by4cloud.platformx.business.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.by4cloud.platformx.admin.api.entity.SysDept;
 import com.by4cloud.platformx.admin.api.entity.SysDictItem;
 import com.by4cloud.platformx.admin.api.feign.RemoteDeptService;
 import com.by4cloud.platformx.admin.api.feign.RemoteDictService;
+import com.by4cloud.platformx.business.dto.AgingQueryDTO;
 import com.by4cloud.platformx.business.dto.AnalysisCommonDTO;
-import com.by4cloud.platformx.business.mapper.ContractMapper;
+import com.by4cloud.platformx.business.dto.HomeQueryDTO;
+import com.by4cloud.platformx.business.entity.*;
+import com.by4cloud.platformx.business.mapper.*;
 import com.by4cloud.platformx.business.service.StatisticService;
 import com.by4cloud.platformx.business.vo.*;
 import com.by4cloud.platformx.common.core.util.R;
+import com.by4cloud.platformx.common.data.datascope.DataScope;
 import com.by4cloud.platformx.common.security.util.SecurityUtils;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import java.util.stream.IntStream;
 
 @Service
 @RequiredArgsConstructor
 public class StatisticServiceImpl implements StatisticService {
 
 	private final ContractMapper contractMapper;
+	private final ContractPaymentScheduleMapper contractPaymentScheduleMapper;
+	private final BusinessCustomerMapper businessCustomerMapper;
+	private final PaymentSlipMapper paymentSlipMapper;
+	private final ContractOutBoundMapper contractOutBoundMapper;
+	private final ContractInvoiceMapper contractInvoiceMapper;
+	private final CurrentOverdueMapper currentOverdueMapper;
+	private final HistoryOverdueMapper historyOverdueMapper;
 	private final RemoteDeptService remoteDeptService;
 	private final RemoteDictService remoteDictService;
 
@@ -75,6 +91,25 @@
 		compIds.add(Long.valueOf(ymj));
 		compIds.add(Long.valueOf(jxc));
 		List<ContractIncomeAnalysisVo> contractIncomeAnalysisVoList = contractMapper.contractIncomeAnalysis(commonDTO,compIds);
+		if (ArrayUtil.isNotEmpty(contractIncomeAnalysisVoList.toArray())){
+			contractIncomeAnalysisVoList.stream().forEach(contractIncomeAnalysisVo -> {
+				if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),sgb)){
+					contractIncomeAnalysisVo.setCompName("鐭冲伐娉�");
+				}
+				if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),smj)){
+					contractIncomeAnalysisVo.setCompName("鐭崇叅鏈�");
+				}
+				if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),ymj)){
+					contractIncomeAnalysisVo.setCompName("涓�鐓ゆ満");
+				}
+				if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),tfgs)){
+					contractIncomeAnalysisVo.setCompName("閫氭柟鍏徃");
+				}
+				if(StrUtil.equals(contractIncomeAnalysisVo.getCompId(),jxc)){
+					contractIncomeAnalysisVo.setCompName("鏈烘鍘�");
+				}
+			});
+		}
 		return R.ok(contractIncomeAnalysisVoList);
 	}
 
@@ -89,7 +124,7 @@
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("company_area");
 		List<SysDictItem> items = r.getData();
 		if (ArrayUtil.isEmpty(items.toArray())){
-			return R.failed("鍖哄煙瀛楁鑾峰彇寮傚父");
+			return R.failed("鍦板尯瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 		List<Long> compIds = new ArrayList<>();
 		compIds.add(Long.valueOf(sgb));
@@ -129,7 +164,7 @@
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("industry_sector");
 		List<SysDictItem> items = r.getData();
 		if (ArrayUtil.isEmpty(items.toArray())){
-			return R.failed("鍖哄煙瀛楁鑾峰彇寮傚父");
+			return R.failed("琛屼笟瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 		List<Long> compIds = new ArrayList<>();
 		compIds.add(Long.valueOf(sgb));
@@ -169,7 +204,7 @@
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("market_type");
 		List<SysDictItem> items = r.getData();
 		if (ArrayUtil.isEmpty(items.toArray())){
-			return R.failed("鍖哄煙瀛楁鑾峰彇寮傚父");
+			return R.failed("甯傚満绫诲瀷瀛楀吀鍒嗙被鑾峰彇寮傚父");
 		}
 		List<Long> compIds = new ArrayList<>();
 		compIds.add(Long.valueOf(sgb));
@@ -209,7 +244,7 @@
 		R<List<SysDictItem>> r = remoteDictService.getDictByType("supply_attribute");
 		List<SysDictItem> items = r.getData();
 		if (ArrayUtil.isEmpty(items.toArray())){
-			return R.failed("鍖哄煙瀛楁鑾峰彇寮傚父");
+			return R.failed("渚涘簲灞炴�у瓧鍏稿垎绫昏幏鍙栧紓甯�");
 		}
 		List<Long> compIds = new ArrayList<>();
 		compIds.add(Long.valueOf(sgb));
@@ -284,4 +319,945 @@
 		return R.ok(contractIncomeAnalysisVoList);
 	}
 
+
+	@Override
+	public R contractAmountAnalysisBySaleModel(AnalysisCommonDTO commonDTO) {
+		R<List<SysDictItem>> r = remoteDictService.getDictByType("sales_model");
+		List<SysDictItem> items = r.getData();
+		if (ArrayUtil.isEmpty(items.toArray())){
+			return R.failed("閿�鍞ā寮忓瓧鍏稿垎绫昏幏鍙栧紓甯�");
+		}
+		List<Long> compIds = new ArrayList<>();
+		compIds.add(Long.valueOf(sgb));
+		compIds.add(Long.valueOf(smj));
+		compIds.add(Long.valueOf(tfgs));
+		compIds.add(Long.valueOf(ymj));
+		compIds.add(Long.valueOf(jxc));
+		List<ContractIncomeAnalysisAreaVo> contractIncomeAnalysisVoList = items.stream().map(item -> {
+			ContractIncomeAnalysisAreaVo analysisAreaVo = new ContractIncomeAnalysisAreaVo();
+			analysisAreaVo.setAreaId(item.getItemValue());
+			analysisAreaVo.setAreaName(item.getLabel());
+			return analysisAreaVo;
+		}).collect(Collectors.toList());
+		contractMapper.setSession();
+		List<ContractIncomeAnalysisAreaVo> statisticList = contractMapper.contractAmountAnalysisBySaleModel(commonDTO
+				,compIds,Long.valueOf(smj),Long.valueOf(sgb),Long.valueOf(jxc),Long.valueOf(tfgs),Long.valueOf(ymj));
+		contractIncomeAnalysisVoList.stream().forEach(vo1->{
+			statisticList.stream().forEach(vo2->{
+				if (StrUtil.equals(vo1.getAreaId(),vo2.getAreaId())){
+					vo1.setJxczb(vo2.getJxczb());
+					vo1.setJxcze(vo2.getJxcze());
+					vo1.setSgbzb(vo2.getSgbzb());
+					vo1.setSgbze(vo2.getSgbze());
+					vo1.setSmjzb(vo2.getSmjzb());
+					vo1.setSmjze(vo2.getSmjze());
+					vo1.setTfzb(vo2.getTfzb());
+					vo1.setTfze(vo2.getTfze());
+					vo1.setYmjzb(vo2.getYmjzb());
+					vo1.setYmjze(vo2.getYmjze());
+				}
+			});
+		});
+		return R.ok(contractIncomeAnalysisVoList);
+	}
+
+	@Override
+	public R agingAnalysisByArea(AnalysisCommonDTO commonDTO) {
+		R<List<SysDictItem>> r = remoteDictService.getDictByType("company_area");
+		List<SysDictItem> items = r.getData();
+		if (ArrayUtil.isEmpty(items.toArray())){
+			return R.failed("鍦板尯瀛楀吀鍒嗙被鑾峰彇寮傚父");
+		}
+//		List<AgingCompanyVo> companys = contractPaymentScheduleMapper.selectAgingCompany(DataScope.of("comp_id"));
+//		if (ArrayUtil.isEmpty(companys.toArray())){
+//			return R.failed("鏆傛棤璐﹂緞");
+//		}
+		List<AgingAnalysisVo> result = new ArrayList<>();
+		AgingQueryDTO queryDTO = new AgingQueryDTO();
+		List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotal(null);
+		items.stream().forEach(item->{
+			AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+			agingAnalysisVo.setCompanyName(item.getLabel());
+			queryDTO.setAreaId(item.getItemValue());
+			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
+			//琛ュ叏鏁版嵁
+			if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+				companyAgingVo = new ArrayList<>();
+				AgingVo agingVo1 = new AgingVo("0-30澶�",new BigDecimal("0"),null);
+				AgingVo agingVo2 = new AgingVo("31-60澶�",new BigDecimal("0"),null);
+				AgingVo agingVo3 = new AgingVo("61-90澶�",new BigDecimal("0"),null);
+				AgingVo agingVo4 = new AgingVo("91-180澶�",new BigDecimal("0"),null);
+				AgingVo agingVo5 = new AgingVo("181-365澶�",new BigDecimal("0"),null);
+				AgingVo agingVo6 = new AgingVo("1骞翠互涓�",new BigDecimal("0"),null);
+				companyAgingVo.add(agingVo1);
+				companyAgingVo.add(agingVo2);
+				companyAgingVo.add(agingVo3);
+				companyAgingVo.add(agingVo4);
+				companyAgingVo.add(agingVo5);
+				companyAgingVo.add(agingVo6);
+			}else {
+				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+					AgingVo agingVo1 = new AgingVo("0-30澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo1);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+					AgingVo agingVo2 = new AgingVo("31-60澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo2);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+					AgingVo agingVo3 = new AgingVo("61-90澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo3);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+					AgingVo agingVo4 = new AgingVo("91-180澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo4);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+					AgingVo agingVo5 = new AgingVo("181-365澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo5);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+					AgingVo agingVo6 = new AgingVo("1骞翠互涓�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo6);
+				}
+			}
+			agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+			List<AgingVo> finalCompanyAgingVo = companyAgingVo;
+			agingAnalysisVo.setPercent(IntStream.range(0, agingVoList.size())
+					.mapToObj(i -> {
+						BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount();
+						BigDecimal total = agingVoList.get(i).getTotalAmount();
+						if (total == null || total.compareTo(BigDecimal.ZERO) == 0) {
+							return null;
+						}
+						return part.divide(total, 4, RoundingMode.HALF_UP)
+								.multiply(new BigDecimal("100"))
+								.setScale(2, RoundingMode.HALF_UP);
+					})
+					.collect(Collectors.toList()));
+			result.add(agingAnalysisVo);
+		});
+		//鍚堣
+		AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+		agingAnalysisVo.setCompanyName("鍚堣");
+		agingAnalysisVo.setAmount(agingVoList.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+		List<BigDecimal> percent = IntStream.range(0, agingAnalysisVo.getAmount().size())
+				.mapToObj(i -> {
+
+					if (agingAnalysisVo.getAmount().get(i) == null || agingAnalysisVo.getAmount().get(i).compareTo(BigDecimal.ZERO) == 0) {
+						return null;
+					}else {
+						return new BigDecimal("100");
+					}
+				})
+				.collect(Collectors.toList());
+		agingAnalysisVo.setPercent(percent);
+		result.add(agingAnalysisVo);
+		return R.ok(result);
+	}
+
+	@Override
+	public R agingAnalysisByIndustry(AnalysisCommonDTO commonDTO) {
+		R<List<SysDictItem>> r = remoteDictService.getDictByType("industry_sector");
+		List<SysDictItem> items = r.getData();
+		if (ArrayUtil.isEmpty(items.toArray())){
+			return R.failed("琛屼笟瀛楀吀鍒嗙被鑾峰彇寮傚父");
+		}
+		List<AgingAnalysisVo> result = new ArrayList<>();
+		AgingQueryDTO queryDTO = new AgingQueryDTO();
+		List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotal(null);
+		items.stream().forEach(item->{
+			AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+			agingAnalysisVo.setCompanyName(item.getLabel());
+			queryDTO.setIndustryId(item.getItemValue());
+			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
+			//琛ュ叏鏁版嵁
+			if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+				companyAgingVo = new ArrayList<>();
+				AgingVo agingVo1 = new AgingVo("0-30澶�",new BigDecimal("0"),null);
+				AgingVo agingVo2 = new AgingVo("31-60澶�",new BigDecimal("0"),null);
+				AgingVo agingVo3 = new AgingVo("61-90澶�",new BigDecimal("0"),null);
+				AgingVo agingVo4 = new AgingVo("91-180澶�",new BigDecimal("0"),null);
+				AgingVo agingVo5 = new AgingVo("181-365澶�",new BigDecimal("0"),null);
+				AgingVo agingVo6 = new AgingVo("1骞翠互涓�",new BigDecimal("0"),null);
+				companyAgingVo.add(agingVo1);
+				companyAgingVo.add(agingVo2);
+				companyAgingVo.add(agingVo3);
+				companyAgingVo.add(agingVo4);
+				companyAgingVo.add(agingVo5);
+				companyAgingVo.add(agingVo6);
+			}else {
+				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+					AgingVo agingVo1 = new AgingVo("0-30澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo1);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+					AgingVo agingVo2 = new AgingVo("31-60澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo2);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+					AgingVo agingVo3 = new AgingVo("61-90澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo3);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+					AgingVo agingVo4 = new AgingVo("91-180澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo4);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+					AgingVo agingVo5 = new AgingVo("181-365澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo5);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+					AgingVo agingVo6 = new AgingVo("1骞翠互涓�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo6);
+				}
+			}
+			agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+			List<AgingVo> finalCompanyAgingVo = companyAgingVo;
+			agingAnalysisVo.setPercent(IntStream.range(0, agingVoList.size())
+					.mapToObj(i -> {
+						BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount();
+						BigDecimal total = agingVoList.get(i).getTotalAmount();
+						if (total == null || total.compareTo(BigDecimal.ZERO) == 0) {
+							return null;
+						}
+						return part.divide(total, 4, RoundingMode.HALF_UP)
+								.multiply(new BigDecimal("100"))
+								.setScale(2, RoundingMode.HALF_UP);
+					})
+					.collect(Collectors.toList()));
+			result.add(agingAnalysisVo);
+		});
+		//鍚堣
+		AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+		agingAnalysisVo.setCompanyName("鍚堣");
+		agingAnalysisVo.setAmount(agingVoList.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+		List<BigDecimal> percent = IntStream.range(0, agingAnalysisVo.getAmount().size())
+				.mapToObj(i -> {
+
+					if (agingAnalysisVo.getAmount().get(i) == null || agingAnalysisVo.getAmount().get(i).compareTo(BigDecimal.ZERO) == 0) {
+						return null;
+					}else {
+						return new BigDecimal("100");
+					}
+				})
+				.collect(Collectors.toList());
+		agingAnalysisVo.setPercent(percent);
+		result.add(agingAnalysisVo);
+		return R.ok(result);
+	}
+
+	@Override
+	public R agingAnalysis(AnalysisCommonDTO commonDTO) {
+		if (commonDTO.getAgingType().equals("2")) {
+			AgingQueryDTO queryDTO = new AgingQueryDTO();
+			List<AgingCompanyVo> companys = contractPaymentScheduleMapper.selectAgingCompanyShip(DataScope.of("comp_id"));
+
+			if (ArrayUtil.isEmpty(companys.toArray())) {
+				return R.failed("鏆傛棤璐﹂緞");
+			}
+			//鍚堣鏁版嵁
+			List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotalShip(queryDTO);
+			agingVoList = completeData(agingVoList);
+			List<AgingVo> finalAgingVoList = agingVoList;
+			List<AgingAnalysisVo> result = new ArrayList<>();
+
+			companys.stream().forEach(company -> {
+				BusinessCustomer businessCustomer = businessCustomerMapper.selectById(company.getCompanyId());
+				AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+				agingAnalysisVo.setCompanyName(businessCustomer.getCompanyName());
+				queryDTO.setCompanyId(company.getCompanyId());
+				List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalShip(queryDTO);
+				//琛ュ叏鏁版嵁
+				companyAgingVo = completeData(companyAgingVo);
+
+				agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+				List<AgingVo> finalCompanyAgingVo = companyAgingVo;
+
+				agingAnalysisVo.setPercent(IntStream.range(0, finalAgingVoList.size())
+						.mapToObj(i -> {
+							BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount();
+							BigDecimal total = finalAgingVoList.get(i).getTotalAmount();
+							if (total == null || total.compareTo(BigDecimal.ZERO) == 0) {
+								return null;
+							}
+							return part.divide(total, 4, RoundingMode.HALF_UP)
+									.multiply(new BigDecimal("100"))
+									.setScale(2, RoundingMode.HALF_UP);
+						})
+						.collect(Collectors.toList()));
+				result.add(agingAnalysisVo);
+			});
+			//鍚堣
+			AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+			agingAnalysisVo.setCompanyName("鍚堣");
+			agingAnalysisVo.setAmount(agingVoList.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+			List<BigDecimal> percent = IntStream.range(0, agingAnalysisVo.getAmount().size())
+					.mapToObj(i -> {
+
+						if (agingAnalysisVo.getAmount().get(i) == null || agingAnalysisVo.getAmount().get(i).compareTo(BigDecimal.ZERO) == 0) {
+							return null;
+						} else {
+							return new BigDecimal("100");
+						}
+					})
+					.collect(Collectors.toList());
+			agingAnalysisVo.setPercent(percent);
+			result.add(agingAnalysisVo);
+			return R.ok(result);
+		}
+		if (commonDTO.getAgingType().equals("3")) {
+			AgingQueryDTO queryDTO = new AgingQueryDTO();
+			List<AgingCompanyVo> companys = contractPaymentScheduleMapper.selectAgingCompanyInvoice(DataScope.of("comp_id"));
+			if (ArrayUtil.isEmpty(companys.toArray())) {
+				return R.failed("鏆傛棤璐﹂緞");
+			}
+			//鍚堣鏁版嵁
+			List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotalInvoice(queryDTO);
+			agingVoList = completeData(agingVoList);
+			List<AgingVo> finalAgingVoList = agingVoList;
+			List<AgingAnalysisVo> result = new ArrayList<>();
+
+			companys.stream().forEach(company -> {
+				BusinessCustomer businessCustomer = businessCustomerMapper.selectById(company.getCompanyId());
+				AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+				agingAnalysisVo.setCompanyName(businessCustomer.getCompanyName());
+				queryDTO.setCompanyId(company.getCompanyId());
+				List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalInvoice(queryDTO);
+				//琛ュ叏鏁版嵁
+				companyAgingVo = completeData(companyAgingVo);
+
+				agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+				List<AgingVo> finalCompanyAgingVo = companyAgingVo;
+
+				agingAnalysisVo.setPercent(IntStream.range(0, finalAgingVoList.size())
+						.mapToObj(i -> {
+							BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount();
+							BigDecimal total = finalAgingVoList.get(i).getTotalAmount();
+							if (total == null || total.compareTo(BigDecimal.ZERO) == 0) {
+								return null;
+							}
+							return part.divide(total, 4, RoundingMode.HALF_UP)
+									.multiply(new BigDecimal("100"))
+									.setScale(2, RoundingMode.HALF_UP);
+						})
+						.collect(Collectors.toList()));
+				result.add(agingAnalysisVo);
+			});
+			//鍚堣
+			AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+			agingAnalysisVo.setCompanyName("鍚堣");
+			agingAnalysisVo.setAmount(agingVoList.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+			List<BigDecimal> percent = IntStream.range(0, agingAnalysisVo.getAmount().size())
+					.mapToObj(i -> {
+
+						if (agingAnalysisVo.getAmount().get(i) == null || agingAnalysisVo.getAmount().get(i).compareTo(BigDecimal.ZERO) == 0) {
+							return null;
+						} else {
+							return new BigDecimal("100");
+						}
+					})
+					.collect(Collectors.toList());
+			agingAnalysisVo.setPercent(percent);
+			result.add(agingAnalysisVo);
+			return R.ok(result);
+		}
+		return R.ok();
+	}
+
+	private List<AgingVo> completeData(List<AgingVo> companyAgingVo) {
+		if (ArrayUtil.isEmpty(companyAgingVo.toArray())) {
+			companyAgingVo = new ArrayList<>();
+			AgingVo agingVo1 = new AgingVo("0-30澶�", new BigDecimal("0"), null);
+			AgingVo agingVo2 = new AgingVo("31-60澶�", new BigDecimal("0"), null);
+			AgingVo agingVo3 = new AgingVo("61-90澶�", new BigDecimal("0"), null);
+			AgingVo agingVo4 = new AgingVo("91-180澶�", new BigDecimal("0"), null);
+			AgingVo agingVo5 = new AgingVo("181-365澶�", new BigDecimal("0"), null);
+			AgingVo agingVo6 = new AgingVo("1骞翠互涓�", new BigDecimal("0"), null);
+			companyAgingVo.add(agingVo1);
+			companyAgingVo.add(agingVo2);
+			companyAgingVo.add(agingVo3);
+			companyAgingVo.add(agingVo4);
+			companyAgingVo.add(agingVo5);
+			companyAgingVo.add(agingVo6);
+		} else {
+			List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
+			if (!ArrayUtil.contains(overdueRanges.toArray(), "0-30澶�")) {
+				AgingVo agingVo1 = new AgingVo("0-30澶�", new BigDecimal("0"), null);
+				companyAgingVo.add(agingVo1);
+			}
+			if (!ArrayUtil.contains(overdueRanges.toArray(), "31-60澶�")) {
+				AgingVo agingVo2 = new AgingVo("31-60澶�", new BigDecimal("0"), null);
+				companyAgingVo.add(agingVo2);
+			}
+			if (!ArrayUtil.contains(overdueRanges.toArray(), "61-90澶�")) {
+				AgingVo agingVo3 = new AgingVo("61-90澶�", new BigDecimal("0"), null);
+				companyAgingVo.add(agingVo3);
+			}
+			if (!ArrayUtil.contains(overdueRanges.toArray(), "91-180澶�")) {
+				AgingVo agingVo4 = new AgingVo("91-180澶�", new BigDecimal("0"), null);
+				companyAgingVo.add(agingVo4);
+			}
+			if (!ArrayUtil.contains(overdueRanges.toArray(), "181-365澶�")) {
+				AgingVo agingVo5 = new AgingVo("181-365澶�", new BigDecimal("0"), null);
+				companyAgingVo.add(agingVo5);
+			}
+			if (!ArrayUtil.contains(overdueRanges.toArray(), "1骞翠互涓�")) {
+				AgingVo agingVo6 = new AgingVo("1骞翠互涓�", new BigDecimal("0"), null);
+				companyAgingVo.add(agingVo6);
+			}
+		}
+		return companyAgingVo;
+	}
+
+	@Override
+	public R agingAnalysisByMarket(AnalysisCommonDTO commonDTO) {
+		R<List<SysDictItem>> r = remoteDictService.getDictByType("market_type");
+		List<SysDictItem> items = r.getData();
+		if (ArrayUtil.isEmpty(items.toArray())){
+			return R.failed("甯傚満绫诲瀷瀛楀吀鍒嗙被鑾峰彇寮傚父");
+		}
+		List<AgingAnalysisVo> result = new ArrayList<>();
+		AgingQueryDTO queryDTO = new AgingQueryDTO();
+		List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotal(null);
+		items.stream().forEach(item->{
+			AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+			agingAnalysisVo.setCompanyName(item.getLabel());
+			queryDTO.setClassId(item.getItemValue());
+			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotal(queryDTO);
+			//琛ュ叏鏁版嵁
+			if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+				companyAgingVo = new ArrayList<>();
+				AgingVo agingVo1 = new AgingVo("0-30澶�",new BigDecimal("0"),null);
+				AgingVo agingVo2 = new AgingVo("31-60澶�",new BigDecimal("0"),null);
+				AgingVo agingVo3 = new AgingVo("61-90澶�",new BigDecimal("0"),null);
+				AgingVo agingVo4 = new AgingVo("91-180澶�",new BigDecimal("0"),null);
+				AgingVo agingVo5 = new AgingVo("181-365澶�",new BigDecimal("0"),null);
+				AgingVo agingVo6 = new AgingVo("1骞翠互涓�",new BigDecimal("0"),null);
+				companyAgingVo.add(agingVo1);
+				companyAgingVo.add(agingVo2);
+				companyAgingVo.add(agingVo3);
+				companyAgingVo.add(agingVo4);
+				companyAgingVo.add(agingVo5);
+				companyAgingVo.add(agingVo6);
+			}else {
+				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+					AgingVo agingVo1 = new AgingVo("0-30澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo1);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+					AgingVo agingVo2 = new AgingVo("31-60澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo2);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+					AgingVo agingVo3 = new AgingVo("61-90澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo3);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+					AgingVo agingVo4 = new AgingVo("91-180澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo4);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+					AgingVo agingVo5 = new AgingVo("181-365澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo5);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+					AgingVo agingVo6 = new AgingVo("1骞翠互涓�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo6);
+				}
+			}
+			agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+			List<AgingVo> finalCompanyAgingVo = companyAgingVo;
+			agingAnalysisVo.setPercent(IntStream.range(0, agingVoList.size())
+					.mapToObj(i -> {
+						BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount();
+						BigDecimal total = agingVoList.get(i).getTotalAmount();
+						if (total == null || total.compareTo(BigDecimal.ZERO) == 0) {
+							return null;
+						}
+						return part.divide(total, 4, RoundingMode.HALF_UP)
+								.multiply(new BigDecimal("100"))
+								.setScale(2, RoundingMode.HALF_UP);
+					})
+					.collect(Collectors.toList()));
+			result.add(agingAnalysisVo);
+		});
+		//鍚堣
+		AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+		agingAnalysisVo.setCompanyName("鍚堣");
+		agingAnalysisVo.setAmount(agingVoList.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+		List<BigDecimal> percent = IntStream.range(0, agingAnalysisVo.getAmount().size())
+				.mapToObj(i -> {
+
+					if (agingAnalysisVo.getAmount().get(i) == null || agingAnalysisVo.getAmount().get(i).compareTo(BigDecimal.ZERO) == 0) {
+						return null;
+					}else {
+						return new BigDecimal("100");
+					}
+				})
+				.collect(Collectors.toList());
+		agingAnalysisVo.setPercent(percent);
+		result.add(agingAnalysisVo);
+		return R.ok(result);
+	}
+
+	@Override
+	public R agingAnalysisTotalScale(AnalysisCommonDTO commonDTO) {
+		List<Long> compIds = new ArrayList<>();
+		compIds.add(Long.valueOf(sgb));
+		compIds.add(Long.valueOf(smj));
+		compIds.add(Long.valueOf(tfgs));
+		compIds.add(Long.valueOf(ymj));
+		compIds.add(Long.valueOf(jxc));
+		List<AgingAnalysisVo> result = new ArrayList<>();
+		AgingQueryDTO queryDTO = new AgingQueryDTO();
+		List<AgingVo> agingVoList = contractPaymentScheduleMapper.selectAgingTotalScale(null);
+		compIds.stream().forEach(compId->{
+			R<SysDept> r = remoteDeptService.getById(compId);
+			if (!r.isOk()){
+				return;
+			}
+			SysDept dept = r.getData();
+			AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+			agingAnalysisVo.setCompanyName(dept.getOrgName());
+			queryDTO.setCompanyId(dept.getDeptId());
+			List<AgingVo> companyAgingVo = contractPaymentScheduleMapper.selectAgingTotalScale(queryDTO);
+			//琛ュ叏鏁版嵁
+			if (ArrayUtil.isEmpty(companyAgingVo.toArray())){
+				companyAgingVo = new ArrayList<>();
+				AgingVo agingVo1 = new AgingVo("0-30澶�",new BigDecimal("0"),null);
+				AgingVo agingVo2 = new AgingVo("31-60澶�",new BigDecimal("0"),null);
+				AgingVo agingVo3 = new AgingVo("61-90澶�",new BigDecimal("0"),null);
+				AgingVo agingVo4 = new AgingVo("91-180澶�",new BigDecimal("0"),null);
+				AgingVo agingVo5 = new AgingVo("181-365澶�",new BigDecimal("0"),null);
+				AgingVo agingVo6 = new AgingVo("1骞翠互涓�",new BigDecimal("0"),null);
+				companyAgingVo.add(agingVo1);
+				companyAgingVo.add(agingVo2);
+				companyAgingVo.add(agingVo3);
+				companyAgingVo.add(agingVo4);
+				companyAgingVo.add(agingVo5);
+				companyAgingVo.add(agingVo6);
+			}else {
+				List<String> overdueRanges = companyAgingVo.stream().map(AgingVo::getOverdueRange).collect(Collectors.toList());
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"0-30澶�")){
+					AgingVo agingVo1 = new AgingVo("0-30澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo1);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"31-60澶�")){
+					AgingVo agingVo2 = new AgingVo("31-60澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo2);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"61-90澶�")){
+					AgingVo agingVo3 = new AgingVo("61-90澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo3);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"91-180澶�")){
+					AgingVo agingVo4 = new AgingVo("91-180澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo4);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"181-365澶�")){
+					AgingVo agingVo5 = new AgingVo("181-365澶�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo5);
+				}
+				if (!ArrayUtil.contains(overdueRanges.toArray(),"1骞翠互涓�")){
+					AgingVo agingVo6 = new AgingVo("1骞翠互涓�",new BigDecimal("0"),null);
+					companyAgingVo.add(agingVo6);
+				}
+			}
+			agingAnalysisVo.setAmount(companyAgingVo.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+			List<AgingVo> finalCompanyAgingVo = companyAgingVo;
+			agingAnalysisVo.setPercent(IntStream.range(0, agingVoList.size())
+					.mapToObj(i -> {
+						BigDecimal part = finalCompanyAgingVo.get(i).getTotalAmount();
+						BigDecimal total = agingVoList.get(i).getTotalAmount();
+						if (total == null || total.compareTo(BigDecimal.ZERO) == 0) {
+							return null;
+						}
+						return part.divide(total, 4, RoundingMode.HALF_UP)
+								.multiply(new BigDecimal("100"))
+								.setScale(2, RoundingMode.HALF_UP);
+					})
+					.collect(Collectors.toList()));
+			result.add(agingAnalysisVo);
+		});
+		//鍚堣
+		AgingAnalysisVo agingAnalysisVo = new AgingAnalysisVo();
+		agingAnalysisVo.setCompanyName("鍚堣");
+		agingAnalysisVo.setAmount(agingVoList.stream().map(AgingVo::getTotalAmount).collect(Collectors.toList()));
+		List<BigDecimal> percent = IntStream.range(0, agingAnalysisVo.getAmount().size())
+				.mapToObj(i -> {
+
+					if (agingAnalysisVo.getAmount().get(i) == null || agingAnalysisVo.getAmount().get(i).compareTo(BigDecimal.ZERO) == 0) {
+						return null;
+					}else {
+						return new BigDecimal("100");
+					}
+				})
+				.collect(Collectors.toList());
+		agingAnalysisVo.setPercent(percent);
+		result.add(agingAnalysisVo);
+		return R.ok(result);
+	}
+
+	@Override
+	public R homeZbjt() {
+		List<HomeZbjtVo> homeZbjtVoList = new ArrayList<>();
+		//鍚堝悓绛捐 sgb smj jxc tfgs ymj
+		HomeZbjtVo htqd = contractMapper.homeZbjt();
+		homeZbjtVoList.add(htqd);
+		//鍥炴
+		HomeZbjtVo hk = paymentSlipMapper.homeZbjt();
+		homeZbjtVoList.add(hk);
+		//鍑鸿揣
+		HomeZbjtVo ch = contractOutBoundMapper.homeZbjt();
+		homeZbjtVoList.add(ch);
+		//寮�绁�
+		HomeZbjtVo kp = contractInvoiceMapper.homeZbjt();
+		homeZbjtVoList.add(kp);
+		//璧婇攢浜х敓鍊� 浠婂ぉ鍙戣揣鍔犱粖澶╁紑绁ㄩ
+//		if (ObjUtil.isNotNull(ch)&&ObjUtil.isNotNull(kp)){
+//			HomeZbjtVo sxsy = ch.add(kp);
+//			homeZbjtVoList.add(sxsy);
+//		}else if (ObjUtil.isNotNull(ch)&&ObjUtil.isNull(kp)){
+			homeZbjtVoList.add(ch);
+//		}else if (ObjUtil.isNull(ch)&&ObjUtil.isNotNull(kp)){
+//			homeZbjtVoList.add(kp);
+//		}else {
+//			homeZbjtVoList.add(new HomeZbjtVo());
+//		}
+		//璧婇攢绱鍓╀綑鍊� 浠婃棩鍙戣揣涓旀病寮�绁ㄧ殑鍑鸿揣
+		HomeZbjtVo sx = contractOutBoundMapper.homeZbjtSX();
+		homeZbjtVoList.add(sx);
+		HomeZbjtVo yq = currentOverdueMapper.homeZbjt();
+		//閫炬湡绱鍓╀綑 浠婃棩浜х敓閫炬湡 鍚巻鍙�
+		HomeZbjtVo ls = historyOverdueMapper.homeZbjt();
+		if (ObjUtil.isNotNull(ls)&&ObjUtil.isNotNull(yq)){
+			homeZbjtVoList.add(yq.add(ls));
+		}else if (ObjUtil.isNotNull(ls)&&ObjUtil.isNull(yq)){
+			homeZbjtVoList.add(ls);
+		}else if (ObjUtil.isNull(ls)&&ObjUtil.isNotNull(yq)){
+			homeZbjtVoList.add(yq);
+		}else {
+			homeZbjtVoList.add(new HomeZbjtVo());
+		}
+		//閫炬湡浜х敓鍊� 浠婂ぉ浜х敓-浠婂ぉ宸蹭粯
+
+		homeZbjtVoList.add(yq);
+		return R.ok(homeZbjtVoList);
+	}
+
+	@Override
+	public R homeZgs() {
+		List<HomeZgsVo> homeZbjtVoList = new ArrayList<>();
+		//鍚堝悓绛捐 鍗庡寳  瑗垮寳  涓滃寳  娴峰
+		HomeZgsVo htqd = contractMapper.homeZgs(SecurityUtils.getUser().getCompId());
+		homeZbjtVoList.add(htqd);
+		//鍥炴
+		HomeZgsVo hk = paymentSlipMapper.homeZgs(SecurityUtils.getUser().getCompId());
+		homeZbjtVoList.add(hk);
+		//鍑鸿揣
+		HomeZgsVo ch = contractOutBoundMapper.homeZgs(SecurityUtils.getUser().getCompId());
+		homeZbjtVoList.add(ch);
+		//寮�绁�
+		HomeZgsVo kp = contractInvoiceMapper.homeZgs(SecurityUtils.getUser().getCompId());
+		homeZbjtVoList.add(kp);
+		//璧婇攢浜х敓鍊�
+//		if (ObjUtil.isNotNull(ch)&&ObjUtil.isNotNull(kp)){
+//			HomeZgsVo sxsy = ch.add(kp);
+//			homeZbjtVoList.add(sxsy);
+//		}else if (ObjUtil.isNotNull(ch)&&ObjUtil.isNull(kp)){
+			homeZbjtVoList.add(ch);
+//		}else if (ObjUtil.isNull(ch)&&ObjUtil.isNotNull(kp)){
+//			homeZbjtVoList.add(kp);
+//		}else {
+//			homeZbjtVoList.add(new HomeZgsVo());
+//		}
+		//璧婇攢绱鍓╀綑鍊�
+		HomeZgsVo sx = contractOutBoundMapper.homeZgsSX(SecurityUtils.getUser().getCompId());
+		homeZbjtVoList.add(sx);
+
+		HomeZgsVo yq = currentOverdueMapper.homeZgs(SecurityUtils.getUser().getCompId());
+
+		//閫炬湡浜х敓鍊�
+		HomeZgsVo ls = historyOverdueMapper.homeZgs(SecurityUtils.getUser().getCompId());
+		if (ObjUtil.isNotNull(ls)&&ObjUtil.isNotNull(yq)){
+			homeZbjtVoList.add(yq.add(ls));
+		}else if (ObjUtil.isNotNull(ls)&&ObjUtil.isNull(yq)){
+			homeZbjtVoList.add(ls);
+		}else if (ObjUtil.isNull(ls)&&ObjUtil.isNotNull(yq)){
+			homeZbjtVoList.add(yq);
+		}else {
+			homeZbjtVoList.add(new HomeZgsVo());
+		}
+		//閫炬湡绱鍓╀綑
+		homeZbjtVoList.add(yq);
+		return R.ok(homeZbjtVoList);
+	}
+
+	@Override
+	public R homeZbjtFlag() {
+		Long userId = SecurityUtils.getUser().getCompId();
+		List<Long> compIds = new ArrayList<>();
+		compIds.add(Long.valueOf(sgb));
+		compIds.add(Long.valueOf(smj));
+		compIds.add(Long.valueOf(tfgs));
+		compIds.add(Long.valueOf(ymj));
+		compIds.add(Long.valueOf(jxc));
+		if (compIds.contains(userId)){
+			return R.ok(false);
+		};
+		return R.ok(true);
+	}
+
+	@Override
+	public R homeContract(HomeQueryDTO queryDTO) {
+		LocalDateTime now = LocalDateTime.now();
+		LocalDate today = now.toLocalDate();
+		// 寮�濮嬫椂闂达細浠婂ぉ 00:00:00
+		LocalDateTime startOfDay = today.atStartOfDay();
+		// 缁撴潫鏃堕棿锛氫粖澶� 23:59:59.999999999 (鎴栬�呬娇鐢� nextDay 00:00:00 閰嶅悎 lt)
+		LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+		// --- 鍦烘櫙浜岋細鏌ヨ褰撴湀鏁版嵁 ---
+		// 寮�濮嬫椂闂达細褰撴湀1鍙� 00:00:00
+		LocalDateTime startOfMonth = today.withDayOfMonth(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋鏈堟渶鍚庝竴澶� 23:59:59
+		LocalDateTime endOfMonth = today.withDayOfMonth(today.lengthOfMonth()).atTime(LocalTime.MAX);
+
+		// 寮�濮嬫椂闂达細褰撳勾1鏈�1鍙� 00:00:00
+		LocalDateTime startOfYear = today.withDayOfYear(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋骞�12鏈�31鍙� 23:59:59
+		LocalDateTime endOfYear = today.withDayOfYear(today.lengthOfYear()).atTime(LocalTime.MAX);
+
+		MPJLambdaWrapper<Contract> wrapper = new MPJLambdaWrapper<Contract>()
+		.selectAll(Contract.class)
+				.leftJoin(BusinessCustomer.class,BusinessCustomer::getId,Contract::getPartyAId)
+				.eq(ObjUtil.isNotNull(queryDTO.getQueryCompId()),Contract::getCompId,queryDTO.getQueryCompId())
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),Contract::getSignDate,startOfDay)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),Contract::getSignDate,endOfDay)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),Contract::getSignDate,startOfMonth)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),Contract::getSignDate,endOfMonth)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),Contract::getSignDate,startOfYear)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),Contract::getSignDate,endOfYear)
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryArea()),BusinessCustomer::getAreaId,queryDTO.getQueryArea())
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryServiceAttr()),BusinessCustomer::getExportServiceAttr,queryDTO.getQueryServiceAttr())
+				.orderByDesc(Contract::getCreateTime)
+				;
+		return R.ok(contractMapper.selectList(wrapper));
+	}
+
+	@Override
+	public R homePaymentSlip(HomeQueryDTO queryDTO) {
+		LocalDateTime now = LocalDateTime.now();
+		LocalDate today = now.toLocalDate();
+		// 寮�濮嬫椂闂达細浠婂ぉ 00:00:00
+		LocalDateTime startOfDay = today.atStartOfDay();
+		// 缁撴潫鏃堕棿锛氫粖澶� 23:59:59.999999999 (鎴栬�呬娇鐢� nextDay 00:00:00 閰嶅悎 lt)
+		LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+		// --- 鍦烘櫙浜岋細鏌ヨ褰撴湀鏁版嵁 ---
+		// 寮�濮嬫椂闂达細褰撴湀1鍙� 00:00:00
+		LocalDateTime startOfMonth = today.withDayOfMonth(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋鏈堟渶鍚庝竴澶� 23:59:59
+		LocalDateTime endOfMonth = today.withDayOfMonth(today.lengthOfMonth()).atTime(LocalTime.MAX);
+
+		// 寮�濮嬫椂闂达細褰撳勾1鏈�1鍙� 00:00:00
+		LocalDateTime startOfYear = today.withDayOfYear(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋骞�12鏈�31鍙� 23:59:59
+		LocalDateTime endOfYear = today.withDayOfYear(today.lengthOfYear()).atTime(LocalTime.MAX);
+		MPJLambdaWrapper<PaymentSlip> wrapper = new MPJLambdaWrapper<PaymentSlip>()
+				.selectAll(PaymentSlip.class)
+				.leftJoin(BusinessCustomer.class,BusinessCustomer::getId,PaymentSlip::getBusGuestId)
+				.eq(ObjUtil.isNotNull(queryDTO.getQueryCompId()),Contract::getCompId,queryDTO.getQueryCompId())
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),PaymentSlip::getPaymentTime,startOfDay)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),PaymentSlip::getPaymentTime,endOfDay)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),PaymentSlip::getPaymentTime,startOfMonth)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),PaymentSlip::getPaymentTime,endOfMonth)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),PaymentSlip::getPaymentTime,startOfYear)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),PaymentSlip::getPaymentTime,endOfYear)
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryArea()),BusinessCustomer::getAreaId,queryDTO.getQueryArea())
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryServiceAttr()),BusinessCustomer::getExportServiceAttr,queryDTO.getQueryServiceAttr())
+				.orderByDesc(PaymentSlip::getCreateTime)
+				;
+		return R.ok(paymentSlipMapper.selectList(wrapper));
+	}
+
+	@Override
+	public R homeOutBound(HomeQueryDTO queryDTO) {
+		LocalDateTime now = LocalDateTime.now();
+		LocalDate today = now.toLocalDate();
+		// 寮�濮嬫椂闂达細浠婂ぉ 00:00:00
+		LocalDateTime startOfDay = today.atStartOfDay();
+		// 缁撴潫鏃堕棿锛氫粖澶� 23:59:59.999999999 (鎴栬�呬娇鐢� nextDay 00:00:00 閰嶅悎 lt)
+		LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+		// --- 鍦烘櫙浜岋細鏌ヨ褰撴湀鏁版嵁 ---
+		// 寮�濮嬫椂闂达細褰撴湀1鍙� 00:00:00
+		LocalDateTime startOfMonth = today.withDayOfMonth(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋鏈堟渶鍚庝竴澶� 23:59:59
+		LocalDateTime endOfMonth = today.withDayOfMonth(today.lengthOfMonth()).atTime(LocalTime.MAX);
+
+		// 寮�濮嬫椂闂达細褰撳勾1鏈�1鍙� 00:00:00
+		LocalDateTime startOfYear = today.withDayOfYear(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋骞�12鏈�31鍙� 23:59:59
+		LocalDateTime endOfYear = today.withDayOfYear(today.lengthOfYear()).atTime(LocalTime.MAX);
+		MPJLambdaWrapper<ContractOutBound> wrapper = new MPJLambdaWrapper<ContractOutBound>()
+				.selectAll(ContractOutBound.class)
+				.select(Contract::getContractNo)
+				.selectAs(BusinessCustomer::getCompanyName,"busGuestName")
+				.select(ContractSubjectMatter::getUnitPrice)
+				.leftJoin(Contract.class,Contract::getId,ContractOutBound::getContractId)
+				.leftJoin(BusinessCustomer.class,BusinessCustomer::getId,ContractOutBound::getBusGuestId)
+				.leftJoin(ContractSubjectMatter.class, on->
+						on.eq(ContractSubjectMatter::getContractId,ContractOutBound::getContractId)
+								.eq(ContractSubjectMatter::getMaterialCode,ContractOutBound::getSubjectMatterCode)
+				)
+				.eq(ObjUtil.isNotNull(queryDTO.getQueryCompId()),Contract::getCompId,queryDTO.getQueryCompId())
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),ContractOutBound::getOutBoundTime,startOfDay)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),ContractOutBound::getOutBoundTime,endOfDay)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),ContractOutBound::getOutBoundTime,startOfMonth)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),ContractOutBound::getOutBoundTime,endOfMonth)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),ContractOutBound::getOutBoundTime,startOfYear)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),ContractOutBound::getOutBoundTime,endOfYear)
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryArea()),BusinessCustomer::getAreaId,queryDTO.getQueryArea())
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryServiceAttr()),BusinessCustomer::getExportServiceAttr,queryDTO.getQueryServiceAttr())
+				.orderByDesc(ContractOutBound::getCreateTime)
+				;
+		return R.ok(contractOutBoundMapper.selectJoinList(HomeOutBoundVo.class,wrapper));
+	}
+
+	@Override
+	public R homeInvoice(HomeQueryDTO queryDTO) {
+		LocalDateTime now = LocalDateTime.now();
+		LocalDate today = now.toLocalDate();
+		// 寮�濮嬫椂闂达細浠婂ぉ 00:00:00
+		LocalDateTime startOfDay = today.atStartOfDay();
+		// 缁撴潫鏃堕棿锛氫粖澶� 23:59:59.999999999 (鎴栬�呬娇鐢� nextDay 00:00:00 閰嶅悎 lt)
+		LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+		// --- 鍦烘櫙浜岋細鏌ヨ褰撴湀鏁版嵁 ---
+		// 寮�濮嬫椂闂达細褰撴湀1鍙� 00:00:00
+		LocalDateTime startOfMonth = today.withDayOfMonth(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋鏈堟渶鍚庝竴澶� 23:59:59
+		LocalDateTime endOfMonth = today.withDayOfMonth(today.lengthOfMonth()).atTime(LocalTime.MAX);
+
+		// 寮�濮嬫椂闂达細褰撳勾1鏈�1鍙� 00:00:00
+		LocalDateTime startOfYear = today.withDayOfYear(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋骞�12鏈�31鍙� 23:59:59
+		LocalDateTime endOfYear = today.withDayOfYear(today.lengthOfYear()).atTime(LocalTime.MAX);
+		MPJLambdaWrapper<ContractInvoice> wrapper = new MPJLambdaWrapper<ContractInvoice>()
+				.selectAll(ContractInvoice.class)
+				.select(Contract::getContractNo)
+				.selectAs(BusinessCustomer::getCompanyName,"busGuestName")
+				.leftJoin(Contract.class,Contract::getId,ContractInvoice::getContractId)
+				.leftJoin(BusinessCustomer.class,BusinessCustomer::getId,Contract::getPartyAId)
+				.eq(ObjUtil.isNotNull(queryDTO.getQueryCompId()),Contract::getCompId,queryDTO.getQueryCompId())
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),ContractInvoice::getInvoiceTime,startOfDay)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),ContractInvoice::getInvoiceTime,endOfDay)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),ContractInvoice::getInvoiceTime,startOfMonth)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),ContractInvoice::getInvoiceTime,endOfMonth)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),ContractInvoice::getInvoiceTime,startOfYear)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),ContractInvoice::getInvoiceTime,endOfYear)
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryArea()),BusinessCustomer::getAreaId,queryDTO.getQueryArea())
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryServiceAttr()),BusinessCustomer::getExportServiceAttr,queryDTO.getQueryServiceAttr())
+				.orderByDesc(ContractInvoice::getCreateTime)
+				;
+		return R.ok(contractInvoiceMapper.selectJoinList(HomeInvoiceVo.class,wrapper));
+	}
+
+	@Override
+	public R homeCreditSale(HomeQueryDTO queryDTO) {
+		LocalDateTime now = LocalDateTime.now();
+		LocalDate today = now.toLocalDate();
+		// 寮�濮嬫椂闂达細浠婂ぉ 00:00:00
+		LocalDateTime startOfDay = today.atStartOfDay();
+		// 缁撴潫鏃堕棿锛氫粖澶� 23:59:59.999999999 (鎴栬�呬娇鐢� nextDay 00:00:00 閰嶅悎 lt)
+		LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+		// --- 鍦烘櫙浜岋細鏌ヨ褰撴湀鏁版嵁 ---
+		// 寮�濮嬫椂闂达細褰撴湀1鍙� 00:00:00
+		LocalDateTime startOfMonth = today.withDayOfMonth(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋鏈堟渶鍚庝竴澶� 23:59:59
+		LocalDateTime endOfMonth = today.withDayOfMonth(today.lengthOfMonth()).atTime(LocalTime.MAX);
+
+		// 寮�濮嬫椂闂达細褰撳勾1鏈�1鍙� 00:00:00
+		LocalDateTime startOfYear = today.withDayOfYear(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋骞�12鏈�31鍙� 23:59:59
+		LocalDateTime endOfYear = today.withDayOfYear(today.lengthOfYear()).atTime(LocalTime.MAX);
+		MPJLambdaWrapper<ContractOutBound> wrapper = new MPJLambdaWrapper<ContractOutBound>()
+				.selectAll(ContractOutBound.class)
+				.select(Contract::getContractNo)
+				.selectAs(BusinessCustomer::getCompanyName,"busGuestName")
+				.select(ContractSubjectMatter::getUnitPrice)
+				.leftJoin(Contract.class,Contract::getId,ContractOutBound::getContractId)
+				.leftJoin(BusinessCustomer.class,BusinessCustomer::getId,Contract::getPartyAId)
+				.leftJoin(ContractSubjectMatter.class, on->
+						on.eq(ContractSubjectMatter::getContractId,ContractOutBound::getContractId)
+						.eq(ContractSubjectMatter::getMaterialCode,ContractOutBound::getSubjectMatterCode)
+				)
+				.eq(ObjUtil.isNotNull(queryDTO.getQueryCompId()),Contract::getCompId,queryDTO.getQueryCompId())
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),ContractOutBound::getOutBoundTime,startOfDay)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),ContractOutBound::getOutBoundTime,endOfDay)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),ContractOutBound::getOutBoundTime,startOfMonth)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),ContractOutBound::getOutBoundTime,endOfMonth)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),ContractOutBound::getOutBoundTime,startOfYear)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),ContractOutBound::getOutBoundTime,endOfYear)
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryArea()),BusinessCustomer::getAreaId,queryDTO.getQueryArea())
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryServiceAttr()),BusinessCustomer::getExportServiceAttr,queryDTO.getQueryServiceAttr())
+				.orderByDesc(ContractOutBound::getCreateTime)
+				;
+		return R.ok(contractOutBoundMapper.selectJoinList(HomeCreditSaleVo.class,wrapper));
+	}
+
+	@Override
+	public R homeOverdue(HomeQueryDTO queryDTO) {
+		LocalDateTime now = LocalDateTime.now();
+		LocalDate today = now.toLocalDate();
+		// 寮�濮嬫椂闂达細浠婂ぉ 00:00:00
+		LocalDateTime startOfDay = today.atStartOfDay();
+		// 缁撴潫鏃堕棿锛氫粖澶� 23:59:59.999999999 (鎴栬�呬娇鐢� nextDay 00:00:00 閰嶅悎 lt)
+		LocalDateTime endOfDay = today.atTime(LocalTime.MAX);
+		// --- 鍦烘櫙浜岋細鏌ヨ褰撴湀鏁版嵁 ---
+		// 寮�濮嬫椂闂达細褰撴湀1鍙� 00:00:00
+		LocalDateTime startOfMonth = today.withDayOfMonth(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋鏈堟渶鍚庝竴澶� 23:59:59
+		LocalDateTime endOfMonth = today.withDayOfMonth(today.lengthOfMonth()).atTime(LocalTime.MAX);
+
+		// 寮�濮嬫椂闂达細褰撳勾1鏈�1鍙� 00:00:00
+		LocalDateTime startOfYear = today.withDayOfYear(1).atStartOfDay();
+		// 缁撴潫鏃堕棿锛氬綋骞�12鏈�31鍙� 23:59:59
+		LocalDateTime endOfYear = today.withDayOfYear(today.lengthOfYear()).atTime(LocalTime.MAX);
+		MPJLambdaWrapper<CurrentOverdue> wrapper = new MPJLambdaWrapper<CurrentOverdue>()
+				.selectAll(CurrentOverdue.class)
+				.select(Contract::getContractNo)
+				.selectAs(BusinessCustomer::getCompanyName,"busGuestName")
+				.leftJoin(BusinessCustomer.class,BusinessCustomer::getId,CurrentOverdue::getBusGuestId)
+				.leftJoin(Contract.class,Contract::getId,CurrentOverdue::getContractId)
+				.eq(ObjUtil.isNotNull(queryDTO.getQueryCompId()),Contract::getCompId,queryDTO.getQueryCompId())
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),CurrentOverdue::getContractExpirTime,startOfDay)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"1"),CurrentOverdue::getContractExpirTime,endOfDay)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),CurrentOverdue::getContractExpirTime,startOfMonth)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"2"),CurrentOverdue::getContractExpirTime,endOfMonth)
+				.ge(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),CurrentOverdue::getContractExpirTime,startOfYear)
+				.le(StrUtil.isNotEmpty(queryDTO.getQueryType())&&StrUtil.equals(queryDTO.getQueryType(),"3"),CurrentOverdue::getContractExpirTime,endOfYear)
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryArea()),BusinessCustomer::getAreaId,queryDTO.getQueryArea())
+				.eq(StrUtil.isNotEmpty(queryDTO.getQueryServiceAttr()),BusinessCustomer::getExportServiceAttr,queryDTO.getQueryServiceAttr())
+				.orderByDesc(CurrentOverdue::getCreateTime)
+				;
+		return R.ok(currentOverdueMapper.selectJoinList(HomeOverdueVo.class,wrapper));
+	}
+
+	@Override
+	public R homeOverdueHis(HomeQueryDTO queryDTO) {
+		List<HomeOverdueStaVo> homeOverdueVos = new ArrayList<>();
+		HomeOverdueStaVo current = currentOverdueMapper.selectCurrentOverdue(queryDTO);
+		if (ObjUtil.isNotNull(current)){
+			current.setOverdueType("褰撳墠");
+			homeOverdueVos.add(current);
+		}
+		HomeOverdueStaVo history = historyOverdueMapper.selectHistoryOverdue(queryDTO);
+		if (ObjUtil.isNotNull(history)){
+			history.setOverdueType("鍘嗗彶");
+			homeOverdueVos.add(history);
+		}
+		return R.ok(homeOverdueVos);
+	}
 }

--
Gitblit v1.9.1