FundService.java 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package com.simuwang.daq.service;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.simuwang.base.mapper.FundAliasMapper;
  5. import com.simuwang.base.mapper.FundInfoMapper;
  6. import com.simuwang.base.pojo.dos.FundAliasDO;
  7. import com.simuwang.base.pojo.dos.FundInfoDO;
  8. import org.springframework.stereotype.Service;
  9. import java.util.List;
  10. import java.util.Objects;
  11. import java.util.stream.Collectors;
  12. @Service
  13. public class FundService {
  14. private final FundInfoMapper fundInfoMapper;
  15. private final FundAliasMapper fundAliasMapper;
  16. public FundService(FundInfoMapper fundInfoMapper, FundAliasMapper fundAliasMapper) {
  17. this.fundInfoMapper = fundInfoMapper;
  18. this.fundAliasMapper = fundAliasMapper;
  19. }
  20. /**
  21. * 根据基金名称和备案编码匹配基金信息
  22. *
  23. * @param fundName 基金名称
  24. * @param registerNumber 备案编码
  25. * @return 匹配上的基金id
  26. */
  27. public List<String> getFundIdByNamesAndCode(String fundName, String registerNumber) {
  28. List<FundInfoDO> fundInfoDOList = getFundInfoByNamesAndCode(fundName, registerNumber);
  29. return fundInfoDOList.stream().map(FundInfoDO::getFundId).distinct().collect(Collectors.toList());
  30. }
  31. /**
  32. * 根据基金名称和备案编码匹配基金信息
  33. *
  34. * @param fundName 基金名称
  35. * @param registerNumber 备案编码
  36. * @return 匹配上的基金信息(基金id, 基金名称, 备案编码)
  37. */
  38. public List<FundInfoDO> getFundInfoByNamesAndCode(String fundName, String registerNumber) {
  39. // 1.基金名称 + 备案编码 一起进行匹配
  40. List<FundInfoDO> fundInfoDOList = fundInfoMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
  41. if (CollUtil.isNotEmpty(fundInfoDOList)) {
  42. return fundInfoDOList;
  43. }
  44. List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
  45. if (CollUtil.isNotEmpty(fundAliasDOList)) {
  46. return fundAliasDOList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
  47. }
  48. // 2.基金名称匹配
  49. if (StrUtil.isNotBlank(fundName) && StrUtil.isBlank(registerNumber)) {
  50. List<FundInfoDO> fundInfos = fundInfoMapper.queryFundByName(fundName);
  51. if (CollUtil.isNotEmpty(fundInfos)) {
  52. return fundInfos;
  53. }
  54. List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByName(fundName);
  55. if (CollUtil.isNotEmpty(fundAliasList)) {
  56. return fundAliasList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
  57. }
  58. }
  59. // 3.备案编码匹配
  60. if (StrUtil.isBlank(fundName) && StrUtil.isNotBlank(registerNumber)) {
  61. List<FundInfoDO> fundInfos = fundInfoMapper.queryFundByRegisterNumber(registerNumber);
  62. if (CollUtil.isNotEmpty(fundInfos)) {
  63. return fundInfos;
  64. }
  65. List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
  66. if (CollUtil.isNotEmpty(fundAliasList)) {
  67. return fundAliasList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
  68. }
  69. }
  70. return CollUtil.newArrayList();
  71. }
  72. public FundInfoDO convertToFundInfoDO(FundAliasDO fundAliasDO) {
  73. if (fundAliasDO == null || StrUtil.isBlank(fundAliasDO.getTargetFundId())) {
  74. return null;
  75. }
  76. FundInfoDO fundInfoDO = new FundInfoDO();
  77. fundInfoDO.setFundId(fundAliasDO.getTargetFundId());
  78. fundInfoDO.setFundName(fundAliasDO.getTargetFundName());
  79. fundInfoDO.setRegisterNumber(fundAliasDO.getTargetRegisterNumber());
  80. return fundInfoDO;
  81. }
  82. }