CardCaseService.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. package com.izouma.tcg.service.card;
  2. import com.izouma.tcg.domain.BaseEntity;
  3. import com.izouma.tcg.domain.User;
  4. import com.izouma.tcg.domain.card.*;
  5. import com.izouma.tcg.domain.card.Collection;
  6. import com.izouma.tcg.domain.customizeStore.Store;
  7. import com.izouma.tcg.domain.orderInfo.OrderInfo;
  8. import com.izouma.tcg.domain.orderInfo.OrderRefundApply;
  9. import com.izouma.tcg.dto.CardBoxDTO;
  10. import com.izouma.tcg.dto.CaseJackpotDTO;
  11. import com.izouma.tcg.dto.GroupDTO;
  12. import com.izouma.tcg.dto.PageQuery;
  13. import com.izouma.tcg.dto.cardCase.CardCaseDTO;
  14. import com.izouma.tcg.dto.cardCase.CardCaseInputDTO;
  15. import com.izouma.tcg.dto.cardCase.CardDTO;
  16. import com.izouma.tcg.dto.cardCase.CaseDTO;
  17. import com.izouma.tcg.enums.AuthorityName;
  18. import com.izouma.tcg.enums.CaseStatus;
  19. import com.izouma.tcg.enums.OrderStatus;
  20. import com.izouma.tcg.exception.BusinessException;
  21. import com.izouma.tcg.repo.card.*;
  22. import com.izouma.tcg.repo.customizeStore.StoreRepo;
  23. import com.izouma.tcg.repo.orderInfo.OrderInfoRepo;
  24. import com.izouma.tcg.repo.orderInfo.OrderRefundApplyRepo;
  25. import com.izouma.tcg.security.Authority;
  26. import com.izouma.tcg.service.orderInfo.OrderRefundApplyService;
  27. import com.izouma.tcg.utils.JpaUtils;
  28. import com.izouma.tcg.utils.SecurityUtils;
  29. import lombok.AllArgsConstructor;
  30. import org.apache.commons.beanutils.ConvertUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.springframework.data.domain.Page;
  33. import org.springframework.data.domain.PageImpl;
  34. import org.springframework.data.domain.Pageable;
  35. import org.springframework.data.jpa.domain.Specification;
  36. import org.springframework.stereotype.Service;
  37. import javax.naming.Name;
  38. import javax.persistence.criteria.Predicate;
  39. import javax.transaction.Transactional;
  40. import java.util.*;
  41. import java.util.stream.Collectors;
  42. import static com.izouma.tcg.utils.JpaUtils.*;
  43. @Service
  44. @AllArgsConstructor
  45. public class CardCaseService {
  46. private final CardCaseRepo cardCaseRepo;
  47. private final CollectionRepo collectionRepo;
  48. private final CardBoxRepo cardBoxRepo;
  49. private final StoreRepo storeRepo;
  50. private final OrderRefundApplyService orderRefundApplyService;
  51. private final OrderInfoRepo orderInfoRepo;
  52. private final OrderRefundApplyRepo orderRefundApplyRepo;
  53. private final JackpotRepo jackpotRepo;
  54. private final LevelRepo levelRepo;
  55. private final CaseJackpotsRepo caseJackpotsRepo;
  56. public Page<CardCase> all(PageQuery pageQuery) {
  57. return cardCaseRepo
  58. .findAll(JpaUtils.toSpecification(pageQuery, CardCase.class), JpaUtils.toPageRequest(pageQuery));
  59. }
  60. public List<GroupDTO> genNewCardCase(Integer group, Integer groupCount, boolean special) {
  61. List<GroupDTO> GroupDTOs = new ArrayList<>();
  62. for (int i = 0; i < group; i++) {
  63. int groupNo = i + 1;
  64. GroupDTO groupDTO = new GroupDTO();
  65. groupDTO.setTagTitle(String.valueOf(groupNo));
  66. if (special) {
  67. if (i == 0) {
  68. groupDTO.setTagTitle("A");
  69. } else {
  70. groupDTO.setTagTitle("B");
  71. }
  72. }
  73. List<CardBoxDTO> cardBoxDTOs = new ArrayList<>();
  74. for (int j = 0; j < groupCount; j++) {
  75. int boxNo = j + 1;
  76. CardBoxDTO cardBoxDTO = new CardBoxDTO();
  77. cardBoxDTO.setName(boxNo + "号");
  78. cardBoxDTO.setIdx(boxNo);
  79. cardBoxDTO.setSold(false);
  80. cardBoxDTOs.add(cardBoxDTO);
  81. groupDTO.setDynamicTags(cardBoxDTOs);
  82. }
  83. GroupDTOs.add(groupDTO);
  84. }
  85. return GroupDTOs;
  86. }
  87. // public List<CardCaseDTO> showStoreViewCases(CaseStatus caseStatus, List<String> sortStrings) {
  88. // List<CardCase> cardCases = new ArrayList<>();
  89. // Set<Long> collectionIds = new HashSet<>();
  90. // if (StringUtils.isNotBlank(search)) {
  91. // collectionIds = collectionRepo.findAllByNameLike("%" + search + "%").stream().map(Collection::getId)
  92. // .collect(Collectors.toSet());
  93. // cardCases = cardCaseRepo
  94. // .findAllByCaseStatusAndCollectionIdInAndSeriesId(caseStatus, collectionIds, seriesId);
  95. // }
  96. // if (collectionId != null) {
  97. // collectionIds.add(collectionId);
  98. // cardCases = cardCaseRepo
  99. // .findAllByCaseStatusAndCollectionIdInAndSeriesId(caseStatus, collectionIds, seriesId);
  100. // }
  101. // if (collectionId == null & StringUtils.isBlank(search)) {
  102. // cardCases = cardCaseRepo.findAllByCaseStatusAndSeriesId(caseStatus, seriesId);
  103. // }
  104. // List<CardCaseDTO> result = new ArrayList<>();
  105. // cardCases.removeIf(CardCase::isDel);
  106. // cardCases.forEach(cardCase -> {
  107. // CardCaseDTO cardCaseDTO = new CardCaseDTO();
  108. // cardCaseDTO.setCardCaseId(cardCase.getId());
  109. // cardCaseDTO
  110. // .setCaseName(Optional.ofNullable(cardCase.getCollection()).orElseThrow(new BusinessException("暂无"))
  111. // .getName() + cardCase.getCode());
  112. // cardCaseDTO.setImage(cardCase.getCollection().getImages().get(0));
  113. // cardCaseDTO.setEndTime(cardCase.getStartTime());
  114. // cardCaseDTO.setPrice(cardCase.getBoxPrice());
  115. // cardCaseDTO.setTotal(cardCase.getCardBoxList().size());
  116. // cardCaseDTO.setCaseStatus(cardCase.getCaseStatus().toString());
  117. // Integer preorderCount = cardBoxRepo.countAllByCardCaseIdAndUserIdNotNull(cardCase.getId());
  118. // cardCaseDTO.setPreorder(preorderCount);
  119. // result.add(cardCaseDTO);
  120. // });
  121. // return result;
  122. // }
  123. public List<CardCaseDTO> showStoreCasesMA(PageQuery pageQuery) {
  124. List<CardCase> cardCases = cardCaseRepo
  125. .findAll((Specification<CardCase>) (root, criteriaQuery, criteriaBuilder) ->
  126. criteriaBuilder.and(criteriaBuilder.and(
  127. criteriaBuilder.equal(root.get("storeId"), pageQuery.getQuery().get("storeId")),
  128. root.get("caseStatus").in(pageQuery.getQuery().get("caseStatus")),
  129. criteriaBuilder.equal(root.get("del"), false))), toPageRequest(pageQuery)).getContent();
  130. return getCardCaseDTOS(cardCases);
  131. }
  132. public List<CardCaseDTO> showRoomCasesMA(Long roomId, Long storeId) {
  133. List<CardCase> cardCases = cardCaseRepo.findAllByRoomIdAndStoreId(roomId, storeId);
  134. return getCardCaseDTOS(cardCases);
  135. }
  136. private List<CardCaseDTO> getCustomSearchResult(List<CaseDTO> caseDTOS) {
  137. List<CardCaseDTO> result = new ArrayList<>();
  138. caseDTOS.forEach(caseDTO -> {
  139. CardCaseDTO cardCaseDTO = new CardCaseDTO();
  140. cardCaseDTO.setCardCaseId(caseDTO.getCardCaseId());
  141. Collection collection = collectionRepo.findById(caseDTO.getCollectionId()).orElse(null);
  142. if (caseDTO.getCaseName() != null) {
  143. cardCaseDTO.setCaseName(caseDTO.getCaseName());
  144. } else {
  145. cardCaseDTO
  146. .setCaseName(collection
  147. .getName());
  148. }
  149. if (caseDTO.getImages().size() == 0) {
  150. cardCaseDTO.setImage(collection.getImages().get(0));
  151. } else {
  152. cardCaseDTO.setImage(caseDTO.getImages().get(0));
  153. }
  154. cardCaseDTO.setEndTime(caseDTO.getEndTime());
  155. cardCaseDTO.setCaseStatus(caseDTO.getCaseStatus().toString());
  156. Integer totalCount = cardBoxRepo.countAllByCardCaseId(caseDTO.getCardCaseId());
  157. Integer preorderCount = cardBoxRepo.countAllByCardCaseIdAndUserIdNotNull(caseDTO.getCardCaseId());
  158. Integer otherPreorderCount = cardBoxRepo.countAllByCardCaseIdAndBindNameNotNull(caseDTO.getCardCaseId());
  159. preorderCount = preorderCount + otherPreorderCount;
  160. cardCaseDTO.setPrice(caseDTO.getPrice());
  161. if (caseDTO.isSpecial()) {
  162. cardCaseDTO.setTotal(totalCount / 2);
  163. cardCaseDTO.setPreorder(preorderCount / 2);
  164. } else {
  165. cardCaseDTO.setPreorder(preorderCount);
  166. cardCaseDTO.setTotal(totalCount);
  167. }
  168. cardCaseDTO.setLiveNow(caseDTO.isLiveNow());
  169. cardCaseDTO.setInstant(caseDTO.isInstant());
  170. cardCaseDTO.setRoomId(caseDTO.getRoomId());
  171. cardCaseDTO.setStoreName(storeRepo.findById(caseDTO.getStoreId()).orElse(null).getStoreName());
  172. result.add(cardCaseDTO);
  173. });
  174. return result;
  175. }
  176. private List<CardCaseDTO> getCardCaseDTOS(List<CardCase> cardCases) {
  177. List<CardCaseDTO> result = new ArrayList<>();
  178. cardCases.forEach(cardCase -> {
  179. CardCaseDTO cardCaseDTO = new CardCaseDTO();
  180. cardCaseDTO.setCardCaseId(cardCase.getId());
  181. if (cardCase.getCustomName() != null) {
  182. cardCaseDTO.setCaseName(cardCase.getCustomName());
  183. } else {
  184. cardCaseDTO
  185. .setCaseName(Optional.ofNullable(cardCase.getCollection())
  186. .orElseThrow(new BusinessException("暂无"))
  187. .getName() + cardCase.getCode());
  188. }
  189. if (cardCase.getImages().size() == 0) {
  190. cardCaseDTO.setImage(cardCase.getCollection().getImages().get(0));
  191. } else {
  192. cardCaseDTO.setImage(cardCase.getImages().get(0));
  193. }
  194. cardCaseDTO.setEndTime(cardCase.getStartTime());
  195. cardCaseDTO.setCaseStatus(cardCase.getCaseStatus().toString());
  196. cardCaseDTO.setDescription(cardCase.getDescription());
  197. cardCaseDTO.setPostage(cardCase.getPostage());
  198. Integer preorderCount = cardBoxRepo.countAllByCardCaseIdAndUserIdNotNull(cardCase.getId());
  199. Integer otherPreorderCount = cardBoxRepo.countAllByCardCaseIdAndBindNameNotNull(cardCase.getId());
  200. preorderCount = preorderCount + otherPreorderCount;
  201. Store store = storeRepo.findById(cardCase.getStoreId()).orElse(null);
  202. if (store != null) {
  203. cardCaseDTO.setStoreId(store.getId());
  204. cardCaseDTO.setStoreName(store.getStoreName());
  205. cardCaseDTO.setStoreLogo(store.getLogo());
  206. }
  207. cardCaseDTO.setPrice(cardCase.getBoxPrice());
  208. if (cardCase.isSpecial()) {
  209. cardCaseDTO.setTotal(cardCase.getCardBoxList().size() / 2);
  210. cardCaseDTO.setPreorder(preorderCount / 2);
  211. } else {
  212. cardCaseDTO.setPreorder(preorderCount);
  213. cardCaseDTO.setTotal(cardCase.getCardBoxList().size());
  214. }
  215. cardCaseDTO.setLiveNow(cardCase.isLiveNow());
  216. cardCaseDTO.setInstant(cardCase.isInstant());
  217. cardCaseDTO.setRoomId(cardCase.getRoomId());
  218. result.add(cardCaseDTO);
  219. });
  220. return result;
  221. }
  222. public Page<CardCaseDTO> showCardCasesMA(CaseStatus caseStatus, Long collectionId, String search, Long seriesId, Pageable pageable) {
  223. Page<CaseDTO> cardCases;
  224. Set<Long> collectionIds = new HashSet<>();
  225. if (StringUtils.isNotBlank(search)) {
  226. collectionIds = collectionRepo.findAllByNameLike("%" + search + "%").stream().map(Collection::getId)
  227. .collect(Collectors.toSet());
  228. }
  229. if (collectionId != null) {
  230. collectionIds.add(collectionId);
  231. }
  232. if (collectionId == null & StringUtils.isBlank(search)) {
  233. cardCases = cardCaseRepo.customFindList1(caseStatus, seriesId, pageable);
  234. } else {
  235. cardCases = cardCaseRepo
  236. .customFindList2(caseStatus, collectionIds, seriesId, pageable);
  237. }
  238. return new PageImpl<>(getCustomSearchResult(cardCases.getContent()), cardCases.getPageable(), cardCases
  239. .getTotalElements());
  240. }
  241. public Map<String, Object> showCaseInfoMA(Long caseId) {
  242. CardCase cardCase = cardCaseRepo.findById(caseId).orElseThrow(new BusinessException("无信息"));
  243. if (cardCase.isDel()) {
  244. throw new BusinessException("已删除");
  245. }
  246. List<CardBox> caseBoxList = cardCase.getCardBoxList();
  247. Map<String, List<CardBox>> groupBoxMap = caseBoxList.stream()
  248. .collect(Collectors.groupingBy(CardBox::getGroupCode));
  249. groupBoxMap.forEach((k, v) -> {
  250. if (v.get(0).getBoxIdx() != null) {
  251. List<CardBox> sortedList = v.stream().sorted(Comparator.comparing(CardBox::getBoxIdx))
  252. .collect(Collectors.toList());
  253. groupBoxMap.put(k, sortedList);
  254. }
  255. });
  256. List<CardDTO> jackpots = new ArrayList<>();
  257. cardCase.getCaseJackpots().forEach(jackpot -> {
  258. CardDTO cardDTO = new CardDTO();
  259. cardDTO.setCardName(jackpot.getJackpot().getName());
  260. cardDTO.setId(jackpot.getJackpotId());
  261. cardDTO.setImage(jackpot.getJackpot().getImage());
  262. cardDTO.setMoney(jackpot.getJackpot().getValue());
  263. cardDTO.setCount(jackpot.getCount());
  264. if (!jackpot.getCount().equals(jackpot.getRest()) & jackpot.getRest() != null) {
  265. cardDTO.setCount(jackpot.getRest());
  266. }
  267. jackpots.add(cardDTO);
  268. });
  269. Collections.sort(jackpots);
  270. Map<String, List<CardBox>> listResult = new TreeMap<>();
  271. groupBoxMap.entrySet().stream()
  272. .sorted(Map.Entry.comparingByKey())
  273. .forEachOrdered(x -> listResult.put(x.getKey(), x.getValue()));
  274. Map<String, Object> result = new HashMap<>();
  275. CardCaseDTO cardCaseDTO = new CardCaseDTO();
  276. cardCaseDTO.setCardCaseId(cardCase.getId());
  277. if (cardCase.getCustomName() != null) {
  278. cardCaseDTO.setCaseName(cardCase.getCustomName());
  279. } else {
  280. cardCaseDTO
  281. .setCaseName(Optional.ofNullable(cardCase.getCollection())
  282. .orElseThrow(new BusinessException("暂无"))
  283. .getName() + cardCase.getCode());
  284. }
  285. cardCaseDTO.setDescription(cardCase.getDescription());
  286. if (cardCase.getCustomName() != null) {
  287. cardCaseDTO.setImage(cardCase.getImages().get(0));
  288. } else {
  289. cardCaseDTO.setImage(cardCase.getCollection().getImages().get(0));
  290. }
  291. cardCaseDTO.setImages(cardCase.getImages());
  292. cardCaseDTO.setCardDTOs(jackpots);
  293. if (cardCaseDTO.getImages().size() == 0) {
  294. cardCaseDTO.setImages(cardCase.getCollection().getImages());
  295. }
  296. cardCaseDTO.setEndTime(cardCase.getStartTime());
  297. cardCaseDTO.setPrice(cardCase.getBoxPrice());
  298. cardCaseDTO.setCaseStatus(cardCase.getCaseStatus().toString());
  299. cardCaseDTO.setSpecial(cardCase.isSpecial());
  300. cardCaseDTO.setLiveNow(cardCase.isLiveNow());
  301. cardCaseDTO.setInstant(cardCase.isInstant());
  302. cardCaseDTO.setRoomId(cardCase.getRoomId());
  303. cardCaseDTO.setDescription(cardCase.getDescription());
  304. cardCaseDTO.setPostage(cardCase.getPostage());
  305. Integer preorderCount = cardBoxRepo.countAllByCardCaseIdAndUserIdNotNull(cardCase.getId());
  306. Integer otherPreorderCount = cardBoxRepo.countAllByCardCaseIdAndBindNameNotNull(cardCase.getId());
  307. preorderCount = preorderCount + otherPreorderCount;
  308. Store store = storeRepo.findById(cardCase.getStoreId()).orElse(null);
  309. if (store != null) {
  310. cardCaseDTO.setStoreId(store.getId());
  311. cardCaseDTO.setStoreName(store.getStoreName());
  312. cardCaseDTO.setStoreLogo(store.getStoreName());
  313. }
  314. if (cardCase.isSpecial()) {
  315. cardCaseDTO.setTotal(cardCase.getCardBoxList().size() / 2);
  316. cardCaseDTO.setPreorder(preorderCount / 2);
  317. } else {
  318. cardCaseDTO.setTotal(cardCase.getCardBoxList().size());
  319. cardCaseDTO.setPreorder(preorderCount);
  320. }
  321. result.put("cardCaseInfo", cardCaseDTO);
  322. result.put("groupBoxMap", listResult);
  323. return result;
  324. }
  325. @Transactional
  326. public CardCase save(CardCaseInputDTO cardCaseInputDTO) {
  327. CardCase cardCase = new CardCase();
  328. if (cardCaseInputDTO.getId() != null) {
  329. CardCase orig = cardCaseRepo.findById(cardCaseInputDTO.getId()).orElse(null);
  330. if (orig != null) {
  331. cardCase = orig;
  332. }
  333. }
  334. User user = SecurityUtils.getAuthenticatedUser();
  335. Store store = storeRepo.findFirstByUserId(user.getId());
  336. if (store != null) {
  337. cardCase.setStoreId(store.getId());
  338. }
  339. if (StringUtils.isNotBlank(cardCaseInputDTO.getName())) {
  340. cardCase.setSeriesId(103L);
  341. cardCase.setCollectionId(16507L);
  342. cardCase.setCustomName(cardCaseInputDTO.getName());
  343. } else {
  344. Collection collection = collectionRepo.findById(cardCaseInputDTO.getCollectionId())
  345. .orElseThrow(new BusinessException("无系列信息"));
  346. cardCase.setSeriesId(collection.getSeriesId());
  347. cardCase.setCollectionId(collection.getId());
  348. }
  349. cardCase.setCode(cardCaseInputDTO.getCode());
  350. cardCase.setDescription(cardCaseInputDTO.getDescription());
  351. if (cardCase.getCode() == null) {
  352. cardCase.setCode("");
  353. }
  354. cardCase.setCaseStatus(cardCaseInputDTO.getCaseStatus());
  355. cardCase.setStartTime(cardCaseInputDTO.getStartTime());
  356. cardCase.setBoxPrice(cardCaseInputDTO.getBoxPrice());
  357. if (cardCaseInputDTO.getImages() != null) {
  358. String imageString = cardCaseInputDTO.getImages();
  359. String rep = imageString.replaceAll("[\\[\\]]", "");
  360. if (cardCaseInputDTO.getImages().length() > 0) {
  361. List<String> images = Arrays
  362. .asList((String[]) ConvertUtils.convert(rep.split(","), String.class));
  363. cardCase.setImages(images);
  364. } else {
  365. cardCase.setImages(null);
  366. }
  367. } else {
  368. cardCase.setImages(null);
  369. }
  370. cardCase.setPostage(cardCaseInputDTO.getPostage());
  371. cardCase.setBoxesCount(cardCaseInputDTO.getBoxesCount());
  372. cardCase.setSpecial(cardCaseInputDTO.isSpecial());
  373. cardCase.setLimitOne(cardCaseInputDTO.isLimitOne());
  374. cardCase.setHasLive(cardCaseInputDTO.isHasLive());
  375. cardCase.setInstant(cardCaseInputDTO.isInstant());
  376. //绑定卡池信息
  377. if (cardCaseInputDTO.getCards() != null & cardCaseInputDTO.getGroupDTOS() != null) {
  378. if (cardCaseInputDTO.getCaseJackpots().stream().map(CaseJackpotDTO::getAmount).reduce(Long::sum).orElse(0L)
  379. .intValue() != cardCaseInputDTO.getGroupDTOS().stream()
  380. .map(groupDTO -> groupDTO.getDynamicTags().size()).reduce(Integer::sum).orElse(0)) {
  381. throw new BusinessException("奖池与坑位数量不一致,请重新编辑!");
  382. }
  383. }
  384. CardCase result = cardCaseRepo.save(cardCase);
  385. //解析卡盒与组
  386. if (cardCaseInputDTO.getCaseJackpots().size() > 0) {
  387. List<Long> cardIds = cardCaseInputDTO.getCaseJackpots().stream().map(CaseJackpotDTO::getJackpotId)
  388. .collect(Collectors.toList());
  389. Set<Jackpot> cards = jackpotRepo.findAllByIdIn(cardIds);
  390. List<CaseJackpotDTO> caseJackpotDTOS = cardCaseInputDTO.getCaseJackpots();
  391. caseJackpotDTOS.forEach(caseJackpotDTO -> {
  392. if (caseJackpotDTO.getId() == null) {
  393. CaseJackpots caseJackpots = new CaseJackpots();
  394. caseJackpots.setCaseId(result.getId());
  395. caseJackpots.setCount(caseJackpotDTO.getAmount());
  396. caseJackpots.setJackpotId(caseJackpotDTO.getJackpotId());
  397. caseJackpotsRepo.save(caseJackpots);
  398. }
  399. });
  400. cardCase.setJackpots(cards);
  401. }
  402. List<Long> newIds = new ArrayList<>();
  403. List<GroupDTO> groupDTOS = cardCaseInputDTO.getGroupDTOS();
  404. groupDTOS.forEach(groupDTO -> {
  405. String groupName = groupDTO.getTagTitle();
  406. List<CardBoxDTO> boxDTOs = groupDTO.getDynamicTags();
  407. boxDTOs.forEach(box -> {
  408. CardBox cardBox;
  409. if (box.getCardBoxId() != null) {
  410. cardBox = cardBoxRepo.findById(box.getCardBoxId()).orElse(null);
  411. if (cardBox != null) {
  412. cardBox.setCardCaseId(result.getId());
  413. cardBox.setBoxCode(box.getName());
  414. cardBox.setGroupCode(groupName);
  415. cardBox.setMoney(result.getBoxPrice());
  416. cardBox.setCaseStatus(result.getCaseStatus());
  417. cardBox.setBoxPrice(result.getBoxPrice());
  418. cardBoxRepo.save(cardBox);
  419. newIds.add(cardBox.getId());
  420. }
  421. } else {
  422. cardBox = new CardBox();
  423. cardBox.setCardCaseId(result.getId());
  424. cardBox.setBoxCode(box.getName());
  425. cardBox.setBoxIdx(box.getIdx());
  426. cardBox.setGroupCode(groupName);
  427. cardBox.setMoney(result.getBoxPrice());
  428. cardBox.setCaseStatus(result.getCaseStatus());
  429. cardBox.setBoxPrice(result.getBoxPrice());
  430. cardBoxRepo.save(cardBox);
  431. }
  432. });
  433. });
  434. if (cardCase.getCardBoxList() != null) {
  435. List<Long> cardBoxIds = cardCase.getCardBoxList().stream().map(CardBox::getId).collect(Collectors.toList());
  436. if (cardBoxIds.size() > 0) {
  437. cardBoxIds.removeIf(newIds::contains);
  438. cardBoxRepo.deleteAllByIdIn(cardBoxIds);
  439. }
  440. }
  441. return result;
  442. }
  443. public CardCaseInputDTO getCardCaseInputDTO(Long id) {
  444. CardCase cardCase = cardCaseRepo.findById(id).orElseThrow(new BusinessException("无信息"));
  445. CardCaseInputDTO cardCaseInputDTO = new CardCaseInputDTO();
  446. cardCaseInputDTO.setCaseStatus(cardCase.getCaseStatus());
  447. cardCaseInputDTO.setBoxPrice(cardCase.getBoxPrice());
  448. cardCaseInputDTO.setCode(cardCase.getCode());
  449. cardCaseInputDTO.setId(cardCase.getId());
  450. cardCaseInputDTO.setBoxesCount(cardCase.getBoxesCount());
  451. cardCaseInputDTO.setCollectionId(cardCase.getCollectionId());
  452. cardCaseInputDTO.setSeriesId(cardCase.getSeriesId());
  453. cardCaseInputDTO.setStartTime(cardCase.getStartTime());
  454. cardCaseInputDTO.setDescription(cardCase.getDescription());
  455. cardCaseInputDTO.setSpecial(cardCase.isSpecial());
  456. if (cardCase.getCustomName() != null) {
  457. cardCaseInputDTO.setName(cardCase.getCustomName());
  458. }
  459. cardCaseInputDTO.setLimitOne(cardCase.isLimitOne());
  460. cardCaseInputDTO.setHasLive(cardCase.isHasLive());
  461. cardCaseInputDTO.setInstant(cardCase.isInstant());
  462. cardCaseInputDTO.setCards(cardCase.getJackpots().stream().map(Jackpot::getId).collect(Collectors.toList()));
  463. String imagesList = String.join(",", cardCase.getImages());
  464. long total = cardCase.getCardBoxList().size();
  465. long beenBuy = cardCase.getCardBoxList().stream().filter(CardBox::isSold).count();
  466. cardCaseInputDTO.setSoldStatus(beenBuy + "/" + total);
  467. if (cardCase.isSpecial()) {
  468. cardCaseInputDTO.setSoldStatus(beenBuy / 2 + "/" + total / 2);
  469. }
  470. cardCaseInputDTO.setImages(imagesList);
  471. //
  472. // cardCaseInputDTO.setImages(images);
  473. cardCaseInputDTO.setPostage(cardCase.getPostage());
  474. Map<String, List<CardBox>> groupMap = cardCase.getCardBoxList().stream()
  475. .collect(Collectors.groupingBy(CardBox::getGroupCode));
  476. List<GroupDTO> groupDTOS = new ArrayList<>();
  477. groupMap.forEach((groupCode, cardBoxList) -> {
  478. GroupDTO groupDTO = new GroupDTO();
  479. groupDTO.setTagTitle(groupCode);
  480. List<CardBoxDTO> dtos = new ArrayList<>();
  481. cardBoxList.forEach(cardBox -> {
  482. CardBoxDTO cardBoxDTO = new CardBoxDTO();
  483. cardBoxDTO.setCardBoxId(cardBox.getId());
  484. cardBoxDTO.setName(cardBox.getBoxCode());
  485. cardBoxDTO.setIdx(cardBox.getBoxIdx());
  486. cardBoxDTO.setSold(cardBox.isSold());
  487. dtos.add(cardBoxDTO);
  488. });
  489. groupDTO.setDynamicTags(dtos);
  490. groupDTOS.add(groupDTO);
  491. });
  492. cardCaseInputDTO.setGroupDTOS(groupDTOS);
  493. List<CaseJackpots> caseJackpots = cardCase.getCaseJackpots();
  494. List<CaseJackpotDTO> dtos = new ArrayList<>();
  495. caseJackpots.forEach(caseJackpot -> {
  496. CaseJackpotDTO caseJackpotDTO = new CaseJackpotDTO();
  497. caseJackpotDTO.setId(caseJackpot.getId());
  498. caseJackpotDTO.setJackpotId(caseJackpot.getJackpotId());
  499. caseJackpotDTO.setName(caseJackpot.getJackpot().getName());
  500. caseJackpotDTO.setAmount(caseJackpot.getCount());
  501. caseJackpotDTO.setImage(caseJackpot.getJackpot().getImage());
  502. dtos.add(caseJackpotDTO);
  503. });
  504. cardCaseInputDTO.setCaseJackpots(dtos);
  505. return cardCaseInputDTO;
  506. }
  507. public void softDelete(Long caseId) {
  508. CardCase cardCase = cardCaseRepo.findById(caseId).orElseThrow(new BusinessException("无信息"));
  509. cardCase.setCaseStatus(CaseStatus.UNDO);
  510. cardCaseRepo.save(cardCase);
  511. }
  512. public void revive(Long caseId) {
  513. CardCase cardCase = cardCaseRepo.findById(caseId).orElseThrow(new BusinessException("无信息"));
  514. cardCase.setCaseStatus(CaseStatus.PROGRESS);
  515. cardCase.getCardBoxList().forEach(cardBox -> {
  516. cardBox.setCaseStatus(CaseStatus.PROGRESS);
  517. cardBoxRepo.save(cardBox);
  518. });
  519. cardCaseRepo.save(cardCase);
  520. }
  521. public void multipleDelete(String caseList) {
  522. List<Long> boxIds = Arrays.asList((Long[]) ConvertUtils.convert(caseList.split(","), Long.class));
  523. boxIds.forEach(this::softDelete);
  524. }
  525. public void cancel(Long caseId) {
  526. CardCase cardCase = cardCaseRepo.findById(caseId).orElseThrow(new BusinessException("报错咯,无卡箱信息"));
  527. cardCase.getCardBoxList().forEach(cardBox -> {
  528. cardBox.setCaseStatus(CaseStatus.FINISH);
  529. cardBoxRepo.save(cardBox);
  530. });
  531. cardCase.setCaseStatus(CaseStatus.FINISH);
  532. cardCaseRepo.save(cardCase);
  533. List<OrderStatus> orderStatuses = new ArrayList<>();
  534. orderStatuses.add(OrderStatus.REFUND);
  535. orderStatuses.add(OrderStatus.PAYED);
  536. List<OrderInfo> orderInfos = orderInfoRepo.findAllByCaseIdAndOrderStatusIn(caseId, orderStatuses);
  537. List<OrderRefundApply> orderRefundApplies = new ArrayList<>();
  538. orderInfos.forEach(orderInfo -> {
  539. if (orderInfo.getOrderStatus().equals(OrderStatus.REFUND)) {
  540. orderRefundApplies.add(orderRefundApplyRepo.findById(orderInfo.getRefundId()).orElse(null));
  541. } else {
  542. orderRefundApplies.add(orderRefundApplyService.apply(orderInfo.getId(), "拼箱失败,自动发起退款"));
  543. }
  544. });
  545. orderRefundApplies.forEach(orderRefundApply -> {
  546. orderRefundApplyService.audit(orderRefundApply.getId());
  547. });
  548. }
  549. }