From 392b42c4891cf2e6beda57ab32c51598f290f4b7 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 14 三月 2025 20:56:27 +0800
Subject: [PATCH] bug修改

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java |  256 ++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 233 insertions(+), 23 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
index 5cec9be..e678045 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
@@ -3,21 +3,41 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.BondStatusEnum;
+import com.ruoyi.common.core.enums.PaymentMethodEnum;
+import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.order.domain.pojo.Paylog;
+import com.ruoyi.order.domain.Paylog;
 import com.ruoyi.order.mapper.OrderAuctionBondMapper;
 import com.ruoyi.order.service.IOrderAuctionBondService;
 import com.ruoyi.order.service.IPaylogService;
+import com.ruoyi.order.util.OrderUtil;
 import com.ruoyi.order.util.SinataUtil;
+import com.ruoyi.system.api.domain.AuctionGoods;
+import com.ruoyi.system.api.domain.AuctionSalesroom;
 import com.ruoyi.system.api.domain.OrderAuctionBond;
+import com.ruoyi.system.api.domain.dto.BondReturnDTO;
+import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO;
 import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
+import com.ruoyi.system.api.domain.dto.RefundDTO;
+import com.ruoyi.system.api.domain.vo.PayInfoVO;
+import com.ruoyi.system.api.feignClient.AuctionClient;
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
 import javax.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -27,11 +47,9 @@
  * @author mitao
  * @since 2024-05-16
  */
+@Slf4j
 @Service
 public class OrderAuctionBondServiceImpl extends ServiceImpl<OrderAuctionBondMapper, OrderAuctionBond> implements IOrderAuctionBondService {
-
-    @Resource
-    private IOrderAuctionBondService iOrderAuctionBondService;
 
     @Resource
     private IPaylogService iPaylogService;
@@ -39,36 +57,53 @@
     @Resource
     private PaylogServiceImpl   paylogServiceImpl;
 
+
+    @Resource
+    private AuctionClient auctionClient;
+
+
     @Override
     public R<T> getOrderAuctionBond(OrderAuctionBondDTO orderAuctionBondDTO) {
-
+        log.info("getOrderAuctionBond:{}", orderAuctionBondDTO);
         LambdaQueryWrapper<OrderAuctionBond> wrapper = Wrappers.lambdaQuery();
-        wrapper.notIn(OrderAuctionBond::getMemberId, orderAuctionBondDTO.getUserList());
+        if (orderAuctionBondDTO.getUserList().size()>0){
+            wrapper.notIn(OrderAuctionBond::getMemberId, orderAuctionBondDTO.getUserList());
+        }
         wrapper.eq(OrderAuctionBond::getDelFlag, 0);
         wrapper.eq(OrderAuctionBond::getAuctionSalesroomId, orderAuctionBondDTO.getAuctionSalesroomId());
-        List<OrderAuctionBond> orderAuctionBondList = iOrderAuctionBondService.list(wrapper);
+        List<OrderAuctionBond> orderAuctionBondList = this.list(wrapper);
+
         for (OrderAuctionBond orderAuctionBond : orderAuctionBondList) {
             LambdaQueryWrapper<Paylog> wrapper1 = Wrappers.lambdaQuery();
             wrapper1.eq(Paylog::getOutTradeNo, orderAuctionBond.getOrderNo());
             wrapper1.last("limit 1");
             Paylog paylog = iPaylogService.getOne(wrapper1);
-            if (paylog.getPayType() == 1) {//支付宝
-                boolean bo = paylogServiceImpl.refundForAlipay(paylog.getOutTradeNo(), paylog.getTradeNo(), orderAuctionBond.getBond().doubleValue());
-                if (!bo) {
-                    return R.fail("支付宝退款失败!");
+            log.info("paylog:{}", paylog);
+            if (Objects.nonNull(paylog)) {
+                if (paylog.getPayType() == 1) {// 支付宝
+                    boolean bo = paylogServiceImpl.refundForAlipay(paylog.getOutTradeNo(),
+                            paylog.getTradeNo(), orderAuctionBond.getBond().doubleValue());
+                    if (!bo) {
+                        return R.fail("支付宝退款失败!");
+                    }
+                } else {// 微信
+                    String refundMoney = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
+                    Integer refundFee = Integer.parseInt(
+                            refundMoney.substring(0, refundMoney.length() - 3));
+                    String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
+                    Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3));
+                    refundFee = Integer.parseInt(money.substring(0, money.length() - 3));
+                    String refundNo = OrderUtil.getOrderNoForPrefix("R");
+                    boolean bo = paylogServiceImpl.refundForWxpay(4, paylog.getTradeNo(),
+                            paylog.getOutTradeNo(), refundNo, totalFee, refundFee, "2");
+                    if (!bo) {
+                        return R.fail("微信退款失败!");
+                    }
                 }
-            } else {//微信
-                String refundMoney = SinataUtil.doubleRetainTwo(orderAuctionBond.getBond().doubleValue() * 100d);
-                Integer refundFee = Integer.parseInt(refundMoney.substring(0, refundMoney.length() - 3));
-                String money = SinataUtil.doubleRetainTwo(paylog.getPayMoney() * 100d);
-                Integer totalFee = Integer.parseInt(money.substring(0, money.length() - 3));
-                boolean bo = paylogServiceImpl.refundForWxpay(1, paylog.getTradeNo(), paylog.getOutTradeNo(), orderAuctionBond.getOrderNo(), totalFee, refundFee, "2");
-                if (!bo) {
-                    return R.fail("微信退款失败!");
-                }
+                orderAuctionBond.setBoundStatus(BondStatusEnum.REFUNDED);
             }
-
         }
+        this.updateBatchById(orderAuctionBondList);
         return R.ok();
     }
 
@@ -96,8 +131,183 @@
      * @param bondStatusEnum 保证金状态
      */
     @Override
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
     public void updateOrderAuctionBondStatus(List<Long> ids, BondStatusEnum bondStatusEnum) {
-        this.lambdaUpdate().set(OrderAuctionBond::getBoundStatus, bondStatusEnum)
-                .in(OrderAuctionBond::getId, ids).update();
+        for (Long id:ids){
+            OrderAuctionBond byId = this.getById(id);
+            byId.setBoundStatus(bondStatusEnum);
+            this.updateById(byId);
+        }
     }
+
+    @Override
+    public PayInfoVO SaveOrderAuctionBond(MemberAuctionSalesroomBondDTO memberAuctionSalesroomBondDTO) {
+        PayInfoVO payInfoVO = new PayInfoVO();
+        // 查询参与记录
+        Optional<OrderAuctionBond> orderAuctionBondOpt = this.lambdaQuery()
+                .eq(OrderAuctionBond::getMemberId, memberAuctionSalesroomBondDTO.getMemberId())
+                .eq(memberAuctionSalesroomBondDTO.getBondType()
+                                .equals(AuctionOrderTypeEnum.AUCTION_ITEMS.getCode()),
+                        OrderAuctionBond::getAuctionSalesroomId,
+                        memberAuctionSalesroomBondDTO.getAuctionSalesroomId())
+                .eq(memberAuctionSalesroomBondDTO.getBondType()
+                                .equals(AuctionOrderTypeEnum.REGULAR_ITEMS.getCode()),
+                        OrderAuctionBond::getAuctionGoodsId,
+                        memberAuctionSalesroomBondDTO.getAuctionGoodsId()).oneOpt();
+        if (orderAuctionBondOpt.isPresent()) {
+            OrderAuctionBond orderAuctionBond = orderAuctionBondOpt.get();
+            orderAuctionBond.setPaymentMethod(
+                    PaymentMethodEnum.fromCode(memberAuctionSalesroomBondDTO.getPaymentMethod()));
+            orderAuctionBond.setOrderNo(OrderUtil.getOrderNoForPrefix("BO"));
+            this.updateById(orderAuctionBond);
+            payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
+            if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) {
+                payInfoVO.setType(2);
+            } else {
+                payInfoVO.setType(1);
+            }
+            payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
+            payInfoVO.setSubject("保证金");
+            payInfoVO.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+            payInfoVO.setBody("保证金");
+            return payInfoVO;
+        }
+        if (memberAuctionSalesroomBondDTO.getBondType() == 1) {
+            AuctionGoods data = auctionClient.getauctionGoodsOne(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData();
+            log.info("商品竞价立即报名的商品:{}", data);
+            if (data.getListingStatus().getCode()==1){
+                throw new ServiceException("商品拍卖下线");
+            }
+
+            if (data.getBond() == null || data.getBond().compareTo(BigDecimal.ZERO) == 0) {
+                OrderAuctionBond orderAuctionBond = new OrderAuctionBond();
+                orderAuctionBond.setOrderNo(OrderUtil.getOrderNoForPrefix("BO"));
+                orderAuctionBond.setAuctionGoodsId(memberAuctionSalesroomBondDTO.getAuctionGoodsId());
+                orderAuctionBond.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+                orderAuctionBond.setBond(data.getBond());
+                orderAuctionBond.setBoundStatus(BondStatusEnum.PAID);
+                orderAuctionBond.setBondType(AuctionOrderTypeEnum.REGULAR_ITEMS);
+                orderAuctionBond.setOrderTimeSx(data.getEndTime());
+                this.save(orderAuctionBond);
+                payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
+                payInfoVO.setType(0);
+                payInfoVO.setSubject("保证金");
+                payInfoVO.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+                payInfoVO.setBody("保证金");
+            } else {
+                OrderAuctionBond orderAuctionBond = new OrderAuctionBond();
+                orderAuctionBond.setOrderNo(OrderUtil.getOrderNoForPrefix("BO"));
+                orderAuctionBond.setAuctionGoodsId(memberAuctionSalesroomBondDTO.getAuctionGoodsId());
+                orderAuctionBond.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+                orderAuctionBond.setBond(data.getBond());
+                orderAuctionBond.setOrderTimeSx(data.getEndTime());
+                orderAuctionBond.setBoundStatus(BondStatusEnum.TO_PLAY);
+                orderAuctionBond.setBondType(AuctionOrderTypeEnum.REGULAR_ITEMS);
+                if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) {
+                    orderAuctionBond.setPaymentMethod(PaymentMethodEnum.WECHAT);
+                } else {
+                    orderAuctionBond.setPaymentMethod(PaymentMethodEnum.ALIPAY);
+                }
+                log.info("保存保证金订单:{}", orderAuctionBond);
+                this.save(orderAuctionBond);
+                payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
+                if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) {
+                    payInfoVO.setType(2);
+                } else {
+                    payInfoVO.setType(1);
+                }
+                payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
+                payInfoVO.setSubject("保证金");
+                payInfoVO.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+                payInfoVO.setBody("保证金");
+            }
+        } else {
+            AuctionSalesroom data = auctionClient.getauctionSalesroomOne(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData();
+            log.info("拍卖会报名的拍卖会:{}", data);
+            if (data.getBond() == null || data.getBond().compareTo(BigDecimal.ZERO) == 0) {
+
+                OrderAuctionBond orderAuctionBond = new OrderAuctionBond();
+                orderAuctionBond.setOrderNo(OrderUtil.getOrderNoForPrefix("BO"));
+                orderAuctionBond.setAuctionSalesroomId(memberAuctionSalesroomBondDTO.getAuctionSalesroomId());
+                orderAuctionBond.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+                orderAuctionBond.setBond(data.getBond());
+                orderAuctionBond.setBoundStatus(BondStatusEnum.PAID);
+                orderAuctionBond.setBondType(AuctionOrderTypeEnum.AUCTION_ITEMS);
+                orderAuctionBond.setOrderTimeSx(data.getEndTime());
+                log.info("添加保证金为0的记录:{}", orderAuctionBond);
+                this.save(orderAuctionBond);
+                payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
+                payInfoVO.setType(0);
+                payInfoVO.setSubject("保证金");
+                payInfoVO.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+                payInfoVO.setBody("保证金");
+            } else {
+                OrderAuctionBond orderAuctionBond = new OrderAuctionBond();
+                orderAuctionBond.setOrderNo(OrderUtil.getOrderNoForPrefix("BO"));
+                orderAuctionBond.setAuctionSalesroomId(memberAuctionSalesroomBondDTO.getAuctionSalesroomId());
+                orderAuctionBond.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+                orderAuctionBond.setBond(data.getBond());
+                orderAuctionBond.setOrderTimeSx(data.getEndTime());
+                orderAuctionBond.setBoundStatus(BondStatusEnum.TO_PLAY);
+                orderAuctionBond.setBondType(AuctionOrderTypeEnum.AUCTION_ITEMS);
+                if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) {
+                    orderAuctionBond.setPaymentMethod(PaymentMethodEnum.WECHAT);
+                } else {
+                    orderAuctionBond.setPaymentMethod(PaymentMethodEnum.ALIPAY);
+                }
+                log.info("添加保证金不为0的记录:{}", orderAuctionBond);
+                this.save(orderAuctionBond);
+                payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
+                if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) {
+                    payInfoVO.setType(2);
+                } else {
+                    payInfoVO.setType(1);
+                }
+                payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
+                payInfoVO.setSubject("保证金");
+                payInfoVO.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
+                payInfoVO.setBody("保证金");
+            }
+        }
+        return payInfoVO;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    public void returnBondByAuctionGoodsId(BondReturnDTO bondReturnDTO) {
+        Long id = bondReturnDTO.getId();
+        List<OrderAuctionBond> list = this.lambdaQuery().eq(OrderAuctionBond::getAuctionGoodsId, id)
+                .eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID).list();
+        List<Long> memberIdList = bondReturnDTO.getMemberIdList();
+        List<RefundDTO> refundDTOList = list.stream()
+                .filter(r -> !memberIdList.contains(r.getMemberId())).map(item -> {
+            RefundDTO refundDTO = new RefundDTO();
+            refundDTO.setAmount(item.getBond());
+            refundDTO.setOrderNo(item.getOrderNo());
+            return refundDTO;
+        }).collect(Collectors.toList());
+        Map<String, Object> data = iPaylogService.refund(refundDTOList);
+        // 处理退款返回结果
+        List<String> successfulOrders = new ArrayList<>();
+        List<String> failedOrders = new ArrayList<>();
+
+        data.forEach((key, value) -> {
+            if ((boolean) value) {
+                successfulOrders.add(key);
+            } else {
+                failedOrders.add(key);
+            }
+        });
+        log.info("订单号:{},退款失败", failedOrders);
+        // 退款成功的订单修改状态
+        List<OrderAuctionBond> collect = list.stream().map(bond -> {
+            if (successfulOrders.contains(bond.getOrderNo())) {
+                bond.setBoundStatus(BondStatusEnum.REFUNDED);
+                return bond;
+            }
+            return null;
+        }).filter(Objects::nonNull).collect(Collectors.toList());
+        this.updateBatchById(collect);
+    }
+
 }

--
Gitblit v1.7.1