Explorar el Código

独立会员订单导入代充列表

zoujiajian hace 1 año
padre
commit
52509d2582

+ 3 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/GptUserRechargeNumRecord.java

@@ -24,7 +24,9 @@ public class GptUserRechargeNumRecord extends BaseEntity{
 	private String operator;
 
 	/**
-	 * 次数 正为扣除 负为增加
+	 * 次数 正为增加 负为扣除
 	 */
 	private Integer num;
+
+	private String remark;
 }

+ 20 - 0
netflix-dao/src/main/java/com/cyksj/model/request/GptIndependentExportRechargeReq.java

@@ -0,0 +1,20 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: GptIndependentExportRechargeReq
+ * 创建者: JavaZou
+ * 创建时间:2025/8/8 14:17
+ */
+@Getter
+@Setter
+public class GptIndependentExportRechargeReq {
+	private String orderNo;
+
+	private Integer num;
+
+	private Long adminId;
+}

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/request/RechargeRemainNumReq.java

@@ -15,4 +15,6 @@ public class RechargeRemainNumReq {
 	private Long relationId;
 
 	private Integer num;
+
+	private String remark;
 }

+ 1 - 1
netflix-service/src/main/java/com/cyksj/server/recharge/impl/GptProxyRechargeServiceImpl.java

@@ -358,7 +358,7 @@ public class GptProxyRechargeServiceImpl implements GptProxyRechargeService {
 						.eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
 				//记录代充记录
 				if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
-					gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), 1, null);
+					gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), -1, null, "自动代充");
 					//修改对应订单状态
 					if (gptRechargeCardKey != null) {
 						Long orderId = gptRechargeCardKey.getOrderId();

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/chatgpt/GptUserRechargeRecordService.java

@@ -8,5 +8,5 @@ package com.cyksj.service.chatgpt;
  */
 public interface GptUserRechargeRecordService {
 
-	void recordGptUserRechargeNum(Long userId, Long relationId, String account, Integer num, String operator);
+	void recordGptUserRechargeNum(Long userId, Long relationId, String account, Integer num, String operator, String remark);
 }

+ 3 - 1
netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/GptUserRechargeRecordServiceImpl.java

@@ -18,8 +18,9 @@ import org.springframework.stereotype.Service;
 @Slf4j
 public class GptUserRechargeRecordServiceImpl implements GptUserRechargeRecordService {
 	private final GptUserRechargeNumRecordMapper gptUserRechargeNumRecordMapper;
+
 	@Override
-	public void recordGptUserRechargeNum(Long userId, Long relationId, String account, Integer num, String operator) {
+	public void recordGptUserRechargeNum(Long userId, Long relationId, String account, Integer num, String operator, String remark) {
 		//记录代充记录
 		GptUserRechargeNumRecord gptUserRechargeNumRecord = new GptUserRechargeNumRecord();
 		gptUserRechargeNumRecord.setUserId(userId);
@@ -27,6 +28,7 @@ public class GptUserRechargeRecordServiceImpl implements GptUserRechargeRecordSe
 		gptUserRechargeNumRecord.setAccount(account);
 		gptUserRechargeNumRecord.setNum(num);
 		gptUserRechargeNumRecord.setOperator(operator);
+		gptUserRechargeNumRecord.setRemark(remark);
 		gptUserRechargeNumRecordMapper.insert(gptUserRechargeNumRecord);
 	}
 }

+ 6 - 0
netflix-service/src/main/java/com/cyksj/service/mange/gpt/GptRechargeService.java

@@ -1,5 +1,7 @@
 package com.cyksj.service.mange.gpt;
 
+import com.cyksj.model.entity.GroupsRelation;
+import com.cyksj.model.request.GptIndependentExportRechargeReq;
 import com.cyksj.model.request.GroupsRelationRechargeReq;
 import com.cyksj.server.recharge.dto.TaskResult;
 import com.cyksj.server.recharge.dto.TokenParseResult;
@@ -16,4 +18,8 @@ public interface GptRechargeService {
 	String confirmRecharge(long adminId, GroupsRelationRechargeReq req);
 
 	TaskResult getTaskResult(String taskId);
+
+	void gptIndependentExportRecharge(GptIndependentExportRechargeReq rechargeReq);
+
+	GroupsRelation getOrderRelation(String orderNo);
 }

+ 87 - 5
netflix-service/src/main/java/com/cyksj/service/mange/gpt/impl/GptRechargeServiceImpl.java

@@ -14,6 +14,7 @@ import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.mapper.*;
 import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.model.entity.*;
+import com.cyksj.model.request.GptIndependentExportRechargeReq;
 import com.cyksj.model.request.GroupsRelationRechargeReq;
 import com.cyksj.redis.RedisService;
 import com.cyksj.server.recharge.dto.CardKeyValidationResult;
@@ -22,12 +23,15 @@ import com.cyksj.server.recharge.dto.TaskSubmitResult;
 import com.cyksj.server.recharge.dto.TokenParseResult;
 import com.cyksj.service.chatgpt.GptUserRechargeRecordService;
 import com.cyksj.service.mange.gpt.GptRechargeService;
+import com.cyksj.service.user.UserBindRelationService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 项目名: yhlxj11111111
@@ -57,6 +61,10 @@ public class GptRechargeServiceImpl implements GptRechargeService {
 
 	private final RedisService redisService;
 
+	private final UserBindRelationService userBindRelationService;
+
+	private final AccountMapper accountMapper;
+
 	private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
 
 
@@ -114,10 +122,10 @@ public class GptRechargeServiceImpl implements GptRechargeService {
 		}
 		GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
 		GoodsDonSku sku = skuMapper.selectById(groupsTrips.getSkuId());
-		//GPT 代充
-		if (sku.getGoodsId() != Constant.GPT_RECHARGE_GOODS_ID) {
-			throw BusinessRuntimeException.getInstance("车票类型错误");
-		}
+//		//GPT 代充
+//		if (sku.getGoodsId() != Constant.GPT_RECHARGE_GOODS_ID) {
+//			throw BusinessRuntimeException.getInstance("车票类型错误");
+//		}
 		Integer rechargeRemainNum = relation.getRechargeRemainNum();
 		if (rechargeRemainNum == null || rechargeRemainNum <= 0) {
 			throw BusinessRuntimeException.getInstance("剩余可代充次数为0");
@@ -232,6 +240,80 @@ public class GptRechargeServiceImpl implements GptRechargeService {
 		}
 	}
 
+	@Override
+	public void gptIndependentExportRecharge(GptIndependentExportRechargeReq rechargeReq) {
+		String orderNo = rechargeReq.getOrderNo();
+		OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getOrderNo, orderNo).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
+		if (orderDon == null) {
+			throw BusinessRuntimeException.getInstance("订单不存在或已退款");
+		}
+		//只支持GPT独立会员类型
+		List<Long> gptIdpSkuIds = skuMapper.selectList(Wrappers.lambdaQuery(GoodsDonSku.class).eq(GoodsDonSku::getGoodsId, Constant.GPT_PLUS_GID).eq(GoodsDonSku::getNum, 1)).stream().map(GoodsDonSku::getId).collect(Collectors.toList());
+		if (!gptIdpSkuIds.contains(orderDon.getSkuId())) {
+			throw BusinessRuntimeException.getInstance("只支持GPT独立会员类型");
+		}
+		Long relationId = orderDon.getRelationId();
+		Long userId = orderDon.getUserId();
+		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		GroupsRelation relation = relationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getId, relationId).in(GroupsRelation::getUserId, userIdList).gt(GroupsRelation::getExpiryTime, DateTime.now()).last("limit 1"));
+		if (relation == null) {
+			throw BusinessRuntimeException.getInstance("独立会员车票不存在或已过期");
+		}
+		if (relation.getRechargeStatus() != null) {
+			throw BusinessRuntimeException.getInstance("该笔订单号已导入");
+		}
+		Integer num = rechargeReq.getNum();
+		relation.setRechargeStatus(GroupsRelation.RechargeStatus.complete);
+		GoodsDonSku sku = skuMapper.selectById(orderDon.getSkuId());
+		Integer months = sku.getMonths();
+		//总代充次数
+		relation.setRechargeNum(months > num ? months : num);
+		relation.setRechargeRemainNum(num);
+		GroupsTrips groupsTrips = groupsMapper.selectById(relation.getGroupsId());
+		if (groupsTrips.getAccountId() == null) {
+			throw BusinessRuntimeException.getInstance("该订单车队未配置账号");
+		}
+		Account account = accountMapper.selectById(groupsTrips.getAccountId());
+		//代充账号设置
+		relation.setAccount(account.getAccount());
+		relation.setPassword(account.getPassword());
+		relation.setSubmitTime(relation.getStartTime());
+		relation.setSendTime(relation.getSubmitTime());
+		//记录首次导入的代充次数
+		CmsUser cmsUser = cmsUserMapper.selectById(rechargeReq.getAdminId());
+		gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), num, cmsUser != null ? cmsUser.getNickname() : null, "导入GPT订单");
+		relationMapper.updateById(relation);
+	}
+
+	@Override
+	public GroupsRelation getOrderRelation(String orderNo) {
+		OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getOrderNo, orderNo).notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
+		if (orderDon == null) {
+			throw BusinessRuntimeException.getInstance("订单不存在或已退款");
+		}
+		//只支持GPT独立会员类型
+		List<Long> gptIdpSkuIds = skuMapper.selectList(Wrappers.lambdaQuery(GoodsDonSku.class).eq(GoodsDonSku::getGoodsId, Constant.GPT_PLUS_GID).eq(GoodsDonSku::getNum, 1)).stream().map(GoodsDonSku::getId).collect(Collectors.toList());
+		if (!gptIdpSkuIds.contains(orderDon.getSkuId())) {
+			throw BusinessRuntimeException.getInstance("只支持GPT独立会员类型");
+		}
+		Long relationId = orderDon.getRelationId();
+		Long userId = orderDon.getUserId();
+		List<Long> userIdList = null;
+		try {
+			userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+		} catch (Exception e) {
+			throw BusinessRuntimeException.getInstance("订单用户不存在");
+		}
+		GroupsRelation relation = relationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getId, relationId).in(GroupsRelation::getUserId, userIdList).gt(GroupsRelation::getExpiryTime, DateTime.now()).last("limit 1"));
+		if (relation == null) {
+			throw BusinessRuntimeException.getInstance("独立会员车票不存在或已过期");
+		}
+		if (relation.getRechargeStatus() != null) {
+			throw BusinessRuntimeException.getInstance("该笔订单号已导入");
+		}
+		return relation;
+	}
+
 	public CardKeyValidationResult validateCardKey(String cardKey) {
 		log.info("开始验证卡密: {}", cardKey);
 		try {
@@ -358,7 +440,7 @@ public class GptRechargeServiceImpl implements GptRechargeService {
 						.eq(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.recharging));
 				//记录代充记录
 				if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
-					gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), 1, relation.getOperator());
+					gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), -1, relation.getOperator(), "后台自动代充");
 				}
 			}
 		}

+ 38 - 3
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -50,6 +50,7 @@ import com.cyksj.model.request.ClickOutReq;
 import com.cyksj.model.request.OrderBalanceRefundReq;
 import com.cyksj.model.request.OrderRefundReq;
 import com.cyksj.redis.RedisService;
+import com.cyksj.service.chatgpt.GptUserRechargeRecordService;
 import com.cyksj.service.coin.UserGalaxyCoinService;
 import com.cyksj.service.coupon.CouponFontService;
 import com.cyksj.service.distribute.equipment.EquipmentDistributeService;
@@ -227,6 +228,8 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
     private final UserGalaxyCoinService userGalaxyCoinService;
 
+    private final GptUserRechargeRecordService gptUserRechargeRecordService;
+
     private static final GlobalThreadPoolTaskExecutor TASK_POOL = GlobalThreadPoolTaskExecutor.getInstance();
 
     @Override
@@ -729,11 +732,12 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         if (!redisService.setNx(key, relationId, RedisService.key.NETFLIX_CHANGE_TICKET_KEY.getTimeout())) {
             throw BusinessRuntimeException.getInstance("正在更换车票中..");
         }
+        Long userId = relation.getUserId();
+        List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
         try {
-            Long userId = relation.getUserId();
             log.info("用户userId:{}更换车票relationId:{}", userId, relationId);
             OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
-                    .eq(OrderDon::getUserId, userId)
+                    .in(OrderDon::getUserId, userIdList)
                     .eq(OrderDon::getRelationId, relationId)
                     .notIn(OrderDon::getStatus, Constant.noOrderAllStatus)
                     .orderByDesc(OrderDon::getId)
@@ -913,7 +917,6 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 
             //关闭正在恢复的车票
             if (orderDon.getGoodsId() == Constant.NETFLIX_GID) {
-                List<Long> userIdList = userBindRelationService.getRelationUserIdList(orderDon.getUserId(), null);
                 NetflixUserAccountSubmitRecoverRecord recoverRecord = netflixUserAccountSubmitRecoverRecordMapper.selectOne(Wrappers.lambdaQuery(NetflixUserAccountSubmitRecoverRecord.class)
                         .eq(NetflixUserAccountSubmitRecoverRecord::getRelationId, orderDon.getRelationId())
                         .in(NetflixUserAccountSubmitRecoverRecord::getUserId, userIdList)
@@ -1293,6 +1296,11 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
                 netflixUserAccountSubmitRecoverRecordMapper.updateById(recoverRecord);
             }
         }
+
+        //GPT独立会员
+        if (orderDon.getGoodsId() == Constant.GPT_PLUS_GID && sku.getNum() == 1) {
+            subRechargeNumOrder(orderDon.getUserId(), orderDon.getRelationId(), sku.getMonths(), operator);
+        }
     }
 
     //处理下级渠道分销提成
@@ -1744,4 +1752,31 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
 			}
 		}
 	}
+
+    /**
+     * 退款扣除代充次数
+     */
+    private void subRechargeNumOrder(Long userId, Long relationId, Integer subNum, String operator) {
+        List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
+        GroupsRelation relation = relationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class).eq(GroupsRelation::getId, relationId).in(GroupsRelation::getUserId, userIdList).gt(GroupsRelation::getExpiryTime, DateTime.now()));
+        if (relation != null && relation.getRechargeStatus() != null) {
+            int update = 0;
+            while (update == 0) {
+                Integer rechargeRemainNum = relation.getRechargeRemainNum();
+                if (subNum > rechargeRemainNum) {
+                    subNum = rechargeRemainNum;
+                }
+                update = groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+                        .set(GroupsRelation::getRechargeRemainNum, rechargeRemainNum - subNum)
+                        .eq(GroupsRelation::getId, relationId)
+                        .eq(GroupsRelation::getRechargeRemainNum, rechargeRemainNum));
+                if (update == 1) {
+                    //记录gpt代充记录
+                    gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), -subNum, operator, "订单退款");
+                    break;
+                }
+                relation = relationMapper.selectById(relationId);
+            }
+        }
+    }
 }

+ 29 - 0
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -78,6 +78,7 @@ import com.cyksj.model.manage.views.UpgradeOrderDetailView;
 import com.cyksj.model.request.*;
 import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
+import com.cyksj.service.chatgpt.GptUserRechargeRecordService;
 import com.cyksj.service.coin.UserGalaxyCoinService;
 import com.cyksj.service.corp.WxCorpOps;
 import com.cyksj.service.coupon.CouponFontService;
@@ -380,6 +381,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 
 	private final OrderDonGalaxyCoinRenewRelateMapper orderDonGalaxyCoinRenewRelateMapper;
 
+	private final GptUserRechargeRecordService gptUserRechargeRecordService;
+
 	private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
 
 	@Transactional(rollbackFor = Throwable.class)
@@ -3130,6 +3133,11 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (isNeedReturnGalaxyCoin.get()) {
 			returnGalaxyCoin(orderDon);
 		}
+
+		//GPT独立会员续费 若为代充类型 同步代充次数
+		if (orderDon.getGoodsId() == Constant.GPT_PLUS_GID && orderDon.getOrderType() == 2) {
+			incrGroupsRelationRechargeRemainIfRecharge(orderDon.getRelationId(), sku.getMonths());
+		}
 	}
 
 	private void handleUserMirrorSHopOrderDon(OrderDon orderDon) throws Exception {
@@ -5169,4 +5177,25 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 			}
 		}
 	}
+
+	private void incrGroupsRelationRechargeRemainIfRecharge(Long relationId, Integer addNum) {
+		GroupsRelation relation = groupsRelationMapper.selectById(relationId);
+		if (relation.getRechargeStatus() != null) {
+			//增加代充次数
+			Integer rechargeRemainNum = relation.getRechargeRemainNum();
+			Integer rechargeNum = relation.getRechargeNum();
+			int update = 0;
+			while (update == 0) {
+				update = groupsRelationMapper.update(null, Wrappers.lambdaUpdate(GroupsRelation.class)
+						.set(GroupsRelation::getRechargeRemainNum, rechargeRemainNum + addNum)
+						.set(GroupsRelation::getRechargeNum, rechargeNum + addNum)
+						.eq(GroupsRelation::getId, relationId)
+						.eq(GroupsRelation::getRechargeRemainNum, rechargeRemainNum));
+				if (update == 1) {
+					//记录gpt代充记录
+					gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), addNum, null, "订单续费");
+				}
+			}
+		}
+	}
 }

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

@@ -645,7 +645,7 @@ public class CmsOrderController {
 							throw BusinessRuntimeException.getInstance("更新用户代充剩余次数失败,请重试");
 						}
 						//记录gpt代充记录
-						gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), 1, cmsUser != null ? cmsUser.getNickname() : null);
+						gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), -1, cmsUser != null ? cmsUser.getNickname() : null, "客服手动充值");
 					}
 				}
 			}

+ 31 - 5
netflix-web/src/main/java/com/cyksj/web/controller/manage/group/CmsGroupRelationController.java

@@ -20,6 +20,7 @@ import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.GroupsRelationBackView;
+import com.cyksj.model.request.GptIndependentExportRechargeReq;
 import com.cyksj.model.request.GroupsRelationRechargeReq;
 import com.cyksj.model.request.RechargeRemainNumReq;
 import com.cyksj.model.views.DisableAccountView;
@@ -213,7 +214,7 @@ public class CmsGroupRelationController {
                     throw BusinessRuntimeException.getInstance("更新用户代充剩余次数失败,请重试");
                 }
                 //记录gpt代充记录
-                gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), 1, cmsUser != null ? cmsUser.getNickname() : null);
+                gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), -1, cmsUser != null ? cmsUser.getNickname() : null, "客服手动充值");
             }
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult("状态修改成功");
@@ -241,7 +242,8 @@ public class CmsGroupRelationController {
     public Result<String> updateRechargeRemainNum(@RequestBody RechargeRemainNumReq req) {
         long adminId = StpUtil.getLoginIdAsLong();
         Long relationId = req.getRelationId();
-        Integer num = req.getNum();
+        //正数是增加 负数是扣除
+        Integer num = -req.getNum();
         GroupsRelation relation = groupsRelationMapper.selectById(relationId);
         if (relation.getRechargeNum() != null) {
             Integer rechargeRemainNum = relation.getRechargeRemainNum();
@@ -261,7 +263,7 @@ public class CmsGroupRelationController {
             }
             //记录gpt代充记录
             CmsUser cmsUser = cmsUserMapper.selectById(adminId);
-            gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), num, cmsUser != null ? cmsUser.getNickname() : null);
+            gptUserRechargeRecordService.recordGptUserRechargeNum(relation.getUserId(), relation.getId(), relation.getAccount(), req.getNum(), cmsUser != null ? cmsUser.getNickname() : null, req.getRemark());
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
@@ -326,11 +328,14 @@ public class CmsGroupRelationController {
      */
     @GetMapping("/get/recharge/operate/record")
     public Result<List<GptUserRechargeNumRecord>> getGptUserRechargeNumRecord(Long relationId, Long userId) {
-        OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getUserId, userId).eq(OrderDon::getRelationId, relationId).notIn(OrderDon::getStatus, Constant.noOrderAllStatus).orderByDesc(OrderDon::getId).last("limit 1"));
+        GroupsRelation relation = groupsRelationMapper.selectById(relationId);
+        if (relation.getStartTime() == null) {
+            return GatewayResponse.SUCCESS.newBuilder().toResult();
+        }
         List<GptUserRechargeNumRecord> gptUserRechargeNumRecords = beanSearcher.searchAll(GptUserRechargeNumRecord.class, MapUtils.flatBuilder(request.getParameterMap())
                 .field(GptUserRechargeNumRecord::getRelationId, relationId)
                 .field(GptUserRechargeNumRecord::getUserId, userId)
-                .field(GptUserRechargeNumRecord::getCreatedTime, orderDon.getCreatedTime()).op(Operator.GreaterThan)
+                .field(GptUserRechargeNumRecord::getCreatedTime, relation.getStartTime()).op(Operator.GreaterThan)
                 .build());
         return GatewayResponse.SUCCESS.newBuilder().toResult(gptUserRechargeNumRecords);
     }
@@ -363,6 +368,27 @@ public class CmsGroupRelationController {
         return GatewayResponse.SUCCESS.newBuilder().toResult(gptRechargeService.getTaskResult(taskId));
     }
 
+    /**
+     * 订单号车票详情
+     */
+    @GetMapping("/get/order/relation")
+    public Result<GroupsRelation> getOrderRelation(String orderNo) {
+        GroupsRelation relation = gptRechargeService.getOrderRelation(orderNo);
+        return GatewayResponse.SUCCESS.newBuilder().toResult(relation);
+    }
+
+    /**
+     * GPT独立会员导入代充列表
+     */
+    @PostMapping("/gpt/independent/export/recharge")
+    @Log(module = "账号管理/用户代充/导入GPT独立会员订单", businessType = BusinessType.POST, isSaveRequestData = true)
+    public Result<String> gptIndependentExportRecharge(@RequestBody GptIndependentExportRechargeReq rechargeReq) {
+        long adminId = StpUtil.getLoginIdAsLong();
+        rechargeReq.setAdminId(adminId);
+        gptRechargeService.gptIndependentExportRecharge(rechargeReq);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
 
     /**
      * Chat GPT独立规格续费 列表