|
@@ -8,6 +8,7 @@ import com.alipay.api.domain.AlipayTradeRefundModel;
|
|
|
import com.alipay.api.request.AlipayTradeRefundRequest;
|
|
import com.alipay.api.request.AlipayTradeRefundRequest;
|
|
|
import com.alipay.api.response.AlipayTradeRefundResponse;
|
|
import com.alipay.api.response.AlipayTradeRefundResponse;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.cyksj.common.EnvCommonService;
|
|
import com.cyksj.common.EnvCommonService;
|
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
import com.cyksj.common.exception.BusinessRuntimeException;
|
|
|
import com.cyksj.common.snowflake.Sequence;
|
|
import com.cyksj.common.snowflake.Sequence;
|
|
@@ -29,6 +30,7 @@ import com.cyksj.model.request.SpecialPayCreateReq;
|
|
|
import com.cyksj.model.request.OrderAttach;
|
|
import com.cyksj.model.request.OrderAttach;
|
|
|
import com.cyksj.model.response.AliPayTradeStatus;
|
|
import com.cyksj.model.response.AliPayTradeStatus;
|
|
|
import com.cyksj.model.response.SpecialPayCreateRep;
|
|
import com.cyksj.model.response.SpecialPayCreateRep;
|
|
|
|
|
+import com.cyksj.model.response.SpecialMemberInfoRep;
|
|
|
import com.cyksj.service.pay.AliPayCommonService;
|
|
import com.cyksj.service.pay.AliPayCommonService;
|
|
|
import com.cyksj.service.special.SpecialPayService;
|
|
import com.cyksj.service.special.SpecialPayService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
@@ -61,14 +63,14 @@ public class SpecialPayServiceImpl implements SpecialPayService {
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
- public void refundOrder(Long userId, String orderNo) throws Exception {
|
|
|
|
|
|
|
+ public void refundOrder(String orderNo) throws Exception {
|
|
|
SpecialPayOrder order = orderMapper.selectOne(Wrappers.lambdaQuery(SpecialPayOrder.class)
|
|
SpecialPayOrder order = orderMapper.selectOne(Wrappers.lambdaQuery(SpecialPayOrder.class)
|
|
|
- .eq(SpecialPayOrder::getOrderNo, orderNo).eq(SpecialPayOrder::getUserId, userId).last("limit 1 for update"));
|
|
|
|
|
|
|
+ .eq(SpecialPayOrder::getOrderNo, orderNo).last("limit 1 for update"));
|
|
|
if (order == null) throw BusinessRuntimeException.getInstance("订单不存在");
|
|
if (order == null) throw BusinessRuntimeException.getInstance("订单不存在");
|
|
|
if (order.getStatus() == SpecialPayOrder.Status.REFUNDED) return;
|
|
if (order.getStatus() == SpecialPayOrder.Status.REFUNDED) return;
|
|
|
if (order.getStatus() != SpecialPayOrder.Status.PAID || StrUtil.isBlank(order.getAlipayTradeNo())) throw BusinessRuntimeException.getInstance("当前订单状态不支持退款");
|
|
if (order.getStatus() != SpecialPayOrder.Status.PAID || StrUtil.isBlank(order.getAlipayTradeNo())) throw BusinessRuntimeException.getInstance("当前订单状态不支持退款");
|
|
|
SpecialMemberEntitlement entitlement = entitlementMapper.selectOne(Wrappers.lambdaQuery(SpecialMemberEntitlement.class)
|
|
SpecialMemberEntitlement entitlement = entitlementMapper.selectOne(Wrappers.lambdaQuery(SpecialMemberEntitlement.class)
|
|
|
- .eq(SpecialMemberEntitlement::getUserId, userId).last("limit 1 for update"));
|
|
|
|
|
|
|
+ .eq(SpecialMemberEntitlement::getUserId, order.getUserId()).last("limit 1 for update"));
|
|
|
if (entitlement != null && !order.getId().equals(entitlement.getLastOrderId())) throw BusinessRuntimeException.getInstance("存在后续会员订单,暂不支持自动退款");
|
|
if (entitlement != null && !order.getId().equals(entitlement.getLastOrderId())) throw BusinessRuntimeException.getInstance("存在后续会员订单,暂不支持自动退款");
|
|
|
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
|
|
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
|
|
|
model.setTradeNo(order.getAlipayTradeNo());
|
|
model.setTradeNo(order.getAlipayTradeNo());
|
|
@@ -80,7 +82,20 @@ public class SpecialPayServiceImpl implements SpecialPayService {
|
|
|
AlipayTradeRefundResponse response = AliPayClientFactory.getAlipayClient(order.getShopId()).execute(refundRequest);
|
|
AlipayTradeRefundResponse response = AliPayClientFactory.getAlipayClient(order.getShopId()).execute(refundRequest);
|
|
|
if (response == null || !response.isSuccess()) throw BusinessRuntimeException.getInstance("支付宝退款失败");
|
|
if (response == null || !response.isSuccess()) throw BusinessRuntimeException.getInstance("支付宝退款失败");
|
|
|
if (orderMapper.markRefunded(order.getId()) != 1) throw BusinessRuntimeException.getInstance("退款状态更新失败");
|
|
if (orderMapper.markRefunded(order.getId()) != 1) throw BusinessRuntimeException.getInstance("退款状态更新失败");
|
|
|
- if (entitlement != null) entitlementMapper.rollbackIfLastOrder(userId, order.getDurationDays(), order.getId());
|
|
|
|
|
|
|
+ if (entitlement != null) entitlementMapper.rollbackIfLastOrder(order.getUserId(), order.getDurationDays(), order.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Page<SpecialPayOrder> getManageOrderPage(Integer start, Integer limit, String orderNo,
|
|
|
|
|
+ Long userId, String productCode, SpecialPayOrder.Status status) {
|
|
|
|
|
+ int pageNo = start == null || start < 1 ? 1 : start;
|
|
|
|
|
+ int pageSize = limit == null || limit < 1 ? 10 : Math.min(limit, 100);
|
|
|
|
|
+ return orderMapper.selectPage(new Page<>(pageNo, pageSize), Wrappers.lambdaQuery(SpecialPayOrder.class)
|
|
|
|
|
+ .like(StrUtil.isNotBlank(orderNo), SpecialPayOrder::getOrderNo, orderNo)
|
|
|
|
|
+ .eq(userId != null, SpecialPayOrder::getUserId, userId)
|
|
|
|
|
+ .eq(StrUtil.isNotBlank(productCode), SpecialPayOrder::getProductCode, productCode)
|
|
|
|
|
+ .eq(status != null, SpecialPayOrder::getStatus, status)
|
|
|
|
|
+ .orderByDesc(SpecialPayOrder::getId));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -161,6 +176,30 @@ public class SpecialPayServiceImpl implements SpecialPayService {
|
|
|
.last("limit 1"));
|
|
.last("limit 1"));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public SpecialMemberInfoRep getMemberInfo(Long userId) {
|
|
|
|
|
+ SpecialMemberEntitlement entitlement = getMemberEntitlement(userId);
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+ SpecialMemberInfoRep response = new SpecialMemberInfoRep();
|
|
|
|
|
+ response.setUserId(userId);
|
|
|
|
|
+ response.setMember(entitlement != null && entitlement.getExpireTime() != null
|
|
|
|
|
+ && entitlement.getExpireTime().after(now));
|
|
|
|
|
+ response.setExpireTime(entitlement == null ? null : entitlement.getExpireTime());
|
|
|
|
|
+ response.setRemainingDays(Boolean.TRUE.equals(response.getMember())
|
|
|
|
|
+ ? Math.max(1L, (entitlement.getExpireTime().getTime() - now.getTime() + 86400000L - 1) / 86400000L)
|
|
|
|
|
+ : 0L);
|
|
|
|
|
+ if (entitlement != null && entitlement.getLastOrderId() != null && entitlement.getLastOrderId() > 0) {
|
|
|
|
|
+ SpecialPayOrder lastOrder = orderMapper.selectById(entitlement.getLastOrderId());
|
|
|
|
|
+ if (lastOrder != null && userId.equals(lastOrder.getUserId())) {
|
|
|
|
|
+ response.setLastOrderNo(lastOrder.getOrderNo());
|
|
|
|
|
+ response.setProductCode(lastOrder.getProductCode());
|
|
|
|
|
+ response.setProductName(lastOrder.getSubject());
|
|
|
|
|
+ response.setLastOrderStatus(lastOrder.getStatus());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return response;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
public void handleAlipayNotify(Map<String, String> params) throws Exception {
|
|
public void handleAlipayNotify(Map<String, String> params) throws Exception {
|