diff --git a/src/main/java/com/sczx/order/common/enums/PayStatusEnum.java b/src/main/java/com/sczx/order/common/enums/PayStatusEnum.java index 7a58e61..2c4ffb5 100644 --- a/src/main/java/com/sczx/order/common/enums/PayStatusEnum.java +++ b/src/main/java/com/sczx/order/common/enums/PayStatusEnum.java @@ -14,6 +14,9 @@ public enum PayStatusEnum { USERPAYING("USERPAYING", "用户支付中"), SUCCESS("SUCCESS", "支付成功"), PAYERROR("PAYERROR", "支付失败"), + REFUNDING("REFUNDING", "退款中"), + REFUND_SUCCESS("REFUND_SUCCESS", "退款成功"), + REFUND_ERROR("REFUND_ERROR", "退款失败"), ; private final String code; diff --git a/src/main/java/com/sczx/order/common/enums/SubOrderTypeEnum.java b/src/main/java/com/sczx/order/common/enums/SubOrderTypeEnum.java index 633cb27..03f332e 100644 --- a/src/main/java/com/sczx/order/common/enums/SubOrderTypeEnum.java +++ b/src/main/java/com/sczx/order/common/enums/SubOrderTypeEnum.java @@ -15,6 +15,7 @@ public enum SubOrderTypeEnum { RENTCAR("RENTCAR", "租车订单"), RENTBATTEY("RENTBATTEY", "租电订单"), OVERDUE("OVERDUE", "逾期订单"), + FD_DEPOSIT("FD_DEPOSIT", "退押金订单") ; private final String code; diff --git a/src/main/java/com/sczx/order/mapper/BaseUserReferralMapper.java b/src/main/java/com/sczx/order/mapper/BaseUserReferralMapper.java new file mode 100644 index 0000000..7f39610 --- /dev/null +++ b/src/main/java/com/sczx/order/mapper/BaseUserReferralMapper.java @@ -0,0 +1,16 @@ +package com.sczx.order.mapper; + +import com.sczx.order.po.BaseUserReferralPO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 用户引荐信息 Mapper 接口 + *

+ * + * @author zhangli + * @since 2025-08-24 23:25:03 + */ +public interface BaseUserReferralMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sczx/order/po/BaseUserReferralPO.java b/src/main/java/com/sczx/order/po/BaseUserReferralPO.java new file mode 100644 index 0000000..f9104c8 --- /dev/null +++ b/src/main/java/com/sczx/order/po/BaseUserReferralPO.java @@ -0,0 +1,66 @@ +package com.sczx.order.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 用户引荐信息 + *

+ * + * @author zhangli + * @since 2025-08-24 23:25:03 + */ +@Getter +@Setter +@TableName("zc_base_user_referral") +@ApiModel(value = "BaseUserReferralPO对象", description = "用户引荐信息") +public class BaseUserReferralPO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("被引荐人id") + private Long userId; + + @ApiModelProperty("被引荐人手机号") + private String userPhoneNumber; + + @ApiModelProperty("引荐人id") + private Long referralUserId; + + @ApiModelProperty("引荐人手机号") + private String referralUserPhoneNumber; + + @ApiModelProperty("奖励截止日期") + private LocalDate awardDeadline; + + @ApiModelProperty("奖励比例") + private BigDecimal awardRate; + + @ApiModelProperty("引荐订单") + private String referralOrderNo; + + @ApiModelProperty("删除标志(0代表存在 2代表删除)") + private String delFlag; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + + +} diff --git a/src/main/java/com/sczx/order/po/OrderSubPO.java b/src/main/java/com/sczx/order/po/OrderSubPO.java index 9bb8aba..b1cc585 100644 --- a/src/main/java/com/sczx/order/po/OrderSubPO.java +++ b/src/main/java/com/sczx/order/po/OrderSubPO.java @@ -58,6 +58,9 @@ public class OrderSubPO implements Serializable { @ApiModelProperty("支付ID") private String paymentId; + @ApiModelProperty("退款单ID") + private String refundId; + @ApiModelProperty("支付状态") private String payStatus; diff --git a/src/main/java/com/sczx/order/repository/BaseUserReferralRepo.java b/src/main/java/com/sczx/order/repository/BaseUserReferralRepo.java new file mode 100644 index 0000000..e51726a --- /dev/null +++ b/src/main/java/com/sczx/order/repository/BaseUserReferralRepo.java @@ -0,0 +1,16 @@ +package com.sczx.order.repository; + +import com.sczx.order.po.BaseUserReferralPO; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 用户引荐信息 服务类 + *

+ * + * @author zhangli + * @since 2025-08-24 23:25:03 + */ +public interface BaseUserReferralRepo extends IService { + +} diff --git a/src/main/java/com/sczx/order/repository/impl/BaseUserReferralRepoImpl.java b/src/main/java/com/sczx/order/repository/impl/BaseUserReferralRepoImpl.java new file mode 100644 index 0000000..b1c2f99 --- /dev/null +++ b/src/main/java/com/sczx/order/repository/impl/BaseUserReferralRepoImpl.java @@ -0,0 +1,20 @@ +package com.sczx.order.repository.impl; + +import com.sczx.order.po.BaseUserReferralPO; +import com.sczx.order.mapper.BaseUserReferralMapper; +import com.sczx.order.repository.BaseUserReferralRepo; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 用户引荐信息 服务实现类 + *

+ * + * @author zhangli + * @since 2025-08-24 23:25:03 + */ +@Service +public class BaseUserReferralRepoImpl extends ServiceImpl implements BaseUserReferralRepo { + +} diff --git a/src/main/java/com/sczx/order/service/PayService.java b/src/main/java/com/sczx/order/service/PayService.java new file mode 100644 index 0000000..2f7718f --- /dev/null +++ b/src/main/java/com/sczx/order/service/PayService.java @@ -0,0 +1,31 @@ +package com.sczx.order.service; + +import com.sczx.order.dto.SimpleUserInfoDTO; +import com.sczx.order.thirdpart.dto.UnifiedPaymentInfoDTO; + +import java.math.BigDecimal; + +public interface PayService { + + /** + * 预支付下单 + * @param payType + * @param body + * @param companyId + * @param outTradeNo + * @param userInfoDTO + * @param totalFee + * @return + */ + UnifiedPaymentInfoDTO prepayOrder(String payType, String body, Long companyId, String outTradeNo, SimpleUserInfoDTO userInfoDTO, BigDecimal totalFee); + + /** + * 退款 + * @param payType + * @param companyId + * @param outTradeNo + * @param totalFee + * @param refundFee + */ + String refundOrder(String payType,Long companyId,String outTradeNo, BigDecimal totalFee, BigDecimal refundFee); +} diff --git a/src/main/java/com/sczx/order/service/impl/OrderDistribServiceImpl.java b/src/main/java/com/sczx/order/service/impl/OrderDistribServiceImpl.java index 0143e60..b1cc92d 100644 --- a/src/main/java/com/sczx/order/service/impl/OrderDistribServiceImpl.java +++ b/src/main/java/com/sczx/order/service/impl/OrderDistribServiceImpl.java @@ -9,16 +9,9 @@ import com.sczx.order.common.enums.WalletChangeTypeEnum; import com.sczx.order.dto.OrderDistribDTO; import com.sczx.order.dto.OrderDistribQueryReq; import com.sczx.order.exception.BizException; -import com.sczx.order.po.BaseWalletChangePO; -import com.sczx.order.po.BaseWalletPO; -import com.sczx.order.po.OrderDistribPO; -import com.sczx.order.po.OrderMainPO; -import com.sczx.order.repository.BaseWalletChangeRepo; -import com.sczx.order.repository.BaseWalletRepo; -import com.sczx.order.repository.OrderDistribRepo; -import com.sczx.order.repository.OrderMainRepo; +import com.sczx.order.po.*; +import com.sczx.order.repository.*; import com.sczx.order.service.OrderDistribService; -import com.sczx.order.thirdpart.dto.BaseUserReferralDTO; import com.sczx.order.thirdpart.dto.CompanyDTO; import com.sczx.order.thirdpart.dto.CompanyStoreDTO; import com.sczx.order.thirdpart.dto.SysConfigDTO; @@ -57,6 +50,9 @@ public class OrderDistribServiceImpl implements OrderDistribService { @Autowired private UserInteg userInteg; + @Autowired + private BaseUserReferralRepo baseUserReferralRepo; + @Override public IPage pageQueryOrderDistrib(Integer pageNo, Integer pageSize, OrderDistribQueryReq orderDistribQueryReq) { return orderDistribRepo.pageQueryOrderDistrib(pageNo, pageSize, orderDistribQueryReq); @@ -87,16 +83,23 @@ public class OrderDistribServiceImpl implements OrderDistribService { addOrderDistribPOList.add(storeDistribPO); //推荐人分润 - BaseUserReferralDTO baseUserReferralDTO = userInteg.getUserReferralByUserId(orderMainPO.getCustomerId()); - if(Objects.nonNull(baseUserReferralDTO) - && Objects.nonNull(baseUserReferralDTO.getReferralUserId())){ + OrderDistribPO referralDistribPO = null; + LambdaQueryWrapper userReferralWrapper = new LambdaQueryWrapper<>(); + userReferralWrapper.eq(BaseUserReferralPO::getUserId, orderMainPO.getCustomerId()) + .eq(BaseUserReferralPO::getDelFlag, "0") + .isNull(BaseUserReferralPO::getReferralOrderNo).last(" limit 1"); + BaseUserReferralPO baseUserReferralPO = baseUserReferralRepo.getOne(userReferralWrapper); + if(Objects.nonNull(baseUserReferralPO) + && Objects.nonNull(baseUserReferralPO.getReferralUserId())){ + + List configList = storeInteg.listConfigByConfigKey(Lists.newArrayList("sczx.invitation.day", "sczx.invitation.rate")); String invitationDay = String.valueOf(configList.stream().filter(config -> "sczx.invitation.day".equals(config.getConfigKey())).findFirst().orElse(null)); - LocalDate awardDeadline = baseUserReferralDTO.getCreateTime().toLocalDate().plusDays(Integer.parseInt(invitationDay)); + LocalDate awardDeadline = baseUserReferralPO.getCreateTime().toLocalDate().plusDays(Integer.parseInt(invitationDay)); //判断奖励是否过期 if(awardDeadline.isAfter(LocalDate.now())){ String invitationRate = String.valueOf(configList.stream().filter(config -> "sczx.invitation.rate".equals(config.getConfigKey())).findFirst().orElse(null)); - OrderDistribPO referralDistribPO = getOrderDistribPO(orderMainPO.getOrderId(),orderMainPO.getOrderNo(),DistribTypeEnum.REFERRAL.getCode(),invitationRate,orderMainPO.getOrderAmount(),null,null,baseUserReferralDTO.getReferralUserId()); + referralDistribPO = getOrderDistribPO(orderMainPO.getOrderId(),orderMainPO.getOrderNo(),DistribTypeEnum.REFERRAL.getCode(),invitationRate,orderMainPO.getOrderAmount(),null,null,baseUserReferralPO.getReferralUserId()); addOrderDistribPOList.add(referralDistribPO); } } @@ -129,6 +132,12 @@ public class OrderDistribServiceImpl implements OrderDistribService { baseWalletChangePO.setChangeAmount(storeDistribPO.getDistribAmount()); baseWalletChangePO.setReferralOrderNo(orderMainPO.getOrderNo()); baseWalletChangeRepo.save(baseWalletChangePO); + + //更新推荐信息,防止重复分润 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(BaseUserReferralPO::getUserId, orderMainPO.getCustomerId()) + .set(BaseUserReferralPO::getReferralOrderNo, storeDistribPO.getOrderNo()); + baseUserReferralRepo.update(updateWrapper); } diff --git a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java index a0e1510..0d1d8c3 100644 --- a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java @@ -21,9 +21,9 @@ import com.sczx.order.repository.OrderMainRepo; import com.sczx.order.repository.OrderSubRepo; import com.sczx.order.service.OrderDistribService; import com.sczx.order.service.OrderService; +import com.sczx.order.service.PayService; import com.sczx.order.thirdpart.dto.*; import com.sczx.order.thirdpart.dto.req.CarQueryConditionReq; -import com.sczx.order.thirdpart.dto.req.PaymentRequest; import com.sczx.order.thirdpart.integration.CarInteg; import com.sczx.order.thirdpart.integration.PayInteg; import com.sczx.order.thirdpart.integration.StoreInteg; @@ -77,6 +77,9 @@ public class OrderServiceImpl implements OrderService { @Autowired private OrderDistribService orderDistribService; + @Autowired + private PayService payService; + @Override public OrderMainPO queryOrderMainPoByOrderNo(String orderNo, String delFlag) { LambdaQueryWrapper currentOrderWrapper = new LambdaQueryWrapper<>(); @@ -183,7 +186,7 @@ public class OrderServiceImpl implements OrderService { //发起支付返回预支付信息 String paymentId = OrderUtil.generateSubOrderNo(OrderUtil.ZF_PREFIX); - UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = prepayOrder(paymentType,rentCarRuleDTO.getRuleName(),Long.valueOf(companyStoreDTO.getOperatingCompanyId()),paymentId,userInfoDTO + UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = payService.prepayOrder(paymentType,rentCarRuleDTO.getRuleName(),Long.valueOf(companyStoreDTO.getOperatingCompanyId()),paymentId,userInfoDTO ,orderMainPO.getOrderAmount()); // UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = new UnifiedPaymentInfoDTO(); @@ -290,7 +293,7 @@ public class OrderServiceImpl implements OrderService { // 起支付返回预支付信息 RentCarRuleDTO rentCarRuleDTO = carInteg.getRentCarRuleByCarRuleId(orderMainPO.getRentCarRuleId()); - UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = prepayOrder(paymentType,rentCarRuleDTO.getRuleName(),orderMainPO.getOperatorId(),rentOrder.getPaymentId(),userInfoDTO + UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = payService.prepayOrder(paymentType,rentCarRuleDTO.getRuleName(),orderMainPO.getOperatorId(),rentOrder.getPaymentId(),userInfoDTO ,rentCarOrderAmount); // //发起支付 @@ -384,7 +387,7 @@ public class OrderServiceImpl implements OrderService { // unifiedPaymentInfoDTO = payInteg.unifiedOrder(paymentRequest); // // TODO 其他支付类型 // } - return prepayOrder(orderSubPO.getPaymentMethod(),rentCarRuleDTO.getRuleName(),orderMainPO.getOperatorId(),orderSubPO.getPaymentId(),userInfoDTO + return payService.prepayOrder(orderSubPO.getPaymentMethod(),rentCarRuleDTO.getRuleName(),orderMainPO.getOperatorId(),orderSubPO.getPaymentId(),userInfoDTO ,orderAmount); } @@ -479,7 +482,7 @@ public class OrderServiceImpl implements OrderService { rentOrder.setPaymentMethod(paymentType); // 发起支付返回预支付信息 RentCarRuleDTO rentCarRuleDTO = carInteg.getRentCarRuleByCarRuleId(orderMainPO.getRentCarRuleId()); - UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = prepayOrder(paymentType,rentCarRuleDTO.getRuleName(),orderMainPO.getOperatorId(),rentOrder.getPaymentId(),userInfoDTO + UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = payService.prepayOrder(paymentType,rentCarRuleDTO.getRuleName(),orderMainPO.getOperatorId(),rentOrder.getPaymentId(),userInfoDTO ,overDueAmount); // //发起支付 @@ -863,6 +866,30 @@ public class OrderServiceImpl implements OrderService { ThreadPoolUtils.getThreadPool().execute(() -> { orderDistribService.saveOrderDistrib(returnCarReq.getOrderNo()); }); + + ThreadPoolUtils.getThreadPool().execute(() -> { + LambdaQueryWrapper orderSubWrapper = new LambdaQueryWrapper<>(); + orderSubWrapper.eq(OrderSubPO::getOrderId, orderDTO.getOrderId()) + .eq(OrderSubPO::getDelFlag, "0") + .eq(OrderSubPO::getSuborderType, SubOrderTypeEnum.DEPOSIT.getCode()) + .eq(OrderSubPO::getPayStatus, PayStatusEnum.SUCCESS).last(" limit 1"); + OrderSubPO orderSubPO = orderSubRepo.getOne(orderSubWrapper); + if (Objects.nonNull(orderSubPO)) { + //退款回调成功则添加退款子订单 + String outRefundNo = payService.refundOrder(orderSubPO.getPaymentMethod(), orderDTO.getOperatorId(), orderSubPO.getPaymentId(), orderSubPO.getAmount(), orderSubPO.getAmount()); + if (StringUtils.isNotBlank(outRefundNo)) { + OrderSubPO fdSubOrder = new OrderSubPO(); + fdSubOrder.setOrderId(orderDTO.getOrderId()); + fdSubOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.FD_PREFIX)); + fdSubOrder.setSuborderType(SubOrderTypeEnum.FD_DEPOSIT.getCode()); + fdSubOrder.setAmount(orderSubPO.getAmount()); + fdSubOrder.setPaymentMethod(orderSubPO.getPaymentMethod()); + fdSubOrder.setPayStatus(PayStatusEnum.REFUNDING.getCode()); + fdSubOrder.setRefundId(outRefundNo); + orderSubRepo.save(fdSubOrder); + } + } + }); return orderDTO; } @@ -898,38 +925,6 @@ public class OrderServiceImpl implements OrderService { return orderMainRepo.pageQueryRentBatteyOrder(pageNo, pageSize, orderQueryReq.getCustomerId(), orderQueryReq.getStoreId(), orderStatusList, orderQueryReq.getQueryBrandName()); } - /** - * 预支付下单 - * @param payType - * @param body - * @param companyId - * @param outTradeNo - * @param userInfoDTO - * @param totalFee - * @return - */ - private UnifiedPaymentInfoDTO prepayOrder(String payType,String body,Long companyId,String outTradeNo,SimpleUserInfoDTO userInfoDTO,BigDecimal totalFee){ - // 发起支付返回预支付信息 - UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = null; - - //发起支付 - if(StringUtils.equalsIgnoreCase(payType, PaymentTypeEnum.WX_PAY.getCode())){ - String openId = userInfoDTO.getWechatOpenid(); - PaymentRequest paymentRequest = new PaymentRequest(); - paymentRequest.setCompanyId(companyId); - paymentRequest.setOutTradeNo(outTradeNo); - paymentRequest.setOpenId(openId); - paymentRequest.setAttach(companyId.toString()); - paymentRequest.setSpbillCreateIp("127.0.0.1"); - paymentRequest.setBody(body); -// paymentRequest.setTotalFee(totalFee.multiply(new BigDecimal(100)).intValue()); - paymentRequest.setTotalFee(10); - unifiedPaymentInfoDTO = payInteg.unifiedOrder(paymentRequest); - // TODO 其他支付类型 - } - return unifiedPaymentInfoDTO; - } - /** * 支付成功更新订单状态 diff --git a/src/main/java/com/sczx/order/service/impl/PayServiceImpl.java b/src/main/java/com/sczx/order/service/impl/PayServiceImpl.java new file mode 100644 index 0000000..687068b --- /dev/null +++ b/src/main/java/com/sczx/order/service/impl/PayServiceImpl.java @@ -0,0 +1,70 @@ +package com.sczx.order.service.impl; + +import com.sczx.order.common.enums.PaymentTypeEnum; +import com.sczx.order.dto.SimpleUserInfoDTO; +import com.sczx.order.service.PayService; +import com.sczx.order.thirdpart.dto.UnifiedPaymentInfoDTO; +import com.sczx.order.thirdpart.dto.req.PaymentRequest; +import com.sczx.order.thirdpart.dto.req.RefundRequest; +import com.sczx.order.thirdpart.integration.PayInteg; +import com.sczx.order.utils.OrderUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; + +@Slf4j +@Service +public class PayServiceImpl implements PayService { + + @Autowired + private PayInteg payInteg; + + @Override + public UnifiedPaymentInfoDTO prepayOrder(String payType, String body, Long companyId, String outTradeNo, SimpleUserInfoDTO userInfoDTO, BigDecimal totalFee) { + // 发起支付返回预支付信息 + UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = null; + + //发起支付 + if(StringUtils.equalsIgnoreCase(payType, PaymentTypeEnum.WX_PAY.getCode())){ + String openId = userInfoDTO.getWechatOpenid(); + PaymentRequest paymentRequest = new PaymentRequest(); + paymentRequest.setCompanyId(companyId); + paymentRequest.setOutTradeNo(outTradeNo); + paymentRequest.setOpenId(openId); + paymentRequest.setAttach(companyId.toString()); + paymentRequest.setSpbillCreateIp("127.0.0.1"); + paymentRequest.setBody(body); +// paymentRequest.setTotalFee(totalFee.multiply(new BigDecimal(100)).intValue()); + paymentRequest.setTotalFee(10); + unifiedPaymentInfoDTO = payInteg.unifiedOrder(paymentRequest); + // TODO 其他支付类型 + } + return unifiedPaymentInfoDTO; + } + + @Override + public String refundOrder(String payType, Long companyId, String outTradeNo, BigDecimal totalFee, BigDecimal refundFee) { + try{ + String outRefundNo = OrderUtil.generateSubOrderNo(OrderUtil.FD_PREFIX); + //发起退款 + if(StringUtils.equalsIgnoreCase(payType, PaymentTypeEnum.WX_PAY.getCode())){ + RefundRequest refundRequest = new RefundRequest(); + refundRequest.setCompanyId(companyId); + refundRequest.setOutTradeNo(outTradeNo); + refundRequest.setOutRefundNo(outRefundNo); +// refundRequest.setTotalFee(totalFee.multiply(new BigDecimal(100)).intValue()); +// refundRequest.setRefundFee(refundFee.multiply(new BigDecimal(100)).intValue()); + + refundRequest.setTotalFee(10); + refundRequest.setRefundFee(10); + payInteg.refund(refundRequest); + } + } catch (Exception e){ + log.error("退款失败",e); + } + return null; + } +} diff --git a/src/main/java/com/sczx/order/utils/OrderUtil.java b/src/main/java/com/sczx/order/utils/OrderUtil.java index 6a67a8f..b1c7c6c 100644 --- a/src/main/java/com/sczx/order/utils/OrderUtil.java +++ b/src/main/java/com/sczx/order/utils/OrderUtil.java @@ -23,6 +23,8 @@ public class OrderUtil { public static final String ZF_PREFIX = "ZF"; + public static final String FD_PREFIX = "FD"; + /** * 生成订单号的方法 * @return 唯一订单号字符串 diff --git a/src/main/resources/mapper/BaseUserReferralMapper.xml b/src/main/resources/mapper/BaseUserReferralMapper.xml new file mode 100644 index 0000000..9282e21 --- /dev/null +++ b/src/main/resources/mapper/BaseUserReferralMapper.xml @@ -0,0 +1,5 @@ + + + + +