mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 19:15:35 +08:00
update 计算订单会员折扣逻辑
This commit is contained in:
@@ -499,9 +499,13 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
// settleOrder(data, orderInfo);
|
||||
|
||||
// 新逻辑
|
||||
String mode = pileMerchantInfoService.getDelayModeByMerchantId(orderInfo.getMerchantId());
|
||||
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
|
||||
orderLogic.settleOrder(data, orderInfo);
|
||||
try {
|
||||
String mode = pileMerchantInfoService.getDelayModeByMerchantId(orderInfo.getMerchantId());
|
||||
AbstractProgramLogic orderLogic = ProgramLogicFactory.getProgramLogic(mode);
|
||||
orderLogic.settleOrder(data, orderInfo);
|
||||
} catch (Exception e) {
|
||||
logger.error("充电桩启动失败,执行退款逻辑发生异常", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2369,12 +2373,12 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
|
||||
if (platformTesterVO != null && StringUtils.equals(Constants.ONE, platformTesterVO.getStatus())) {
|
||||
// 是平台测试员
|
||||
accountBalance = new BigDecimal("500");
|
||||
accountBalance = Constants.whitelistDefaultAmount;
|
||||
payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue();
|
||||
|
||||
} else if (pileStationWhitelist != null) {
|
||||
// 站点白名单
|
||||
accountBalance = new BigDecimal("500");
|
||||
accountBalance = Constants.whitelistDefaultAmount;
|
||||
payMode = OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue();
|
||||
} else {
|
||||
// 通过memberId获取账户余额
|
||||
@@ -2384,9 +2388,13 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
}
|
||||
accountBalance = memberVO.getTotalAccountAmount();
|
||||
if (accountBalance.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
logger.info("充电桩主动申请启动充电生成订单 余额不足", JSON.toJSONString(dto));
|
||||
logger.info("充电桩主动申请启动充电生成订单 余额不足, memberId:{}, MemberVO:{}", dto.getMemberId(), JSON.toJSONString(memberVO));
|
||||
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT);
|
||||
}
|
||||
BigDecimal defaultAmount = Constants.balancePayMaxAmount;
|
||||
if (accountBalance.compareTo(defaultAmount) > 0) {
|
||||
accountBalance = defaultAmount;
|
||||
}
|
||||
payMode = OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue();
|
||||
// accountBalance = memberVO.getTotalAccountAmount();
|
||||
// dto.setChargeAmount(totalAccountAmount); // 充电金额
|
||||
@@ -2961,7 +2969,7 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
resultMap.put("weixinMap", weixinMap);
|
||||
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付
|
||||
// 白名单支付可以直接调支付回调方法
|
||||
dto.setPayAmount(new BigDecimal("500"));
|
||||
dto.setPayAmount(Constants.whitelistDefaultAmount);
|
||||
whiteListPayOrder(dto);
|
||||
}
|
||||
return resultMap;
|
||||
|
||||
@@ -19,6 +19,8 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class OrderPayRecordServiceImpl implements OrderPayRecordService {
|
||||
@@ -50,6 +52,10 @@ public class OrderPayRecordServiceImpl implements OrderPayRecordService {
|
||||
|
||||
@Override
|
||||
public int batchInsert(List<OrderPayRecord> payRecordList) {
|
||||
if (CollectionUtils.isEmpty(payRecordList)) {
|
||||
return 0;
|
||||
}
|
||||
payRecordList = payRecordList.stream().filter(Objects::nonNull).collect(Collectors.toList());
|
||||
return orderPayRecordMapper.batchInsert(payRecordList);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user