FundService.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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.daq.FundAliasMapper;
  5. import com.simuwang.base.mapper.daq.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. // 基金名称 + 备案编码
  40. if (StrUtil.isNotBlank(registerNumber) && StrUtil.isNotBlank(fundName)) {
  41. List<FundInfoDO> fundInfoDOList = fundInfoMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
  42. if (CollUtil.isNotEmpty(fundInfoDOList)) {
  43. return fundInfoDOList;
  44. }
  45. List<FundAliasDO> fundAliasDOList = fundAliasMapper.queryFundByNameAndRegisterNumber(fundName, registerNumber);
  46. if (CollUtil.isNotEmpty(fundAliasDOList)) {
  47. return fundAliasDOList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
  48. }
  49. }
  50. // 备案编码匹配
  51. if (StrUtil.isNotBlank(registerNumber) && StrUtil.isBlank(fundName)) {
  52. List<FundInfoDO> fundInfos = fundInfoMapper.queryFundByRegisterNumber(registerNumber);
  53. if (CollUtil.isNotEmpty(fundInfos)) {
  54. return fundInfos;
  55. }
  56. List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByRegisterNumber(registerNumber);
  57. if (CollUtil.isNotEmpty(fundAliasList)) {
  58. return fundAliasList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
  59. }
  60. }
  61. // 基金名称匹配
  62. if (StrUtil.isBlank(registerNumber) && StrUtil.isNotBlank(fundName)) {
  63. List<FundInfoDO> fundInfos = fundInfoMapper.queryFundByName(fundName);
  64. if (CollUtil.isNotEmpty(fundInfos)) {
  65. return fundInfos;
  66. }
  67. List<FundAliasDO> fundAliasList = fundAliasMapper.queryFundByName(fundName);
  68. if (CollUtil.isNotEmpty(fundAliasList)) {
  69. return fundAliasList.stream().map(this::convertToFundInfoDO).filter(Objects::nonNull).collect(Collectors.toList());
  70. }
  71. }
  72. return CollUtil.newArrayList();
  73. }
  74. public FundInfoDO convertToFundInfoDO(FundAliasDO fundAliasDO) {
  75. if (fundAliasDO == null || StrUtil.isBlank(fundAliasDO.getTargetFundId())) {
  76. return null;
  77. }
  78. FundInfoDO fundInfoDO = new FundInfoDO();
  79. fundInfoDO.setFundId(fundAliasDO.getTargetFundId());
  80. fundInfoDO.setFundName(fundAliasDO.getTargetFundName());
  81. fundInfoDO.setRegisterNumber(fundAliasDO.getTargetRegisterNumber());
  82. return fundInfoDO;
  83. }
  84. }