package com.ruoyi.order.service.impl;
|
|
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.utils.StringUtils;
|
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.MemberAuctionSalesroomBondDTO;
|
import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
|
import com.ruoyi.system.api.domain.vo.PayInfoVO;
|
import com.ruoyi.system.api.feignClient.AuctionClient;
|
import java.util.List;
|
import javax.annotation.Resource;
|
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>
|
* 拍卖保证金表 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2024-05-16
|
*/
|
@Service
|
public class OrderAuctionBondServiceImpl extends ServiceImpl<OrderAuctionBondMapper, OrderAuctionBond> implements IOrderAuctionBondService {
|
|
@Resource
|
private IPaylogService iPaylogService;
|
|
@Resource
|
private PaylogServiceImpl paylogServiceImpl;
|
|
|
@Resource
|
private AuctionClient auctionClient;
|
|
|
@Override
|
public R<T> getOrderAuctionBond(OrderAuctionBondDTO orderAuctionBondDTO) {
|
|
LambdaQueryWrapper<OrderAuctionBond> wrapper = Wrappers.lambdaQuery();
|
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("支付宝退款失败!");
|
}
|
} 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("微信退款失败!");
|
}
|
}
|
|
}
|
return R.ok();
|
}
|
|
/**
|
* 查询保证金订单列表
|
*
|
* @param id 拍卖商品id
|
* @param auctionOrderTypeEnum 拍卖类型: 普通拍品 拍卖会拍品
|
* @param bondStatusEnum 保证金状态 待支付 已支付 已退款 为null则查询所有
|
* @return List<OrderAuctionBond>
|
*/
|
@Override
|
public List<OrderAuctionBond> getOrderAuctionBondList(Long id,
|
AuctionOrderTypeEnum auctionOrderTypeEnum, BondStatusEnum bondStatusEnum) {
|
return this.lambdaQuery().eq(OrderAuctionBond::getAuctionGoodsId, id)
|
.eq(OrderAuctionBond::getBondType, auctionOrderTypeEnum).eq(
|
StringUtils.isNotNull(bondStatusEnum), OrderAuctionBond::getBoundStatus,
|
bondStatusEnum).list();
|
}
|
|
/**
|
* 批量更新保证金订单状态
|
*
|
* @param ids 保证金订单id列表
|
* @param bondStatusEnum 保证金状态
|
*/
|
@Override
|
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
public void updateOrderAuctionBondStatus(List<Long> ids, BondStatusEnum bondStatusEnum) {
|
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();
|
if (memberAuctionSalesroomBondDTO.getBondType() == 1) {
|
AuctionGoods data = auctionClient.getauctionGoodsOne(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData();
|
if (data.getBond().intValue() == 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.AUCTION_ITEMS);
|
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.setBoundStatus(BondStatusEnum.TO_PLAY);
|
orderAuctionBond.setBondType(AuctionOrderTypeEnum.AUCTION_ITEMS);
|
if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) {
|
orderAuctionBond.setPaymentMethod(PaymentMethodEnum.WECHAT);
|
} else {
|
orderAuctionBond.setPaymentMethod(PaymentMethodEnum.ALIPAY);
|
}
|
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();
|
|
if (data.getBond().intValue() == 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);
|
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.setBoundStatus(BondStatusEnum.TO_PLAY);
|
orderAuctionBond.setBondType(AuctionOrderTypeEnum.AUCTION_ITEMS);
|
if (memberAuctionSalesroomBondDTO.getPaymentMethod() == 1) {
|
orderAuctionBond.setPaymentMethod(PaymentMethodEnum.WECHAT);
|
} else {
|
orderAuctionBond.setPaymentMethod(PaymentMethodEnum.ALIPAY);
|
}
|
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;
|
}
|
}
|