支付前置

This commit is contained in:
wangw 2025-02-24 14:44:59 +08:00
parent da3f548ca0
commit 6b785709f1
6 changed files with 35 additions and 33 deletions

View File

@ -1,6 +1,7 @@
package com.czg.controller;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.service.order.dto.OrderPayParamDTO;
import com.czg.service.order.service.PayService;
import com.czg.utils.AssertUtil;
@ -30,6 +31,7 @@ public class OrderPayController {
@PostMapping("/cashPay")
public CzgResult<Object> cashPayOrder(@Validated @RequestBody OrderPayParamDTO payParam) {
payParam.setShopId(StpKit.USER.getShopId());
return payService.cashPayOrder(payParam);
}
@ -44,6 +46,7 @@ public class OrderPayController {
*/
@PostMapping("/vipPay")
public CzgResult<Object> vipPayOrder(@Validated @RequestBody OrderPayParamDTO payParam) {
payParam.setShopId(StpKit.USER.getShopId());
AssertUtil.isBlank(payParam.getPayType(), "支付类型不可为空");
return payService.vipPayOrder(payParam);
}
@ -53,6 +56,7 @@ public class OrderPayController {
*/
@PostMapping("/h5Pay")
public CzgResult<Map<String, Object>> h5PayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) {
payParam.setShopId(StpKit.USER.getShopId());
return payService.h5PayOrder(ServletUtil.getClientIPByHeader(request), payParam);
}
@ -64,6 +68,7 @@ public class OrderPayController {
*/
@PostMapping("/jsPay")
public CzgResult<Map<String, Object>> jsPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) {
payParam.setShopId(StpKit.USER.getShopId());
return payService.jsPayOrder(ServletUtil.getClientIPByHeader(request), payParam);
}
@ -74,6 +79,7 @@ public class OrderPayController {
*/
@PostMapping("/ltPayOrder")
public CzgResult<Map<String, Object>> ltPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) {
payParam.setShopId(StpKit.USER.getShopId());
return payService.ltPayOrder(ServletUtil.getClientIPByHeader(request), payParam);
}
@ -82,6 +88,7 @@ public class OrderPayController {
*/
@PostMapping("/scanPay")
public CzgResult<Map<String, Object>> scanPayOrder(HttpServletRequest request, @Validated @RequestBody OrderPayParamDTO payParam) {
payParam.setShopId(StpKit.USER.getShopId());
return payService.scanPayOrder(ServletUtil.getClientIPByHeader(request), payParam);
}
@ -91,6 +98,7 @@ public class OrderPayController {
*/
@PostMapping("/microPay")
public CzgResult<Map<String, Object>> microPayOrder(@Validated @RequestBody OrderPayParamDTO payParam) {
payParam.setShopId(StpKit.USER.getShopId());
return payService.microPayOrder(payParam);
}
}

View File

@ -1,6 +1,7 @@
package com.czg.order.dto;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -22,6 +23,7 @@ import java.util.List;
@AllArgsConstructor
public class CheckOrderPay implements Serializable {
@NotNull(message = "订单id不可为空")
private Long orderId;
private Long userId;

View File

@ -27,7 +27,7 @@ public interface OrderInfoService extends IService<OrderInfo> {
// void updateOrder(OrderInfoUpDTO upDTO);
BigDecimal checkOrderPay(CheckOrderPay param);
OrderInfo checkOrderPay(CheckOrderPay param);
CzgResult<Object> refundOrder(OrderInfoRefundDTO param);

View File

@ -1,6 +1,6 @@
package com.czg.service.order.dto;
import jakarta.validation.constraints.NotNull;
import com.czg.order.dto.CheckOrderPay;
import lombok.Data;
/**
@ -11,10 +11,10 @@ import lombok.Data;
*/
@Data
public class OrderPayParamDTO {
@NotNull(message = "店铺不能为空")
private CheckOrderPay checkOrderPay;
// @NotNull(message = "店铺不能为空")
private Long shopId;
@NotNull(message = "订单不能为空")
private Long orderId;
private Long shopUserId;
private String buyerRemark;
private String returnUrl;

View File

@ -211,8 +211,11 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
// }
@Override
public BigDecimal checkOrderPay(CheckOrderPay param) {
public OrderInfo checkOrderPay(CheckOrderPay param) {
OrderInfo orderInfo = getById(param.getOrderId());
if (!orderInfo.getStatus().equals(OrderStatusEnums.UNPAID.getCode())) {
throw new ValidateException("生成支付订单失败,订单不可支付");
}
Long shopId = StpKit.USER.getShopId();
PointsBasicSetting pointSetting = pointsBasicService.getById(shopId);
if (param.getPointsNum() > 0 && !pointSetting.getEnableDeduction().equals(1)) {
@ -286,7 +289,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
orderDetailService.updateBatch(orderDetails);
//券消耗
couponService.use(param.getCouponList(), shopUser.getId(), orderInfo.getId());
return newTotalAmount;
return orderInfo;
}
@Override

View File

@ -1,6 +1,5 @@
package com.czg.service.order.service.impl;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.exceptions.ValidateException;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson2.JSONObject;
@ -12,6 +11,7 @@ import com.czg.config.RedisCst;
import com.czg.entity.req.*;
import com.czg.entity.resp.*;
import com.czg.enums.ShopUserFlowBizEnum;
import com.czg.order.dto.CheckOrderPay;
import com.czg.order.entity.OrderInfo;
import com.czg.order.entity.OrderPayment;
import com.czg.order.enums.PayEnums;
@ -23,7 +23,6 @@ import com.czg.service.RedisService;
import com.czg.service.order.dto.OrderPayParamDTO;
import com.czg.service.order.dto.VipPayParamDTO;
import com.czg.service.order.dto.VipRefundDTO;
import com.czg.service.order.enums.OrderStatusEnums;
import com.czg.service.order.service.PayService;
import com.czg.system.enums.SysParamCodeEnum;
import com.czg.system.service.SysParamsService;
@ -39,7 +38,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashMap;
import java.util.Map;
@ -81,23 +79,14 @@ public class PayServiceImpl implements PayService {
private final BigDecimal MONEY_RATE = new BigDecimal("100");
private OrderInfo checkPay(Long orderId) {
OrderInfo orderInfo = orderInfoService.getById(orderId);
AssertUtil.isNull(orderInfo, "订单不存在");
if (!OrderStatusEnums.UNPAID.getCode().equals(orderInfo.getStatus())) {
throw new ValidateException("该订单已不可支付");
}
if (!"after-pay".equals(orderInfo.getPayMode())
&& orderInfo.getCreateTime().isAfter(LocalDateTimeUtil.offset(LocalDateTime.now(), -15, ChronoUnit.SECONDS))) {
throw new ValidateException("订单十五分钟内有效,当前已超时,请重新下单。");
}
return orderInfo;
private OrderInfo checkPay(CheckOrderPay checkOrderPay) {
return orderInfoService.checkOrderPay(checkOrderPay);
}
@Override
@Transactional
public CzgResult<Object> cashPayOrder(OrderPayParamDTO payParam) {
OrderInfo orderInfo = checkPay(payParam.getOrderId());
OrderInfo orderInfo = checkPay(payParam.getCheckOrderPay());
orderInfoService.upOrderInfo(orderInfo.getId(), orderInfo.getOrderAmount(),
LocalDateTime.now(), null, PayEnums.CASH_PAY);
return CzgResult.success();
@ -106,7 +95,7 @@ public class PayServiceImpl implements PayService {
@Override
@Transactional
public CzgResult<Object> vipPayOrder(OrderPayParamDTO payParam) {
OrderInfo orderInfo = checkPay(payParam.getOrderId());
OrderInfo orderInfo = checkPay(payParam.getCheckOrderPay());
ShopUser shopUser = new ShopUser();
if ("scanCode".equals(payParam.getPayType())) {
AssertUtil.isBlank(payParam.getAuthCode(), "会员码不能为空");
@ -154,9 +143,9 @@ public class PayServiceImpl implements PayService {
@Override
@Transactional
public CzgResult<Map<String, Object>> h5PayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = checkPay(payParam.getOrderId());
OrderInfo orderInfo = checkPay(payParam.getCheckOrderPay());
String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId();
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), payParam.getOrderId(),
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), orderInfo.getId(),
"order", payOrderNo, "", orderInfo.getOrderAmount()));
upOrderPayInfo(orderInfo.getId(), PayEnums.H5_PAY, paymentId);
return h5Pay(payParam.getShopId(), new CzgH5PayReq(payOrderNo, orderInfo.getOrderAmount().multiply(MONEY_RATE).longValue(),
@ -167,11 +156,11 @@ public class PayServiceImpl implements PayService {
@Override
@Transactional
public CzgResult<Map<String, Object>> jsPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = checkPay(payParam.getOrderId());
OrderInfo orderInfo = checkPay(payParam.getCheckOrderPay());
AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空");
AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空");
String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId();
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), payParam.getOrderId(),
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), orderInfo.getId(),
"order", payOrderNo, "", orderInfo.getOrderAmount()));
upOrderPayInfo(orderInfo.getId(), "aliPay".equals(payParam.getPayType()) ? PayEnums.ALIPAY_MINI : PayEnums.WECHAT_MINI, paymentId);
return jsPay(payParam.getShopId(), payParam.getPayType(), new CzgJsPayReq(payOrderNo, orderInfo.getOrderAmount().multiply(MONEY_RATE).longValue(),
@ -181,11 +170,11 @@ public class PayServiceImpl implements PayService {
@Override
@Transactional
public CzgResult<Map<String, Object>> ltPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = checkPay(payParam.getOrderId());
OrderInfo orderInfo = checkPay(payParam.getCheckOrderPay());
AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空");
AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空");
String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId();
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), payParam.getOrderId(),
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), orderInfo.getId(),
"order", payOrderNo, "", orderInfo.getOrderAmount()));
upOrderPayInfo(orderInfo.getId(), "aliPay".equals(payParam.getPayType()) ? PayEnums.ALIPAY_MINI : PayEnums.WECHAT_MINI, paymentId);
return ltPay(payParam.getShopId(), payParam.getPayType(), new CzgLtPayReq(payOrderNo, orderInfo.getOrderAmount().multiply(MONEY_RATE).longValue(),
@ -195,10 +184,10 @@ public class PayServiceImpl implements PayService {
@Override
@Transactional
public CzgResult<Map<String, Object>> scanPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) {
OrderInfo orderInfo = checkPay(payParam.getOrderId());
OrderInfo orderInfo = checkPay(payParam.getCheckOrderPay());
String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId();
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), payParam.getOrderId(),
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), orderInfo.getId(),
"order", payOrderNo, "", orderInfo.getOrderAmount()));
upOrderPayInfo(orderInfo.getId(), PayEnums.MAIN_SCAN, paymentId);
return scanPay(payParam.getShopId(), new CzgScanPayReq(payOrderNo, orderInfo.getOrderAmount().multiply(MONEY_RATE).longValue(),
@ -208,10 +197,10 @@ public class PayServiceImpl implements PayService {
@Override
@Transactional
public CzgResult<Map<String, Object>> microPayOrder(OrderPayParamDTO payParam) {
OrderInfo orderInfo = checkPay(payParam.getOrderId());
OrderInfo orderInfo = checkPay(payParam.getCheckOrderPay());
AssertUtil.isBlank(payParam.getAuthCode(), "扫描码不能为空");
String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId();
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), payParam.getOrderId(),
Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), orderInfo.getId(),
"order", payOrderNo, payParam.getAuthCode(), orderInfo.getOrderAmount()));
upOrderPayInfo(orderInfo.getId(), PayEnums.BACK_SCAN, paymentId);
return microPay(payParam.getShopId(), new CzgMicroPayReq(payOrderNo, orderInfo.getOrderAmount().multiply(MONEY_RATE).longValue(),