系统支付对接、避免返回过多数据

This commit is contained in:
2025-04-16 14:55:28 +08:00
parent f6f847e41c
commit 877f37b6f9
16 changed files with 275 additions and 547 deletions

View File

@@ -8,14 +8,13 @@ import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import com.ycwl.basic.model.pc.order.req.CreateBatchOrderReqVO;
import com.ycwl.basic.model.pc.order.req.CreateOrderReqVO;
import com.ycwl.basic.model.pc.order.req.OrderUpdateReq;
import com.ycwl.basic.model.pc.order.req.OrderAddReq;
import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
import com.ycwl.basic.model.wx.WxPayRespVO;
import com.ycwl.basic.utils.ApiResponse;
import java.util.List;
import java.util.Map;
/**
* @Author:longbinbin
@@ -63,7 +62,7 @@ public interface OrderService {
ApiResponse<PageInfo<OrderRespVO>> refundPageQuery(OrderReqQuery query);
ApiResponse<WxPayRespVO> createOrder(Long userId, CreateOrderReqVO orderAddReq) throws Exception;
ApiResponse<Map<String, Object>> createOrder(Long userId, CreateOrderReqVO orderAddReq) throws Exception;
ApiResponse<WxPayRespVO> createBatchOrder(Long userId, CreateBatchOrderReqVO batchOrderReqVO) throws Exception;
ApiResponse<Map<String, Object>> createBatchOrder(Long userId, CreateBatchOrderReqVO batchOrderReqVO) throws Exception;
}

View File

@@ -6,6 +6,7 @@ import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.scenic.req.ScenicAddOrUpdateReq;
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
import com.ycwl.basic.pay.adapter.IPayAdapter;
import com.ycwl.basic.storage.adapters.IStorageAdapter;
import com.ycwl.basic.utils.ApiResponse;
@@ -41,4 +42,6 @@ public interface ScenicService {
IStorageAdapter getScenicLocalStorageAdapter(Long scenicId);
IFaceBodyAdapter getScenicFaceBodyAdapter(Long scenicId);
IPayAdapter getScenicPayAdapter(Long scenicId);
}

View File

@@ -33,7 +33,6 @@ import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import com.ycwl.basic.model.pc.task.entity.TaskEntity;
import com.ycwl.basic.model.pc.video.entity.VideoEntity;
import com.ycwl.basic.model.wx.WXPayOrderReqVO;
import com.ycwl.basic.model.wx.WxPayRespVO;
import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.PriceRepository;
import com.ycwl.basic.repository.VideoRepository;
@@ -52,7 +51,9 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -167,11 +168,12 @@ public class OrderServiceImpl implements OrderService {
/**
* 发起支付
* @param order 订单
*
* @param order 订单
* @param orderItems 商品详情
* @return 支付请求结果
*/
private WxPayRespVO initiatePayment(OrderEntity order, List<OrderItemEntity> orderItems) throws Exception {
private Map<String, Object> initiatePayment(OrderEntity order, List<OrderItemEntity> orderItems) throws Exception {
WXPayOrderReqVO wxPayOrderReqVO = new WXPayOrderReqVO();
String goodsName = null;
if (orderItems.size() > 1) {
@@ -186,12 +188,6 @@ public class OrderServiceImpl implements OrderService {
goodsName = "景区照片包";
}
}
if (order.getPayPrice().compareTo(BigDecimal.ZERO) <= 0) {
// 0元支付
WxPayRespVO wxPayRespVO = new WxPayRespVO();
wxPayRespVO.setNeedPay(false);
return wxPayRespVO;
}
wxPayOrderReqVO.setOpenId(order.getOpenId())
.setMemberId(order.getMemberId())
.setOrderSn(order.getId())
@@ -199,7 +195,7 @@ public class OrderServiceImpl implements OrderService {
.setGoodsName(goodsName)
.setDescription(goodsName);
return wxPayService.createOrder(wxPayOrderReqVO);
return wxPayService.createOrder(order.getScenicId(), wxPayOrderReqVO);
}
@Override
@@ -360,7 +356,7 @@ public class OrderServiceImpl implements OrderService {
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResponse<WxPayRespVO> createOrder(Long userId, CreateOrderReqVO createOrderReqVO) throws Exception {
public ApiResponse<Map<String, Object>> createOrder(Long userId, CreateOrderReqVO createOrderReqVO) throws Exception {
IsBuyRespVO isBuy = orderBiz.isBuy(userId, createOrderReqVO.getScenicId(), createOrderReqVO.getGoodsType(), createOrderReqVO.getGoodsId());
if (isBuy.isBuy()) {
return ApiResponse.fail("您已购买此内容,无需重复购买!");
@@ -442,16 +438,18 @@ public class OrderServiceImpl implements OrderService {
}
if (order.getPayPrice().compareTo(BigDecimal.ZERO) <= 0) {
orderBiz.paidOrder(order.getId());
return ApiResponse.success(new WxPayRespVO());
HashMap<String, Object> data = new HashMap<>();
data.put("needPay", false);
return ApiResponse.success(data);
} else {
WxPayRespVO wxPayRespVO = initiatePayment(order, orderItems);
Map<String, Object> wxPayRespVO = initiatePayment(order, orderItems);
return ApiResponse.success(wxPayRespVO);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public ApiResponse<WxPayRespVO> createBatchOrder(Long userId, CreateBatchOrderReqVO batchOrderReqVO) throws Exception {
public ApiResponse<Map<String, Object>> createBatchOrder(Long userId, CreateBatchOrderReqVO batchOrderReqVO) throws Exception {
PriceConfigEntity priceConfig = priceRepository.getPriceConfigByScenicTypeGoods(batchOrderReqVO.getScenicId(), batchOrderReqVO.getType(), batchOrderReqVO.getGoodsId());
if (priceConfig == null) {
return ApiResponse.fail("该套餐暂未开放购买");
@@ -504,9 +502,11 @@ public class OrderServiceImpl implements OrderService {
}
if (order.getPayPrice().equals(BigDecimal.ZERO)) {
orderBiz.paidOrder(order.getId());
return ApiResponse.success(new WxPayRespVO());
HashMap<String, Object> data = new HashMap<>();
data.put("needPay", false);
return ApiResponse.success(data);
} else {
WxPayRespVO wxPayRespVO = initiatePayment(order, orderItems);
Map<String, Object> wxPayRespVO = initiatePayment(order, orderItems);
return ApiResponse.success(wxPayRespVO);
}
}

View File

@@ -12,6 +12,8 @@ import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.scenic.req.ScenicAddOrUpdateReq;
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO;
import com.ycwl.basic.pay.PayFactory;
import com.ycwl.basic.pay.adapter.IPayAdapter;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.service.pc.ScenicService;
import com.ycwl.basic.service.task.TaskFaceService;
@@ -106,6 +108,7 @@ public class ScenicServiceImpl implements ScenicService {
scenicRepository.clearCache(id);
scenicFaceBodyAdapterMap.remove(id);
scenicStorageAdapterMap.remove(id);
scenicPayAdapterMap.remove(id);
return ApiResponse.success(true);
}else {
return ApiResponse.fail("景区删除失败");
@@ -200,6 +203,7 @@ public class ScenicServiceImpl implements ScenicService {
scenicStorageAdapterMap.remove(config.getScenicId());
scenicTmpStorageAdapterMap.remove(config.getScenicId());
scenicLocalStorageAdapterMap.remove(config.getScenicId());
scenicPayAdapterMap.remove(config.getScenicId());
}
@@ -276,4 +280,20 @@ public class ScenicServiceImpl implements ScenicService {
return adapter;
});
}
private static final Map<Long, IPayAdapter> scenicPayAdapterMap = new ConcurrentHashMap<>();
@Override
public IPayAdapter getScenicPayAdapter(Long scenicId) {
return scenicPayAdapterMap.computeIfAbsent(scenicId, (key) -> {
IPayAdapter adapter;
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(scenicId);
if (scenicConfig != null && scenicConfig.getPayType() != null) {
adapter = PayFactory.getAdapter(scenicConfig.getPayType());
adapter.loadConfig(JSONObject.parseObject(scenicConfig.getPayConfigJson(), Map.class));
} else {
adapter = PayFactory.use();
}
return adapter;
});
}
}