package com.zzg.system.service.state.impl;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSONObject;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.github.pagehelper.PageInfo;
|
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.StateProjectCompensateStandard;
|
import com.zzg.common.core.domain.entity.state.StateProjectCompensation;
|
import com.zzg.common.core.domain.entity.system.SysDictData;
|
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.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;
|
import com.zzg.system.mapper.state.StateHouseholdOwnerMapper;
|
import com.zzg.system.service.state.StateHouseholdOwnerService;
|
import com.zzg.system.service.state.StateHouseholdService;
|
import com.zzg.system.service.state.StateProjectCompensateStandardService;
|
import com.zzg.system.service.state.StateProjectCompensationService;
|
import com.zzg.system.service.system.ISysDictDataService;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
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;
|
|
@Service
|
@RequiredArgsConstructor
|
public class StateHouseholdOwnerServiceImpl
|
extends ServiceImpl<StateHouseholdOwnerMapper, StateHouseholdOwner>
|
implements StateHouseholdOwnerService {
|
|
private final StateHouseholdService stateHouseholdService;
|
private final StateProjectCompensationService stateProjectCompensationService;
|
private final StateProjectCompensateStandardService stateProjectCompensateStandardService;
|
private final ISysDictDataService dictDataService;
|
|
public boolean areAllCompensationFieldsNotNull(CalculateCompensationBO compensationBO) {
|
// 依次判断每个补偿字段是否为 null
|
if (Objects.isNull(compensationBO)) {
|
return false;
|
}
|
|
if (compensationBO.getHomeCompensationBO() == null) {
|
return false;
|
}
|
if (compensationBO.getPolicyCompensationBO() == null) {
|
return false;
|
}
|
if (compensationBO.getPolicySubsidyBO() == null) {
|
return false;
|
}
|
if (compensationBO.getPolicySupplementBO() == null) {
|
return false;
|
}
|
// if (compensationBO.getAwardBO() == null) {
|
// return false;
|
// }
|
// if (compensationBO.getAttachmentBuildBO() == null || compensationBO.getAttachmentBuildBO().isEmpty()) {
|
// return false;
|
// }
|
// if (compensationBO.getStructureBO() == null || compensationBO.getStructureBO().isEmpty()) {
|
// return false;
|
// }
|
// if (compensationBO.getSurveyResultRegistrationBO() == null) {
|
// return false;
|
// }
|
// if (compensationBO.getOtherCompensationBO() == null) {
|
// return false;
|
// }
|
|
// 如果所有字段都不为 null,则返回 true
|
return true;
|
}
|
|
//有些分住宅和非住宅,住宅是一种计算方式 非住宅又是另外一种,
|
// 计算又分区间 如果是区间就只判断是否在区间内就行了,不在就报错
|
//如果不是区间 就直接计算
|
@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());
|
compensationNameList.add(compensation.getAward());
|
compensationNameList.add(compensation.getCompensationType());
|
compensationNameList.add(compensation.getPolicySupplement());
|
List<StateProjectCompensateStandard> enableCompensateStandard = stateProjectCompensateStandardService.getEnableCompensateStandard(compensationNameList);
|
if (CollectionUtils.isEmpty(enableCompensateStandard)) {
|
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)));
|
|
//征收房屋补偿费
|
Double homeAmount = null;
|
// 从数据库查询的房产的预估价格附加信息不为空且calculateCompensationBO任意一个字段为空,则从数据库中房产的附加信息中获取
|
if (org.apache.commons.lang3.StringUtils.isNotBlank(household.getAppendData()) && !areAllCompensationFieldsNotNull(calculateCompensationBO)) {
|
calculateCompensationBO = JSON.parseObject(household.getAppendData(), CalculateCompensationBO.class);
|
}
|
CalculateCompensationVO compensationVO = StateProjectConvert.INSTANCE.boToVo(calculateCompensationBO);
|
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)) {
|
List<StateProjectCompensateStandard> stateProjectCompensateStandards = integerListMap.get(CompensationCategoryEnum.MONEY_COMPENSATION.getCode());
|
if (!CollectionUtils.isEmpty(stateProjectCompensateStandards)) {
|
StateProjectCompensateStandard stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
// homeCompensationBO.setEvaluationPrice(0);
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
|
//评估单价
|
Double evaluationPrice = homeCompensationBO.getEvaluationPrice();
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(evaluationPrice) && (evaluationPrice >= end || evaluationPrice <= start)) {
|
throw new GlobalException("房屋补偿的评估单价不在区间内");
|
}
|
Double totalArea = homeCompensationBO.calculateTotalArea();
|
homeAmount = totalArea * evaluationPrice;
|
homeCompensationBO.setEvaluationPrice(evaluationPrice);
|
} else {
|
if (Objects.nonNull(evaluationPrice)) {
|
Double totalArea = homeCompensationBO.calculateTotalArea();
|
homeAmount = totalArea * evaluationPrice;
|
homeCompensationBO.setEvaluationPrice(evaluationPrice);
|
}
|
}
|
} else {
|
Double specification = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
Double totalArea = homeCompensationBO.calculateTotalArea();
|
homeAmount = totalArea * specification;
|
homeCompensationBO.setEvaluationPrice(specification);
|
}
|
}
|
}
|
}
|
//产权置换
|
} 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 {
|
stateProjectCompensateStandard = stateProjectCompensateStandards.stream().filter(e -> e.getSpecification().equals("非住宅")).findFirst().get();
|
}
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
// homeCompensationBO.setEvaluationPrice(0);
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
|
//评估单价
|
Double evaluationPrice = homeCompensationBO.getEvaluationPrice();
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(evaluationPrice) && (evaluationPrice > end || evaluationPrice < start)) {
|
throw new GlobalException("房屋补偿的评估单价不在区间内");
|
}
|
Double totalArea = homeCompensationBO.calculateTotalArea();
|
homeAmount = totalArea * evaluationPrice;
|
homeCompensationBO.setEvaluationPrice(evaluationPrice);
|
} else {
|
Double totalArea = homeCompensationBO.calculateTotalArea();
|
homeAmount = totalArea * (Objects.nonNull(evaluationPrice)
|
? evaluationPrice
|
: 0.0);
|
homeCompensationBO.setEvaluationPrice(evaluationPrice);
|
}
|
//@TODO区间不计算
|
// Integer totalArea = homeCompensationBO.calculateTotalArea();
|
// homeAmount = totalArea * homeCompensationBO.getEvaluationPrice();
|
} else {
|
Double totalArea = homeCompensationBO.calculateTotalArea();
|
homeAmount = totalArea * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
homeCompensationBO.setEvaluationPrice(Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard()));
|
}
|
}
|
}
|
}
|
}
|
if (Objects.nonNull(compensationVO.getHomeCompensationBO())) {
|
compensationVO.getHomeCompensationBO().setTotalBuildingArea(compensationVO.getHomeCompensationBO().calculateTotalArea());
|
compensationVO.getHomeCompensationBO().setTotalAmount(homeAmount);
|
}
|
//政策性补偿费
|
//补偿费总金额
|
Double policyAmount = 0.0;
|
PolicyCompensationBO policyCompensationBO = calculateCompensationBO.getPolicyCompensationBO();
|
Map<Integer, List<StateProjectCompensateStandard>> integerListMap = enableCompensateStandardMap.get(CompensateTypeEnum.POLICY_COMPENSATION_FEE.getCode());
|
if (Objects.nonNull(policyCompensationBO) && !CollectionUtils.isEmpty(integerListMap)) {
|
if (Objects.nonNull(policyCompensationBO.getTelephoneRelocation()) && Objects.nonNull(integerListMap.get(CompensationCategoryEnum.PHONE_RELOCATION.getCode()))) {
|
List<StateProjectCompensateStandard> stateProjectCompensateStandards = integerListMap.get(CompensationCategoryEnum.PHONE_RELOCATION.getCode());
|
StateProjectCompensateStandard stateProjectCompensateStandard;
|
if (HouseUsingTypeEnum.PERSONAL_HOUSE.getValue().equals(houseUsingType)) {
|
stateProjectCompensateStandard = stateProjectCompensateStandards.stream().filter(e -> e.getSpecification().equals("住宅")).findFirst().get();
|
} 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
|
policyAmount = policyAmount + telephoneRelocationAmount;
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policyCompensationBO.getTelephoneRelocationAmount()) && policyCompensationBO.getTelephoneRelocationAmount() != 0 &&
|
((policyCompensationBO.getTelephoneRelocationAmount() / policyCompensationBO.getTelephoneRelocation()) > end
|
|| (policyCompensationBO.getTelephoneRelocationAmount() / policyCompensationBO.getTelephoneRelocation()) < start)) {
|
throw new GlobalException("政策性补偿的电话移机单价不在区间内");
|
}
|
telephoneRelocationAmount = policyCompensationBO.getTelephoneRelocationAmount();
|
} else {
|
telephoneRelocationAmount = policyCompensationBO.getTelephoneRelocationAmount();
|
}
|
} else {
|
telephoneRelocationAmount = policyCompensationBO.getTelephoneRelocation() * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
|
compensationVO.getPolicyCompensationBO().setTelephoneRelocationAmount(telephoneRelocationAmount);
|
policyAmount = policyAmount + (telephoneRelocationAmount == null ? 0.0 : telephoneRelocationAmount);
|
;
|
}
|
}
|
// 有线电视迁装
|
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
|
policyAmount = policyAmount + cableTVRelocationAmount;
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policyCompensationBO.getCableTVRelocationAmount()) && policyCompensationBO.getCableTVRelocationAmount() != 0 && (
|
(policyCompensationBO.getCableTVRelocationAmount() / policyCompensationBO.getCableTVRelocation()) > end
|
|| (policyCompensationBO.getCableTVRelocationAmount() / policyCompensationBO.getCableTVRelocation()) < start)) {
|
throw new GlobalException("政策性补偿的有线电视迁装费用单价不在区间内");
|
}
|
cableTVRelocationAmount = policyCompensationBO.getCableTVRelocationAmount();
|
} else {
|
cableTVRelocationAmount = policyCompensationBO.getCableTVRelocationAmount();
|
}
|
} else {
|
cableTVRelocationAmount = policyCompensationBO.getCableTVRelocation() * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
|
compensationVO.getPolicyCompensationBO().setCableTVRelocationAmount(cableTVRelocationAmount);
|
policyAmount = policyAmount + (cableTVRelocationAmount == null ? 0.0 : cableTVRelocationAmount);
|
;
|
}
|
}
|
// 宽带迁装
|
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
|
policyAmount = policyAmount + broadbandRelocationAmount;
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policyCompensationBO.getBroadbandRelocationAmount()) && policyCompensationBO.getBroadbandRelocationAmount() != 0 && (
|
(policyCompensationBO.getBroadbandRelocationAmount() / policyCompensationBO.getBroadbandRelocation()) > end
|
|| (policyCompensationBO.getBroadbandRelocationAmount() / policyCompensationBO.getBroadbandRelocation()) < start)) {
|
throw new GlobalException("政策性补偿的宽带迁装费用单价不在区间内");
|
}
|
broadbandRelocationAmount = policyCompensationBO.getBroadbandRelocationAmount();
|
} else {
|
broadbandRelocationAmount = policyCompensationBO.getBroadbandRelocationAmount();
|
}
|
} else {
|
broadbandRelocationAmount = policyCompensationBO.getBroadbandRelocation() * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
|
compensationVO.getPolicyCompensationBO().setBroadbandRelocationAmount(broadbandRelocationAmount);
|
policyAmount = policyAmount + (broadbandRelocationAmount == null ? 0.0 : broadbandRelocationAmount);
|
;
|
}
|
}
|
// 空调移机
|
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
|
policyAmount = policyAmount + airConditionerRelocationAmount;
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policyCompensationBO.getAirConditionerRelocationAmount()) && policyCompensationBO.getAirConditionerRelocationAmount() != 0 && (
|
(policyCompensationBO.getAirConditionerRelocationAmount() / policyCompensationBO.getAirConditionerRelocation()) > end
|
|| (policyCompensationBO.getAirConditionerRelocationAmount() / policyCompensationBO.getAirConditionerRelocation()) < start)) {
|
throw new GlobalException("政策性补偿的空调移机费用单价不在区间内");
|
}
|
airConditionerRelocationAmount = policyCompensationBO.getAirConditionerRelocationAmount();
|
} else {
|
airConditionerRelocationAmount = policyCompensationBO.getAirConditionerRelocationAmount();
|
}
|
} else {
|
airConditionerRelocationAmount = policyCompensationBO.getAirConditionerRelocation() * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
|
compensationVO.getPolicyCompensationBO().setAirConditionerRelocationAmount(airConditionerRelocationAmount);
|
policyAmount = policyAmount + (airConditionerRelocationAmount == null ? 0.0 : airConditionerRelocationAmount);
|
;
|
}
|
}
|
// 一户一表
|
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
|
policyAmount = policyAmount + individualMeterInstallationAmount;
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policyCompensationBO.getIndividualMeterInstallationAmount()) && policyCompensationBO.getIndividualMeterInstallationAmount() != 0 && (
|
(policyCompensationBO.getIndividualMeterInstallationAmount() / policyCompensationBO.getIndividualMeterInstallation()) > end
|
|| (policyCompensationBO.getIndividualMeterInstallationAmount() / policyCompensationBO.getIndividualMeterInstallation()) < start)) {
|
throw new GlobalException("政策性补偿的一户一表费用单价不在区间内");
|
}
|
individualMeterInstallationAmount = policyCompensationBO.getIndividualMeterInstallationAmount();
|
} else {
|
individualMeterInstallationAmount = policyCompensationBO.getIndividualMeterInstallationAmount();
|
}
|
} else {
|
individualMeterInstallationAmount = policyCompensationBO.getIndividualMeterInstallation() * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
|
|
compensationVO.getPolicyCompensationBO().setIndividualMeterInstallationAmount(individualMeterInstallationAmount);
|
policyAmount = policyAmount + (individualMeterInstallationAmount == null ? 0.0 : individualMeterInstallationAmount);
|
;
|
}
|
}
|
// 天然气初装
|
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();
|
Double gasInitialInstallationAmount = 0.0;
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
policyAmount = policyAmount + gasInitialInstallationAmount;
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policyCompensationBO.getGasInitialInstallationAmount()) && policyCompensationBO.getGasInitialInstallationAmount() != 0 && (
|
(policyCompensationBO.getGasInitialInstallationAmount() / policyCompensationBO.getGasInitialInstallation()) > end
|
|| (policyCompensationBO.getGasInitialInstallationAmount() / policyCompensationBO.getGasInitialInstallation()) < start)) {
|
throw new GlobalException("政策性补偿的天然气初装费用单价不在区间内");
|
}
|
gasInitialInstallationAmount = policyCompensationBO.getGasInitialInstallationAmount();
|
} else {
|
gasInitialInstallationAmount = policyCompensationBO.getGasInitialInstallationAmount();
|
}
|
} else {
|
gasInitialInstallationAmount = policyCompensationBO.getGasInitialInstallation() * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
|
compensationVO.getPolicyCompensationBO().setGasInitialInstallationAmount(gasInitialInstallationAmount);
|
policyAmount = policyAmount + (gasInitialInstallationAmount == null ? 0.0 : gasInitialInstallationAmount);
|
;
|
}
|
}
|
}
|
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();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst()) && StringUtils.isNotBlank(policySubsidyBO.getUnitPrice())) {
|
if (Double.parseDouble(policySubsidyBO.getUnitPrice()) < start || Double.parseDouble(policySubsidyBO.getUnitPrice()) > end) {
|
throw new GlobalException("政策性补助的住宅临时安置补助费用单价不在区间内");
|
}
|
Double specification = Double.parseDouble(policySubsidyBO.getUnitPrice());
|
policySubsidyAmount = Double.parseDouble(policySubsidyBO.getUnitPrice()) * policySubsidyBO.getIssuanceMonths() * homeCompensationBO.calculateTotalArea();
|
compensationVO.getPolicySubsidyBO().setUnitPrice(String.valueOf(specification));
|
} else {
|
if (StringUtils.isNotBlank(policySubsidyBO.getUnitPrice()) && !policySubsidyBO.getUnitPrice().contains("-")) {
|
policySubsidyAmount = Double.parseDouble(policySubsidyBO.getUnitPrice()) * policySubsidyBO.getIssuanceMonths() * homeCompensationBO.calculateTotalArea();
|
compensationVO.getPolicySubsidyBO().setUnitPrice(policySubsidyBO.getUnitPrice());
|
}
|
}
|
} else {
|
|
policySubsidyAmount = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard()) * policySubsidyBO.getIssuanceMonths() * homeCompensationBO.calculateTotalArea();
|
compensationVO.getPolicySubsidyBO().setUnitPrice(stateProjectCompensateStandard.getCompensateStandard());
|
|
}
|
}
|
}
|
// 非住宅停产、停业经济损失补助费
|
List<StateProjectCompensateStandard> nonResidentialEconomicLossAllowance = policySubsidyMap.get(CompensationCategoryEnum.NON_RESIDENTIAL_ECONOMIC_LOSS_ALLOWANCE.getCode());
|
if (!CollectionUtils.isEmpty(nonResidentialEconomicLossAllowance)) {
|
StateProjectCompensateStandard stateProjectCompensateStandard = nonResidentialEconomicLossAllowance.stream().findFirst().get();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount()) && (policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount() < start || policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount() > end)) {
|
throw new GlobalException("政策性补助的 非住宅停产、停业经济损失补助费用金额不在区间内");
|
}
|
nonResidentialEconomicLossAllowanceAmount = policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount();
|
compensationVO.getPolicySubsidyBO().setNonResidentialEconomicLossAllowanceAmount(nonResidentialEconomicLossAllowanceAmount);
|
} else {
|
nonResidentialEconomicLossAllowanceAmount = policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount();
|
compensationVO.getPolicySubsidyBO().setNonResidentialEconomicLossAllowanceAmount(nonResidentialEconomicLossAllowanceAmount);
|
}
|
} else {
|
nonResidentialEconomicLossAllowanceAmount = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
compensationVO.getPolicySubsidyBO().setNonResidentialEconomicLossAllowanceAmount(nonResidentialEconomicLossAllowanceAmount);
|
}
|
}
|
}
|
// 搬家补助费
|
List<StateProjectCompensateStandard> movingAllowance = policySubsidyMap.get(CompensationCategoryEnum.MOVING_ALLOWANCE.getCode());
|
if (!CollectionUtils.isEmpty(movingAllowance)) {
|
StateProjectCompensateStandard stateProjectCompensateStandard = movingAllowance.stream().findFirst().get();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policySubsidyBO.getMovingAllowanceAmount()) && (policySubsidyBO.getMovingAllowanceAmount() < start || policySubsidyBO.getMovingAllowanceAmount() > end)) {
|
throw new GlobalException("政策性补助的搬家补助费用不在区间内");
|
}
|
movingAllowanceAmount = policySubsidyBO.getMovingAllowanceAmount();
|
compensationVO.getPolicySubsidyBO().setMovingAllowanceAmount(movingAllowanceAmount);
|
} else {
|
movingAllowanceAmount = policySubsidyBO.getMovingAllowanceAmount();
|
compensationVO.getPolicySubsidyBO().setMovingAllowanceAmount(movingAllowanceAmount);
|
}
|
} else {
|
movingAllowanceAmount = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
compensationVO.getPolicySubsidyBO().setMovingAllowanceAmount(movingAllowanceAmount);
|
}
|
}
|
}
|
}
|
} 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();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
// compensationVO.getPolicySubsidyBO().setUnitPrice(String.valueOf(0));
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst()) && StringUtils.isNotBlank(policySubsidyBO.getUnitPrice())) {
|
if (Double.parseDouble(policySubsidyBO.getUnitPrice()) < start || Double.parseDouble(policySubsidyBO.getUnitPrice()) > end) {
|
throw new GlobalException("政策性补助的住宅临时安置补助费用单价不在区间内");
|
}
|
Double specification = Double.parseDouble(policySubsidyBO.getUnitPrice());
|
policySubsidyAmount = homeCompensationBO.calculateTotalArea() * specification;
|
compensationVO.getPolicySubsidyBO().setUnitPrice(String.valueOf(specification));
|
} else {
|
if (StringUtils.isNotBlank(policySubsidyBO.getUnitPrice()) &&!policySubsidyBO.getUnitPrice().contains("-") ) {
|
Double specification = Double.parseDouble(policySubsidyBO.getUnitPrice());
|
policySubsidyAmount = specification * homeCompensationBO.calculateTotalArea();
|
compensationVO.getPolicySubsidyBO().setUnitPrice(String.valueOf(specification));
|
}
|
}
|
} else {
|
Double specification = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
policySubsidyAmount = homeCompensationBO.calculateTotalArea() * specification;
|
compensationVO.getPolicySubsidyBO().setUnitPrice(String.valueOf(specification));
|
}
|
}
|
}
|
// 非住宅停产、停业经济损失补助费
|
List<StateProjectCompensateStandard> nonResidentialEconomicLossAllowance = policySubsidyMap.get(CompensationCategoryEnum.NON_RESIDENTIAL_ECONOMIC_LOSS_ALLOWANCE.getCode());
|
if (!CollectionUtils.isEmpty(nonResidentialEconomicLossAllowance)) {
|
StateProjectCompensateStandard stateProjectCompensateStandard = nonResidentialEconomicLossAllowance.stream().findFirst().get();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
// compensationVO.getPolicySubsidyBO().setNonResidentialEconomicLossAllowanceAmount(0);
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount())
|
&& (policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount() < start || policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount() > end)) {
|
throw new GlobalException("政策性补助的 非住宅停产、停业经济损失补助费用不在区间内");
|
}
|
nonResidentialEconomicLossAllowanceAmount = policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount();
|
compensationVO.getPolicySubsidyBO().setNonResidentialEconomicLossAllowanceAmount(nonResidentialEconomicLossAllowanceAmount);
|
} else {
|
nonResidentialEconomicLossAllowanceAmount = policySubsidyBO.getNonResidentialEconomicLossAllowanceAmount();
|
compensationVO.getPolicySubsidyBO().setNonResidentialEconomicLossAllowanceAmount(nonResidentialEconomicLossAllowanceAmount);
|
}
|
} else {
|
nonResidentialEconomicLossAllowanceAmount = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
compensationVO.getPolicySubsidyBO().setNonResidentialEconomicLossAllowanceAmount(nonResidentialEconomicLossAllowanceAmount);
|
}
|
}
|
}
|
// 搬家补助费
|
List<StateProjectCompensateStandard> movingAllowance = policySubsidyMap.get(CompensationCategoryEnum.MOVING_ALLOWANCE.getCode());
|
if (!CollectionUtils.isEmpty(movingAllowance)) {
|
StateProjectCompensateStandard stateProjectCompensateStandard = movingAllowance.stream().findFirst().get();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
// compensationVO.getPolicySubsidyBO().setMovingAllowanceAmount(0);
|
} else {
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policySubsidyBO.getMovingAllowanceAmount())
|
&& (policySubsidyBO.getMovingAllowanceAmount() < start || policySubsidyBO.getMovingAllowanceAmount() > end)) {
|
throw new GlobalException("政策性补助的搬家补助费用不在区间内");
|
}
|
movingAllowanceAmount = policySubsidyBO.getMovingAllowanceAmount();
|
compensationVO.getPolicySubsidyBO().setMovingAllowanceAmount(movingAllowanceAmount);
|
} else {
|
movingAllowanceAmount = policySubsidyBO.getMovingAllowanceAmount();
|
compensationVO.getPolicySubsidyBO().setMovingAllowanceAmount(movingAllowanceAmount);
|
}
|
} else {
|
movingAllowanceAmount = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
compensationVO.getPolicySubsidyBO().setMovingAllowanceAmount(movingAllowanceAmount);
|
}
|
}
|
}
|
}
|
}
|
|
//政策性补贴
|
//购房补贴
|
Double propertyManagementSubsidyAmount = null;
|
//物管费补贴
|
Double housingSubsidyAmount = null;
|
PolicySupplementBO policySupplementBO = calculateCompensationBO.getPolicySupplementBO();
|
if (Objects.isNull(calculateCompensationBO.getPolicySupplementBO())) {
|
calculateCompensationBO.setPolicySupplementBO(new PolicySupplementBO());
|
compensationVO.setPolicySupplementBO(new PolicySupplementBO());
|
policySupplementBO = calculateCompensationBO.getPolicySupplementBO();
|
}
|
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;
|
if (!CollectionUtils.isEmpty(stateProjectCompensateStandards)) {
|
stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
// compensationVO.getPolicySupplementBO().setPropertyManagementSubsidy(propertyManagementSubsidyAmount);
|
}
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
if (Objects.isNull(policySupplementBO.getPropertyManagementSubsidy())) {
|
|
} else {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
|
if (Objects.nonNull(policySupplementBO.getPropertyManagementSubsidy()) && ((policySupplementBO.getPropertyManagementSubsidy() / 5) / 12 > end
|
|| (policySupplementBO.getPropertyManagementSubsidy() / 5) / 12 < start)) {
|
throw new GlobalException("物管费补贴金额单价不在区间内");
|
}
|
double totalArea = homeCompensationBO.calculateTotalArea();
|
if (totalArea > 90) {
|
propertyManagementSubsidyAmount = policySupplementBO.getPropertyManagementSubsidy();
|
} else {
|
propertyManagementSubsidyAmount = policySupplementBO.getPropertyManagementSubsidy();
|
}
|
} else {
|
propertyManagementSubsidyAmount = policySupplementBO.getPropertyManagementSubsidy();
|
}
|
}
|
} else {
|
double totalArea = homeCompensationBO.calculateTotalArea();
|
if (totalArea > 90) {
|
propertyManagementSubsidyAmount = totalArea * 5 * 12 * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
} else {
|
propertyManagementSubsidyAmount = 90 * 5 * 12 * Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
}
|
|
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;
|
stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
compensationVO.getPolicySupplementBO().setHousingSubsidy(housingSubsidyAmount);
|
}
|
if (HouseUsingTypeEnum.PERSONAL_HOUSE.getValue().equals(houseUsingType)) {
|
stateProjectCompensateStandard = stateProjectCompensateStandards.stream().filter(e -> e.getSpecification().equals("住宅")).findFirst().get();
|
} else {
|
stateProjectCompensateStandard = stateProjectCompensateStandards.stream().filter(e -> e.getSpecification().equals("非住宅")).findFirst().get();
|
}
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
if (Objects.isNull(policySupplementBO.getHousingSubsidy())) {
|
|
} else {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(policySupplementBO.getHousingSubsidy()) && (policySupplementBO.getHousingSubsidy() > end || policySupplementBO.getHousingSubsidy() < start)) {
|
throw new GlobalException("购房补贴金额单价不在区间内");
|
}
|
housingSubsidyAmount = policySupplementBO.getHousingSubsidy();
|
} else {
|
housingSubsidyAmount = policySupplementBO.getHousingSubsidy();
|
}
|
}
|
} else {
|
housingSubsidyAmount = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
|
compensationVO.getPolicySupplementBO().setHousingSubsidy(housingSubsidyAmount);
|
|
}
|
}
|
// 提前搬迁奖励
|
Double earlyRelocationRewardAmount = null;
|
AwardBO awardBO = compensationVO.getAwardBO();
|
Map<Integer, List<StateProjectCompensateStandard>> earlyRelocationRewardMap = enableCompensateStandardMap.get(CompensateTypeEnum.EARLY_RELOCATION_REWARD.getCode());
|
if (Objects.isNull(compensationVO.getAwardBO())) {
|
calculateCompensationBO.setAwardBO(new AwardBO());
|
compensationVO.setAwardBO(new AwardBO());
|
awardBO = calculateCompensationBO.getAwardBO();
|
}
|
|
if (Objects.nonNull(awardBO) && !CollectionUtils.isEmpty(earlyRelocationRewardMap)) {
|
if (Objects.nonNull(policyCompensationBO.getTelephoneRelocation()) && Objects.nonNull(earlyRelocationRewardMap.get(CompensationCategoryEnum.EARLY_RELOCATION_BONUS.getCode()))) {
|
List<StateProjectCompensateStandard> stateProjectCompensateStandards = earlyRelocationRewardMap.get(CompensationCategoryEnum.EARLY_RELOCATION_BONUS.getCode());
|
StateProjectCompensateStandard stateProjectCompensateStandard;
|
|
stateProjectCompensateStandard = stateProjectCompensateStandards.stream().findFirst().get();
|
if (!checkCompensateStandard(stateProjectCompensateStandard)) {
|
// Skip further calculations or set default values to avoid computation
|
compensationVO.getAwardBO().setEarlyRelocationAwardAmount(earlyRelocationRewardAmount);
|
}
|
if (stateProjectCompensateStandard.getSubType().equals(2) && stateProjectCompensateStandard.getCompensateStandard().contains("-")) {
|
String[] split = stateProjectCompensateStandard.getCompensateStandard().split("-");
|
double start = Double.parseDouble(split[0]);
|
double end = Double.parseDouble(split[1]);
|
if (Objects.nonNull(calculateCompensationBO.getIsFirst()) && Boolean.TRUE.equals(calculateCompensationBO.getIsFirst())) {
|
if (Objects.nonNull(awardBO.getEarlyRelocationAwardAmount()) && (awardBO.getEarlyRelocationAwardAmount() > end || awardBO.getEarlyRelocationAwardAmount() < start)) {
|
throw new GlobalException("提前搬迁奖励的提前搬迁奖励单价不在区间内");
|
}
|
earlyRelocationRewardAmount = awardBO.getEarlyRelocationAwardAmount();
|
} else {
|
earlyRelocationRewardAmount = awardBO.getEarlyRelocationAwardAmount();
|
}
|
} else {
|
earlyRelocationRewardAmount = Double.parseDouble(stateProjectCompensateStandard.getCompensateStandard());
|
}
|
|
compensationVO.getAwardBO().setEarlyRelocationAwardAmount(earlyRelocationRewardAmount);
|
}
|
}
|
|
calculateCompensationBO.setPolicySubsidyBO(policySubsidyBO);
|
|
compensationVO.setTotalAmount(
|
safeAdd(policySubsidyAmount) +
|
safeAdd(policyAmount) +
|
safeAdd(homeAmount) +
|
safeAdd(nonResidentialEconomicLossAllowanceAmount) +
|
safeAdd(movingAllowanceAmount) +
|
safeAdd(earlyRelocationRewardAmount) +
|
safeAdd(housingSubsidyAmount) +
|
safeAdd(propertyManagementSubsidyAmount)
|
);
|
if (Objects.nonNull(compensationVO.getPolicySubsidyBO())) {
|
compensationVO.getPolicySubsidyBO().setAmount(policySubsidyAmount);
|
}
|
compensationVO.setTotalAmount(calculateTotalAmount(compensationVO));
|
RoundingUtil.roundDoubleFields(compensationVO);
|
return compensationVO;
|
}
|
|
private static boolean checkCompensateStandard(StateProjectCompensateStandard stateProjectCompensateStandard) {
|
if (Objects.isNull(stateProjectCompensateStandard) ||
|
Objects.isNull(stateProjectCompensateStandard.getCompensateStandard()) ||
|
Objects.isNull(stateProjectCompensateStandard.getSubType())) {
|
// Log a warning message instead of throwing an exception
|
System.out.println("Warning: 当前选择的标准未填写具体的单价或区间");
|
return false;
|
}
|
return true;
|
}
|
|
public double calculateTotalAmount(CalculateCompensationVO compensationVO) {
|
Double totalAmount = 0.0;
|
|
// 房屋补偿信息
|
if (compensationVO.getHomeCompensationBO() != null) {
|
HomeCompensationBO homeCompensation = compensationVO.getHomeCompensationBO();
|
if (homeCompensation.getTotalAmount() != null) {
|
totalAmount += homeCompensation.getTotalAmount();
|
}
|
}
|
|
// 政策性补偿信息
|
if (compensationVO.getPolicyCompensationBO() != null) {
|
PolicyCompensationBO policyCompensation = compensationVO.getPolicyCompensationBO();
|
totalAmount += safeAdd(policyCompensation.getTelephoneRelocationAmount());
|
totalAmount += safeAdd(policyCompensation.getCableTVRelocationAmount());
|
totalAmount += safeAdd(policyCompensation.getAirConditionerRelocationAmount());
|
totalAmount += safeAdd(policyCompensation.getBroadbandRelocationAmount());
|
totalAmount += safeAdd(policyCompensation.getIndividualMeterInstallationAmount());
|
totalAmount += safeAdd(policyCompensation.getGasInitialInstallationAmount());
|
}
|
|
// 政策性补助信息
|
if (compensationVO.getPolicySubsidyBO() != null) {
|
PolicySubsidyBO policySubsidy = compensationVO.getPolicySubsidyBO();
|
totalAmount += safeAdd(policySubsidy.getNonResidentialEconomicLossAllowanceAmount());
|
totalAmount += safeAdd(policySubsidy.getMovingAllowanceAmount());
|
totalAmount += safeAdd(policySubsidy.getAmount());
|
}
|
|
// 政策性补贴信息
|
if (compensationVO.getPolicySupplementBO() != null) {
|
PolicySupplementBO policySupplement = compensationVO.getPolicySupplementBO();
|
totalAmount += safeAdd(policySupplement.getHousingSubsidy());
|
totalAmount += safeAdd(policySupplement.getPropertyManagementSubsidy());
|
}
|
|
// 提前搬迁奖励信息
|
if (compensationVO.getAwardBO() != null) {
|
AwardBO award = compensationVO.getAwardBO();
|
totalAmount += safeAdd(award.getEarlyRelocationAwardAmount());
|
}
|
|
// 处理 attachmentBuildBO 和 structureBO 中的金额
|
if (compensationVO.getAttachmentBuildBO() != null && !compensationVO.getAttachmentBuildBO().isEmpty()) {
|
for (JSONObject attachment : compensationVO.getAttachmentBuildBO()) {
|
Double amount = attachment.getDouble("amount");
|
if (amount != null) {
|
totalAmount += amount;
|
}
|
}
|
}
|
|
if (compensationVO.getStructureBO() != null && !compensationVO.getStructureBO().isEmpty()) {
|
for (JSONObject structure : compensationVO.getStructureBO()) {
|
Double amount = structure.getDouble("amount");
|
if (amount != null) {
|
totalAmount += amount;
|
}
|
}
|
}
|
|
// 其他补偿
|
if (compensationVO.getOtherCompensationBO() != null) {
|
OtherCompensationBO otherCompensation = compensationVO.getOtherCompensationBO();
|
if (otherCompensation.getTemporaryConstructionMaterialCompensation() != null) {
|
totalAmount += otherCompensation.getTemporaryConstructionMaterialCompensation();
|
}
|
if (otherCompensation.getParkingSpaceGarageCompensation() != null) {
|
totalAmount += otherCompensation.getParkingSpaceGarageCompensation();
|
}
|
if (otherCompensation.getAttachmentCompensation() != null) {
|
totalAmount += otherCompensation.getAttachmentCompensation();
|
}
|
if (otherCompensation.getBusinessCompensation() != null) {
|
totalAmount += otherCompensation.getBusinessCompensation();
|
}
|
if (otherCompensation.getOtherExpenses() != null) {
|
totalAmount += otherCompensation.getOtherExpenses();
|
}
|
}
|
return totalAmount;
|
}
|
|
private double safeAdd(Double value) {
|
return Objects.nonNull(value) ? value : 0.0;
|
}
|
|
|
@Override
|
public JSONObject getPersonsInfo(String stateHouseholdId) {
|
StateHousehold stateHousehold = stateHouseholdService.getById(stateHouseholdId);
|
List<StateHouseholdOwner> stateHouseholdOwners = this.list(Wrappers.lambdaQuery(StateHouseholdOwner.class)
|
.eq(StateHouseholdOwner::getStateHouseholdId, stateHouseholdId).eq(StateHouseholdOwner::getDelFlag, DeleteFlagEnum.NOT_DELETED.getKey()));
|
if (CollectionUtils.isEmpty(stateHouseholdOwners)) {
|
return new JSONObject();
|
}
|
if (org.apache.commons.lang3.StringUtils.isNoneBlank(stateHousehold.getAppendData())) {
|
CalculateCompensationBO calculateCompensationBO = JSON.parseObject(stateHousehold.getAppendData(), CalculateCompensationBO.class);
|
calculateCompensationBO.setStateHouseholdId(stateHouseholdId);
|
stateHousehold.setAppendData(JSON.toJSONString(calculateCompensation(calculateCompensationBO)));
|
}
|
|
Long personalOwnerNum = stateHouseholdOwners.stream().filter(stateHouseholdOwner -> Objects.nonNull(stateHouseholdOwner) && Objects.equals(stateHouseholdOwner.getOwnerType(), HouseOwnerTyeEnum.PERSONAL.getValue())).count();
|
List<StateHouseholdOwnerVO> voList = StateProjectConvert.INSTANCE.toStateHouseholdOwnerVOList(stateHouseholdOwners);
|
|
Map<String, SysDictData> sysDictDataMap = getStringSysDictDataMap();
|
|
voList.forEach(e -> {
|
String helpType = e.getHelpType();
|
String helpTypeStr = "";
|
|
if (helpType != null) {
|
helpTypeStr = Arrays.stream(helpType.split(","))
|
.map(sysDictDataMap::get)
|
.filter(Objects::nonNull)
|
.map(SysDictData::getDictLabel)
|
.collect(Collectors.joining("|"));
|
}
|
|
e.setHelpTypeStr(helpTypeStr);
|
});
|
|
String jsonString = JSON.toJSONString(new PageInfo<>(voList));
|
JSONObject jsonObject = JSON.parseObject(jsonString);
|
|
// 新增 helpType 和 isHelp 到外部
|
stateHouseholdOwners.stream()
|
.filter(e -> HouseOwnerTyeEnum.PERSONAL.getValue().equals(e.getOwnerType())
|
&& StringUtils.isNotBlank(e.getHelpType())
|
&& Objects.nonNull(e.getIsHelp()))
|
.findFirst()
|
.ifPresent(stateHouseholdOwner -> {
|
jsonObject.put("helpType", stateHouseholdOwner.getHelpType());
|
jsonObject.put("isHelp", stateHouseholdOwner.getIsHelp());
|
|
// 处理 helpTypeStr
|
String helpTypeStr = Arrays.stream(stateHouseholdOwner.getHelpType().split(","))
|
.map(sysDictDataMap::get)
|
.filter(Objects::nonNull)
|
.map(SysDictData::getDictLabel)
|
.collect(Collectors.joining("|"));
|
jsonObject.put("helpTypeStr", helpTypeStr);
|
});
|
|
|
// 将其他数据放入 data 对象
|
jsonObject.put("compensationType", stateHousehold.getCompensationType());
|
jsonObject.put("compensationTypeStr", CompensationCategoryEnum.getDescription(stateHousehold.getCompensationType()));
|
jsonObject.put("isAgreeToMove", stateHousehold.getAgreeMove());
|
jsonObject.put("fileBOList", JSON.parseArray(stateHousehold.getFileUrl()));
|
//补充备注
|
if (Objects.nonNull(stateHousehold.getAppendData()) && StringUtils.isNotBlank(stateHousehold.getAppendData())) {
|
String appendDataStr = stateHousehold.getAppendData();
|
CalculateCompensationVO calculateCompensationVO = JSON.parseObject(appendDataStr, CalculateCompensationVO.class);
|
jsonObject.put("remark", calculateCompensationVO.getRemark());
|
} else {
|
jsonObject.put("remark", "");
|
}
|
jsonObject.put("personalOwnerNum", personalOwnerNum);
|
return jsonObject;
|
}
|
|
@Override
|
public List<StateProjectCompensateStandard> getCalculateCompensation(String projectId) {
|
StateProjectCompensation compensation = stateProjectCompensationService.getById(projectId);
|
if (Objects.isNull(compensation)) {
|
throw new GlobalException("项目没有设置标准");
|
}
|
List<String> compensationNameList = new ArrayList<>();
|
compensationNameList.add(compensation.getPolicyCompensationType());
|
compensationNameList.add(compensation.getPolicySubsidy());
|
compensationNameList.add(compensation.getAward());
|
compensationNameList.add(compensation.getCompensationType());
|
compensationNameList.add(compensation.getPolicySupplement());
|
List<StateProjectCompensateStandard> enableCompensateStandard = stateProjectCompensateStandardService.getEnableCompensateStandard(compensationNameList);
|
if (CollectionUtils.isEmpty(enableCompensateStandard)) {
|
throw new GlobalException("未找到开启的标准");
|
}
|
return enableCompensateStandard;
|
}
|
|
private String getFullName(List<StateHouseholdOwner> householdVOS) {
|
if (CollectionUtils.isEmpty(householdVOS)) {
|
return "";
|
}
|
List<String> uniqueOwnerNames = householdVOS.stream().filter(data -> Objects.nonNull(data)
|
&& Objects.nonNull(data.getOwnerName()))
|
.map(StateHouseholdOwner::getOwnerName)
|
.distinct()
|
.collect(Collectors.toList());
|
return String.join("|", uniqueOwnerNames);
|
}
|
|
private Map<String, SysDictData> getStringSysDictDataMap() {
|
SysDictData sysDictData = new SysDictData();
|
sysDictData.setDictType("help_type");
|
List<SysDictData> list = dictDataService.getList(sysDictData);
|
Map<String, SysDictData> sysDictDataMap;
|
if (!CollectionUtils.isEmpty(list)) {
|
sysDictDataMap = list.stream().collect(Collectors.toMap(SysDictData::getDictValue, Function.identity()));
|
} else {
|
sysDictDataMap = new HashMap<>();
|
}
|
return sysDictDataMap;
|
}
|
|
}
|