mitao
2024-08-14 8dceb015ec8bd9642297d757e73936af84f4aaf1
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
@@ -19,18 +19,16 @@
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.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@@ -64,34 +62,46 @@
    @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 = 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();
    }
@@ -134,9 +144,6 @@
        if (memberAuctionSalesroomBondDTO.getBondType() == 1) {
            AuctionGoods data = auctionClient.getauctionGoodsOne(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData();
            if (data.getEndTime().isAfter(LocalDateTime.now())){
                throw new ServiceException("商品拍卖已结束");
            }
            if (data.getListingStatus().getCode()==1){
                throw new ServiceException("商品拍卖下线");
            }
@@ -148,7 +155,7 @@
                orderAuctionBond.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
                orderAuctionBond.setBond(data.getBond());
                orderAuctionBond.setBoundStatus(BondStatusEnum.PAID);
                orderAuctionBond.setBondType(AuctionOrderTypeEnum.AUCTION_ITEMS);
                orderAuctionBond.setBondType(AuctionOrderTypeEnum.REGULAR_ITEMS);
                this.save(orderAuctionBond);
                payInfoVO.setOrderNO(orderAuctionBond.getOrderNo());
                payInfoVO.setType(0);
@@ -161,8 +168,9 @@
                orderAuctionBond.setAuctionGoodsId(memberAuctionSalesroomBondDTO.getAuctionGoodsId());
                orderAuctionBond.setMemberId(memberAuctionSalesroomBondDTO.getMemberId());
                orderAuctionBond.setBond(data.getBond());
                orderAuctionBond.setOrderTimeSx(data.getEndTime());
                orderAuctionBond.setBoundStatus(BondStatusEnum.TO_PLAY);
                orderAuctionBond.setBondType(AuctionOrderTypeEnum.AUCTION_ITEMS);
                orderAuctionBond.setBondType(AuctionOrderTypeEnum.REGULAR_ITEMS);
                if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) {
                    orderAuctionBond.setPaymentMethod(PaymentMethodEnum.WECHAT);
                } else {
@@ -182,8 +190,7 @@
            }
        } else {
            AuctionSalesroom data = auctionClient.getauctionSalesroomOne(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData();
            if (data.getBond().intValue() == 0) {
            if (data.getBond()==null||data.getBond().intValue() == 0) {
                OrderAuctionBond orderAuctionBond = new OrderAuctionBond();
                orderAuctionBond.setOrderNo(OrderUtil.getOrderNoForPrefix("BO"));
                orderAuctionBond.setAuctionSalesroomId(memberAuctionSalesroomBondDTO.getAuctionSalesroomId());
@@ -228,12 +235,13 @@
    @Override
    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
    public void returnBondByAuctionGoodsId(Long id) {
    public void returnBondByAuctionGoodsId(BondReturnDTO bondReturnDTO) {
        Long id = bondReturnDTO.getId();
        List<OrderAuctionBond> list = this.lambdaQuery().eq(OrderAuctionBond::getAuctionGoodsId, id)
                .eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID).list();
        Set<String> orderNoSet = list.stream().map(OrderAuctionBond::getOrderNo)
                .collect(Collectors.toSet());
        List<RefundDTO> refundDTOList = list.stream().map(item -> {
        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());