# Conflicts:
#	jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderPileOccupyServiceImpl.java
This commit is contained in:
Lemon
2023-08-18 11:42:26 +08:00
13 changed files with 235 additions and 81 deletions

View File

@@ -2,10 +2,13 @@ package com.jsowell.adapay.service;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.huifu.adapay.model.*;
import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.adapay.common.DivMember;
import com.jsowell.adapay.config.AbstractAdapayConfig;
import com.jsowell.adapay.dto.SettleAccountDTO;
@@ -17,10 +20,13 @@ import com.jsowell.adapay.vo.AdapayAccountBalanceVO;
import com.jsowell.adapay.vo.AdapayCorpMemberVO;
import com.jsowell.adapay.vo.AdapayMemberInfoVO;
import com.jsowell.adapay.vo.AdapaySettleAccountVO;
import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.enums.adapay.AdapayStatusEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.enums.ykc.ScenarioEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.AdapayUtil;
import com.jsowell.common.util.StringUtils;
@@ -29,14 +35,17 @@ import com.jsowell.common.util.id.IdUtils;
import com.jsowell.pile.domain.AdapayMemberAccount;
import com.jsowell.pile.domain.ClearingBillInfo;
import com.jsowell.pile.domain.ClearingWithdrawInfo;
import com.jsowell.pile.dto.PayOrderDTO;
import com.jsowell.pile.service.ClearingBillInfoService;
import com.jsowell.pile.service.ClearingWithdrawInfoService;
import com.jsowell.pile.service.IAdapayMemberAccountService;
import com.jsowell.pile.service.IPileMerchantInfoService;
import com.jsowell.wxpay.service.WxAppletRemoteService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@@ -46,11 +55,15 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Slf4j
@Service
public class AdapayMemberService {
public class AdapayService {
@Autowired
private RedisCache redisCache;
@Value("${adapay.jsowell.appId}")
private String ADAPAY_APP_ID;
@@ -70,6 +83,75 @@ public class AdapayMemberService {
@Autowired
private IPileMerchantInfoService pileMerchantInfoService;
@Autowired
private WxAppletRemoteService wxAppletRemoteService;
/**
* 获取支付参数
*/
public Map<String, Object> createPayment(PayOrderDTO dto) {
log.info("===============使用汇付支付-获取支付参数");
// 相同参数重复请求返回同一个支付对象
String redisKey = CacheConstants.ADAPAY_ORDER_PARAM + dto.getOrderCode();
Map<String, Object> cacheObject = redisCache.getCacheObject(redisKey);
if (cacheObject != null) {
// 表示已经获取到支付参数了后续再有支付请求就拒绝
return cacheObject;
}
// 获取支付配置
AbstractAdapayConfig config = AdapayConfigFactory.getConfig(dto.getWechatAppId());
if (config == null) {
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR);
}
// 获取openId
String openId = wxAppletRemoteService.getOpenIdByCode(dto.getCode());
if (StringUtils.isBlank(openId)) {
throw new BusinessException(ReturnCodeEnum.CODE_GET_OPEN_ID_BY_CODE_ERROR);
}
// 封装对象
String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额
String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
createAdaPaymentParam.setOrder_no(dto.getOrderCode());
createAdaPaymentParam.setPay_amt(amount);
createAdaPaymentParam.setApp_id(config.getAdapayAppId());
createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道这里需要做修改判断是什么渠道的请求
createAdaPaymentParam.setGoods_title(dto.getGoodsTitle());
createAdaPaymentParam.setGoods_desc(dto.getGoodsDesc()); // 这个字段是微信支付凭证的商品名
Map<String, String> map = Maps.newHashMap();
map.put("type", ScenarioEnum.ORDER.getValue());
map.put("orderCode", dto.getOrderCode());
map.put("payMode", payMode);
map.put("memberId", dto.getMemberId());
createAdaPaymentParam.setDescription(JSON.toJSONString(map));
// 异步通知地址url为http/https路径服务器POST回调URL 上请勿附带参数
createAdaPaymentParam.setNotify_url(ADAPAY_CALLBACK_URL);
createAdaPaymentParam.setExpend(JSONObject.toJSONString(ImmutableMap.of("open_id", openId)));
// 延时分账
createAdaPaymentParam.setPay_mode(payMode);
try {
log.info("创建汇付支付参数:{}", JSONObject.toJSONString(createAdaPaymentParam));
Map<String, Object> response = Payment.create(BeanMap.create(createAdaPaymentParam), config.getWechatAppId());
if (response != null && !response.isEmpty()) {
JSONObject expend = JSONObject.parseObject(response.get("expend").toString());
JSONObject pay_info = expend.getJSONObject("pay_info");
Map<String, Object> resultMap = JSONObject.parseObject(pay_info.toJSONString(), new TypeReference<Map<String, Object>>() {});
if (resultMap != null) {
// 请求参数放入缓存15分钟以内返回同一个支付参数
redisCache.setCacheObject(redisKey, resultMap, 15, TimeUnit.MINUTES);
}
return resultMap;
}
} catch (BaseAdaPayException e) {
log.error("汇付-获取支付对象发生异常", e);
}
return null;
}
/**
* 创建结算账户
*

View File

@@ -1,9 +1,6 @@
package com.jsowell.pile.dto;
import com.jsowell.pile.domain.OrderBasicInfo;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal;
@@ -49,21 +46,21 @@ public class PayOrderDTO {
*/
private String lockValue;
private OrderBasicInfo orderBasicInfo;
// private OrderBasicInfo orderBasicInfo;
/**
* 微信小程序appId
*/
private String wechatAppId;
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.JSON_STYLE)
.append("memberId", memberId)
.append("orderCode", orderCode)
.append("payMode", payMode)
.append("payAmount", payAmount)
.append("code", code)
.toString();
}
/**
* 商品标题
*/
private String goodsTitle;
/**
* 商品描述信息微信小程序和微信公众号该字段最大长度42个字符
* 这个字段是微信支付凭证的商品名
*/
private String goodsDesc;
}

View File

@@ -1,11 +1,14 @@
package com.jsowell.pile.service;
import com.jsowell.pile.domain.OrderPileOccupy;
import com.jsowell.pile.dto.PayOrderDTO;
import com.jsowell.pile.dto.GenerateOccupyOrderDTO;
import com.jsowell.pile.dto.QueryOccupyOrderDTO;
import com.jsowell.pile.vo.uniapp.OrderPileOccupyVO;
import java.util.List;
import java.util.Map;
public interface OrderPileOccupyService{
int deleteByPrimaryKey(Integer id);
@@ -52,6 +55,8 @@ public interface OrderPileOccupyService{
*/
List<OrderPileOccupy> queryUnPayOrderByMemberId(String memberId);
Map<String, Object> payOccupyPileOrder(PayOrderDTO dto);
/**
* 查询占桩订单列表
* @param memberId

View File

@@ -2,23 +2,17 @@ package com.jsowell.pile.service.impl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.huifu.adapay.model.Payment;
import com.huifu.adapay.model.PaymentConfirm;
import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.adapay.common.DivMember;
import com.jsowell.adapay.config.AbstractAdapayConfig;
import com.jsowell.adapay.factory.AdapayConfigFactory;
import com.jsowell.adapay.response.PaymentConfirmResponse;
import com.jsowell.adapay.response.PaymentReverseResponse;
import com.jsowell.adapay.service.AdapayMemberService;
import com.jsowell.adapay.service.AdapayService;
import com.jsowell.adapay.vo.OrderSettleResult;
import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants;
@@ -58,7 +52,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -168,7 +161,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
private IPileStationWhitelistService pileStationWhitelistService;
@Autowired
private AdapayMemberService adapayMemberService;
private AdapayService adapayService;
@Autowired
private MemberAdapayRecordService memberAdapayRecordService;
@@ -1166,7 +1159,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
String paymentId = vo.getPaymentId();
BigDecimal deductionAmount = vo.getDeductionAmount();
// 调汇付的分账接口 确认交易
PaymentConfirmResponse paymentConfirmResponse = adapayMemberService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode);
PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId, adapayMemberAccount, deductionAmount, orderCode);
if (paymentConfirmResponse != null) {
confirmAmt = confirmAmt.add(new BigDecimal(paymentConfirmResponse.getConfirmed_amt()));
feeAmt = feeAmt.add(new BigDecimal(paymentConfirmResponse.getFee_amt()));
@@ -2145,7 +2138,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
payOrderDTO.setStartMode(dto.getStartMode());
// payOrderDTO.setCode();
// payOrderDTO.setLockValue();
payOrderDTO.setOrderBasicInfo(basicInfo);
// payOrderDTO.setOrderBasicInfo(basicInfo);
payOrder(payOrderDTO);
@@ -2358,10 +2351,10 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
String payMode = "delay";
if (StringUtils.equals("", payMode)) {
// 延迟分账确认的调退款接口
adapayMemberService.createRefundRequest(paymentId, refundAmount);
adapayService.createRefundRequest(paymentId, refundAmount);
} else {
// 延迟分账未确认调撤销调撤销接口退款
PaymentReverseResponse response = adapayMemberService.createPaymentReverseRequest(
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
paymentId, refundAmount, dto.getWechatAppId(), dto.getMemberId(), ScenarioEnum.ORDER.getValue(),
dto.getOrderCode());
if (response != null) {
@@ -2405,7 +2398,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
BigDecimal deductionAmount = vo.getDeductionAmount();
// 调汇付的交易撤销接口
adapayMemberService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
adapayService.createPaymentReverseRequest(paymentId, deductionAmount, dto.getWechatAppId(),
dto.getMemberId(), ScenarioEnum.BALANCE.getValue(), null);
// 更新这笔交易的剩余金额
@@ -2623,7 +2616,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
public Map<String, Object> payOrder(PayOrderDTO dto) {
OrderBasicInfo orderInfo = this.getOrderInfoByOrderCode(dto.getOrderCode());
if (orderInfo == null) {
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_NULL_ERROR);
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
}
if (!StringUtils.equals(orderInfo.getPayStatus(), OrderPayStatusEnum.unpaid.getValue())) {
// 订单已支付
@@ -2635,10 +2628,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
balancePayOrder(dto);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) {
// 微信支付
dto.setOrderBasicInfo(orderInfo);
// dto.setOrderBasicInfo(orderInfo);
// 2023-07-11 全部改为汇付支付
Map<String, Object> weixinMap = adapayPayOrder(dto);
dto.setGoodsTitle("充电费用");
dto.setGoodsDesc("充电桩预付款金额");
Map<String, Object> weixinMap = adapayService.createPayment(dto);
// 返回微信支付参数
resultMap.put("weixinMap", weixinMap);
@@ -2751,7 +2746,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
// 通过支付id查询退款记录
String paymentId = adapayCallbackRecord.getPaymentId();
try {
resultList = adapayMemberService.queryPaymentReverse(paymentId, wechatAppId);
resultList = adapayService.queryPaymentReverse(paymentId, wechatAppId);
} catch (BaseAdaPayException e) {
logger.error("查询支付撤销对象发生异常", e);
}
@@ -2798,7 +2793,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
List<PaymentReverseResponse> paymentReverses = queryOrderAdapayRefund(orderBasicInfo);
if (CollectionUtils.isEmpty(paymentReverses)) {
// 如果没有退款过,重新执行一遍退款
PaymentReverseResponse response = adapayMemberService.createPaymentReverseRequest(
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(
paymentId, refundAmount, wechatAppId, memberId, ScenarioEnum.ORDER.getValue(),
orderCode);
logger.info("重试订单退款response:{}", JSON.toJSONString(response));
@@ -2822,7 +2817,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
* @param dto
* @return
*/
private Map<String, Object> adapayPayOrder(PayOrderDTO dto) {
/*private Map<String, Object> adapayPayOrder(PayOrderDTO dto) {
logger.info("===============使用汇付支付");
// 相同参数重复请求,返回同一个支付对象
String redisKey = CacheConstants.ADAPAY_ORDER_PARAM + dto.getOrderCode();
@@ -2837,11 +2832,12 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
throw new BusinessException(ReturnCodeEnum.CODE_ADAPAY_CONFIG_IS_NULL_ERROR);
}
OrderBasicInfo orderInfo = dto.getOrderBasicInfo();
if (orderInfo == null) {
// 订单为空重新查询
orderInfo = this.getOrderInfoByOrderCode(dto.getOrderCode());
}
// OrderBasicInfo orderInfo = dto.getOrderBasicInfo();
// if (orderInfo == null) {
// // 订单为空重新查询
// orderInfo = this.getOrderInfoByOrderCode(dto.getOrderCode());
// }
// 获取openId
String openId = wxAppletRemoteService.getOpenIdByCode(dto.getCode());
if (StringUtils.isBlank(openId)) {
@@ -2852,7 +2848,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
String amount = AdapayUtil.formatAmount(dto.getPayAmount()); // 用户支付金额
String payMode = Constants.ADAPAY_PAY_MODE_DELAY; // 汇付延时分账
CreateAdaPaymentParam createAdaPaymentParam = new CreateAdaPaymentParam();
createAdaPaymentParam.setOrder_no(orderInfo.getOrderCode());
createAdaPaymentParam.setOrder_no(dto.getOrderCode());
createAdaPaymentParam.setPay_amt(amount);
createAdaPaymentParam.setApp_id(config.getAdapayAppId());
createAdaPaymentParam.setPay_channel("wx_lite"); // todo 如果以后有支付宝等别的渠道,这里需要做修改,判断是什么渠道的请求
@@ -2890,7 +2886,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
logger.error("汇付-获取支付对象发生异常", e);
}
return null;
}
}*/
/**
* 余额支付订单逻辑
@@ -2911,7 +2907,7 @@ public class OrderBasicInfoServiceImpl implements IOrderBasicInfoService {
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT);
}
BigDecimal principalAmount = memberVO.getPrincipalBalance(); // 会员剩余本金金额
// BigDecimal giftAmount = memberVO.getGiftBalance(); // 会员剩余赠送余额
BigDecimal giftAmount = memberVO.getGiftBalance(); // 会员剩余赠送余额
BigDecimal principalPay = null; // 30
BigDecimal giftPay = null; // 10

View File

@@ -1,7 +1,13 @@
package com.jsowell.pile.service.impl;
import com.google.common.collect.Maps;
import com.jsowell.adapay.service.AdapayService;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.enums.MemberWalletEnum;
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.enums.uniapp.OrderPileOccupyPayStatusEnum;
import com.jsowell.common.enums.uniapp.OrderPileOccupyStatusEnum;
import com.jsowell.common.util.DateUtils;
@@ -9,18 +15,18 @@ import com.jsowell.common.util.PageUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.common.util.id.IdUtils;
import com.jsowell.pile.domain.OrderPileOccupy;
import com.jsowell.pile.dto.PayOrderDTO;
import com.jsowell.pile.dto.GenerateOccupyOrderDTO;
import com.jsowell.pile.dto.QueryOccupyOrderDTO;
import com.jsowell.pile.dto.QueryOrderDTO;
import com.jsowell.pile.mapper.OrderPileOccupyMapper;
import com.jsowell.pile.service.IOrderBasicInfoService;
import com.jsowell.pile.service.IPileBasicInfoService;
import com.jsowell.pile.service.IPileBillingTemplateService;
import com.jsowell.pile.service.OrderPileOccupyService;
import com.jsowell.pile.service.*;
import com.jsowell.pile.vo.base.PileInfoVO;
import com.jsowell.pile.vo.uniapp.MemberVO;
import com.jsowell.pile.vo.uniapp.OrderPileOccupyVO;
import com.jsowell.pile.vo.web.BillingTemplateVO;
import com.jsowell.pile.vo.web.OrderListVO;
import com.jsowell.pile.vo.web.UpdateMemberBalanceDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -28,10 +34,11 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
public class OrderPileOccupyServiceImpl implements OrderPileOccupyService {
@Resource
private OrderPileOccupyMapper orderPileOccupyMapper;
@@ -45,6 +52,12 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
@Resource
private IPileBillingTemplateService pileBillingTemplateService;
@Resource
private AdapayService adapayService;
@Resource
private IMemberBasicInfoService memberBasicInfoService;
@Override
public int deleteByPrimaryKey(Integer id) {
return orderPileOccupyMapper.deleteByPrimaryKey(id);
@@ -102,6 +115,7 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
/**
* 根据占桩订单编号查询占桩订单
*
* @param occupyCode 占桩订单编号
* @return
*/
@@ -115,6 +129,7 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
/**
* 查询占桩订单列表
*
* @param dto
* @return
*/
@@ -126,6 +141,7 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
/**
* 生成占桩订单
* 在会员操作降地锁后,就生成占桩订单
*
* @param dto 会员id 充电桩编号 充电桩枪口号
*/
@Override
@@ -157,6 +173,7 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
/**
* 收到地锁升起指令,调用这个方法,停止计时
* 占桩订单停止计费/停止占桩订单计费
*
* @param pileSn
* @param connectorCode
*/
@@ -270,6 +287,7 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
/**
* 查询占桩订单列表
*
* @param memberId
* @return
*/
@@ -297,6 +315,68 @@ public class OrderPileOccupyServiceImpl implements OrderPileOccupyService{
public OrderPileOccupy getOrderInfoByPile(String pileSn, String connectorCode) {
return orderPileOccupyMapper.getOrderInfoByPile(pileSn, connectorCode);
}
/*
* 支付占桩订单
*
* @param dto
* @return
*/
@Override
public Map<String, Object> payOccupyPileOrder(PayOrderDTO dto) {
// 查询占桩订单详情
OrderPileOccupy orderPileOccupy = queryByOccupyCode(dto.getOrderCode());
if (orderPileOccupy == null) {
throw new BusinessException(ReturnCodeEnum.CODE_QUERY_ORDER_INFO_IS_NULL);
}
// 支付方式
Map<String, Object> resultMap = Maps.newHashMap();
if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue())) {
// 余额支付占桩订单
balancePayOccupyPileOrder(dto);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())) {
// 返回支付参数
dto.setGoodsTitle("占桩费用");
dto.setGoodsDesc("占桩订单金额");
Map<String, Object> weixinMap = adapayService.createPayment(dto);
resultMap.put("weixinMap", weixinMap);
} else if (StringUtils.equals(dto.getPayMode(), OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue())) { // 白名单支付
whiteListPayOccupyPileOrder(dto);
}
return resultMap;
}
private void balancePayOccupyPileOrder(PayOrderDTO dto) {
// 查会员余额
MemberVO memberVO = memberBasicInfoService.queryMemberInfoByMemberId(dto.getMemberId());
if (memberVO == null) {
throw new BusinessException(ReturnCodeEnum.CODE_MEMBER_NOT_FOUND_ERROR);
}
// 校验金额
BigDecimal principalBalance = memberVO.getPrincipalBalance();
if (dto.getPayAmount().compareTo(principalBalance) > 0) {
throw new BusinessException(ReturnCodeEnum.CODE_BALANCE_IS_INSUFFICIENT);
}
// 扣除会员余额
UpdateMemberBalanceDTO updateMemberBalanceDTO = new UpdateMemberBalanceDTO();
updateMemberBalanceDTO.setMemberId(dto.getMemberId());
updateMemberBalanceDTO.setUpdatePrincipalBalance(dto.getPayAmount()); // 更新会员本金金额,单位元
updateMemberBalanceDTO.setType(MemberWalletEnum.TYPE_OUT.getValue());
updateMemberBalanceDTO.setSubType(MemberWalletEnum.SUBTYPE_PAYMENT_FOR_ORDER.getValue());
memberBasicInfoService.updateMemberBalance(updateMemberBalanceDTO);
// 更新占桩订单状态
OrderPileOccupy orderPileOccupy = queryByOccupyCode(dto.getOrderCode());
orderPileOccupy.setStatus(OrderPileOccupyStatusEnum.ORDER_COMPLETE.getValue());
orderPileOccupy.setPayStatus(OrderPileOccupyPayStatusEnum.PAYMENT_COMPLETION.getValue());
updateByPrimaryKeySelective(orderPileOccupy);
}
private void whiteListPayOccupyPileOrder(PayOrderDTO dto) {
// 更新占桩订单状态
OrderPileOccupy orderPileOccupy = queryByOccupyCode(dto.getOrderCode());
orderPileOccupy.setStatus(OrderPileOccupyStatusEnum.ORDER_COMPLETE.getValue());
orderPileOccupy.setPayStatus(OrderPileOccupyPayStatusEnum.NO_PAYMENT_REQUIRED.getValue());
updateByPrimaryKeySelective(orderPileOccupy);
}
}

View File

@@ -47,7 +47,7 @@ public class MemberVO {
/**
* 赠送金额
*/
// private BigDecimal giftBalance;
private BigDecimal giftBalance;
/**
* 总账户余额