Pārlūkot izejas kodu

知乎兑换码列表

zoujiajian 2 gadi atpakaļ
vecāks
revīzija
7f3bcfb003

+ 5 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ExchangeCode.java

@@ -31,6 +31,11 @@ public class ExchangeCode extends BaseEntity{
 	 */
 	private Boolean useStatus;
 
+	/**
+	 * 订单状态
+	 */
+	private String orderStatus;
+
 	/**
 	 * 使用时间
 	 */

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

@@ -0,0 +1,77 @@
+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("ec.created_time")
+	private Date createdTime;
+}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/distribute/equipment/impl/EquipmentDistributeFrontServiceImpl.java

@@ -70,7 +70,7 @@ public class EquipmentDistributeFrontServiceImpl implements EquipmentDistributeF
 		}
 		if (groupsRelationView == null) {
 			//领取权益时,没有车票的用户自动上车,获得对应车票
-			GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(null, goodsDonSku, userId, null, OrderDon.Type.EQUIPMENT);
+			GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(null, goodsDonSku, userId, null, OrderDon.Type.EQUIPMENT, null);
 			relationId = relation.getId();
 			orderId = relation.getOrderId();
 		} else {

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/exchange/ExchangeCodeService.java

@@ -37,7 +37,7 @@ public interface ExchangeCodeService extends IService<ExchangeCode> {
 	/**
 	 * 获取车票
 	 */
-	GroupsRelation getGroupTripsTicket(Long yhsId, GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye);
+	GroupsRelation getGroupTripsTicket(Long yhsId, GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye, String exCode);
 
 	/**
 	 * 获取车票车位

+ 3 - 2
netflix-service/src/main/java/com/cyksj/service/exchange/impl/ExchangeCodeServiceImpl.java

@@ -179,7 +179,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			throw BusinessRuntimeException.getInstance("您的订单已退款,无法使用该兑换码");
 		}
 		//生成车票订单
-		getGroupTripsTicket(yhsId, goodsDonSkuMapper.selectById(exchangeCode.getSkuId()), userId, orderDon, OrderDon.Type.EX_CODE);
+		getGroupTripsTicket(yhsId, goodsDonSkuMapper.selectById(exchangeCode.getSkuId()), userId, orderDon, OrderDon.Type.EX_CODE, exchangeCodeTicket.getCode());
 		log.info("用户:{}通过兑换码:{}兑换成功", userId, exchangeCodeTicket.getCode());
 		if (exchangeCode.getType() == 1) {
 			luckyDrawRecordMapper.updateExCodeStatus(userId, exchangeCode.getCode());
@@ -237,7 +237,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 	 * 获取车位
 	 */
 	@Override
-	public GroupsRelation getGroupTripsTicket(Long yhsId, GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye) {
+	public GroupsRelation getGroupTripsTicket(Long yhsId, GoodsDonSku sku, Long userId, OrderDon exCodeOrderDon, OrderDon.Type orderDonTye, String exCode) {
 		if (sku == null) {
 			throw BusinessRuntimeException.getInstance("规格不存在,请联系客服");
 		}
@@ -304,6 +304,7 @@ public class ExchangeCodeServiceImpl extends ServiceImpl<ExchangeCodeMapper, Exc
 			//默认数量为1
 			orderDon.setNum(1);
 			orderDon.setGoodsId(sku.getGoodsId());
+			orderDon.setExCode(exCode);
 			orderDon.setStatus(goodsDon.getType() == 1 && goodsDon.getSecondType() == 2 ? OrderDon.Status.complete : OrderDon.Status.hasPayment);
 			if (relation.getStartTime() == null || relation.getExpiryTime() == null) {
 				orderDon.setStatus(OrderDon.Status.hasPayment);

+ 2 - 0
netflix-service/src/main/java/com/cyksj/service/mange/CmsOrderDonService.java

@@ -57,4 +57,6 @@ public interface CmsOrderDonService extends IService<OrderDon> {
 	void refundPriceDiffer(OrderRefundReq orderRefundReq) throws Exception;
 
 	void clearBalanceToRefundMoney(OrderBalanceRefundReq refundReq) throws Exception;
+
+	void delMirrorUser(Long goodsId, Long relationId);
 }

+ 1 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -1319,6 +1319,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
     /**
      * 删除gptUser
      */
+    @Override
     public void delMirrorUser(Long goodsId, Long relationId) {
         //gpt镜像
         if (goodsId != null && goodsId == 18) {

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/UserRealOrderBenefitsImpl.java

@@ -76,7 +76,7 @@ public class UserRealOrderBenefitsImpl implements UserRealOrderBenefitsService {
 			if (CollUtil.isEmpty(relationViewList)) {
 				log.info("用户userId:{}未有skuId:{}车票,获取对应车票", userId, sku.getId());
 				//领取权益时,没有车票的用户自动上车,获得对应车票
-				GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(yhsId, sku, userId, null, OrderDon.Type.PAY_EQUIPMENT);
+				GroupsRelation relation = exchangeCodeService.getGroupTripsTicket(yhsId, sku, userId, null, OrderDon.Type.PAY_EQUIPMENT, null);
 //				//多给三天
 //				DateTime expiryTime = DateUtil.offsetDay(relation.getExpiryTime(), 3);
 //				groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)

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

@@ -0,0 +1,134 @@
+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.mange.CmsOrderDonService;
+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;
+
+	private final CmsOrderDonService cmsOrderDonService;
+
+	/**
+	 * 知乎 特殊镜像规格 兑换码列表
+	 */
+	@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) {
+			orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
+					.eq(OrderDon::getUserId, exchangeCode.getUserId())
+					.eq(OrderDon::getType, OrderDon.Type.EX_CODE)
+					.eq(OrderDon::getSkuId, exchangeCode.getSkuId())
+					.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);
+
+			//虚物订单退款,清出车队,车票变为已过期
+			try {
+				GoodsDon goodsDon = goodsDonMapper.selectById(orderDon.getGoodsId());
+				GoodsDonSku sku = skuMapper.selectById(orderDon.getSkuId());
+				orderCommonService.clearUnrealGoodsDetail(orderDon, goodsDon.getType(), sku);
+
+				//清除gtpUser
+				if (orderDon.getOrderType() == 1) {
+					cmsOrderDonService.delMirrorUser(goodsDon.getId(), orderDon.getRelationId());
+				}
+
+				//重新生成兑换码
+				ExchangeCodeReq exchangeCodeReq = new ExchangeCodeReq();
+				exchangeCodeReq.setNumber(1);
+				exchangeCodeReq.setGoodsId(orderDon.getGoodsId());
+				exchangeCodeReq.setSkuId(orderDon.getSkuId());
+				exchangeCodeService.createExchangeCode(exchangeCodeReq);
+			} catch (Exception e) {
+			}
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult();
+	}
+}