From aec8667edce8bb8c69d7db979bb71514a015d315 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Thu, 16 Oct 2025 15:18:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E8=AE=A1=E5=88=92=E4=BA=A7?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PgsProgressCategoryController.java | 9 ++++ .../PgsProgressCategoryValueVo.java | 28 ++++++++++ .../service/IPgsProgressCategoryService.java | 15 +++++- .../impl/PgsProgressCategoryServiceImpl.java | 54 +++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryValueVo.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryController.java index 1f78cb59..2d7b8cf7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressCategoryController.java @@ -79,6 +79,15 @@ public class PgsProgressCategoryController extends BaseController { return R.ok(list); } + /** + * 根据进度父级查询进度类别列表已完成产值 + */ + @SaCheckPermission("progress:progressCategory:listByParent") + @GetMapping("/getValueByParentId") + public R getValueByParentId(PgsProgressCategoryQueryByParentReq req) { + return R.ok(pgsProgressCategoryService.getValueByParentId(req)); + } + /** * 根据项目获取进度类别模版顶级目录列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryValueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryValueVo.java new file mode 100644 index 00000000..63e3e19c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/vo/progresscategory/PgsProgressCategoryValueVo.java @@ -0,0 +1,28 @@ +package org.dromara.progress.domain.vo.progresscategory; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-10-16 11:41 + */ +@Data +public class PgsProgressCategoryValueVo implements Serializable { + + @Serial + private static final long serialVersionUID = -7985655623513612674L; + + /** + * 产值金额(业主) + */ + private BigDecimal ownerValue; + + /** + * 产值金额(分包) + */ + private BigDecimal constructionValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java index 6d446563..c16724bc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java @@ -155,7 +155,12 @@ public interface IPgsProgressCategoryService extends IService> getMatrixIdAndNumber(Long projectId); - + /** + * 转换进度类别vo为进度类别实体 + * + * @param vo 进度类别vo + * @return 进度类别实体 + */ PgsProgressCategory convertVoToEntity(PgsProgressCategoryVo vo); /** @@ -246,4 +251,12 @@ public interface IPgsProgressCategoryService extends IService getGanttStructureList(Long progressCategoryId); + + /** + * 获取进度类别产值 + * + * @param req 查询条件 + * @return 进度类别产值 + */ + PgsProgressCategoryValueVo getValueByParentId(PgsProgressCategoryQueryByParentReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java index f83ddab2..d16940c0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressCategoryServiceImpl.java @@ -2126,6 +2126,60 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.apply("FIND_IN_SET({0}, ancestors)", parentId); + queryWrapper.like(StringUtils.isNotBlank(name), "name", name); + List progressCategoryList = this.list(queryWrapper); + if (CollUtil.isEmpty(progressCategoryList)) { + return vo; + } + // 过滤掉那些还有子节点的,只保留最底层 + Set parentIds = progressCategoryList.stream() + .map(PgsProgressCategory::getParentId) + .collect(Collectors.toSet()); + List categoryList = progressCategoryList.stream() + .filter(item -> !parentIds.contains(item.getId())) // 没有被当作别人父id的,就是叶子节点 + .toList(); + // 统计完成产值 + BigDecimal ownerValue = categoryList.stream().map(item -> { + BigDecimal completed = item.getCompleted(); + BigDecimal ownerPrice = item.getOwnerPrice(); + if (item.getUnitType().equals(PgsProgressUnitTypeEnum.PERCENTAGE.getValue())) { + completed = completed.multiply(item.getTotal()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); + } + return completed.multiply(ownerPrice); + }).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_UP); + vo.setOwnerValue(ownerValue); + // 统计施工产值 + BigDecimal constructionValue = categoryList.stream().map(item -> { + BigDecimal completed = item.getCompleted(); + BigDecimal constructionPrice = item.getConstructionPrice(); + if (item.getUnitType().equals(PgsProgressUnitTypeEnum.PERCENTAGE.getValue())) { + completed = completed.multiply(item.getTotal()).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); + } + return completed.multiply(constructionPrice); + }).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(4, RoundingMode.HALF_UP); + vo.setConstructionValue(constructionValue); + return vo; + } + /** * 计算进度类别(含子类别)的开始和结束时间。 *