项目基础信息、合约规划、指导价法明细、项目成本测算字段调整、菜单名称调整、专业人员报表与导出内容修复

This commit is contained in:
lzm
2026-05-15 17:56:54 +08:00
parent bac721f5c4
commit 6b2b91249a
13 changed files with 111 additions and 61 deletions

View File

@@ -22,7 +22,7 @@ public class ProjectPlanningGuideDetailRespVO {
@Schema(description = "设计部位") @Schema(description = "设计部位")
private String designPart; private String designPart;
@Schema(description = "建筑类型") @Schema(description = "设计内容/设计类型")
private String buildingType; private String buildingType;
@Schema(description = "设计面积") @Schema(description = "设计面积")

View File

@@ -22,9 +22,9 @@ public class ProjectPlanningGuideDetailSaveReqVO {
@Size(max = 20, message = "设计部位长度不能超过 20 个字符") @Size(max = 20, message = "设计部位长度不能超过 20 个字符")
private String designPart; private String designPart;
@Schema(description = "建筑类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "住宅") @Schema(description = "设计内容/设计类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "住宅")
@NotBlank(message = "建筑类型不能为空") @NotBlank(message = "设计内容/设计类型不能为空")
@Size(max = 100, message = "建筑类型长度不能超过 100 个字符") @Size(max = 100, message = "设计内容/设计类型长度不能超过 100 个字符")
private String buildingType; private String buildingType;
@Schema(description = "设计面积", requiredMode = Schema.RequiredMode.REQUIRED, example = "12000") @Schema(description = "设计面积", requiredMode = Schema.RequiredMode.REQUIRED, example = "12000")

View File

@@ -22,25 +22,31 @@ public class ProjectProfitRespVO {
@Schema(description = "是否签订合同") @Schema(description = "是否签订合同")
private Boolean contractSignedFlag; private Boolean contractSignedFlag;
@Schema(description = "合同产值") @Schema(description = "合同产值")
private BigDecimal contractAmount; private BigDecimal contractAmount;
@Schema(description = "最终结算金额") @Schema(description = "结算合同总产值")
private BigDecimal finalSettlementAmount; private BigDecimal finalSettlementAmount;
@Schema(description = "有效结算金额,最终结算金额大于 0 时取最终结算金额,否则取合同产值") @Schema(description = "项目预算产值总计,结算合同总产值大于 0 时取结算合同总产值,否则取合同产值")
private BigDecimal effectiveSettlementAmount; private BigDecimal effectiveSettlementAmount;
@Schema(description = "综合所协作金额") @Schema(description = "综合所人工成本")
private BigDecimal comprehensivePlanningAmount; private BigDecimal comprehensivePlanningAmount;
@Schema(description = "业分包金额") @Schema(description = "项/源头合作分包人工成本合计")
private BigDecimal subcontractPlanningAmount; private BigDecimal subcontractPlanningAmount;
@Schema(description = "业所产值") @Schema(description = "项分包人工成本")
private BigDecimal specialSubcontractPlanningAmount;
@Schema(description = "源头合作分包人工成本")
private BigDecimal sourceCoopSubcontractPlanningAmount;
@Schema(description = "专业所考核产值")
private BigDecimal majorOutputValue; private BigDecimal majorOutputValue;
@Schema(description = "专业所预计绩效") @Schema(description = "专业所人工成本")
private BigDecimal majorExpectedPerformance; private BigDecimal majorExpectedPerformance;
@Schema(description = "科创产值比例") @Schema(description = "科创产值比例")
@@ -52,10 +58,10 @@ public class ProjectProfitRespVO {
@Schema(description = "其他成本") @Schema(description = "其他成本")
private BigDecimal otherCost; private BigDecimal otherCost;
@Schema(description = "盈亏值") @Schema(description = "预算盈亏值")
private BigDecimal profitLossValue; private BigDecimal profitLossValue;
@Schema(description = "盈亏百分比") @Schema(description = "预算盈亏百分比")
private BigDecimal profitLossRate; private BigDecimal profitLossRate;
@Schema(description = "项目开始年度") @Schema(description = "项目开始年度")

View File

@@ -34,12 +34,12 @@ public class ProjectRespVO {
@ExcelProperty("是否签订合同") @ExcelProperty("是否签订合同")
private Boolean contractSignedFlag; private Boolean contractSignedFlag;
@Schema(description = "合同产值", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "合同产值", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("合同产值") @ExcelProperty("合同产值")
private BigDecimal contractAmount; private BigDecimal contractAmount;
@Schema(description = "工程总面积", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "建筑面积", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("工程总面积") @ExcelProperty("建筑面积")
private BigDecimal totalConstructionArea; private BigDecimal totalConstructionArea;
@Schema(description = "建设单位") @Schema(description = "建设单位")
@@ -71,8 +71,8 @@ public class ProjectRespVO {
@ExcelProperty("工程类型") @ExcelProperty("工程类型")
private String projectType; private String projectType;
@Schema(description = "工程类别") @Schema(description = "设计类型")
@ExcelProperty("工程类别") @ExcelProperty("设计类型")
private String projectCategory; private String projectCategory;
@Schema(description = "项目开始年度") @Schema(description = "项目开始年度")
@@ -95,8 +95,8 @@ public class ProjectRespVO {
@Schema(description = "中止原因") @Schema(description = "中止原因")
private String terminateReason; private String terminateReason;
@Schema(description = "最终结算金额") @Schema(description = "结算合同总产值")
@ExcelProperty("最终结算金额") @ExcelProperty("结算合同总产值")
private BigDecimal finalSettlementAmount; private BigDecimal finalSettlementAmount;
@Schema(description = "科创产值比例") @Schema(description = "科创产值比例")

View File

@@ -35,12 +35,12 @@ public class ProjectSaveReqVO {
@NotNull(message = "是否签订合同不能为空") @NotNull(message = "是否签订合同不能为空")
private Boolean contractSignedFlag; private Boolean contractSignedFlag;
@Schema(description = "合同产值", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000000") @Schema(description = "合同产值", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000000")
@NotNull(message = "合同产值不能为空") @NotNull(message = "合同产值不能为空")
private BigDecimal contractAmount; private BigDecimal contractAmount;
@Schema(description = "工程总面积", requiredMode = Schema.RequiredMode.REQUIRED, example = "30000") @Schema(description = "建筑面积", requiredMode = Schema.RequiredMode.REQUIRED, example = "30000")
@NotNull(message = "工程总面积不能为空") @NotNull(message = "建筑面积不能为空")
private BigDecimal totalConstructionArea; private BigDecimal totalConstructionArea;
@Schema(description = "建设单位", example = "XX 建设单位") @Schema(description = "建设单位", example = "XX 建设单位")
@@ -64,8 +64,8 @@ public class ProjectSaveReqVO {
@Size(max = 50, message = "工程类型长度不能超过 50 个字符") @Size(max = 50, message = "工程类型长度不能超过 50 个字符")
private String projectType; private String projectType;
@Schema(description = "工程类别", example = "住宅") @Schema(description = "设计类型", example = "住宅")
@Size(max = 50, message = "工程类别长度不能超过 50 个字符") @Size(max = 50, message = "设计类型长度不能超过 50 个字符")
private String projectCategory; private String projectCategory;
@Schema(description = "项目开始年度", requiredMode = Schema.RequiredMode.REQUIRED, example = "2026") @Schema(description = "项目开始年度", requiredMode = Schema.RequiredMode.REQUIRED, example = "2026")
@@ -84,7 +84,7 @@ public class ProjectSaveReqVO {
@Size(max = 255, message = "中止原因长度不能超过 255 个字符") @Size(max = 255, message = "中止原因长度不能超过 255 个字符")
private String terminateReason; private String terminateReason;
@Schema(description = "最终结算金额", example = "1200000") @Schema(description = "结算合同总产值", example = "1200000")
private BigDecimal finalSettlementAmount; private BigDecimal finalSettlementAmount;
@Schema(description = "科创产值比例", example = "0.0100") @Schema(description = "科创产值比例", example = "0.0100")

View File

@@ -40,11 +40,11 @@ public class ProjectDO extends TenantBaseDO {
*/ */
private Boolean contractSignedFlag; private Boolean contractSignedFlag;
/** /**
* 合同产值 * 合同产值
*/ */
private BigDecimal contractAmount; private BigDecimal contractAmount;
/** /**
* 工程总面积 * 建筑面积
*/ */
private BigDecimal totalConstructionArea; private BigDecimal totalConstructionArea;
/** /**
@@ -68,7 +68,7 @@ public class ProjectDO extends TenantBaseDO {
*/ */
private String projectType; private String projectType;
/** /**
* 工程类别 * 设计类型
*/ */
private String projectCategory; private String projectCategory;
/** /**
@@ -96,7 +96,7 @@ public class ProjectDO extends TenantBaseDO {
*/ */
private String terminateReason; private String terminateReason;
/** /**
* 最终结算金额 * 结算合同总产值
*/ */
private BigDecimal finalSettlementAmount; private BigDecimal finalSettlementAmount;
/** /**

View File

@@ -13,9 +13,11 @@ public final class ProjectPlanningBizTypeConstants {
public static final String OWNERSHIP_TYPE_MAJOR = "专业所"; public static final String OWNERSHIP_TYPE_MAJOR = "专业所";
public static final String OWNERSHIP_TYPE_COMPREHENSIVE = "综合所"; public static final String OWNERSHIP_TYPE_COMPREHENSIVE = "综合所";
public static final String OWNERSHIP_TYPE_SUBCONTRACT = "分包"; public static final String OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT = "分包";
public static final String OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT = "源头合作分包";
public static final String DESIGN_PART_REAL_ESTATE = "地上部分"; public static final String DESIGN_PART_REAL_ESTATE = "地上部分";
public static final String DESIGN_PART_UNDERGROUND = "地下部分"; public static final String DESIGN_PART_UNDERGROUND = "地下部分";
public static final String DESIGN_PART_OTHER = "其他";
public static final String CALCULATION_METHOD_GUIDANCE_PRICE = "指导价法"; public static final String CALCULATION_METHOD_GUIDANCE_PRICE = "指导价法";
public static final String CALCULATION_METHOD_CONTRACT_PRICE = "合同价法"; public static final String CALCULATION_METHOD_CONTRACT_PRICE = "合同价法";
@@ -28,7 +30,8 @@ public final class ProjectPlanningBizTypeConstants {
private static final Set<String> OWNERSHIP_TYPES = new HashSet<>(Arrays.asList( private static final Set<String> OWNERSHIP_TYPES = new HashSet<>(Arrays.asList(
OWNERSHIP_TYPE_MAJOR, OWNERSHIP_TYPE_MAJOR,
OWNERSHIP_TYPE_COMPREHENSIVE, OWNERSHIP_TYPE_COMPREHENSIVE,
OWNERSHIP_TYPE_SUBCONTRACT OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT,
OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT
)); ));
private static final Set<String> CALCULATION_METHODS = new HashSet<>(Arrays.asList( private static final Set<String> CALCULATION_METHODS = new HashSet<>(Arrays.asList(
@@ -39,7 +42,8 @@ public final class ProjectPlanningBizTypeConstants {
private static final Set<String> DESIGN_PARTS = new HashSet<>(Arrays.asList( private static final Set<String> DESIGN_PARTS = new HashSet<>(Arrays.asList(
DESIGN_PART_REAL_ESTATE, DESIGN_PART_REAL_ESTATE,
DESIGN_PART_UNDERGROUND DESIGN_PART_UNDERGROUND,
DESIGN_PART_OTHER
)); ));
private static final Set<String> VIRTUAL_CALCULATION_METHODS = new HashSet<>(Arrays.asList( private static final Set<String> VIRTUAL_CALCULATION_METHODS = new HashSet<>(Arrays.asList(
@@ -76,7 +80,15 @@ public final class ProjectPlanningBizTypeConstants {
} }
public static boolean isSubcontract(String value) { public static boolean isSubcontract(String value) {
return OWNERSHIP_TYPE_SUBCONTRACT.equals(value); return isSpecialSubcontract(value) || isSourceCoopSubcontract(value);
}
public static boolean isSpecialSubcontract(String value) {
return OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT.equals(value);
}
public static boolean isSourceCoopSubcontract(String value) {
return OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT.equals(value);
} }
public static boolean isGuidancePrice(String value) { public static boolean isGuidancePrice(String value) {

View File

@@ -81,7 +81,8 @@ 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 comprehensivePlanningAmount = ZERO_AMOUNT; BigDecimal comprehensivePlanningAmount = ZERO_AMOUNT;
BigDecimal subcontractPlanningAmount = ZERO_AMOUNT; BigDecimal specialSubcontractPlanningAmount = ZERO_AMOUNT;
BigDecimal sourceCoopSubcontractPlanningAmount = ZERO_AMOUNT;
BigDecimal majorOutputValue = ZERO_AMOUNT; BigDecimal majorOutputValue = ZERO_AMOUNT;
List<ProjectPlanningDO> majorPlanningList = safePlanningList.stream() List<ProjectPlanningDO> majorPlanningList = safePlanningList.stream()
.filter(planning -> ProjectPlanningBizTypeConstants.isMajor(planning.getOwnershipType())) .filter(planning -> ProjectPlanningBizTypeConstants.isMajor(planning.getOwnershipType()))
@@ -92,8 +93,12 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
comprehensivePlanningAmount = comprehensivePlanningAmount.add(amount(planning.getPlanningAmount())); comprehensivePlanningAmount = comprehensivePlanningAmount.add(amount(planning.getPlanningAmount()));
continue; continue;
} }
if (ProjectPlanningBizTypeConstants.isSubcontract(planning.getOwnershipType())) { if (ProjectPlanningBizTypeConstants.isSpecialSubcontract(planning.getOwnershipType())) {
subcontractPlanningAmount = subcontractPlanningAmount.add(amount(planning.getPlanningAmount())); specialSubcontractPlanningAmount = specialSubcontractPlanningAmount.add(amount(planning.getPlanningAmount()));
continue;
}
if (ProjectPlanningBizTypeConstants.isSourceCoopSubcontract(planning.getOwnershipType())) {
sourceCoopSubcontractPlanningAmount = sourceCoopSubcontractPlanningAmount.add(amount(planning.getPlanningAmount()));
continue; continue;
} }
if (ProjectPlanningBizTypeConstants.isMajor(planning.getOwnershipType())) { if (ProjectPlanningBizTypeConstants.isMajor(planning.getOwnershipType())) {
@@ -112,6 +117,7 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
? ZERO_AMOUNT ? ZERO_AMOUNT
: contractAmount.multiply(innovationOutputRate).setScale(2, RoundingMode.HALF_UP); : contractAmount.multiply(innovationOutputRate).setScale(2, RoundingMode.HALF_UP);
BigDecimal otherCost = amount(project.getOtherCost()); BigDecimal otherCost = amount(project.getOtherCost());
BigDecimal subcontractPlanningAmount = specialSubcontractPlanningAmount.add(sourceCoopSubcontractPlanningAmount);
BigDecimal profitLossValue = effectiveSettlementAmount BigDecimal profitLossValue = effectiveSettlementAmount
.subtract(comprehensivePlanningAmount) .subtract(comprehensivePlanningAmount)
.subtract(subcontractPlanningAmount) .subtract(subcontractPlanningAmount)
@@ -133,6 +139,8 @@ public class ProjectProfitServiceImpl implements ProjectProfitService {
respVO.setEffectiveSettlementAmount(effectiveSettlementAmount); respVO.setEffectiveSettlementAmount(effectiveSettlementAmount);
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.setSourceCoopSubcontractPlanningAmount(sourceCoopSubcontractPlanningAmount.setScale(2, RoundingMode.HALF_UP));
respVO.setMajorOutputValue(majorOutputValue.setScale(2, RoundingMode.HALF_UP)); respVO.setMajorOutputValue(majorOutputValue.setScale(2, RoundingMode.HALF_UP));
respVO.setMajorExpectedPerformance(majorExpectedPerformance); respVO.setMajorExpectedPerformance(majorExpectedPerformance);
respVO.setInnovationOutputRate(innovationOutputRate); respVO.setInnovationOutputRate(innovationOutputRate);

View File

@@ -269,11 +269,9 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
ProjectPlanningDO anchorPlanning = validatePlanningExists(reqVO.getPlanningId()); ProjectPlanningDO anchorPlanning = validatePlanningExists(reqVO.getPlanningId());
ProjectDO project = validateProjectExists(anchorPlanning.getProjectId()); ProjectDO project = validateProjectExists(anchorPlanning.getProjectId());
Integer reportYear = resolveExportYear(reqVO.getYear()); Integer reportYear = resolveExportYear(reqVO.getYear());
List<ProjectPlanningDO> planningList = sortPlanningList(projectPlanningMapper.selectListByProjectId(project.getId())); List<ProjectPlanningDO> planningList = Collections.singletonList(anchorPlanning);
Map<Long, List<ProjectPlanningQuarterDO>> quarterMap = getQuarterMap(planningList); Map<Long, List<ProjectPlanningQuarterDO>> quarterMap = getQuarterMap(planningList);
List<ProjectPlanningDO> relevantPlanningList = planningList.stream() List<ProjectPlanningDO> relevantPlanningList = getSpecialtyPersonRelevantPlanningList(anchorPlanning);
.filter(item -> hasYearAmount(quarterMap.get(item.getId()), reportYear))
.collect(Collectors.toList());
Map<Long, ProjectOutputSplitDO> outputSplitMap = getOutputSplitMap(relevantPlanningList); Map<Long, ProjectOutputSplitDO> outputSplitMap = getOutputSplitMap(relevantPlanningList);
Map<Long, List<SpecialtyRoleSplitRespVO>> roleSplitMap = getRoleSplitMap(relevantPlanningList); Map<Long, List<SpecialtyRoleSplitRespVO>> roleSplitMap = getRoleSplitMap(relevantPlanningList);
List<SpecialtyRoleSplitRespVO> anchorRoleList = List<SpecialtyRoleSplitRespVO> anchorRoleList =
@@ -513,11 +511,9 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
ProjectPlanningDO anchorPlanning = validatePlanningExists(reqVO.getPlanningId()); ProjectPlanningDO anchorPlanning = validatePlanningExists(reqVO.getPlanningId());
ProjectDO project = validateProjectExists(anchorPlanning.getProjectId()); ProjectDO project = validateProjectExists(anchorPlanning.getProjectId());
Integer reportYear = resolveExportYear(reqVO.getYear()); Integer reportYear = resolveExportYear(reqVO.getYear());
List<ProjectPlanningDO> planningList = sortPlanningList(projectPlanningMapper.selectListByProjectId(project.getId())); List<ProjectPlanningDO> planningList = Collections.singletonList(anchorPlanning);
Map<Long, List<ProjectPlanningQuarterDO>> quarterMap = getQuarterMap(planningList); Map<Long, List<ProjectPlanningQuarterDO>> quarterMap = getQuarterMap(planningList);
List<ProjectPlanningDO> relevantPlanningList = planningList.stream() List<ProjectPlanningDO> relevantPlanningList = getSpecialtyPersonRelevantPlanningList(anchorPlanning);
.filter(item -> hasYearAmount(quarterMap.get(item.getId()), reportYear))
.collect(Collectors.toList());
Map<Long, ProjectOutputSplitDO> outputSplitMap = getOutputSplitMap(relevantPlanningList); Map<Long, ProjectOutputSplitDO> outputSplitMap = getOutputSplitMap(relevantPlanningList);
Map<Long, List<SpecialtyRoleSplitRespVO>> roleSplitMap = getRoleSplitMap(relevantPlanningList); Map<Long, List<SpecialtyRoleSplitRespVO>> roleSplitMap = getRoleSplitMap(relevantPlanningList);
List<ProjectRolePersonDO> projectRolePersons = projectRolePersonMapper.selectListByProjectId(project.getId()); List<ProjectRolePersonDO> projectRolePersons = projectRolePersonMapper.selectListByProjectId(project.getId());
@@ -565,6 +561,13 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
return result; return result;
} }
private List<ProjectPlanningDO> getSpecialtyPersonRelevantPlanningList(ProjectPlanningDO anchorPlanning) {
if (anchorPlanning == null) {
return Collections.emptyList();
}
return Collections.singletonList(anchorPlanning);
}
@Override @Override
public ProjectOverviewPreviewRespVO getProjectOverviewPreview(ProjectOverviewExportReqVO reqVO) { public ProjectOverviewPreviewRespVO getProjectOverviewPreview(ProjectOverviewExportReqVO reqVO) {
return buildProjectOverviewPreviewResp(buildProjectOverviewExportData(reqVO)); return buildProjectOverviewPreviewResp(buildProjectOverviewExportData(reqVO));
@@ -933,7 +936,8 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
.in(ProjectPlanningDO::getOwnershipType, Arrays.asList( .in(ProjectPlanningDO::getOwnershipType, Arrays.asList(
ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_MAJOR, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_MAJOR,
ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE,
ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SUBCONTRACT ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT,
ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT
))); )));
} }
@@ -990,7 +994,8 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
.in(ProjectPlanningDO::getOwnershipType, Arrays.asList( .in(ProjectPlanningDO::getOwnershipType, Arrays.asList(
ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_MAJOR, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_MAJOR,
ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE,
ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SUBCONTRACT ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT,
ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT
))) )))
.stream() .stream()
.map(ProjectPlanningDO::getId) .map(ProjectPlanningDO::getId)
@@ -1234,11 +1239,15 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
planningGroup, ProjectPlanningBizTypeConstants.DESIGN_PART_REAL_ESTATE); planningGroup, ProjectPlanningBizTypeConstants.DESIGN_PART_REAL_ESTATE);
List<ProjectPlanningGuideDetailDO> undergroundPlanningList = filterBudgetPartPlanningList( List<ProjectPlanningGuideDetailDO> undergroundPlanningList = filterBudgetPartPlanningList(
planningGroup, ProjectPlanningBizTypeConstants.DESIGN_PART_UNDERGROUND); planningGroup, ProjectPlanningBizTypeConstants.DESIGN_PART_UNDERGROUND);
List<ProjectPlanningGuideDetailDO> otherPlanningList = filterBudgetPartPlanningList(
planningGroup, ProjectPlanningBizTypeConstants.DESIGN_PART_OTHER);
appendBudgetPartRows(rows, planning, planningContent, appendBudgetPartRows(rows, planning, planningContent,
ProjectPlanningBizTypeConstants.DESIGN_PART_REAL_ESTATE, groundPlanningList); ProjectPlanningBizTypeConstants.DESIGN_PART_REAL_ESTATE, groundPlanningList);
appendBudgetPartRows(rows, planning, planningContent, appendBudgetPartRows(rows, planning, planningContent,
ProjectPlanningBizTypeConstants.DESIGN_PART_UNDERGROUND, undergroundPlanningList); ProjectPlanningBizTypeConstants.DESIGN_PART_UNDERGROUND, undergroundPlanningList);
appendBudgetPartRows(rows, planning, planningContent,
ProjectPlanningBizTypeConstants.DESIGN_PART_OTHER, otherPlanningList);
rows.add(buildBudgetSummaryRow(ProjectBudgetExcelBuilder.BudgetRowType.PLANNING_TOTAL, rows.add(buildBudgetSummaryRow(ProjectBudgetExcelBuilder.BudgetRowType.PLANNING_TOTAL,
planning, planningContent, "总计", planningGroup)); planning, planningContent, "总计", planningGroup));
} }
@@ -1529,6 +1538,9 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
if (Objects.equals(designPart, ProjectPlanningBizTypeConstants.DESIGN_PART_UNDERGROUND)) { if (Objects.equals(designPart, ProjectPlanningBizTypeConstants.DESIGN_PART_UNDERGROUND)) {
return 2; return 2;
} }
if (Objects.equals(designPart, ProjectPlanningBizTypeConstants.DESIGN_PART_OTHER)) {
return 3;
}
return 9; return 9;
} }
@@ -1735,8 +1747,11 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
if (ProjectPlanningBizTypeConstants.isMajor(ownershipType)) { if (ProjectPlanningBizTypeConstants.isMajor(ownershipType)) {
return "六大专业考核产值"; return "六大专业考核产值";
} }
if (ProjectPlanningBizTypeConstants.isSubcontract(ownershipType)) { if (ProjectPlanningBizTypeConstants.isSpecialSubcontract(ownershipType)) {
return "分包产值"; return "分包产值";
}
if (ProjectPlanningBizTypeConstants.isSourceCoopSubcontract(ownershipType)) {
return "源头合作分包产值";
} }
if (ProjectPlanningBizTypeConstants.isComprehensive(ownershipType)) { if (ProjectPlanningBizTypeConstants.isComprehensive(ownershipType)) {
return "内部协作产值"; return "内部协作产值";
@@ -1749,13 +1764,16 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic
if (Objects.equals(outputType, "六大专业考核产值")) { if (Objects.equals(outputType, "六大专业考核产值")) {
return 1; return 1;
} }
if (Objects.equals(outputType, "分包产值")) { if (Objects.equals(outputType, "分包产值")) {
return 2; return 2;
} }
if (Objects.equals(outputType, "内部协作产值")) { if (Objects.equals(outputType, "源头合作分包产值")) {
return 3; return 3;
} }
return 4; if (Objects.equals(outputType, "内部协作产值")) {
return 4;
}
return 5;
} }
private String buildPlanningDisplayName(ProjectPlanningDO planning) { private String buildPlanningDisplayName(ProjectPlanningDO planning) {

View File

@@ -35,7 +35,7 @@ public class ProjectBudgetExcelBuilder extends AbstractProjectOutputExcelBuilder
private void buildBudgetSheet(Workbook workbook, ExportData data) { private void buildBudgetSheet(Workbook workbook, ExportData data) {
Sheet sheet = createSheet(workbook, BUDGET_SHEET_NAME, BUDGET_SHEET_FALLBACK_NAME); Sheet sheet = createSheet(workbook, BUDGET_SHEET_NAME, BUDGET_SHEET_FALLBACK_NAME);
setColumnWidths(sheet, 16, 14, 18, 16, 18, 14, 12, 12, 12, 18, 12, 14, 16); setColumnWidths(sheet, 16, 14, 22, 16, 18, 14, 12, 12, 12, 18, 12, 14, 16);
CellStyle titleStyle = createTitleStyle(workbook); CellStyle titleStyle = createTitleStyle(workbook);
CellStyle infoStyle = createInfoStyle(workbook); CellStyle infoStyle = createInfoStyle(workbook);
@@ -110,7 +110,7 @@ public class ProjectBudgetExcelBuilder extends AbstractProjectOutputExcelBuilder
setMergedRegionText(sheet, firstRow + 1, firstRow + 1, 7, 9, "调整系数", headerStyle); setMergedRegionText(sheet, firstRow + 1, firstRow + 1, 7, 9, "调整系数", headerStyle);
writeRow(sheet, firstRow + 2, headerStyle, (Object[]) new String[]{ writeRow(sheet, firstRow + 2, headerStyle, (Object[]) new String[]{
"规划内容", "设计部位", "建筑类型", "", "", "栋数 / 户型数", "规划内容", "设计部位", "设计内容/设计类型", "", "", "栋数 / 户型数",
"套图系数", "规模系数", "修改系数", "复杂系数 / 复杂等级", "", "", "" "套图系数", "规模系数", "修改系数", "复杂系数 / 复杂等级", "", "", ""
}); });
return rowIndex + 3; return rowIndex + 3;

View File

@@ -28,7 +28,8 @@ public class ProjectLeadQuarterOutputExcelBuilder extends AbstractProjectOutputE
private static final String DEFAULT_PROJECT_SIGNER = "项目经理/工程负责人(签名):"; private static final String DEFAULT_PROJECT_SIGNER = "项目经理/工程负责人(签名):";
private static final List<String> OUTPUT_TYPE_ORDER = Arrays.asList( private static final List<String> OUTPUT_TYPE_ORDER = Arrays.asList(
"六大专业考核产值", "六大专业考核产值",
"分包产值", "分包产值",
"源头合作分包产值",
"内部协作产值", "内部协作产值",
"其他产值" "其他产值"
); );

View File

@@ -36,14 +36,16 @@ public class ProjectQuarterOutputExcelBuilder extends AbstractProjectOutputExcel
private static final List<String> OUTPUT_TYPE_ORDER = Arrays.asList( private static final List<String> OUTPUT_TYPE_ORDER = Arrays.asList(
"六大专业考核产值", "六大专业考核产值",
"分包产值", "分包产值",
"源头合作分包产值",
"内部协作产值", "内部协作产值",
"其他产值" "其他产值"
); );
private static final List<String> FIXED_OUTPUT_TYPES = Arrays.asList( private static final List<String> FIXED_OUTPUT_TYPES = Arrays.asList(
"六大专业考核产值", "六大专业考核产值",
"分包产值", "分包产值",
"源头合作分包产值",
"内部协作产值" "内部协作产值"
); );

View File

@@ -534,12 +534,15 @@ public class SpecialtyPersonOutputExcelBuilder extends AbstractProjectOutputExce
if (Objects.equals(current, "六大专业考核产值")) { if (Objects.equals(current, "六大专业考核产值")) {
return 1; return 1;
} }
if (Objects.equals(current, "分包产值")) { if (Objects.equals(current, "分包产值")) {
return 2; return 2;
} }
if (Objects.equals(current, "内部协作产值")) { if (Objects.equals(current, "源头合作分包产值")) {
return 3; return 3;
} }
if (Objects.equals(current, "内部协作产值")) {
return 4;
}
return 9; return 9;
} }