From b7b23f7613a57cc3515b224f59b2b5ca2372fe2c Mon Sep 17 00:00:00 2001 From: lzm <2316711944@qq.com> Date: Thu, 21 May 2026 10:40:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9E=9A=E4=B8=BE=E6=9B=B4=E6=8D=A2=E3=80=81?= =?UTF-8?q?=E5=BD=92=E5=B1=9E=E7=B1=BB=E5=9E=8B=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../planning/vo/ProjectPlanningPageReqVO.java | 4 +- .../planning/vo/ProjectPlanningSaveReqVO.java | 10 +- .../ProjectPlanningGuideDetailSaveReqVO.java | 2 +- .../admin/profit/vo/ProjectProfitRespVO.java | 9 +- .../admin/project/vo/ProjectPageReqVO.java | 2 +- .../admin/project/vo/ProjectSaveReqVO.java | 2 +- .../module/tjt/enums/ErrorCodeConstants.java | 2 + .../tjt/enums/OutputSplitBizConstants.java | 74 ++++++------ .../ProjectPlanningBizTypeConstants.java | 106 ++++++++++-------- .../ProjectOutputSplitServiceImpl.java | 38 ++++--- .../planning/ProjectPlanningServiceImpl.java | 5 + .../profit/ProjectProfitServiceImpl.java | 10 +- .../service/project/ProjectServiceImpl.java | 24 ++-- .../ProjectOutputReportServiceImpl.java | 83 ++++++++------ .../ProjectLeadQuarterOutputExcelBuilder.java | 5 +- .../ProjectQuarterOutputExcelBuilder.java | 10 +- .../SpecialtyPersonOutputExcelBuilder.java | 9 +- 17 files changed, 229 insertions(+), 166 deletions(-) diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planning/vo/ProjectPlanningPageReqVO.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planning/vo/ProjectPlanningPageReqVO.java index 49a2a15..a4c550f 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planning/vo/ProjectPlanningPageReqVO.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planning/vo/ProjectPlanningPageReqVO.java @@ -18,10 +18,10 @@ public class ProjectPlanningPageReqVO extends PageParam { @Schema(description = "项目 ID", example = "1") private Long projectId; - @Schema(description = "归属类型", example = "专业所") + @Schema(description = "归属类型", example = "major") private String ownershipType; - @Schema(description = "产值计算方式", example = "指导价法") + @Schema(description = "产值计算方式", example = "guidance_price") private String calculationMethod; @Schema(description = "项目任务包,模糊匹配", example = "建筑") diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planning/vo/ProjectPlanningSaveReqVO.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planning/vo/ProjectPlanningSaveReqVO.java index a6b44c4..2a3f5aa 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planning/vo/ProjectPlanningSaveReqVO.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planning/vo/ProjectPlanningSaveReqVO.java @@ -24,12 +24,12 @@ public class ProjectPlanningSaveReqVO { @Schema(description = "排序", example = "0") private Integer sortNo; - @Schema(description = "归属类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "专业所") + @Schema(description = "归属类型:major/comprehensive/special_subcontract_major/special_subcontract_source_coop/special_subcontract_comprehensive", requiredMode = Schema.RequiredMode.REQUIRED, example = "major") @NotBlank(message = "归属类型不能为空") - @Size(max = 20, message = "归属类型长度不能超过 20 个字符") + @Size(max = 64, message = "归属类型长度不能超过 64 个字符") private String ownershipType; - @Schema(description = "产值计算方式,页面 2 维护", example = "指导价法") + @Schema(description = "产值计算方式:guidance_price/contract_price/virtual_output,页面 2 维护", example = "guidance_price") @Size(max = 30, message = "产值计算方式长度不能超过 30 个字符") private String calculationMethod; @@ -73,7 +73,7 @@ public class ProjectPlanningSaveReqVO { @Schema(description = "面积", example = "30000") private BigDecimal planningArea; - @Schema(description = "设计阶段", example = "方案设计") + @Schema(description = "设计阶段:scheme/construction_drawing/scheme_and_construction_drawing", example = "scheme") @Size(max = 50, message = "设计阶段长度不能超过 50 个字符") private String designStage; @@ -119,7 +119,7 @@ public class ProjectPlanningSaveReqVO { @Schema(description = "内部指导单价(元/m²)", example = "80.00") private BigDecimal internalGuidanceUnitPrice; - @Schema(description = "虚拟产值计算方式:指导单价法/指导总价法/工日法", example = "工日法") + @Schema(description = "虚拟产值计算方式:guidance_price/guidance_total_price/working_day", example = "working_day") @Size(max = 30, message = "虚拟产值计算方式长度不能超过 30 个字符") private String virtualCalculationMethod; diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planningguidedetail/vo/ProjectPlanningGuideDetailSaveReqVO.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planningguidedetail/vo/ProjectPlanningGuideDetailSaveReqVO.java index d27342f..2e6c95d 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planningguidedetail/vo/ProjectPlanningGuideDetailSaveReqVO.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/planningguidedetail/vo/ProjectPlanningGuideDetailSaveReqVO.java @@ -17,7 +17,7 @@ public class ProjectPlanningGuideDetailSaveReqVO { @Schema(description = "明细 ID", example = "1") private Long id; - @Schema(description = "设计部位", requiredMode = Schema.RequiredMode.REQUIRED, example = "地上部分") + @Schema(description = "设计部位:above_ground/underground/other", requiredMode = Schema.RequiredMode.REQUIRED, example = "above_ground") @NotBlank(message = "设计部位不能为空") @Size(max = 20, message = "设计部位长度不能超过 20 个字符") private String designPart; diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/profit/vo/ProjectProfitRespVO.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/profit/vo/ProjectProfitRespVO.java index 0924cf2..441deb8 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/profit/vo/ProjectProfitRespVO.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/profit/vo/ProjectProfitRespVO.java @@ -34,15 +34,18 @@ public class ProjectProfitRespVO { @Schema(description = "综合所人工成本") private BigDecimal comprehensivePlanningAmount; - @Schema(description = "专项/源头合作分包人工成本合计") + @Schema(description = "专项分包人工成本合计") private BigDecimal subcontractPlanningAmount; - @Schema(description = "专项分包人工成本") + @Schema(description = "专项分包-专业所人工成本") private BigDecimal specialSubcontractPlanningAmount; - @Schema(description = "源头合作分包人工成本") + @Schema(description = "专项分包-源头合作分包人工成本") private BigDecimal sourceCoopSubcontractPlanningAmount; + @Schema(description = "专项分包-综合所人工成本") + private BigDecimal comprehensiveSubcontractPlanningAmount; + @Schema(description = "专业所考核产值") private BigDecimal majorOutputValue; diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/project/vo/ProjectPageReqVO.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/project/vo/ProjectPageReqVO.java index 6223da4..82c67cb 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/project/vo/ProjectPageReqVO.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/project/vo/ProjectPageReqVO.java @@ -24,7 +24,7 @@ public class ProjectPageReqVO extends PageParam { @Schema(description = "项目开始年度", example = "2026") private Integer projectStartYear; - @Schema(description = "项目状态", example = "进行中") + @Schema(description = "项目状态:in_progress/completed/paused/terminated", example = "in_progress") private String projectStatus; @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/project/vo/ProjectSaveReqVO.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/project/vo/ProjectSaveReqVO.java index 135fe2d..60cea41 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/project/vo/ProjectSaveReqVO.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/controller/admin/project/vo/ProjectSaveReqVO.java @@ -72,7 +72,7 @@ public class ProjectSaveReqVO { @NotNull(message = "项目开始年度不能为空") private Integer projectStartYear; - @Schema(description = "项目状态", example = "进行中") + @Schema(description = "项目状态:in_progress/completed/paused/terminated", example = "in_progress") @Size(max = 20, message = "项目状态长度不能超过 20 个字符") private String projectStatus; diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/ErrorCodeConstants.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/ErrorCodeConstants.java index 1e736d6..7bdc56e 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/ErrorCodeConstants.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/ErrorCodeConstants.java @@ -11,6 +11,7 @@ public interface ErrorCodeConstants { // ========== 项目管理 1-020-001-000 ========== ErrorCode PROJECT_NOT_EXISTS = new ErrorCode(1_020_001_000, "项目不存在"); + ErrorCode PROJECT_STATUS_INVALID = new ErrorCode(1_020_001_001, "项目状态不正确"); // ========== 合约规划管理 1-020-002-000 ========== ErrorCode PROJECT_PLANNING_NOT_EXISTS = new ErrorCode(1_020_002_000, "合约规划不存在"); @@ -25,6 +26,7 @@ public interface ErrorCodeConstants { ErrorCode PROJECT_PLANNING_DESIGN_PART_INVALID = new ErrorCode(1_020_002_009, "设计部位不正确"); ErrorCode PROJECT_PLANNING_GUIDE_DETAIL_NOT_EXISTS = new ErrorCode(1_020_002_010, "指导价法明细不存在"); ErrorCode PROJECT_PLANNING_GUIDE_DETAIL_SCENE_INVALID = new ErrorCode(1_020_002_011, "当前合约规划不是专业所指导价法,不能维护指导价法明细"); + ErrorCode PROJECT_PLANNING_DESIGN_STAGE_INVALID = new ErrorCode(1_020_002_012, "设计阶段不正确"); // ========== 季度分配管理 1-020-003-000 ========== ErrorCode PROJECT_PLANNING_QUARTER_NOT_EXISTS = new ErrorCode(1_020_003_000, "季度分配明细不存在"); diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/OutputSplitBizConstants.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/OutputSplitBizConstants.java index 37001b0..8fb9e7f 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/OutputSplitBizConstants.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/OutputSplitBizConstants.java @@ -15,55 +15,55 @@ import java.util.Map; */ public final class OutputSplitBizConstants { - public static final String SPECIALTY_PROJECT_LEAD = "project_lead"; - public static final String SPECIALTY_ARCH = "arch"; - public static final String SPECIALTY_DECOR = "decor"; - public static final String SPECIALTY_STRUCT = "struct"; - public static final String SPECIALTY_WATER = "water"; - public static final String SPECIALTY_ELEC = "elec"; - public static final String SPECIALTY_HVAC = "hvac"; - public static final String SPECIALTY_DIGITAL = "digital"; + public static final String SPECIALTY_PROJECT_LEAD = OutputSplitSpecialtyEnum.PROJECT_LEAD.getCode(); + public static final String SPECIALTY_ARCH = OutputSplitSpecialtyEnum.ARCH.getCode(); + public static final String SPECIALTY_DECOR = OutputSplitSpecialtyEnum.DECOR.getCode(); + public static final String SPECIALTY_STRUCT = OutputSplitSpecialtyEnum.STRUCT.getCode(); + public static final String SPECIALTY_WATER = OutputSplitSpecialtyEnum.WATER.getCode(); + public static final String SPECIALTY_ELEC = OutputSplitSpecialtyEnum.ELEC.getCode(); + public static final String SPECIALTY_HVAC = OutputSplitSpecialtyEnum.HVAC.getCode(); + public static final String SPECIALTY_DIGITAL = OutputSplitSpecialtyEnum.DIGITAL.getCode(); - public static final String ROLE_DIRECTOR = "director"; - public static final String ROLE_CHECK = "check"; - public static final String ROLE_REVIEW = "review"; - public static final String ROLE_APPROVE = "approve"; - public static final String ROLE_DESIGN = "design"; - public static final String ROLE_PROJECT_MANAGER = "project_manager"; - public static final String ROLE_ENGINEERING_PRINCIPAL = "engineering_principal"; + public static final String ROLE_DIRECTOR = OutputSplitRoleEnum.DIRECTOR.getCode(); + public static final String ROLE_CHECK = OutputSplitRoleEnum.CHECK.getCode(); + public static final String ROLE_REVIEW = OutputSplitRoleEnum.REVIEW.getCode(); + public static final String ROLE_APPROVE = OutputSplitRoleEnum.APPROVE.getCode(); + public static final String ROLE_DESIGN = OutputSplitRoleEnum.DESIGN.getCode(); + public static final String ROLE_PROJECT_MANAGER = OutputSplitRoleEnum.PROJECT_MANAGER.getCode(); + public static final String ROLE_ENGINEERING_PRINCIPAL = OutputSplitRoleEnum.ENGINEERING_PRINCIPAL.getCode(); public static final List ASSIGNMENT_SPECIALTY_ITEMS = Arrays.asList( - new SpecialtyItem(SPECIALTY_PROJECT_LEAD, "项目经理/工程负责人", 0), - new SpecialtyItem(SPECIALTY_ARCH, "建筑", 1), - new SpecialtyItem(SPECIALTY_DECOR, "装饰", 2), - new SpecialtyItem(SPECIALTY_STRUCT, "结构", 3), - new SpecialtyItem(SPECIALTY_WATER, "给排水", 4), - new SpecialtyItem(SPECIALTY_ELEC, "电气", 5), - new SpecialtyItem(SPECIALTY_HVAC, "暖通", 6), - new SpecialtyItem(SPECIALTY_DIGITAL, "数字化设计", 7) + new SpecialtyItem(SPECIALTY_PROJECT_LEAD, OutputSplitSpecialtyEnum.PROJECT_LEAD.getLabel(), 0), + new SpecialtyItem(SPECIALTY_ARCH, OutputSplitSpecialtyEnum.ARCH.getLabel(), 1), + new SpecialtyItem(SPECIALTY_DECOR, OutputSplitSpecialtyEnum.DECOR.getLabel(), 2), + new SpecialtyItem(SPECIALTY_STRUCT, OutputSplitSpecialtyEnum.STRUCT.getLabel(), 3), + new SpecialtyItem(SPECIALTY_WATER, OutputSplitSpecialtyEnum.WATER.getLabel(), 4), + new SpecialtyItem(SPECIALTY_ELEC, OutputSplitSpecialtyEnum.ELEC.getLabel(), 5), + new SpecialtyItem(SPECIALTY_HVAC, OutputSplitSpecialtyEnum.HVAC.getLabel(), 6), + new SpecialtyItem(SPECIALTY_DIGITAL, OutputSplitSpecialtyEnum.DIGITAL.getLabel(), 7) ); public static final List SPECIALTY_ITEMS = Arrays.asList( - new SpecialtyItem(SPECIALTY_ARCH, "建筑", 1), - new SpecialtyItem(SPECIALTY_DECOR, "装饰", 2), - new SpecialtyItem(SPECIALTY_STRUCT, "结构", 3), - new SpecialtyItem(SPECIALTY_WATER, "给排水", 4), - new SpecialtyItem(SPECIALTY_ELEC, "电气", 5), - new SpecialtyItem(SPECIALTY_HVAC, "暖通", 6), - new SpecialtyItem(SPECIALTY_DIGITAL, "数字化设计", 7) + new SpecialtyItem(SPECIALTY_ARCH, OutputSplitSpecialtyEnum.ARCH.getLabel(), 1), + new SpecialtyItem(SPECIALTY_DECOR, OutputSplitSpecialtyEnum.DECOR.getLabel(), 2), + new SpecialtyItem(SPECIALTY_STRUCT, OutputSplitSpecialtyEnum.STRUCT.getLabel(), 3), + new SpecialtyItem(SPECIALTY_WATER, OutputSplitSpecialtyEnum.WATER.getLabel(), 4), + new SpecialtyItem(SPECIALTY_ELEC, OutputSplitSpecialtyEnum.ELEC.getLabel(), 5), + new SpecialtyItem(SPECIALTY_HVAC, OutputSplitSpecialtyEnum.HVAC.getLabel(), 6), + new SpecialtyItem(SPECIALTY_DIGITAL, OutputSplitSpecialtyEnum.DIGITAL.getLabel(), 7) ); public static final List SPECIALTY_ROLE_ITEMS = Arrays.asList( - new RoleItem(ROLE_DIRECTOR, "专业负责人", 1), - new RoleItem(ROLE_CHECK, "校对", 2), - new RoleItem(ROLE_REVIEW, "审核", 3), - new RoleItem(ROLE_APPROVE, "审定", 4), - new RoleItem(ROLE_DESIGN, "设计", 5) + new RoleItem(ROLE_DIRECTOR, OutputSplitRoleEnum.DIRECTOR.getLabel(), 1), + new RoleItem(ROLE_CHECK, OutputSplitRoleEnum.CHECK.getLabel(), 2), + new RoleItem(ROLE_REVIEW, OutputSplitRoleEnum.REVIEW.getLabel(), 3), + new RoleItem(ROLE_APPROVE, OutputSplitRoleEnum.APPROVE.getLabel(), 4), + new RoleItem(ROLE_DESIGN, OutputSplitRoleEnum.DESIGN.getLabel(), 5) ); public static final List PROJECT_LEAD_ROLE_ITEMS = Arrays.asList( - new RoleItem(ROLE_PROJECT_MANAGER, "项目经理", 1), - new RoleItem(ROLE_ENGINEERING_PRINCIPAL, "工程负责人", 2) + new RoleItem(ROLE_PROJECT_MANAGER, OutputSplitRoleEnum.PROJECT_MANAGER.getLabel(), 1), + new RoleItem(ROLE_ENGINEERING_PRINCIPAL, OutputSplitRoleEnum.ENGINEERING_PRINCIPAL.getLabel(), 2) ); private OutputSplitBizConstants() { diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/ProjectPlanningBizTypeConstants.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/ProjectPlanningBizTypeConstants.java index 701e383..eace102 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/ProjectPlanningBizTypeConstants.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/enums/ProjectPlanningBizTypeConstants.java @@ -1,74 +1,62 @@ package cn.iocoder.lyzsys.module.tjt.enums; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - /** - * 合约规划业务类型常量 + * 合约规划业务类型常量。 + * + *

数据库存储稳定 code,页面和 Excel 按 label 展示。

* * @author Codex */ public final class ProjectPlanningBizTypeConstants { - public static final String OWNERSHIP_TYPE_MAJOR = "专业所"; - public static final String OWNERSHIP_TYPE_COMPREHENSIVE = "综合所"; - 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_UNDERGROUND = "地下部分"; - public static final String DESIGN_PART_OTHER = "其他"; + public static final String OWNERSHIP_TYPE_MAJOR = ProjectPlanningOwnershipTypeEnum.MAJOR.getCode(); + public static final String OWNERSHIP_TYPE_COMPREHENSIVE = ProjectPlanningOwnershipTypeEnum.COMPREHENSIVE.getCode(); + public static final String OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT = + ProjectPlanningOwnershipTypeEnum.SPECIAL_SUBCONTRACT_MAJOR.getCode(); + public static final String OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT = + ProjectPlanningOwnershipTypeEnum.SPECIAL_SUBCONTRACT_SOURCE_COOP.getCode(); + public static final String OWNERSHIP_TYPE_COMPREHENSIVE_SUBCONTRACT = + ProjectPlanningOwnershipTypeEnum.SPECIAL_SUBCONTRACT_COMPREHENSIVE.getCode(); - public static final String CALCULATION_METHOD_GUIDANCE_PRICE = "指导价法"; - public static final String CALCULATION_METHOD_CONTRACT_PRICE = "合同价法"; - public static final String CALCULATION_METHOD_VIRTUAL_OUTPUT = "虚拟产值法"; + public static final String DESIGN_PART_REAL_ESTATE = ProjectPlanningDesignPartEnum.ABOVE_GROUND.getCode(); + public static final String DESIGN_PART_UNDERGROUND = ProjectPlanningDesignPartEnum.UNDERGROUND.getCode(); + public static final String DESIGN_PART_OTHER = ProjectPlanningDesignPartEnum.OTHER.getCode(); - public static final String VIRTUAL_CALCULATION_METHOD_GUIDANCE_PRICE = "指导单价法"; - public static final String VIRTUAL_CALCULATION_METHOD_GUIDANCE_TOTAL_PRICE = "指导总价法"; - public static final String VIRTUAL_CALCULATION_METHOD_WORKING_DAY = "工日法"; + public static final String CALCULATION_METHOD_GUIDANCE_PRICE = + ProjectPlanningCalculationMethodEnum.GUIDANCE_PRICE.getCode(); + public static final String CALCULATION_METHOD_CONTRACT_PRICE = + ProjectPlanningCalculationMethodEnum.CONTRACT_PRICE.getCode(); + public static final String CALCULATION_METHOD_VIRTUAL_OUTPUT = + ProjectPlanningCalculationMethodEnum.VIRTUAL_OUTPUT.getCode(); - private static final Set OWNERSHIP_TYPES = new HashSet<>(Arrays.asList( - OWNERSHIP_TYPE_MAJOR, - OWNERSHIP_TYPE_COMPREHENSIVE, - OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT, - OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT - )); - - private static final Set CALCULATION_METHODS = new HashSet<>(Arrays.asList( - CALCULATION_METHOD_GUIDANCE_PRICE, - CALCULATION_METHOD_CONTRACT_PRICE, - CALCULATION_METHOD_VIRTUAL_OUTPUT - )); - - private static final Set DESIGN_PARTS = new HashSet<>(Arrays.asList( - DESIGN_PART_REAL_ESTATE, - DESIGN_PART_UNDERGROUND, - DESIGN_PART_OTHER - )); - - private static final Set VIRTUAL_CALCULATION_METHODS = new HashSet<>(Arrays.asList( - VIRTUAL_CALCULATION_METHOD_GUIDANCE_PRICE, - VIRTUAL_CALCULATION_METHOD_GUIDANCE_TOTAL_PRICE, - VIRTUAL_CALCULATION_METHOD_WORKING_DAY - )); + public static final String VIRTUAL_CALCULATION_METHOD_GUIDANCE_PRICE = + ProjectPlanningVirtualCalculationMethodEnum.GUIDANCE_PRICE.getCode(); + public static final String VIRTUAL_CALCULATION_METHOD_GUIDANCE_TOTAL_PRICE = + ProjectPlanningVirtualCalculationMethodEnum.GUIDANCE_TOTAL_PRICE.getCode(); + public static final String VIRTUAL_CALCULATION_METHOD_WORKING_DAY = + ProjectPlanningVirtualCalculationMethodEnum.WORKING_DAY.getCode(); private ProjectPlanningBizTypeConstants() { } public static boolean isValidOwnershipType(String value) { - return OWNERSHIP_TYPES.contains(value); + return ProjectPlanningOwnershipTypeEnum.contains(value); } public static boolean isValidCalculationMethod(String value) { - return CALCULATION_METHODS.contains(value); + return ProjectPlanningCalculationMethodEnum.contains(value); + } + + public static boolean isValidDesignStage(String value) { + return ProjectPlanningDesignStageEnum.contains(value); } public static boolean isValidDesignPart(String value) { - return DESIGN_PARTS.contains(value); + return ProjectPlanningDesignPartEnum.contains(value); } public static boolean isValidVirtualCalculationMethod(String value) { - return VIRTUAL_CALCULATION_METHODS.contains(value); + return ProjectPlanningVirtualCalculationMethodEnum.contains(value); } public static boolean isMajor(String value) { @@ -80,7 +68,7 @@ public final class ProjectPlanningBizTypeConstants { } public static boolean isSubcontract(String value) { - return isSpecialSubcontract(value) || isSourceCoopSubcontract(value); + return isSpecialSubcontract(value) || isSourceCoopSubcontract(value) || isComprehensiveSubcontract(value); } public static boolean isSpecialSubcontract(String value) { @@ -91,6 +79,10 @@ public final class ProjectPlanningBizTypeConstants { return OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT.equals(value); } + public static boolean isComprehensiveSubcontract(String value) { + return OWNERSHIP_TYPE_COMPREHENSIVE_SUBCONTRACT.equals(value); + } + public static boolean isGuidancePrice(String value) { return CALCULATION_METHOD_GUIDANCE_PRICE.equals(value); } @@ -119,4 +111,24 @@ public final class ProjectPlanningBizTypeConstants { return VIRTUAL_CALCULATION_METHOD_GUIDANCE_TOTAL_PRICE.equals(value); } + public static String getOwnershipTypeLabel(String value) { + return ProjectPlanningOwnershipTypeEnum.labelOf(value); + } + + public static String getCalculationMethodLabel(String value) { + return ProjectPlanningCalculationMethodEnum.labelOf(value); + } + + public static String getDesignStageLabel(String value) { + return ProjectPlanningDesignStageEnum.labelOf(value); + } + + public static String getDesignPartLabel(String value) { + return ProjectPlanningDesignPartEnum.labelOf(value); + } + + public static String getVirtualCalculationMethodLabel(String value) { + return ProjectPlanningVirtualCalculationMethodEnum.labelOf(value); + } + } diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/outputsplit/ProjectOutputSplitServiceImpl.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/outputsplit/ProjectOutputSplitServiceImpl.java index 24e6a5c..5914624 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/outputsplit/ProjectOutputSplitServiceImpl.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/outputsplit/ProjectOutputSplitServiceImpl.java @@ -276,24 +276,28 @@ public class ProjectOutputSplitServiceImpl implements ProjectOutputSplitService } private BigDecimal getSpecialtyRatio(ProjectOutputSplitDO outputSplit, String specialtyCode) { - switch (specialtyCode) { - case OutputSplitBizConstants.SPECIALTY_ARCH: - return ratio(outputSplit.getArchRatio()); - case OutputSplitBizConstants.SPECIALTY_DECOR: - return ratio(outputSplit.getDecorRatio()); - case OutputSplitBizConstants.SPECIALTY_STRUCT: - return ratio(outputSplit.getStructRatio()); - case OutputSplitBizConstants.SPECIALTY_WATER: - return ratio(outputSplit.getWaterRatio()); - case OutputSplitBizConstants.SPECIALTY_ELEC: - return ratio(outputSplit.getElecRatio()); - case OutputSplitBizConstants.SPECIALTY_HVAC: - return ratio(outputSplit.getHvacRatio()); - case OutputSplitBizConstants.SPECIALTY_DIGITAL: - return ratio(outputSplit.getDigitalRatio()); - default: - return ZERO_RATIO; + if (OutputSplitBizConstants.SPECIALTY_ARCH.equals(specialtyCode)) { + return ratio(outputSplit.getArchRatio()); } + if (OutputSplitBizConstants.SPECIALTY_DECOR.equals(specialtyCode)) { + return ratio(outputSplit.getDecorRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_STRUCT.equals(specialtyCode)) { + return ratio(outputSplit.getStructRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_WATER.equals(specialtyCode)) { + return ratio(outputSplit.getWaterRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_ELEC.equals(specialtyCode)) { + return ratio(outputSplit.getElecRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_HVAC.equals(specialtyCode)) { + return ratio(outputSplit.getHvacRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_DIGITAL.equals(specialtyCode)) { + return ratio(outputSplit.getDigitalRatio()); + } + return ZERO_RATIO; } private BigDecimal multiplyAmount(BigDecimal left, BigDecimal right) { diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/planning/ProjectPlanningServiceImpl.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/planning/ProjectPlanningServiceImpl.java index 70c2f17..edbafd9 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/planning/ProjectPlanningServiceImpl.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/planning/ProjectPlanningServiceImpl.java @@ -31,6 +31,7 @@ import java.util.Objects; import static cn.iocoder.lyzsys.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.lyzsys.module.tjt.enums.ErrorCodeConstants.PROJECT_PLANNING_CALCULATION_METHOD_INVALID; +import static cn.iocoder.lyzsys.module.tjt.enums.ErrorCodeConstants.PROJECT_PLANNING_DESIGN_STAGE_INVALID; import static cn.iocoder.lyzsys.module.tjt.enums.ErrorCodeConstants.PROJECT_PLANNING_NOT_EXISTS; import static cn.iocoder.lyzsys.module.tjt.enums.ErrorCodeConstants.PROJECT_PLANNING_OWNERSHIP_TYPE_IMMUTABLE; import static cn.iocoder.lyzsys.module.tjt.enums.ErrorCodeConstants.PROJECT_PLANNING_OWNERSHIP_TYPE_INVALID; @@ -181,6 +182,10 @@ public class ProjectPlanningServiceImpl implements ProjectPlanningService { && !ProjectPlanningBizTypeConstants.isValidVirtualCalculationMethod(reqVO.getVirtualCalculationMethod())) { throw exception(PROJECT_PLANNING_VIRTUAL_CALCULATION_METHOD_INVALID); } + if (StrUtil.isNotBlank(reqVO.getDesignStage()) + && !ProjectPlanningBizTypeConstants.isValidDesignStage(reqVO.getDesignStage())) { + throw exception(PROJECT_PLANNING_DESIGN_STAGE_INVALID); + } if (ProjectPlanningBizTypeConstants.isWorkingDay(reqVO.getVirtualCalculationMethod())) { if (reqVO.getWorkingDayCount() == null) { throw exception(PROJECT_PLANNING_WORKING_DAY_COUNT_REQUIRED); diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/profit/ProjectProfitServiceImpl.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/profit/ProjectProfitServiceImpl.java index 7db2da5..ce25fbf 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/profit/ProjectProfitServiceImpl.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/profit/ProjectProfitServiceImpl.java @@ -83,6 +83,7 @@ public class ProjectProfitServiceImpl implements ProjectProfitService { BigDecimal comprehensivePlanningAmount = ZERO_AMOUNT; BigDecimal specialSubcontractPlanningAmount = ZERO_AMOUNT; BigDecimal sourceCoopSubcontractPlanningAmount = ZERO_AMOUNT; + BigDecimal comprehensiveSubcontractPlanningAmount = ZERO_AMOUNT; BigDecimal majorOutputValue = ZERO_AMOUNT; List majorPlanningList = safePlanningList.stream() .filter(planning -> ProjectPlanningBizTypeConstants.isMajor(planning.getOwnershipType())) @@ -101,6 +102,10 @@ public class ProjectProfitServiceImpl implements ProjectProfitService { sourceCoopSubcontractPlanningAmount = sourceCoopSubcontractPlanningAmount.add(amount(planning.getPlanningAmount())); continue; } + if (ProjectPlanningBizTypeConstants.isComprehensiveSubcontract(planning.getOwnershipType())) { + comprehensiveSubcontractPlanningAmount = comprehensiveSubcontractPlanningAmount.add(amount(planning.getPlanningAmount())); + continue; + } if (ProjectPlanningBizTypeConstants.isMajor(planning.getOwnershipType())) { majorOutputValue = majorOutputValue.add(amount(planning.getAssessmentOutputValue())); } @@ -117,7 +122,9 @@ public class ProjectProfitServiceImpl implements ProjectProfitService { ? ZERO_AMOUNT : contractAmount.multiply(innovationOutputRate).setScale(2, RoundingMode.HALF_UP); BigDecimal otherCost = amount(project.getOtherCost()); - BigDecimal subcontractPlanningAmount = specialSubcontractPlanningAmount.add(sourceCoopSubcontractPlanningAmount); + BigDecimal subcontractPlanningAmount = specialSubcontractPlanningAmount + .add(sourceCoopSubcontractPlanningAmount) + .add(comprehensiveSubcontractPlanningAmount); BigDecimal profitLossValue = effectiveSettlementAmount .subtract(comprehensivePlanningAmount) .subtract(subcontractPlanningAmount) @@ -141,6 +148,7 @@ public class ProjectProfitServiceImpl implements ProjectProfitService { 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.setComprehensiveSubcontractPlanningAmount(comprehensiveSubcontractPlanningAmount.setScale(2, RoundingMode.HALF_UP)); respVO.setMajorOutputValue(majorOutputValue.setScale(2, RoundingMode.HALF_UP)); respVO.setMajorExpectedPerformance(majorExpectedPerformance); respVO.setInnovationOutputRate(innovationOutputRate); diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/project/ProjectServiceImpl.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/project/ProjectServiceImpl.java index 86ce750..ef85d67 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/project/ProjectServiceImpl.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/project/ProjectServiceImpl.java @@ -18,6 +18,8 @@ import cn.iocoder.lyzsys.module.tjt.dal.mysql.planning.ProjectPlanningMapper; import cn.iocoder.lyzsys.module.tjt.dal.mysql.planningquarter.ProjectPlanningQuarterMapper; import cn.iocoder.lyzsys.module.tjt.dal.mysql.project.ProjectMapper; import cn.iocoder.lyzsys.module.tjt.dal.mysql.projectroleperson.ProjectRolePersonMapper; +import cn.iocoder.lyzsys.module.tjt.enums.OutputSplitBizConstants; +import cn.iocoder.lyzsys.module.tjt.enums.ProjectStatusEnum; import cn.iocoder.lyzsys.module.tjt.service.employee.EmployeeService; import cn.iocoder.lyzsys.module.tjt.service.outputsplit.ProjectOutputSplitService; import cn.iocoder.lyzsys.module.tjt.service.planningguidedetail.ProjectPlanningGuideDetailService; @@ -37,6 +39,7 @@ import java.util.stream.Collectors; import static cn.iocoder.lyzsys.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.lyzsys.module.tjt.enums.ErrorCodeConstants.PROJECT_NOT_EXISTS; +import static cn.iocoder.lyzsys.module.tjt.enums.ErrorCodeConstants.PROJECT_STATUS_INVALID; /** * 项目 Service 实现类 @@ -47,14 +50,12 @@ import static cn.iocoder.lyzsys.module.tjt.enums.ErrorCodeConstants.PROJECT_NOT_ @Validated public class ProjectServiceImpl implements ProjectService { - private static final String ROLE_CODE_PROJECT_MANAGER = "project_manager"; - private static final String ROLE_CODE_ENGINEERING_PRINCIPAL = "engineering_principal"; - private static final String ROLE_NAME_PROJECT_MANAGER = "项目经理"; - private static final String ROLE_NAME_ENGINEERING_PRINCIPAL = "工程负责人"; - private static final String STATUS_IN_PROGRESS = "进行中"; - private static final String STATUS_COMPLETED = "完成"; - private static final String STATUS_PAUSED = "暂停"; - private static final String STATUS_TERMINATED = "中止"; + private static final String ROLE_CODE_PROJECT_MANAGER = OutputSplitBizConstants.ROLE_PROJECT_MANAGER; + private static final String ROLE_CODE_ENGINEERING_PRINCIPAL = OutputSplitBizConstants.ROLE_ENGINEERING_PRINCIPAL; + private static final String STATUS_IN_PROGRESS = ProjectStatusEnum.IN_PROGRESS.getCode(); + private static final String STATUS_COMPLETED = ProjectStatusEnum.COMPLETED.getCode(); + private static final String STATUS_PAUSED = ProjectStatusEnum.PAUSED.getCode(); + private static final String STATUS_TERMINATED = ProjectStatusEnum.TERMINATED.getCode(); @Resource private ProjectMapper projectMapper; @@ -141,6 +142,9 @@ public class ProjectServiceImpl implements ProjectService { if (project.getProjectStatus() == null || project.getProjectStatus().trim().isEmpty()) { project.setProjectStatus(dbProject == null ? STATUS_IN_PROGRESS : dbProject.getProjectStatus()); } + if (!ProjectStatusEnum.contains(project.getProjectStatus())) { + throw exception(PROJECT_STATUS_INVALID); + } if (project.getArchiveFlag() == null) { project.setArchiveFlag(dbProject != null && Boolean.TRUE.equals(dbProject.getArchiveFlag())); } @@ -203,10 +207,10 @@ public class ProjectServiceImpl implements ProjectService { private String getRoleName(String roleCode) { if (Objects.equals(roleCode, ROLE_CODE_PROJECT_MANAGER)) { - return ROLE_NAME_PROJECT_MANAGER; + return OutputSplitBizConstants.getRoleName(roleCode); } if (Objects.equals(roleCode, ROLE_CODE_ENGINEERING_PRINCIPAL)) { - return ROLE_NAME_ENGINEERING_PRINCIPAL; + return OutputSplitBizConstants.getRoleName(roleCode); } return roleCode; } diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/ProjectOutputReportServiceImpl.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/ProjectOutputReportServiceImpl.java index 31ad597..d65b877 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/ProjectOutputReportServiceImpl.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/ProjectOutputReportServiceImpl.java @@ -28,6 +28,7 @@ import cn.iocoder.lyzsys.module.tjt.dal.mysql.specialtyrolesplitperson.Specialty import cn.iocoder.lyzsys.module.tjt.dal.mysql.yearkvalue.YearKValueMapper; import cn.iocoder.lyzsys.module.tjt.enums.OutputSplitBizConstants; import cn.iocoder.lyzsys.module.tjt.enums.ProjectPlanningBizTypeConstants; +import cn.iocoder.lyzsys.module.tjt.enums.ProjectStatusEnum; import cn.iocoder.lyzsys.module.tjt.service.outputsplit.ProjectOutputSplitService; import cn.iocoder.lyzsys.module.tjt.service.planningguidedetail.ProjectPlanningGuideDetailService; import cn.iocoder.lyzsys.module.tjt.service.report.builder.*; @@ -937,7 +938,8 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_MAJOR, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT, - ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT + ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT, + ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE_SUBCONTRACT ))); } @@ -963,7 +965,8 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_MAJOR, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT, - ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT + ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT, + ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE_SUBCONTRACT ))) .stream() .map(ProjectPlanningDO::getId) @@ -1009,7 +1012,8 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_MAJOR, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE, ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SPECIAL_SUBCONTRACT, - ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT + ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_SOURCE_COOP_SUBCONTRACT, + ProjectPlanningBizTypeConstants.OWNERSHIP_TYPE_COMPREHENSIVE_SUBCONTRACT ))) .stream() .map(ProjectPlanningDO::getId) @@ -1311,11 +1315,13 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic return; } for (ProjectPlanningGuideDetailDO detail : partPlanningList) { - rows.add(buildBudgetDetailRow(planning, planningContent, designPart, detail)); + rows.add(buildBudgetDetailRow(planning, planningContent, + ProjectPlanningBizTypeConstants.getDesignPartLabel(designPart), detail)); } if (partPlanningList.size() > 2) { rows.add(buildBudgetSummaryRow(ProjectBudgetExcelBuilder.BudgetRowType.PART_SUBTOTAL, - planning, planningContent, designPart + "总计", partPlanningList)); + planning, planningContent, + ProjectPlanningBizTypeConstants.getDesignPartLabel(designPart) + "总计", partPlanningList)); } } @@ -1356,7 +1362,8 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic } private ProjectBudgetExcelBuilder.BudgetRow buildBudgetEmptyRow(String designPart) { - return initBudgetRow(ProjectBudgetExcelBuilder.BudgetRowType.PART_EMPTY, null, "", designPart); + return initBudgetRow(ProjectBudgetExcelBuilder.BudgetRowType.PART_EMPTY, null, "", + ProjectPlanningBizTypeConstants.getDesignPartLabel(designPart)); } private ProjectBudgetExcelBuilder.BudgetRow buildBudgetSummaryRow(ProjectBudgetExcelBuilder.BudgetRowType rowType, @@ -1754,24 +1761,28 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic if (outputSplit == null || specialtyCode == null) { return ZERO_RATIO; } - switch (specialtyCode) { - case OutputSplitBizConstants.SPECIALTY_ARCH: - return ratio(outputSplit.getArchRatio()); - case OutputSplitBizConstants.SPECIALTY_DECOR: - return ratio(outputSplit.getDecorRatio()); - case OutputSplitBizConstants.SPECIALTY_STRUCT: - return ratio(outputSplit.getStructRatio()); - case OutputSplitBizConstants.SPECIALTY_WATER: - return ratio(outputSplit.getWaterRatio()); - case OutputSplitBizConstants.SPECIALTY_ELEC: - return ratio(outputSplit.getElecRatio()); - case OutputSplitBizConstants.SPECIALTY_HVAC: - return ratio(outputSplit.getHvacRatio()); - case OutputSplitBizConstants.SPECIALTY_DIGITAL: - return ratio(outputSplit.getDigitalRatio()); - default: - return ZERO_RATIO; + if (OutputSplitBizConstants.SPECIALTY_ARCH.equals(specialtyCode)) { + return ratio(outputSplit.getArchRatio()); } + if (OutputSplitBizConstants.SPECIALTY_DECOR.equals(specialtyCode)) { + return ratio(outputSplit.getDecorRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_STRUCT.equals(specialtyCode)) { + return ratio(outputSplit.getStructRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_WATER.equals(specialtyCode)) { + return ratio(outputSplit.getWaterRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_ELEC.equals(specialtyCode)) { + return ratio(outputSplit.getElecRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_HVAC.equals(specialtyCode)) { + return ratio(outputSplit.getHvacRatio()); + } + if (OutputSplitBizConstants.SPECIALTY_DIGITAL.equals(specialtyCode)) { + return ratio(outputSplit.getDigitalRatio()); + } + return ZERO_RATIO; } private String buildSpecialtySummary(ProjectOutputSplitDO outputSplit, BigDecimal baseAmount) { @@ -1798,10 +1809,13 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic return "六大专业考核产值"; } if (ProjectPlanningBizTypeConstants.isSpecialSubcontract(ownershipType)) { - return "专项分包产值"; + return "专项分包-专业所产值"; } if (ProjectPlanningBizTypeConstants.isSourceCoopSubcontract(ownershipType)) { - return "源头合作分包产值"; + return "专项分包-源头合作分包产值"; + } + if (ProjectPlanningBizTypeConstants.isComprehensiveSubcontract(ownershipType)) { + return "专项分包-综合所产值"; } if (ProjectPlanningBizTypeConstants.isComprehensive(ownershipType)) { return "内部协作产值"; @@ -1814,16 +1828,19 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic if (Objects.equals(outputType, "六大专业考核产值")) { return 1; } - if (Objects.equals(outputType, "专项分包产值")) { + if (Objects.equals(outputType, "专项分包-专业所产值")) { return 2; } - if (Objects.equals(outputType, "源头合作分包产值")) { + if (Objects.equals(outputType, "专项分包-源头合作分包产值")) { return 3; } - if (Objects.equals(outputType, "内部协作产值")) { + if (Objects.equals(outputType, "专项分包-综合所产值")) { return 4; } - return 5; + if (Objects.equals(outputType, "内部协作产值")) { + return 5; + } + return 6; } private String buildPlanningDisplayName(ProjectPlanningDO planning) { @@ -1831,7 +1848,8 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic return ""; } String planningContent = defaultString(planning.getPlanningContent()); - String ownershipType = defaultString(planning.getOwnershipType()); + String ownershipType = defaultString(ProjectPlanningBizTypeConstants.getOwnershipTypeLabel( + planning.getOwnershipType())); if (planningContent.isEmpty()) { return ownershipType; } @@ -2195,7 +2213,8 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic if (!planningContent.isEmpty()) { return planningContent; } - return defaultString(planning == null ? null : planning.getDesignStage()); + return defaultString(ProjectPlanningBizTypeConstants.getDesignStageLabel( + planning == null ? null : planning.getDesignStage())); } private List buildProjectOverviewEmployeeColumns( @@ -2321,7 +2340,7 @@ public class ProjectOutputReportServiceImpl implements ProjectOutputReportServic } private String buildProgressText(ProjectDO project, ProjectPlanningDO planning) { - String projectStatus = project == null ? "" : defaultString(project.getProjectStatus()); + String projectStatus = project == null ? "" : defaultString(ProjectStatusEnum.labelOf(project.getProjectStatus())); String planningRemark = planning == null ? "" : defaultString(planning.getProgressRemark()); if (projectStatus.isEmpty()) { return planningRemark; diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/ProjectLeadQuarterOutputExcelBuilder.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/ProjectLeadQuarterOutputExcelBuilder.java index 70244fa..a90caf6 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/ProjectLeadQuarterOutputExcelBuilder.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/ProjectLeadQuarterOutputExcelBuilder.java @@ -28,8 +28,9 @@ public class ProjectLeadQuarterOutputExcelBuilder extends AbstractProjectOutputE private static final String DEFAULT_PROJECT_SIGNER = "项目经理/工程负责人(签名):"; private static final List OUTPUT_TYPE_ORDER = Arrays.asList( "六大专业考核产值", - "专项分包产值", - "源头合作分包产值", + "专项分包-专业所产值", + "专项分包-源头合作分包产值", + "专项分包-综合所产值", "内部协作产值", "其他产值" ); diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/ProjectQuarterOutputExcelBuilder.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/ProjectQuarterOutputExcelBuilder.java index 361c6a0..6a6878c 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/ProjectQuarterOutputExcelBuilder.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/ProjectQuarterOutputExcelBuilder.java @@ -36,16 +36,18 @@ public class ProjectQuarterOutputExcelBuilder extends AbstractProjectOutputExcel private static final List OUTPUT_TYPE_ORDER = Arrays.asList( "六大专业考核产值", - "专项分包产值", - "源头合作分包产值", + "专项分包-专业所产值", + "专项分包-源头合作分包产值", + "专项分包-综合所产值", "内部协作产值", "其他产值" ); private static final List FIXED_OUTPUT_TYPES = Arrays.asList( "六大专业考核产值", - "专项分包产值", - "源头合作分包产值", + "专项分包-专业所产值", + "专项分包-源头合作分包产值", + "专项分包-综合所产值", "内部协作产值" ); diff --git a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/SpecialtyPersonOutputExcelBuilder.java b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/SpecialtyPersonOutputExcelBuilder.java index 2be7e26..31f79c4 100644 --- a/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/SpecialtyPersonOutputExcelBuilder.java +++ b/lyzsys-module-tjt/src/main/java/cn/iocoder/lyzsys/module/tjt/service/report/builder/SpecialtyPersonOutputExcelBuilder.java @@ -534,15 +534,18 @@ public class SpecialtyPersonOutputExcelBuilder extends AbstractProjectOutputExce if (Objects.equals(current, "六大专业考核产值")) { return 1; } - if (Objects.equals(current, "专项分包产值")) { + if (Objects.equals(current, "专项分包-专业所产值")) { return 2; } - if (Objects.equals(current, "源头合作分包产值")) { + if (Objects.equals(current, "专项分包-源头合作分包产值")) { return 3; } - if (Objects.equals(current, "内部协作产值")) { + if (Objects.equals(current, "专项分包-综合所产值")) { return 4; } + if (Objects.equals(current, "内部协作产值")) { + return 5; + } return 9; }