update 计算订单会员折扣逻辑

This commit is contained in:
2024-01-11 16:14:35 +08:00
parent 2c50f827b1
commit e71ddfb2c8
8 changed files with 104 additions and 56 deletions

View File

@@ -22,6 +22,7 @@ import com.jsowell.pile.dto.*;
import com.jsowell.pile.service.*;
import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
import com.jsowell.pile.transaction.service.TransactionService;
import com.jsowell.pile.vo.uniapp.MemberVO;
import com.jsowell.pile.vo.uniapp.PileConnectorDetailVO;
import com.jsowell.pile.vo.web.*;
import com.jsowell.wxpay.service.WxAppletRemoteService;
@@ -481,27 +482,6 @@ public abstract class AbstractProgramLogic implements InitializingBean {
return resultMap;
}
public static void main(String[] args) {
// BigDecimal orderAmount= new BigDecimal("0.06");
// List<OrderPayRecord> payRecordList = Lists.newArrayList();
String deductionRecord = "[{\"paymentId\":\"002212023091416010010548305359259512832\",\"amount\":0.97},{\"paymentId\":\"002212023091416110010548307874223849472\",\"amount\":1.00}]";
// payRecordList.add(OrderPayRecord.builder().deductionRecord(deductionRecord).build());
Object object = JSON.parse(deductionRecord);
// 都放入list里
List<PaymentInfo> resultList = Lists.newArrayList();
String s = JSON.toJSONString(object);
if (object instanceof JSONArray) {
List<PaymentInfo> paymentInfos = JSON.parseArray(s, PaymentInfo.class);
resultList.addAll(paymentInfos);
} else {
PaymentInfo paymentInfo = JSON.parseObject(s, PaymentInfo.class);
resultList.add(paymentInfo);
}
System.out.println(JSON.toJSONString(resultList));
}
/**
* 计算解冻金额
* @param orderAmount 订单消费金额
@@ -789,8 +769,34 @@ public abstract class AbstractProgramLogic implements InitializingBean {
BigDecimal discountAmount = discountServiceAmount.add(discountElectricityAmount);
orderBasicInfo.setDiscountAmount(discountAmount);
// 更新退款金额 = 退款金额 - 折扣金额
orderBasicInfo.setRefundAmount(orderBasicInfo.getRefundAmount().subtract(discountAmount));
BigDecimal refundAmount = orderBasicInfo.getRefundAmount().subtract(discountAmount);
orderBasicInfo.setRefundAmount(refundAmount);
orderDetail.setDiscountElectricityAmount(discountElectricityAmount);
orderDetail.setDiscountServiceAmount(discountServiceAmount);
logger.info("计算订单折扣, orderCode:{}, memberId:{}, discountAmount:{}, discountElectricityAmount:{}, discountServiceAmount:{}",
orderBasicInfo.getOrderCode(), memberId, discountAmount, discountElectricityAmount, discountServiceAmount);
}
/**
* 计算余额支付下发金额
*/
protected Map<String, BigDecimal> calculateTheAmount(MemberVO memberVO) {
BigDecimal principalBalancePay;
BigDecimal giftBalancePay;
BigDecimal totalAccountAmount = memberVO.getTotalAccountAmount();
// 余额支付最大下发200
BigDecimal defaultAmount = Constants.balancePayMaxAmount;
if (totalAccountAmount.compareTo(defaultAmount) < 0) {
principalBalancePay = memberVO.getPrincipalBalance();
giftBalancePay = memberVO.getGiftBalance();
} else {
principalBalancePay = defaultAmount.min(memberVO.getPrincipalBalance());
giftBalancePay = defaultAmount.subtract(principalBalancePay);
}
Map<String, BigDecimal> resultMap = Maps.newHashMap();
resultMap.put("principalBalancePay", principalBalancePay);
resultMap.put("giftBalancePay", giftBalancePay);
return resultMap;
}
}

View File

@@ -103,7 +103,7 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
resultMap.put("weixinMap", weixinMap);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付
// 白名单支付可以直接调支付回调方法
dto.setPayAmount(new BigDecimal("500"));
dto.setPayAmount(Constants.whitelistDefaultAmount);
whitelistPaymentOrder(dto);
}
return resultMap;
@@ -232,7 +232,17 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
// 总余额小于充电金额
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT);
}
BigDecimal principalPay = chargeAmount;
// 本金支付金额
BigDecimal principalBalancePay = BigDecimal.ZERO;
// 赠送金支付金额
BigDecimal giftBalancePay = BigDecimal.ZERO;
// 计算下发金额
Map<String, BigDecimal> stringBigDecimalMap = calculateTheAmount(memberVO);
if (stringBigDecimalMap != null) {
principalBalancePay = stringBigDecimalMap.get("principalBalancePay");
giftBalancePay = stringBigDecimalMap.get("giftBalancePay");
}
// 更新会员钱包 全部金额都用于支付订单
UpdateMemberBalanceDTO updateMemberBalanceDTO = UpdateMemberBalanceDTO.builder()
@@ -240,33 +250,39 @@ public class DelayMerchantProgramLogic extends AbstractProgramLogic {
.targetMerchantId(merchantId)
.type(MemberWalletEnum.TYPE_OUT.getValue())
.subType(MemberWalletEnum.SUBTYPE_PAYMENT_FOR_ORDER.getValue())
.updatePrincipalBalance(memberVO.getPrincipalBalance()) // 使用本金支付的金额
.updateGiftBalance(memberVO.getGiftBalance()) // 赠送金额支付
.updatePrincipalBalance(principalBalancePay) // 使用本金支付的金额
.updateGiftBalance(giftBalancePay) // 赠送金额支付
.relatedOrderCode(orderCode)
.build();
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
// 本金支付
OrderPayRecord principalPayRecord = OrderPayRecord.builder()
.orderCode(orderCode)
.payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue())
.payAmount(memberVO.getPrincipalBalance())
.acquirer(AcquirerEnum.LOCAL.getValue())
.createBy(memberId)
.createTime(DateUtils.getNowDate())
.delFlag(DelFlagEnum.NORMAL.getValue())
.build();
OrderPayRecord principalPayRecord = null;
if (principalBalancePay.compareTo(BigDecimal.ZERO) > 0) {
principalPayRecord = OrderPayRecord.builder()
.orderCode(orderCode)
.payMode(OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue())
.payAmount(principalBalancePay)
.acquirer(AcquirerEnum.LOCAL.getValue())
.createBy(memberId)
.createTime(DateUtils.getNowDate())
.delFlag(DelFlagEnum.NORMAL.getValue())
.build();
}
// 赠送金支付
OrderPayRecord giftPayRecord = OrderPayRecord.builder()
.orderCode(orderCode)
.payMode(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue())
.payAmount(memberVO.getGiftBalance())
.acquirer(AcquirerEnum.LOCAL.getValue())
.createBy(memberId)
.createTime(DateUtils.getNowDate())
.delFlag(DelFlagEnum.NORMAL.getValue())
.build();
OrderPayRecord giftPayRecord = null;
if (giftBalancePay.compareTo(BigDecimal.ZERO) > 0) {
giftPayRecord = OrderPayRecord.builder()
.orderCode(orderCode)
.payMode(OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue())
.payAmount(giftBalancePay)
.acquirer(AcquirerEnum.LOCAL.getValue())
.createBy(memberId)
.createTime(DateUtils.getNowDate())
.delFlag(DelFlagEnum.NORMAL.getValue())
.build();
}
// 记录支订单付流水 记录两条支付
List<OrderPayRecord> payRecordList = Lists.newArrayList(principalPayRecord, giftPayRecord);

View File

@@ -216,7 +216,7 @@ public class NotDelayMerchantProgramLogic extends AbstractProgramLogic {
resultMap.put("weixinMap", weixinMap);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付
// 白名单支付可以直接调支付回调方法
dto.setPayAmount(new BigDecimal("500"));
dto.setPayAmount(Constants.whitelistDefaultAmount);
whitelistPaymentOrder(dto);
}
return resultMap;