From de868b54d5cc6b148b41d21b47b00045393b9880 Mon Sep 17 00:00:00 2001
From: zhangli <123879394@qq.com>
Date: Sun, 24 Aug 2025 23:40:08 +0800
Subject: [PATCH] =?UTF-8?q?=E9=80=80=E6=AC=BE=E5=92=8C=E5=88=86=E6=B6=A6?=
=?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../order/common/enums/PayStatusEnum.java | 3 +
.../order/common/enums/SubOrderTypeEnum.java | 1 +
.../order/mapper/BaseUserReferralMapper.java | 16 +++++
.../com/sczx/order/po/BaseUserReferralPO.java | 66 +++++++++++++++++
.../java/com/sczx/order/po/OrderSubPO.java | 3 +
.../repository/BaseUserReferralRepo.java | 16 +++++
.../impl/BaseUserReferralRepoImpl.java | 20 ++++++
.../com/sczx/order/service/PayService.java | 31 ++++++++
.../service/impl/OrderDistribServiceImpl.java | 37 ++++++----
.../order/service/impl/OrderServiceImpl.java | 69 +++++++++---------
.../order/service/impl/PayServiceImpl.java | 70 +++++++++++++++++++
.../java/com/sczx/order/utils/OrderUtil.java | 2 +
.../mapper/BaseUserReferralMapper.xml | 5 ++
13 files changed, 288 insertions(+), 51 deletions(-)
create mode 100644 src/main/java/com/sczx/order/mapper/BaseUserReferralMapper.java
create mode 100644 src/main/java/com/sczx/order/po/BaseUserReferralPO.java
create mode 100644 src/main/java/com/sczx/order/repository/BaseUserReferralRepo.java
create mode 100644 src/main/java/com/sczx/order/repository/impl/BaseUserReferralRepoImpl.java
create mode 100644 src/main/java/com/sczx/order/service/PayService.java
create mode 100644 src/main/java/com/sczx/order/service/impl/PayServiceImpl.java
create mode 100644 src/main/resources/mapper/BaseUserReferralMapper.xml
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 @@
+
+
+
+
+