Browse Source

奈飞异常账号列表 以及恢复账号

zoujiajian 1 năm trước cách đây
mục cha
commit
8eecafa832

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

@@ -26,4 +26,9 @@ public class NetflixUserAccountSubmitRecoverRecord extends BaseEntity{
 	 * 0未更换 1.替换成功 2.车票失效
 	 */
 	private Integer status;
+
+	/**
+	 * 替换后车票id
+	 */
+	private Long replaceRelationId;
 }

+ 1 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserTicketClearedRecord.java

@@ -65,6 +65,7 @@ public class UserTicketClearedRecord extends BaseEntity{
 		manual("手动清除"),
 		refund("退款"),
 		vip_refund("退款"),
+		ticket_replace("替换车票")
 		;
 		String desc;
 

+ 63 - 0
netflix-dao/src/main/java/com/cyksj/model/views/NetflixErrorRecoverView.java

@@ -0,0 +1,63 @@
+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
+ * 文件名: NetflixErrorRecoverView
+ * 创建者: JavaZou
+ * 创建时间:2025/6/24 13:45
+ */
+@Getter
+@Setter
+@SearchBean(tables = "netflix_user_account_submit_recover_record ar left join goods_don_sku sku on sku.id = ar.sku_id" +
+		" left join goods_don g on g.id = sku.goods_id" +
+		" left join user u on u.id = ar.user_id")
+public class NetflixErrorRecoverView {
+	@DbField("ar.id")
+	private Long id;
+
+	@DbField("ar.user_id")
+	private Long userId;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("ar.account")
+	private String account;
+
+	@DbField("g.id")
+	private Long goodsId;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("ar.sku_id")
+	private Long skuId;
+
+	@DbField("sku.spec_val")
+	private String specVal;
+
+	@DbField("ar.remain_day")
+	private Integer remainDay;
+
+	@DbField("ar.created_time")
+	private Date createdTime;
+
+	/**
+	 * 0未更换 1.替换成功 2.车票失效
+	 */
+	@DbField("ar.status")
+	private Integer status;
+
+	/**
+	 * 位置
+	 */
+	@DbField("select count(1) + 1 from netflix_user_account_submit_recover_record ar2 where ar2.created_time > ar.created_time and ar2.status = 0")
+	private Integer indx;
+}

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/mange/CmsGroupService.java

@@ -10,7 +10,7 @@ import com.cyksj.model.request.ReplaceTripsAccountReq;
  */
 public interface CmsGroupService extends IService<GroupsTrips> {
 
-    GroupsTrips issuance(GroupsTrips groups, String verifyCodes);
+    GroupsTrips issuance(GroupsTrips groups, String verifyCodes, Boolean isReover);
 
     void close(Long groupId);
 

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java

@@ -431,7 +431,7 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 		GroupsTrips groupsTrips = new GroupsTrips();
 		groupsTrips.setSkuId(skuId);
 		groupsTrips.setAccountId(accountId);
-		cmsGroupService.issuance(groupsTrips, null);
+		cmsGroupService.issuance(groupsTrips, null, false);
 	}
 
 	@Override

+ 49 - 1
netflix-service/src/main/java/com/cyksj/service/mange/group/CmsGroupServiceImpl.java

@@ -23,8 +23,10 @@ import com.cyksj.model.views.GroupsAccountView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.mange.AccountCommonService;
 import com.cyksj.service.mange.CmsGroupService;
+import com.cyksj.service.relation.GroupRelationClearService;
 import com.cyksj.service.relation.GroupsRelationNetflixService;
 import com.cyksj.service.sms.SmsService;
+import com.cyksj.service.user.UserBindRelationService;
 import com.cyksj.service.user.UserSysMsgNotifyService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.param.Operator;
@@ -86,11 +88,17 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
 
     private final UserMapper userMapper;
 
+    private final NetflixUserAccountSubmitRecoverRecordMapper netflixUserAccountSubmitRecoverRecordMapper;
+
+    private final GroupRelationClearService clearService;
+
+    private final UserBindRelationService userBindRelationService;
+
     private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
 
 
     @Override
-    public GroupsTrips issuance(GroupsTrips groups, String verifyCodes) {
+    public GroupsTrips issuance(GroupsTrips groups, String verifyCodes, Boolean isRecover) {
         GoodsDonSku sku = skuMapper.selectById(groups.getSkuId());
         if (sku == null) {
             throw new BusinessRuntimeException("该商品规格不存在!");
@@ -117,7 +125,15 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
             if (verifyCodeList != null && verifyCodeList.size() > 0 && verifyCodeList.size() >= i) {
                 relation.setVerifyCode(verifyCodeList.get(i - 1));
             }
+            NetflixUserAccountSubmitRecoverRecord recoverRecord = null;
+            if (sku.getGoodsId() == Constant.NETFLIX_GID) {
+                recoverRecord = updateRelationIfRecoverTicket(isRecover, sku, relation);
+            }
             relationMapper.insert(relation);
+            if (recoverRecord != null) {
+                recoverRecord.setReplaceRelationId(relation.getId());
+                netflixUserAccountSubmitRecoverRecordMapper.updateById(recoverRecord);
+            }
         }
         Integer alertCount = alertMapper.selectCount(Wrappers.lambdaQuery(GroupsRelationAlert.class)
                 .eq(GroupsRelationAlert::getSkuId, sku.getId())
@@ -534,4 +550,36 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
             }
         }
     }
+
+
+    /**
+     * 奈飞异常恢复车票
+     */
+    private NetflixUserAccountSubmitRecoverRecord updateRelationIfRecoverTicket(Boolean isRecover, GoodsDonSku sku, GroupsRelation relation) {
+        if (isRecover != null && isRecover) {
+            NetflixUserAccountSubmitRecoverRecord recoverRecord = netflixUserAccountSubmitRecoverRecordMapper.selectOne(Wrappers.lambdaQuery(NetflixUserAccountSubmitRecoverRecord.class)
+                    .eq(NetflixUserAccountSubmitRecoverRecord::getSkuId, sku.getId())
+                    .eq(NetflixUserAccountSubmitRecoverRecord::getStatus, 0)
+                    .orderByAsc(NetflixUserAccountSubmitRecoverRecord::getCreatedTime)
+                    .last("limit 1"));
+            if (recoverRecord != null) {
+                relation.setUserId(recoverRecord.getUserId());
+                relation.setStatus(GroupsRelation.Status.validity);
+                relation.setStartTime(DateTime.now());
+                relation.setExpiryTime(DateUtil.offsetDay(relation.getStartTime(), recoverRecord.getRemainDays().intValue()));
+                //清除车票
+                List<Long> userIdList = userBindRelationService.getRelationUserIdList(recoverRecord.getUserId(), null);
+                GroupsRelation clearRelation = relationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class)
+                        .eq(GroupsRelation::getId, recoverRecord.getRelationId())
+                        .in(GroupsRelation::getUserId, userIdList)
+                        .last("limit 1"));
+                if (clearRelation != null) {
+                    clearService.clearTicket(clearRelation, UserTicketClearedRecord.Source.ticket_replace);
+                }
+                recoverRecord.setStatus(1);
+                return recoverRecord;
+            }
+        }
+        return null;
+    }
 }

+ 3 - 3
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java

@@ -502,7 +502,7 @@ public class CmsAccountController {
 
 		    groupsTrips.setSkuId(account.getSkuId());
 		    groupsTrips.setAccountId(account.getId());
-		    cmsGroupService.issuance(groupsTrips, account.getVerifyCodes());
+		    cmsGroupService.issuance(groupsTrips, account.getVerifyCodes(), false);
 	    }
 
         return GatewayResponse.SUCCESS.newBuilder().toResult();
@@ -520,7 +520,7 @@ public class CmsAccountController {
 	 * 导入账号
 	 */
 	@PostMapping("/import/account/issuance")
-	public Result<String> importAccountAndIssuance(Long goodsId, Long skuId, MultipartFile file) throws Exception {
+	public Result<String> importAccountAndIssuance(Long goodsId, Long skuId, MultipartFile file, Boolean isRecover) throws Exception {
 		GoodsDonSkuView goodsDonSkuView = beanSearcher.searchFirst(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getGoodsId, goodsId).field(GoodsDonSkuView::getSkuId, skuId).build());
 		if (goodsDonSkuView == null) {
 			throw BusinessRuntimeException.getInstance("所选平台与规格不匹配");
@@ -587,7 +587,7 @@ public class CmsAccountController {
 					groupsTrips.setAvailableParkingNum(availableParkingNum);
 					groupsTrips.setSkuId(at.getSkuId());
 					groupsTrips.setAccountId(at.getId());
-					cmsGroupService.issuance(groupsTrips, null);
+					cmsGroupService.issuance(groupsTrips, null, isRecover);
 				}
 			}
 

+ 42 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/NetflixErrorRecoverController.java

@@ -0,0 +1,42 @@
+package com.cyksj.web.controller.manage.account;
+
+import com.cyksj.dto.Result;
+import com.cyksj.enums.GatewayResponse;
+import com.cyksj.model.views.NetflixErrorRecoverView;
+import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
+import com.ejlchina.searcher.util.MapUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * 项目名: yhlxj
+ * 文件名: NetflixErrorRecoverController
+ * 创建者: JavaZou
+ * 创建时间:2025/6/24 13:41
+ */
+@Slf4j
+@RequiredArgsConstructor
+@RequestMapping("/manage/netflix")
+@RestController
+public class NetflixErrorRecoverController {
+	private final BeanSearcher beanSearcher;
+
+	private final HttpServletRequest request;
+
+	/**
+	 * 奈飞恢复列表
+	 */
+	@GetMapping("/get/recover/list")
+	public Result<SearchResult<NetflixErrorRecoverView>> getRecoverList() {
+		SearchResult<NetflixErrorRecoverView> search = beanSearcher.search(NetflixErrorRecoverView.class, MapUtils.flatBuilder(request.getParameterMap())
+				.field(NetflixErrorRecoverView::getStatus, 0)
+				.build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
+}

+ 1 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/group/CmsGroupController.java

@@ -151,7 +151,7 @@ public class CmsGroupController {
     @Log(module = "发布车票/新增车队", businessType = BusinessType.POST, isSaveRequestData = true)
     public Result<GroupsTrips> add(@RequestBody GroupsTrips groups){
 
-        GroupsTrips groupsTrips = groupService.issuance(groups, null);
+        GroupsTrips groupsTrips = groupService.issuance(groups, null, false);
 
         return GatewayResponse.SUCCESS.newBuilder().toResult(groupsTrips);
     }