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

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 = "结算合同总产值")
private BigDecimal finalSettlementAmount;
@Schema(description = "项目预算产值总计,项目下所有合约规划的项目预算产值合计")
@Schema(description = "合同产值(不含增值税),合同总产值 / 1.06")
private BigDecimal effectiveSettlementAmount;
@Schema(description = "综合所人工成本")

View File

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