1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
| @Slf4j @Service public class RichWomanService {
private final List<RichWoman> database = new ArrayList<>(); private final Random random = new Random();
private final List<String> chineseSurnames = List.of( "李", "王", "张", "刘", "陈", "杨", "黄", "周", "吴", "赵", "林", "徐", "孙", "马", "朱", "胡", "郭", "何", "高", "郑" );
private final List<String> femaleGivenNames = List.of( "婉如", "雅婷", "思琪", "梦瑶", "欣怡", "雨萱", "晓雯", "静怡", "诗涵", "美玲", "慧琳", "嘉欣", "雪梅", "丽华", "春燕", "秋月", "紫薇", "若兰", "芷晴", "慧敏", "雅静", "燕妮", "薇薇", "晓彤", "梦洁", "心怡", "玉婷", "思思", "雅雯", "诗琪", "雨婷", "慧君", "秀英", "丽娜", "芳芳", "婷婷", "艳艳", "燕燕", "莉莉", "娟娟", "琳琳", "丹丹", "萍萍", "颖颖", "璐璐", "晶晶", "敏敏", "倩倩", "婷婷", "雪莲" );
private final Set<String> usedNames = new HashSet<>();
private final List<String> chineseCities = List.of( "北京", "上海", "深圳", "广州", "杭州", "成都", "重庆", "南京", "武汉", "苏州", "天津", "西安", "长沙", "青岛", "郑州", "宁波", "厦门", "香港", "澳门", "台北", "佛山", "东莞", "无锡", "合肥", "昆明", "大连", "沈阳", "济南", "福州", "珠海" );
@JsonIgnoreProperties(ignoreUnknown = true) public record RichWoman( String name, String phone, // 新增手机号字段 int age, double fortune, // 资产(单位:亿元) String industry, String city, String hobby ) {}
public RichWomanService() { this.initMockData(); }
public void initMockData() { String[] industries = {"互联网科技", "房地产开发", "金融投资", "生物医药", "新能源", "影视娱乐","教育培训", "餐饮连锁", "制造业", "电子商务", "文化传媒", "医疗健康"};
String[] hobbies = {"收藏珠宝", "环球旅行", "艺术品收藏", "慈善事业", "马术", "品茶", "高尔夫", "瑜伽冥想", "古典音乐", "书画收藏", "时尚设计", "国学研习"};
for (int i = 0; i < 50; i++) { String name; do { name = generateRandomName(); } while (usedNames.contains(name));
usedNames.add(name);
database.add(new RichWoman( name, generateRandomPhone(), 25 + random.nextInt(35), 3 + random.nextDouble() * 97, industries[random.nextInt(industries.length)], chineseCities.get(random.nextInt(chineseCities.size())), hobbies[random.nextInt(hobbies.length)] )); }
addSpecialWoman("张雨薇", "深圳", "科技投资", 285.7, "AI研究"); addSpecialWoman("王雅婷", "杭州", "电子商务", 320.5, "慈善事业"); addSpecialWoman("李静怡", "香港", "房地产开发", 450.2, "书画收藏"); addSpecialWoman("陈晓雯", "北京", "新能源", 380.0, "国学研习"); addSpecialWoman("刘诗涵", "上海", "金融投资", 420.8, "古典音乐"); }
private void addSpecialWoman(String name, String city, String industry, double fortune, String hobby) { if (!usedNames.contains(name)) { usedNames.add(name); database.add(new RichWoman( name, generateRandomPhone(), 35 + random.nextInt(20), fortune, industry, city, hobby )); } }
private String generateRandomPhone() { String[] prefixes = {"130", "131", "132", "133", "134", "135", "136", "137", "138", "139", "150", "151", "152", "153", "155", "156", "157", "158", "159", "180", "181", "182", "183", "184", "185", "186", "187", "188", "189"};
String prefix = prefixes[random.nextInt(prefixes.length)]; StringBuilder sb = new StringBuilder(prefix);
for (int i = 0; i < 8; i++) { sb.append(random.nextInt(10)); }
return sb.toString(); }
private String generateRandomName() { String surname = chineseSurnames.get(random.nextInt(chineseSurnames.size())); String givenName = femaleGivenNames.get(random.nextInt(femaleGivenNames.size())); return surname + givenName; }
@Tool(description = "获取所有富婆数据") public String findAll() { log.info("查询所有富婆"); return formatRichWomen(database); }
@Tool(description = "通过城市名称获取富婆信息") public String findByCityName(String cityName) { log.info("查询富婆,cityName={}",cityName); List<RichWoman> result = database.stream() .filter(w -> w.city().contains(cityName.trim())) .toList(); return formatRichWomen(result); }
@Tool(description = "获取资产在某个数值之上的富婆数据") public String findByFortuneGreaterThan(double minFortune) { log.info("查询富婆,minFortune={}",minFortune); List<RichWoman> result = database.stream() .filter(w -> w.fortune() >= minFortune) .toList(); return formatRichWomen(result); }
@Tool(description = "通过关键词搜索富婆信息") public String search(String keyword) { log.info("查询富婆,keyword={}",keyword); String lowerKeyword = keyword.toLowerCase(); List<RichWoman> result = database.stream() .filter(w -> w.name().toLowerCase().contains(lowerKeyword) || w.phone().contains(keyword) || w.industry().toLowerCase().contains(lowerKeyword) || w.city().toLowerCase().contains(lowerKeyword) || w.hobby().toLowerCase().contains(lowerKeyword) ) .toList(); return formatRichWomen(result); }
@Tool(description = "通过手机号查找富婆") public String findByPhone(@ToolParam(description = "手机号码") String phone) { log.info("查询富婆,phone={}",phone); Optional<RichWoman> result = database.stream() .filter(w -> w.phone().equals(phone)) .findFirst(); return result.map(this::formatRichWoman) .orElse("未找到手机号[" + phone + "]对应的富婆信息"); }
private String formatRichWoman(RichWoman woman) { return String.format( "姓名:%s,手机号:%s,年龄:%d岁,资产:%.1f亿元,行业:%s,所在城市:%s,爱好:%s", woman.name(), woman.phone(), woman.age(), woman.fortune(), woman.industry(), woman.city(), woman.hobby() ); }
private String formatRichWomen(List<RichWoman> women) { if (women.isEmpty()) { return "未找到符合条件的富婆信息"; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < women.size(); i++) { sb.append(i + 1).append(". ").append(formatRichWoman(women.get(i))); if (i < women.size() - 1) { sb.append("\n"); } } return sb.toString(); } }
|