订单退款时校验已经退款金额

This commit is contained in:
2024-02-22 10:21:35 +08:00
parent 8ff5e15a5d
commit 5c75b981a4
5 changed files with 75 additions and 21 deletions

View File

@@ -13,10 +13,12 @@ import com.jsowell.pile.vo.uniapp.PersonPileConnectorSumInfoVO;
import com.jsowell.pile.vo.uniapp.SendMessageVO;
import com.jsowell.pile.vo.web.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
@Repository
public interface OrderBasicInfoMapper {
/**
* delete by primary key

View File

@@ -387,4 +387,18 @@ public interface OrderBasicInfoService{
List<OrderVO> getOrderInfoByNXJT(NXJTQueryOrdersInfoDTO dto);
List<OrderBasicInfo> queryRepayOrder(String memberId);
/**
* 通过orderCode获取退款明细列表
* @param orderCode
* @return
*/
List<OrderDetailInfoVO.OrderRefundInfo> getOrderRefundInfoList(String orderCode);
/**
* 获取退款明细列表
* @param orderBasicInfo
* @return
*/
List<OrderDetailInfoVO.OrderRefundInfo> getOrderRefundInfoList(OrderBasicInfo orderBasicInfo);
}

View File

@@ -65,6 +65,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
@@ -88,6 +89,9 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
@Autowired
private OrderBasicInfoMapper orderBasicInfoMapper;
@Resource
private MemberWalletLogService memberWalletLogService;
@Autowired
private TransactionService transactionService;
@@ -3598,6 +3602,40 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
return orderBasicInfoMapper.queryRepayOrder(memberId);
}
@Override
public List<OrderDetailInfoVO.OrderRefundInfo> getOrderRefundInfoList(String orderCode) {
OrderBasicInfo orderBasicInfo = getOrderInfoByOrderCode(orderCode);
return getOrderRefundInfoList(orderBasicInfo);
}
@Override
public List<OrderDetailInfoVO.OrderRefundInfo> getOrderRefundInfoList(OrderBasicInfo orderBasicInfo) {
if (orderBasicInfo == null) {
return Lists.newArrayList();
}
List<OrderDetailInfoVO.OrderRefundInfo> orderRefundInfoList = Lists.newArrayList();
OrderDetailInfoVO.OrderRefundInfo refundInfo;
if (OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
// 查新member_wallet_log订单 进账记录
List<MemberWalletLog> walletLogs = memberWalletLogService.getOrderRecord(orderBasicInfo.getOrderCode(), MemberWalletEnum.TYPE_IN.getValue());
if (CollectionUtils.isNotEmpty(walletLogs)) {
for (MemberWalletLog memberWalletLog : walletLogs) {
refundInfo = new OrderDetailInfoVO.OrderRefundInfo();
refundInfo.setReverseAmt(memberWalletLog.getAmount().abs().toString());
refundInfo.setSucceedTime(DateUtils.formatDateTime(memberWalletLog.getCreateTime()));
refundInfo.setCreatedTime(DateUtils.formatDateTime(memberWalletLog.getCreateTime()));
orderRefundInfoList.add(refundInfo);
}
}
} else if (OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue().equals(orderBasicInfo.getPayMode())) {
// 新逻辑
String mode = pileMerchantInfoService.getDelayModeByMerchantId(orderBasicInfo.getMerchantId());
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
orderRefundInfoList = orderLogic.getOrderRefundInfoList(orderBasicInfo);
}
return orderRefundInfoList;
}
@Override
public int deleteByPrimaryKey(Integer id) {
return orderBasicInfoMapper.deleteByPrimaryKey(id);

View File

@@ -416,8 +416,28 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
}
}
/**
* 执行订单退款
* @param orderBasicInfo
*/
@Override
public void refundOrder(OrderBasicInfo orderBasicInfo) {
BigDecimal refundAmount = orderBasicInfo.getRefundAmount();
// 查询该笔订单的退款记录
List<OrderDetailInfoVO.OrderRefundInfo> orderRefundInfoList = orderBasicInfoService.getOrderRefundInfoList(orderBasicInfo);
if (CollectionUtils.isNotEmpty(orderRefundInfoList)) {
// 已退款金额
BigDecimal refunded = BigDecimal.ZERO;
for (OrderDetailInfoVO.OrderRefundInfo orderRefundInfo : orderRefundInfoList) {
BigDecimal reverseAmt = new BigDecimal(orderRefundInfo.getReverseAmt());
refunded = refunded.add(reverseAmt);
}
if (refunded.compareTo(refundAmount) >= 0) {
logger.info("执行订单退款-校验已退款金额orderCode:{}, 应退款金额:{}, 已经退款金额:{}, 不再执行退款", orderBasicInfo.getOrderCode(), refundAmount, refunded);
return;
}
}
try {
String payMode = orderBasicInfo.getPayMode();
if (StringUtils.equals(payMode, OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) {