mitao
2025-01-20 93fec20f3cf9d7801eeaa10acef4687ed110d435
land-system/src/main/java/com/zzg/system/service/state/impl/StateDataCenterServiceImpl.java
@@ -4,9 +4,19 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.github.pagehelper.PageInfo;
import com.zzg.common.core.domain.entity.state.*;
import com.zzg.common.core.domain.entity.state.StateAgreement;
import com.zzg.common.core.domain.entity.state.StateAsset;
import com.zzg.common.core.domain.entity.state.StateHousehold;
import com.zzg.common.core.domain.entity.state.StateHouseholdOwner;
import com.zzg.common.core.domain.entity.state.StateProject;
import com.zzg.common.core.domain.entity.state.StateProjectInfo;
import com.zzg.common.core.domain.entity.state.StateSettlement;
import com.zzg.common.core.domain.entity.system.SysDictData;
import com.zzg.common.enums.*;
import com.zzg.common.enums.AgreementTypeEnum;
import com.zzg.common.enums.CompensationCategoryEnum;
import com.zzg.common.enums.DeleteFlagEnum;
import com.zzg.common.enums.StateProjectStatusEnum;
import com.zzg.common.enums.SubmitStatusEnum;
import com.zzg.common.utils.DateUtil;
import com.zzg.common.utils.DateUtils;
import com.zzg.common.utils.PageUtils;
@@ -14,12 +24,29 @@
import com.zzg.system.convert.StateProjectConvert;
import com.zzg.system.domain.bo.PlacementStatisticsBO;
import com.zzg.system.domain.bo.ProjectStatisticsBO;
import com.zzg.system.domain.vo.*;
import com.zzg.system.domain.vo.AssetGraphVO;
import com.zzg.system.domain.vo.AssetMoneyVO;
import com.zzg.system.domain.vo.HouseholdVO;
import com.zzg.system.domain.vo.PlacementStatisticsVO;
import com.zzg.system.domain.vo.PlacementStreetAreaVO;
import com.zzg.system.domain.vo.PlacementStreetMoneyVO;
import com.zzg.system.domain.vo.PlacementStreetVO;
import com.zzg.system.domain.vo.ProjectAnalysisSumVO;
import com.zzg.system.domain.vo.ProjectDataCenterStreetVO;
import com.zzg.system.domain.vo.ProjectDataCenterTypeVO;
import com.zzg.system.domain.vo.ProjectExecutionSumVO;
import com.zzg.system.domain.vo.ProjectStatusExpiredVO;
import com.zzg.system.domain.vo.TransitionPageVO;
import com.zzg.system.mapper.state.StateAssetMapper;
import com.zzg.system.service.state.*;
import com.zzg.system.service.state.StateAgreementService;
import com.zzg.system.service.state.StateDateCenterService;
import com.zzg.system.service.state.StateHouseholdOwnerService;
import com.zzg.system.service.state.StateHouseholdService;
import com.zzg.system.service.state.StateProjectInfoService;
import com.zzg.system.service.state.StateProjectService;
import com.zzg.system.service.state.StateSettlementService;
import com.zzg.system.service.system.ISysDictTypeService;
import lombok.RequiredArgsConstructor;
import org.checkerframework.checker.units.qual.A;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@@ -27,8 +54,13 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Timestamp;
import java.time.Year;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -56,6 +88,7 @@
    //计算最上面顶部统计数据
    @Override
    public ProjectAnalysisSumVO projectSumCount(String location, Integer projectStatus, Date projectStartTime) {
        //封装搜索条件
        LambdaQueryWrapper<StateProject> stateProjectQueryWrapper = new LambdaQueryWrapper<>();
        stateProjectQueryWrapper.ne(StateProject::getStatus,StateProjectStatusEnum.CANCELLATION.getKey());
        stateProjectQueryWrapper.eq(StateProject::getDelFlag,DeleteFlagEnum.NOT_DELETED.getKey());
@@ -68,11 +101,12 @@
        if (Objects.nonNull(projectStartTime)) {
            stateProjectQueryWrapper.eq(StateProject::getStartTime, projectStartTime);
        }
        //查询项目列表
        List<StateProject> stateProjects = stateProjectService.list(stateProjectQueryWrapper);
        if (CollectionUtils.isEmpty(stateProjects)) {
            return new ProjectAnalysisSumVO();
        }
        //封装返回对象
        ProjectAnalysisSumVO result = new ProjectAnalysisSumVO();
        List<String> projectIdList = stateProjects.stream().map(StateProject::getId).collect(Collectors.toList());
@@ -154,7 +188,7 @@
         * 对于模拟协议的人员计算 需要判断他是否只签订了模拟协议 ,因为正式协议有可能是模拟协议转过去的 需要排除这种情况 但是对于正式协议人员 只需要判断正式协议否存在即可
         * 此处是根据houseId进行分类 所以没有去重处理
         */
        //废弃代码开始
        for (String houseId : agreementMap.keySet()) {
            List<StateAgreement> agreements = agreementMap.get(houseId);
            Map<Integer, StateAgreement> agreementTypeMap = agreements.stream().collect(Collectors.toMap(StateAgreement::getAgreementFileType, Function.identity()));
@@ -162,7 +196,7 @@
            } else if (agreementTypeMap.containsKey(AgreementTypeEnum.STATE_AGREEMENT.getValue())) {
            }
        }
        //废弃代码结束
        //  HOUSE(0,"入户调查","house"),
        //    SIMULATE(1,"模拟征收", "simulate"),
        //    SIGNED(2,"正式征收", "signed"),
@@ -177,10 +211,15 @@
        return result;
    }
    /**
     * 项目统计-模拟征收超期项目
     * @param projectStatisticsBO
     * @return
     */
    @Override
    public PageInfo<ProjectStatusExpiredVO> expiredProjectStatus(ProjectStatisticsBO projectStatisticsBO) {
        //这里前端对于全部的阶段类型而言 传的
        //这里前端对于全部的阶段类型而言 传的 只统计模拟阶段的项目
        if (Objects.nonNull(projectStatisticsBO.getProjectStatus()) && !Objects.equals(projectStatisticsBO.getProjectStatus(), StateProjectStatusEnum.SIMULATE.getKey())) {
            return new PageInfo<>();
        }
@@ -195,9 +234,16 @@
        return pageInfo;
    }
    /**
     * 获取数据中心安置情况模块 中间的饼图
     * @param projectStreet
     * @param projectStartTime
     * @param type 没有用到
     * @return
     */
    @Override
    public PlacementStatisticsVO placementStatistics(String projectStreet, Date projectStartTime, Integer type) {
        //查询项目信息
        List<StateProject> list = appendQueryWrapper(projectStreet, projectStartTime);
        if (CollectionUtils.isEmpty(list)) {
            return new PlacementStatisticsVO();
@@ -291,9 +337,14 @@
        return stateProjectService.list(queryWrapper);
    }
    /**
     * 获取数据中心安置情况模块 下方的分页查询
     * @param placementStatisticsBO
     * @return
     */
    @Override
    public PageInfo<TransitionPageVO> placementStatisticsPage(PlacementStatisticsBO placementStatisticsBO) {
        //封装项目查询条件
        LambdaQueryWrapper<StateProject> projectLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if (org.apache.commons.lang3.StringUtils.isNotBlank(placementStatisticsBO.getProjectStreet())) {
            projectLambdaQueryWrapper.like(StateProject::getStreet, placementStatisticsBO.getProjectStreet());
@@ -302,6 +353,7 @@
            projectLambdaQueryWrapper.eq(StateProject::getStartTime, new Timestamp(placementStatisticsBO.getProjectStartTime().getTime()));
        }
        projectLambdaQueryWrapper.eq(StateProject::getStatus, StateProjectStatusEnum.LEVY.getKey());
        //查询项目
        List<StateProject> list = stateProjectService.list(projectLambdaQueryWrapper);
        if (CollectionUtils.isEmpty(list)) {
            return new PageInfo<>();
@@ -320,7 +372,7 @@
        LambdaQueryWrapper<StateHouseholdOwner> stateHouseholdOwnerLambdaQueryWrapper = new LambdaQueryWrapper<>();
        stateHouseholdOwnerLambdaQueryWrapper.in(StateHouseholdOwner::getStateHouseholdId, houseIdList);
        //查询房产权利人
        List<StateHouseholdOwner> stateHouseholdOwners = stateHouseholdOwnerService.list(stateHouseholdOwnerLambdaQueryWrapper);
        Map<String, List<StateHouseholdOwner>> ownerMap = stateHouseholdOwners.stream().collect(Collectors.groupingBy(StateHouseholdOwner::getStateHouseholdId));
@@ -329,7 +381,7 @@
            StateProject stateProject = projectMap.get(householdVO.getStateProjectId());
            transitionPageVO.setProjectStreet(householdVO.getBelongingStreetTown());
            transitionPageVO.setProjectName(stateProject.getProjectName());
            //多个权利人使用“|”分隔
            List<StateHouseholdOwner> owners = ownerMap.get(householdVO.getId());
            if (!CollectionUtils.isEmpty(owners)) {
                String ownerName = owners.stream().map(StateHouseholdOwner::getOwnerName)
@@ -343,7 +395,7 @@
                        householdVO.getSignAt()
                        : null);
            }
            //过度时长=正式合同签约时间与当前时间比较
            if (Objects.nonNull(transitionPageVO.getSignAt())) {
                long daysBetween = DateUtil.getDaysBetween(transitionPageVO.getSignAt(), DateUtils.getNowDate());
                transitionPageVO.setTransitionDay(daysBetween);
@@ -358,6 +410,11 @@
        return transitionPageVOPageInfo;
    }
    /**
     * 项目资金 数据中心-项目资产统计 左侧数据
     * @param stateTime
     * @return
     */
    @Override
    public AssetMoneyVO sumAssetMoney(Date stateTime) {
@@ -366,6 +423,7 @@
            projectLambdaQueryWrapper.ge(StateProject::getFinishedTime, cn.hutool.core.date.DateUtil.beginOfDay(stateTime));
            projectLambdaQueryWrapper.le(StateProject::getFinishedTime, cn.hutool.core.date.DateUtil.endOfDay(stateTime));
        }
        //查询项目
        List<StateProject> list = stateProjectService.list(projectLambdaQueryWrapper);
        if (CollectionUtils.isEmpty(list)) {
            return new AssetMoneyVO();
@@ -407,6 +465,7 @@
            //合同金额
            LambdaQueryWrapper<StateAgreement> stateAgreementLambdaQueryWrapper = new LambdaQueryWrapper<>();
            stateAgreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, stateHouseholdIds);
            //只统计正式合同
            stateAgreementLambdaQueryWrapper.eq(StateAgreement::getAgreementFileType, AgreementTypeEnum.STATE_AGREEMENT.getValue());
            stateAgreementLambdaQueryWrapper.eq(StateAgreement::getDelFlag, DeleteFlagEnum.NOT_DELETED.getKey());
            stateAgreementLambdaQueryWrapper.isNotNull(StateAgreement::getAgreementNumber);
@@ -416,7 +475,7 @@
                agreementMoney = stateAgreementList.stream().mapToDouble(StateAgreement::getMoney).sum();
            }
            //产全置换合同金额
            //产权置换合同金额
            double cqzhagreementMoney = 0;
            List<StateHousehold> cqzhHourse = stateHouseholdList.stream().filter(data -> data.getCompensationType().equals(CompensationCategoryEnum.PROPERTY_SWAP_2.getCode())).collect(Collectors.toList());
            if (ObjectUtil.isNotEmpty(cqzhHourse)) {
@@ -459,6 +518,11 @@
        return result;
    }
    /**
     * 数据中心-项目资产统计 右侧柱状图
     * @param stateTime
     * @return
     */
    @Override
    public List<AssetGraphVO> listAssetGraph(Date stateTime) {
        LambdaQueryWrapper<StateProject> projectLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -585,12 +649,17 @@
        return result;
    }
    /**
     * 数据中心-安置情况柱状图
     * @param street
     * @param stateTime
     * @return
     */
    @Override
    public PlacementStreetVO sumPlacementStreet(String street, Date stateTime) {
        String houseStreet = street;
        street = "";
        //过滤房产
        //查询项目列表
        List<StateProject> stateProjectList = appendQueryWrapper(street, stateTime);
        if (CollectionUtils.isEmpty(stateProjectList)) {
            return new PlacementStreetVO();
@@ -598,28 +667,31 @@
        //查询房产信息
        List<String> projectIdList = stateProjectList.stream().map(StateProject::getId).collect(Collectors.toList());
        //封装房产查询条件
        LambdaQueryWrapper<StateHousehold> stateHouseholdLambdaQueryWrapper = new LambdaQueryWrapper<>();
        stateHouseholdLambdaQueryWrapper.in(StateHousehold::getStateProjectId, projectIdList);
        if (ObjectUtil.isNotEmpty(houseStreet)) {
            stateHouseholdLambdaQueryWrapper.like(StateHousehold::getBelongingStreetTown, houseStreet);
        }
        //查询房产列表
        List<StateHousehold> stateHouseholdList = stateHouseholdService.list(stateHouseholdLambdaQueryWrapper);
        if (CollectionUtils.isEmpty(stateHouseholdList)) {
            return new PlacementStreetVO();
        }
        //房产id列表
        List<String> houseIdList = stateHouseholdList.stream().filter(Objects::nonNull).map(StateHousehold::getId).collect(Collectors.toList());
        //查询安置信息
        LambdaQueryWrapper<StateSettlement> stateSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
        //TODO in问题
        stateSettlementLambdaQueryWrapper.in(StateSettlement::getStateHouseholdId, houseIdList);
        stateSettlementLambdaQueryWrapper.eq(StateSettlement::getAuditStatus, SubmitStatusEnum.ACCEPT.getValue());
        List<StateSettlement> stateSettlementList = stateSettlementService.list(stateSettlementLambdaQueryWrapper);
        if (CollectionUtils.isEmpty(stateSettlementList)) {
            return new PlacementStreetVO();
        }
        //根据房产id分组
        Map<String, StateSettlement> settlementMap = stateSettlementList.stream().collect(Collectors.toMap(StateSettlement::getStateHouseholdId, Function.identity()));
        //去除数据 只要安置审核已接受的数据
@@ -630,6 +702,7 @@
        //查询协议
        LambdaQueryWrapper<StateAgreement> agreementLambdaQueryWrapper = new LambdaQueryWrapper<>();
        //TODO in问题
        agreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, settleIdList);
        agreementLambdaQueryWrapper.eq(StateAgreement::getAgreementFileType, 1);
        List<StateAgreement> agreementList = agreementService.list(agreementLambdaQueryWrapper);
@@ -653,12 +726,17 @@
            //面积
            double beforeExchangeArea = 0;
            //安置后面积
            double afterExchangeArea = 0;
            //面积差
            double areaDelta = 0;
            //金额
            //合同金额
            double beforeExchangeMoney = 0;
            //结算金额(安置后的金额)
            double afterExchangeMoney = 0;
            //价值差
            double moneyDelta = 0;
            //获取该街道产权置换的安置前数据
@@ -672,6 +750,7 @@
                for (String housId : involvedHouseList) {
                    List<StateAgreement> stateAgreementList = stateAgreement.get(housId);
                    if (ObjectUtil.isNotEmpty(stateAgreementList)) {
                        beforeExchangeMoney += stateAgreementList.stream().map(StateAgreement::getMoney).mapToDouble(item -> ObjectUtil.isNotEmpty(item) ? item : 0).sum();
                    }
                }
@@ -688,9 +767,11 @@
                        beforeExchangeMoney += stateAgreementList.stream().map(StateAgreement::getMoney).mapToDouble(item -> ObjectUtil.isNotEmpty(item) ? item : 0).sum();
                    }
                }
                afterExchangeMoney += involvedHouseList.stream().filter(house -> Objects.nonNull(settlementMap.get(house))).map(settlementMap::get).mapToDouble(settlement -> Objects.nonNull(settlement.getSettlementMoney()) ? settlement.getSettlementMoney() : 0).sum();
                afterExchangeMoney += involvedHouseList.stream().filter(house -> Objects.nonNull(settlementMap.get(house))).map(settlementMap::get)
                        .mapToDouble(settlement -> Objects.nonNull(settlement.getSettlementMoney()) ? settlement.getSettlementMoney() : 0).sum();
                beforeExchangeArea += involvedHouseList.stream().filter(house -> Objects.nonNull(settlementMap.get(house))).map(settlementMap::get).mapToDouble(settlement -> Objects.nonNull(settlement.getSettlementArea()) ? settlement.getSettlementArea() : 0).sum();
                beforeExchangeArea += involvedHouseList.stream().filter(house -> Objects.nonNull(settlementMap.get(house))).map(settlementMap::get)
                        .mapToDouble(settlement -> Objects.nonNull(settlement.getSettlementArea()) ? settlement.getSettlementArea() : 0).sum();
            }
            //计算差额
@@ -780,7 +861,7 @@
        }
        List<ProjectDataCenterTypeVO> projectDataCenterTypeVOList = new ArrayList<>();
        List<StateProjectInfo> typeProjectList = stateProjects.stream().filter(data -> Objects.nonNull(data.getProjectType())).collect(Collectors.toList());
        //根据项目类型分组
        Map<String, List<StateProjectInfo>> projectTypeMap = typeProjectList.stream().collect(Collectors.groupingBy(StateProjectInfo::getProjectType));
        List<SysDictData> data = dictTypeService.selectDictDataByType("project_type");