licailing 4 лет назад
Родитель
Сommit
bdf3f3b81f

+ 60 - 50
src/main/java/com/izouma/nineth/service/AuctionOrderService.java

@@ -12,6 +12,7 @@ import com.izouma.nineth.utils.SnowflakeIdWorker;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.data.redis.core.BoundValueOperations;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -42,6 +43,7 @@ public class AuctionOrderService {
     private RedisTemplate<String, Object> redisTemplate;
     private SnowflakeIdWorker             snowflakeIdWorker;
     private AuctionPassRecordRepo         auctionPassRecordRepo;
+    private OrderPayService               orderPayService;
 
     public Page<AuctionOrder> all(PageQuery pageQuery) {
         return auctionOrderRepo
@@ -54,7 +56,7 @@ public class AuctionOrderService {
         AuctionActivity auction = auctionActivityRepo.findById(auctionId)
                 .orElseThrow(new BusinessException("无拍卖信息"));
 
-        if (!auction.isOnShelf()){
+        if (!auction.isOnShelf()) {
             throw new BusinessException("拍卖已结束");
         }
 
@@ -106,8 +108,6 @@ public class AuctionOrderService {
 
         try {
 
-            //        auction.setStatus(AuctionStatus.PURCHASED);
-//        auctionActivityRepo.save(auction);
             auctionActivityService.changeStatus(auctionId, AuctionPaymentType.FIXED_PRICE
                     .equals(type) ? AuctionStatus.FIXED_PRICE_PURCHASED : AuctionStatus.PURCHASED);
 
@@ -230,8 +230,6 @@ public class AuctionOrderService {
         }
 
         //此拍卖结束
-//        auction.setStatus(AuctionStatus.FINISH);
-//        auctionActivityRepo.save(auction);
         auctionActivityService.changeStatus(order.getAuctionId(), AuctionStatus.FINISH);
 
         if (AuctionSource.TRANSFER.equals(order.getSource())) {
@@ -254,12 +252,8 @@ public class AuctionOrderService {
         //退保证金
         List<AuctionOrder> orders = auctionOrderRepo.findAllByAuctionIdAndPaymentTypeAndStatus(order.getAuctionId(),
                 AuctionPaymentType.DEPOSIT, AuctionOrderStatus.FINISH);
-        orders.forEach(o -> {
-            //退款(暂未写)
-            o.setRefundTime(LocalDateTime.now());
-            o.setStatus(AuctionOrderStatus.REFUNDING);
-            auctionOrderRepo.save(o);
-        });
+        //退款
+        orders.forEach(this::refund);
     }
 
     public void cancel(AuctionOrder order) {
@@ -268,6 +262,7 @@ public class AuctionOrderService {
             return;
         }
 
+        boolean isRefund = false;
         try {
             AuctionActivity auction = auctionActivityRepo.findById(order.getAuctionId())
                     .orElseThrow(new BusinessException("无记录"));
@@ -277,8 +272,6 @@ public class AuctionOrderService {
                 int time = sysConfigService.getInt("auction_cancel_time");
                 if (LocalDateTime.now().isAfter(auction.getEndTime().plusMinutes(time))) {
                     //超过支付时长
-//                  auction.setStatus(AuctionStatus.PASS);
-//                  auctionActivityRepo.save(auction);
                     auctionActivityService.changeStatus(order.getAuctionId(), AuctionStatus.PASS);
                     //添加到流拍记录表里
                     auctionPassRecordRepo.save(AuctionPassRecord.builder()
@@ -286,21 +279,8 @@ public class AuctionOrderService {
                             .userId(auction.getPurchaserId())
                             .purchasePrice(auction.getPurchasePrice())
                             .build());
-
-                    //退其余保证金
-                    List<AuctionOrder> orders = auctionOrderRepo
-                            .findAllByAuctionIdAndPaymentTypeAndStatus(order.getAuctionId(),
-                                    AuctionPaymentType.DEPOSIT, AuctionOrderStatus.FINISH);
-                    orders.stream()
-                            .filter(o -> !order.getUserId().equals(o.getUserId()))
-                            .forEach(o -> {
-                                //退款(暂未写)
-                                o.setRefundTime(LocalDateTime.now());
-                                o.setStatus(AuctionOrderStatus.REFUNDING);
-                                auctionOrderRepo.save(o);
-                            });
-
-                    //违约处罚
+                    //流拍不退自己的保证金
+                    isRefund = true;
 
                 }
             } else if (AuctionPaymentType.DEPOSIT.equals(order.getPaymentType())) {
@@ -310,31 +290,11 @@ public class AuctionOrderService {
                 //拍卖是否结束
                 if (LocalDateTime.now().isBefore(auction.getEndTime())) {
                     //返回拍卖状态
-//                  auction.setStatus(AuctionStatus.ONGOING);
                     auctionActivityService.changeStatus(order.getAuctionId(), AuctionStatus.ONGOING);
-
                 } else {
-//                  auction.setStatus(AuctionStatus.PASS);
-                    //退还保证金
-                    List<AuctionOrder> orders = auctionOrderRepo
-                            .findAllByAuctionIdAndPaymentTypeAndStatus(order.getAuctionId(),
-                                    AuctionPaymentType.DEPOSIT, AuctionOrderStatus.FINISH);
-                    orders.forEach(o -> {
-                        //退款(暂未写)
-                        o.setRefundTime(LocalDateTime.now());
-                        o.setStatus(AuctionOrderStatus.REFUNDING);
-                        auctionOrderRepo.save(o);
-                    });
+                    //最后一个出价的人得
+                    auctionActivityService.changeStatus(order.getAuctionId(), AuctionStatus.PURCHASED);
                 }
-//              auctionActivityRepo.save(auction);
-                auctionActivityService.changeStatus(order.getAuctionId(), AuctionStatus.PASS);
-                //添加到流拍记录表里
-                auctionPassRecordRepo.save(AuctionPassRecord.builder()
-                        .auctionId(auction.getId())
-                        .userId(auction.getPurchaserId())
-                        .purchasePrice(auction.getPurchasePrice())
-                        .build());
-
             }
 
             if (AuctionSource.TRANSFER.equals(order.getSource())) {
@@ -352,9 +312,59 @@ public class AuctionOrderService {
         } catch (Exception e) {
             log.error("订单取消错误 orderId: " + order.getId(), e);
         }
+
+        if (isRefund) {
+            //退其余保证金
+            List<AuctionOrder> orders = auctionOrderRepo
+                    .findAllByAuctionIdAndPaymentTypeAndStatus(order.getAuctionId(),
+                            AuctionPaymentType.DEPOSIT, AuctionOrderStatus.FINISH);
+            //退款
+            orders.stream()
+                    .filter(o -> !order.getUserId().equals(o.getUserId()))
+                    .forEach(this::refund);
+        }
         releaseOrderLock(order.getId());
     }
 
+    /**
+     * 退款方法
+     *
+     * @param order 订单
+     */
+    private void refund(AuctionOrder order) {
+        log.info("退款拍卖保证金订单{}", order.getId());
+        PayMethod payMethod = order.getPayMethod();
+        if (PayMethod.ALIPAY == payMethod) {
+            if (StringUtils.length(order.getTransactionId()) == 28) {
+                payMethod = PayMethod.HMPAY;
+            } else if (StringUtils.length(order.getTransactionId()) == 30) {
+                payMethod = PayMethod.SANDPAY;
+            }
+        }
+        try {
+            switch (payMethod) {
+                case HMPAY:
+                    orderPayService.refund(order.getId()
+                            .toString(), order.getTotalPrice(), "hmPay");
+                    log.info("退款成功");
+                    break;
+                case SANDPAY:
+                    orderPayService.refund(order.getId()
+                            .toString(), order.getTotalPrice(), "sandPay");
+                    log.info("退款成功");
+                    break;
+            }
+            order.setRefundTime(LocalDateTime.now());
+            order.setStatus(AuctionOrderStatus.REFUNDED);
+            auctionOrderRepo.save(order);
+        } catch (Exception e) {
+            log.error("拍卖保证金订单退款失败 {} ", order.getId(), e);
+            order.setRefundTime(LocalDateTime.now());
+            order.setStatus(AuctionOrderStatus.REFUNDING);
+            auctionOrderRepo.save(order);
+        }
+    }
+
     public boolean getOrderLock(Long orderId) {
         BoundValueOperations<String, Object> ops = redisTemplate.boundValueOps(RedisKeys.AUCTION_ORDER_LOCK + orderId);
         Boolean flag = ops.setIfAbsent(1, 1, TimeUnit.DAYS);

+ 2 - 12
src/main/java/com/izouma/nineth/web/AuctionOrderController.java

@@ -1,25 +1,17 @@
 package com.izouma.nineth.web;
 
-import com.izouma.nineth.domain.AuctionActivity;
 import com.izouma.nineth.domain.AuctionOrder;
-import com.izouma.nineth.domain.AuctionRecord;
-import com.izouma.nineth.domain.User;
-import com.izouma.nineth.enums.AuctionPaymentType;
-import com.izouma.nineth.enums.AuctionRecordType;
-import com.izouma.nineth.repo.AuctionActivityRepo;
-import com.izouma.nineth.repo.AuctionRecordRepo;
-import com.izouma.nineth.service.AuctionOrderService;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.AuctionPaymentType;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.AuctionOrderRepo;
+import com.izouma.nineth.service.AuctionOrderService;
 import com.izouma.nineth.utils.ObjUtils;
-import com.izouma.nineth.utils.SecurityUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -32,8 +24,6 @@ import java.util.List;
 public class AuctionOrderController extends BaseController {
     private AuctionOrderService auctionOrderService;
     private AuctionOrderRepo    auctionOrderRepo;
-    private AuctionActivityRepo auctionActivityRepo;
-    private AuctionRecordRepo   auctionRecordRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")

+ 12 - 8
src/main/java/com/izouma/nineth/web/HmPayController.java

@@ -27,14 +27,15 @@ import java.util.stream.Collectors;
 @Slf4j
 @AllArgsConstructor
 public class HmPayController extends BaseController {
-    private final HMPayService       hmPayService;
-    private final HmPayProperties    hmPayProperties;
-    private final RocketMQTemplate   rocketMQTemplate;
-    private final OrderService       orderService;
-    private final MintOrderService   mintOrderService;
-    private final GiftOrderService   giftOrderService;
-    private final GeneralProperties  generalProperties;
-    private final UserBalanceService userBalanceService;
+    private final HMPayService        hmPayService;
+    private final HmPayProperties     hmPayProperties;
+    private final RocketMQTemplate    rocketMQTemplate;
+    private final OrderService        orderService;
+    private final MintOrderService    mintOrderService;
+    private final GiftOrderService    giftOrderService;
+    private final GeneralProperties   generalProperties;
+    private final UserBalanceService  userBalanceService;
+    private final AuctionOrderService auctionOrderService;
 
     @GetMapping("/notify/{type}/{id}")
     public String orderNotify(@PathVariable String type, @PathVariable Long id, HttpServletRequest req) throws AlipayApiException {
@@ -68,6 +69,9 @@ public class HmPayController extends BaseController {
                 case "recharge":
                     userBalanceService.recharge(id, PayMethod.HMPAY, plat_trx_no);
                     break;
+                case "auctionOrder":
+                    auctionOrderService.notify(id, PayMethod.SANDPAY, plat_trx_no);
+                    break;
             }
         }
         return "SUCCESS";