项目基础信息、合约规划、指导价法明细、项目成本测算字段调整、菜单名称调整、专业人员报表与导出内容修复
This commit is contained in:
@@ -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 = "设计面积")
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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 = "项目开始年度")
|
||||||
|
|||||||
@@ -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 = "科创产值比例")
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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;
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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,14 +1764,17 @@ 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;
|
||||||
}
|
}
|
||||||
|
if (Objects.equals(outputType, "内部协作产值")) {
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
|
||||||
private String buildPlanningDisplayName(ProjectPlanningDO planning) {
|
private String buildPlanningDisplayName(ProjectPlanningDO planning) {
|
||||||
if (planning == null) {
|
if (planning == null) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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(
|
||||||
"六大专业考核产值",
|
"六大专业考核产值",
|
||||||
"专业分包产值",
|
"专项分包产值",
|
||||||
|
"源头合作分包产值",
|
||||||
"内部协作产值",
|
"内部协作产值",
|
||||||
"其他产值"
|
"其他产值"
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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(
|
||||||
"六大专业考核产值",
|
"六大专业考核产值",
|
||||||
"专业分包产值",
|
"专项分包产值",
|
||||||
|
"源头合作分包产值",
|
||||||
"内部协作产值"
|
"内部协作产值"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user