import cn.hutool.core.io.FileUtil; import com.ltkj.LtkjApplication; import com.ltkj.hosp.idutil.IdUtils; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.openqa.selenium.Dimension; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.support.ui.WebDriverWait; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.math.BigDecimal; import java.net.HttpURLConnection; import java.net.URL; import java.util.*; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.openqa.selenium.*; import java.io.File; import java.io.IOException; /** * @Author: 西安路泰科技有限公司/赵佳豪 * @Date: 2022/12/12 9:05 */ @RunWith(SpringRunner.class) @SpringBootTest(classes = LtkjApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @Slf4j @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) public class zjhTest { @Autowired private IdUtils idUtils; @Value("${token.secret_key}") private String secret; @Test public void test() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(20); // 20个线程池 Set numbers = Collections.synchronizedSet(new HashSet<>()); // 线程安全的Set,存放生成的编号 // 并发执行 for (int i = 0; i < 20; i++) { executorService.execute(() -> { try { String number = idUtils.getNewTjNumberRedisLock(); // 调用获取编号的方法 numbers.add(number); // 添加到 Set } catch (RuntimeException e) { throw new RuntimeException(e); } }); } System.out.println(numbers); executorService.shutdown(); // 关闭线程池 } public static void main(String[] args) throws Exception { List numbers = Arrays.asList( "25032800283", "25032800284", "25032800285", "25032800286", "25032800287", "25032800288", "25032800289", "25032800290", "25032800291", "25032800292", "25032800293", "25032800294", "25032800295", "25032800296", "25032800297", "25032800298", "25032800299", "25032800300", "25032800301", "25032800302", "25032800303", "25032800304", "25032800305", "25032800306", "25032800307", "25032800308", "25032800309", "25032800310", "25032800311", "25032800312", "25032800313", "25032800314", "25032800315", "25032800316", "25032800317", "25032800318", "25032800319", "25032800320", "25032800321", "25032800322", "25032800323", "25032800324", "25032800325", "25032800326", "25032800327", "25032800328", "25032800329", "25032800330", "25032800331", "25032800332", "25032800333", "25032800334", "25032800335", "25032800336", "25032800337", "25032800338", "25032800339", "25032800340", "25032800341", "25032800342", "25032800343", "25032800344", "25032800345", "25032800346", "25032800347", "25032800348", "25032800349", "25032800350", "25032800351", "25032800352", "25032800353", "25032800354", "25032800355", "25032800356", "25032800357", "25032800358", "25032800359", "25032800360", "25032800361", "25032800362", "25032800363", "25032800364", "25032800365", "25032800366", "25032800367", "25032800368", "25032800369", "25032800370", "25032800371", "25032800372", "25032800373", "25032800374" ); Set uniqueNumbers = new HashSet<>(numbers); if (uniqueNumbers.size() == numbers.size()) { System.out.println("✅ 没有重复编号!"); } else { System.out.println("❌ 发现重复编号!"); numbers.stream() .filter(n -> Collections.frequency(numbers, n) > 1) .distinct() .forEach(n -> System.out.println("重复的编号:" + n)); } } /** * 执行生成 * @param filePath 图片生成路径 * @return 是否成功 */ private void chrome(String filePath) throws IOException { System.setProperty("webdriver.chrome.driver", "D:\\tools\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.setBinary("D:\\tools\\124063440\\chrome.exe"); options.addArguments("--headless"); // 启用无头模式 options.addArguments("--disable-gpu"); // 禁用GPU加速 options.addArguments("--no-sandbox"); // 禁用沙盒模式(可选,适用于某些Linux环境) System.setProperty("webdriver.chrome.verboseLogging", "true"); WebDriver driver = null; try { driver = new ChromeDriver(options); driver.manage().window().setSize(new Dimension(600, 730)); driver.get("www.baidu.com"); WebDriverWait wait = new WebDriverWait(driver,10); File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); FileUtil.copyFile(screenshot, new File("D:\\"+filePath)); }catch (Exception e){ log.error("玩家信息异常 ->{}",String.valueOf(e)); }finally { if (driver != null) driver.quit(); } } /** * 将科学计数法文本转换成字符文本 * @param number * @return */ public static String translateToPlainStr(String number) { return getString(number); } private static String getString(String number) { if (null == number || number.trim().length() == 0) { return number; } String regEx="^([\\+|-]?\\d+(.{0}|.\\d+))[Ee]{1}([\\+|-]?\\d+)$"; // 编译正则表达式 Pattern pattern = Pattern.compile(regEx); // 忽略大小写的写法 // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(number); // 字符串是否与正则表达式相匹配 boolean rs = matcher.matches(); // 判断是否为字符串的科学计数法 if(rs){ // 科学计数法转数字 BigDecimal originValue = new BigDecimal(number); System.out.println("手机号为 ==> " + originValue.toPlainString()); // 数字转字符串 return originValue.toPlainString(); } return number; } public static void forwardUrl(String targetUrl, String forwardUrl) throws Exception { // 创建URL对象 URL url = new URL(forwardUrl); // 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法 connection.setRequestMethod("GET"); // 设置请求头,例如Referer或其他你需要转发的头信息 connection.setRequestProperty("Referer", targetUrl); // 连接 connection.connect(); // 检查响应代码 int responseCode = connection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { // 读取服务器响应 BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // 打印服务器响应 System.out.println(response.toString()); } else { System.out.println("GET request not worked"); } // 关闭连接 connection.disconnect(); } // // public static String getAdd(String log, String lat ){ // //lat 小 log 大 // //参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显示前三项) // String urlString = "http://gc.ditu.aliyun.com/regeocoding?l="+lat+","+log+"&type=010"; // JSONObject salerJson=JSONObject.parseObject(getUrl(urlString)); // JSONObject jsonData=JSONObject.parseObject(String.valueOf(salerJson)); // /* JSONArray fileItemsjson = JSONArray.fromObject(jsonData.get("addrList").toString()); // System.out.println("地区"+fileItemsjson); // JSONObject job = fileItemsjson.getJSONObject(0);*/ // return jsonData.toString(); // } // // public static String getUrl(String url) // { // String resData = null; // StringBuffer s = new StringBuffer(); // BufferedReader bReader = null; // try { // //114.55.248.182 // URL urlWeb = new URL(url); // URLConnection connection = urlWeb.openConnection(); // bReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8")); // while (null != (resData = bReader.readLine())) { // s.append(resData); // } // bReader.close(); // } catch (MalformedURLException e) { // e.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // System.out.println(s); // return s.toString(); // } }