yanghb
2025-02-18 1fc203f758ace853f4bfa900c422c2f741d09e79
Merge remote-tracking branch 'origin/master'
27个文件已修改
804 ■■■■ 已修改文件
land-admin/src/main/java/com/zzg/web/controller/state/StateAgreementController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/StateApplyRecordController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/StateAssetController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/StateDataCenterController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/StateProcessController.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/StateProjectCompensateStandardController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/StateProjectController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/StateSettlementController.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/householdQuery/StateHouseholdController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/householdQuery/StateHouseholdOwnerController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-common/src/main/java/com/zzg/common/enums/ApplyStatusEnum.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/domain/bo/CalculateCompensationBO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/domain/bo/SettlementDetailBO.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/domain/vo/AssetMoneyVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/domain/vo/PlacementStreetAreaVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/domain/vo/PlacementStreetMoneyVO.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/domain/vo/ProjectExecutionSumVO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/domain/vo/SettlementSumVO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/domain/vo/TransitionPageVO.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/service/state/impl/StateAgreementServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/service/state/impl/StateApplyRecordServiceImpl.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/service/state/impl/StateAssetServiceImpl.java 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/service/state/impl/StateDataCenterServiceImpl.java 129 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/service/state/impl/StateHouseholdOwnerServiceImpl.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/service/state/impl/StateProcessTemplateServiceImpl.java 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/service/state/impl/StateProjectCompensateStandardServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-system/src/main/java/com/zzg/system/service/state/impl/StateSettlementImpl.java 109 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
land-admin/src/main/java/com/zzg/web/controller/state/StateAgreementController.java
@@ -45,7 +45,7 @@
    private final StateHouseholdService stateHouseholdService;
    private final StateProcessTemplateService stateProcessTemplateService;
    private final StateProjectService stateProjectService;
    // 新增协议
    @PostMapping(UrlConstants.STATE_AGREEMENT_SAVE)
    public AjaxResult<Boolean> createAgreement(@RequestBody StateAgreementSaveBO saveBO) {
        //根据协议类型和房产id进行排重 每个协议只能存在一份
@@ -66,12 +66,12 @@
        }
        return AjaxResult.success(stateAgreementService.saveOrUpdate(saveBO));
    }
    // 模拟转征收
    @PostMapping(UrlConstants.STATE_AGREEMENT_UPDATE)
    public AjaxResult<Boolean> updateAgreement(@RequestBody UpdateAgreementBO bo) {
        return AjaxResult.success(stateAgreementService.updateStateAgreement(bo.getHouseId()));
    }
    // 更新协议
    @PostMapping(UrlConstants.STATE_AGREEMENT_UPDATE_AGREEMENT)
    public AjaxResult<StateAgreementSaveBO> updateAgreement(@RequestBody StateAgreementSaveBO saveBO) {
        if (!CollectionUtils.isEmpty(saveBO.getFileBOList())) {
@@ -82,7 +82,7 @@
        stateAgreementService.saveOrUpdate(saveBO);
        return AjaxResult.success(saveBO);
    }
    // 协议详情 - 编辑 -删除按钮
    @GetMapping(UrlConstants.STATE_AGREEMENT_DEL)
    public AjaxResult<Boolean> deleteAgreement(@RequestParam String agreementId) {
        StateAgreement stateAgreement = stateAgreementService.getById(agreementId);
@@ -105,17 +105,17 @@
        }
        return AjaxResult.success(stateAgreementService.removeById(agreementId));
    }
    // 协议管理 - 页面查询
    @PostMapping(UrlConstants.STATE_AGREEMENT_LIST)
    public AjaxResult<PageInfo<StateAgreementVO>> listStateAgreement(@RequestBody StateAgreementBO request) {
        return AjaxResult.success(stateAgreementService.listDataByCondition(request));
    }
    // 协议详情
    @GetMapping(UrlConstants.STATE_AGREEMENT_DETAIL)
    public AjaxResult<List<AgreementDetailVO>> getAgreementDetail(@RequestParam String stateHouseId) {
        return AjaxResult.success(stateAgreementService.listAgreementDetailByHouseId(stateHouseId));
    }
    //生成协议word
    @GetMapping(UrlConstants.STATE_AGREEMENT_GENERATE)
    public void generateAgreementDetail(
            @RequestParam String stateHouseholdId,
@@ -187,6 +187,7 @@
            Map<String, Object> variable = new HashMap<>();
            variable.put("stateHouseholdId", stateHousehold.getId());
            processStartBO.setVariable(variable);
            //启动工作流
            stateProcessTemplateService.start(processStartBO);
        }
        return AjaxResult.success(stateAgreementService.saveOrUpdateBatch(agreementList));
land-admin/src/main/java/com/zzg/web/controller/state/StateApplyRecordController.java
@@ -3,8 +3,13 @@
import com.github.pagehelper.PageInfo;
import com.zzg.common.constant.state.UrlConstants;
import com.zzg.common.core.domain.AjaxResult;
import com.zzg.common.core.domain.entity.state.StateApplyRecordItem;
import com.zzg.system.domain.bo.*;
import com.zzg.system.domain.bo.ApplyBO;
import com.zzg.system.domain.bo.ApplyOwnerBO;
import com.zzg.system.domain.bo.GetApplyHouseholdOwnerBO;
import com.zzg.system.domain.bo.ImportApplyRecordBO;
import com.zzg.system.domain.bo.SaveRecordAndItemBO;
import com.zzg.system.domain.bo.StateApplyRecordPageBO;
import com.zzg.system.domain.bo.StateApplyRecordPageInfoLevelBO;
import com.zzg.system.domain.vo.ApplyHouseholdOwnerVO;
import com.zzg.system.domain.vo.StateApplyRecordPageInfoLevelVO;
import com.zzg.system.domain.vo.StateApplyRecordVO;
@@ -51,7 +56,7 @@
    public AjaxResult<ApplyHouseholdOwnerVO> getApplyHouseholdOwner(@RequestBody GetApplyHouseholdOwnerBO getApplyHouseholdOwnerBO) {
        return AjaxResult.success(stateApplyRecordService.getApplyHouseholdOwner(getApplyHouseholdOwnerBO));
    }
    //TODO 接口不清楚
    @PostMapping(UrlConstants.STATE_APPLY_RECORD_GET_OWNER_INFO)
    @ApiOperation(value = "住宅临时安置补助费户详情或者 或者 停产停业补助费详情", notes = "停产停业补助费详情")
    public AjaxResult<PageInfo<ApplyOwnerBO>> getApplyHouseholdOwnerInfo(@RequestBody GetApplyHouseholdOwnerBO getApplyHouseholdOwnerBO) {
land-admin/src/main/java/com/zzg/web/controller/state/StateAssetController.java
@@ -14,9 +14,12 @@
import com.zzg.system.service.state.StateAssetService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Objects;
@@ -26,24 +29,25 @@
public class StateAssetController {
    private final StateAssetService assetService;
    // 新增和修改 项目资金
    @PostMapping(UrlConstants.STATE_PROJECT_ASSET_SAVE)
    public AjaxResult<Boolean> saveAsset(@RequestBody StateAssetBO asset) {
        return AjaxResult.success(assetService.saveAsset(asset));
    }
    // 项目删除
    @GetMapping(UrlConstants.STATE_PROJECT_ASSET_DEL)
    public AjaxResult<Boolean> delAsset(@RequestParam String assetId) {
        StateAsset asset = assetService.getById(assetId);
        if (Objects.isNull(asset)) {
            return AjaxResult.error();
        }
        //TODO 审核状态为通过的也可以删除 逻辑删除
        LambdaUpdateWrapper<StateAsset> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(StateAsset::getId, asset.getId());
        updateWrapper.set(StateAsset::getDelFlag, DeleteFlagEnum.DELETED.getKey());
        return AjaxResult.success(assetService.update(updateWrapper));
    }
    // 项目资金展示
    @GetMapping(UrlConstants.STATE_PROJECT_ASSET_LIST)
    public AjaxResult<List<StateAsset>> listAsset(
            @RequestParam String projectId,
@@ -62,12 +66,12 @@
                .setScale(4, RoundingMode.HALF_UP)));
        return AjaxResult.success(list);
    }
    // 项目资金 上方统计数据
    @GetMapping(UrlConstants.STATE_PROJECT_ASSET_SUM)
    public AjaxResult<JSONObject> sumAsset(@RequestParam String projectId) {
        return AjaxResult.success(assetService.sumAsset(projectId));
    }
    // 项目资金点击上方符号查询
    @PostMapping(UrlConstants.STATE_PROJECT_ASSET_DETAIL)
    public AjaxResult<PageInfo<StateAssetDetailVO>> listAssetDetail(@RequestBody AssetDetailBO detailBO) {
        return AjaxResult.success(assetService.listAssetDetail(detailBO));
land-admin/src/main/java/com/zzg/web/controller/state/StateDataCenterController.java
@@ -20,7 +20,7 @@
public class StateDataCenterController {
    private final StateDateCenterService dateCenterService;
    // 计算最上面顶部统计数据
    @GetMapping(UrlConstants.STATE_DATA_CENTER_SUM)
    public AjaxResult<ProjectAnalysisSumVO> dataCenterSum(
            @RequestParam(required = false) String location,
@@ -30,13 +30,13 @@
    ) {
        return AjaxResult.success(dateCenterService.projectSumCount(location, projectStatus, projectStartTime));
    }
    // 项目统计-模拟征收超期项目
    @PostMapping(UrlConstants.STATE_DATA_CENTER_SUM_EXPIRED)
    public AjaxResult<PageInfo<ProjectStatusExpiredVO>> sumExpiredAgreement(@RequestBody(required = false) ProjectStatisticsBO statisticsBO) {
        return AjaxResult.success(dateCenterService.expiredProjectStatus(statisticsBO));
    }
    //安置情况
    // 安置情况 获取数据中心安置情况模块 中间的饼图
    @GetMapping(UrlConstants.STATE_DATA_CENTER_PLACEMENT_STATISTICS)
    public AjaxResult<PlacementStatisticsVO> stateDataCenterPlacementStatistics
    (
@@ -47,7 +47,7 @@
    ) {
        return AjaxResult.success(dateCenterService.placementStatistics(projectStreet, projectStartTime,type));
    }
    // 数据中心-安置情况柱状图
    @GetMapping(UrlConstants.STATE_DATA_CENTER_PLACEMENT_STATISTICS_STREET)
    public AjaxResult<PlacementStreetVO> stateDataCenterPlacementStatisticsStreet(
            @RequestParam(required = false) String projectStreet,
@@ -55,7 +55,7 @@
    ) {
        return AjaxResult.success(dateCenterService.sumPlacementStreet(projectStreet, projectStartTime));
    }
   // 获取数据中心安置情况模块 下方的分页查询
    @PostMapping(UrlConstants.STATE_DATA_CENTER_PLACEMENT_STATISTICS_PAGE)
    public AjaxResult<PageInfo<TransitionPageVO>> stateDataCenterPlacementStatisticsPage(
            @RequestBody PlacementStatisticsBO placementStatisticsBO
@@ -63,7 +63,7 @@
        return AjaxResult.success(dateCenterService.placementStatisticsPage(placementStatisticsBO));
    }
    //项目资金
    //项目资金 数据中心-项目资产统计 左侧数据
    @GetMapping(UrlConstants.STATE_DATA_CENTER_ASSET_SUM_MONEY)
    public AjaxResult<AssetMoneyVO> stateCenterAssetSumMoney(
            @RequestParam(required = false)
@@ -71,7 +71,7 @@
    ) {
        return AjaxResult.success(dateCenterService.sumAssetMoney(projectStartTime));
    }
    // 数据中心-项目资产统计 右侧柱状图
    @GetMapping(UrlConstants.STATE_DATA_CENTER_ASSET_SUM_MONEY_GRAPH)
    public AjaxResult<List<AssetGraphVO>> stateCenterAssetSumGraph(
            @RequestParam(required = false)
land-admin/src/main/java/com/zzg/web/controller/state/StateProcessController.java
@@ -1,6 +1,5 @@
package com.zzg.web.controller.state;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -16,17 +15,31 @@
import com.zzg.common.enums.DeleteFlagEnum;
import com.zzg.common.exception.GlobalException;
import com.zzg.common.utils.SecurityUtils;
import com.zzg.framework.web.domain.server.Sys;
import com.zzg.system.domain.bo.*;
import com.zzg.system.domain.bo.ProcessAgreeBO;
import com.zzg.system.domain.bo.ProcessCreateBO;
import com.zzg.system.domain.bo.ProcessModuleUpdateBO;
import com.zzg.system.domain.bo.ProcessRefuseBO;
import com.zzg.system.domain.bo.ProcessStartBO;
import com.zzg.system.domain.bo.ProcessTaskListBO;
import com.zzg.system.domain.bo.ProcessTemplatePageBO;
import com.zzg.system.domain.bo.ProcessUpdateBO;
import com.zzg.system.domain.vo.ProcessTaskListVO;
import com.zzg.system.service.state.StateProcessModuleService;
import com.zzg.system.service.state.StateProcessTemplateService;
import com.zzg.system.service.system.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
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;
@@ -38,12 +51,13 @@
    private final StateProcessModuleService processModuleService;
    private final ISysUserService sysUserService;
    //应用流程分页列表
    @PostMapping(UrlConstants.STATE_PROCESS_STATE_MODULE_PAGE)
    public AjaxResult<PageInfo<StateProcessModule>> modulePage(@RequestBody PageDomain pageDomain) {
        PageHelper.startPage(pageDomain.getPageNum(), pageDomain.getPageSize());
        LambdaQueryWrapper<StateProcessModule> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByAsc(StateProcessModule::getCategory);
        //查询应用流程列表
        List<StateProcessModule> moduleList = processModuleService.list(queryWrapper);
        if (CollectionUtils.isEmpty(moduleList)) {
            return AjaxResult.success(new PageInfo<>());
@@ -51,6 +65,7 @@
        PageInfo<StateProcessModule> pageInfo = new PageInfo<>(moduleList);
        List<String> updateUserId = pageInfo.getList().stream().map(BaseEntity::getUpdateBy).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(updateUserId)){
            //根据用户id查询用户信息
            List<SysUser> sysUsers = sysUserService.selectUserByIdList(updateUserId);
            Map<String, SysUser> sysUserMap;
            if (!CollectionUtils.isEmpty(sysUsers)){
@@ -58,6 +73,7 @@
            } else {
                sysUserMap = new HashMap<>();
            }
            //遍历列表,设置更新人名称
            pageInfo.getList().forEach(e -> {
                SysUser sysUser = sysUserMap.get(e.getUpdateBy());
                if (Objects.nonNull(sysUser)){
@@ -67,7 +83,7 @@
        }
        return AjaxResult.success(pageInfo);
    }
    //修改应用流程
    @PostMapping(UrlConstants.STATE_PROCESS_STATE_MODULE_UPDATE)
    public AjaxResult<PageInfo<StateProcessModule>> moduleUpdate(@RequestBody ProcessModuleUpdateBO processModuleUpdateBO) {
        StateProcessTemplate stateProcessTemplate = processTemplateService.getById(processModuleUpdateBO.getTemplateId());
land-admin/src/main/java/com/zzg/web/controller/state/StateProjectCompensateStandardController.java
@@ -18,7 +18,7 @@
public class StateProjectCompensateStandardController {
    private final StateProjectCompensateStandardService stateProjectCompensateStandardService;
    //获取补偿标准列表
    @GetMapping(UrlConstants.STATE_PROJECT_COMPENSATE_STANDARD_LIST)
    public AjaxResult<Map<String, List<StateProjectCompensateStandardVO>>> getAll(
            @RequestParam(required = false) String standardName,
@@ -27,22 +27,22 @@
    ) {
        return AjaxResult.success(stateProjectCompensateStandardService.getCompensateStandardMap(standardName, stopFlag, compensateType));
    }
    //创建补偿标准
    @PostMapping(UrlConstants.STATE_PROJECT_COMPENSATE_STANDARD_ADD)
    public AjaxResult<Boolean> create(@RequestBody StateProjectCompensateStandard stateProjectCompensateStandard) {
        return AjaxResult.success(stateProjectCompensateStandardService.createCompensatesStandard(stateProjectCompensateStandard));
    }
    //修改补偿标准
    @PostMapping(UrlConstants.STATE_PROJECT_COMPENSATE_STANDARD_UPDATE)
    public AjaxResult<Boolean> update(@RequestBody StateProjectCompensateStandard stateProjectCompensateStandard) {
        return AjaxResult.success(stateProjectCompensateStandardService.saveOrUpdate(stateProjectCompensateStandard));
    }
    //修改补偿标准名字(同时更新项目中的标准名称)
    @PostMapping(UrlConstants.STATE_PROJECT_COMPENSATE_STANDARD_UPDATE_NAME)
    public AjaxResult<Boolean> updateName(@RequestBody StateProjectCompensateStandard stateProjectCompensateStandard) {
        return AjaxResult.success(stateProjectCompensateStandardService.updateName(stateProjectCompensateStandard));
    }
    //停用补偿标准
    @PostMapping(UrlConstants.STATE_PROJECT_COMPENSATE_STANDARD_STOP)
    public AjaxResult<Boolean> stop(@RequestParam String standardName, @RequestParam Integer compensateType) {
        LambdaUpdateWrapper<StateProjectCompensateStandard> wrapper = new LambdaUpdateWrapper<>();
@@ -51,7 +51,7 @@
                .set(StateProjectCompensateStandard::getStopFlag, 0);
        return AjaxResult.success(stateProjectCompensateStandardService.update(wrapper));
    }
    //启用补偿标准
    @PostMapping(UrlConstants.STATE_PROJECT_COMPENSATE_STANDARD_START)
    public AjaxResult<Boolean> start(@RequestParam String standardName, @RequestParam Integer compensateType) {
        LambdaUpdateWrapper<StateProjectCompensateStandard> wrapper = new LambdaUpdateWrapper<>();
@@ -60,7 +60,7 @@
                .set(StateProjectCompensateStandard::getStopFlag, 1);
        return AjaxResult.success(stateProjectCompensateStandardService.update(wrapper));
    }
    //导入补偿标准
    @PostMapping(UrlConstants.STATE_PROJECT_COMPENSATE_STANDARD_IMPORT)
    public AjaxResult<Boolean> importExcelFile(@RequestParam("file") MultipartFile file) {
        return AjaxResult.success(stateProjectCompensateStandardService.importByExcel(file));
land-admin/src/main/java/com/zzg/web/controller/state/StateProjectController.java
@@ -70,7 +70,7 @@
    public AjaxResult<StateProjectBO> getById(@PathVariable String id) {
        return AjaxResult.success(stateProjectService.getProjectInfoById(id));
    }
    //获取当前项目的所有街道
    @GetMapping(UrlConstants.STATE_PROJECT_GET_STREET_BY_ID)
    public AjaxResult<String[]> getProjectBelongingStreetTownById(@PathVariable String id) {
        return AjaxResult.success(stateProjectService.getProjectBelongingStreetTownById(id));
land-admin/src/main/java/com/zzg/web/controller/state/StateSettlementController.java
@@ -14,9 +14,19 @@
import com.zzg.common.utils.file.FileUtils;
import com.zzg.system.convert.StateProjectConvert;
import com.zzg.system.convert.easyExcel.MultiDropdownWriteHandler;
import com.zzg.system.domain.bo.*;
import com.zzg.system.domain.vo.*;
import com.zzg.system.service.state.StateHouseholdService;
import com.zzg.system.domain.bo.ImportSettlementBO;
import com.zzg.system.domain.bo.SettlementBO;
import com.zzg.system.domain.bo.SettlementDetailBO;
import com.zzg.system.domain.bo.StateExecutionBO;
import com.zzg.system.domain.bo.WorkFlowSubmitBO;
import com.zzg.system.domain.vo.HouseholdVO;
import com.zzg.system.domain.vo.NotResettlementHouseholdExportVO;
import com.zzg.system.domain.vo.ProjectExecutionSumVO;
import com.zzg.system.domain.vo.ResettlementHouseholdExportVO;
import com.zzg.system.domain.vo.SettlementDetailPageVO;
import com.zzg.system.domain.vo.SettlementSumVO;
import com.zzg.system.domain.vo.StateExecutionDetailExportVO;
import com.zzg.system.domain.vo.StateExecutionDetailVO;
import com.zzg.system.service.state.StateSettlementService;
import com.zzg.system.service.system.ISysDeptService;
import com.zzg.web.core.enums.TemplateFileTypeEnum;
@@ -25,7 +35,11 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -77,12 +91,12 @@
    public AjaxResult<SettlementSumVO> sumSettled(@RequestParam String projectId) {
        return AjaxResult.success(settlementService.sumSettleData(projectId));
    }
    // 安置情况页面 数据
    @PostMapping(UrlConstants.STATE_SETTLEMENT_LIST)
    public AjaxResult<PageInfo<HouseholdVO>> listSettlement(@RequestBody SettlementBO settlementBO) {
        return AjaxResult.success(settlementService.listSettleData(settlementBO));
    }
    // 安置情况页面 导出
    @PostMapping(UrlConstants.STATE_SETTLEMENT_EXPORT)
    public AjaxResult<Void> exportSettlement(@RequestBody SettlementBO settlementBO, HttpServletResponse response) {
        try {
@@ -159,6 +173,7 @@
        }
    }
   // 新增安置情况模板
    @GetMapping(UrlConstants.STATE_SETTLEMENT_IMPORT_TEMPLATE)
    public void importStateHouseholdTemplate(@RequestParam Integer compensationType, HttpServletResponse response) {
@@ -189,7 +204,7 @@
        }
    }
    // 新增安置详情页面 导入
    @PostMapping(UrlConstants.STATE_SETTLEMENT_IMPORT)
    public AjaxResult<Void> importSettlement(ImportSettlementBO importSettlementBO) throws IOException {
        settlementService.stateSettlementImport(importSettlementBO);
@@ -197,6 +212,7 @@
    }
   // 实施明细导出
    @PostMapping(UrlConstants.STATE_SETTLEMENT_LIST_EXPORT)
    public AjaxResult<Void> exportSettlementDetail(@RequestBody(required = false) StateExecutionBO executionBO, HttpServletResponse response) {
        try {
@@ -226,7 +242,7 @@
    public AjaxResult<Map<String, Map<Integer, ProjectExecutionSumVO>>> listProjectExecution(@RequestBody List<String> projectIdList) {
        return AjaxResult.success(settlementService.listProjectExecutionByProjectId(projectIdList, null));
    }
    // 新增安置情况 - 提交审核
    @PostMapping(UrlConstants.STATE_SETTLEMENT_EXECUTION_WORKFLOW_SUBMIT)
    public AjaxResult<Boolean> submitSettle(@RequestBody WorkFlowSubmitBO workFlowSubmitBO) {
        if (Objects.isNull(workFlowSubmitBO.getSettlementIdList()) || workFlowSubmitBO.getSettlementIdList().isEmpty()) {
@@ -247,6 +263,7 @@
    }
    /**
     * 新增安置情况 - 安置批次名字
     * @param projectId
     * @param componsationType
     * @return
@@ -256,6 +273,11 @@
        return AjaxResult.success(settlementService.generateBatchName(projectId, componsationType));
    }
    /**
     * 当前项目安置批次名字列表
     * @param projectId
     * @return
     */
    @GetMapping(UrlConstants.STATE_SETTLEMENT_BATCH_NAME_LIST)
    public AjaxResult<List<String>> listBatchName(@RequestParam String projectId) {
        return AjaxResult.success(settlementService.listBatchName(projectId));
land-admin/src/main/java/com/zzg/web/controller/state/householdQuery/StateHouseholdController.java
@@ -11,7 +11,6 @@
import com.zzg.common.core.domain.AjaxResult;
import com.zzg.common.core.domain.entity.state.StateHousehold;
import com.zzg.common.enums.HouseMoveEnum;
import com.zzg.common.enums.HouseSearchStatusEnum;
import com.zzg.common.enums.HouseUsingTypeEnum;
import com.zzg.common.enums.StateHouseholdStageEnums;
import com.zzg.common.exception.GlobalException;
@@ -21,17 +20,30 @@
import com.zzg.system.domain.bo.HouseQueryBO;
import com.zzg.system.domain.bo.HouseholdBO;
import com.zzg.system.domain.bo.StateHouseholdBO;
import com.zzg.system.domain.vo.*;
import com.zzg.system.domain.vo.HouseQueryVO;
import com.zzg.system.domain.vo.HouseUsingTypeVO;
import com.zzg.system.domain.vo.HouseholdDetailVO;
import com.zzg.system.domain.vo.HouseholdVO;
import com.zzg.system.domain.vo.StateHouseholdExportVO;
import com.zzg.system.domain.vo.StateHouseholdVO;
import com.zzg.system.service.state.StateHouseholdService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
@RestController
@RequiredArgsConstructor
@@ -44,18 +56,18 @@
    public AjaxResult<Page<StateHousehold>> page(@RequestParam int currentPage, @RequestParam int pageSize) {
        return AjaxResult.success(stateHouseholdService.page(new Page<>(currentPage, pageSize)));
    }
    //入户调查 - 入户调查列表数据查询页面
    @PostMapping(UrlConstants.STATE_HOUSEHOLD_LIST_BY_CONDITION)
    public AjaxResult<HouseholdDetailVO> list(@RequestBody(required = false) HouseholdBO householdBOBody) {
        return AjaxResult.success(stateHouseholdService.queryList(householdBOBody));
    }
    //国有入户调查
    @PostMapping(UrlConstants.STATE_HOUSEHOLD_QUERY)
    public AjaxResult<PageInfo<HouseQueryVO>> houseQuery(@RequestBody HouseQueryBO houseQueryBO) {
        return AjaxResult.success(stateHouseholdService.queryData(houseQueryBO));
    }
    //入户调查列表页面-导出
    @PostMapping(UrlConstants.STATE_HOUSEHOLD_LIST_EXPORT)
    public AjaxResult<HouseholdDetailVO> export(@RequestBody(required = false) HouseholdBO householdBOBody, HttpServletResponse response) throws IOException {
        householdBOBody.setPageNum(1);
@@ -91,7 +103,7 @@
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        return AjaxResult.success();
    }
    //入户调查页面-导入
    @PostMapping(UrlConstants.STATE_HOUSEHOLD_LIST_IMPORT)
    public AjaxResult<Boolean> importStateHousehold(@RequestParam("file") MultipartFile file, String projectId) {
@@ -126,13 +138,14 @@
    }
    // 删除项目
    // 删除房屋
    @GetMapping(UrlConstants.STATE_HOUSEHOLD_DELETE)
    public AjaxResult<Boolean> delete(@RequestParam String id) {
        return AjaxResult.success(stateHouseholdService.removeById(id));
    }
    //安置情况数据统计
    //安置情况数据统计 未使用
    @Deprecated
    @GetMapping(UrlConstants.STATE_HOUSEHOLD_SUM)
    public AjaxResult<Void> sumHouseholdData(@RequestParam String stateProjectId) {
        stateHouseholdService.sumHouseholdData(stateProjectId);
@@ -146,12 +159,12 @@
        return AjaxResult.success();
    }
    //项目资金情况 街道标签 - 查询该项目所有的街道
    @GetMapping(UrlConstants.STATE_HOUSEHOLD_STREET_LIST)
    public AjaxResult<List<JSONObject>> listHouseStreet(@RequestParam String projectId) {
        return AjaxResult.success(stateHouseholdService.listStreet(projectId));
    }
    //入户调查 - 点击完成提交
    @GetMapping(UrlConstants.STATE_HOUSEHOLD_COMPLETE_SEARCH)
    public AjaxResult<Boolean> completeSearch(@RequestParam String houseId,
                                              @RequestParam Integer searchStatus) {
@@ -183,7 +196,7 @@
        }
        return AjaxResult.success(stateHouseholdService.saveOrUpdate(stateHousehold));
    }
    //撤回按钮
    @GetMapping(UrlConstants.STATE_HOUSEHOLD_MOBILE_BACK)
    public AjaxResult<Boolean> mobileBack(@RequestParam String houseId) {
        return AjaxResult.success(stateHouseholdService.mobileBack(houseId));
land-admin/src/main/java/com/zzg/web/controller/state/householdQuery/StateHouseholdOwnerController.java
@@ -28,13 +28,13 @@
    private final StateHouseholdOwnerService householdOwnerService;
    //查询权利人
    @GetMapping(UrlConstants.STATE_HOUSEHOLD_OWNER_LIST_BY_SATE_HOUSEHOLD_ID)
    public AjaxResult<Object> listPersons(@RequestParam String stateHouseholdId) {
        JSONObject jsonObject = householdOwnerService.getPersonsInfo(stateHouseholdId);
        return AjaxResult.success(jsonObject);
    }
    //新增权利人
    @PostMapping(UrlConstants.STATE_HOUSEHOLD_OWNER_SAVE)
    public AjaxResult<Boolean> savePerson(@RequestBody StateHouseholdOwnerBO person) {
        List<StateHouseholdOwner> ownerBOList = person.getOwnerBOList();
@@ -51,7 +51,7 @@
        );
        return AjaxResult.success(householdOwnerService.saveOrUpdateBatch(ownerBOList));
    }
    //修改权利人信息
    @PostMapping(UrlConstants.STATE_HOUSEHOLD_OWNER_UPDATE)
    public AjaxResult<Boolean> updatePerson(@RequestBody StateHouseholdOwner stateHouseholdOwner) {
        //查询当前项目下所有的
@@ -74,12 +74,12 @@
        householdOwnerService.saveOrUpdate(stateHouseholdOwner);
        return AjaxResult.success();
    }
    //删除权利人
    @GetMapping(UrlConstants.STATE_HOUSEHOLD_OWNER_DELETE)
    public AjaxResult<Boolean> deletePerson(@RequestParam String stateHouseholdOwnerId) {
        return AjaxResult.success(householdOwnerService.removeById(stateHouseholdOwnerId));
    }
    //计算入户补偿的预估数据
    @PostMapping(UrlConstants.STATE_HOUSEHOLD_OWNER_CALCULATE_COMPENSATION)
    @ApiOperation(value = "计算入户补偿的预估数据", notes = "计算入户补偿的预估数据")
    public AjaxResult<CalculateCompensationVO> calculateCompensation(@RequestBody CalculateCompensationBO calculateCompensationBO) {
land-common/src/main/java/com/zzg/common/enums/ApplyStatusEnum.java
@@ -5,7 +5,7 @@
@Getter
@AllArgsConstructor
public enum ApplyStatusEnum {
    public enum ApplyStatusEnum {
    PENDING_RECEIPT(1, "待接收"),
    RECEIVED(2, "已接收"),
    RETURNED(3, "被退回"),
land-system/src/main/java/com/zzg/system/domain/bo/CalculateCompensationBO.java
@@ -49,6 +49,6 @@
    @ApiModelProperty(value = "其他补偿信息")
    private OtherCompensationBO otherCompensationBO;
    //表示是否点击重新计算
    private Boolean isFirst;
}
land-system/src/main/java/com/zzg/system/domain/bo/SettlementDetailBO.java
@@ -10,15 +10,15 @@
    private String id;
    private String taskId;
    //项目街道
    //项目街道 置换前街道
    private String beforeExchangeStreet;
    //置换后街道
    private String afterExchangeStreet;
    //置换前坐落
    private String beforeExchangeLocation;
    //置换后坐落
    private String afterExchangeLocation;
    //权利人名字
    private String ownerName;
    private Integer compensationType;
land-system/src/main/java/com/zzg/system/domain/vo/AssetMoneyVO.java
@@ -8,12 +8,12 @@
//项目资产中左侧金额统计
public class AssetMoneyVO {
    //预算金额
    //预算金额(万元)
    private BigDecimal virtualMoney;
    //合同金额
    //合同金额(万元)
    private BigDecimal agreementMoney;
    //结算金额
    //结算金额(万元)
    private BigDecimal settlementMoney;
}
land-system/src/main/java/com/zzg/system/domain/vo/PlacementStreetAreaVO.java
@@ -2,16 +2,14 @@
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PlacementStreetAreaVO {
    //街道名字
    private String streetName;
    //置换前面积(安置前面积)
    private Double beforeReplaceArea;
    //置换后面积
    private Double afterReplaceArea;
    //面积差
    private Double areaDelta;
}
land-system/src/main/java/com/zzg/system/domain/vo/PlacementStreetMoneyVO.java
@@ -2,16 +2,14 @@
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PlacementStreetMoneyVO {
    //街道名字
    private String streetName;
    //置换前金额
    private Double beforeReplaceMoney;
    //置换后金额
    private Double afterReplaceMoney;
    //金额差
    private Double moneyDelta;
}
land-system/src/main/java/com/zzg/system/domain/vo/ProjectExecutionSumVO.java
@@ -34,13 +34,13 @@
    //未签字比例
    private BigDecimal notSignedRate;
    //未调查人数
    private Long notSearchedPersons;
    //调查人数
    private Long searchedPersons;
    //调查比例
    private BigDecimal searchProcessRate;
    //虚拟签字比例
    private BigDecimal signedProcessRate;
}
land-system/src/main/java/com/zzg/system/domain/vo/SettlementSumVO.java
@@ -4,17 +4,17 @@
@Data
public class SettlementSumVO {
    //安置金额
    private Double settlementMoney;
    //安置面积
    private Double settlementArea;
    //安置人数
    private Integer settlementPersons;
    //未安置人数
    private Integer unsettledPersons;
    //货币补偿人数
    private Long moneyCompensationPersons;
    //产权置换人数
    private Long goodsCompensationPersons;
}
land-system/src/main/java/com/zzg/system/domain/vo/TransitionPageVO.java
@@ -7,12 +7,17 @@
@Data
public class TransitionPageVO {
    //排名
    private Long index;
    //镇/街
    private String projectStreet;
    //项目名
    private String projectName;
    //权利人
    private String ownerName;
    //签约时间
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date signAt;
    //过渡时长(天数)
    private Long transitionDay;
}
land-system/src/main/java/com/zzg/system/service/state/impl/StateAgreementServiceImpl.java
@@ -153,6 +153,11 @@
        return stateAgreementVOPageInfo;
    }
    /**
     * 协议详情
     * @param householdId
     * @return
     */
    @Override
    public List<AgreementDetailVO> listAgreementDetailByHouseId(String householdId) {
@@ -341,6 +346,11 @@
        return dataMap;
    }
    /**
     * 模拟加征收
     * @param houseId
     * @return
     */
    @Override
    @Transactional
    public Boolean updateStateAgreement(List<String> houseId) {
land-system/src/main/java/com/zzg/system/service/state/impl/StateApplyRecordServiceImpl.java
@@ -55,7 +55,11 @@
    @Resource
    private StateApplyRecordService stateApplyRecordService;
    /**
     * 分页查询
     * @param stateApplyRecordPageBO
     * @return
     */
    @Override
    public PageInfo<StateApplyRecordVO> pageInfo(StateApplyRecordPageBO stateApplyRecordPageBO) {
        PageUtils.startPage();
@@ -86,6 +90,11 @@
        }
    }
    /**
     * 保存请账
     * @param recordAndItemBO
     * @return
     */
    @Override
    @Transactional
    public boolean saveStateApplyRecordAndItem(SaveRecordAndItemBO recordAndItemBO) {
@@ -159,6 +168,7 @@
        variable.put("projectId", stateApplyRecord.getProjectId());
        variable.put("applyType", stateApplyRecord.getApplyType());
        processStartBO.setVariable(variable);
        //开启工作流程
        stateProcessTemplateService.start(processStartBO);
        //保存请款子表
@@ -166,6 +176,11 @@
        return stateApplyRecordItemService.saveOrUpdateBatch(newRecordItem);
    }
    /**
     * 通过项目id查询权利人
     * @param getApplyHouseholdOwnerBO
     * @return
     */
    @Override
    public ApplyHouseholdOwnerVO getApplyHouseholdOwner(GetApplyHouseholdOwnerBO getApplyHouseholdOwnerBO) {
        String projectId = getApplyHouseholdOwnerBO.getProjectId();
@@ -174,6 +189,7 @@
        LambdaQueryWrapper<StateProject> lqwStateProject = new LambdaQueryWrapper<>();
        lqwStateProject.eq(StateProject::getId, projectId);
        //查询项目
        StateProject one = stateProjectService.getOne(lqwStateProject);
        if (Objects.isNull(one)) {
            return new ApplyHouseholdOwnerVO();
@@ -183,6 +199,7 @@
        if (org.apache.commons.lang3.StringUtils.isNotBlank(street)) {
            lqwHousehold.like(StateHousehold::getStreet, street);
        }
        //查询房产
        List<StateHousehold> householdList = stateHouseholdService.list(lqwHousehold);
        if (CollectionUtils.isEmpty(householdList)) {
            return new ApplyHouseholdOwnerVO();
@@ -195,12 +212,13 @@
        if (org.apache.commons.lang3.StringUtils.isNotBlank(ownerName)) {
            lqwHouseholdOwner.like(StateHouseholdOwner::getOwnerName, ownerName);
        }
        //查询权利人
        List<StateHouseholdOwner> ownerList = stateHouseholdOwnerService.list(lqwHouseholdOwner);
        if (CollectionUtils.isEmpty(ownerList)) {
            return new ApplyHouseholdOwnerVO();
        }
        //查询项目关联的补偿标准
        StateProjectCompensation compensation = stateProjectCompensationService.getById(one.getId());
        Map<String, StateHousehold> stateHouseholdMap = householdList.stream().collect(Collectors.toMap(StateHousehold::getId, Function.identity()));
@@ -221,6 +239,7 @@
            lqwCompensateStandard.eq(StateProjectCompensateStandard::getStandardName, compensation.getPolicySubsidy())
                    .eq(StateProjectCompensateStandard::getCategory, status)
                    .eq(StateProjectCompensateStandard::getCompensateType, CompensateTypeEnum.POLICY_SUBSIDY_FEE.getCode());
            //查询项目补偿标准
            List<StateProjectCompensateStandard> list = stateProjectCompensateStandardService.list(lqwCompensateStandard);
            if (!CollectionUtils.isEmpty(list)) {
                StateProjectCompensateStandard stateProjectCompensateStandard = list.stream().findFirst().get();
@@ -255,6 +274,11 @@
        return applyHouseholdOwnerVO;
    }
    /**
     * 分页查询一级台账
     * @param stateApplyRecordPageBO
     * @return
     */
    @Override
    public StateApplyRecordPageInfoLevelVO pageInfoLevel(StateApplyRecordPageInfoLevelBO stateApplyRecordPageBO) {
        List<StateApplyRecordVO> allStateApplyRecordVOList = this.getBaseMapper().selectApplyRecordWithProject(stateApplyRecordPageBO);
@@ -335,9 +359,15 @@
        ));
    }
    /**
     * 住宅临时安置补助费户详情或者 或者 停产停业补助费详情
     * @param getApplyHouseholdOwnerBO
     * @return
     */
    @Override
    public PageInfo<ApplyOwnerBO> getApplyHouseholdOwnerInfo(GetApplyHouseholdOwnerBO getApplyHouseholdOwnerBO) {
        PageUtils.startPage();
        //TODO 查询请款记录 由于之前产品设计的问题是以权利人作为维度的即一个请款对应是 一个权利人, 后期又修改成了 以房产为 维度 即一个请款对应一个房产 导致之前数据库设计有问题
        List<ApplyOwnerBO> applyHouseholdOwnerVOS = this.getBaseMapper().selectApplyRecordWithOwnerDistinctPage(getApplyHouseholdOwnerBO);
        if (CollectionUtils.isEmpty(applyHouseholdOwnerVOS)) {
@@ -345,7 +375,7 @@
        }
        getApplyHouseholdOwnerBO.setStateHouseIdList(applyHouseholdOwnerVOS.stream().map(ApplyOwnerBO::getStateHouseholdId).collect(Collectors.toList()));
        PageInfo<ApplyOwnerBO> applyOwnerBOPageInfo = new PageInfo<>(applyHouseholdOwnerVOS);
        //TODO
        List<ApplyOwnerBO> applyOwnerBOS = this.getBaseMapper().selectApplyRecordWithOwnerPage(getApplyHouseholdOwnerBO);
        applyOwnerBOPageInfo.setList(applyOwnerBOS);
        List<String> projectIdList = applyOwnerBOPageInfo.getList().stream().map(ApplyOwnerBO::getProjectId).collect(Collectors.toList());
@@ -434,6 +464,11 @@
        return applyOwnerBOPageInfo;
    }
    /**
     * 任务中心-请帐详情
     * @param getApplyHouseholdOwnerBO
     * @return
     */
    @Override
    public ApplyBO stateApplyRecordDetail(GetApplyHouseholdOwnerBO getApplyHouseholdOwnerBO) {
        StateApplyRecord stateApplyRecord = this.getById(getApplyHouseholdOwnerBO.getApplyId());
@@ -448,6 +483,11 @@
        return applyBO;
    }
    /**
     * 导入权利人
     * @param importApplyRecordBO
     * @return
     */
    @Override
    public List<ApplyOwnerBO> importOwnerByFile(ImportApplyRecordBO importApplyRecordBO) {
        List<ApplyOwnerVO> dataList;
@@ -475,7 +515,7 @@
        if (Objects.isNull(one)) {
            throw new GlobalException("未查询到相应项目");
        }
        //查询项目下的所有房产
        LambdaQueryWrapper<StateHousehold> lqwHousehold = new LambdaQueryWrapper<>();
        lqwHousehold.eq(StateHousehold::getStateProjectId, one.getId());
@@ -505,7 +545,7 @@
            throw new GlobalException("未查询到相应房产权利人");
        }
        //TODO 废弃代码开始
        StateApplyRecord stateApplyRecord;
        if (org.apache.commons.lang3.StringUtils.isBlank(importApplyRecordBO.getApplyId())) {
            stateApplyRecord = new StateApplyRecord();
@@ -530,21 +570,25 @@
            stateApplyRecord = new StateApplyRecord();
            stateApplyRecord.setId(importApplyRecordBO.getApplyId());
        }
        //废弃代码结束
        List<ApplyOwnerBO> itemList = new ArrayList<>();
        ApplyOwnerBO applyOwnerBO;
        StateApplyRecordItem item;
        List<StateHousehold> stateHouseholds = householdList.stream().filter(e -> dataList.stream().map(ApplyOwnerVO::getRealEstateCertificateNumber).collect(Collectors.toList()).contains(e.getRealEstateCertificateNumber())).collect(Collectors.toList());
        //根据导入数据的不动产权证号筛选出同项目下的房产数据
        List<StateHousehold> stateHouseholds = householdList.stream().filter(e -> dataList.stream().map(ApplyOwnerVO::getRealEstateCertificateNumber)
                .collect(Collectors.toList()).contains(e.getRealEstateCertificateNumber())).collect(Collectors.toList());
        ownerList.sort(Comparator.comparing(BaseEntity::getCreateTime));
        //权利人根据房产id分组
        Map<String, List<StateHouseholdOwner>> ownerMap = ownerList.stream().collect(Collectors.groupingBy(StateHouseholdOwner::getStateHouseholdId));
        //导入数据根据不同不动产权证号分组
        Map<String, List<ApplyOwnerVO>> importMap = dataList.stream().collect(Collectors.groupingBy(ApplyOwnerVO::getRealEstateCertificateNumber));
        DecimalFormat decimalFormat = new DecimalFormat("##0.####");
        for (StateHousehold stateHousehold : stateHouseholds) {
            List<StateHouseholdOwner> owners = ownerMap.get(stateHousehold.getId());
            if (!CollectionUtils.isEmpty(owners)) {
                applyOwnerBO = StateProjectConvert.INSTANCE.toApplyOwnerBO(owners.get(0));
                applyOwnerBO.setOwnerName(owners.stream().map(StateHouseholdOwner::getOwnerName).collect(Collectors.joining("|")));
                applyOwnerBO.setStateHouseholdOwnerId(owners.stream().map(StateHouseholdOwner::getId).collect(Collectors.joining("|")));
                applyOwnerBO = StateProjectConvert.INSTANCE.toApplyOwnerBO(owners.get(0));//TODO 对象拷贝时new 了对象的
                applyOwnerBO.setOwnerName(owners.stream().map(StateHouseholdOwner::getOwnerName).collect(Collectors.joining("|"))); // 多个权利人用|分割
                applyOwnerBO.setStateHouseholdOwnerId(owners.stream().map(StateHouseholdOwner::getId).collect(Collectors.joining("|"))); //多个权利人id以|分割
                applyOwnerBO.setStreet(stateHousehold.getStreet());
                applyOwnerBO.setRealEstateCertificateNumber(stateHousehold.getRealEstateCertificateNumber());
land-system/src/main/java/com/zzg/system/service/state/impl/StateAssetServiceImpl.java
@@ -8,20 +8,33 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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.StateProject;
import com.zzg.common.core.domain.entity.state.StateSettlement;
import com.zzg.common.core.domain.entity.system.SysDept;
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.ProcessCategoryEnum;
import com.zzg.common.enums.StateProjectStatusEnum;
import com.zzg.common.enums.SubmitStatusEnum;
import com.zzg.common.exception.GlobalException;
import com.zzg.common.utils.PageUtils;
import com.zzg.common.utils.SecurityUtils;
import com.zzg.common.utils.StringUtils;
import com.zzg.system.domain.bo.AssetDetailBO;
import com.zzg.system.domain.bo.FileBO;
import com.zzg.system.domain.bo.ProcessStartBO;
import com.zzg.system.domain.bo.StateAssetBO;
import com.zzg.system.domain.vo.StateAssetDetailVO;
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.StateAssetService;
import com.zzg.system.service.state.StateHouseholdService;
import com.zzg.system.service.state.StateProcessTemplateService;
import com.zzg.system.service.state.StateProjectService;
import com.zzg.system.service.state.StateSettlementService;
import com.zzg.system.service.system.ISysDeptService;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
@@ -31,7 +44,12 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
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;
@@ -57,12 +75,19 @@
    @Resource
    private final ISysDeptService deptService;
    /**
     * 项目资金点击上方符号查询
     * @param assetDetailBO
     * @return
     */
    @Override
    public PageInfo<StateAssetDetailVO> listAssetDetail(AssetDetailBO assetDetailBO) {
        //查询项目信息
        StateProject stateProject = stateProjectService.getById(assetDetailBO.getProjectId());
        Integer currentStatus = stateProject.getStatus();
        PageUtils.startPage();
        //查询项目预算资金详情
        List<StateAssetDetailVO> assetDetailVOList = assetMapper.listAssetDetail(assetDetailBO, currentStatus);
        if (CollectionUtils.isEmpty(assetDetailVOList)) {
            return new PageInfo<>();
@@ -78,7 +103,7 @@
            StateAssetDetailVO assetDetailVO = stateAssetDetailVOList.get(0);
            result.add(assetDetailVO);
        }
        //国有项目协议查询条件
        LambdaQueryWrapper<StateAgreement> stateAgreementLambdaQueryWrapper = new LambdaQueryWrapper<>();
        stateAgreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, result.stream().map(StateAssetDetailVO::getHouseId).collect(Collectors.toList()));
        //根据项目状态查询协议 这一个项目状态只有一种 随便取出来即可
@@ -92,6 +117,7 @@
            }
        }
        stateAgreementLambdaQueryWrapper.isNotNull(StateAgreement::getAgreementNumber);
        //查询协议列表
        List<StateAgreement> stateAgreements = agreementService.list(stateAgreementLambdaQueryWrapper);
        if (CollectionUtils.isEmpty(stateAgreements)) {
            stateAssetDetailVOPageInfo.setList(result);
@@ -111,17 +137,22 @@
        LambdaQueryWrapper<StateSettlement> stateSettlementLambdaQueryWrapper = new LambdaQueryWrapper<>();
        stateSettlementLambdaQueryWrapper.in(StateSettlement::getStateHouseholdId,
                result.stream().map(StateAssetDetailVO::getHouseId).collect(Collectors.toList()));
        //查询已结算金额
        List<StateSettlement> stateSettlementList = settlementService.list(stateSettlementLambdaQueryWrapper);
        Map<String, StateSettlement> stateSettlementMap = stateSettlementList.stream()
                .collect(Collectors.toMap(StateSettlement::getStateHouseholdId, Function.identity()));
        //赋值结算金额
        result.forEach(data -> {
            StateSettlement stateSettlement = stateSettlementMap.get(data.getHouseId());
            if (Objects.isNull(stateSettlement)) {
                return;
            }
            //TODO 置换后金额含义
            // 结算金额
            Double dbSettleMoney = Objects.nonNull(stateSettlement.getSettlementMoney()) ? stateSettlement.getSettlementMoney() : 0;
            //置换后金额
            Double dbExchangeMoney = Objects.nonNull(stateSettlement.getExchangeMoney()) ? stateSettlement.getExchangeMoney() : 0;
            BigDecimal settleMoney = BigDecimal.valueOf(dbSettleMoney + dbExchangeMoney).setScale(4, RoundingMode.HALF_UP);
            data.setSettleMoney(settleMoney);
@@ -135,12 +166,20 @@
        return stateAssetDetailVOPageInfo;
    }
    /**
     * 项目资金 上方统计数据
     * @param projectId
     * @return
     */
    @Override
    public JSONObject sumAsset(String projectId) {
        JSONObject jsonObject = new JSONObject();
        //查询项目信息
        StateProject stateProject = stateProjectService.getProjectById(projectId);
        // TODO 未将逻辑删除的字段过滤
        LambdaQueryWrapper<StateAsset> stateAssetQueryWrapper = new LambdaQueryWrapper<>();
        stateAssetQueryWrapper.eq(StateAsset::getStateProjectId, projectId);
        //查询项目预算资金
        List<StateAsset> stateAssets = this.list(stateAssetQueryWrapper);
        //预算金额
@@ -155,6 +194,7 @@
        stateHouseholdLambdaQueryWrapper.eq(StateHousehold::getStateProjectId, projectId);
        stateHouseholdLambdaQueryWrapper.eq(StateHousehold::getDelFlag, DeleteFlagEnum.NOT_DELETED.getKey());
        stateHouseholdLambdaQueryWrapper.isNotNull(StateHousehold::getAgreementStatus);
        //根据项目id查询房产数据
        List<StateHousehold> stateHouseholds = stateHouseholdService.list(stateHouseholdLambdaQueryWrapper);
        if (CollectionUtils.isEmpty(stateHouseholds)) {
@@ -178,6 +218,7 @@
        stateAgreementLambdaQueryWrapper.isNotNull(StateAgreement::getAgreementNumber);
        stateAgreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, houseIds);
        //查询协议信息
        List<StateAgreement> stateAgreements = agreementService.list(stateAgreementLambdaQueryWrapper);
        if (CollectionUtils.isNotEmpty(stateAgreements)) {
            Integer projectStatus = stateProject.getStatus();
@@ -189,7 +230,7 @@
                stateAgreementLambdaQueryWrapper.eq(StateAgreement::getAgreementFileType, AgreementTypeEnum.STATE_AGREEMENT.getValue());
                stateAgreements = stateAgreements.stream().filter(e -> e.getAgreementFileType().equals(AgreementTypeEnum.STATE_AGREEMENT.getValue())).collect(Collectors.toList());
            }
            // 协议金额
            double agreementMoney = stateAgreements.stream()
                    .filter(Objects::nonNull)
                    .filter(data -> Objects.nonNull(data.getMoney())).mapToDouble(StateAgreement::getMoney).sum();
@@ -199,14 +240,15 @@
            jsonObject.put("agreementMoney", agreementMoneyBig);
        }
        //将该项目下面的房产数据类型为产权置换的房产id筛选出来
        List<String> componseTypeHouseIds = stateHouseholds.stream().filter(data -> ObjectUtil.isNotEmpty(data.getCompensationType())
                && data.getCompensationType().equals(CompensationCategoryEnum.PROPERTY_SWAP_2.getCode())).map(StateHousehold::getId).collect(Collectors.toList());
        //产权置换下的合金额
        BigDecimal roundedAgreementMoney = BigDecimal.ZERO;
        if (ObjectUtil.isNotEmpty(componseTypeHouseIds)) {
            componseTypeAgreementLambdaQueryWrapper.isNotNull(StateAgreement::getAgreementNumber);
            componseTypeAgreementLambdaQueryWrapper.in(StateAgreement::getStateHouseholdId, componseTypeHouseIds);
            //根据房产id查询协议列表
            List<StateAgreement> stateAgreementsInDb = agreementService.list(componseTypeAgreementLambdaQueryWrapper);
            if (CollectionUtils.isNotEmpty(stateAgreementsInDb)) {
                double agreementMoney = stateAgreementsInDb.stream()
@@ -249,10 +291,16 @@
        return jsonObject;
    }
    /**
     * 新增和修改 项目资金
     * @param asset
     * @return
     */
    @Transactional
    @Override
    public boolean saveAsset(StateAssetBO asset) {
        String deptId = SecurityUtils.getLoginUser().getUser().getDept().getDeptId();
        //根据当前登录人部门id查询部门信息
        Map<String, SysDept> stringSysDeptMap = deptService.selectMapDeptById(Collections.singletonList(deptId));
        asset.setSubmittedBy(stringSysDeptMap.values().stream().map(SysDept::getDeptName).collect(Collectors.joining(",")));
@@ -288,6 +336,7 @@
        variable.put("projectId", asset.getStateProjectId());
        variable.put("street", asset.getStreet());
        processStartBO.setVariable(variable);
        //启动工作流
        stateProcessTemplateService.start(processStartBO);
        return result;
    }
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");
land-system/src/main/java/com/zzg/system/service/state/impl/StateHouseholdOwnerServiceImpl.java
@@ -2,7 +2,6 @@
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageInfo;
@@ -11,12 +10,21 @@
import com.zzg.common.core.domain.entity.state.StateProjectCompensateStandard;
import com.zzg.common.core.domain.entity.state.StateProjectCompensation;
import com.zzg.common.core.domain.entity.system.SysDictData;
import com.zzg.common.enums.*;
import com.zzg.common.enums.CompensateTypeEnum;
import com.zzg.common.enums.CompensationCategoryEnum;
import com.zzg.common.enums.DeleteFlagEnum;
import com.zzg.common.enums.HouseOwnerTyeEnum;
import com.zzg.common.enums.HouseUsingTypeEnum;
import com.zzg.common.exception.GlobalException;
import com.zzg.common.utils.RoundingUtil;
import com.zzg.common.utils.StringUtils;
import com.zzg.system.convert.StateProjectConvert;
import com.zzg.system.domain.bo.*;
import com.zzg.system.domain.bo.AwardBO;
import com.zzg.system.domain.bo.CalculateCompensationBO;
import com.zzg.system.domain.bo.HomeCompensationBO;
import com.zzg.system.domain.bo.PolicyCompensationBO;
import com.zzg.system.domain.bo.PolicySubsidyBO;
import com.zzg.system.domain.bo.PolicySupplementBO;
import com.zzg.system.domain.vo.CalculateCompensationVO;
import com.zzg.system.domain.vo.OtherCompensationBO;
import com.zzg.system.domain.vo.StateHouseholdOwnerVO;
@@ -30,7 +38,12 @@
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
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;
@@ -88,17 +101,19 @@
    //如果不是区间 就直接计算
    @Override
    public CalculateCompensationVO calculateCompensation(CalculateCompensationBO calculateCompensationBO) {
        //获取对应房产信息
        StateHousehold household = stateHouseholdService.getById(calculateCompensationBO.getStateHouseholdId());
        if (Objects.isNull(household)) {
            throw new GlobalException("未找到对应的房产");
        }
        String stateProjectId = household.getStateProjectId();
        //获取项目补偿标准信息
        StateProjectCompensation compensation = stateProjectCompensationService.getById(stateProjectId);
        if (Objects.isNull(compensation)) {
            throw new GlobalException("项目没有设置标准");
        }
        //通过标准类型名称查询对应的标准信息
        List<String> compensationNameList = new ArrayList<>();
        compensationNameList.add(compensation.getPolicyCompensationType());
        compensationNameList.add(compensation.getPolicySubsidy());
@@ -110,10 +125,13 @@
            throw new GlobalException("未找到开启的标准");
        }
        enableCompensateStandard = enableCompensateStandard.stream().filter(e -> Objects.nonNull(e.getSubType())).collect(Collectors.toList());
        Map<Integer, Map<Integer, List<StateProjectCompensateStandard>>> enableCompensateStandardMap = enableCompensateStandard.stream().collect(Collectors.groupingBy(StateProjectCompensateStandard::getCompensateType, Collectors.groupingBy(StateProjectCompensateStandard::getCategory)));
        //根据类型分组后再根据子类型进行一次分组
        Map<Integer, Map<Integer, List<StateProjectCompensateStandard>>> enableCompensateStandardMap = enableCompensateStandard.stream()
                .collect(Collectors.groupingBy(StateProjectCompensateStandard::getCompensateType, Collectors.groupingBy(StateProjectCompensateStandard::getCategory)));
        //征收房屋补偿费
        Double homeAmount = null;
        // 从数据库查询的房产的预估价格附加信息不为空且calculateCompensationBO任意一个字段为空,则从数据库中房产的附加信息中获取
        if (org.apache.commons.lang3.StringUtils.isNotBlank(household.getAppendData()) && !areAllCompensationFieldsNotNull(calculateCompensationBO)) {
            calculateCompensationBO = JSON.parseObject(household.getAppendData(), CalculateCompensationBO.class);
        }
@@ -121,7 +139,7 @@
        Integer houseUsingType = household.getHouseUsingType();
        HomeCompensationBO homeCompensationBO = calculateCompensationBO.getHomeCompensationBO();
        // 货币补偿
        if (Objects.nonNull(homeCompensationBO) && CompensationCategoryEnum.MONEY_COMPENSATION_1.getCode() == homeCompensationBO.getHomeCompensationType()) {
            Map<Integer, List<StateProjectCompensateStandard>> integerListMap = enableCompensateStandardMap.get(CompensateTypeEnum.HOUSE_ACQUISITION_COMPENSATION_FEE.getCode());
            if (!CollectionUtils.isEmpty(integerListMap)) {
@@ -162,12 +180,15 @@
                    }
                }
            }
            //产权置换
        } else if (Objects.nonNull(homeCompensationBO)) {
            Map<Integer, List<StateProjectCompensateStandard>> integerListMap = enableCompensateStandardMap.get(CompensateTypeEnum.HOUSE_ACQUISITION_COMPENSATION_FEE.getCode());
            if (!CollectionUtils.isEmpty(integerListMap)) {
                //产权置换标准
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = integerListMap.get(CompensationCategoryEnum.PROPERTY_SWAP.getCode());
                if (!CollectionUtils.isEmpty(stateProjectCompensateStandards)) {
                    StateProjectCompensateStandard stateProjectCompensateStandard;
                    //根据房屋类型获取标准
                    if (HouseUsingTypeEnum.PERSONAL_HOUSE.getValue().equals(houseUsingType)) {
                        stateProjectCompensateStandard = stateProjectCompensateStandards.stream().filter(e -> e.getSpecification().equals("住宅")).findFirst().get();
                    } else {
@@ -215,6 +236,7 @@
            compensationVO.getHomeCompensationBO().setTotalAmount(homeAmount);
        }
        //政策性补偿费
        //补偿费总金额
        Double policyAmount = 0.0;
        PolicyCompensationBO policyCompensationBO = calculateCompensationBO.getPolicyCompensationBO();
        Map<Integer, List<StateProjectCompensateStandard>> integerListMap = enableCompensateStandardMap.get(CompensateTypeEnum.POLICY_COMPENSATION_FEE.getCode());
@@ -227,6 +249,7 @@
                } else {
                    stateProjectCompensateStandard = stateProjectCompensateStandards.stream().filter(e -> e.getSpecification().equals("非住宅")).findFirst().get();
                }
                //电话移机费用
                Double telephoneRelocationAmount = 0.0;
                if (!checkCompensateStandard(stateProjectCompensateStandard)) {
                    // Skip further calculations or set default values to avoid computation
@@ -255,10 +278,11 @@
                    ;
                }
            }
            // 有线电视迁装
            if (Objects.nonNull(policyCompensationBO.getCableTVRelocation()) && Objects.nonNull(integerListMap.get(CompensationCategoryEnum.CABLE_TV_RELOCATION.getCode()))) {
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = integerListMap.get(CompensationCategoryEnum.CABLE_TV_RELOCATION.getCode());
                StateProjectCompensateStandard stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
                // 有线电视迁装金额
                Double cableTVRelocationAmount = 0.0;
                if (!checkCompensateStandard(stateProjectCompensateStandard)) {
                    // Skip further calculations or set default values to avoid computation
@@ -287,9 +311,11 @@
                    ;
                }
            }
            // 宽带迁装
            if (Objects.nonNull(policyCompensationBO.getBroadbandRelocation()) && Objects.nonNull(integerListMap.get(CompensationCategoryEnum.BROADBAND_RELOCATION.getCode()))) {
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = integerListMap.get(CompensationCategoryEnum.BROADBAND_RELOCATION.getCode());
                StateProjectCompensateStandard stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
                // 宽带迁装金额
                Double broadbandRelocationAmount = 0.0;
                if (!checkCompensateStandard(stateProjectCompensateStandard)) {
                    // Skip further calculations or set default values to avoid computation
@@ -318,10 +344,11 @@
                    ;
                }
            }
            // 空调移机
            if (Objects.nonNull(policyCompensationBO.getAirConditionerRelocation()) && Objects.nonNull(integerListMap.get(CompensationCategoryEnum.AIR_CONDITIONER_RELOCATION.getCode()))) {
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = integerListMap.get(CompensationCategoryEnum.AIR_CONDITIONER_RELOCATION.getCode());
                StateProjectCompensateStandard stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
                // 空调移机金额
                Double airConditionerRelocationAmount = 0.0;
                if (!checkCompensateStandard(stateProjectCompensateStandard)) {
                    // Skip further calculations or set default values to avoid computation
@@ -350,9 +377,11 @@
                    ;
                }
            }
            // 一户一表
            if (Objects.nonNull(policyCompensationBO.getIndividualMeterInstallation()) && Objects.nonNull(integerListMap.get(CompensationCategoryEnum.ONE_HOUSE_ONE_METER.getCode()))) {
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = integerListMap.get(CompensationCategoryEnum.ONE_HOUSE_ONE_METER.getCode());
                StateProjectCompensateStandard stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
                // 一户一表金额
                Double individualMeterInstallationAmount = 0.0;
                if (!checkCompensateStandard(stateProjectCompensateStandard)) {
                    // Skip further calculations or set default values to avoid computation
@@ -382,6 +411,7 @@
                    ;
                }
            }
            // 天然气初装
            if (Objects.nonNull(policyCompensationBO.getGasInitialInstallation()) && Objects.nonNull(integerListMap.get(CompensationCategoryEnum.GAS_INITIAL_INSTALLATION.getCode()))) {
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = integerListMap.get(CompensationCategoryEnum.GAS_INITIAL_INSTALLATION.getCode());
                StateProjectCompensateStandard stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
@@ -416,13 +446,18 @@
        }
        compensationVO.getPolicyCompensationBO().calculateTotalAmount();
        //政策性补助费
        // 住宅临时安置补助费
        Double policySubsidyAmount = null;
        //非住宅停产,停业经济损失补偿费
        Double nonResidentialEconomicLossAllowanceAmount = null;
        // 搬家补助费
        Double movingAllowanceAmount = null;
        PolicySubsidyBO policySubsidyBO = calculateCompensationBO.getPolicySubsidyBO();
        //货币补偿
        if (Objects.nonNull(policySubsidyBO) && CompensationCategoryEnum.MONEY_COMPENSATION_1.getCode() == policySubsidyBO.getCompensationType()) {
            Map<Integer, List<StateProjectCompensateStandard>> policySubsidyMap = enableCompensateStandardMap.get(CompensateTypeEnum.POLICY_SUBSIDY_FEE.getCode());
            if (!CollectionUtils.isEmpty(policySubsidyMap)) {
                // 住宅临时安置补助费
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = policySubsidyMap.get(CompensationCategoryEnum.TEMPORARY_HOUSING_ALLOWANCE.getCode());
                if (!CollectionUtils.isEmpty(stateProjectCompensateStandards)) {
                    StateProjectCompensateStandard stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
@@ -454,6 +489,7 @@
                        }
                    }
                }
                // 非住宅停产、停业经济损失补助费
                List<StateProjectCompensateStandard> nonResidentialEconomicLossAllowance = policySubsidyMap.get(CompensationCategoryEnum.NON_RESIDENTIAL_ECONOMIC_LOSS_ALLOWANCE.getCode());
                if (!CollectionUtils.isEmpty(nonResidentialEconomicLossAllowance)) {
                    StateProjectCompensateStandard stateProjectCompensateStandard = nonResidentialEconomicLossAllowance.stream().findFirst().get();
@@ -480,6 +516,7 @@
                        }
                    }
                }
                // 搬家补助费
                List<StateProjectCompensateStandard> movingAllowance = policySubsidyMap.get(CompensationCategoryEnum.MOVING_ALLOWANCE.getCode());
                if (!CollectionUtils.isEmpty(movingAllowance)) {
                    StateProjectCompensateStandard stateProjectCompensateStandard = movingAllowance.stream().findFirst().get();
@@ -507,9 +544,10 @@
                    }
                }
            }
        } else if (Objects.nonNull(policySubsidyBO)) {
        } else if (Objects.nonNull(policySubsidyBO)) { //产权置换
            Map<Integer, List<StateProjectCompensateStandard>> policySubsidyMap = enableCompensateStandardMap.get(CompensateTypeEnum.POLICY_SUBSIDY_FEE.getCode());
            if (!CollectionUtils.isEmpty(policySubsidyMap)) {
                // 住宅临时安置补助费
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = policySubsidyMap.get(CompensationCategoryEnum.TEMPORARY_HOUSING_ALLOWANCE.getCode());
                if (!CollectionUtils.isEmpty(stateProjectCompensateStandards)) {
                    StateProjectCompensateStandard stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
@@ -542,6 +580,7 @@
                        }
                    }
                }
                // 非住宅停产、停业经济损失补助费
                List<StateProjectCompensateStandard> nonResidentialEconomicLossAllowance = policySubsidyMap.get(CompensationCategoryEnum.NON_RESIDENTIAL_ECONOMIC_LOSS_ALLOWANCE.getCode());
                if (!CollectionUtils.isEmpty(nonResidentialEconomicLossAllowance)) {
                    StateProjectCompensateStandard stateProjectCompensateStandard = nonResidentialEconomicLossAllowance.stream().findFirst().get();
@@ -570,6 +609,7 @@
                        }
                    }
                }
                // 搬家补助费
                List<StateProjectCompensateStandard> movingAllowance = policySubsidyMap.get(CompensationCategoryEnum.MOVING_ALLOWANCE.getCode());
                if (!CollectionUtils.isEmpty(movingAllowance)) {
                    StateProjectCompensateStandard stateProjectCompensateStandard = movingAllowance.stream().findFirst().get();
@@ -602,7 +642,9 @@
        }
        //政策性补贴
        //购房补贴
        Double propertyManagementSubsidyAmount = null;
        //物管费补贴
        Double housingSubsidyAmount = null;
        PolicySupplementBO policySupplementBO = calculateCompensationBO.getPolicySupplementBO();
        if (Objects.isNull(calculateCompensationBO.getPolicySupplementBO())) {
@@ -612,6 +654,7 @@
        }
        Map<Integer, List<StateProjectCompensateStandard>> policyAllowanceMap = enableCompensateStandardMap.get(CompensateTypeEnum.POLICY_ALLOWANCE.getCode());
        if (!CollectionUtils.isEmpty(policyAllowanceMap)) {
            // 物管费补贴
            if (Objects.nonNull(policyAllowanceMap.get(CompensationCategoryEnum.PROPERTY_MANAGEMENT_SUBSIDY.getCode()))) {
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = policyAllowanceMap.get(CompensationCategoryEnum.PROPERTY_MANAGEMENT_SUBSIDY.getCode());
                StateProjectCompensateStandard stateProjectCompensateStandard;
@@ -656,6 +699,7 @@
                    compensationVO.getPolicySupplementBO().setPropertyManagementSubsidy(propertyManagementSubsidyAmount);
                }
            }
            // 购房补贴
            if (Objects.nonNull(policyAllowanceMap.get(CompensationCategoryEnum.HOUSE_PURCHASE_SUBSIDY.getCode()))) {
                List<StateProjectCompensateStandard> stateProjectCompensateStandards = policyAllowanceMap.get(CompensationCategoryEnum.HOUSE_PURCHASE_SUBSIDY.getCode());
                StateProjectCompensateStandard stateProjectCompensateStandard;
@@ -693,7 +737,7 @@
            }
        }
        // 提前搬迁奖励
        Double earlyRelocationRewardAmount = null;
        AwardBO awardBO = compensationVO.getAwardBO();
        Map<Integer, List<StateProjectCompensateStandard>> earlyRelocationRewardMap = enableCompensateStandardMap.get(CompensateTypeEnum.EARLY_RELOCATION_REWARD.getCode());
land-system/src/main/java/com/zzg/system/service/state/impl/StateProcessTemplateServiceImpl.java
@@ -5,14 +5,23 @@
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.aizuda.bpm.engine.FlowLongEngine;
import com.aizuda.bpm.engine.core.FlowCreator;
import com.aizuda.bpm.engine.core.enums.TaskType;
import com.aizuda.bpm.engine.entity.*;
import com.aizuda.bpm.engine.entity.FlowEntity;
import com.aizuda.bpm.engine.entity.FlwHisInstance;
import com.aizuda.bpm.engine.entity.FlwHisTask;
import com.aizuda.bpm.engine.entity.FlwHisTaskActor;
import com.aizuda.bpm.engine.entity.FlwProcess;
import com.aizuda.bpm.engine.entity.FlwTask;
import com.aizuda.bpm.engine.entity.FlwTaskActor;
import com.aizuda.bpm.engine.model.NodeModel;
import com.aizuda.bpm.mybatisplus.mapper.*;
import com.aizuda.bpm.mybatisplus.mapper.FlwHisInstanceMapper;
import com.aizuda.bpm.mybatisplus.mapper.FlwHisTaskActorMapper;
import com.aizuda.bpm.mybatisplus.mapper.FlwHisTaskMapper;
import com.aizuda.bpm.mybatisplus.mapper.FlwTaskActorMapper;
import com.aizuda.bpm.mybatisplus.mapper.FlwTaskMapper;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -23,7 +32,11 @@
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zzg.common.core.domain.BaseEntity;
import com.zzg.common.core.domain.entity.state.*;
import com.zzg.common.core.domain.entity.state.StateProcessExtInstance;
import com.zzg.common.core.domain.entity.state.StateProcessInstanceAction;
import com.zzg.common.core.domain.entity.state.StateProcessModule;
import com.zzg.common.core.domain.entity.state.StateProcessTemplate;
import com.zzg.common.core.domain.entity.state.StateTaskCenter;
import com.zzg.common.core.domain.entity.system.SysUser;
import com.zzg.common.core.domain.model.LoginUser;
import com.zzg.common.enums.StateProcessActionType;
@@ -31,23 +44,37 @@
import com.zzg.common.exception.state.StateErrorCode;
import com.zzg.common.utils.SecurityUtils;
import com.zzg.common.utils.uuid.IdUtils;
import com.zzg.system.domain.bo.*;
import com.zzg.system.domain.vo.City;
import com.zzg.system.domain.bo.DeployBO;
import com.zzg.system.domain.bo.ProcessAgreeBO;
import com.zzg.system.domain.bo.ProcessCreateBO;
import com.zzg.system.domain.bo.ProcessRefuseBO;
import com.zzg.system.domain.bo.ProcessStartBO;
import com.zzg.system.domain.bo.ProcessTaskListBO;
import com.zzg.system.domain.bo.ProcessTemplatePageBO;
import com.zzg.system.domain.bo.ProcessUpdateBO;
import com.zzg.system.domain.vo.ProcessTaskListVO;
import com.zzg.system.mapper.state.StateProcessTemplateMapper;
import com.zzg.system.service.state.*;
import com.zzg.system.service.state.StateProcessExtInstanceService;
import com.zzg.system.service.state.StateProcessInstanceActionService;
import com.zzg.system.service.state.StateProcessModuleService;
import com.zzg.system.service.state.StateProcessTemplateService;
import com.zzg.system.service.state.StateTaskCenterService;
import com.zzg.system.service.system.ISysRoleService;
import com.zzg.system.service.system.ISysUserService;
import lombok.AllArgsConstructor;
import org.apache.commons.io.IOUtils;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.ArrayList;
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;
@@ -68,13 +95,20 @@
    private final FlwHisTaskActorMapper flwHisTaskActorMapper;
    private final ISysUserService sysUserService;
    /**
     * 流程模版分页
     * @param request
     * @return
     */
    @Override
    public Page<StateProcessTemplate> page(ProcessTemplatePageBO request) {
        //查询流程模板列表
        Page<StateProcessTemplate> templatePage = this.baseMapper.page(new Page<>(request.getCurrentPage(), request.getPageSize()), request);
        //更新人id列表
        List<String> updateUserNameList = templatePage.getRecords().stream().map(BaseEntity::getUpdateBy).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(updateUserNameList)) {
            //根据用户id列表查询用户信息
            List<SysUser> sysUsers = sysUserService.selectUserByUserNameList(updateUserNameList);
            Map<String, SysUser> sysUserMap;
            if (!CollectionUtils.isEmpty(sysUsers)) {
@@ -82,6 +116,7 @@
            } else {
                sysUserMap = new HashMap<>();
            }
            //遍历列表,设置更新人名称
            templatePage.getRecords().forEach(e -> {
                SysUser sysUser = sysUserMap.get(e.getUpdateBy());
                if (Objects.nonNull(sysUser)) {
@@ -92,10 +127,17 @@
        return templatePage;
    }
    /**
     * 修改并部署模版
     * @param processUpdateBO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean update(ProcessUpdateBO processUpdateBO) {
        //查询流程模板
        StateProcessTemplate temp = this.getById(processUpdateBO.getId());
        //根据template_key查询最新版本的模板
        StateProcessTemplate template = this.getOne(Wrappers.<StateProcessTemplate>lambdaQuery()
                .eq(StateProcessTemplate::getTemplateKey, temp.getTemplateKey())
                .apply("(template_key, template_version) in("
@@ -149,6 +191,11 @@
        return stateProcessModuleService.updateBatchById(stateProcessModules);
    }
    /**
     * 创建并部署模版
     * @param processCreateBO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean create(ProcessCreateBO processCreateBO) {
@@ -186,6 +233,11 @@
        return this.save(processTemplate);
    }
    /**
     * 启动流程
     * @param processStartBO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean start(ProcessStartBO processStartBO) {
@@ -255,6 +307,11 @@
        return true;
    }
    /**
     * 待办
     * @param processTaskListBO
     * @return
     */
    @Override
    public PageInfo<ProcessTaskListVO> waitTaskPage(ProcessTaskListBO processTaskListBO) {
        List<ProcessTaskListVO> page = new ArrayList<>();
@@ -327,6 +384,7 @@
        List<String> updateUserId = processTaskListVOS.stream().map(ProcessTaskListVO::getCreateBy).collect(Collectors.toList());
        Map<String, SysUser> sysUserMap;
        if (!CollectionUtils.isEmpty(updateUserId)) {
            //根据用户id查询更新人信息
            List<SysUser> sysUsers = sysUserService.selectUserByIdList(updateUserId);
            if (!CollectionUtils.isEmpty(sysUsers)) {
land-system/src/main/java/com/zzg/system/service/state/impl/StateProjectCompensateStandardServiceImpl.java
@@ -35,6 +35,13 @@
    @Resource
    private StateProjectCompensationService stateProjectCompensationService;
    /**
     * 获取补偿标准列表
     * @param standardName
     * @param stopFlag
     * @param compensateType
     * @return
     */
    @Override
    public Map<String, List<StateProjectCompensateStandardVO>> getCompensateStandardMap(String standardName, Integer stopFlag, Integer compensateType) {
        LambdaQueryWrapper<StateProjectCompensateStandard> queryWrapper = new LambdaQueryWrapper<>();
@@ -86,7 +93,7 @@
        } catch (IOException e) {
            throw new GlobalException("读取Excel文件失败");
        }
//TODO 导入未校验标准名称唯一
        StateProjectCompensateStandard po;
        List<StateProjectCompensateStandard> poList = new ArrayList<>();
        for (StateProjectCompensateStandardVO e : dataList) {
@@ -106,6 +113,11 @@
        return saveBatch(poList);
    }
    /**
     * 创建补偿标准
     * @param stateProjectCompensateStandard
     * @return
     */
    @Override
    public Boolean createCompensatesStandard(StateProjectCompensateStandard stateProjectCompensateStandard) {
        String standardName = stateProjectCompensateStandard.getStandardName();
@@ -126,7 +138,7 @@
                    if (isValidCompensationType(typeEnum.getCode(), categoryEnum.getCode())) {
                        StateProjectCompensateStandard compensation = createCompensation(typeEnum, categoryEnum, stateProjectCompensateStandard);
                        // 处理特殊的组合
                        // TODO 处理特殊的组合
                        handleSpecialCases(typeEnum, categoryEnum, compensation, standardList);
                        // 添加最终的 compensation 到标准列表
@@ -138,6 +150,11 @@
        return this.saveOrUpdateBatch(standardList);
    }
    /**
     * 修改补偿标准名字
     * @param stateProjectCompensateStandard
     * @return
     */
    @Override
    public Boolean updateName(StateProjectCompensateStandard stateProjectCompensateStandard) {
@@ -199,7 +216,9 @@
    private void handleSpecialCases(CompensateTypeEnum typeEnum, CompensationCategoryEnum categoryEnum,
                                    StateProjectCompensateStandard compensation, List<StateProjectCompensateStandard> standardList) {
        //政策性补贴
        if (typeEnum.equals(CompensateTypeEnum.POLICY_ALLOWANCE)
                //购房补贴
                && categoryEnum.equals(CompensationCategoryEnum.HOUSE_PURCHASE_SUBSIDY)) {
            addCompensationWithSpecifications(compensation, standardList);
        }
land-system/src/main/java/com/zzg/system/service/state/impl/StateSettlementImpl.java
@@ -120,10 +120,15 @@
        return result;
    }
    /**
     * 安置情况页面数据
     * @param settlementBO
     * @return
     */
    @Override
    public PageInfo<HouseholdVO> listSettleData(SettlementBO settlementBO) {
        PageUtils.startPage();
        //根据查询条件查询房产数据
        List<HouseholdVO> householdVOList = settlementMapper.listSettleData(settlementBO);
        if (CollectionUtils.isEmpty(householdVOList)) {
            return new PageInfo<>();
@@ -138,14 +143,14 @@
                .filter(Objects::nonNull) // 过滤掉 houseStateId 为 null 的情况
                .distinct() // 去重
                .collect(Collectors.toList());
        //根据房产id查询所有权利人信息
        LambdaQueryWrapper<StateHouseholdOwner> householdOwnerLambdaQueryWrapper = new LambdaQueryWrapper<>();
        householdOwnerLambdaQueryWrapper.in(StateHouseholdOwner::getStateHouseholdId, houseIdList);
        if (!com.zzg.common.utils.StringUtils.isEmpty(settlementBO.getOwnerName())) {
            householdOwnerLambdaQueryWrapper.like(StateHouseholdOwner::getOwnerName, settlementBO.getOwnerName());
        }
        List<StateHouseholdOwner> stateHouseholdOwners = stateHouseholdOwnerService.list(householdOwnerLambdaQueryWrapper);
        //根据房产id 将权利人分组
        Map<String, List<StateHouseholdOwner>> ownerMap = stateHouseholdOwners.stream().collect(Collectors.groupingBy(StateHouseholdOwner::getStateHouseholdId));
        if (!com.zzg.common.utils.StringUtils.isEmpty(settlementBO.getOwnerName())) {
            householdVOList = householdVOList.stream().filter(data -> ownerMap.containsKey(data.getId())).collect(Collectors.toList());
@@ -221,7 +226,7 @@
        stateSettlementLambdaQueryWrapper.in(StateSettlement::getStateHouseholdId, houseIdList);
        stateSettlementLambdaQueryWrapper.eq(StateSettlement::getDelFlag, DeleteFlagEnum.NOT_DELETED.getKey());
        stateSettlementLambdaQueryWrapper.isNotNull(StateSettlement::getAuditStatus);
        //根据条件查询安置情况
        List<StateSettlement> stateSettlementList = this.list(stateSettlementLambdaQueryWrapper);
        Map<String, String> departmentMap = stateSettlementList.stream().collect(Collectors.toMap(StateSettlement::getStateHouseholdId, StateSettlement::getSettleDepartment));
@@ -234,19 +239,23 @@
        //根据入参区分是否安置
        if (Objects.nonNull(settlementBO.getIsSettled())) {
            //未安置
            if (Objects.equals(settlementBO.getIsSettled(), SettledProcessEnum.NOT_SETTLE.getValue())) {
                List<String> settledHouseId;
                if (CollectionUtils.isNotEmpty(stateSettlementList)) {
                    List<String> settledHouseIdList = stateSettlementList.stream().map(StateSettlement::getStateHouseholdId).collect(Collectors.toList());
                    //过滤未安置的房产id
                    settledHouseId = houseIdList.stream().filter(e -> !settledHouseIdList.contains(e)).collect(Collectors.toList());
                    List<String> finalSettledHouseId = settledHouseId;
                    voArrayList.addAll(householdVOS.stream().filter(data -> finalSettledHouseId.contains(data.getId())).collect(Collectors.toList()));
                } else {
                    voArrayList.addAll(householdVOS);
                }
            //已安置
            } else {
                //已安置房产id列表
                List<String> settledHouseId = stateSettlementList.stream().map(StateSettlement::getStateHouseholdId).collect(Collectors.toList());
                //过滤已安置的房产
                List<HouseholdVO> list = householdVOS.stream().filter(data -> settledHouseId.contains(data.getId())).collect(Collectors.toList());
                //设置安置时间 安置状态 安置批次
                Map<String, StateSettlement> settlementMap = stateSettlementList
@@ -302,11 +311,17 @@
        return result;
    }
    /**
     * 安置详情
     * @param settlementDetailBO
     * @return
     */
    @Override
    public SettlementDetailPageVO listDetailData(SettlementDetailBO settlementDetailBO) {
        SettlementDetailPageVO pageVO = new SettlementDetailPageVO();
        PageUtils.startPage();
        //分页查询安置情况
        List<SettlementDetailVO> settlementDetailVOS = settlementMapper.listSettleDetail(settlementDetailBO);
        if (CollectionUtils.isEmpty(settlementDetailVOS)) {
            pageVO.setPageData(new PageInfo<>());
@@ -316,6 +331,7 @@
        PageInfo<SettlementDetailVO> settlementDetailVOPageInfo = new PageInfo<>(settlementDetailVOS);
        List<SettlementDetailVO> detailVOS = new ArrayList<>();
        //拼接名字
        //根据房产id进行分组
        Map<String, SettlementDetailVO> householdMap = settlementDetailVOS.stream().filter(Objects::nonNull).collect(Collectors.toMap(StateSettlement::getStateHouseholdId, Function.identity()));
        for (Map.Entry<String, SettlementDetailVO> entry : householdMap.entrySet()) {
            String householdId = entry.getKey();
@@ -355,7 +371,7 @@
                stateHouseholds.stream().map(StateHousehold::getId).collect(Collectors.toList()));
        stateSettlementLambdaQueryWrapper.isNull(StateSettlement::getAuditStatus);
        stateSettlementLambdaQueryWrapper.orderByDesc(StateSettlement::getCreateTime);
        //查询安置情况
        List<StateSettlement> stateSettlementList = this.list(stateSettlementLambdaQueryWrapper);
        if (CollectionUtils.isNotEmpty(stateSettlementList)) {
            String latestHouseId = stateSettlementList.get(0).getStateHouseholdId();
@@ -429,16 +445,21 @@
        }
    }
    /**
     * 外层项目实施数据
     * @param projectId
     * @return
     */
    @Override
    public SettlementSumVO sumSettleData(String projectId) {
        LambdaQueryWrapper<StateProject> stateProjectQueryWrapper = new LambdaQueryWrapper<>();
        stateProjectQueryWrapper.eq(StateProject::getId, projectId);
        //查询项目
        StateProject stateProject = stateProjectMapper.selectOne(stateProjectQueryWrapper);
        if (Objects.isNull(stateProject)) {
            return new SettlementSumVO();
        }
        //查询房产
        LambdaQueryWrapper<StateHousehold> stateHouseholdQueryWrapper = new LambdaQueryWrapper<>();
        stateHouseholdQueryWrapper.eq(StateHousehold::getStateProjectId, projectId);
        List<StateHousehold> stateHouseholds = stateHouseholdMapper.selectList(stateHouseholdQueryWrapper);
@@ -450,7 +471,7 @@
        SettlementSumVO settlementSumVO = new SettlementSumVO();
        //查询房产的协议/安置情况
        List<String> householdIds = stateHouseholds.stream().map(StateHousehold::getId).distinct().collect(Collectors.toList());
        //查询结算
        LambdaQueryWrapper<StateSettlement> stateSettlementQueryWrapper = new LambdaQueryWrapper<>();
        stateSettlementQueryWrapper.in(StateSettlement::getStateHouseholdId, householdIds);
        stateSettlementQueryWrapper.isNotNull(StateSettlement::getAuditStatus);
@@ -531,6 +552,11 @@
        return settlementSumVO;
    }
    /**
     * 项目实施明细
     * @param executionBO
     * @return
     */
    @Override
    public PageInfo<StateExecutionDetailVO> listExecution(StateExecutionBO executionBO) {
        PageUtils.startPage();
@@ -539,7 +565,7 @@
            return new PageInfo<>();
        }
        PageInfo<StateExecutionDetailVO> pageInfo = new PageInfo<>(list);
        //返回的结果列表
        List<StateExecutionDetailVO> result = new ArrayList<>();
        List<StateExecutionDetailVO> executionDetailVOS = list.stream().filter(Objects::nonNull).collect(Collectors.toList());
@@ -604,6 +630,11 @@
        return pageInfo;
    }
    /**
     * 安置详情-回显
     * @param executionB
     * @return
     */
    @Override
    public List<StateExecutionDetailVO> exportExecution(StateExecutionBO executionB) {
        if (StringUtils.isNoneBlank(executionB.getHouseStateId())) {
@@ -615,7 +646,7 @@
            return new ArrayList<>();
        }
        List<StateExecutionDetailVO> result = new ArrayList<>();
        //过滤空值
        List<StateExecutionDetailVO> executionDetailVOS = list.stream().filter(Objects::nonNull).collect(Collectors.toList());
        List<String> houseIdList = executionDetailVOS.stream()
@@ -629,6 +660,7 @@
        if (!com.zzg.common.utils.StringUtils.isEmpty(executionB.getOwnerName())) {
            householdOwnerLambdaQueryWrapper.like(StateHouseholdOwner::getOwnerName, executionB.getOwnerName());
        }
        //查询权利人
        List<StateHouseholdOwner> stateHouseholdOwners = stateHouseholdOwnerService.list(householdOwnerLambdaQueryWrapper);
        Map<String, List<StateHouseholdOwner>> ownerMap = stateHouseholdOwners.stream().collect(Collectors.groupingBy(StateHouseholdOwner::getStateHouseholdId));
@@ -651,6 +683,7 @@
        LambdaQueryWrapper<StateAgreement> agreementQueryWrapper = new LambdaQueryWrapper<>();
        agreementQueryWrapper.in(StateAgreement::getStateHouseholdId, houseIdList);
        agreementQueryWrapper.isNotNull(StateAgreement::getAgreementNumber);
        //查询协议
        List<StateAgreement> agreementList = stateAgreementMapper.selectList(agreementQueryWrapper);
        if (CollectionUtils.isEmpty(agreementList)) {
            return new ArrayList<>(result);
@@ -665,10 +698,12 @@
                if (innerAgreementMap.containsKey(AgreementTypeEnum.STATE_AGREEMENT.getValue())) {
                    StateAgreement stateAgreement = innerAgreementMap.get(AgreementTypeEnum.STATE_AGREEMENT.getValue());
                    //正式签字时间
                    data.setOfficialSignedTime(stateAgreement.getSignAt());
                }
                if (innerAgreementMap.containsKey(AgreementTypeEnum.VIRTUAL_STATE_AGREEMENT.getValue())) {
                    StateAgreement virtualAgreement = innerAgreementMap.get(AgreementTypeEnum.VIRTUAL_STATE_AGREEMENT.getValue());
                    //模拟签字时间
                    data.setVirtualSignedTime(virtualAgreement.getSignAt());
                }
@@ -677,6 +712,12 @@
        return result;
    }
    /**
     * 给项目展示使用
     * @param projectIdList
     * @param projectStreet
     * @return
     */
    @Override
    public Map<String, Map<Integer, ProjectExecutionSumVO>> listProjectExecutionByProjectId(List<String> projectIdList, String projectStreet) {
@@ -692,7 +733,7 @@
            return new HashMap<>();
        }
        //查询房产
        LambdaQueryWrapper<StateHousehold> householdQueryWrapper = new LambdaQueryWrapper<>();
        householdQueryWrapper.in(StateHousehold::getStateProjectId, projectIdList);
        if (StringUtils.isNoneBlank(projectStreet)) {
@@ -710,8 +751,8 @@
        Map<String, Map<Integer, ProjectExecutionSumVO>> result = new HashMap<>();
        Map<String, List<StateHousehold>> householdMap = households.stream().collect(Collectors.groupingBy(StateHousehold::getStateProjectId));
        List<String> houseIdList = households.stream().map(StateHousehold::getId).collect(Collectors.toList());
        //废弃代码
        //List<String> houseIdList = households.stream().map(StateHousehold::getId).collect(Collectors.toList());
        List<String> acceptHoustIdList = households.stream().filter(e ->
                Objects.nonNull(e.getAgreementStatus())
        ).map(StateHousehold::getId).collect(Collectors.toList());
@@ -884,10 +925,10 @@
                        .count();
                long notSignedVirtualPerson = innerHouseList.size() - signedVirtualPerson;
                //计算正式签约的比例
                appendData(searchedPersons, notSearchedPersons, innerHouseId, signedStatePerson, notSignedStatePerson, projectStateExecutionSumVO);
                //计算模拟签约的比例
                appendData(searchedPersons, notSearchedPersons, innerHouseId, signedVirtualPerson, notSignedVirtualPerson, projectVirtualExecutionSumVO);
                Map<Integer, ProjectExecutionSumVO> projectExecutionSumVOMap = new HashMap<>();
@@ -940,6 +981,7 @@
                    stateHouseholds.stream().map(StateHousehold::getId).collect(Collectors.toList()));
            stateSettlementLambdaQueryWrapper.isNull(StateSettlement::getAuditStatus);
            stateSettlementLambdaQueryWrapper.orderByAsc(StateSettlement::getSettleName);
            //查询安置情况
            stateSettlementList = this.list(stateSettlementLambdaQueryWrapper);
            if (ObjectUtil.isNotEmpty(stateSettlementList)) {
                StateHousehold stateHousehold = stateHouseholdMap.get(stateSettlementList.get(0).getStateHouseholdId());
@@ -987,6 +1029,11 @@
        return "第" + batchNum + "批次";
    }
    /**
     * 当前项目批次列表
     * @param projectId
     * @return
     */
    @Override
    public List<String> listBatchName(String projectId) {
        if (StringUtils.isEmpty(projectId)) {
@@ -1008,14 +1055,19 @@
        return stateSettlementList.stream().map(StateSettlement::getSettleName).distinct().collect(Collectors.toList());
    }
    /**
     * 安置情况保存
     * @param stateSettlement
     */
    @Override
    @Transactional
    public void saveOrUpdateSettlement(List<StateSettlement> stateSettlement) {
        if (CollectionUtils.isEmpty(stateSettlement)) {
            throw new GlobalException("数据不能为空");
        }
        //新增的
        List<StateSettlement> newAddList = stateSettlement.stream().filter(e -> Objects.isNull(e.getId())).collect(Collectors.toList());
        //编辑的
        List<StateSettlement> oldUpdateList = stateSettlement.stream().filter(e -> Objects.nonNull(e.getId())).collect(Collectors.toList());
@@ -1030,7 +1082,7 @@
                data.setSettlementArea(areaMap.get(data.getStateHouseholdId()));
            }
        });
        //全为编辑
        if (CollectionUtils.isEmpty(newAddHouseId)) {
            this.saveOrUpdateBatch(oldUpdateList);
            return;
@@ -1066,9 +1118,10 @@
        LambdaQueryWrapper<StateSettlement> lqw = new LambdaQueryWrapper<>();
        lqw.in(StateSettlement::getStateHouseholdId, newAddHouseId).ne(StateSettlement::getDelFlag, DeleteFlagEnum.DELETED.getKey());
        List<StateSettlement> list = this.list(lqw);
        //新增
        if (CollectionUtils.isEmpty(list)) {
            //查询当前批次是否存在已经拒绝的,如果有则代表是 审核失败编辑页面新增的情况,这里需要吧审核状态设置为已拒绝
            //查询当前批次是否存在已经拒绝的,如果有则代表是 审核失败编辑页面新增的情况,这里需要吧审核状态设置为已拒绝 同一批次,审核状态统一,要么全为接收要么全为退回
            LambdaQueryWrapper<StateHousehold> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(StateHousehold::getStateProjectId, projectId);
            List<StateHousehold> allHousehold = stateHouseholdMapper.selectList(queryWrapper);
@@ -1101,6 +1154,10 @@
        }
    }
    /**
     * 新增安置情况 - 提交审核
     * @param settlementIds
     */
    @Override
    @Transactional
    public void workflowSubmit(List<String> settlementIds) {
@@ -1160,6 +1217,10 @@
        }
    }
    /**
     * 安置情况删除
     * @param id
     */
    @Override
    public void deleteSettlement(String id) {
        stateSettlementMapper.deleteSettlement(id);
@@ -1389,7 +1450,15 @@
        saveOrUpdateBatch(stateSettlement);
    }
    /**
     * 计算签约、未签约比例数据
     * @param searchedPersons
     * @param notSearchedPersons
     * @param innerHouseId
     * @param signedVirtualPerson
     * @param notSignedVirtualPerson
     * @param projectVirtualExecutionSumVO
     */
    private void appendData(long searchedPersons, long notSearchedPersons, List<String> innerHouseId, long signedVirtualPerson, long notSignedVirtualPerson, ProjectExecutionSumVO projectVirtualExecutionSumVO) {
        projectVirtualExecutionSumVO.setSignedPersons(signedVirtualPerson);
        projectVirtualExecutionSumVO.setNotSignedPersons(notSignedVirtualPerson);