mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-07-10 17:19:36 +08:00
update 退款时将保险金额与退款金额合并
This commit is contained in:
@@ -77,6 +77,8 @@ public interface OrderBasicInfoService{
|
|||||||
*/
|
*/
|
||||||
List<OrderListVO> selectOrderBasicInfoList(QueryOrderDTO dto);
|
List<OrderListVO> selectOrderBasicInfoList(QueryOrderDTO dto);
|
||||||
|
|
||||||
|
boolean checkRefundInsuranceAmount(OrderBasicInfo orderBasicInfo);
|
||||||
|
|
||||||
void refundInsurance(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)
|
.updateGiftBalance(returnGift)
|
||||||
.relatedOrderCode(orderCode)
|
.relatedOrderCode(orderCode)
|
||||||
.build();
|
.build();
|
||||||
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
|
|
||||||
|
|
||||||
// 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回
|
// 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回
|
||||||
if (orderBasicInfo.getOrderAmount().subtract(orderBasicInfo.getDiscountAmount()).compareTo(BigDecimal.ONE) < 0) {
|
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, 解冻部分
|
// 更新order_pay_record, 解冻部分
|
||||||
// List<Map<String, Object>> list = calculateUnfreezeAmount(orderAmount, payRecordList);
|
// List<Map<String, Object>> list = calculateUnfreezeAmount(orderAmount, payRecordList);
|
||||||
@@ -1150,13 +1162,19 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
|
|||||||
if (StringUtils.isNotBlank(wechatAppId)) {
|
if (StringUtils.isNotBlank(wechatAppId)) {
|
||||||
applyRefundDTO.setWechatAppId(wechatAppId);
|
applyRefundDTO.setWechatAppId(wechatAppId);
|
||||||
}
|
}
|
||||||
this.refundOrderWithAdapay(applyRefundDTO);
|
|
||||||
|
|
||||||
// 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回
|
// 判断消费金额,如果消费金额 - 折扣金额小于 1 元,则将保险费也进行退回
|
||||||
if (orderBasicInfo.getOrderAmount().subtract(orderBasicInfo.getDiscountAmount()).compareTo(BigDecimal.ONE) < 0) {
|
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