feat (farm): 物种库数据同步

- 物种库 三级联动,返回物种生命周期字段
This commit is contained in:
达富斌
2025-08-24 18:44:30 +08:00
parent 127ee55b51
commit 95d6ce997b
5 changed files with 40 additions and 11 deletions

View File

@@ -52,6 +52,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -291,10 +292,12 @@ public class DictController {
@GetMapping("/list/three-library")
public CommonResult<List<SpeciesClassifyLibraryRespVO>> getTreeLibraryList() {
try {
// 获取物种生命周期
Map<String, String> lifeCycMap = speciesLibraryService.getSpeciesLibraryForLifeCycMap();
// 获取物种类别字典数据
List<SysDictDO> dictList = sysDictService.getByTypeCode(CommonConstants.DICT_TYPE_CODE_3);
// 使用工具类构建树结构
List<SpeciesClassifyLibraryRespVO> threeList = TreeStructureUtil.buildSpeciesClassifyTree(dictList);
List<SpeciesClassifyLibraryRespVO> threeList = TreeStructureUtil.buildSpeciesClassifyTree(dictList,lifeCycMap);
return success(threeList);
} catch (Exception e) {
log.error("获取三级物种类别列表失败", e);

View File

@@ -21,6 +21,8 @@ public class SpeciesClassifyLibraryRespVO {
private String speciesClassCode;
@Schema(description = "一级分类-名称")
private String speciesClassName;
@Schema(description = "生命周期")
private String lifeCycle;
private List<SpeciesClassifyLibraryRespVO> children;
@@ -28,4 +30,10 @@ public class SpeciesClassifyLibraryRespVO {
this.speciesClassCode = speciesClassCode;
this.speciesClassName = speciesClassName;
}
public SpeciesClassifyLibraryRespVO(String speciesClassCode, String speciesClassName, String lifeCycle) {
this.speciesClassCode = speciesClassCode;
this.speciesClassName = speciesClassName;
this.lifeCycle = lifeCycle;
}
}

View File

@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.farm.dal.dataobject.specieslibrary.SpeciesLibrary
import jakarta.validation.Valid;
import java.util.List;
import java.util.Map;
/**
* 物种库维护 Service 接口
@@ -60,4 +61,10 @@ public interface SpeciesLibraryService {
*/
PageResult<SpeciesLibraryDO> getSpeciesLibraryPage(SpeciesLibraryPageReqVO pageReqVO);
/**
* 物种名称与生命周期
* @return
*/
Map<String, String> getSpeciesLibraryForLifeCycMap();
}

View File

@@ -18,6 +18,8 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
@@ -182,4 +184,15 @@ public class SpeciesLibraryServiceImpl implements SpeciesLibraryService {
return pageResult;
}
@Override
public Map<String, String> getSpeciesLibraryForLifeCycMap() {
List<SpeciesLibraryDO> list = speciesLibraryMapper.selectList();
return list.stream().collect(Collectors.toMap(
SpeciesLibraryDO::getCultivarName,
e -> String.valueOf(e.getLifeCycle()),
(v1, v2) -> v1
));
}
}

View File

@@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.farm.utils;
import cn.iocoder.yudao.module.farm.controller.admin.dict.vo.SpeciesClassifyLibraryRespVO;
import cn.iocoder.yudao.module.farm.dal.dataobject.speciesclassifylibrary.SpeciesClassifyLibraryDO;
import cn.iocoder.yudao.module.farm.dal.mysql.sysDict.SysDictDO;
import java.util.*;
@@ -22,7 +21,7 @@ public class TreeStructureUtil {
* @param dictList 字典数据列表
* @return 树形结构列表
*/
public static List<SpeciesClassifyLibraryRespVO> buildSpeciesClassifyTree(List<SysDictDO> dictList) {
public static List<SpeciesClassifyLibraryRespVO> buildSpeciesClassifyTree(List<SysDictDO> dictList, Map<String, String> lifeCycMap) {
if (dictList == null || dictList.isEmpty()) {
return new ArrayList<>();
}
@@ -38,7 +37,7 @@ public class TreeStructureUtil {
// 构建三级树形结构
return groupedByLevel1.entrySet().stream()
.map(entry -> buildLevel1Node(entry.getKey(), entry.getValue(), dictList))
.map(entry -> buildLevel1Node(entry.getKey(), entry.getValue(), dictList,lifeCycMap))
.filter(Objects::nonNull)
.sorted(Comparator.comparing(SpeciesClassifyLibraryRespVO::getSpeciesClassName))
.collect(Collectors.toList());
@@ -168,7 +167,8 @@ public class TreeStructureUtil {
/**
* 构建一级节点(包含二级和三级)
*/
private static SpeciesClassifyLibraryRespVO buildLevel1Node(String level1Code, List<SysDictDO> level1Children, List<SysDictDO> allDictList) {
private static SpeciesClassifyLibraryRespVO buildLevel1Node(String level1Code, List<SysDictDO> level1Children,
List<SysDictDO> allDictList,Map<String, String> lifeCycMap) {
if (level1Children == null || level1Children.isEmpty()) {
return null;
}
@@ -197,7 +197,7 @@ public class TreeStructureUtil {
// 构建二级节点列表
List<SpeciesClassifyLibraryRespVO> level2Nodes = groupedByLevel2.entrySet().stream()
.map(entry -> buildLevel2Node(entry.getKey(), entry.getValue(), allDictList))
.map(entry -> buildLevel2Node(entry.getKey(), entry.getValue(), allDictList,lifeCycMap))
.filter(Objects::nonNull)
.sorted(Comparator.comparing(SpeciesClassifyLibraryRespVO::getSpeciesClassName))
.collect(Collectors.toList());
@@ -209,7 +209,8 @@ public class TreeStructureUtil {
/**
* 构建二级节点(包含三级)
*/
private static SpeciesClassifyLibraryRespVO buildLevel2Node(String level2Code, List<SysDictDO> level2Children, List<SysDictDO> allDictList) {
private static SpeciesClassifyLibraryRespVO buildLevel2Node(String level2Code, List<SysDictDO> level2Children,
List<SysDictDO> allDictList,Map<String, String> lifeCycMap) {
if (level2Children == null || level2Children.isEmpty()) {
return null;
}
@@ -232,10 +233,7 @@ public class TreeStructureUtil {
List<SpeciesClassifyLibraryRespVO> level3Nodes = allDictList.stream()
.filter(dict -> isValidLevel3Node(dict)
&& level2Code.equals(dict.getField2Code()))
.map(dict -> new SpeciesClassifyLibraryRespVO(
dict.getField3Code(),
dict.getField3Name()
))
.map(dict -> new SpeciesClassifyLibraryRespVO(dict.getField3Code(), dict.getField3Name(),lifeCycMap.get(dict.getField3Name())))
.sorted(Comparator.comparing(SpeciesClassifyLibraryRespVO::getSpeciesClassName))
.collect(Collectors.toList());