施工产值
This commit is contained in:
@ -8,7 +8,6 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
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.log.annotation.Log;
|
||||
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.OutConstructionValueFacilityReq;
|
||||
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.service.IOutConstructionValueService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -49,14 +49,13 @@ public class OutConstructionValueController extends BaseController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出施工产值列表
|
||||
* 查询施工产值合计列表
|
||||
*/
|
||||
@SaCheckPermission("out:constructionValue:export")
|
||||
@Log(title = "施工产值", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(OutConstructionValueBo bo, HttpServletResponse response) {
|
||||
List<OutConstructionValueVo> list = outConstructionValueService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "施工产值", OutConstructionValueVo.class, response);
|
||||
@SaCheckPermission("out:constructionValue:list")
|
||||
@GetMapping("/totalList")
|
||||
public R<List<OutConstructionValueTotalVo>> totalList(OutConstructionValueBo bo) {
|
||||
List<OutConstructionValueTotalVo> list = outConstructionValueService.queryList(bo);
|
||||
return R.ok(list);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -109,5 +109,9 @@ public class OutConstructionValueBo extends BaseEntity {
|
||||
*/
|
||||
private LocalDate endDate;
|
||||
|
||||
/**
|
||||
* 项目类型
|
||||
*/
|
||||
private String projectType;
|
||||
|
||||
}
|
||||
|
||||
@ -57,6 +57,21 @@ public class OutConstructionValueMatrixVo {
|
||||
@ExcelProperty(value = "数量")
|
||||
private BigDecimal number;
|
||||
|
||||
/**
|
||||
* 人工填报数量
|
||||
*/
|
||||
private Integer artificialNum;
|
||||
|
||||
/**
|
||||
* 无人机识别数量
|
||||
*/
|
||||
private Integer uavNum;
|
||||
|
||||
/**
|
||||
* 确认数量
|
||||
*/
|
||||
private Integer confirmNum;
|
||||
|
||||
/**
|
||||
* 对甲产值
|
||||
*/
|
||||
|
||||
@ -45,6 +45,21 @@ public class OutConstructionValueProjectVo {
|
||||
@ExcelProperty(value = "数量")
|
||||
private BigDecimal number;
|
||||
|
||||
/**
|
||||
* 人工填报数量
|
||||
*/
|
||||
private Integer artificialNum;
|
||||
|
||||
/**
|
||||
* 无人机识别数量
|
||||
*/
|
||||
private Integer uavNum;
|
||||
|
||||
/**
|
||||
* 确认数量
|
||||
*/
|
||||
private Integer confirmNum;
|
||||
|
||||
/**
|
||||
* 对甲产值
|
||||
*/
|
||||
|
||||
@ -51,6 +51,21 @@ public class OutConstructionValueSubProjectVo {
|
||||
@ExcelProperty(value = "数量")
|
||||
private BigDecimal number;
|
||||
|
||||
/**
|
||||
* 人工填报数量
|
||||
*/
|
||||
private Integer artificialNum;
|
||||
|
||||
/**
|
||||
* 无人机识别数量
|
||||
*/
|
||||
private Integer uavNum;
|
||||
|
||||
/**
|
||||
* 确认数量
|
||||
*/
|
||||
private Integer confirmNum;
|
||||
|
||||
/**
|
||||
* 对甲产值
|
||||
*/
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -7,7 +7,7 @@ import lombok.Data;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
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.Serializable;
|
||||
@ -82,6 +82,6 @@ public class OutConstructionValueRangeVo implements Serializable {
|
||||
/**
|
||||
* 子项列表
|
||||
*/
|
||||
private List<OutConstructionValueVo> constructionValueVoList;
|
||||
private List<OutConstructionValueTotalVo> constructionValueVoList;
|
||||
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ import org.dromara.out.domain.bo.OutConstructionValueBo;
|
||||
import org.dromara.out.domain.bo.OutConstructionValueFacilityReq;
|
||||
import org.dromara.out.domain.vo.OutConstructionAllValueVo;
|
||||
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.progress.domain.PgsProgressCategory;
|
||||
|
||||
@ -47,7 +48,7 @@ public interface IOutConstructionValueService extends IService<OutConstructionVa
|
||||
* @param bo 查询条件
|
||||
* @return 施工产值列表
|
||||
*/
|
||||
List<OutConstructionValueVo> queryList(OutConstructionValueBo bo);
|
||||
List<OutConstructionValueTotalVo> queryList(OutConstructionValueBo bo);
|
||||
|
||||
/**
|
||||
* 新增施工产值
|
||||
|
||||
@ -40,7 +40,6 @@ import org.dromara.out.service.IOutConstructionValueRangeService;
|
||||
import org.dromara.out.service.IOutConstructionValueService;
|
||||
import org.dromara.progress.domain.PgsProgressCategory;
|
||||
import org.dromara.progress.domain.PgsProgressPlanDetail;
|
||||
import org.dromara.progress.service.IPgsProgressCategoryService;
|
||||
import org.dromara.progress.service.IPgsProgressPlanDetailService;
|
||||
import org.dromara.project.domain.BusProject;
|
||||
import org.dromara.project.service.IBusProjectService;
|
||||
@ -472,12 +471,8 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl<OutConstru
|
||||
* @param summary 合计
|
||||
* @return 项目VO
|
||||
*/
|
||||
private OutConstructionValueRangeProjectVo buildProjectVo(
|
||||
BusProject project,
|
||||
String name,
|
||||
String childName,
|
||||
List<OutConstructionValueCategoryVo> list,
|
||||
Summary summary) {
|
||||
private OutConstructionValueRangeProjectVo buildProjectVo(BusProject project, String name, String childName,
|
||||
List<OutConstructionValueCategoryVo> list, Summary summary) {
|
||||
OutConstructionValueRangeProjectVo vo = new OutConstructionValueRangeProjectVo();
|
||||
vo.setProjectName(project.getProjectName());
|
||||
vo.setProgressCategoryName(name + "/" + childName);
|
||||
@ -499,13 +494,9 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl<OutConstru
|
||||
* @param summary 合计
|
||||
* @return 子项VO
|
||||
*/
|
||||
private OutConstructionValueRangeSubProjectVo buildSubProjectVo(
|
||||
BusProject project,
|
||||
String name,
|
||||
String childName,
|
||||
private OutConstructionValueRangeSubProjectVo buildSubProjectVo(BusProject project, String name, String childName,
|
||||
Map.Entry<Long, List<OutConstructionValueCategoryVo>> entry,
|
||||
Map<Long, String> projectNameMap,
|
||||
Summary summary) {
|
||||
Map<Long, String> projectNameMap, Summary summary) {
|
||||
OutConstructionValueRangeSubProjectVo vo = new OutConstructionValueRangeSubProjectVo();
|
||||
vo.setProjectName(project.getProjectName());
|
||||
vo.setSubProjectName(projectNameMap.get(entry.getKey()));
|
||||
@ -529,13 +520,9 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl<OutConstru
|
||||
* @param summary 合计
|
||||
* @return 方阵VO
|
||||
*/
|
||||
private OutConstructionValueRangeMatrixVo buildMatrixVo(
|
||||
BusProject project,
|
||||
String name,
|
||||
String childName,
|
||||
private OutConstructionValueRangeMatrixVo buildMatrixVo(BusProject project, String name, String childName,
|
||||
Map.Entry<String, List<OutConstructionValueCategoryVo>> entry,
|
||||
Map<Long, String> projectNameMap,
|
||||
Summary summary) {
|
||||
Map<Long, String> projectNameMap, Summary summary) {
|
||||
List<OutConstructionValueCategoryVo> list = entry.getValue();
|
||||
OutConstructionValueRangeMatrixVo vo = new OutConstructionValueRangeMatrixVo();
|
||||
vo.setProjectName(project.getProjectName());
|
||||
|
||||
@ -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.PgsProgressPlanDetailFinishedCreateReq;
|
||||
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.service.IPgsProgressCategoryService;
|
||||
import org.dromara.progress.service.IPgsProgressPlanDetailService;
|
||||
@ -115,11 +116,179 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
* @return 施工产值列表
|
||||
*/
|
||||
@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);
|
||||
List<OutConstructionValueVo> outConstructionValueVos = baseMapper.selectVoList(lqw);
|
||||
supplementaryData(outConstructionValueVos);
|
||||
return outConstructionValueVos;
|
||||
List<OutConstructionValue> valueList = this.list(lqw);
|
||||
if (CollUtil.isEmpty(valueList)) {
|
||||
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) {
|
||||
@ -155,9 +324,16 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
categoryLqw.select(PgsProgressCategory::getId);
|
||||
categoryLqw.eq(PgsProgressCategory::getUnitType, bo.getUnitType());
|
||||
categoryLqw.eq(bo.getMatrixId() != null, PgsProgressCategory::getMatrixId, bo.getMatrixId());
|
||||
if (CollUtil.isNotEmpty(ids)) {
|
||||
categoryLqw.in(PgsProgressCategory::getProjectId, ids);
|
||||
categoryLqw.in(CollUtil.isNotEmpty(ids), 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);
|
||||
if (CollUtil.isNotEmpty(progressCategories)) {
|
||||
List<Long> categoryIds = progressCategories.stream().map(PgsProgressCategory::getId).toList();
|
||||
@ -441,7 +617,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
OutConstructionValueProjectVo projectVo =
|
||||
buildProjectVo(project, name, childName, childrenEntryValue, summary);
|
||||
projectVoList.add(projectVo);
|
||||
totalNumber = totalNumber.add(summary.number);
|
||||
totalNumber = totalNumber.add(BigDecimal.valueOf(summary.number));
|
||||
totalOwnerValue = totalOwnerValue.add(summary.ownerValue);
|
||||
totalOutValue = totalOutValue.add(summary.outValue);
|
||||
// ======= 构建子项目级数据 =======
|
||||
@ -453,7 +629,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
OutConstructionValueSubProjectVo subVo =
|
||||
buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary);
|
||||
subProjectVoList.add(subVo);
|
||||
subTotalNumber = subTotalNumber.add(subSummary.number);
|
||||
subTotalNumber = subTotalNumber.add(BigDecimal.valueOf(subSummary.number));
|
||||
subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue);
|
||||
subTotalOutValue = subTotalOutValue.add(subSummary.outValue);
|
||||
}
|
||||
@ -467,7 +643,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
OutConstructionValueMatrixVo matrixVo =
|
||||
buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary);
|
||||
matrixVoList.add(matrixVo);
|
||||
matrixTotalNumber = matrixTotalNumber.add(matrixSummary.number);
|
||||
matrixTotalNumber = matrixTotalNumber.add(BigDecimal.valueOf(matrixSummary.number));
|
||||
matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue);
|
||||
matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue);
|
||||
}
|
||||
@ -587,7 +763,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
* 汇总静态类
|
||||
*/
|
||||
static class Summary {
|
||||
BigDecimal number;
|
||||
Integer number;
|
||||
Integer artificialNum;
|
||||
Integer uavNum;
|
||||
Integer confirmNum;
|
||||
BigDecimal ownerValue;
|
||||
BigDecimal outValue;
|
||||
}
|
||||
@ -600,7 +779,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
*/
|
||||
private Summary calculateSummary(List<OutConstructionValueCategoryVo> list) {
|
||||
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.outValue = BigDecimal.ZERO;
|
||||
for (OutConstructionValueCategoryVo c : list) {
|
||||
@ -608,7 +790,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
? c.getArtificialNum() + c.getUavNum()
|
||||
: 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.outValue = s.outValue.add(c.getOutValue());
|
||||
}
|
||||
@ -652,7 +837,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
vo.setProgressCategoryName(name + "/" + childName);
|
||||
vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit));
|
||||
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.setOutValue(summary.outValue);
|
||||
return vo;
|
||||
@ -681,7 +869,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
vo.setProgressCategoryName(name + "/" + childName);
|
||||
vo.setUnit(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnit));
|
||||
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.setOutValue(summary.outValue);
|
||||
return vo;
|
||||
@ -717,7 +908,10 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
|
||||
vo.setSubProjectName(projectNameMap.getOrDefault(pid, project.getProjectName()));
|
||||
vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit));
|
||||
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.setOutValue(summary.outValue);
|
||||
return vo;
|
||||
|
||||
Reference in New Issue
Block a user