Ver Fonte

短信gpt体验

chenbiao há 1 ano atrás
pai
commit
80b8e31dc7

+ 11 - 0
netflix-dao/src/main/java/com/cyksj/mapper/ChatgptTrialRecordMapper.java

@@ -0,0 +1,11 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.ChatgptTrialRecord;
+
+/**
+ * @author chan
+ * @date 2024/12/31 16:38
+ */
+public interface ChatgptTrialRecordMapper extends BaseMapper<ChatgptTrialRecord> {
+}

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/ChatgptTrialRecord.java

@@ -0,0 +1,18 @@
+package com.cyksj.model.entity;
+
+import lombok.Data;
+
+/**
+ * @author chan
+ * @date 2024/12/31 16:37
+ */
+@Data
+public class ChatgptTrialRecord extends BaseEntity{
+
+    private String userToken;
+
+    private String ip;
+
+    private String userAgent;
+
+}

+ 6 - 0
netflix-service/src/main/java/com/cyksj/service/chatgpt/ChatGptAccountService.java

@@ -6,6 +6,7 @@ import com.cyksj.model.views.ChatGptUserView;
 import com.cyksj.model.views.ChatgptCarInfoView;
 import com.ejlchina.searcher.SearchResult;
 
+import javax.servlet.http.Cookie;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -57,4 +58,9 @@ public interface ChatGptAccountService {
     void clearGptNum(Long relationId) throws Exception;
 
     void gptSwitchModel(long userId, Long relationId);
+
+    /**
+     * gpt3日体验卡
+     */
+    String trialGpt(String clientIP, String trialToken, String userAgent);
 }

+ 63 - 0
netflix-service/src/main/java/com/cyksj/service/chatgpt/impl/ChatGptAccountServiceImpl.java

@@ -36,6 +36,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.imageio.stream.FileImageOutputStream;
 import javax.servlet.http.HttpServletRequest;
@@ -96,6 +97,8 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
 
     private final HttpServletRequest request;
 
+    private final ChatgptTrialRecordMapper chatgptTrialRecordMapper;
+
     @Override
     public String getGptSession(String account, String password) {
         String officialSession = "";
@@ -662,5 +665,65 @@ public class ChatGptAccountServiceImpl implements ChatGptAccountService {
         return DOMAIN;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String trialGpt(String clientIP, String trialToken, String userAgent) {
+
+        if (StringUtils.isNotBlank(trialToken)) {
+            ChatgptTrialRecord chatgptTrialRecord = chatgptTrialRecordMapper.selectOne(Wrappers.lambdaQuery(ChatgptTrialRecord.class).eq(ChatgptTrialRecord::getUserToken, trialToken).last(" limit 1"));
+            if (chatgptTrialRecord != null) {
+                ChatgptUser chatgptUser = chatgptUserMapper.selectOne(Wrappers.lambdaQuery(ChatgptUser.class).eq(ChatgptUser::getUserToken, trialToken));
+                if (chatgptUser == null) {
+                    return "";
+                }else {
+                    return chatgptUser.getUserToken();
+                }
+            }else {
+                ChatgptUser chatgptUser = createTrialUser(clientIP);
+                if(StringUtils.isBlank(chatgptUser.getUserToken())){
+                    return "";
+                }
+                chatgptTrialRecord = new ChatgptTrialRecord();
+                chatgptTrialRecord.setIp(clientIP);
+                chatgptTrialRecord.setUserToken(chatgptUser.getUserToken());
+                chatgptTrialRecordMapper.insert(chatgptTrialRecord);
+                return chatgptUser.getUserToken();
+            }
+        }
+
+        ChatgptUser chatgptUser = createTrialUser(clientIP);
+        if(StringUtils.isBlank(chatgptUser.getUserToken())){
+            return "";
+        }
+        ChatgptTrialRecord chatgptTrialRecord = new ChatgptTrialRecord();
+        chatgptTrialRecord.setIp(clientIP);
+        chatgptTrialRecord.setUserToken(chatgptUser.getUserToken());
+        chatgptTrialRecordMapper.insert(chatgptTrialRecord);
+        return chatgptUser.getUserToken();
+    }
+
+    private synchronized ChatgptUser createTrialUser(String clientIP) {
+        //固定 sku id
+        GoodsDonSku goodsDonSku = skuMapper.selectById(535L);
+        //新增体验卡
+        ChatgptUser chatgptUser = new ChatgptUser();
+        if (goodsDonSku.getIsCar()) {
+            chatgptUser.setIsCar(true);
+            chatgptUser.setLimitNum(goodsDonSku.getGptLimitNum());
+            chatgptUser.setLimitTime(goodsDonSku.getGptLimitTime());
+        }
+        try {
+            DateTime dateTime = DateUtil.offsetMonth(new Date(), 1);
+            chatgptUser.setExpireTime(dateTime.toJdkDate());
+            chatgptUser.setIsPlus(1);
+            chatgptUser.setName("银河体验卡用户");
+            chatgptUser.setImg("https://cdn2.yicanggongyi.com/yinhe/icon/index/avatar.png");
+            chatgptUser.setUserToken(UUID.randomUUID().toString());
+            chatgptUserMapper.insert(chatgptUser);
+        } catch (DuplicateKeyException e) {
+            log.error("重复插入镜像体验用户ip :{},errmsg:{}",clientIP , StringUtil.getErrorText(e));
+        }
+        return chatgptUser;
+    }
 }
 

+ 40 - 0
netflix-web/src/main/java/com/cyksj/web/controller/mirror/MirrorController.java

@@ -3,6 +3,7 @@ package com.cyksj.web.controller.mirror;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.extra.servlet.ServletUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -29,6 +30,7 @@ import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
@@ -36,6 +38,7 @@ import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -53,6 +56,8 @@ public class MirrorController {
 
     private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
 
+    private static String DOMAIN = "https://gpt.bestaistore.com";
+
     private final ChatGptAccountService chatGptAccountService;
 
     private final ClaudeService claudeService;
@@ -418,4 +423,39 @@ public class MirrorController {
         LumaUser lumaUser = lumaService.getLumaUser(userId, relationId);
         return GatewayResponse.SUCCESS.newBuilder().toResult(lumaHost + (EnvCommonService.active_pre.equals(envCommonService.getEnv()) ? "/8083":"/8085") +"/api/applets/luma/lumaMirrorWithToken/" + lumaUser.getUserToken());
     }
+
+
+    /**
+     * gpt3天体验
+     */
+    @GetMapping("/gpt/trial")
+    public void trialGpt() throws IOException {
+        String clientIP = ServletUtil.getClientIP(request);
+        Cookie trialTokenCookie = ServletUtil.getCookie(request, "trialToken");
+        String userAgent = ServletUtil.getHeader(request, "userAgent", StandardCharsets.UTF_8);
+        String trialToken = "";
+        if (trialTokenCookie != null) {
+            trialToken = trialTokenCookie.getValue();
+
+        }
+        String userToken = chatGptAccountService.trialGpt(clientIP, trialToken, userAgent);
+
+        if (StringUtils.isBlank(userToken)) {
+            response.sendRedirect("https://nf.video/4p465k/?gid=18");
+        }else {
+            SysConfig sysConfig = sysConfigService.getOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey,"trial_gpt_domain"));
+            if (sysConfig != null) {
+                String sysValue = sysConfig.getSysValue();
+                if (JSONUtil.isJsonArray(sysValue)) {
+                    List<String> domainList = JSONUtil.parseArray(sysValue).toList(String.class);
+                    DOMAIN = domainList.get(RandomUtil.randomInt(domainList.size()));
+                }
+            }
+            Cookie cookie = new Cookie("trialToken",userToken);
+            cookie.setMaxAge(2592000);
+            cookie.setPath("/");
+            ServletUtil.addCookie(response,cookie);
+            response.sendRedirect(DOMAIN + "/codetoken?logintoken=" + userToken);
+        }
+    }
 }