ExternalController.java 5.0 KB

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