Browse Source

知乎兑换码列表;兑换码退款

zoujiajian 2 years ago
parent
commit
8cbbf30316

+ 83 - 0
netflix-dao/src/main/java/com/cyksj/model/views/ExternalExchangeCodeView.java

@@ -0,0 +1,83 @@
+package com.cyksj.model.views;
+
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ExternalExchangeCodeView
+ * 创建者: JavaZou
+ * 创建时间:2024/6/11 15:02
+ */
+@Getter
+@Setter
+@SearchBean(tables = "exchange_code ec left join user u on u.id = ec.user_id" +
+		" left join goods_don gd on ec.goods_id = gd.id" +
+		" left join goods_don_sku gdk on gdk.id = ec.sku_id",
+		where = "ec.type = 0",
+		orderBy = "ec.id desc")
+public class ExternalExchangeCodeView {
+	@DbField("ec.id")
+	private Long id;
+
+	@DbField("ec.code")
+	private String code;
+
+	@DbField("ec.goods_id")
+	private Long goodsId;
+
+	@DbField("ec.sku_id")
+	private Long skuId;
+
+	/**
+	 * 平台名称
+	 */
+	@DbField("gd.title")
+	private String title;
+
+	/**
+	 * 规格名称,金额
+	 */
+	@DbField("gdk.spec_val")
+	private String specVal;
+
+	/**
+	 * 使用状态
+	 */
+	@DbField("ec.use_status")
+	private Boolean useStatus;
+
+	/**
+	 * 订单状态
+	 */
+	@DbField("ec.order_status")
+	private String orderStatus;
+
+	/**
+	 * 使用时间
+	 */
+	@DbField("ec.use_time")
+	private Date useTime;
+
+	/**
+	 * 使用人id
+	 */
+	@DbField("ec.user_id")
+	private Long userId;
+
+	/**
+	 * 用户昵称
+	 */
+	@DbField("u.nickname")
+	private String nickName;
+
+	/**
+	 * 生成日期
+	 */
+	@DbField("ec.created_time")
+	private Date createdTime;
+}

+ 115 - 0
netflix-web/src/main/java/com/cyksj/web/controller/external/ExternalController.java

@@ -0,0 +1,115 @@
+package com.cyksj.web.controller.external;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.cyksj.common.constant.Constant;
+import com.cyksj.common.exception.BusinessRuntimeException;
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.GoodsDonMapper;
+import com.cyksj.mapper.GoodsDonSkuMapper;
+import com.cyksj.mapper.OrderDonMapper;
+import com.cyksj.mapper.manage.exchange.ExchangeCodeMapper;
+import com.cyksj.model.entity.ExchangeCode;
+import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.GoodsDonSku;
+import com.cyksj.model.entity.OrderDon;
+import com.cyksj.model.request.ExchangeCodeReq;
+import com.cyksj.model.views.ExternalExchangeCodeView;
+import com.cyksj.service.exchange.ExchangeCodeService;
+import com.cyksj.service.order.OrderCommonService;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: ExternalController
+ * 创建者: JavaZou
+ * 创建时间:2024/6/11 15:01
+ */
+@RestController
+@RequestMapping("/external/app")
+@RequiredArgsConstructor
+public class ExternalController {
+	private final HttpServletRequest request;
+
+	private final BeanSearcher beanSearcher;
+
+	private final ExchangeCodeMapper exchangeCodeMapper;
+
+	private final OrderDonMapper orderDonMapper;
+
+	private final OrderCommonService orderCommonService;
+
+	private final GoodsDonSkuMapper skuMapper;
+
+	private final GoodsDonMapper goodsDonMapper;
+
+	private final ExchangeCodeService exchangeCodeService;
+
+	/**
+	 * 知乎 特殊镜像规格 兑换码列表
+	 */
+	@GetMapping("/get/mirror")
+	public Result<SearchResult<ExternalExchangeCodeView>> getMirror() {
+		//目前只展示规格id 444 GPT基础镜像2月
+		Long showSkuId = 444l;
+		SearchResult<ExternalExchangeCodeView> search = beanSearcher.search(ExternalExchangeCodeView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(ExternalExchangeCodeView::getSkuId, showSkuId)
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+
+	/**
+	 * 退款 成功 重新生成兑换码
+	 */
+	@PutMapping("/refund/{id}")
+	@Transactional(rollbackFor = Throwable.class)
+	public Result<String> refund(@PathVariable Long id) {
+		ExchangeCode exchangeCode = exchangeCodeMapper.selectById(id);
+		Assert.notNull(exchangeCode, "系统异常");
+		if (!exchangeCode.getUseStatus()) {
+			throw BusinessRuntimeException.getInstance("兑换码未使用");
+		}
+		if (DateTime.now().after(DateUtil.offsetDay(exchangeCode.getUseTime(), 1))) {
+			throw BusinessRuntimeException.getInstance("用户使用超过24小时不可退款");
+		}
+		if (StrUtil.equals(exchangeCode.getOrderStatus(), "refund")) {
+			throw BusinessRuntimeException.getInstance("兑换码已退");
+		}
+		OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
+				.eq(OrderDon::getExCode, exchangeCode.getCode())
+				.notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
+				.last("limit 1"));
+		if (orderDon != null) {
+			//将mirror车票清空
+			orderDon.setStatus(OrderDon.Status.refund);
+			orderDonMapper.updateById(orderDon);
+
+			exchangeCode.setOrderStatus("refund");
+			exchangeCodeMapper.updateById(exchangeCode);
+
+			//虚物订单退款,清出车队,车票变为已过期
+			GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
+			GoodsDonSku sku = skuMapper.selectById(orderDon.getSkuId());
+			orderCommonService.clearUnrealGoodsDetail(orderDon, goodsDon.getType(), sku);
+
+			//重新生成兑换码
+			ExchangeCodeReq exchangeCodeReq = new ExchangeCodeReq();
+			exchangeCodeReq.setNumber(1);
+			exchangeCodeReq.setGoodsId(orderDon.getGoodsId());
+			exchangeCodeReq.setSkuId(orderDon.getSkuId());
+			exchangeCodeService.createExchangeCode(exchangeCodeReq);
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+}