施工产值

This commit is contained in:
lcj
2025-12-03 15:46:28 +08:00
parent 8ae5614ce9
commit b39aa7be71
10 changed files with 350 additions and 47 deletions

View File

@ -8,7 +8,6 @@ import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
@ -18,6 +17,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.out.domain.bo.OutConstructionValueBo; import org.dromara.out.domain.bo.OutConstructionValueBo;
import org.dromara.out.domain.bo.OutConstructionValueFacilityReq; import org.dromara.out.domain.bo.OutConstructionValueFacilityReq;
import org.dromara.out.domain.vo.OutConstructionAllValueVo; import org.dromara.out.domain.vo.OutConstructionAllValueVo;
import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueTotalVo;
import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo;
import org.dromara.out.service.IOutConstructionValueService; import org.dromara.out.service.IOutConstructionValueService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -49,14 +49,13 @@ public class OutConstructionValueController extends BaseController {
} }
/** /**
* 导出施工产值列表 * 查询施工产值合计列表
*/ */
@SaCheckPermission("out:constructionValue:export") @SaCheckPermission("out:constructionValue:list")
@Log(title = "施工产值", businessType = BusinessType.EXPORT) @GetMapping("/totalList")
@PostMapping("/export") public R<List<OutConstructionValueTotalVo>> totalList(OutConstructionValueBo bo) {
public void export(OutConstructionValueBo bo, HttpServletResponse response) { List<OutConstructionValueTotalVo> list = outConstructionValueService.queryList(bo);
List<OutConstructionValueVo> list = outConstructionValueService.queryList(bo); return R.ok(list);
ExcelUtil.exportExcel(list, "施工产值", OutConstructionValueVo.class, response);
} }
/** /**

View File

@ -109,5 +109,9 @@ public class OutConstructionValueBo extends BaseEntity {
*/ */
private LocalDate endDate; private LocalDate endDate;
/**
* 项目类型
*/
private String projectType;
} }

View File

@ -57,6 +57,21 @@ public class OutConstructionValueMatrixVo {
@ExcelProperty(value = "数量") @ExcelProperty(value = "数量")
private BigDecimal number; private BigDecimal number;
/**
* 人工填报数量
*/
private Integer artificialNum;
/**
* 无人机识别数量
*/
private Integer uavNum;
/**
* 确认数量
*/
private Integer confirmNum;
/** /**
* 对甲产值 * 对甲产值
*/ */

View File

@ -45,6 +45,21 @@ public class OutConstructionValueProjectVo {
@ExcelProperty(value = "数量") @ExcelProperty(value = "数量")
private BigDecimal number; private BigDecimal number;
/**
* 人工填报数量
*/
private Integer artificialNum;
/**
* 无人机识别数量
*/
private Integer uavNum;
/**
* 确认数量
*/
private Integer confirmNum;
/** /**
* 对甲产值 * 对甲产值
*/ */

View File

@ -51,6 +51,21 @@ public class OutConstructionValueSubProjectVo {
@ExcelProperty(value = "数量") @ExcelProperty(value = "数量")
private BigDecimal number; private BigDecimal number;
/**
* 人工填报数量
*/
private Integer artificialNum;
/**
* 无人机识别数量
*/
private Integer uavNum;
/**
* 确认数量
*/
private Integer confirmNum;
/** /**
* 对甲产值 * 对甲产值
*/ */

View File

@ -0,0 +1,73 @@
package org.dromara.out.domain.vo.outconstructionvalue;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author lilemy
* @date 2025-12-03 11:24
*/
@Data
public class OutConstructionValueTotalVo {
/**
* 项目名
*/
private String projectName;
/**
* 子项目名
*/
private String subProjectName;
/**
* 方阵名称
*/
private String matrixName;
/**
* 分项工程名称
*/
private String progressCategoryName;
/**
* 计量方式0无 1数量 2百分比
*/
private String unitType;
/**
* 单位
*/
private String unit;
/**
* 数量
*/
private BigDecimal number;
/**
* 人工填报数量
*/
private Integer artificialNum;
/**
* 无人机识别数量
*/
private Integer uavNum;
/**
* 确认数量
*/
private Integer confirmNum;
/**
* 对甲产值
*/
private BigDecimal ownerValue;
/**
* 产值
*/
private BigDecimal outValue;
}

View File

@ -7,7 +7,7 @@ import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.OutConstructionValueRange;
import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueTotalVo;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -82,6 +82,6 @@ public class OutConstructionValueRangeVo implements Serializable {
/** /**
* 子项列表 * 子项列表
*/ */
private List<OutConstructionValueVo> constructionValueVoList; private List<OutConstructionValueTotalVo> constructionValueVoList;
} }

View File

@ -9,6 +9,7 @@ import org.dromara.out.domain.bo.OutConstructionValueBo;
import org.dromara.out.domain.bo.OutConstructionValueFacilityReq; import org.dromara.out.domain.bo.OutConstructionValueFacilityReq;
import org.dromara.out.domain.vo.OutConstructionAllValueVo; import org.dromara.out.domain.vo.OutConstructionAllValueVo;
import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueCategoryVo; import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueCategoryVo;
import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueTotalVo;
import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo;
import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.PgsProgressCategory;
@ -47,7 +48,7 @@ public interface IOutConstructionValueService extends IService<OutConstructionVa
* @param bo 查询条件 * @param bo 查询条件
* @return 施工产值列表 * @return 施工产值列表
*/ */
List<OutConstructionValueVo> queryList(OutConstructionValueBo bo); List<OutConstructionValueTotalVo> queryList(OutConstructionValueBo bo);
/** /**
* 新增施工产值 * 新增施工产值

View File

@ -40,7 +40,6 @@ import org.dromara.out.service.IOutConstructionValueRangeService;
import org.dromara.out.service.IOutConstructionValueService; import org.dromara.out.service.IOutConstructionValueService;
import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.PgsProgressCategory;
import org.dromara.progress.domain.PgsProgressPlanDetail; import org.dromara.progress.domain.PgsProgressPlanDetail;
import org.dromara.progress.service.IPgsProgressCategoryService;
import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.progress.service.IPgsProgressPlanDetailService;
import org.dromara.project.domain.BusProject; import org.dromara.project.domain.BusProject;
import org.dromara.project.service.IBusProjectService; import org.dromara.project.service.IBusProjectService;
@ -472,12 +471,8 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl<OutConstru
* @param summary 合计 * @param summary 合计
* @return 项目VO * @return 项目VO
*/ */
private OutConstructionValueRangeProjectVo buildProjectVo( private OutConstructionValueRangeProjectVo buildProjectVo(BusProject project, String name, String childName,
BusProject project, List<OutConstructionValueCategoryVo> list, Summary summary) {
String name,
String childName,
List<OutConstructionValueCategoryVo> list,
Summary summary) {
OutConstructionValueRangeProjectVo vo = new OutConstructionValueRangeProjectVo(); OutConstructionValueRangeProjectVo vo = new OutConstructionValueRangeProjectVo();
vo.setProjectName(project.getProjectName()); vo.setProjectName(project.getProjectName());
vo.setProgressCategoryName(name + "/" + childName); vo.setProgressCategoryName(name + "/" + childName);
@ -499,13 +494,9 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl<OutConstru
* @param summary 合计 * @param summary 合计
* @return 子项VO * @return 子项VO
*/ */
private OutConstructionValueRangeSubProjectVo buildSubProjectVo( private OutConstructionValueRangeSubProjectVo buildSubProjectVo(BusProject project, String name, String childName,
BusProject project, Map.Entry<Long, List<OutConstructionValueCategoryVo>> entry,
String name, Map<Long, String> projectNameMap, Summary summary) {
String childName,
Map.Entry<Long, List<OutConstructionValueCategoryVo>> entry,
Map<Long, String> projectNameMap,
Summary summary) {
OutConstructionValueRangeSubProjectVo vo = new OutConstructionValueRangeSubProjectVo(); OutConstructionValueRangeSubProjectVo vo = new OutConstructionValueRangeSubProjectVo();
vo.setProjectName(project.getProjectName()); vo.setProjectName(project.getProjectName());
vo.setSubProjectName(projectNameMap.get(entry.getKey())); vo.setSubProjectName(projectNameMap.get(entry.getKey()));
@ -529,13 +520,9 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl<OutConstru
* @param summary 合计 * @param summary 合计
* @return 方阵VO * @return 方阵VO
*/ */
private OutConstructionValueRangeMatrixVo buildMatrixVo( private OutConstructionValueRangeMatrixVo buildMatrixVo(BusProject project, String name, String childName,
BusProject project, Map.Entry<String, List<OutConstructionValueCategoryVo>> entry,
String name, Map<Long, String> projectNameMap, Summary summary) {
String childName,
Map.Entry<String, List<OutConstructionValueCategoryVo>> entry,
Map<Long, String> projectNameMap,
Summary summary) {
List<OutConstructionValueCategoryVo> list = entry.getValue(); List<OutConstructionValueCategoryVo> list = entry.getValue();
OutConstructionValueRangeMatrixVo vo = new OutConstructionValueRangeMatrixVo(); OutConstructionValueRangeMatrixVo vo = new OutConstructionValueRangeMatrixVo();
vo.setProjectName(project.getProjectName()); vo.setProjectName(project.getProjectName());

View File

@ -36,6 +36,7 @@ import org.dromara.progress.domain.PgsProgressPlanDetail;
import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailCreateReq; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailCreateReq;
import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailFinishedCreateReq; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailFinishedCreateReq;
import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailRemoveReq; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailRemoveReq;
import org.dromara.progress.domain.enums.PgsRelevancyStructureEnum;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo; import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo;
import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.progress.service.IPgsProgressCategoryService;
import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.progress.service.IPgsProgressPlanDetailService;
@ -115,11 +116,179 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
* @return 施工产值列表 * @return 施工产值列表
*/ */
@Override @Override
public List<OutConstructionValueVo> queryList(OutConstructionValueBo bo) { public List<OutConstructionValueTotalVo> queryList(OutConstructionValueBo bo) {
Long projectId = bo.getProjectId();
if (projectId == null) {
throw new ServiceException("请选择项目");
}
BusProject project = projectService.getById(projectId);
if (project == null) {
throw new ServiceException("项目不存在");
}
// 获取子项目
List<BusProject> projectList = projectService.lambdaQuery()
.eq(BusProject::getPId, projectId)
.list();
projectList.add(project);
Map<Long, String> projectNameMap = projectList.stream()
.collect(Collectors.toMap(BusProject::getId, BusProject::getProjectName));
LambdaQueryWrapper<OutConstructionValue> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<OutConstructionValue> lqw = buildQueryWrapper(bo);
List<OutConstructionValueVo> outConstructionValueVos = baseMapper.selectVoList(lqw); List<OutConstructionValue> valueList = this.list(lqw);
supplementaryData(outConstructionValueVos); if (CollUtil.isEmpty(valueList)) {
return outConstructionValueVos; return Collections.emptyList();
}
if (StringUtils.isNotBlank(bo.getProjectType())) {
List<OutConstructionValueCategoryVo> valueCategoryList = new ArrayList<>();
List<PgsProgressCategory> topList = new ArrayList<>();
this.buildExportData(valueList, valueCategoryList, topList);
// 汇总数据
List<OutConstructionValueProjectVo> projectVoList = new ArrayList<>();
List<OutConstructionValueSubProjectVo> subProjectVoList = new ArrayList<>();
List<OutConstructionValueMatrixVo> matrixVoList = new ArrayList<>();
// 合计
BigDecimal totalNumber = BigDecimal.ZERO;
Integer totalArtificialNum = 0;
Integer totalUavNum = 0;
Integer totalConfirmNum = 0;
BigDecimal totalOwnerValue = BigDecimal.ZERO;
BigDecimal totalOutValue = BigDecimal.ZERO;
BigDecimal subTotalNumber = BigDecimal.ZERO;
Integer subTotalArtificialNum = 0;
Integer subTotalUavNum = 0;
Integer subTotalConfirmNum = 0;
BigDecimal subTotalOwnerValue = BigDecimal.ZERO;
BigDecimal subTotalOutValue = BigDecimal.ZERO;
BigDecimal matrixTotalNumber = BigDecimal.ZERO;
Integer matrixTotalArtificialNum = 0;
Integer matrixTotalUavNum = 0;
Integer matrixTotalConfirmNum = 0;
BigDecimal matrixTotalOwnerValue = BigDecimal.ZERO;
BigDecimal matrixTotalOutValue = BigDecimal.ZERO;
// 根据名称+结构分类
Map<String, List<PgsProgressCategory>> topNameMap =
topList.stream().collect(Collectors.groupingBy(item -> item.getName() + "_" + item.getRelevancyStructure()));
for (Map.Entry<String, List<PgsProgressCategory>> entry : topNameMap.entrySet()) {
String[] keys = entry.getKey().split("_");
String name = keys[0];
String structure = keys[1];
List<PgsProgressCategory> topNodes = entry.getValue();
List<Long> topIds = topNodes.stream().map(PgsProgressCategory::getId).toList();
// 找出全部子孙节点
List<OutConstructionValueCategoryVo> children = findChildren(valueCategoryList, topIds);
// 子类按名称分组
Map<String, List<OutConstructionValueCategoryVo>> childrenMap =
children.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getName));
for (Map.Entry<String, List<OutConstructionValueCategoryVo>> childrenEntry : childrenMap.entrySet()) {
String childName = childrenEntry.getKey();
List<OutConstructionValueCategoryVo> childrenEntryValue = childrenEntry.getValue();
// ======= 构建项目级数据 =======
Summary summary = calculateSummary(childrenEntryValue);
OutConstructionValueProjectVo projectVo =
buildProjectVo(project, name, childName, childrenEntryValue, summary);
projectVoList.add(projectVo);
totalNumber = totalNumber.add(BigDecimal.valueOf(summary.number));
totalArtificialNum += summary.artificialNum;
totalUavNum += summary.uavNum;
totalConfirmNum += summary.confirmNum;
totalOwnerValue = totalOwnerValue.add(summary.ownerValue);
totalOutValue = totalOutValue.add(summary.outValue);
// ======= 构建子项目级数据 =======
if ((structure.equals("1") || structure.equals("2")) && bo.getProjectType().equals("1")) {
Map<Long, List<OutConstructionValueCategoryVo>> subMap =
childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getProjectId));
for (Map.Entry<Long, List<OutConstructionValueCategoryVo>> subEntry : subMap.entrySet()) {
Summary subSummary = calculateSummary(subEntry.getValue());
OutConstructionValueSubProjectVo subVo =
buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary);
subProjectVoList.add(subVo);
subTotalNumber = subTotalNumber.add(BigDecimal.valueOf(subSummary.number));
subTotalArtificialNum += subSummary.artificialNum;
subTotalUavNum += subSummary.uavNum;
subTotalConfirmNum += subSummary.confirmNum;
subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue);
subTotalOutValue = subTotalOutValue.add(subSummary.outValue);
}
}
// ======= 构建方阵级数据 =======
if (structure.equals("2") && bo.getProjectType().equals("2")) {
Map<String, List<OutConstructionValueCategoryVo>> matrixMap =
childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getMatrixName));
for (Map.Entry<String, List<OutConstructionValueCategoryVo>> matrixEntry : matrixMap.entrySet()) {
Summary matrixSummary = calculateSummary(matrixEntry.getValue());
OutConstructionValueMatrixVo matrixVo =
buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary);
matrixVoList.add(matrixVo);
matrixTotalNumber = matrixTotalNumber.add(BigDecimal.valueOf(matrixSummary.number));
matrixTotalArtificialNum += matrixSummary.artificialNum;
matrixTotalUavNum += matrixSummary.uavNum;
matrixTotalConfirmNum += matrixSummary.confirmNum;
matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue);
matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue);
}
}
}
}
// 排序
projectVoList.sort(Comparator.comparing(OutConstructionValueProjectVo::getProgressCategoryName));
subProjectVoList.sort(Comparator.comparing(OutConstructionValueSubProjectVo::getSubProjectName)
.thenComparing(OutConstructionValueSubProjectVo::getProgressCategoryName));
matrixVoList.sort(Comparator.comparing(OutConstructionValueMatrixVo::getSubProjectName)
.thenComparing(OutConstructionValueMatrixVo::getMatrixName)
.thenComparing(OutConstructionValueMatrixVo::getProgressCategoryName));
// 填充合计
OutConstructionValueProjectVo rangeProjectVo = new OutConstructionValueProjectVo();
rangeProjectVo.setProjectName("合计");
rangeProjectVo.setNumber(totalNumber);
rangeProjectVo.setArtificialNum(totalArtificialNum);
rangeProjectVo.setUavNum(totalUavNum);
rangeProjectVo.setConfirmNum(totalConfirmNum);
rangeProjectVo.setOwnerValue(totalOwnerValue);
rangeProjectVo.setOutValue(totalOutValue);
projectVoList.add(rangeProjectVo);
OutConstructionValueSubProjectVo rangeSubProjectVo = new OutConstructionValueSubProjectVo();
rangeSubProjectVo.setProjectName("合计");
rangeSubProjectVo.setNumber(subTotalNumber);
rangeSubProjectVo.setArtificialNum(subTotalArtificialNum);
rangeSubProjectVo.setUavNum(subTotalUavNum);
rangeSubProjectVo.setConfirmNum(subTotalConfirmNum);
rangeSubProjectVo.setOwnerValue(subTotalOwnerValue);
rangeSubProjectVo.setOutValue(subTotalOutValue);
subProjectVoList.add(rangeSubProjectVo);
OutConstructionValueMatrixVo rangeMatrixVo = new OutConstructionValueMatrixVo();
rangeMatrixVo.setProjectName("合计");
rangeMatrixVo.setNumber(matrixTotalNumber);
rangeMatrixVo.setArtificialNum(matrixTotalArtificialNum);
rangeMatrixVo.setUavNum(matrixTotalUavNum);
rangeMatrixVo.setConfirmNum(matrixTotalConfirmNum);
rangeMatrixVo.setOwnerValue(matrixTotalOwnerValue);
rangeMatrixVo.setOutValue(matrixTotalOutValue);
matrixVoList.add(rangeMatrixVo);
return switch (bo.getProjectType()) {
case "3" -> projectVoList.stream().map(p -> {
OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo();
BeanUtils.copyProperties(p, vo);
return vo;
}).toList();
case "1" -> subProjectVoList.stream().map(p -> {
OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo();
BeanUtils.copyProperties(p, vo);
return vo;
}).toList();
case "2" -> matrixVoList.stream().map(p -> {
OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo();
BeanUtils.copyProperties(p, vo);
return vo;
}).toList();
case null, default -> Collections.emptyList();
};
}
return valueList.stream().map(p -> {
OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo();
BeanUtils.copyProperties(p, vo);
return vo;
}).toList();
} }
private LambdaQueryWrapper<OutConstructionValue> buildQueryWrapper(OutConstructionValueBo bo) { private LambdaQueryWrapper<OutConstructionValue> buildQueryWrapper(OutConstructionValueBo bo) {
@ -155,9 +324,16 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
categoryLqw.select(PgsProgressCategory::getId); categoryLqw.select(PgsProgressCategory::getId);
categoryLqw.eq(PgsProgressCategory::getUnitType, bo.getUnitType()); categoryLqw.eq(PgsProgressCategory::getUnitType, bo.getUnitType());
categoryLqw.eq(bo.getMatrixId() != null, PgsProgressCategory::getMatrixId, bo.getMatrixId()); categoryLqw.eq(bo.getMatrixId() != null, PgsProgressCategory::getMatrixId, bo.getMatrixId());
if (CollUtil.isNotEmpty(ids)) { categoryLqw.in(CollUtil.isNotEmpty(ids), PgsProgressCategory::getProjectId, ids);
categoryLqw.in(PgsProgressCategory::getProjectId, ids); if (StringUtils.isNotBlank(bo.getProjectType())) {
if (bo.getProjectType().equals("1")) {
categoryLqw.in(PgsProgressCategory::getRelevancyStructure,
PgsRelevancyStructureEnum.SUB_PROJECT.getValue(), PgsRelevancyStructureEnum.MATRIX.getValue());
} else if (bo.getProjectType().equals("2")) {
categoryLqw.eq(PgsProgressCategory::getRelevancyStructure, PgsRelevancyStructureEnum.MATRIX.getValue());
}
} }
categoryLqw.eq(StringUtils.isNotBlank(bo.getProjectType()), PgsProgressCategory::getRelevancyStructure, bo.getProjectType());
List<PgsProgressCategory> progressCategories = pgsProgressCategoryService.list(categoryLqw); List<PgsProgressCategory> progressCategories = pgsProgressCategoryService.list(categoryLqw);
if (CollUtil.isNotEmpty(progressCategories)) { if (CollUtil.isNotEmpty(progressCategories)) {
List<Long> categoryIds = progressCategories.stream().map(PgsProgressCategory::getId).toList(); List<Long> categoryIds = progressCategories.stream().map(PgsProgressCategory::getId).toList();
@ -441,7 +617,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
OutConstructionValueProjectVo projectVo = OutConstructionValueProjectVo projectVo =
buildProjectVo(project, name, childName, childrenEntryValue, summary); buildProjectVo(project, name, childName, childrenEntryValue, summary);
projectVoList.add(projectVo); projectVoList.add(projectVo);
totalNumber = totalNumber.add(summary.number); totalNumber = totalNumber.add(BigDecimal.valueOf(summary.number));
totalOwnerValue = totalOwnerValue.add(summary.ownerValue); totalOwnerValue = totalOwnerValue.add(summary.ownerValue);
totalOutValue = totalOutValue.add(summary.outValue); totalOutValue = totalOutValue.add(summary.outValue);
// ======= 构建子项目级数据 ======= // ======= 构建子项目级数据 =======
@ -453,7 +629,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
OutConstructionValueSubProjectVo subVo = OutConstructionValueSubProjectVo subVo =
buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary); buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary);
subProjectVoList.add(subVo); subProjectVoList.add(subVo);
subTotalNumber = subTotalNumber.add(subSummary.number); subTotalNumber = subTotalNumber.add(BigDecimal.valueOf(subSummary.number));
subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue); subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue);
subTotalOutValue = subTotalOutValue.add(subSummary.outValue); subTotalOutValue = subTotalOutValue.add(subSummary.outValue);
} }
@ -467,7 +643,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
OutConstructionValueMatrixVo matrixVo = OutConstructionValueMatrixVo matrixVo =
buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary); buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary);
matrixVoList.add(matrixVo); matrixVoList.add(matrixVo);
matrixTotalNumber = matrixTotalNumber.add(matrixSummary.number); matrixTotalNumber = matrixTotalNumber.add(BigDecimal.valueOf(matrixSummary.number));
matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue); matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue);
matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue); matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue);
} }
@ -587,7 +763,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
* 汇总静态类 * 汇总静态类
*/ */
static class Summary { static class Summary {
BigDecimal number; Integer number;
Integer artificialNum;
Integer uavNum;
Integer confirmNum;
BigDecimal ownerValue; BigDecimal ownerValue;
BigDecimal outValue; BigDecimal outValue;
} }
@ -600,7 +779,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
*/ */
private Summary calculateSummary(List<OutConstructionValueCategoryVo> list) { private Summary calculateSummary(List<OutConstructionValueCategoryVo> list) {
Summary s = new Summary(); Summary s = new Summary();
s.number = BigDecimal.ZERO; s.number = 0;
s.artificialNum = 0;
s.uavNum = 0;
s.confirmNum = 0;
s.ownerValue = BigDecimal.ZERO; s.ownerValue = BigDecimal.ZERO;
s.outValue = BigDecimal.ZERO; s.outValue = BigDecimal.ZERO;
for (OutConstructionValueCategoryVo c : list) { for (OutConstructionValueCategoryVo c : list) {
@ -608,7 +790,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
? c.getArtificialNum() + c.getUavNum() ? c.getArtificialNum() + c.getUavNum()
: c.getConfirmNum(); : c.getConfirmNum();
s.number = s.number.add(BigDecimal.valueOf(num)); s.number = s.number + num;
s.artificialNum = s.artificialNum + c.getArtificialNum();
s.uavNum = s.uavNum + c.getUavNum();
s.confirmNum = s.confirmNum + c.getConfirmNum();
s.ownerValue = s.ownerValue.add(c.getOwnerValue()); s.ownerValue = s.ownerValue.add(c.getOwnerValue());
s.outValue = s.outValue.add(c.getOutValue()); s.outValue = s.outValue.add(c.getOutValue());
} }
@ -652,7 +837,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
vo.setProgressCategoryName(name + "/" + childName); vo.setProgressCategoryName(name + "/" + childName);
vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit));
vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType));
vo.setNumber(summary.number); vo.setNumber(BigDecimal.valueOf(summary.number));
vo.setArtificialNum(summary.artificialNum);
vo.setUavNum(summary.uavNum);
vo.setConfirmNum(summary.confirmNum);
vo.setOwnerValue(summary.ownerValue); vo.setOwnerValue(summary.ownerValue);
vo.setOutValue(summary.outValue); vo.setOutValue(summary.outValue);
return vo; return vo;
@ -681,7 +869,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
vo.setProgressCategoryName(name + "/" + childName); vo.setProgressCategoryName(name + "/" + childName);
vo.setUnit(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnit)); vo.setUnit(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnit));
vo.setUnitType(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnitType)); vo.setUnitType(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnitType));
vo.setNumber(summary.number); vo.setNumber(BigDecimal.valueOf(summary.number));
vo.setArtificialNum(summary.artificialNum);
vo.setUavNum(summary.uavNum);
vo.setConfirmNum(summary.confirmNum);
vo.setOwnerValue(summary.ownerValue); vo.setOwnerValue(summary.ownerValue);
vo.setOutValue(summary.outValue); vo.setOutValue(summary.outValue);
return vo; return vo;
@ -717,7 +908,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
vo.setSubProjectName(projectNameMap.getOrDefault(pid, project.getProjectName())); vo.setSubProjectName(projectNameMap.getOrDefault(pid, project.getProjectName()));
vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit));
vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType));
vo.setNumber(summary.number); vo.setNumber(BigDecimal.valueOf(summary.number));
vo.setArtificialNum(summary.artificialNum);
vo.setUavNum(summary.uavNum);
vo.setConfirmNum(summary.confirmNum);
vo.setOwnerValue(summary.ownerValue); vo.setOwnerValue(summary.ownerValue);
vo.setOutValue(summary.outValue); vo.setOutValue(summary.outValue);
return vo; return vo;