UserPropertyRepoTest.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. package com.izouma.nineth.repo;
  2. import com.alibaba.excel.EasyExcel;
  3. import com.izouma.nineth.ApplicationTests;
  4. import com.izouma.nineth.domain.Asset;
  5. import com.izouma.nineth.domain.Order;
  6. import com.izouma.nineth.domain.User;
  7. import com.izouma.nineth.domain.UserProperty;
  8. import com.izouma.nineth.dto.AirDropExcelDTO;
  9. import com.izouma.nineth.dto.TestDTO;
  10. import com.izouma.nineth.enums.AssetStatus;
  11. import com.izouma.nineth.enums.OrderStatus;
  12. import com.izouma.nineth.service.CacheService;
  13. import com.izouma.nineth.utils.excel.UploadDataListener;
  14. import org.apache.commons.lang3.ObjectUtils;
  15. import org.junit.Test;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import java.io.File;
  18. import java.time.LocalDateTime;
  19. import java.util.*;
  20. import java.util.concurrent.atomic.AtomicInteger;
  21. import java.util.stream.Collectors;
  22. public class UserPropertyRepoTest extends ApplicationTests {
  23. @Autowired
  24. private UserPropertyRepo userPropertyRepo;
  25. @Autowired
  26. private AssetRepo assetRepo;
  27. @Autowired
  28. private UserRepo userRepo;
  29. @Autowired
  30. private CacheService cacheService;
  31. @Autowired
  32. private OrderRepo orderRepo;
  33. @Test
  34. public void save() {
  35. UserProperty property = new UserProperty();
  36. property.setId(9972L);
  37. property.setMaxCount(5);
  38. //24h
  39. // property.setTime(86400L);
  40. userPropertyRepo.save(property);
  41. }
  42. @Test
  43. public void get() {
  44. AtomicInteger userMax = new AtomicInteger();
  45. userPropertyRepo.findById(9972L).ifPresent(userProperty -> userMax.set(userProperty.getMaxCount()));
  46. System.out.println(userMax.addAndGet(1));
  47. }
  48. @Test
  49. public void clear() {
  50. }
  51. @Test
  52. public void setProperty() {
  53. //封神星主
  54. List<Long> userIds = userRepo.findIdByLevel();
  55. userIds.forEach(id -> {
  56. UserProperty userProperty = userPropertyRepo.findById(id).orElse(new UserProperty(id, 0));
  57. userProperty.setMaxCount(userProperty.getMaxCount() + 1);
  58. if (userProperty.getMaxCount() > 6) {
  59. userProperty.setMaxCount(6);
  60. }
  61. userPropertyRepo.save(userProperty);
  62. });
  63. //OASIS004:绿洲朋克战神3D持斧模型 2516069L 或 OASIS002: 绿洲朋克猴王3D旋转眺望模型 2514968L
  64. //OASISPUNK007:OASISPUNK绿洲朋克族人共治会荣誉勋章 5050947L
  65. //冠军赛 · 李小龙80周年纪念勋章 7275L
  66. List<Asset> assets = assetRepo.findByCollectionIdInAndStatus(Arrays.asList(2516069L, 2514968L, 5050947L, 7275L), AssetStatus.NORMAL);
  67. Map<Long, List<Asset>> collect = assets.stream().collect(Collectors.groupingBy(Asset::getOwnerId));
  68. collect.forEach((key, value) -> {
  69. List<Long> ids = value.stream().map(Asset::getCollectionId).distinct().collect(Collectors.toList());
  70. int size = ids.size();
  71. if (ids.contains(2516069L) && ids.contains(2514968L)) {
  72. size -= 1;
  73. }
  74. UserProperty userProperty = userPropertyRepo.findById(key).orElse(new UserProperty(key, 0));
  75. userProperty.setMaxCount(userProperty.getMaxCount() + size);
  76. if (userProperty.getMaxCount() > 6) {
  77. userProperty.setMaxCount(6);
  78. }
  79. userPropertyRepo.save(userProperty);
  80. });
  81. //凤鸣寺
  82. File file = new File("/Users/qiufangchao/Desktop/mingdan.xlsx");
  83. UploadDataListener<AirDropExcelDTO> listener = new UploadDataListener<>();
  84. List<AirDropExcelDTO> dtos = EasyExcel.read(file, AirDropExcelDTO.class, listener)
  85. .sheet()
  86. .doReadSync();
  87. List<Long> userIds2 = userRepo.findIdByPhones(dtos.stream()
  88. .map(AirDropExcelDTO::getPhone)
  89. .collect(Collectors.toSet()));
  90. System.out.println(userIds2);
  91. userIds2.forEach(id -> {
  92. UserProperty userProperty = userPropertyRepo.findById(id).orElse(new UserProperty(id, 0));
  93. userProperty.setMaxCount(userProperty.getMaxCount() + 1);
  94. if (userProperty.getMaxCount() > 6) {
  95. userProperty.setMaxCount(6);
  96. }
  97. userPropertyRepo.save(userProperty);
  98. });
  99. //vip
  100. File file1 = new File("/Users/qiufangchao/Desktop/VIP.xlsx");
  101. UploadDataListener<AirDropExcelDTO> listener1 = new UploadDataListener<>();
  102. List<AirDropExcelDTO> dtos1 = EasyExcel.read(file1, AirDropExcelDTO.class, listener1)
  103. .sheet()
  104. .doReadSync();
  105. Set<String> userIds3 = dtos1.stream()
  106. .map(AirDropExcelDTO::getPhone)
  107. .collect(Collectors.toSet());
  108. System.out.println(userIds3);
  109. userIds3.forEach(id -> {
  110. UserProperty userProperty = userPropertyRepo.findById(Long.parseLong(id))
  111. .orElse(new UserProperty(Long.parseLong(id), 0));
  112. userProperty.setMaxCount(userProperty.getMaxCount() + 1);
  113. if (userProperty.getMaxCount() > 6) {
  114. userProperty.setMaxCount(6);
  115. }
  116. userPropertyRepo.save(userProperty);
  117. });
  118. //-1
  119. Iterable<UserProperty> all = userPropertyRepo.findAll();
  120. all.forEach(p -> {
  121. if (p.getMaxCount() > 1) {
  122. p.setMaxCount(p.getMaxCount() - 1);
  123. userPropertyRepo.save(p);
  124. }
  125. });
  126. }
  127. @Test
  128. public void setByphone() {
  129. File file = new File("/Users/qiufangchao/Desktop/mingdan.xlsx");
  130. UploadDataListener<AirDropExcelDTO> listener = new UploadDataListener<>();
  131. List<AirDropExcelDTO> dtos = EasyExcel.read(file, AirDropExcelDTO.class, listener)
  132. .sheet()
  133. .doReadSync();
  134. // List<Long> userIds = userRepo.findIdByPhones(dtos.stream()
  135. // .map(AirDropExcelDTO::getPhone)
  136. // .collect(Collectors.toSet()));
  137. // System.out.println(userIds);
  138. List<User> users = userRepo.findByPhoneInAndDelFalse(dtos.stream()
  139. .map(AirDropExcelDTO::getPhone)
  140. .collect(Collectors.toSet()));
  141. Map<String, Long> userMap = users.stream().collect(Collectors.toMap(User::getPhone, User::getId));
  142. dtos.forEach(dto -> {
  143. Long aLong = userMap.get(dto.getPhone());
  144. if (aLong == null) {
  145. System.out.println(dto.getPhone());
  146. }
  147. });
  148. // userIds.forEach(id -> {
  149. // UserProperty userProperty = userPropertyRepo.findById(id).orElse(new UserProperty(id, 0));
  150. // userProperty.setMaxCount(userProperty.getMaxCount() + 1);
  151. // if (userProperty.getMaxCount() > 6) {
  152. // userProperty.setMaxCount(6);
  153. // }
  154. // userPropertyRepo.save(userProperty);
  155. // });
  156. }
  157. @Test
  158. public void setById() {
  159. // userPropertyRepo.deleteAll();
  160. File file = new File("/Users/sunnianwen/Desktop/all1.xlsx");
  161. File file2 = new File("/Users/sunnianwen/Desktop/123.xlsx");
  162. UploadDataListener<AirDropExcelDTO> listener = new UploadDataListener<>();
  163. List<AirDropExcelDTO> dtos = EasyExcel.read(file, AirDropExcelDTO.class, listener)
  164. .sheet()
  165. .doReadSync();
  166. List<AirDropExcelDTO> dtos2 = EasyExcel.read(file2, AirDropExcelDTO.class, listener)
  167. .sheet()
  168. .doReadSync();
  169. // Set<String> userIds = dtos.stream()
  170. // .map(AirDropExcelDTO::getPhone)
  171. // .collect(Collectors.toSet());
  172. // System.out.println(userIds);
  173. dtos.forEach(id -> {
  174. UserProperty userProperty = userPropertyRepo.findById(Long.parseLong(id.getPhone()))
  175. .orElse(new UserProperty(Long.parseLong(id.getPhone()), 0));
  176. userProperty.setMaxCount(Integer.parseInt(id.getName()));
  177. // if (userProperty.getMaxCount() > 6) {
  178. // userProperty.setMaxCount(6);
  179. // }
  180. userPropertyRepo.save(userProperty);
  181. });
  182. dtos2.forEach(id -> {
  183. UserProperty userProperty = userPropertyRepo.findById(Long.parseLong(id.getPhone()))
  184. .orElse(null);
  185. if (ObjectUtils.isEmpty(userProperty)) {
  186. userProperty = new UserProperty(Long.parseLong(id.getPhone()), Integer.parseInt(id.getName()));
  187. } else {
  188. userProperty.setMaxCount(userProperty.getMaxCount() + 1);
  189. }
  190. userPropertyRepo.save(userProperty);
  191. });
  192. }
  193. @Test
  194. public void statistic() {
  195. Map<Long, Integer> map = new HashMap<>();
  196. //凤鸣寺
  197. File file = new File("/Users/qiufangchao/Desktop/mingdan.xlsx");
  198. UploadDataListener<AirDropExcelDTO> listener = new UploadDataListener<>();
  199. List<AirDropExcelDTO> dtos = EasyExcel.read(file, AirDropExcelDTO.class, listener)
  200. .sheet()
  201. .doReadSync();
  202. List<Long> userIds = userRepo.findIdByPhones(dtos.stream()
  203. .map(AirDropExcelDTO::getPhone)
  204. .collect(Collectors.toSet()));
  205. userIds.forEach(id -> map.merge(id, 1, Integer::sum));
  206. //封神星主
  207. List<Long> userIds1 = userRepo.findIdByLevel();
  208. userIds1.forEach(id -> map.merge(id, 1, Integer::sum));
  209. //OASIS004:绿洲朋克战神3D持斧模型 2516069L 或 OASIS002: 绿洲朋克猴王3D旋转眺望模型 2514968L
  210. //OASISPUNK007:OASISPUNK绿洲朋克族人共治会荣誉勋章 5050947L
  211. //冠军赛 · 李小龙80周年纪念勋章 7275L
  212. List<Asset> assets = assetRepo.findByCollectionIdInAndStatus(Arrays.asList(2516069L, 2514968L, 5050947L, 7275L), AssetStatus.NORMAL);
  213. Map<Long, List<Asset>> collect = assets.stream().collect(Collectors.groupingBy(Asset::getOwnerId));
  214. collect.forEach((key, value) -> {
  215. List<Long> ids = value.stream().map(Asset::getCollectionId).distinct().collect(Collectors.toList());
  216. int size = ids.size();
  217. if (ids.contains(2516069L) && ids.contains(2514968L)) {
  218. size -= 1;
  219. }
  220. map.merge(key, size, Integer::sum);
  221. });
  222. map.forEach((key, value) -> System.out.println(key + "," + value));
  223. }
  224. @Test
  225. public void test() {
  226. Iterable<UserProperty> all = userPropertyRepo.findAll();
  227. List<String> result = new ArrayList<>();
  228. all.forEach(p -> {
  229. if (p != null && p.getId() != null) {
  230. if (p.getMaxCount() > 0) {
  231. int num = userRepo.countAllByCollectionIdAndCollectionInvitorAndSettleAccountIdIsNotNull(8573130L, p.getId());
  232. User user = userRepo.findById(p.getId()).orElse(null);
  233. if (user.getVipPurchase() > 0 || user.getCreatedAt().isAfter(LocalDateTime.of(2022, 7, 5, 0, 0))) {
  234. if ((num / 3) + 1 != p.getMaxCount()) {
  235. result.add(p.getId() + "," + p.getMaxCount() + "," + num);
  236. }
  237. } else {
  238. if (num / 3 != p.getMaxCount()) {
  239. result.add(p.getId() + "," + p.getMaxCount() + "," + num);
  240. }
  241. }
  242. // if (num == 0) {
  243. // userPropertyRepo.delete(p);
  244. // user.setVipPoint(0);
  245. // userRepo.save(user);
  246. // cacheService.clearUser(user.getId());
  247. // cacheService.clearUser(user.getId());
  248. // }
  249. // int size = num / 3;
  250. // if (user.getVipPurchase() > 0 || user.getCreatedAt().isAfter(LocalDateTime.of(2022, 7, 5, 0, 0))) {
  251. // if (size + 1 != p.getMaxCount()) {
  252. // if (size + 1 >= 10 && p.getMaxCount() != 10) {
  253. // p.setMaxCount(10);
  254. // userPropertyRepo.save(p);
  255. // } else {
  256. // p.setMaxCount(size + 1);
  257. // userPropertyRepo.save(p);
  258. // }
  259. // }
  260. //
  261. // } else {
  262. // if (size != p.getMaxCount()) {
  263. // if (size >= 10 && p.getMaxCount() != 10) {
  264. // p.setMaxCount(10);
  265. // userPropertyRepo.save(p);
  266. // } else {
  267. // p.setMaxCount(size);
  268. // userPropertyRepo.save(p);
  269. // }
  270. // }
  271. // }
  272. }
  273. }
  274. });
  275. result.forEach(System.out::println);
  276. }
  277. @Test
  278. public void test3() {
  279. List<String> result = new ArrayList<>();
  280. File file = new File("/Users/qiufangchao/Desktop/error.xlsx");
  281. UploadDataListener<TestDTO> listener = new UploadDataListener<>();
  282. List<TestDTO> dtos = EasyExcel.read(file, TestDTO.class, listener)
  283. .sheet()
  284. .doReadSync();
  285. dtos.forEach(dto -> {
  286. int size = dto.getReal() / 3;
  287. int orders = orderRepo.countAllByUserIdAndCollectionIdAndStatusIn(dto.getId(), 8573130L, Arrays.asList(OrderStatus.FINISH, OrderStatus.PROCESSING));
  288. User user = userRepo.findById(dto.getId()).orElse(null);
  289. if (user.getVipPurchase() > 0 || user.getCreatedAt().isAfter(LocalDateTime.of(2022, 7, 5, 0, 0))) {
  290. if (size + 1 < orders) {
  291. int num = size + 1;
  292. result.add(dto.getId() + "," + num + "," + orders);
  293. }
  294. } else {
  295. if (size < orders) {
  296. result.add(dto.getId() + "," + size + "," + orders);
  297. }
  298. }
  299. });
  300. result.forEach(System.out::println);
  301. }
  302. }