CommonTest.java 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. package com.izouma.nineth;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.alibaba.fastjson.serializer.SerializerFeature;
  6. import com.fasterxml.jackson.annotation.JsonView;
  7. import com.fasterxml.jackson.core.JsonProcessingException;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. import com.github.kevinsawicki.http.HttpRequest;
  10. import com.google.common.base.Splitter;
  11. import com.google.common.hash.Hashing;
  12. import com.izouma.nineth.config.Constants;
  13. import com.izouma.nineth.domain.*;
  14. import com.izouma.nineth.dto.PageQuery;
  15. import com.izouma.nineth.dto.SandPaySettle;
  16. import com.izouma.nineth.dto.UserWithdraw;
  17. import com.izouma.nineth.service.IdentityAuthService;
  18. import com.izouma.nineth.utils.*;
  19. import com.izouma.nineth.web.BaseController;
  20. import io.ipfs.api.IPFS;
  21. import io.ipfs.api.MerkleNode;
  22. import io.ipfs.api.NamedStreamable;
  23. import io.ipfs.multihash.Multihash;
  24. import io.jsonwebtoken.Claims;
  25. import io.jsonwebtoken.Jwts;
  26. import io.jsonwebtoken.SignatureAlgorithm;
  27. import lombok.AllArgsConstructor;
  28. import lombok.Data;
  29. import lombok.NoArgsConstructor;
  30. import lombok.SneakyThrows;
  31. import net.coobird.thumbnailator.Thumbnails;
  32. import org.apache.commons.codec.EncoderException;
  33. import org.apache.commons.codec.net.URLCodec;
  34. import org.apache.commons.io.FileUtils;
  35. import org.apache.commons.lang3.RandomStringUtils;
  36. import org.apache.commons.lang3.RandomUtils;
  37. import org.apache.commons.lang3.Range;
  38. import org.apache.commons.lang3.time.DurationFormatUtils;
  39. import org.apache.commons.text.CaseUtils;
  40. import org.apache.http.NameValuePair;
  41. import org.apache.http.client.utils.URLEncodedUtils;
  42. import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
  43. import org.apache.poi.ss.usermodel.*;
  44. import org.apache.poi.util.TempFile;
  45. import org.bouncycastle.util.encoders.Base64;
  46. import org.bytedeco.javacv.FFmpegFrameGrabber;
  47. import org.bytedeco.javacv.Frame;
  48. import org.bytedeco.javacv.Java2DFrameConverter;
  49. import org.junit.jupiter.api.Test;
  50. import org.libjpegturbo.turbojpeg.processor.api.ImageProcessException;
  51. import org.libjpegturbo.turbojpeg.processor.api.ImageProcessInfo;
  52. import org.libjpegturbo.turbojpeg.processor.api.ImageProcessor;
  53. import org.libjpegturbo.turbojpeg.processor.impl.ImageProcessorImpl;
  54. import org.libjpegturbo.turbojpeg.processor.utils.ImageProcessorUtils;
  55. import org.pngquant.PngQuant;
  56. import org.reflections.ReflectionUtils;
  57. import org.reflections.Reflections;
  58. import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
  59. import org.springframework.util.FileCopyUtils;
  60. import org.springframework.web.bind.annotation.GetMapping;
  61. import org.springframework.web.bind.annotation.PostMapping;
  62. import org.springframework.web.bind.annotation.RequestMapping;
  63. import org.springframework.web.bind.annotation.RestController;
  64. import javax.imageio.ImageIO;
  65. import java.awt.*;
  66. import java.awt.Font;
  67. import java.awt.font.FontRenderContext;
  68. import java.awt.geom.AffineTransform;
  69. import java.awt.image.BufferedImage;
  70. import java.io.*;
  71. import java.lang.reflect.Method;
  72. import java.math.BigDecimal;
  73. import java.math.BigInteger;
  74. import java.math.RoundingMode;
  75. import java.nio.charset.StandardCharsets;
  76. import java.nio.file.Files;
  77. import java.nio.file.Path;
  78. import java.nio.file.Paths;
  79. import java.security.KeyFactory;
  80. import java.security.NoSuchAlgorithmException;
  81. import java.security.PrivateKey;
  82. import java.security.PublicKey;
  83. import java.security.spec.InvalidKeySpecException;
  84. import java.security.spec.PKCS8EncodedKeySpec;
  85. import java.security.spec.X509EncodedKeySpec;
  86. import java.text.DecimalFormat;
  87. import java.text.DecimalFormatSymbols;
  88. import java.time.Duration;
  89. import java.time.LocalDate;
  90. import java.time.format.DateTimeFormatter;
  91. import java.time.temporal.ChronoUnit;
  92. import java.util.List;
  93. import java.util.*;
  94. import java.util.concurrent.ExecutorService;
  95. import java.util.concurrent.Executors;
  96. import java.util.concurrent.ForkJoinPool;
  97. import java.util.concurrent.atomic.AtomicInteger;
  98. import java.util.regex.Matcher;
  99. import java.util.regex.Pattern;
  100. import java.util.stream.Collectors;
  101. import java.util.stream.IntStream;
  102. import static java.nio.file.StandardOpenOption.CREATE;
  103. import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING;
  104. public class CommonTest {
  105. @Test
  106. public void getGenericsClass() {
  107. List<User> data = new ArrayList<>();
  108. data.add(new User());
  109. System.out.println(data.get(0).getClass().getSimpleName());
  110. System.out.println(data.getClass());
  111. Reflections reflections = new Reflections(this.getClass().getPackage().getName() + ".domain");
  112. Set<Class<? extends BaseEntity>> allClasses = reflections.getSubTypesOf(BaseEntity.class);
  113. for (Class<? extends BaseEntity> allClass : allClasses) {
  114. System.out.println(allClass.getName());
  115. }
  116. }
  117. @Test
  118. public void getapis() {
  119. List<Map<String, String>> entities = new ArrayList<>();
  120. Reflections classReflections = new Reflections(this.getClass().getPackage().getName());
  121. Set<Class<? extends BaseController>> controllers = classReflections.getSubTypesOf(BaseController.class);
  122. Set<Class<? extends BaseController>> list = ReflectionUtils
  123. .getAll(controllers, ReflectionUtils.withAnnotation(RestController.class));
  124. System.out.println(list);
  125. for (Class<? extends BaseController> aClass : list) {
  126. RequestMapping requestMapping = aClass.getAnnotation(RequestMapping.class);
  127. String baseUrl = requestMapping.value()[0];
  128. for (Method method : ReflectionUtils.getMethods(aClass, ReflectionUtils.withAnnotation(GetMapping.class))) {
  129. GetMapping getMapping = method.getAnnotation(GetMapping.class);
  130. System.out.println(getMapping.value()[0]);
  131. }
  132. for (Method method : ReflectionUtils
  133. .getMethods(aClass, ReflectionUtils.withAnnotation(PostMapping.class))) {
  134. PostMapping postMapping = method.getAnnotation(PostMapping.class);
  135. System.out.println(postMapping.value()[0]);
  136. }
  137. }
  138. }
  139. @Test
  140. public void testCaseUtils() {
  141. System.out.println(CaseUtils.toCamelCase("test_Model", true, '_'));
  142. }
  143. @Test
  144. public void testMeasureText() throws IOException, FontFormatException {
  145. AffineTransform affinetransform = new AffineTransform();
  146. FontRenderContext frc = new FontRenderContext(affinetransform, true, true);
  147. Font font = Font.createFont(Font.TRUETYPE_FONT, this.getClass()
  148. .getResourceAsStream("/font/SourceHanSansCN-Normal.ttf"));
  149. System.out.println((int) (font.deriveFont(14f).getStringBounds("aaa", frc).getWidth()));
  150. }
  151. @Test
  152. public void testIdNoRegexp() {
  153. boolean b = Pattern
  154. .matches("^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}$|^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0-2]\\d)|3[0-1])\\d{3}[0-9xX]$", "32100219950830461X");
  155. System.out.println(b);
  156. }
  157. @Test
  158. public void tesSms() throws IOException {
  159. Reflections reflections = new Reflections(this.getClass().getPackage().getName() + ".enums");
  160. Set<Class<? extends Enum>> entitySet = reflections.getSubTypesOf(Enum.class);
  161. StringBuilder idxJs = new StringBuilder();
  162. for (Class<? extends Enum> entity : entitySet) {
  163. idxJs.append("import ").append(entity.getSimpleName()).append(" from \"./").append(entity.getSimpleName())
  164. .append("\";\n");
  165. StringBuilder str = new StringBuilder("export default {\n");
  166. for (Enum enumConstant : entity.getEnumConstants()) {
  167. str.append(" ").append(enumConstant.name()).append(": \"").append(enumConstant.name())
  168. .append("\",\n");
  169. }
  170. str.append("}");
  171. Files.write(Paths.get(System.getProperty("user.dir"), "src", "main", "vue", "src", "constants", entity
  172. .getSimpleName() + ".js"), str.toString()
  173. .getBytes(StandardCharsets.UTF_8), CREATE, TRUNCATE_EXISTING);
  174. Files.write(Paths.get(System.getProperty("user.dir"), "src", "main", "zmj_mp", "src", "constants", entity
  175. .getSimpleName() + ".js"), str.toString()
  176. .getBytes(StandardCharsets.UTF_8), CREATE, TRUNCATE_EXISTING);
  177. }
  178. idxJs.append("export default {\n");
  179. for (Class<? extends Enum> entity : entitySet) {
  180. idxJs.append(" ").append(entity.getSimpleName()).append(": ").append(entity.getSimpleName())
  181. .append(",\n");
  182. }
  183. idxJs.append("}");
  184. System.out.println(idxJs.toString());
  185. Files.write(Paths
  186. .get(System.getProperty("user.dir"), "src", "main", "vue", "src", "constants", "index.js"), idxJs
  187. .toString().getBytes(StandardCharsets.UTF_8), CREATE, TRUNCATE_EXISTING);
  188. Files.write(Paths
  189. .get(System.getProperty("user.dir"), "src", "main", "zmj_mp", "src", "constants", "index.js"), idxJs
  190. .toString().getBytes(StandardCharsets.UTF_8), CREATE, TRUNCATE_EXISTING);
  191. }
  192. @Test
  193. public void gen() {
  194. System.out.println(RandomStringUtils.randomAlphabetic(32));
  195. }
  196. @Test
  197. public void password() {
  198. String password = new BCryptPasswordEncoder().encode("123456");
  199. System.out.println(password);
  200. }
  201. @SneakyThrows
  202. @Test
  203. public void pngquant() {
  204. PngQuant pngQuant = new PngQuant();
  205. ImageIO.write(pngQuant
  206. .getRemapped(ImageIO.read(new File("/Users/drew/Downloads/2021-11-01-18-07-04JCDfFxKb.HEIC"))),
  207. "jpg", new File("/Users/drew/Downloads/111.jpg"));
  208. }
  209. @SneakyThrows
  210. @Test
  211. public void mozjpeg() {
  212. File out = TempFile.createTempFile("kljasdlkhfasldg", ".jpg");
  213. ImageProcessor processor = new ImageProcessorImpl();
  214. ImageProcessInfo processInfo = ImageProcessInfo.fromMap(ImageProcessorUtils.compressImage(processor,
  215. new File("/Users/drew/Downloads/2020-09-08-17-07-21zwBhaHeQ.jpg"),
  216. out, 75));
  217. FileCopyUtils.copy(out, new File("/Users/drew/Desktop/111.jpg"));
  218. System.out.println(out);
  219. }
  220. @Test
  221. public void thumbnailator() throws IOException, ImageProcessException {
  222. Thumbnails.of(new File("/Users/drew/Downloads/2021-11-01-17-47-55zMwbSlgJ.jpeg"))
  223. .size(3000, 3000)
  224. .outputFormat("jpg")
  225. .toFile("/Users/drew/Desktop/1.jpg");
  226. PngQuant pngQuant = new PngQuant();
  227. ImageIO.write(pngQuant
  228. .getRemapped(ImageIO.read(new File("/Users/drew/Desktop/1.jpg"))),
  229. "jpg", new File("/Users/drew/Desktop/2.jpg"));
  230. ImageProcessor processor = new ImageProcessorImpl();
  231. ImageProcessInfo processInfo = ImageProcessInfo.fromMap(ImageProcessorUtils.compressImage(processor,
  232. new File("/Users/drew/Desktop/1.jpg"),
  233. new File("/Users/drew/Desktop/3.jpg"), 75));
  234. }
  235. @Test
  236. public void base64() {
  237. System.out.println(Base64.decode("e6e6vQJYhGmIkcA1pfnsipTovp10wJ"));
  238. }
  239. @Test
  240. public void resolveUrl() {
  241. try {
  242. System.out.println(new URLCodec().encode("http://www.baidu.com"));
  243. } catch (EncoderException e) {
  244. e.printStackTrace();
  245. }
  246. }
  247. @Test
  248. public void testIPFS() throws IOException {
  249. IPFS ipfs = new IPFS("121.40.132.44", 5001);
  250. HttpRequest request = HttpRequest.get("https://awesomeadmin.oss-cn-hangzhou.aliyuncs.com/image/2021-10-21-16-44-52kZqxuwhH.gif");
  251. File file = File.createTempFile("ipfs", ".tmp");
  252. request.receive(file);
  253. NamedStreamable.FileWrapper file1 = new NamedStreamable.FileWrapper(file);
  254. MerkleNode put = ipfs.add(file1).get(0);
  255. Multihash multihash = ipfs.pin.add(put.hash).get(0);
  256. System.out.println(put.hash.toBase58());
  257. System.out.println(multihash.toBase58());
  258. }
  259. @Test
  260. public void testWin() {
  261. List<BlindBoxItem> items = new ArrayList<>();
  262. items.add(BlindBoxItem.builder()
  263. .name("普通1")
  264. .total(100)
  265. .stock(100)
  266. .build());
  267. items.add(BlindBoxItem.builder()
  268. .name("普通2")
  269. .total(100)
  270. .stock(100)
  271. .build());
  272. items.add(BlindBoxItem.builder()
  273. .name("稀有1")
  274. .total(5)
  275. .stock(5)
  276. .rare(true)
  277. .build());
  278. items.add(BlindBoxItem.builder()
  279. .name("稀有2")
  280. .total(5)
  281. .stock(5)
  282. .rare(true)
  283. .build());
  284. for (int k = 0; k < items.stream().mapToInt(BlindBoxItem::getTotal).sum(); k++) {
  285. Map<BlindBoxItem, Range<Integer>> randomRange = new HashMap<>();
  286. int c = 0, sum = 0;
  287. for (BlindBoxItem item : items) {
  288. randomRange.put(item, Range.between(c, c + item.getStock()));
  289. c += item.getStock();
  290. sum += item.getStock();
  291. }
  292. boolean win = false;
  293. int retry = 0;
  294. BlindBoxItem winItem = null;
  295. while (winItem == null) {
  296. int rand = RandomUtils.nextInt(0, sum + 1);
  297. for (Map.Entry<BlindBoxItem, Range<Integer>> entry : randomRange.entrySet()) {
  298. BlindBoxItem item = entry.getKey();
  299. Range<Integer> range = entry.getValue();
  300. if (rand >= range.getMinimum() && rand < range.getMaximum()) {
  301. int total = items.stream().filter(i -> !i.isRare())
  302. .mapToInt(BlindBoxItem::getTotal).sum();
  303. int stock = items.stream().filter(i -> !i.isRare())
  304. .mapToInt(BlindBoxItem::getStock).sum();
  305. if (item.isRare()) {
  306. double nRate = stock / (double) total;
  307. double rRate = (item.getStock() - 1) / (double) item.getTotal();
  308. if (Math.abs(nRate - rRate) < (1 / (double) item.getTotal()) || retry > 1 || rRate == 0) {
  309. if (!(nRate > 0.1 && item.getStock() == 1)) {
  310. winItem = item;
  311. }
  312. } else {
  313. retry++;
  314. }
  315. } else {
  316. double nRate = (stock - 1) / (double) total;
  317. double rRate = item.getStock() / (double) item.getTotal();
  318. if (Math.abs(nRate - rRate) < 0.2 || retry > 1 || nRate == 0) {
  319. winItem = item;
  320. } else {
  321. retry++;
  322. }
  323. }
  324. }
  325. }
  326. }
  327. winItem.setStock(winItem.getStock() - 1);
  328. System.out.println(winItem.getName() + (winItem.isRare() ? "\t+++" : ""));
  329. }
  330. }
  331. @Test
  332. public void testGrabFrame() throws IOException {
  333. FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber("/Users/drew/Downloads/video1627914878375.mp4");
  334. frameGrabber.start();
  335. Java2DFrameConverter aa = new Java2DFrameConverter();
  336. int length = frameGrabber.getLengthInVideoFrames();
  337. Frame frame = null;
  338. int i = 0;
  339. while (frame == null && i < length) {
  340. frame = frameGrabber.grabKeyFrame();
  341. i++;
  342. }
  343. Objects.requireNonNull(frame);
  344. BufferedImage thumbBi = aa.convert(frame);
  345. ImageIO.write(thumbBi, "jpg", new File("/Users/drew/Desktop/1.jpg"));
  346. }
  347. @Test
  348. public void testQuality() throws IOException {
  349. Thumbnails.of("/Users/drew/Desktop/2021-11-04-11-28-36VAOoasUd.jpeg")
  350. .size(1000, 1000)
  351. .outputFormat("jpg")
  352. .outputQuality(1)
  353. .toFile("/Users/drew/Desktop/1.jpg");
  354. Thumbnails.of("/Users/drew/Desktop/2021-11-04-11-28-36VAOoasUd.jpeg")
  355. .size(1000, 1000)
  356. .outputFormat("jpg")
  357. .outputQuality(0.6)
  358. .toFile("/Users/drew/Desktop/2.jpg");
  359. }
  360. @Test
  361. public void testJwt() {
  362. String token = Jwts.builder()
  363. .setClaims(new HashMap<>())
  364. .setSubject("15077886171")
  365. .setIssuedAt(new Date())
  366. .setExpiration(new Date(new Date().getTime() + 10 * 60 * 1000)) //10min
  367. .signWith(SignatureAlgorithm.HS512, Constants.SMS_TOKEN_SECRET)
  368. .compact();
  369. System.out.println(token);
  370. Claims claims = Jwts.parser()
  371. .setSigningKey(Constants.SMS_TOKEN_SECRET)
  372. .parseClaimsJws(token)
  373. .getBody();
  374. System.out.println(claims.getSubject());
  375. System.out.println(claims.getExpiration());
  376. }
  377. @Test
  378. public void testReplace() {
  379. System.out.println("15077886171".replaceAll("(?<=.{3}).*(?=.{4})", "**"));
  380. }
  381. @Test
  382. public void sfsdf() {
  383. System.out.println(BigDecimal.valueOf(11111110.5).setScale(2, RoundingMode.HALF_UP).toPlainString());
  384. }
  385. @Test
  386. public void random256() throws NoSuchAlgorithmException {
  387. String tokenId = TokenUtils.genTokenId();
  388. System.out.println(tokenId);
  389. System.out.println(new BigInteger(tokenId, 16));
  390. }
  391. @Test
  392. public void dd() throws IOException {
  393. String[] arr1 = FileUtils.readFileToString(new File("/Users/drew/Desktop/未命名文件夹 2/111")).split("\n");
  394. List<String> arr2 = Arrays.asList(FileUtils.readFileToString(new File("/Users/drew/Desktop/未命名文件夹 2/222"))
  395. .split("\n"));
  396. for (String s : arr1) {
  397. if (!arr2.contains(s)) {
  398. System.out.println(s);
  399. }
  400. }
  401. }
  402. @Test
  403. public void jj() {
  404. final int parallelism = 4;
  405. ForkJoinPool forkJoinPool = null;
  406. try {
  407. forkJoinPool = new ForkJoinPool(parallelism);
  408. forkJoinPool.submit(() ->
  409. // Parallel task here, for example
  410. IntStream.range(1, 1_000_000).parallel()
  411. .forEach(i -> {
  412. })
  413. );
  414. } finally {
  415. if (forkJoinPool != null) {
  416. forkJoinPool.shutdown();
  417. }
  418. }
  419. }
  420. @Test
  421. public void testnewSingleThreadScheduledExecutor() throws InterruptedException {
  422. ExecutorService service = Executors.newFixedThreadPool(10);
  423. final int[] c = {0};
  424. for (int i = 0; i < 1000; i++) {
  425. service.submit(new Runnable() {
  426. @SneakyThrows
  427. @Override
  428. public void run() {
  429. Thread.sleep(300);
  430. System.out.println(++c[0]);
  431. }
  432. });
  433. }
  434. Thread.sleep(20000);
  435. }
  436. @Test
  437. public void testaes() throws Exception {
  438. String encrypted = "ccd97379f001d47895eb4293144b74f28de4fcf5b56daf4ce73d2db34f381984b2c2260f821593968e387dccdc11713a5b558a571b17aaae3e9e91a0b9dc576e";
  439. String qs = AESEncryptUtil.decrypt(encrypted);
  440. System.out.println(qs);
  441. List<NameValuePair> list = URLEncodedUtils.parse(qs, StandardCharsets.UTF_8);
  442. System.out.println(JSON.toJSONString(list, SerializerFeature.PrettyFormat));
  443. final Map<String, String> map = Splitter.on('&').trimResults().withKeyValueSeparator('=').split(qs);
  444. System.out.println(map);
  445. }
  446. @Test
  447. public void aasdf() {
  448. System.out.println(new BCryptPasswordEncoder().matches("123456", "$2a$10$hYKQk3SKDqpK2QPDFqGdLekKWFcHs8rvou0hV4TxFy.ylL8PTBo5a"));
  449. }
  450. @Test
  451. public void testBCrypt() {
  452. BCryptPasswordEncoder encoder1 = new BCryptPasswordEncoder(4);
  453. BCryptPasswordEncoder encoder2 = new BCryptPasswordEncoder(4);
  454. String pwd = "$2a$10$oAWnGIHR2Cvc0BsMN7YCtOjvXsBLBygYxiVG3E1fuUmhM3sEOYhQe";
  455. System.out.println(encoder1.matches("123456", pwd));
  456. System.out.println(encoder2.matches("123456", pwd));
  457. System.out.println(encoder1.matches("1234561", pwd));
  458. System.out.println(encoder2.matches("1234561", pwd));
  459. long encode1 = 0;
  460. long match1 = 0;
  461. for (int i = 0; i < 10; i++) {
  462. long t = System.currentTimeMillis();
  463. encoder1.encode("123456");
  464. encode1 += System.currentTimeMillis() - t;
  465. t = System.currentTimeMillis();
  466. encoder1.matches("123456", pwd);
  467. match1 += System.currentTimeMillis() - t;
  468. }
  469. System.out.println("avg encode = " + encode1 / 10 + "ms");
  470. System.out.println("avg match = " + match1 / 10 + "ms");
  471. long encode2 = 0;
  472. long match2 = 0;
  473. for (int i = 0; i < 10; i++) {
  474. long t = System.currentTimeMillis();
  475. encoder2.encode("123456");
  476. encode2 += System.currentTimeMillis() - t;
  477. t = System.currentTimeMillis();
  478. encoder2.matches("123456", pwd);
  479. match2 += System.currentTimeMillis() - t;
  480. }
  481. System.out.println("avg encode = " + encode2 / 10 + "ms");
  482. System.out.println("avg match = " + match2 / 10 + "ms");
  483. }
  484. @Test
  485. public void testParseToken() {
  486. long t1 = 0;
  487. long t2 = 0;
  488. for (int i = 0; i < 1000; i++) {
  489. long t = System.currentTimeMillis();
  490. String token = Jwts.builder()
  491. .setClaims(new HashMap<>())
  492. .setSubject("a" + i)
  493. .setIssuedAt(new Date())
  494. .setExpiration(new Date(new Date().getTime() + 10000000))
  495. .signWith(SignatureAlgorithm.HS256, "123456")
  496. .compact();
  497. t1 += System.currentTimeMillis() - t;
  498. System.out.println(token);
  499. t = System.currentTimeMillis();
  500. Claims claims = Jwts.parser()
  501. .setSigningKey("123456")
  502. .parseClaimsJws(token)
  503. .getBody();
  504. System.out.println(claims.getSubject());
  505. t2 += System.currentTimeMillis() - t;
  506. }
  507. System.out.println(t1);
  508. System.out.println(t2);
  509. System.out.println(t1 / 1000);
  510. System.out.println(t2 / 1000);
  511. }
  512. @Test
  513. public void testHashCode() {
  514. long t = System.currentTimeMillis();
  515. new PageQuery().hashCode();
  516. System.out.println(System.currentTimeMillis() - t);
  517. }
  518. @Test
  519. public void testversion() {
  520. String version = "1.2.321";
  521. String[] arr = version.split("\\.");
  522. StringBuilder str = new StringBuilder();
  523. for (int i = 0; i < arr.length; i++) {
  524. str.insert(0, String.format("%03d", Integer.parseInt(arr[arr.length - 1 - i])));
  525. }
  526. System.out.println(Integer.parseInt(str.toString()));
  527. }
  528. @Test
  529. public void testNumberFormat() {
  530. DecimalFormat df = new DecimalFormat("000000", DecimalFormatSymbols.getInstance(Locale.US));
  531. System.out.println(df.format(new BigDecimal("199.11"))); // prints: 001.0
  532. }
  533. @Test
  534. public void testWriteExcel() throws IOException, InvalidFormatException {
  535. // Creating file object of existing excel file
  536. File xlsxFile = new File("/Users/drew/Downloads/批量付款到对私银行账户模板的副本.xls");
  537. InputStream inputStream = getClass().getResourceAsStream("/批量付款到对私银行账户模板.xls");
  538. //Creating workbook from input stream
  539. Workbook workbook = WorkbookFactory.create(inputStream);
  540. //Reading first sheet of excel file
  541. Sheet sheet = workbook.getSheetAt(0);
  542. for (int i = 0; i < 100; i++) {
  543. Row row = sheet.getRow(i + 1);
  544. if (row == null) {
  545. row = sheet.createRow(i + 1);
  546. }
  547. Optional.ofNullable(row.getCell(1)).orElse(row.createCell(1)).setCellValue("1");
  548. Optional.ofNullable(row.getCell(2)).orElse(row.createCell(2)).setCellValue("2");
  549. Optional.ofNullable(row.getCell(3)).orElse(row.createCell(3))
  550. .setCellValue(new BigDecimal("1").doubleValue());
  551. }
  552. //Close input stream
  553. inputStream.close();
  554. FileOutputStream os = new FileOutputStream(xlsxFile);
  555. workbook.write(os);
  556. //Close the workbook and output stream
  557. workbook.close();
  558. }
  559. @Test
  560. public void testSandImport() {
  561. List<SandPaySettle> failSettleList = EasyExcel.read("/Users/drew/Downloads/0411失败.csv")
  562. .head(SandPaySettle.class).sheet()
  563. .doReadSync();
  564. List<UserWithdraw> withdrawList = EasyExcel.read("/Users/drew/Downloads/0411.xlsx")
  565. .head(UserWithdraw.class).sheet()
  566. .doReadSync();
  567. List<UserWithdraw> failWithdraw = new ArrayList<>();
  568. for (SandPaySettle sandPaySettle : failSettleList) {
  569. withdrawList.stream().filter(i -> i.getBankNo().equals(sandPaySettle.getBankNo()))
  570. .findAny().ifPresent(failWithdraw::add);
  571. }
  572. System.out.println(failSettleList.size());
  573. System.out.println(failWithdraw.size());
  574. }
  575. @Test
  576. public void match() throws NoSuchAlgorithmException, InvalidKeySpecException, IOException {
  577. byte[] byteKey = java.util.Base64.getDecoder()
  578. .decode(Files.readAllBytes(Path.of("/Users/drew/Downloads/hmpay_app_public_key.txt")));
  579. PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(byteKey));
  580. System.out.println(publicKey);
  581. byte[] bytePriv = java.util.Base64.getDecoder()
  582. .decode(Files.readAllBytes(Path.of("/Users/drew/Downloads/hmpay_app_private_key.txt")));
  583. PrivateKey privKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(bytePriv));
  584. System.out.println(privKey);
  585. }
  586. public class Views {
  587. public class Public {
  588. }
  589. public class Internal extends Public {
  590. }
  591. }
  592. @Data
  593. @AllArgsConstructor
  594. @NoArgsConstructor
  595. public class Item {
  596. @JsonView(Views.Public.class)
  597. public int id;
  598. @JsonView(Views.Public.class)
  599. public String itemName;
  600. @JsonView(Views.Internal.class)
  601. public String ownerName;
  602. }
  603. @Test
  604. public void testJsonView() throws JsonProcessingException {
  605. Item item = new Item(2, "book", "John");
  606. ObjectMapper mapper = new ObjectMapper();
  607. String result = mapper
  608. .writerWithView(Views.Internal.class)
  609. .writeValueAsString(item);
  610. System.out.println(result);
  611. }
  612. @Test
  613. public void testSet() {
  614. }
  615. @Test
  616. public void auth() {
  617. IdentityAuthService.validate("熊竹", "15077886171", "321002199408304611");
  618. IdentityAuthService.validate("熊竹", "15077886171", "321002199408304614");
  619. }
  620. @Test
  621. public void testAge() {
  622. System.out.println(ChronoUnit.YEARS.between(LocalDate.parse("321002199408304614".substring(6, 14),
  623. DateTimeFormatter.ofPattern("yyyyMMdd")), LocalDate.now()));
  624. }
  625. @Test
  626. public void patt() {
  627. Pattern p = Pattern.compile("银行卡已绑定!绑卡ID:(\\d+)");
  628. Matcher m = p.matcher("银行卡已绑定!绑卡ID:20220602315804717062699846352896");
  629. if (m.find()) {
  630. System.out.println(m.group(1));
  631. }
  632. }
  633. @Test
  634. public void createaccount() {
  635. JSONObject jsonObject = JSON.parseObject(HttpRequest.get("http://47.107.77.154:10000/api/privateKey?type=2&userName=" + UUID.randomUUID() + "&signUserId="
  636. + RandomStringUtils.randomAlphabetic(8) + "&appId=1&returnPrivateKey=true").body());
  637. System.out.println(JSON.toJSONString(jsonObject, true));
  638. }
  639. @Test
  640. public void testOneKey() {
  641. UmengUtils.getMobile("62b8106188ccdf4b7eaba3e8", "eyJjIjoibEVjUGh6WXhwdE5FTHVjQ1p0XC9TREZuMGpLSzlZenZhblBaeUxPUWFrRlJUaFwvaWdrUFA2NU1GZGFDd3F3cjdZVGlPWXhEOVRnWGx3XG5PbGI5MytnN29aaGFpV24rbmd2Q1MxUE1vem5cLzVIQ1BveEk4WG94Zkd3Nkozc3pjMk95NUdFZjBsak9Qd09nMk1iVDBWRjl3Y05zMFxuc2NScGVTd0VoSXh1elpwZ2c5dk5xQlliN2toNWF0cmRtRHQzanZNTHBjUm5OeCtwMXdKS1wvN1VlYTN4b3FJajhSakRuVnFZVmJrcm1cbmtKSDhkNUxrbEEzSzhXU2pVeEF5bkZlSVRWbGNpRlJHTUhvZTBYM1ppZ0pDa0pQWk80VVFGVktSaWlRcFpQbGVGTEhNOHRpTnlTQ0Ncbm1ESmQ1OEM3eWdmWktcLzJcL1ZUc1ZkdFpYUktcL0FqVjNGbk84QnhTZWZQZjVmZEI0YThJQzE2SVFINW91Y2U3NERRbG96SGVIVjhSMldcbmQzaHFRZVh4UFkwd09mdW51elFGSHRscUxnSXlWUDA2bFRaZ0VYdTZpbjJDWDlSUndpa3RxUU81NkRjYzdCeWEzdXQyN0ZcL0VzUmRjXG5Vc3J3ZjVkNE41K0N6cFlBSlpWZmh4ZUlYMUZUVmJPZmFEcWQ0RUpPSTFnclwvTkpXUW9uSG14cUZvXC81WEM2dGwzSG5lQWZwM3dGejJcbk1qQ3d4aWF1ZTJ6OWVpNXZpb1F6Z0lhTWREckJ0eFFPcDU3RW5sZm50NGF1NG8yNGJSQTBSSzI2THZwRzVEakRiZWRTY2xZVEZSY2tcbjBITlUzUFdiQ1hrPVxuIiwiayI6IlQwd0hqc3JiSlV6XC9YRGNUSDVcL0Q5QkpcLzZaVzZmR1BGckdQcmRjdEZDR1Z0NGtcLzdTTzJ6TGU5dlVcL0JlUitcL0VYcDNTWFlLcWhLYXh2QW1vazZjY3FveGk3aE1xckcySHNwbUxLWEtkXC9CbUlHMHhDUjVPWm42SWJvK1BhU2djWlk0MUJic01zRm9RVmRmYUIrZitTVkdJQU50K2lNdm5SRkJpUXNja1N0SVZFd0hvZFgwVkZwd2xVN1UwRTBER01qclJLclI2eGRsMFlSZURIbTVuN3hqaVppOVg1ZTQzZ1UxYk9GOVwvelJwa2ZVd05sN3g2a0tpS25XQ25TU2FuQjhDbHJiNTZ0Qll2czdcL3pKdDJsYXh6UGVMb0Jielp1N0lLTHlUcnc4ZVwvVlNmaUlPYmI5dVNqeXFLRU12dXNQRHFmNmNlQUpRUzlIcW1nQk0wbWZiOVE9PSIsIm8iOiJBbmRyb2lkIn0=");
  642. }
  643. @Test
  644. public void parseDuration() {
  645. System.out.println(Duration.parse("P40DT12H30M5S").toString());
  646. }
  647. @Test
  648. public void formatDuration() {
  649. System.out.println(DurationFormatUtils.formatDuration(Duration.parse("P1D").toMillis(),
  650. "H小时mm分ss秒", true));
  651. }
  652. @Test
  653. public void decrypt() throws Exception {
  654. System.out.println(AESEncryptUtil.decrypt("C4EE0C1050C613707CE88FE3BDAA13CAA3A702AD2B010B23EDB1F94A44CC485E"));
  655. }
  656. @Test
  657. public void resolve() {
  658. System.out.println(UrlUtils.resolve("http://www.baidu.com", "123", "456"));
  659. }
  660. @Test
  661. public void hash() {
  662. long t = System.currentTimeMillis();
  663. Map<Integer, Integer> map = new HashMap<>();
  664. for (int i = 0; i < 5000; i++) {
  665. map.put(i, Hashing.md5().hashString(i + "abcd", StandardCharsets.UTF_8).asInt());
  666. }
  667. AtomicInteger i = new AtomicInteger();
  668. map.entrySet().stream().sorted(Map.Entry.comparingByValue()).forEach(e -> {
  669. System.out.println(i.incrementAndGet() + ":" + e.getKey() + " : " + e.getValue());
  670. });
  671. System.out.println(System.currentTimeMillis() - t);
  672. }
  673. public int randomize(int number, int total) {
  674. Map<Integer, Integer> map = new HashMap<>();
  675. for (int i = 0; i < total; i++) {
  676. map.put(i, Hashing.md5().hashString(i + "abcd", StandardCharsets.UTF_8).asInt());
  677. }
  678. int i = 0;
  679. Map<Integer, Integer> sorted = new HashMap<>();
  680. for (Integer integer : map.entrySet().stream().sorted(Map.Entry.comparingByValue()).map(Map.Entry::getKey).collect(Collectors.toList())) {
  681. sorted.put(integer, i++);
  682. }
  683. return sorted.get(number);
  684. }
  685. @Test
  686. public void testrandomize() {
  687. System.out.println(randomize(6, 1000));
  688. }
  689. }