wangqifan 4 年 前
コミット
528caa004e

+ 52 - 0
src/main/java/com/izouma/tcg/dto/cardCase/CaseDTO.java

@@ -0,0 +1,52 @@
+package com.izouma.tcg.dto.cardCase;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.tcg.converter.StringArrayConverter;
+import com.izouma.tcg.enums.CaseStatus;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Convert;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class CaseDTO {
+    private Long          cardCaseId;
+    @ExcelProperty(value = "结束时间")
+    private LocalDateTime endTime;
+    @Convert(converter = StringArrayConverter.class)
+    private List<String>  images;
+    @ExcelProperty(value = "卡箱名称")
+    private String        caseName;
+    @ExcelProperty(value = "价格")
+    private BigDecimal    price;
+    @ExcelProperty(value = "卡箱状态")
+    private CaseStatus    caseStatus;
+    private boolean       special;
+    private Long          roomId;
+    private boolean       liveNow;
+    private boolean       instant;
+    private Long          collectionId;
+
+    public CaseDTO(Long cardCaseId, LocalDateTime endTime, List<String> images, String caseName, BigDecimal price, CaseStatus caseStatus, boolean special,
+                   Long roomId, boolean liveNow, boolean instant, Long collectionId) {
+        this.cardCaseId = cardCaseId;
+        this.endTime = endTime;
+        this.images = images;
+        this.caseName = caseName;
+        this.price = price;
+        this.caseStatus = caseStatus;
+        this.special = special;
+        this.roomId = roomId;
+        this.liveNow = liveNow;
+        this.instant = instant;
+        this.collectionId = collectionId;
+    }
+}

+ 2 - 0
src/main/java/com/izouma/tcg/repo/card/CardBoxRepo.java

@@ -19,6 +19,8 @@ public interface CardBoxRepo extends JpaRepository<CardBox, Long>, JpaSpecificat
 
 
     List<CardBox> findAllByCardCaseId(Long caseId);
     List<CardBox> findAllByCardCaseId(Long caseId);
 
 
+    Integer countAllByCardCaseId(Long caseId);
+
     Integer countAllByCardCaseIdAndUserIdNotNull(Long cardCaseId);
     Integer countAllByCardCaseIdAndUserIdNotNull(Long cardCaseId);
 
 
     Integer countAllByCardCaseIdAndBindNameNotNull(Long cardCaseId);
     Integer countAllByCardCaseIdAndBindNameNotNull(Long cardCaseId);

+ 11 - 2
src/main/java/com/izouma/tcg/repo/card/CardCaseRepo.java

@@ -1,6 +1,7 @@
 package com.izouma.tcg.repo.card;
 package com.izouma.tcg.repo.card;
 
 
 import com.izouma.tcg.domain.card.CardCase;
 import com.izouma.tcg.domain.card.CardCase;
+import com.izouma.tcg.dto.cardCase.CaseDTO;
 import com.izouma.tcg.enums.CaseStatus;
 import com.izouma.tcg.enums.CaseStatus;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@@ -17,9 +18,17 @@ public interface CardCaseRepo extends JpaRepository<CardCase, Long>, JpaSpecific
     @Transactional
     @Transactional
     void softDelete(Long id);
     void softDelete(Long id);
 
 
-    List<CardCase> findAllByCaseStatusAndSeriesIdOrderByCreatedAtDesc(CaseStatus caseStatus, Long seriesId);
+    @Query("SELECT new com.izouma.tcg.dto.cardCase.CaseDTO(" +
+            "   s.id, s.startTime, s.images, s.customName, " +
+            "   s.boxPrice, s.caseStatus, s.special, s.roomId, s.liveNow, s.instant,s.collectionId) " +
+            "FROM CardCase s WHERE s.caseStatus = ?1 and s.seriesId = ?2 and s.del = false")
+    List<CaseDTO> customFindList1(CaseStatus caseStatus, Long seriesId);
 
 
-    List<CardCase> findAllByCaseStatusAndCollectionIdInAndSeriesIdOrderByCreatedAtDesc(CaseStatus caseStatus, Set<Long> collectionId, Long seriesId);
+    @Query("SELECT new com.izouma.tcg.dto.cardCase.CaseDTO(" +
+            "   s.id, s.startTime, s.images, s.customName, " +
+            "   s.boxPrice, s.caseStatus, s.special, s.roomId, s.liveNow, s.instant,s.collectionId) " +
+            "FROM CardCase s WHERE s.caseStatus = ?1 and s.seriesId = ?3 and s.collectionId in ?2 and s.del = false ")
+    List<CaseDTO> customFindList2(CaseStatus caseStatus, Set<Long> collectionId, Long seriesId);
 
 
     List<CardCase> findAllByRoomIdAndStoreId(Long roomId, Long storeId);
     List<CardCase> findAllByRoomIdAndStoreId(Long roomId, Long storeId);
 }
 }

+ 47 - 8
src/main/java/com/izouma/tcg/service/card/CardCaseService.java

@@ -14,6 +14,7 @@ import com.izouma.tcg.dto.PageQuery;
 import com.izouma.tcg.dto.cardCase.CardCaseDTO;
 import com.izouma.tcg.dto.cardCase.CardCaseDTO;
 import com.izouma.tcg.dto.cardCase.CardCaseInputDTO;
 import com.izouma.tcg.dto.cardCase.CardCaseInputDTO;
 import com.izouma.tcg.dto.cardCase.CardDTO;
 import com.izouma.tcg.dto.cardCase.CardDTO;
+import com.izouma.tcg.dto.cardCase.CaseDTO;
 import com.izouma.tcg.enums.AuthorityName;
 import com.izouma.tcg.enums.AuthorityName;
 import com.izouma.tcg.enums.CaseStatus;
 import com.izouma.tcg.enums.CaseStatus;
 import com.izouma.tcg.enums.OrderStatus;
 import com.izouma.tcg.enums.OrderStatus;
@@ -142,6 +143,46 @@ public class CardCaseService {
         return getCardCaseDTOS(cardCases);
         return getCardCaseDTOS(cardCases);
     }
     }
 
 
+    private List<CardCaseDTO> getCustomSearchResult(List<CaseDTO> caseDTOS) {
+        List<CardCaseDTO> result = new ArrayList<>();
+        caseDTOS.forEach(caseDTO -> {
+            CardCaseDTO cardCaseDTO = new CardCaseDTO();
+            cardCaseDTO.setCardCaseId(caseDTO.getCardCaseId());
+            Collection collection = collectionRepo.findById(caseDTO.getCollectionId()).orElse(null);
+            if (caseDTO.getCaseName() != null) {
+                cardCaseDTO.setCaseName(caseDTO.getCaseName());
+            } else {
+                cardCaseDTO
+                        .setCaseName(collection
+                                .getName());
+            }
+            if (caseDTO.getImages().size() == 0) {
+                cardCaseDTO.setImage(collection.getImages().get(0));
+            } else {
+                cardCaseDTO.setImage(caseDTO.getImages().get(0));
+            }
+            cardCaseDTO.setEndTime(caseDTO.getEndTime());
+            cardCaseDTO.setCaseStatus(caseDTO.getCaseStatus().toString());
+            Integer totalCount = cardBoxRepo.countAllByCardCaseId(caseDTO.getCardCaseId());
+            Integer preorderCount = cardBoxRepo.countAllByCardCaseIdAndUserIdNotNull(caseDTO.getCardCaseId());
+            Integer otherPreorderCount = cardBoxRepo.countAllByCardCaseIdAndBindNameNotNull(caseDTO.getCardCaseId());
+            preorderCount = preorderCount + otherPreorderCount;
+            cardCaseDTO.setPrice(caseDTO.getPrice());
+            if (caseDTO.isSpecial()) {
+                cardCaseDTO.setTotal(totalCount / 2);
+                cardCaseDTO.setPreorder(preorderCount / 2);
+            } else {
+                cardCaseDTO.setPreorder(preorderCount);
+                cardCaseDTO.setTotal(totalCount);
+            }
+            cardCaseDTO.setLiveNow(caseDTO.isLiveNow());
+            cardCaseDTO.setInstant(caseDTO.isInstant());
+            cardCaseDTO.setRoomId(caseDTO.getRoomId());
+            result.add(cardCaseDTO);
+        });
+        return result;
+    }
+
     private List<CardCaseDTO> getCardCaseDTOS(List<CardCase> cardCases) {
     private List<CardCaseDTO> getCardCaseDTOS(List<CardCase> cardCases) {
         List<CardCaseDTO> result = new ArrayList<>();
         List<CardCaseDTO> result = new ArrayList<>();
         cardCases.forEach(cardCase -> {
         cardCases.forEach(cardCase -> {
@@ -191,24 +232,22 @@ public class CardCaseService {
 
 
 
 
     public List<CardCaseDTO> showCardCasesMA(CaseStatus caseStatus, Long collectionId, String search, Long seriesId) {
     public List<CardCaseDTO> showCardCasesMA(CaseStatus caseStatus, Long collectionId, String search, Long seriesId) {
-        List<CardCase> cardCases = new ArrayList<>();
+        List<CaseDTO> cardCases = new ArrayList<>();
         Set<Long> collectionIds = new HashSet<>();
         Set<Long> collectionIds = new HashSet<>();
         if (StringUtils.isNotBlank(search)) {
         if (StringUtils.isNotBlank(search)) {
             collectionIds = collectionRepo.findAllByNameLike("%" + search + "%").stream().map(Collection::getId)
             collectionIds = collectionRepo.findAllByNameLike("%" + search + "%").stream().map(Collection::getId)
                     .collect(Collectors.toSet());
                     .collect(Collectors.toSet());
-            cardCases = cardCaseRepo
-                    .findAllByCaseStatusAndCollectionIdInAndSeriesIdOrderByCreatedAtDesc(caseStatus, collectionIds, seriesId);
         }
         }
         if (collectionId != null) {
         if (collectionId != null) {
             collectionIds.add(collectionId);
             collectionIds.add(collectionId);
-            cardCases = cardCaseRepo
-                    .findAllByCaseStatusAndCollectionIdInAndSeriesIdOrderByCreatedAtDesc(caseStatus, collectionIds, seriesId);
         }
         }
         if (collectionId == null & StringUtils.isBlank(search)) {
         if (collectionId == null & StringUtils.isBlank(search)) {
-            cardCases = cardCaseRepo.findAllByCaseStatusAndSeriesIdOrderByCreatedAtDesc(caseStatus, seriesId);
+            cardCases = cardCaseRepo.customFindList1(caseStatus, seriesId);
+        } else {
+            cardCases = cardCaseRepo
+                    .customFindList2(caseStatus, collectionIds, seriesId);
         }
         }
-        cardCases.removeIf(BaseEntity::isDel);
-        return getCardCaseDTOS(cardCases);
+        return getCustomSearchResult(cardCases);
     }
     }
 
 
     public Map<String, Object> showCaseInfoMA(Long caseId) {
     public Map<String, Object> showCaseInfoMA(Long caseId) {