施工产值
This commit is contained in:
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -109,5 +109,9 @@ public class OutConstructionValueBo extends BaseEntity {
|
|||||||
*/
|
*/
|
||||||
private LocalDate endDate;
|
private LocalDate endDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目类型
|
||||||
|
*/
|
||||||
|
private String projectType;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对甲产值
|
* 对甲产值
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对甲产值
|
* 对甲产值
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 对甲产值
|
* 对甲产值
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -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.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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增施工产值
|
* 新增施工产值
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user