licailing 4 years ago
parent
commit
0fa700439d

+ 4 - 0
src/main/java/com/izouma/nineth/domain/AuctionRecord.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.domain;
 
 import com.izouma.nineth.enums.AuctionRecordType;
+import com.izouma.nineth.enums.AuctionType;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -39,6 +40,9 @@ public class AuctionRecord extends BaseEntity {
     private BigDecimal        bidderPrice;
     @ApiModelProperty("是否支付保证金")
     private boolean           payDeposit;
+    @Enumerated(EnumType.STRING)
+    @ApiModelProperty("拍卖类型")
+    private AuctionType       auctionType;
 //    @ApiModelProperty("收货人")
 //    private String            contactName;
 //    @ApiModelProperty("收货电话")

+ 9 - 0
src/main/java/com/izouma/nineth/repo/AuctionRecordRepo.java

@@ -1,12 +1,14 @@
 package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.AuctionRecord;
+import com.izouma.nineth.enums.AuctionType;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 public interface AuctionRecordRepo extends JpaRepository<AuctionRecord, Long>, JpaSpecificationExecutor<AuctionRecord> {
     @Query("update AuctionRecord t set t.del = true where t.id = ?1")
@@ -19,4 +21,11 @@ public interface AuctionRecordRepo extends JpaRepository<AuctionRecord, Long>, J
     @Modifying
     @Transactional
     void deleteAllByAuctionId(Long auctionId);
+
+    @Query(nativeQuery = true, value = "WITH ranked_messages AS (" +
+            " SELECT m.*, ROW_NUMBER() OVER (PARTITION BY auction_id ORDER BY id DESC) AS rn" +
+            "    FROM auction_record AS m where user_id = ?1 and auction_type = ?2" +
+            ")" +
+            "SELECT * FROM ranked_messages WHERE rn = 1;")
+    List<AuctionRecord> findByUserId(Long userId, AuctionType type);
 }

+ 37 - 2
src/main/java/com/izouma/nineth/service/AuctionRecordService.java

@@ -41,12 +41,11 @@ public class AuctionRecordService {
                 .findAll(JpaUtils.toSpecification(pageQuery, AuctionRecord.class), JpaUtils.toPageRequest(pageQuery));
     }
 
-    public Page<AuctionRecordDTO> recordInfos(PageQuery pageQuery, Long userId) {
+    public Page<AuctionRecordDTO> recordInfos(PageQuery pageQuery) {
 
         Page<AuctionRecord> records = auctionRecordRepo
                 .findAll(JpaUtils.toSpecification(pageQuery, AuctionRecord.class), JpaUtils.toPageRequest(pageQuery));
 
-//        Page<AuctionRecord> records = auctionRecordRepo.findAll((), JpaUtils.toPageRequest(pageQuery));
         List<AuctionRecordDTO> auctionRecordDTOS = new ArrayList<>();
         records.getContent().forEach(record -> {
             AuctionActivity auctionActivity = auctionActivityRepo.findById(record.getAuctionId())
@@ -99,6 +98,42 @@ public class AuctionRecordService {
         return new PageImpl<>(auctionRecordDTOS, records.getPageable(), records.getTotalElements());
     }
 
+    public List<AuctionRecordDTO> userRecord(Long userId, AuctionType type) {
+        List<AuctionRecord> records = auctionRecordRepo.findByUserId(userId, type);
+        List<AuctionRecordDTO> auctionRecordDTOS = new ArrayList<>();
+        records.forEach(record -> {
+            AuctionActivity auctionActivity = auctionActivityRepo.findById(record.getAuctionId())
+                    .orElse(null);
+            if (auctionActivity == null) {
+                return;
+            }
+            AuctionRecordDTO auctionRecordDTO = new AuctionRecordDTO();
+            BeanUtils.copyProperties(record, auctionRecordDTO);
+            auctionRecordDTO.setAuctionPic(auctionActivity.getPic());
+            auctionRecordDTO.setActPurchasedId((auctionActivity.getPurchaserId()));
+            auctionRecordDTO.setCreatedTime(record.getCreatedAt());
+            if (auctionRecordDTO.getType().equals(AuctionRecordType.DEPOSIT) || auctionRecordDTO.isPurchased()) {
+                AuctionOrder auctionOrder = auctionOrderRepo.findFirstByAuctionRecordIdOrderByCreatedAt(record.getId());
+                if (auctionOrder != null) {
+                    auctionRecordDTO.setOrderId(auctionOrder.getId());
+                    auctionRecordDTO.setOrderStatus(auctionOrder.getStatus());
+                }
+            }
+            Set<AuctionOrderStatus> auctionOrderStatuses = new HashSet<>();
+            auctionOrderStatuses.add(AuctionOrderStatus.NOT_PAID);
+            auctionOrderStatuses.add(AuctionOrderStatus.CANCELLED);
+            AuctionOrder depositOrder = auctionOrderRepo.findFirstByAuctionIdAndPaymentTypeAndStatusNotIn(record
+                    .getAuctionId(), AuctionPaymentType.DEPOSIT, auctionOrderStatuses);
+            if (depositOrder != null) {
+                auctionRecordDTO.setDepositStatus(depositOrder.getStatus());
+            } else {
+                auctionRecordDTO.setDepositStatus(AuctionOrderStatus.FINISH);
+            }
+            auctionRecordDTOS.add(auctionRecordDTO);
+        });
+        return auctionRecordDTOS;
+    }
+
     public AuctionRecord create(Long userId, Long auctionId, BigDecimal amount) {
         AuctionActivity auction = auctionActivityRepo.findById(auctionId)
                 .orElseThrow(new BusinessException("暂无"));

+ 8 - 1
src/main/java/com/izouma/nineth/web/AuctionRecordController.java

@@ -2,6 +2,7 @@ package com.izouma.nineth.web;
 
 import com.izouma.nineth.domain.AuctionRecord;
 import com.izouma.nineth.dto.auction.AuctionRecordDTO;
+import com.izouma.nineth.enums.AuctionType;
 import com.izouma.nineth.service.AuctionRecordService;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
@@ -45,9 +46,15 @@ public class AuctionRecordController extends BaseController {
 
     @PostMapping("/recordInfos")
     public Page<AuctionRecordDTO> recordInfos(@RequestBody PageQuery pageQuery) {
-        return auctionRecordService.recordInfos(pageQuery, SecurityUtils.getAuthenticatedUser().getId());
+        return auctionRecordService.recordInfos(pageQuery);
     }
 
+    @PostMapping("/userRecord")
+    public List<AuctionRecordDTO> userRecord(@RequestParam AuctionType type) {
+        return auctionRecordService.userRecord(SecurityUtils.getAuthenticatedUser().getId(), type);
+    }
+
+
     @GetMapping("/get/{id}")
     public AuctionRecord get(@PathVariable Long id) {
         return auctionRecordRepo.findById(id).orElseThrow(new BusinessException("无记录"));