package com.yami.trading.api.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.hankcs.hanlp.HanLP; import com.yami.trading.bean.cms.Infomation; import com.yami.trading.common.domain.Result; import com.yami.trading.common.util.DateUtil; import com.yami.trading.common.util.StringUtils; import com.yami.trading.service.cms.InfomationService; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import static cn.hutool.extra.pinyin.PinyinUtil.isChinese; import static java.util.regex.Pattern.*; @RestController @CrossOrigin @Slf4j public class ApiInformationController { @Autowired private InfomationService infomationService; @ApiOperation("查看实时咨询数据") @GetMapping("/api/information!list.action") public Result> list(@RequestParam(required = false) Integer limit, @RequestParam(required = false) String language, @RequestParam(required = false) String maxTime) { Boolean translate = Boolean.FALSE; if (StringUtils.isEmptyString(language)) { language = "en"; } if ("CN".equalsIgnoreCase(language)) { language = "zh-CN"; translate = Boolean.TRUE; } else if (!"zh-CN".equalsIgnoreCase(language)) { language = "en"; } if (limit == null) { limit = 50; } if (limit >= 200) { limit = 200; } if (StringUtils.isEmptyString(maxTime)) { maxTime = DateUtil.formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); } //最多查询一周之内的 LocalDateTime maxDate = LocalDateTime.parse(maxTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); LocalDateTime now = LocalDateTime.now(); LocalDateTime threshold = now.minusDays(7); if (threshold.compareTo(maxDate) > 0) { return Result.ok(new ArrayList<>()); } QueryWrapper infomationQueryWrapper = new QueryWrapper<>(); infomationQueryWrapper.eq("lang", language); infomationQueryWrapper.lt(StringUtils.isNotEmpty(maxTime), "created_at", maxTime); infomationQueryWrapper.orderByDesc("created_At"); infomationQueryWrapper.last("LIMIT " + limit); List list = infomationService.list(infomationQueryWrapper); if (CollectionUtils.isNotEmpty(list)) { if (translate) { for (Infomation infomation : list) { infomation.setDescription(HanLP.convertToTraditionalChinese(infomation.getDescription())); } } } if (!"zh-CN".equals(language)) { if (CollectionUtils.isNotEmpty(list)) { for (Infomation Infomation : list) { Infomation.setDescription(filterChinese(Infomation.getDescription())); } } } return Result.ok(list); } private static String filterChinese(String str) { // 用于返回结果 String result = str; boolean flag = isContainChinese(str); if (flag) {// 包含中文 // 用于拼接过滤中文后的字符 StringBuffer sb = new StringBuffer(); // 用于校验是否为中文 boolean flag2 = false; // 用于临时存储单字符 char chinese = 0; // 5.去除掉文件名中的中文 // 将字符串转换成char[] char[] charArray = str.toCharArray(); // 过滤到中文及中文字符 for (int i = 0; i < charArray.length; i++) { chinese = charArray[i]; flag2 = isChinese(chinese); if (!flag2) {// 不是中日韩文字及标点符号 sb.append(chinese); } } result = sb.toString(); } return result; } /** * 判断字符串中是否包含中文 * * @param str 待校验字符串 * @return 是否为中文 * @warn 不能校验是否为中文标点符号 */ private static boolean isContainChinese(String str) { Pattern pattern = compile("[\u4e00-\u9fa5]"); Matcher m = pattern.matcher(str); if (m.find()) { return true; } return false; } }