mitao
2025-01-20 93fec20f3cf9d7801eeaa10acef4687ed110d435
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;
    }