WholesaleCodeController.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package com.yhlxj.web.controller.manage;
  2. import com.cyksj.common.exception.BusinessRuntimeException;
  3. import com.ejlchina.searcher.BeanSearcher;
  4. import com.ejlchina.searcher.SearchResult;
  5. import com.ejlchina.searcher.util.MapUtils;
  6. import com.yhlxj.dao.model.dto.Result;
  7. import com.yhlxj.dao.model.entity.WebWholesaleOrderDon;
  8. import com.yhlxj.dao.model.enums.GatewayResponse;
  9. import com.yhlxj.dao.model.request.AlipayOrderDonReq;
  10. import com.yhlxj.dao.model.request.WebOrderPayRequest;
  11. import com.yhlxj.dao.model.response.AliPayTradeStatus;
  12. import com.yhlxj.dao.model.view.WebWholesaleCodeDetailView;
  13. import com.yhlxj.dao.model.view.WebWholesaleOrderView;
  14. import com.yhlxj.service.order.WebWholesaleOrderDonService;
  15. import com.yhlxj.web.util.StpUserUtil;
  16. import com.yhlxj.web.util.StpWholesaleUtil;
  17. import lombok.RequiredArgsConstructor;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.springframework.validation.annotation.Validated;
  20. import org.springframework.web.bind.annotation.*;
  21. import javax.servlet.http.HttpServletRequest;
  22. import java.util.HashMap;
  23. import java.util.Map;
  24. import java.util.Set;
  25. /**
  26. * 项目名: yhlxj2
  27. * 文件名: WholesaleCodeController
  28. * 创建者: JavaZou
  29. * 创建时间:2025/6/4 16:31
  30. * 兑换码管理
  31. */
  32. @Slf4j
  33. @RequiredArgsConstructor
  34. @RestController
  35. @RequestMapping("/manage/wholesale/code")
  36. public class WholesaleCodeController {
  37. private final BeanSearcher beanSearcher;
  38. private final HttpServletRequest request;
  39. private final WebWholesaleOrderDonService webWholesaleOrderDonService;
  40. /**
  41. * 兑换码 明细
  42. */
  43. @GetMapping("/get/detail")
  44. public Result<SearchResult<WebWholesaleCodeDetailView>> getCodeDetail() {
  45. SearchResult<WebWholesaleCodeDetailView> search = beanSearcher.search(WebWholesaleCodeDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
  46. .field(WebWholesaleCodeDetailView::getStatus, WebWholesaleOrderDon.Status.complete.name())
  47. .build());
  48. return GatewayResponse.SUCCESS.newBuilder().toResult(search);
  49. }
  50. /**
  51. * 兑换码订单
  52. */
  53. @GetMapping("/get/order")
  54. public Result<SearchResult<WebWholesaleOrderView>> getOrders() {
  55. long wholesaleId = StpWholesaleUtil.getLoginIdAsLong();
  56. SearchResult<WebWholesaleOrderView> search = beanSearcher.search(WebWholesaleOrderView.class, MapUtils.flatBuilder(request.getParameterMap())
  57. .field(WebWholesaleOrderView::getWholesaleId, wholesaleId)
  58. .field(WebWholesaleOrderView::getStatus, WebWholesaleOrderDon.Status.complete.name())
  59. .build());
  60. return GatewayResponse.SUCCESS.newBuilder().toResult(search);
  61. }
  62. /**
  63. * 购买兑换码 预下单
  64. */
  65. @PostMapping("/post/submit")
  66. public Result<WebWholesaleOrderDon> submit(@Validated @RequestBody WebOrderPayRequest payRequest) throws Exception {
  67. final String methodName = "吊起兑换码预支付";
  68. long userId = StpWholesaleUtil.getLoginIdAsLong();
  69. payRequest.setUserId(userId);
  70. log.info("{}[start] params:{}", methodName, payRequest);
  71. WebWholesaleOrderDon orderDon = webWholesaleOrderDonService.submit(payRequest);
  72. return GatewayResponse.SUCCESS.newBuilder().toResult(orderDon);
  73. }
  74. /**
  75. * 支付宝支付
  76. */
  77. @PostMapping("/zfb/unified/pay")
  78. public Result<String> zfbUnifiedPay(@RequestBody @Validated AlipayOrderDonReq re) throws Exception {
  79. if (re.getType() == null) throw BusinessRuntimeException.getInstance("支付异常");
  80. String pay_body = webWholesaleOrderDonService.zfbUnifiedPay(re).getBody();
  81. return GatewayResponse.SUCCESS.newBuilder().toResult(pay_body);
  82. }
  83. /**
  84. * 支付宝回调
  85. */
  86. @PostMapping("/prepay/zfb/notify")
  87. public String aliPayNotify(HttpServletRequest request) throws Exception {
  88. ////将异步通知中收到的所有参数都存放到map中
  89. Map<String, String> params = convertRequestParamsToMap(request);
  90. String tradeStatus = params.get("trade_status");
  91. String orderNo = params.get("out_trade_no");
  92. if (AliPayTradeStatus.TRADE_SUCCESS.getStatus().equals(tradeStatus) || AliPayTradeStatus.TRADE_FINISHED.getStatus().equals(tradeStatus)) {
  93. log.info("支付宝商家订单号orderNo:{},status:{}开始回调", orderNo, tradeStatus);
  94. webWholesaleOrderDonService.aliPayNotify(params);
  95. } else {
  96. log.error("支付宝回调 error 状态不符合 成功或完成 status:{} ,orderNo:{}", tradeStatus, orderNo);
  97. return "fail";
  98. }
  99. return "success";
  100. }
  101. /**
  102. * 获取支付宝回调参数
  103. */
  104. private static Map<String, String> convertRequestParamsToMap(HttpServletRequest request) {
  105. Map<String, String> retMap = new HashMap<>();
  106. Set<Map.Entry<String, String[]>> entrySet = request.getParameterMap().entrySet();
  107. for (Map.Entry<String, String[]> entry : entrySet) {
  108. String name = entry.getKey();
  109. String[] values = entry.getValue();
  110. int valLen = values.length;
  111. if (valLen == 1) {
  112. retMap.put(name, values[0]);
  113. } else if (valLen > 1) {
  114. StringBuilder sb = new StringBuilder();
  115. for (String val : values) {
  116. sb.append(",").append(val);
  117. }
  118. retMap.put(name, sb.substring(1));
  119. } else {
  120. retMap.put(name, "");
  121. }
  122. }
  123. return retMap;
  124. }
  125. }