CommonTest.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651
  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.alipay.api.AlipayApiException;
  7. import com.alipay.api.internal.util.AlipaySignature;
  8. import com.github.kevinsawicki.http.HttpRequest;
  9. import com.google.common.base.Splitter;
  10. import com.izouma.nineth.config.Constants;
  11. import com.izouma.nineth.domain.BaseEntity;
  12. import com.izouma.nineth.domain.BlindBoxItem;
  13. import com.izouma.nineth.domain.SettleRecord;
  14. import com.izouma.nineth.domain.User;
  15. import com.izouma.nineth.dto.PageQuery;
  16. import com.izouma.nineth.dto.SandPaySettle;
  17. import com.izouma.nineth.dto.UserWithdraw;
  18. import com.izouma.nineth.service.UserService;
  19. import com.izouma.nineth.utils.AESEncryptUtil;
  20. import com.izouma.nineth.utils.DateTimeUtils;
  21. import com.izouma.nineth.utils.SnowflakeIdWorker;
  22. import com.izouma.nineth.utils.TokenUtils;
  23. import com.izouma.nineth.web.BaseController;
  24. import io.ipfs.api.IPFS;
  25. import io.ipfs.api.MerkleNode;
  26. import io.ipfs.api.NamedStreamable;
  27. import io.ipfs.multihash.Multihash;
  28. import io.jsonwebtoken.Claims;
  29. import io.jsonwebtoken.Jwts;
  30. import io.jsonwebtoken.SignatureAlgorithm;
  31. import lombok.SneakyThrows;
  32. import net.coobird.thumbnailator.Thumbnails;
  33. import org.apache.commons.codec.EncoderException;
  34. import org.apache.commons.codec.net.URLCodec;
  35. import org.apache.commons.io.FileUtils;
  36. import org.apache.commons.lang3.RandomStringUtils;
  37. import org.apache.commons.lang3.RandomUtils;
  38. import org.apache.commons.lang3.Range;
  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.net.URLEncoder;
  76. import java.nio.charset.StandardCharsets;
  77. import java.nio.file.Files;
  78. import java.nio.file.Path;
  79. import java.nio.file.Paths;
  80. import java.security.KeyFactory;
  81. import java.security.NoSuchAlgorithmException;
  82. import java.security.PrivateKey;
  83. import java.security.PublicKey;
  84. import java.security.spec.InvalidKeySpecException;
  85. import java.security.spec.PKCS8EncodedKeySpec;
  86. import java.security.spec.X509EncodedKeySpec;
  87. import java.text.DecimalFormat;
  88. import java.text.DecimalFormatSymbols;
  89. import java.text.NumberFormat;
  90. import java.time.LocalDateTime;
  91. import java.util.List;
  92. import java.util.*;
  93. import java.util.concurrent.ExecutorService;
  94. import java.util.concurrent.Executors;
  95. import java.util.concurrent.ForkJoinPool;
  96. import java.util.regex.Matcher;
  97. import java.util.regex.Pattern;
  98. import java.util.stream.IntStream;
  99. import static java.nio.file.StandardOpenOption.CREATE;
  100. import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING;
  101. public class CommonTest {
  102. @Test
  103. public void getGenericsClass() {
  104. List<User> data = new ArrayList<>();
  105. data.add(new User());
  106. System.out.println(data.get(0).getClass().getSimpleName());
  107. System.out.println(data.getClass());
  108. Reflections reflections = new Reflections(this.getClass().getPackage().getName() + ".domain");
  109. Set<Class<? extends BaseEntity>> allClasses = reflections.getSubTypesOf(BaseEntity.class);
  110. for (Class<? extends BaseEntity> allClass : allClasses) {
  111. System.out.println(allClass.getName());
  112. }
  113. }
  114. @Test
  115. public void getapis() {
  116. List<Map<String, String>> entities = new ArrayList<>();
  117. Reflections classReflections = new Reflections(this.getClass().getPackage().getName());
  118. Set<Class<? extends BaseController>> controllers = classReflections.getSubTypesOf(BaseController.class);
  119. Set<Class<? extends BaseController>> list = ReflectionUtils
  120. .getAll(controllers, ReflectionUtils.withAnnotation(RestController.class));
  121. System.out.println(list);
  122. for (Class<? extends BaseController> aClass : list) {
  123. RequestMapping requestMapping = aClass.getAnnotation(RequestMapping.class);
  124. String baseUrl = requestMapping.value()[0];
  125. for (Method method : ReflectionUtils.getMethods(aClass, ReflectionUtils.withAnnotation(GetMapping.class))) {
  126. GetMapping getMapping = method.getAnnotation(GetMapping.class);
  127. System.out.println(getMapping.value()[0]);
  128. }
  129. for (Method method : ReflectionUtils
  130. .getMethods(aClass, ReflectionUtils.withAnnotation(PostMapping.class))) {
  131. PostMapping postMapping = method.getAnnotation(PostMapping.class);
  132. System.out.println(postMapping.value()[0]);
  133. }
  134. }
  135. }
  136. @Test
  137. public void testCaseUtils() {
  138. System.out.println(CaseUtils.toCamelCase("test_Model", true, '_'));
  139. }
  140. @Test
  141. public void testMeasureText() throws IOException, FontFormatException {
  142. AffineTransform affinetransform = new AffineTransform();
  143. FontRenderContext frc = new FontRenderContext(affinetransform, true, true);
  144. Font font = Font.createFont(Font.TRUETYPE_FONT, this.getClass()
  145. .getResourceAsStream("/font/SourceHanSansCN-Normal.ttf"));
  146. System.out.println((int) (font.deriveFont(14f).getStringBounds("aaa", frc).getWidth()));
  147. }
  148. @Test
  149. public void testIdNoRegexp() {
  150. boolean b = Pattern
  151. .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");
  152. System.out.println(b);
  153. }
  154. @Test
  155. public void tesSms() throws IOException {
  156. Reflections reflections = new Reflections(this.getClass().getPackage().getName() + ".enums");
  157. Set<Class<? extends Enum>> entitySet = reflections.getSubTypesOf(Enum.class);
  158. StringBuilder idxJs = new StringBuilder();
  159. for (Class<? extends Enum> entity : entitySet) {
  160. idxJs.append("import ").append(entity.getSimpleName()).append(" from \"./").append(entity.getSimpleName())
  161. .append("\";\n");
  162. StringBuilder str = new StringBuilder("export default {\n");
  163. for (Enum enumConstant : entity.getEnumConstants()) {
  164. str.append(" ").append(enumConstant.name()).append(": \"").append(enumConstant.name())
  165. .append("\",\n");
  166. }
  167. str.append("}");
  168. Files.write(Paths.get(System.getProperty("user.dir"), "src", "main", "vue", "src", "constants", entity
  169. .getSimpleName() + ".js"), str.toString()
  170. .getBytes(StandardCharsets.UTF_8), CREATE, TRUNCATE_EXISTING);
  171. Files.write(Paths.get(System.getProperty("user.dir"), "src", "main", "zmj_mp", "src", "constants", entity
  172. .getSimpleName() + ".js"), str.toString()
  173. .getBytes(StandardCharsets.UTF_8), CREATE, TRUNCATE_EXISTING);
  174. }
  175. idxJs.append("export default {\n");
  176. for (Class<? extends Enum> entity : entitySet) {
  177. idxJs.append(" ").append(entity.getSimpleName()).append(": ").append(entity.getSimpleName())
  178. .append(",\n");
  179. }
  180. idxJs.append("}");
  181. System.out.println(idxJs.toString());
  182. Files.write(Paths
  183. .get(System.getProperty("user.dir"), "src", "main", "vue", "src", "constants", "index.js"), idxJs
  184. .toString().getBytes(StandardCharsets.UTF_8), CREATE, TRUNCATE_EXISTING);
  185. Files.write(Paths
  186. .get(System.getProperty("user.dir"), "src", "main", "zmj_mp", "src", "constants", "index.js"), idxJs
  187. .toString().getBytes(StandardCharsets.UTF_8), CREATE, TRUNCATE_EXISTING);
  188. }
  189. @Test
  190. public void gen() {
  191. System.out.println(RandomStringUtils.randomAlphabetic(32));
  192. }
  193. @Test
  194. public void password() {
  195. String password = new BCryptPasswordEncoder().encode("123456");
  196. System.out.println(password);
  197. }
  198. @SneakyThrows
  199. @Test
  200. public void pngquant() {
  201. PngQuant pngQuant = new PngQuant();
  202. ImageIO.write(pngQuant
  203. .getRemapped(ImageIO.read(new File("/Users/drew/Downloads/2021-11-01-18-07-04JCDfFxKb.HEIC"))),
  204. "jpg", new File("/Users/drew/Downloads/111.jpg"));
  205. }
  206. @SneakyThrows
  207. @Test
  208. public void mozjpeg() {
  209. File out = TempFile.createTempFile("kljasdlkhfasldg", ".jpg");
  210. ImageProcessor processor = new ImageProcessorImpl();
  211. ImageProcessInfo processInfo = ImageProcessInfo.fromMap(ImageProcessorUtils.compressImage(processor,
  212. new File("/Users/drew/Downloads/2020-09-08-17-07-21zwBhaHeQ.jpg"),
  213. out, 75));
  214. FileCopyUtils.copy(out, new File("/Users/drew/Desktop/111.jpg"));
  215. System.out.println(out);
  216. }
  217. @Test
  218. public void thumbnailator() throws IOException, ImageProcessException {
  219. Thumbnails.of(new File("/Users/drew/Downloads/2021-11-01-17-47-55zMwbSlgJ.jpeg"))
  220. .size(3000, 3000)
  221. .outputFormat("jpg")
  222. .toFile("/Users/drew/Desktop/1.jpg");
  223. PngQuant pngQuant = new PngQuant();
  224. ImageIO.write(pngQuant
  225. .getRemapped(ImageIO.read(new File("/Users/drew/Desktop/1.jpg"))),
  226. "jpg", new File("/Users/drew/Desktop/2.jpg"));
  227. ImageProcessor processor = new ImageProcessorImpl();
  228. ImageProcessInfo processInfo = ImageProcessInfo.fromMap(ImageProcessorUtils.compressImage(processor,
  229. new File("/Users/drew/Desktop/1.jpg"),
  230. new File("/Users/drew/Desktop/3.jpg"), 75));
  231. }
  232. @Test
  233. public void base64() {
  234. System.out.println(Base64.decode("e6e6vQJYhGmIkcA1pfnsipTovp10wJ"));
  235. }
  236. @Test
  237. public void resolveUrl() {
  238. try {
  239. System.out.println(new URLCodec().encode("http://www.baidu.com"));
  240. } catch (EncoderException e) {
  241. e.printStackTrace();
  242. }
  243. }
  244. @Test
  245. public void testIPFS() throws IOException {
  246. IPFS ipfs = new IPFS("121.40.132.44", 5001);
  247. HttpRequest request = HttpRequest.get("https://awesomeadmin.oss-cn-hangzhou.aliyuncs.com/image/2021-10-21-16-44-52kZqxuwhH.gif");
  248. File file = File.createTempFile("ipfs", ".tmp");
  249. request.receive(file);
  250. NamedStreamable.FileWrapper file1 = new NamedStreamable.FileWrapper(file);
  251. MerkleNode put = ipfs.add(file1).get(0);
  252. Multihash multihash = ipfs.pin.add(put.hash).get(0);
  253. System.out.println(put.hash.toBase58());
  254. System.out.println(multihash.toBase58());
  255. }
  256. @Test
  257. public void testWin() {
  258. List<BlindBoxItem> items = new ArrayList<>();
  259. items.add(BlindBoxItem.builder()
  260. .name("普通1")
  261. .total(100)
  262. .stock(100)
  263. .build());
  264. items.add(BlindBoxItem.builder()
  265. .name("普通2")
  266. .total(100)
  267. .stock(100)
  268. .build());
  269. items.add(BlindBoxItem.builder()
  270. .name("稀有1")
  271. .total(5)
  272. .stock(5)
  273. .rare(true)
  274. .build());
  275. items.add(BlindBoxItem.builder()
  276. .name("稀有2")
  277. .total(5)
  278. .stock(5)
  279. .rare(true)
  280. .build());
  281. for (int k = 0; k < items.stream().mapToInt(BlindBoxItem::getTotal).sum(); k++) {
  282. Map<BlindBoxItem, Range<Integer>> randomRange = new HashMap<>();
  283. int c = 0, sum = 0;
  284. for (BlindBoxItem item : items) {
  285. randomRange.put(item, Range.between(c, c + item.getStock()));
  286. c += item.getStock();
  287. sum += item.getStock();
  288. }
  289. boolean win = false;
  290. int retry = 0;
  291. BlindBoxItem winItem = null;
  292. while (winItem == null) {
  293. int rand = RandomUtils.nextInt(0, sum + 1);
  294. for (Map.Entry<BlindBoxItem, Range<Integer>> entry : randomRange.entrySet()) {
  295. BlindBoxItem item = entry.getKey();
  296. Range<Integer> range = entry.getValue();
  297. if (rand >= range.getMinimum() && rand < range.getMaximum()) {
  298. int total = items.stream().filter(i -> !i.isRare())
  299. .mapToInt(BlindBoxItem::getTotal).sum();
  300. int stock = items.stream().filter(i -> !i.isRare())
  301. .mapToInt(BlindBoxItem::getStock).sum();
  302. if (item.isRare()) {
  303. double nRate = stock / (double) total;
  304. double rRate = (item.getStock() - 1) / (double) item.getTotal();
  305. if (Math.abs(nRate - rRate) < (1 / (double) item.getTotal()) || retry > 1 || rRate == 0) {
  306. if (!(nRate > 0.1 && item.getStock() == 1)) {
  307. winItem = item;
  308. }
  309. } else {
  310. retry++;
  311. }
  312. } else {
  313. double nRate = (stock - 1) / (double) total;
  314. double rRate = item.getStock() / (double) item.getTotal();
  315. if (Math.abs(nRate - rRate) < 0.2 || retry > 1 || nRate == 0) {
  316. winItem = item;
  317. } else {
  318. retry++;
  319. }
  320. }
  321. }
  322. }
  323. }
  324. winItem.setStock(winItem.getStock() - 1);
  325. System.out.println(winItem.getName() + (winItem.isRare() ? "\t+++" : ""));
  326. }
  327. }
  328. @Test
  329. public void testGrabFrame() throws IOException {
  330. FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber("/Users/drew/Downloads/video1627914878375.mp4");
  331. frameGrabber.start();
  332. Java2DFrameConverter aa = new Java2DFrameConverter();
  333. int length = frameGrabber.getLengthInVideoFrames();
  334. Frame frame = null;
  335. int i = 0;
  336. while (frame == null && i < length) {
  337. frame = frameGrabber.grabKeyFrame();
  338. i++;
  339. }
  340. Objects.requireNonNull(frame);
  341. BufferedImage thumbBi = aa.convert(frame);
  342. ImageIO.write(thumbBi, "jpg", new File("/Users/drew/Desktop/1.jpg"));
  343. }
  344. @Test
  345. public void testQuality() throws IOException {
  346. Thumbnails.of("/Users/drew/Desktop/2021-11-04-11-28-36VAOoasUd.jpeg")
  347. .size(1000, 1000)
  348. .outputFormat("jpg")
  349. .outputQuality(1)
  350. .toFile("/Users/drew/Desktop/1.jpg");
  351. Thumbnails.of("/Users/drew/Desktop/2021-11-04-11-28-36VAOoasUd.jpeg")
  352. .size(1000, 1000)
  353. .outputFormat("jpg")
  354. .outputQuality(0.6)
  355. .toFile("/Users/drew/Desktop/2.jpg");
  356. }
  357. @Test
  358. public void testJwt() {
  359. String token = Jwts.builder()
  360. .setClaims(new HashMap<>())
  361. .setSubject("15077886171")
  362. .setIssuedAt(new Date())
  363. .setExpiration(new Date(new Date().getTime() + 10 * 60 * 1000)) //10min
  364. .signWith(SignatureAlgorithm.HS512, Constants.SMS_TOKEN_SECRET)
  365. .compact();
  366. System.out.println(token);
  367. Claims claims = Jwts.parser()
  368. .setSigningKey(Constants.SMS_TOKEN_SECRET)
  369. .parseClaimsJws(token)
  370. .getBody();
  371. System.out.println(claims.getSubject());
  372. System.out.println(claims.getExpiration());
  373. }
  374. @Test
  375. public void testReplace() {
  376. System.out.println("15077886171".replaceAll("(?<=.{3}).*(?=.{4})", "**"));
  377. }
  378. @Test
  379. public void sfsdf() {
  380. System.out.println(BigDecimal.valueOf(11111110.5).setScale(2, RoundingMode.HALF_UP).toPlainString());
  381. }
  382. @Test
  383. public void random256() throws NoSuchAlgorithmException {
  384. String tokenId = TokenUtils.genTokenId();
  385. System.out.println(tokenId);
  386. System.out.println(new BigInteger(tokenId, 16));
  387. }
  388. @Test
  389. public void dd() throws IOException {
  390. String[] arr1 = FileUtils.readFileToString(new File("/Users/drew/Desktop/未命名文件夹 2/111")).split("\n");
  391. List<String> arr2 = Arrays.asList(FileUtils.readFileToString(new File("/Users/drew/Desktop/未命名文件夹 2/222"))
  392. .split("\n"));
  393. for (String s : arr1) {
  394. if (!arr2.contains(s)) {
  395. System.out.println(s);
  396. }
  397. }
  398. }
  399. @Test
  400. public void jj() {
  401. final int parallelism = 4;
  402. ForkJoinPool forkJoinPool = null;
  403. try {
  404. forkJoinPool = new ForkJoinPool(parallelism);
  405. forkJoinPool.submit(() ->
  406. // Parallel task here, for example
  407. IntStream.range(1, 1_000_000).parallel()
  408. .forEach(i -> {
  409. })
  410. );
  411. } finally {
  412. if (forkJoinPool != null) {
  413. forkJoinPool.shutdown();
  414. }
  415. }
  416. }
  417. @Test
  418. public void testnewSingleThreadScheduledExecutor() throws InterruptedException {
  419. ExecutorService service = Executors.newFixedThreadPool(10);
  420. final int[] c = {0};
  421. for (int i = 0; i < 1000; i++) {
  422. service.submit(new Runnable() {
  423. @SneakyThrows
  424. @Override
  425. public void run() {
  426. Thread.sleep(300);
  427. System.out.println(++c[0]);
  428. }
  429. });
  430. }
  431. Thread.sleep(20000);
  432. }
  433. @Test
  434. public void testaes() throws Exception {
  435. String encrypted = "ccd97379f001d47895eb4293144b74f28de4fcf5b56daf4ce73d2db34f381984b2c2260f821593968e387dccdc11713a5b558a571b17aaae3e9e91a0b9dc576e";
  436. String qs = AESEncryptUtil.decrypt(encrypted);
  437. System.out.println(qs);
  438. List<NameValuePair> list = URLEncodedUtils.parse(qs, StandardCharsets.UTF_8);
  439. System.out.println(JSON.toJSONString(list, SerializerFeature.PrettyFormat));
  440. final Map<String, String> map = Splitter.on('&').trimResults().withKeyValueSeparator('=').split(qs);
  441. System.out.println(map);
  442. }
  443. @Test
  444. public void aasdf() {
  445. System.out.println(new BCryptPasswordEncoder().matches("123456", "$2a$10$hYKQk3SKDqpK2QPDFqGdLekKWFcHs8rvou0hV4TxFy.ylL8PTBo5a"));
  446. }
  447. @Test
  448. public void testBCrypt() {
  449. BCryptPasswordEncoder encoder1 = new BCryptPasswordEncoder(4);
  450. BCryptPasswordEncoder encoder2 = new BCryptPasswordEncoder(4);
  451. String pwd = "$2a$10$oAWnGIHR2Cvc0BsMN7YCtOjvXsBLBygYxiVG3E1fuUmhM3sEOYhQe";
  452. System.out.println(encoder1.matches("123456", pwd));
  453. System.out.println(encoder2.matches("123456", pwd));
  454. System.out.println(encoder1.matches("1234561", pwd));
  455. System.out.println(encoder2.matches("1234561", pwd));
  456. long encode1 = 0;
  457. long match1 = 0;
  458. for (int i = 0; i < 10; i++) {
  459. long t = System.currentTimeMillis();
  460. encoder1.encode("123456");
  461. encode1 += System.currentTimeMillis() - t;
  462. t = System.currentTimeMillis();
  463. encoder1.matches("123456", pwd);
  464. match1 += System.currentTimeMillis() - t;
  465. }
  466. System.out.println("avg encode = " + encode1 / 10 + "ms");
  467. System.out.println("avg match = " + match1 / 10 + "ms");
  468. long encode2 = 0;
  469. long match2 = 0;
  470. for (int i = 0; i < 10; i++) {
  471. long t = System.currentTimeMillis();
  472. encoder2.encode("123456");
  473. encode2 += System.currentTimeMillis() - t;
  474. t = System.currentTimeMillis();
  475. encoder2.matches("123456", pwd);
  476. match2 += System.currentTimeMillis() - t;
  477. }
  478. System.out.println("avg encode = " + encode2 / 10 + "ms");
  479. System.out.println("avg match = " + match2 / 10 + "ms");
  480. }
  481. @Test
  482. public void testParseToken() {
  483. long t1 = 0;
  484. long t2 = 0;
  485. for (int i = 0; i < 1000; i++) {
  486. long t = System.currentTimeMillis();
  487. String token = Jwts.builder()
  488. .setClaims(new HashMap<>())
  489. .setSubject("a" + i)
  490. .setIssuedAt(new Date())
  491. .setExpiration(new Date(new Date().getTime() + 10000000))
  492. .signWith(SignatureAlgorithm.HS256, "123456")
  493. .compact();
  494. t1 += System.currentTimeMillis() - t;
  495. System.out.println(token);
  496. t = System.currentTimeMillis();
  497. Claims claims = Jwts.parser()
  498. .setSigningKey("123456")
  499. .parseClaimsJws(token)
  500. .getBody();
  501. System.out.println(claims.getSubject());
  502. t2 += System.currentTimeMillis() - t;
  503. }
  504. System.out.println(t1);
  505. System.out.println(t2);
  506. System.out.println(t1 / 1000);
  507. System.out.println(t2 / 1000);
  508. }
  509. @Test
  510. public void testHashCode() {
  511. long t = System.currentTimeMillis();
  512. new PageQuery().hashCode();
  513. System.out.println(System.currentTimeMillis() - t);
  514. }
  515. @Test
  516. public void testversion() {
  517. String version = "1.2.321";
  518. String[] arr = version.split("\\.");
  519. StringBuilder str = new StringBuilder();
  520. for (int i = 0; i < arr.length; i++) {
  521. str.insert(0, String.format("%03d", Integer.parseInt(arr[arr.length - 1 - i])));
  522. }
  523. System.out.println(Integer.parseInt(str.toString()));
  524. }
  525. @Test
  526. public void testNumberFormat() {
  527. DecimalFormat df = new DecimalFormat("000000", DecimalFormatSymbols.getInstance(Locale.US));
  528. System.out.println(df.format(new BigDecimal("199.11"))); // prints: 001.0
  529. }
  530. @Test
  531. public void testWriteExcel() throws IOException, InvalidFormatException {
  532. // Creating file object of existing excel file
  533. File xlsxFile = new File("/Users/drew/Downloads/批量付款到对私银行账户模板的副本.xls");
  534. InputStream inputStream = getClass().getResourceAsStream("/批量付款到对私银行账户模板.xls");
  535. //Creating workbook from input stream
  536. Workbook workbook = WorkbookFactory.create(inputStream);
  537. //Reading first sheet of excel file
  538. Sheet sheet = workbook.getSheetAt(0);
  539. for (int i = 0; i < 100; i++) {
  540. Row row = sheet.getRow(i + 1);
  541. if (row == null) {
  542. row = sheet.createRow(i + 1);
  543. }
  544. Optional.ofNullable(row.getCell(1)).orElse(row.createCell(1)).setCellValue("1");
  545. Optional.ofNullable(row.getCell(2)).orElse(row.createCell(2)).setCellValue("2");
  546. Optional.ofNullable(row.getCell(3)).orElse(row.createCell(3))
  547. .setCellValue(new BigDecimal("1").doubleValue());
  548. }
  549. //Close input stream
  550. inputStream.close();
  551. FileOutputStream os = new FileOutputStream(xlsxFile);
  552. workbook.write(os);
  553. //Close the workbook and output stream
  554. workbook.close();
  555. }
  556. @Test
  557. public void testSandImport() {
  558. List<SandPaySettle> failSettleList = EasyExcel.read("/Users/drew/Downloads/0411失败.csv")
  559. .head(SandPaySettle.class).sheet()
  560. .doReadSync();
  561. List<UserWithdraw> withdrawList = EasyExcel.read("/Users/drew/Downloads/0411.xlsx")
  562. .head(UserWithdraw.class).sheet()
  563. .doReadSync();
  564. List<UserWithdraw> failWithdraw = new ArrayList<>();
  565. for (SandPaySettle sandPaySettle : failSettleList) {
  566. withdrawList.stream().filter(i -> i.getBankNo().equals(sandPaySettle.getBankNo()))
  567. .findAny().ifPresent(failWithdraw::add);
  568. }
  569. System.out.println(failSettleList.size());
  570. System.out.println(failWithdraw.size());
  571. }
  572. @Test
  573. public void match() throws NoSuchAlgorithmException, InvalidKeySpecException, IOException {
  574. byte[] byteKey = java.util.Base64.getDecoder().decode(Files.readAllBytes(Path.of("/Users/drew/Downloads/hmpay_app_public_key.txt")));
  575. PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(byteKey));
  576. System.out.println(publicKey);
  577. byte[] bytePriv = java.util.Base64.getDecoder().decode(Files.readAllBytes(Path.of("/Users/drew/Downloads/hmpay_app_private_key.txt")));
  578. PrivateKey privKey = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(bytePriv));
  579. System.out.println(privKey);
  580. }
  581. }