订单支付

This commit is contained in:
2025-09-27 18:30:51 +08:00
parent 51fde65ddb
commit ca7435c813
6 changed files with 211 additions and 145 deletions

View File

@@ -23,4 +23,6 @@ public class OrderPayParamDTO {
private String openId;
private String authCode;
private String pwd;
private Long rechargeId;
}

View File

@@ -32,6 +32,11 @@ public interface PayService {
*/
CzgResult<Object> vipPayOrder(OrderPayParamDTO payParam);
/**
* 充值并付款
*/
CzgResult<Map<String, Object>> rechargePayOrder(String clintIp, OrderPayParamDTO payParam);
/**
* h5支付
*/

View File

@@ -376,7 +376,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
if (CollUtil.isNotEmpty(param.getCouponList())) {
QueryWrapper couponRecordQuery = new QueryWrapper();
couponRecordQuery.in(MkShopCouponRecord::getId, param.getCouponList());
couponRecordQuery.eq(MkShopCouponRecord::getShopId, shopId);
couponRecordQuery.gt(MkShopCouponRecord::getUseStartTime, LocalDateTime.now());
couponRecordQuery.le(MkShopCouponRecord::getUseEndTime, LocalDateTime.now());
couponRecordQuery.eq(MkShopCouponRecord::getStatus, 0);
@@ -865,6 +864,24 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
}
shopRechargeService.recharge(payment.getShopId(), payment.getSourceId(), payment.getRelatedId(),
BigDecimal.valueOf(czgCallBackDto.getAmount() / 100), payment.getId(), payment.getPayType(), bizEnum);
//充值并支付 ↓
OrderInfo orderInfo = getOne(new QueryWrapper()
.eq(OrderInfo::getPayOrderId, payment.getRelatedId())
.eq(OrderInfo::getPayType, PayEnums.VIP_PAY.getValue()));
if (orderInfo != null) {
updateChain().eq(OrderInfo::getPayOrderId, payment.getRelatedId())
.eq(OrderInfo::getPayType, PayEnums.VIP_PAY.getValue())
.set(OrderInfo::getStatus, OrderStatusEnums.DONE.getCode())
.set(OrderInfo::getPayAmount, 0)
.update();
ShopUserMoneyEditDTO shopUserMoneyEditDTO = new ShopUserMoneyEditDTO()
.setId(shopUser.getId())
.setType(0)
.setBizEnum(ShopUserFlowBizEnum.ORDER_PAY)
.setRelationId(orderInfo.getId())
.setMoney(orderInfo.getOrderAmount());
shopUserService.updateMoney(shopUserMoneyEditDTO);
}
}
} else if ("memberPay".equals(payment.getPayType())) {
memberConfigService.joinMember(payment.getShopId(), payment.getSourceId(), payment.getRelatedId());

View File

@@ -19,8 +19,11 @@ import com.czg.exception.CzgException;
import com.czg.exception.PaySuccessException;
import com.czg.market.dto.MemberOrderDTO;
import com.czg.market.entity.MkShopCouponRecord;
import com.czg.market.entity.MkShopRecharge;
import com.czg.market.entity.MkShopRechargeDetail;
import com.czg.market.service.MemberOrderService;
import com.czg.market.service.MkShopCouponRecordService;
import com.czg.market.service.MkShopRechargeDetailService;
import com.czg.market.service.MkShopRechargeService;
import com.czg.market.vo.MkShopRechargeVO;
import com.czg.order.dto.BigDecimalDTO;
@@ -105,6 +108,8 @@ public class PayServiceImpl implements PayService {
private MemberOrderService memberOrderService;
@Resource
private MkShopRechargeService shopRechargeService;
@Resource
private MkShopRechargeDetailService shopRechargeDetailService;
private final BigDecimal MONEY_RATE = new BigDecimal("100");
@@ -249,6 +254,36 @@ public class PayServiceImpl implements PayService {
return CzgResult.success();
}
@Override
public CzgResult<Map<String, Object>> rechargePayOrder(String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = checkPay(payParam.getCheckOrderPay());
ShopInfo shopInfo = shopInfoService.getById(payParam.getShopId());
AssertUtil.isNull(shopInfo, "店铺不存在");
if (!shopInfo.getIsAccountPay().equals(1)) {
return CzgResult.failure("支付失败,店铺暂未开启会员余额支付。");
}
AssertUtil.isNull(payParam.getShopUserId(), "请选择付款人后重试");
ShopUser shopUser = shopUserService.getById(payParam.getShopUserId());
AssertUtil.isNull(shopUser, "支付失败 该店铺用户不存在");
AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空");
AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空");
//查询活动Id 获取金额字段
MkShopRecharge recharge = shopRechargeService.getById(payParam.getRechargeId());
AssertUtil.isNull(recharge, "充值配置不存在");
MkShopRechargeDetail rechargeDetail = shopRechargeDetailService.getOne(
new QueryWrapper().eq("shop_recharge_id", recharge.getId()));
AssertUtil.isNull(rechargeDetail, "充值配置不存在");
if (orderInfo.getOrderAmount().compareTo(rechargeDetail.getAmount()) < 0) {
return CzgResult.failure("支付失败 充值金额小于订单金额");
}
String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId();
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), shopUser.getId(), "memberIn", payOrderNo,
"", rechargeDetail.getAmount(), payParam.getRechargeId()));
upOrderPayInfo(orderInfo.getId(), PayEnums.VIP_PAY, paymentId);
return ltPay(payParam.getShopId(), payParam.getPayType(), new CzgLtPayReq(payOrderNo, rechargeDetail.getAmount().multiply(MONEY_RATE).longValue(),
payParam.getPayType(), "充值并支付", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), ""));
}
@Override
@Transactional(noRollbackFor = PaySuccessException.class)
public CzgResult<Map<String, Object>> h5PayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
@@ -447,7 +482,7 @@ public class PayServiceImpl implements PayService {
BigDecimal amount = shopRechargeService.checkRecharge(mainShopId, rechargeDTO.getShopId(), shopUser.getUserId(), rechargeDTO.getRechargeDetailId(), rechargeDTO.getAmount());
String payOrderNo = rechargeDTO.getPlatformType() + IdUtil.getSnowflakeNextId();
initOrderPayment(new OrderPayment(rechargeDTO.getShopId(), shopUser.getId(), isFree ? "free" : "memberIn", payOrderNo,
"", amount, isFree ? rechargeDTO.getOrderId() : rechargeDTO.getRechargeDetailId()));
"", amount, isFree ? rechargeDTO.getOrderId() : rechargeDTO.getRechargeDetailId()));
return ltPay(rechargeDTO.getShopId(), rechargeDTO.getPayType(), new CzgLtPayReq(payOrderNo, amount.multiply(MONEY_RATE).longValue(),
rechargeDTO.getPayType(), "会员充值", "wechatPay".equals(rechargeDTO.getPayType()) ? userInfo.getWechatOpenId() : userInfo.getAlipayOpenId(), clientIP, rechargeDTO.getReturnUrl(), rechargeDTO.getBuyerRemark(), ""));
}