From 24820701b09281e03edf2e22db62edab7f4da53b Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期二, 10 三月 2026 16:08:09 +0800
Subject: [PATCH] feat(info): 支持获取并返回下级项目信息

---
 src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java |   37 +++++++++++++++++++++++++++----------
 src/main/java/com/ruoyi/projectManagement/vo/InfoVo.java                             |    5 +++++
 src/main/java/com/ruoyi/projectManagement/service/impl/InfoServiceImpl.java          |    7 +++++--
 3 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/ruoyi/projectManagement/service/impl/InfoServiceImpl.java b/src/main/java/com/ruoyi/projectManagement/service/impl/InfoServiceImpl.java
index 2c21be4..8bcfc2b 100644
--- a/src/main/java/com/ruoyi/projectManagement/service/impl/InfoServiceImpl.java
+++ b/src/main/java/com/ruoyi/projectManagement/service/impl/InfoServiceImpl.java
@@ -105,6 +105,9 @@
         CompletableFuture<ShippingAddressDto> shippingFuture = CompletableFuture.supplyAsync(() -> shippingAddressHandleService.getByInfoId(id));
         CompletableFuture<List<SalesLedgerProduct>> listCompletableFuture = CompletableFuture.supplyAsync(() -> salesLedgerService.getSalesLedgerProductListByRelateId(id,SaleEnum.MANAGEMENT));
 
+        // 涓嬬骇椤圭洰淇℃伅
+        CompletableFuture<List<SaveInfoDto>> subordinateInfoListFuture = CompletableFuture.supplyAsync(() -> infoHandleService.getSubordinateInfo(id));
+
         // 鍟嗗搧
 
         // 绛夊緟鎵�鏈夊紓姝ュ畬鎴�
@@ -114,13 +117,13 @@
         ContractInfoDto contract = contractFuture.get();
         ShippingAddressDto shippingAddress = shippingFuture.get();
         List<SalesLedgerProduct> salesLedgerProductList = listCompletableFuture.get();
-
+        List<SaveInfoDto> saveInfoDtos = subordinateInfoListFuture.get();
         InfoVo vo = new InfoVo();
         vo.setInfo(info);
         vo.setContractInfo(contract);
         vo.setShippingAddress(shippingAddress);
         vo.setSalesLedgerProductList(salesLedgerProductList);
-
+        vo.setSubordinateInfoList(saveInfoDtos);
         return vo;
     }
 
diff --git a/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java b/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java
index 4f00fa6..73a18fe 100644
--- a/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java
+++ b/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java
@@ -8,15 +8,12 @@
 import com.ruoyi.basic.service.CustomerFollowUpFileService;
 import com.ruoyi.common.enums.PlanStageEnum;
 import com.ruoyi.common.enums.ReviewStatusEnum;
-import com.ruoyi.common.utils.EnumUtil;
 import com.ruoyi.projectManagement.dto.PlanStageDto;
 import com.ruoyi.projectManagement.dto.SaveInfoDto;
 import com.ruoyi.projectManagement.mapper.InfoMapper;
 import com.ruoyi.projectManagement.pojo.Info;
 import com.ruoyi.projectManagement.pojo.PlanNode;
 import com.ruoyi.projectManagement.service.PlanService;
-import com.ruoyi.projectManagement.service.impl.PlanServiceImpl;
-import com.ruoyi.projectManagement.vo.PlanVo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,7 +31,7 @@
  */
 @Component
 @RequiredArgsConstructor
-@Transactional(rollbackFor = Exception.class,readOnly = true)
+@Transactional(rollbackFor = Exception.class, readOnly = true)
 public class InfoHandleService {
 
     private static final String GENERATE_SERIAL_NUMBER_PREFIX = "XM";
@@ -46,7 +43,7 @@
     private final CustomerFollowUpFileService customerFollowUpFileService;
 
     @Transactional(rollbackFor = Exception.class)
-    public Long save(@NotNull SaveInfoDto saveInfoDto){
+    public Long save(@NotNull SaveInfoDto saveInfoDto) {
         Info info = BeanUtil.copyProperties(saveInfoDto, Info.class);
 
         // 闄勪欢鐗规畩澶勭悊
@@ -54,41 +51,61 @@
         info.setAttachment(attachmentIds);
 
         // 鐢熸垚搴忓彿 (濡傛灉闇�瑕佽嚜鍔ㄧ敓鎴愮殑璇�)
-        if(StrUtil.isBlank(info.getNo())){
+        if (StrUtil.isBlank(info.getNo())) {
             info.setNo(generateSerialNumber());
         }
         info.setTeam(saveInfoDto.getTeamList());
-        if(info.getId() == null){
+        if (info.getId() == null) {
             // 鐢熸垚瀵瑰簲鐨勯樁娈靛叧绯绘暟鎹�
             info.setPlanStage(getPlanStageList(info.getProjectManagementPlanId()));
             // 鎻掑叆榛樿鐘舵��
             info.setStatus(PlanStageEnum.TO_BEGIN.getCode());
             info.setReviewStatus(ReviewStatusEnum.PENDING_REVIEW.getCode());
             infoMapper.insert(info);
-        }else {
+        } else {
             infoMapper.updateById(info);
         }
         return info.getId();
     }
 
-    public SaveInfoDto getInfoById(@NotNull Long id){
+    public SaveInfoDto getInfoById(@NotNull Long id) {
         Info info = infoMapper.selectById(id);
+        return convert(info);
+    }
+
+    private SaveInfoDto convert(Info info) {
         SaveInfoDto saveInfoDto = BeanUtil.copyProperties(info, SaveInfoDto.class);
         // 闄勪欢澶勭悊
         saveInfoDto.setTeamList(info.getTeam());
         customerFollowUpFileService.fillAttachment(Lists.newArrayList(saveInfoDto), SaveInfoDto::getAttachment, SaveInfoDto::setAttachmentList);
         return saveInfoDto;
+
+    }
+
+    /**
+     * 鑾峰彇鏀筰d涓嬪瓙椤圭洰淇℃伅
+     *
+     * @param id
+     * @return
+     */
+    public List<SaveInfoDto> getSubordinateInfo(@NotNull Long id) {
+        LambdaQueryWrapper<Info> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Info::getProjectManagementInfoParentId, id);
+        queryWrapper.orderByAsc(Info::getCreateTime);
+        List<Info> infoList = infoMapper.selectList(queryWrapper);
+        return infoList.stream().map(this::convert).collect(Collectors.toList());
     }
 
 
     private List<PlanStageDto> getPlanStageList(@NotNull Long planId) {
         List<PlanNode> planNodeByPlanId = planService.getPlanNodeByPlanId(planId);
-        return planNodeByPlanId.stream().map(it-> new PlanStageDto(it.getId(), it.getName(), PlanStageEnum.TO_BEGIN)).collect(Collectors.toList());
+        return planNodeByPlanId.stream().map(it -> new PlanStageDto(it.getId(), it.getName(), PlanStageEnum.TO_BEGIN)).collect(Collectors.toList());
     }
 
 
     /**
      * 鐢熸垚椤圭洰缂栧彿
+     *
      * @return
      */
     private String generateSerialNumber() {
diff --git a/src/main/java/com/ruoyi/projectManagement/vo/InfoVo.java b/src/main/java/com/ruoyi/projectManagement/vo/InfoVo.java
index 147f0a6..e892cb1 100644
--- a/src/main/java/com/ruoyi/projectManagement/vo/InfoVo.java
+++ b/src/main/java/com/ruoyi/projectManagement/vo/InfoVo.java
@@ -1,11 +1,13 @@
 package com.ruoyi.projectManagement.vo;
 
+import com.ruoyi.projectManagement.dto.SaveInfoDto;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author buhuazhen
@@ -21,4 +23,7 @@
 
     // 椤圭洰闃舵
     private String xxx;
+
+    // 涓嬬骇椤圭洰
+    private List<SaveInfoDto> subordinateInfoList;
 }

--
Gitblit v1.9.3