Эх сурвалжийг харах

奈飞补偿领取GPT镜像标准月付

zoujiajian 9 сар өмнө
parent
commit
a53ed60aa1

+ 1 - 1
netflix-common/src/main/java/com/cyksj/common/constant/Constant.java

@@ -367,7 +367,7 @@ public interface Constant {
 	Long GPT_MIRROR_COMMON_SKU_ID = 426l;
 
 	/**
-	 * 大学生快递站 体验车票标准规格
+	 * 大学生快递站 体验车票标准月付规格
 	 */
 	Long GPT_MIRROR_SKU_ID = 429l;
 

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/NetflixCompensateReceivedRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.NetflixCompensateReceivedRecord;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: NetflixCompensateReceivedRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2025/11/4 10:46
+ */
+public interface NetflixCompensateReceivedRecordMapper extends BaseMapper<NetflixCompensateReceivedRecord> {
+}

+ 21 - 0
netflix-dao/src/main/java/com/cyksj/model/dto/NetflixRecoverReceivedGptConditionDto.java

@@ -0,0 +1,21 @@
+package com.cyksj.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: NetflixRecoverReceivedGptConditionDto
+ * 创建者: JavaZou
+ * 创建时间:2025/11/4 11:18
+ */
+@Getter
+@Setter
+public class NetflixRecoverReceivedGptConditionDto {
+	/**
+	 * 是否可领取
+	 */
+	private Boolean status;
+
+	private Long nfRelationId;
+}

+ 29 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/NetflixCompensateReceivedRecord.java

@@ -0,0 +1,29 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: NetflixCompensateReceivedRecord
+ * 创建者: JavaZou
+ * 创建时间:2025/11/4 10:44
+ * 奈飞补偿领取车票记录
+ */
+@Getter
+@Setter
+public class NetflixCompensateReceivedRecord extends BaseEntity{
+	private Long goodsId;
+
+	/**
+	 * 当时申请恢复的奈飞车票id
+	 */
+	private Long nfRelationId;
+
+	/**
+	 * 车票id
+	 */
+	private Long relationId;
+
+	private Long userId;
+}

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/relation/GroupRelationFrontService.java

@@ -1,6 +1,7 @@
 package com.cyksj.service.relation;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cyksj.model.dto.NetflixRecoverReceivedGptConditionDto;
 import com.cyksj.model.entity.GoodsDonSku;
 import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.entity.NetflixUserAccountStatusRecord;
@@ -119,4 +120,8 @@ public interface GroupRelationFrontService {
 	void netflixSubmitFrozen(ErrorNetflixChangeReq req);
 
 	String getSoraCode(Long userId, Long relationId);
+
+	NetflixRecoverReceivedGptConditionDto netflixGptMirrorCondition(long userId);
+
+	void netflixRecoverGetGptMirror(long userId);
 }

+ 98 - 0
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationFrontServiceImpl.java

@@ -31,6 +31,7 @@ import com.cyksj.mapper.sys.SysEmailMapper;
 import com.cyksj.mapper.vip.VipGoodsSkuMapper;
 import com.cyksj.mapper.vip.VipUserMapper;
 import com.cyksj.model.dto.ErrorNetflixChangeOtherSkuTicketDto;
+import com.cyksj.model.dto.NetflixRecoverReceivedGptConditionDto;
 import com.cyksj.model.dto.TicketChangeDto;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.AccountView;
@@ -232,6 +233,8 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 
 	private final UserRenewChangeTicketRecordMapper userRenewChangeTicketRecordMapper;
 
+	private final NetflixCompensateReceivedRecordMapper netflixCompensateReceivedRecordMapper;
+
 	@Override
 	public SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account, String orderNo, Integer cmt) {
 		User u = userMapper.selectById(userId);
@@ -2279,6 +2282,101 @@ public class GroupRelationFrontServiceImpl implements GroupRelationFrontService
 		return soraCode.getCode();
 	}
 
+	@Override
+	public NetflixRecoverReceivedGptConditionDto netflixGptMirrorCondition(long userId) {
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		//是否申请过奈飞恢复
+		NetflixUserAccountSubmitRecoverRecord last = netflixUserAccountSubmitRecoverRecordMapper.selectOne(Wrappers.lambdaQuery(NetflixUserAccountSubmitRecoverRecord.class).in(NetflixUserAccountSubmitRecoverRecord::getUserId, userIdList).orderByDesc(NetflixUserAccountSubmitRecoverRecord::getId).last("limit 1"));
+		NetflixRecoverReceivedGptConditionDto receivedGptConditionDto = new NetflixRecoverReceivedGptConditionDto();
+		if (last == null) {
+			receivedGptConditionDto.setStatus(Boolean.FALSE);
+			return receivedGptConditionDto;
+		}
+		//是否存在奈飞车票
+		List<RenewalView> tickets = beanSearcher.searchAll(RenewalView.class, MapUtils.builder()
+				.field(RenewalView::getUserId, userIdList).op(Operator.InList)
+				.field(RenewalView::getGoodsId, Constant.NETFLIX_GID)
+				.field(RenewalView::getExpiryTime, DateTime.now()).op(Operator.GreaterThan)
+				.onlySelect(RenewalView::getRelationId)
+				.build());
+		if (CollUtil.isEmpty(tickets)) {
+			receivedGptConditionDto.setStatus(Boolean.FALSE);
+			return receivedGptConditionDto;
+		}
+		//多张奈飞车票 不给领取
+		if (tickets.size() > 1) {
+			receivedGptConditionDto.setStatus(Boolean.FALSE);
+			return receivedGptConditionDto;
+		}
+		Long submitRelationId = last.getRelationId();
+		receivedGptConditionDto.setNfRelationId(submitRelationId);
+
+		RenewalView renewalView = tickets.get(0);
+		Long presentRelationId = renewalView.getRelationId();
+		//是否领取过 并且现在是否有效
+		NetflixCompensateReceivedRecord netflixCompensateReceivedRecord = netflixCompensateReceivedRecordMapper.selectOne(Wrappers.lambdaQuery(NetflixCompensateReceivedRecord.class).in(NetflixCompensateReceivedRecord::getUserId, userIdList).orderByDesc(NetflixCompensateReceivedRecord::getId));
+		if (netflixCompensateReceivedRecord != null) {
+			//是否 有效
+			Long gptRelationId = netflixCompensateReceivedRecord.getRelationId();
+			Integer expiryCount = groupsRelationMapper.selectCount(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getId, gptRelationId).in(GroupsRelation::getUserId, userIdList).gt(GroupsRelation::getExpiryTime, DateTime.now()));
+			if (expiryCount > 0) {
+				receivedGptConditionDto.setStatus(Boolean.FALSE);
+				return receivedGptConditionDto;
+			}
+			//领取后已过期
+			Long compensateReceivedRecordNfRelationId = netflixCompensateReceivedRecord.getNfRelationId();
+			//是否通过当前车票已经获取过 镜像车票
+			if (compensateReceivedRecordNfRelationId.equals(presentRelationId)) {
+				receivedGptConditionDto.setStatus(Boolean.FALSE);
+				return receivedGptConditionDto;
+			}
+			//恢复中 可获取
+			if (last.getStatus() == 0) {
+				receivedGptConditionDto.setStatus(Boolean.TRUE);
+				return receivedGptConditionDto;
+			}
+			//不是正常恢复 不可获取
+			if (last.getStatus() != 1) {
+				receivedGptConditionDto.setStatus(Boolean.FALSE);
+				return receivedGptConditionDto;
+			}
+
+			Long replaceRelationId = last.getReplaceRelationId();
+			//非同一张车票 存在更换过
+			if (!presentRelationId.equals(replaceRelationId)) {
+				receivedGptConditionDto.setStatus(Boolean.FALSE);
+				return receivedGptConditionDto;
+			}
+
+		}
+		receivedGptConditionDto.setStatus(Boolean.TRUE);
+		return receivedGptConditionDto;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Throwable.class)
+	public void netflixRecoverGetGptMirror(long userId) {
+		NetflixRecoverReceivedGptConditionDto receivedGptConditionDto = netflixGptMirrorCondition(userId);
+		if (receivedGptConditionDto.getStatus()) {
+			try {
+				NetflixCompensateReceivedRecord netflixCompensateReceivedRecord = new NetflixCompensateReceivedRecord();
+				netflixCompensateReceivedRecord.setUserId(userId);
+				netflixCompensateReceivedRecord.setNfRelationId(receivedGptConditionDto.getNfRelationId());
+				netflixCompensateReceivedRecord.setGoodsId(Constant.GPT_PLUS_GID);
+				netflixCompensateReceivedRecordMapper.insert(netflixCompensateReceivedRecord);
+
+				Long relationId = this.getTicket(userId, Constant.GPT_MIRROR_SKU_ID, Boolean.FALSE);
+				if (relationId == null) {
+					throw BusinessRuntimeException.getInstance("获取车票失败,请重新领取");
+				}
+				netflixCompensateReceivedRecord.setRelationId(relationId);
+				netflixCompensateReceivedRecordMapper.updateById(netflixCompensateReceivedRecord);
+			} catch (DuplicateKeyException e) {
+
+			}
+		}
+	}
+
 	private DistributePosterGoodsDetailView setGoodsPoster(RenewalView ticket, User user, List<Long> userIds) {
 		DistributePosterGoodsDetailView distributePosterGoodsDetailView = beanSearcher.searchFirst(DistributePosterGoodsDetailView.class, MapUtils.flatBuilder(request.getParameterMap())
 				.field(DistributePosterGoodsFrontView::getGoodsId, ticket.getGoodsId()).build());

+ 22 - 0
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -29,6 +29,7 @@ import com.cyksj.mapper.manage.form.QuestionnairePromotionMapper;
 import com.cyksj.mapper.shop.YhShopMapper;
 import com.cyksj.model.dto.DoubleVerifyDto;
 import com.cyksj.model.dto.GalaxyCoinPayConfigDto;
+import com.cyksj.model.dto.NetflixRecoverReceivedGptConditionDto;
 import com.cyksj.model.dto.QuestionnaireView;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.AccountView;
@@ -1548,4 +1549,25 @@ public class GroupRelationController {
         String soraCode = groupRelationFrontService.getSoraCode(userId, relationId);
         return GatewayResponse.SUCCESS.newBuilder().toResult(soraCode);
     }
+
+    /**
+     * 奈飞补偿
+     * 用户可领取GPT镜像标准月付情况
+     */
+    @GetMapping("/netflix/gptMirror/condition")
+    public Result<Boolean> netflixGptMirrorCondition() {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        NetflixRecoverReceivedGptConditionDto conditionDto = groupRelationFrontService.netflixGptMirrorCondition(userId);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(conditionDto.getStatus());
+    }
+
+    /**
+     * 奈飞申请恢复过的用户 领取GPT镜像标准月付
+     */
+    @GetMapping("/netflix/recover/get/gptMirror")
+    public Result<String> netflixRecoverGetGptMirror() {
+        long userId = StpUserUtil.getLoginIdAsLong();
+        groupRelationFrontService.netflixRecoverGetGptMirror(userId);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
 }