项目成本测算总合约规划预算产值修改成合同产值(不含增值税)

This commit is contained in:
lzm
2026-05-29 17:40:32 +08:00
parent a29ebce743
commit 559f92e850
3 changed files with 15 additions and 9 deletions

View File

@@ -28,7 +28,7 @@ public class ProjectProfitRespVO {
@Schema(description = "结算合同总产值") @Schema(description = "结算合同总产值")
private BigDecimal finalSettlementAmount; private BigDecimal finalSettlementAmount;
@Schema(description = "项目预算产值总计,项目下所有合约规划的项目预算产值合计") @Schema(description = "合同产值(不含增值税),合同总产值 / 1.06")
private BigDecimal effectiveSettlementAmount; private BigDecimal effectiveSettlementAmount;
@Schema(description = "综合所人工成本") @Schema(description = "综合所人工成本")

View File

@@ -37,7 +37,7 @@ public class ProjectProfitSnapshotRespVO {
@Schema(description = "结算合同总产值") @Schema(description = "结算合同总产值")
private BigDecimal finalSettlementAmount; private BigDecimal finalSettlementAmount;
@Schema(description = "项目预算产值总计,项目下所有合约规划的项目预算产值合计") @Schema(description = "合同产值(不含增值税),合同总产值 / 1.06")
private BigDecimal effectiveSettlementAmount; private BigDecimal effectiveSettlementAmount;
@Schema(description = "综合所人工成本") @Schema(description = "综合所人工成本")

View File

@@ -47,6 +47,7 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
private static final BigDecimal ASSESSMENT_COEFFICIENT_EXCELLENT = new BigDecimal("1.0200"); private static final BigDecimal ASSESSMENT_COEFFICIENT_EXCELLENT = new BigDecimal("1.0200");
private static final BigDecimal ASSESSMENT_COEFFICIENT_QUALIFIED = new BigDecimal("1.0000"); private static final BigDecimal ASSESSMENT_COEFFICIENT_QUALIFIED = new BigDecimal("1.0000");
private static final BigDecimal ASSESSMENT_COEFFICIENT_NEEDS_IMPROVEMENT = new BigDecimal("0.9500"); private static final BigDecimal ASSESSMENT_COEFFICIENT_NEEDS_IMPROVEMENT = new BigDecimal("0.9500");
private static final BigDecimal VAT_INCLUDED_DIVISOR = new BigDecimal("1.06");
@Resource @Resource
private ProjectMapper projectMapper; private ProjectMapper projectMapper;
@@ -166,7 +167,6 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
private ProjectProfitRespVO buildProjectProfit(ProjectDO project, List<ProjectPlanningDO> planningList) { private ProjectProfitRespVO buildProjectProfit(ProjectDO project, List<ProjectPlanningDO> planningList) {
List<ProjectPlanningDO> safePlanningList = planningList == null ? Collections.emptyList() : planningList; List<ProjectPlanningDO> safePlanningList = planningList == null ? Collections.emptyList() : planningList;
BigDecimal projectBudgetOutputValue = ZERO_AMOUNT;
BigDecimal comprehensivePlanningAmount = ZERO_AMOUNT; BigDecimal comprehensivePlanningAmount = ZERO_AMOUNT;
BigDecimal specialSubcontractPlanningAmount = ZERO_AMOUNT; BigDecimal specialSubcontractPlanningAmount = ZERO_AMOUNT;
BigDecimal sourceCoopSubcontractPlanningAmount = ZERO_AMOUNT; BigDecimal sourceCoopSubcontractPlanningAmount = ZERO_AMOUNT;
@@ -176,7 +176,6 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
for (ProjectPlanningDO planning : safePlanningList) { for (ProjectPlanningDO planning : safePlanningList) {
BigDecimal planningBudgetOutputValue = amount(planning.getProjectBudgetOutputValue()); BigDecimal planningBudgetOutputValue = amount(planning.getProjectBudgetOutputValue());
projectBudgetOutputValue = projectBudgetOutputValue.add(planningBudgetOutputValue);
if (ProjectPlanningBizTypeConstants.isComprehensive(planning.getOwnershipType())) { if (ProjectPlanningBizTypeConstants.isComprehensive(planning.getOwnershipType())) {
comprehensivePlanningAmount = comprehensivePlanningAmount.add(planningBudgetOutputValue); comprehensivePlanningAmount = comprehensivePlanningAmount.add(planningBudgetOutputValue);
continue; continue;
@@ -200,12 +199,11 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
} }
BigDecimal contractAmount = amount(project.getContractAmount()); BigDecimal contractAmount = amount(project.getContractAmount());
BigDecimal contractAmountWithoutVat = taxExcludedAmount(contractAmount);
BigDecimal finalSettlementAmount = amount(project.getFinalSettlementAmount()); BigDecimal finalSettlementAmount = amount(project.getFinalSettlementAmount());
BigDecimal effectiveContractSettlementAmount = finalSettlementAmount.compareTo(BigDecimal.ZERO) > 0 BigDecimal effectiveContractSettlementAmount = finalSettlementAmount.compareTo(BigDecimal.ZERO) > 0
? finalSettlementAmount : contractAmount; ? finalSettlementAmount : contractAmount;
BigDecimal taxExcludedSettlementAmount = effectiveContractSettlementAmount.compareTo(BigDecimal.ZERO) == 0 BigDecimal taxExcludedSettlementAmount = taxExcludedAmount(effectiveContractSettlementAmount);
? ZERO_AMOUNT
: effectiveContractSettlementAmount.divide(new BigDecimal("1.06"), 2, RoundingMode.HALF_UP);
BigDecimal innovationOutputRate = project.getInnovationOutputRate() == null BigDecimal innovationOutputRate = project.getInnovationOutputRate() == null
? DEFAULT_INNOVATION_OUTPUT_RATE : ratio(project.getInnovationOutputRate()); ? DEFAULT_INNOVATION_OUTPUT_RATE : ratio(project.getInnovationOutputRate());
BigDecimal innovationOutputValue = contractAmount.compareTo(BigDecimal.ZERO) <= 0 BigDecimal innovationOutputValue = contractAmount.compareTo(BigDecimal.ZERO) <= 0
@@ -233,8 +231,8 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
respVO.setContractSignedFlag(project.getContractSignedFlag()); respVO.setContractSignedFlag(project.getContractSignedFlag());
respVO.setContractAmount(contractAmount); respVO.setContractAmount(contractAmount);
respVO.setFinalSettlementAmount(finalSettlementAmount); respVO.setFinalSettlementAmount(finalSettlementAmount);
// 历史字段名沿用 effectiveSettlementAmount当前业务含义为“项目预算产值总计”。 // 历史字段名沿用 effectiveSettlementAmount当前业务含义为“合同产值(不含增值税)”。
respVO.setEffectiveSettlementAmount(projectBudgetOutputValue.setScale(2, RoundingMode.HALF_UP)); respVO.setEffectiveSettlementAmount(contractAmountWithoutVat);
respVO.setComprehensivePlanningAmount(comprehensivePlanningAmount.setScale(2, RoundingMode.HALF_UP)); respVO.setComprehensivePlanningAmount(comprehensivePlanningAmount.setScale(2, RoundingMode.HALF_UP));
respVO.setSubcontractPlanningAmount(subcontractPlanningAmount.setScale(2, RoundingMode.HALF_UP)); respVO.setSubcontractPlanningAmount(subcontractPlanningAmount.setScale(2, RoundingMode.HALF_UP));
respVO.setSpecialSubcontractPlanningAmount(specialSubcontractPlanningAmount.setScale(2, RoundingMode.HALF_UP)); respVO.setSpecialSubcontractPlanningAmount(specialSubcontractPlanningAmount.setScale(2, RoundingMode.HALF_UP));
@@ -330,6 +328,14 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
return value == null ? ZERO_RATIO : value.setScale(4, RoundingMode.HALF_UP); return value == null ? ZERO_RATIO : value.setScale(4, RoundingMode.HALF_UP);
} }
private BigDecimal taxExcludedAmount(BigDecimal amount) {
BigDecimal value = amount(amount);
if (value.compareTo(BigDecimal.ZERO) == 0) {
return ZERO_AMOUNT;
}
return value.divide(VAT_INCLUDED_DIVISOR, 2, RoundingMode.HALF_UP);
}
private BigDecimal getAssessmentCoefficient(String assessmentResult) { private BigDecimal getAssessmentCoefficient(String assessmentResult) {
if ("优秀".equals(assessmentResult)) { if ("优秀".equals(assessmentResult)) {
return ASSESSMENT_COEFFICIENT_EXCELLENT; return ASSESSMENT_COEFFICIENT_EXCELLENT;