mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 02:55:04 +08:00
update 退款时将保险金额与退款金额合并
This commit is contained in:
@@ -77,6 +77,8 @@ public interface OrderBasicInfoService{
|
||||
*/
|
||||
List<OrderListVO> selectOrderBasicInfoList(QueryOrderDTO dto);
|
||||
|
||||
boolean checkRefundInsuranceAmount(OrderBasicInfo orderBasicInfo);
|
||||
|
||||
void refundInsurance(OrderBasicInfo orderBasicInfo);
|
||||
|
||||
/**
|
||||
|
||||
@@ -798,6 +798,43 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断是否退款保险金额
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean checkRefundInsuranceAmount(OrderBasicInfo orderBasicInfo) {
|
||||
if (Objects.isNull(orderBasicInfo)) {
|
||||
return false;
|
||||
}
|
||||
// 判断该订单是否支付保险
|
||||
BigDecimal insuranceAmount = orderBasicInfo.getInsuranceAmount();
|
||||
// 判断保险费是否大于0
|
||||
if (insuranceAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 判断是否已经退过保险费
|
||||
AdapayRefundRecord entry = new AdapayRefundRecord();
|
||||
entry.setOrderCode(orderBasicInfo.getOrderCode());
|
||||
List<AdapayRefundRecord> adapayRefundRecords = adapayRefundRecordService.selectAdapayRefundRecordList(entry);
|
||||
if (CollectionUtils.isNotEmpty(adapayRefundRecords)) {
|
||||
for (AdapayRefundRecord adapayRefundRecord : adapayRefundRecords) {
|
||||
String reason = adapayRefundRecord.getReason();
|
||||
// reason转为json
|
||||
JSONObject jsonObject = JSONObject.parseObject(reason);
|
||||
// 取scenarioType
|
||||
String scenarioType = jsonObject.getString("scenarioType");
|
||||
if (StringUtils.equals(scenarioType, ScenarioEnum.INSURANCE.getValue())) {
|
||||
// 退过保险
|
||||
logger.info("订单号:{}已经退过保险,请勿重复退保险", orderBasicInfo.getOrderCode());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退保险费,需要退保险调此方法,此方法会调用退款接口
|
||||
*/
|
||||
|
||||
@@ -1098,12 +1098,24 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
.updateGiftBalance(returnGift)
|
||||
.relatedOrderCode(orderCode)
|
||||
.build();
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
|
||||
// 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回
|
||||
if (orderBasicInfo.getOrderAmount().subtract(orderBasicInfo.getDiscountAmount()).compareTo(BigDecimal.ONE) < 0) {
|
||||
orderBasicInfoService.refundInsurance(orderBasicInfo);
|
||||
// orderBasicInfoService.refundInsurance(orderBasicInfo);
|
||||
// 判断是否需要退保险费用
|
||||
boolean checkResult = orderBasicInfoService.checkRefundInsuranceAmount(orderBasicInfo);
|
||||
if (checkResult) {
|
||||
// 退保险, 计算退保金额
|
||||
Map<String, BigDecimal> refundMap = calculateBalanceRefund(principalPay, giftPay, orderBasicInfo.getOrderAmount(), orderBasicInfo.getDiscountAmount(), insuranceAmount);
|
||||
BigDecimal returnPrincipalForInsurance = refundMap.get("returnPrincipalForInsurance");
|
||||
BigDecimal returnGiftForInsurance = refundMap.get("returnGiftForInsurance");
|
||||
|
||||
updateMemberBalanceDTO.setUpdatePrincipalBalance(returnPrincipal.add(returnPrincipalForInsurance));
|
||||
updateMemberBalanceDTO.setUpdateGiftBalance(returnGift.add(returnGiftForInsurance));
|
||||
}
|
||||
}
|
||||
// 统一退款
|
||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
||||
|
||||
// 更新order_pay_record, 解冻部分
|
||||
// List<Map<String, Object>> list = calculateUnfreezeAmount(orderAmount, payRecordList);
|
||||
@@ -1150,13 +1162,19 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
||||
if (StringUtils.isNotBlank(wechatAppId)) {
|
||||
applyRefundDTO.setWechatAppId(wechatAppId);
|
||||
}
|
||||
this.refundOrderWithAdapay(applyRefundDTO);
|
||||
|
||||
// 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回
|
||||
if (orderBasicInfo.getOrderAmount().subtract(orderBasicInfo.getDiscountAmount()).compareTo(BigDecimal.ONE) < 0) {
|
||||
orderBasicInfoService.refundInsurance(orderBasicInfo);
|
||||
// orderBasicInfoService.refundInsurance(orderBasicInfo);
|
||||
// 判断是否需要退款保险金额
|
||||
boolean checkResult = orderBasicInfoService.checkRefundInsuranceAmount(orderBasicInfo);
|
||||
if (checkResult) {
|
||||
// 退款保险,将保险金额进行合并
|
||||
applyRefundDTO.setRefundAmount(refundAmount.add(orderBasicInfo.getInsuranceAmount()));
|
||||
}
|
||||
}
|
||||
|
||||
this.refundOrderWithAdapay(applyRefundDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user