UserPayOrderBlockServiceImpl.java 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package com.cyksj.service.user.impl;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.alipay.api.AlipayApiException;
  4. import com.alipay.api.response.AlipayTradeQueryResponse;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import com.cyksj.common.exception.BusinessRuntimeException;
  8. import com.cyksj.mapper.UserPayOrderBlockMapper;
  9. import com.cyksj.model.entity.OrderDon;
  10. import com.cyksj.model.entity.UserPayOrderBlock;
  11. import com.cyksj.service.order.OrderDonService;
  12. import com.cyksj.service.user.UserBindRelationService;
  13. import com.cyksj.service.user.UserPayOrderBlockService;
  14. import com.cyksj.service.wechat.WeChatService;
  15. import lombok.RequiredArgsConstructor;
  16. import org.springframework.stereotype.Service;
  17. import java.util.List;
  18. import java.util.Optional;
  19. /**
  20. * 项目名: yhlxj
  21. * 文件名: UserPayOrderBlockServiceImpl
  22. * 创建者: JavaZou
  23. * 创建时间:2023/12/13 16:41
  24. */
  25. @Service
  26. @RequiredArgsConstructor
  27. public class UserPayOrderBlockServiceImpl extends ServiceImpl<UserPayOrderBlockMapper, UserPayOrderBlock> implements UserPayOrderBlockService {
  28. private final OrderDonService orderDonService;
  29. private final WeChatService weChatService;
  30. private final UserBindRelationService userBindRelationService;
  31. @Override
  32. public void blockUserOrder(UserPayOrderBlock payOrderBlock) throws AlipayApiException {
  33. String orderNo = payOrderBlock.getOrderNo();
  34. OrderDon orderDon = orderDonService.getOne(Wrappers.lambdaQuery(OrderDon.class)
  35. .eq(OrderDon::getOrderNo, orderNo).last("limit 1"));
  36. if (orderDon == null) {
  37. throw BusinessRuntimeException.getInstance("该订单号不存在");
  38. }
  39. String buyerId = orderDon.getBuyerId();
  40. if (StrUtil.isEmpty(buyerId)) {
  41. Long userId = orderDon.getUserId();
  42. List<Long> relationUserIdList = userBindRelationService.getRelationUserIdList(userId, null);
  43. orderDon = orderDonService.getOne(Wrappers.lambdaQuery(OrderDon.class)
  44. .in(OrderDon::getUserId, relationUserIdList)
  45. .ne(OrderDon::getBuyerId, StrUtil.EMPTY)
  46. .last("limit 1"));
  47. if (orderDon != null) {
  48. buyerId = orderDon.getBuyerId();
  49. }
  50. if (StrUtil.isEmpty(buyerId)) {
  51. if (orderDon.getType() == OrderDon.Type.ALI_PAY) {
  52. AlipayTradeQueryResponse zfbOrderDetail = orderDonService.getZfbOrderDetail(orderDon.getShopId(), orderDon.getOrderNo());
  53. if (zfbOrderDetail != null) {
  54. buyerId = Optional.ofNullable(zfbOrderDetail.getBuyerUserId()).orElse(zfbOrderDetail.getBuyerOpenId());
  55. }
  56. }
  57. }
  58. }
  59. if (StrUtil.isEmpty(buyerId)) {
  60. throw BusinessRuntimeException.getInstance("未找到对应订单号对应用户支付账号id");
  61. }
  62. int count = count(Wrappers.lambdaQuery(UserPayOrderBlock.class)
  63. .eq(UserPayOrderBlock::getBuyerId, buyerId));
  64. if (count > 0) {
  65. throw BusinessRuntimeException.getInstance("已拉给该账号");
  66. }
  67. UserPayOrderBlock userPayOrderBlock = new UserPayOrderBlock();
  68. userPayOrderBlock.setUserId(orderDon.getUserId());
  69. userPayOrderBlock.setOrderNo(orderNo);
  70. userPayOrderBlock.setBuyerId(buyerId);
  71. save(userPayOrderBlock);
  72. }
  73. }