ExternalController.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.cyksj.web.controller.external;
  2. import cn.hutool.core.date.DateTime;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.baomidou.mybatisplus.core.toolkit.Assert;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.cyksj.common.constant.Constant;
  8. import com.cyksj.common.exception.BusinessRuntimeException;
  9. import com.cyksj.dto.Result;
  10. import com.cyksj.enums.GatewayResponse;
  11. import com.cyksj.mapper.GoodsDonMapper;
  12. import com.cyksj.mapper.GoodsDonSkuMapper;
  13. import com.cyksj.mapper.OrderDonMapper;
  14. import com.cyksj.mapper.manage.exchange.ExchangeCodeMapper;
  15. import com.cyksj.model.entity.ExchangeCode;
  16. import com.cyksj.model.entity.GoodsDon;
  17. import com.cyksj.model.entity.GoodsDonSku;
  18. import com.cyksj.model.entity.OrderDon;
  19. import com.cyksj.model.request.ExchangeCodeReq;
  20. import com.cyksj.model.views.ExternalExchangeCodeView;
  21. import com.cyksj.service.exchange.ExchangeCodeService;
  22. import com.cyksj.service.order.OrderCommonService;
  23. import com.ejlchina.searcher.BeanSearcher;
  24. import com.ejlchina.searcher.SearchResult;
  25. import com.ejlchina.searcher.util.MapUtils;
  26. import lombok.RequiredArgsConstructor;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import org.springframework.web.bind.annotation.*;
  29. import javax.servlet.http.HttpServletRequest;
  30. /**
  31. * 项目名: yhlxj
  32. * 文件名: ExternalController
  33. * 创建者: JavaZou
  34. * 创建时间:2024/6/11 15:01
  35. */
  36. @RestController
  37. @RequestMapping("/external/app")
  38. @RequiredArgsConstructor
  39. public class ExternalController {
  40. private final HttpServletRequest request;
  41. private final BeanSearcher beanSearcher;
  42. private final ExchangeCodeMapper exchangeCodeMapper;
  43. private final OrderDonMapper orderDonMapper;
  44. private final OrderCommonService orderCommonService;
  45. private final GoodsDonSkuMapper skuMapper;
  46. private final GoodsDonMapper goodsDonMapper;
  47. private final ExchangeCodeService exchangeCodeService;
  48. /**
  49. * 知乎 特殊镜像规格 兑换码列表
  50. */
  51. @GetMapping("/get/mirror")
  52. public Result<SearchResult<ExternalExchangeCodeView>> getMirror() {
  53. //目前只展示规格id 444 GPT基础镜像2月
  54. Long showSkuId = 444l;
  55. SearchResult<ExternalExchangeCodeView> search = beanSearcher.search(ExternalExchangeCodeView.class, MapUtils.flatBuilder(request.getParameterMap())
  56. .field(ExternalExchangeCodeView::getSkuId, showSkuId)
  57. .build());
  58. return GatewayResponse.SUCCESS.newBuilder().toResult(search);
  59. }
  60. /**
  61. * 退款 成功 重新生成兑换码
  62. */
  63. @PutMapping("/refund/{id}")
  64. @Transactional(rollbackFor = Throwable.class)
  65. public Result<String> refund(@PathVariable Long id) {
  66. ExchangeCode exchangeCode = exchangeCodeMapper.selectById(id);
  67. Assert.notNull(exchangeCode, "系统异常");
  68. if (!exchangeCode.getUseStatus()) {
  69. throw BusinessRuntimeException.getInstance("兑换码未使用");
  70. }
  71. if (DateTime.now().after(DateUtil.offsetDay(exchangeCode.getUseTime(), 1))) {
  72. throw BusinessRuntimeException.getInstance("用户使用超过24小时不可退款");
  73. }
  74. if (StrUtil.equals(exchangeCode.getOrderStatus(), "refund")) {
  75. throw BusinessRuntimeException.getInstance("兑换码已退");
  76. }
  77. OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
  78. .eq(OrderDon::getExCode, exchangeCode.getCode())
  79. .notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
  80. .last("limit 1"));
  81. if (orderDon != null) {
  82. //将mirror车票清空
  83. orderDon.setStatus(OrderDon.Status.refund);
  84. orderDonMapper.updateById(orderDon);
  85. exchangeCode.setOrderStatus("refund");
  86. exchangeCodeMapper.updateById(exchangeCode);
  87. //虚物订单退款,清出车队,车票变为已过期
  88. GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
  89. GoodsDonSku sku = skuMapper.selectById(orderDon.getSkuId());
  90. orderCommonService.clearUnrealGoodsDetail(orderDon, goodsDon.getType(), sku);
  91. //重新生成兑换码
  92. ExchangeCodeReq exchangeCodeReq = new ExchangeCodeReq();
  93. exchangeCodeReq.setNumber(1);
  94. exchangeCodeReq.setGoodsId(orderDon.getGoodsId());
  95. exchangeCodeReq.setSkuId(orderDon.getSkuId());
  96. exchangeCodeService.createExchangeCode(exchangeCodeReq);
  97. }
  98. return GatewayResponse.SUCCESS.newBuilder().toResult();
  99. }
  100. }