From a9d2875bf65eda2f0cf15da1c6831ce0064481f2 Mon Sep 17 00:00:00 2001 From: Ruikang Zhang <1318019626@qq.com> Date: Wed, 26 Jun 2024 23:55:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=99=BB=E5=BD=95=E6=A8=A1?= =?UTF-8?q?=E5=9D=97:=E9=AA=8C=E8=AF=81=E7=A0=81=E7=99=BB=E5=BD=95(?= =?UTF-8?q?=E6=9B=B4=E6=94=B9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/system/domain/vo/EsDocEntity.java | 36 ++ .../system/controller/SysUserController.java | 10 +- .../ruoyi/system/mapper/SysUserMapper.java | 1 + .../ruoyi/system/service/ISysUserService.java | 2 +- .../service/impl/SysUserServiceImpl.java | 6 + .../com/ruoyi/system/utils/GenCodeUtils.java | 87 +++++ .../com/ruoyi/system/utils/HttpUtils.java | 310 ++++++++++++++++++ .../java/com/ruoyi/system/utils/MsgUtil.java | 50 +++ .../com/ruoyi/system/utils/StringUtils.java | 68 ++++ .../resources/mapper/system/SysUserMapper.xml | 9 +- .../common/core/constant/EsConstant.java | 5 + .../search/domain/request/HotWordsReq.java | 14 + 12 files changed, 590 insertions(+), 8 deletions(-) create mode 100644 ruoyi-base/base-es/base-es-common/src/main/java/com/ruoyi/system/domain/vo/EsDocEntity.java create mode 100644 ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/GenCodeUtils.java create mode 100644 ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/HttpUtils.java create mode 100644 ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/MsgUtil.java create mode 100644 ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/StringUtils.java create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/EsConstant.java create mode 100644 ruoyi-mall/ruoyi-mall-search/ruoyi-mall-search-common/src/main/java/com/ruoyi/mall/search/domain/request/HotWordsReq.java diff --git a/ruoyi-base/base-es/base-es-common/src/main/java/com/ruoyi/system/domain/vo/EsDocEntity.java b/ruoyi-base/base-es/base-es-common/src/main/java/com/ruoyi/system/domain/vo/EsDocEntity.java new file mode 100644 index 0000000..536a85c --- /dev/null +++ b/ruoyi-base/base-es/base-es-common/src/main/java/com/ruoyi/system/domain/vo/EsDocEntity.java @@ -0,0 +1,36 @@ +package com.ruoyi.system.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * @Author:ShenJiaFeng + * @Package:com.bawei.base.es.domain + * @Project:mall_cloud + * @name:EsDocEntity + * @Date:2024/4/24 9:36 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class EsDocEntity { + + /** + * 索引名称 + */ + private String index; + /** + * 批量操作 集合 多个键值对的列表 + */ + private List> datas; + /** + * 唯一标识 + */ + private String indexIdName; +} diff --git a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/controller/SysUserController.java index d2a7d2e..0687490 100644 --- a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/controller/SysUserController.java +++ b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/controller/SysUserController.java @@ -366,9 +366,9 @@ public class SysUserController extends BaseController * 手机号+验证码登录 */ @PostMapping("/loginByPhone") - public R info(@RequestBody SysUser sysUser) + public R info(@RequestBody SysUser sysUser) { - SysUser user = userService.selectUserByUserName(sysUser.getPhonenumber()); + SysUser user = userService.selectUserByPhone(sysUser.getPhonenumber()); if (StringUtils.isNull(user)) { return R.fail("手机号不存在"); @@ -380,15 +380,15 @@ public class SysUserController extends BaseController if (!redisTemplate.opsForValue().get("code").equals(user.getCode())){ return R.fail("验证码错误"); } - // 角色集合 + /* // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 Set permissions = permissionService.getMenuPermission(user); LoginUser sysUserVo = new LoginUser(); sysUserVo.setSysUser(sysUser); sysUserVo.setRoles(roles); - sysUserVo.setPermissions(permissions); - return R.ok(sysUserVo); + sysUserVo.setPermissions(permissions);*/ + return R.ok(user); } diff --git a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index 1fa06a8..b30ddd4 100644 --- a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -126,4 +126,5 @@ public interface SysUserMapper public SysUser checkEmailUnique(String email); + SysUser selectUserByPhone(String phonenumber); } diff --git a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/service/ISysUserService.java index 96d2565..3e8dc50 100644 --- a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -205,5 +205,5 @@ public interface ISysUserService public String importUser(List userList, Boolean isUpdateSupport, String operName); - + SysUser selectUserByPhone(String phonenumber); } diff --git a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 92fc302..89e28c2 100644 --- a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -538,6 +538,12 @@ public class SysUserServiceImpl implements ISysUserService return successMsg.toString(); } + @Override + public SysUser selectUserByPhone(String phonenumber) { + SysUser sysUser = userMapper.selectUserByPhone(phonenumber); + return sysUser; + + } } diff --git a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/GenCodeUtils.java b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/GenCodeUtils.java new file mode 100644 index 0000000..5374074 --- /dev/null +++ b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/GenCodeUtils.java @@ -0,0 +1,87 @@ +package com.ruoyi.system.utils; + +import java.util.Random; + +/** + * @author DongZl + * @description: 生成验证码工具类 + * @Date 2023-5-11 上午 10:09 + */ +public class GenCodeUtils { + + /** + * 数字类型 + */ + private static final String NUMBER_STR = "0123456789"; + /** + * 字母类型 + */ + private static final String LETTERS_STR = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + /** + * 短信验证码长度 + */ + private static final Integer SMS_CODE_LENGTH = 4; + + /** + * 生成短信四位验证码 + * @return 验证码 + */ + public static String genLetterStrSms(){ + return genCode(LETTERS_STR, SMS_CODE_LENGTH); + } + + /** + * 生成短信四位验证码 + * @return 验证码 + */ + public static String genNumberCodeSms(){ + return genCode(NUMBER_STR, SMS_CODE_LENGTH); + } + + /** + * 生成验证码 + * @param codeLength 验证码长度 + * @return 验证码 + */ + public static String genLetterStr(int codeLength){ + return genCode(LETTERS_STR, codeLength); + } + + /** + * 生成验证码 + * @param codeLength 验证码长度 + * @return 验证码 + */ + public static String genNumberCode( int codeLength){ + return genCode(NUMBER_STR, codeLength); + } + + /** + * 生成验证码 + * @param str 验证码字符串 + * @param codeLength 验证码长度 + * @return 验证码 + */ + public static String genCode (String str, int codeLength){ + //将字符串转换为一个新的字符数组。 + char[] verificationCodeArray = str.toCharArray(); + Random random = new Random(); + //计数器 + int count = 0; + StringBuilder stringBuilder = new StringBuilder(); + do { + //随机生成一个随机数 + int index = random.nextInt(verificationCodeArray.length); + char c = verificationCodeArray[index]; + //限制四位不重复数字 + if (stringBuilder.indexOf(String.valueOf(c)) == -1) { + stringBuilder.append(c); + //计数器加1 + count++; + } + //当count等于4时结束,随机生成四位数的验证码 + } while (count != codeLength); + return stringBuilder.toString(); + } +} diff --git a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/HttpUtils.java b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/HttpUtils.java new file mode 100644 index 0000000..27c6840 --- /dev/null +++ b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/HttpUtils.java @@ -0,0 +1,310 @@ +package com.ruoyi.system.utils; + +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class HttpUtils { + /** + * get + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doGet(String host, String path, String method, + Map headers, + Map querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpGet request = new HttpGet(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + /** + * post form + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param bodys + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + Map bodys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (bodys != null) { + List nameValuePairList = new ArrayList(); + + for (String key : bodys.keySet()) { + nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); + } + UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); + formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); + request.setEntity(formEntity); + } + + return httpClient.execute(request); + } + + /** + * Post String + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Post stream + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPost(String host, String path, String method, + Map headers, + Map querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPost request = new HttpPost(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Put String + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map headers, + Map querys, + String body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (StringUtils.isNotBlank(body)) { + request.setEntity(new StringEntity(body, "utf-8")); + } + + return httpClient.execute(request); + } + + /** + * Put stream + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @param body + * @return + * @throws Exception + */ + public static HttpResponse doPut(String host, String path, String method, + Map headers, + Map querys, + byte[] body) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpPut request = new HttpPut(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + if (body != null) { + request.setEntity(new ByteArrayEntity(body)); + } + + return httpClient.execute(request); + } + + /** + * Delete + * + * @param host + * @param path + * @param method + * @param headers + * @param querys + * @return + * @throws Exception + */ + public static HttpResponse doDelete(String host, String path, String method, + Map headers, + Map querys) + throws Exception { + HttpClient httpClient = wrapClient(host); + + HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + request.addHeader(e.getKey(), e.getValue()); + } + + return httpClient.execute(request); + } + + private static String buildUrl(String host, String path, Map querys) throws UnsupportedEncodingException { + StringBuilder sbUrl = new StringBuilder(); + sbUrl.append(host); + if (!StringUtils.isBlank(path)) { + sbUrl.append(path); + } + if (null != querys) { + StringBuilder sbQuery = new StringBuilder(); + for (Map.Entry query : querys.entrySet()) { + if (0 < sbQuery.length()) { + sbQuery.append("&"); + } + if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { + sbQuery.append(query.getValue()); + } + if (!StringUtils.isBlank(query.getKey())) { + sbQuery.append(query.getKey()); + if (!StringUtils.isBlank(query.getValue())) { + sbQuery.append("="); + sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); + } + } + } + if (0 < sbQuery.length()) { + sbUrl.append("?").append(sbQuery); + } + } + + return sbUrl.toString(); + } + + private static HttpClient wrapClient(String host) { + HttpClient httpClient = new DefaultHttpClient(); + if (host.startsWith("https://")) { + sslClient(httpClient); + } + + return httpClient; + } + + private static void sslClient(HttpClient httpClient) { + try { + SSLContext ctx = SSLContext.getInstance("TLS"); + X509TrustManager tm = new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted(X509Certificate[] xcs, String str) { + + } + public void checkServerTrusted(X509Certificate[] xcs, String str) { + + } + }; + ctx.init(null, new TrustManager[] { tm }, null); + SSLSocketFactory ssf = new SSLSocketFactory(ctx); + ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + ClientConnectionManager ccm = httpClient.getConnectionManager(); + SchemeRegistry registry = ccm.getSchemeRegistry(); + registry.register(new Scheme("https", 443, ssf)); + } catch (KeyManagementException ex) { + throw new RuntimeException(ex); + } catch (NoSuchAlgorithmException ex) { + throw new RuntimeException(ex); + } + } + +} \ No newline at end of file diff --git a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/MsgUtil.java b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/MsgUtil.java new file mode 100644 index 0000000..48b480e --- /dev/null +++ b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/MsgUtil.java @@ -0,0 +1,50 @@ +package com.ruoyi.system.utils; + +import org.apache.http.HttpResponse; +import org.apache.http.util.EntityUtils; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +public class MsgUtil { + public static String sendMsg(String phone, String code){ + String result = null; + String host = "https://gyytz.market.alicloudapi.com"; + String path = "/sms/smsSend"; + String method = "POST"; + String appcode = "491f6630c5e8413eb5dce4b88edf30f2"; + Map headers = new HashMap(); + //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105 + headers.put("Authorization", "APPCODE " + appcode); + Map querys = new HashMap(); + querys.put("mobile", phone); + querys.put("param", "**code**:"+code+",**minute**:5"); + +//smsSignId(短信前缀)和templateId(短信模板),可登录国阳云控制台自助申请。参考文档:http://help.guoyangyun.com/Problem/Qm.html + + querys.put("smsSignId", "2e65b1bb3d054466b82f0c9d125465e2"); + querys.put("templateId", "908e94ccf08b4476ba6c876d13f084ad"); + Map bodys = new HashMap(); + + + try { + /** + * 重要提示如下: + * HttpUtils请从\r\n\t \t* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java\r\n\t \t* 下载 + * + * 相应的依赖请参照 + * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml + */ + HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys); +// System.out.println(response.toString()); + //获取response的body + result = EntityUtils.toString(response.getEntity()); + System.out.println(result); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } +} diff --git a/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/StringUtils.java b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/StringUtils.java new file mode 100644 index 0000000..c0813ff --- /dev/null +++ b/ruoyi-base/base-system/base-system-server/src/main/java/com/ruoyi/system/utils/StringUtils.java @@ -0,0 +1,68 @@ +package com.ruoyi.system.utils; + +import org.springframework.util.AntPathMatcher; + +import java.util.Collection; +import java.util.List; + +/** + * @author DongZl + * @description: 字符串处理工具类 + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils { + + /** + * * 判断一个对象是否为空 + * + * @param object Object + * @return true:为空 false:非空 + */ + public static boolean isNull(Object object) { + return object == null; + } + + /** + * * 判断一个Collection是否为空, 包含List,Set,Queue + * + * @param coll 要判断的Collection + * @return true:为空 false:非空 + */ + public static boolean isEmpty(Collection coll) { + return isNull(coll) || coll.isEmpty(); + } + + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) { + if (isEmpty(str) || isEmpty(strs)) { + return false; + } + for (String pattern : strs) { + if (isMatch(pattern, str)) + { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + * @return + */ + public static boolean isMatch(String pattern, String url) { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } +} diff --git a/ruoyi-base/base-system/base-system-server/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-base/base-system/base-system-server/src/main/resources/mapper/system/SysUserMapper.xml index 7886837..5d40b85 100644 --- a/ruoyi-base/base-system/base-system-server/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-base/base-system/base-system-server/src/main/resources/mapper/system/SysUserMapper.xml @@ -121,8 +121,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1 + insert into sys_user( diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/EsConstant.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/EsConstant.java new file mode 100644 index 0000000..28296f4 --- /dev/null +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/EsConstant.java @@ -0,0 +1,5 @@ +package com.ruoyi.common.core.constant; + +public class EsConstant { + public static final String INDEX_NAME = "mall_product"; +} diff --git a/ruoyi-mall/ruoyi-mall-search/ruoyi-mall-search-common/src/main/java/com/ruoyi/mall/search/domain/request/HotWordsReq.java b/ruoyi-mall/ruoyi-mall-search/ruoyi-mall-search-common/src/main/java/com/ruoyi/mall/search/domain/request/HotWordsReq.java new file mode 100644 index 0000000..8b82a2a --- /dev/null +++ b/ruoyi-mall/ruoyi-mall-search/ruoyi-mall-search-common/src/main/java/com/ruoyi/mall/search/domain/request/HotWordsReq.java @@ -0,0 +1,14 @@ +package com.ruoyi.mall.search.domain.request; + +import lombok.Data; + +import java.util.Date; + +@Data +public class HotWordsReq { + private Integer id; + private String hotWords; + private Integer searchFrequency; + private Date lastTime; + +}