Browse Source

王先生

zhentao 3 days ago
parent
commit
84adde7699

+ 17 - 5
pom.xml

@@ -15,6 +15,11 @@
     </properties>
     <dependencies>
         <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+            <version>4.12.0</version> <!-- 或更高版本 -->
+        </dependency>
+        <dependency>
             <groupId>javax.xml.bind</groupId>
             <artifactId>jaxb-api</artifactId>
             <version>2.3.1</version>
@@ -62,21 +67,28 @@
             <artifactId>elasticsearch</artifactId>
             <version>7.4.0</version>
         </dependency>
+        <!-- 排除冲突的 JSON 库(可选) -->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>1.2.47</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.google.code.gson</groupId>
+                    <artifactId>gson</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
 <!--        <dependency>-->
 <!--            <groupId>org.springframework.boot</groupId>-->
 <!--            <artifactId>spring-boot-starter-data-mongodb</artifactId>-->
 <!--        </dependency>-->
 <!--        deekseep-->
-        <dependency>
-            <groupId>com.squareup.okhttp3</groupId>
-            <artifactId>okhttp</artifactId>
-            <version>4.9.3</version>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.squareup.okhttp3</groupId>-->
+<!--            <artifactId>okhttp</artifactId>-->
+<!--            <version>4.9.3</version>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>com.mashape.unirest</groupId>
             <artifactId>unirest-java</artifactId>

+ 75 - 4
src/main/java/com/zhentao/controller/AI/Deekseep.java

@@ -1,14 +1,18 @@
 package com.zhentao.controller.AI;
 
+import com.mashape.unirest.http.HttpResponse;
+import com.mashape.unirest.http.Unirest;
 import com.mashape.unirest.http.exceptions.UnirestException;
 import com.zhentao.controller.dto.DeeseekRequest;
+import okhttp3.*;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import com.mashape.unirest.http.HttpResponse;
-import com.mashape.unirest.http.Unirest;
 import com.google.gson.Gson;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
+import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -18,13 +22,13 @@ public class Deekseep {
     //智能Ai智能推荐功能
     @RequestMapping("tall")
     public String tallQuestion(String question) throws IOException, UnirestException {
-
+        System.err.println(question);
         Unirest.setTimeouts(0, 0);
 //DeeseekRequest: 自己的实体类名称
 
         List<DeeseekRequest.Message> messages = new ArrayList<>();
 //给deepSeek一个角色
-        messages.add(DeeseekRequest.Message.builder().role("system").content("你是一个美食家").build());
+        messages.add(DeeseekRequest.Message.builder().role("system").content("你是一个酒店的智能客服").build());
 
 // question:说你自己想说的话
         messages.add(DeeseekRequest.Message.builder().role("user").content(question).build());
@@ -39,7 +43,74 @@ public class Deekseep {
                 .header("Authorization", "Bearer "+"sk-df51dab7323441998d41f18494098ddc")
                 .body(gson.toJson(requestBody))
                 .asString();
+        System.err.println(response.getBody());
         return  response.getBody();
 
     }
+
+//    @RequestMapping("tall")
+//    public SseEmitter tallQuestion(String question) throws IOException {
+//        // 1. 创建 SSE Emitter(用于流式返回数据)
+//        SseEmitter emitter = new SseEmitter(60_000L); // 设置超时时间(60秒)
+//
+//        // 2. 构建 DeepSeek 请求
+//        OkHttpClient client = new OkHttpClient();
+//
+//        List<DeeseekRequest.Message> messages = new ArrayList<>();
+//        messages.add(DeeseekRequest.Message.builder().role("system").content("你是一个酒店的智能客服").build());
+//        messages.add(DeeseekRequest.Message.builder().role("user").content(question).build());
+//
+//        DeeseekRequest requestBody = DeeseekRequest.builder()
+//                .model("deepseek-chat")
+//                .messages(messages)
+//                .stream(true) // 关键:启用流式
+//                .build();
+//
+//        // 3. 发起异步请求
+//        Request request = new Request.Builder()
+//                .url("https://api.deepseek.com/chat/completions")
+//                .post(RequestBody.create(gson.toJson(requestBody), MediaType.get("application/json")))
+//                .header("Authorization", "Bearer "+"sk-df51dab7323441998d41f18494098ddc")
+//                .header("Accept", "text/event-stream")  // 必须声明接受流式数据
+//                .header("Content-Type", "application/json")  // 明确 Content-Type
+//                .build();
+//        System.err.println(gson.toJson(requestBody));
+//        client.newCall(request).enqueue(new Callback() {
+//            @Override
+//            public void onFailure(Call call, IOException e) {
+//                emitter.completeWithError(e); // 失败时返回错误
+//            }
+//
+//            @Override
+//            public void onResponse(Call call, Response response) throws IOException {
+//                try (ResponseBody body = response.body()) {
+//                    if (!response.isSuccessful()) {
+//                        emitter.completeWithError(new IOException("请求失败: " + response.code()));
+//                        return;
+//                    }
+//
+//                    // 4. 流式读取 DeepSeek 的响应并发送给前端
+//                    try (BufferedReader reader = new BufferedReader(new InputStreamReader(body.byteStream()))) {
+//                        String line;
+//                        while ((line = reader.readLine()) != null) {
+//                            if (line.startsWith("data:")) {
+//                                String data = line.substring(5).trim();
+//                                System.err.println(data);
+//                                emitter.send(data); // 发送数据到前端
+//                            }
+//                        }
+//                        emitter.complete(); // 完成流
+//                    }
+//                } catch (Exception e) {
+//                    emitter.completeWithError(e);
+//                }
+//            }
+//        });
+//
+//        return emitter;
+//    }
+
+
+
+
 }

+ 4 - 2
src/main/java/com/zhentao/hotel/controller/Hoteldetails_controller.java

@@ -1,9 +1,11 @@
 package com.zhentao.hotel.controller;
 
+import com.zhentao.hotel.dto.HotelDetailDto;
 import com.zhentao.hotel.service.HoteldetailsService;
 import com.zhentao.vo.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -14,7 +16,7 @@ public class Hoteldetails_controller {
     private HoteldetailsService service;
 //    查询酒店的详细信息
     @PostMapping("findAll")
-    public Result findAll(){
-        return Result.OK(service.list(),"查询成功");
+    public Result findAll(@RequestBody HotelDetailDto dto){
+        return Result.OK(service.hotelDetails(dto),"查询成功");
     }
 }

+ 1 - 1
src/main/java/com/zhentao/hotel/service/impl/HoteldetailsServiceImpl.java

@@ -34,7 +34,7 @@ public class HoteldetailsServiceImpl extends ServiceImpl<HoteldetailsMapper, Hot
         queryWrapper.eq("hotelId",dto.getId());
         List<Hoteldetails> list = this.list(queryWrapper);
         byId.setList(list);
-        return Result.OK(list,"查询成功");
+        return Result.OK(byId,"查询成功");
     }
 }
 

+ 4 - 2
src/main/java/com/zhentao/hotel/service/impl/HotelsServiceImpl.java

@@ -34,6 +34,8 @@ public class HotelsServiceImpl extends ServiceImpl<HotelsMapper, Hotels>
     implements HotelsService{
     @Autowired
     private RestHighLevelClient restHighLevelClient;
+    @Autowired
+    private HotelsMapper hotelsMapper;
     @Override
     public Result findAll(HotelDto hotelDto) {
 //        查询所有酒店的信息
@@ -42,8 +44,8 @@ public class HotelsServiceImpl extends ServiceImpl<HotelsMapper, Hotels>
         queryWrapper.eq("sort_id",hotelDto.getId());
 //        根据详细地址
         queryWrapper.like("hotelName",hotelDto.getHotelName());
-        List<Hotels> list = this.list(queryWrapper);
-        return Result.OK(list,"查询成功");
+        List<Hotels> hotels = hotelsMapper.selectList(queryWrapper);
+        return Result.OK(hotels,"查询成功");
     }
 
 

+ 3 - 1
src/main/java/com/zhentao/service/impl/UserLoginServiceImpl.java

@@ -185,8 +185,9 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLogin
      */
     @Override
     public Result UserPassLogin(UserPassDto userPassDto) {
+        System.err.println(userPassDto);
         // 获取Redisson客户端的锁对象,用于处理并发登录请求
-        RLock lock = redissonClient.getLock(userPassDto.getUsername());
+        RLock lock = redissonClient.getLock("user"+userPassDto.getUsername());
         try {
             // 尝试获取锁,设置等待和持有时间
             boolean b = lock.tryLock(10, 20, TimeUnit.SECONDS);
@@ -216,6 +217,7 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLogin
             }
         }catch (InterruptedException e){
             // 如果线程被中断,恢复中断状态,并返回错误信息
+            System.err.println("所异常");
             Thread.currentThread().interrupt();
             return Result.ERR("线程被中断",null);
         }finally {

+ 4 - 0
src/main/java/com/zhentao/touristAttractions/domain/Touristattractions.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
+
 import lombok.Data;
 
 /**
@@ -71,5 +73,7 @@ public class Touristattractions implements Serializable {
 //    地址
     private String address;
     @TableField(exist = false)
+    private List<Ticketinfo> list;
+    @TableField(exist = false)
     private static final long serialVersionUID = 1L;
 }

+ 8 - 2
src/main/java/com/zhentao/touristAttractions/service/impl/TicketinfoServiceImpl.java

@@ -3,10 +3,13 @@ package com.zhentao.touristAttractions.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhentao.touristAttractions.domain.Ticketinfo;
+import com.zhentao.touristAttractions.domain.Touristattractions;
 import com.zhentao.touristAttractions.dto.TickentinfoDto;
+import com.zhentao.touristAttractions.mapper.TouristattractionsMapper;
 import com.zhentao.touristAttractions.service.TicketinfoService;
 import com.zhentao.touristAttractions.mapper.TicketinfoMapper;
 import com.zhentao.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -19,13 +22,16 @@ import java.util.List;
 @Service
 public class TicketinfoServiceImpl extends ServiceImpl<TicketinfoMapper, Ticketinfo>
     implements TicketinfoService{
-
+    @Autowired
+    private TouristattractionsMapper mapper;
     @Override
     public Result findAll(TickentinfoDto dto) {
+        Touristattractions touristattractions = mapper.selectById(dto.getTourId());
         QueryWrapper<Ticketinfo> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("tid",dto.getTourId());
         List<Ticketinfo> list = this.list(queryWrapper);
-        return Result.OK(list,"查询成功");
+        touristattractions.setList(list);
+        return Result.OK(touristattractions,"查询成功");
     }
 }
 

+ 13 - 17
src/main/java/com/zhentao/touristAttractions/service/impl/TouristattractionsServiceImpl.java

@@ -1,6 +1,5 @@
 package com.zhentao.touristAttractions.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhentao.touristAttractions.domain.Touristattractions;
@@ -8,11 +7,7 @@ import com.zhentao.touristAttractions.dto.TouristattrcationDto;
 import com.zhentao.touristAttractions.service.TouristattractionsService;
 import com.zhentao.touristAttractions.mapper.TouristattractionsMapper;
 import com.zhentao.vo.Result;
-import org.elasticsearch.action.bulk.BulkRequest;
-import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.client.RestHighLevelClient;
-import org.elasticsearch.common.xcontent.XContentType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -34,20 +29,21 @@ public class TouristattractionsServiceImpl extends ServiceImpl<Touristattraction
     @Override
     public Result findAll(TouristattrcationDto dto) throws IOException {
         QueryWrapper<Touristattractions> queryWrapper = new QueryWrapper<>();
-        queryWrapper.like(dto.getAddress()!=null,"address",dto.getAddress());
-        queryWrapper.like(dto.getName()!=null,"name",dto.getName());
-        queryWrapper.orderByDesc("rating");
+//        queryWrapper.like("address",dto.getAddress());
+//        queryWrapper.like("name",dto.getName());
+//        queryWrapper.orderByDesc("rating");
         System.err.println(dto);
+        List<Touristattractions> list = this.list(queryWrapper);
         List<Touristattractions> touristattractions = mapper.selectList(queryWrapper);
-        System.err.println(touristattractions);
-
-        BulkRequest bulkRequest = new BulkRequest("touristattrcation");
-        for (Touristattractions t:touristattractions) {
-            IndexRequest indexRequest = new IndexRequest()
-                    .id(t.getId().toString()).source(JSON.toJSONString(t), XContentType.JSON);
-            bulkRequest.add(indexRequest);
-        }
-        restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
+        System.err.println(list);
+
+//        BulkRequest bulkRequest = new BulkRequest("touristattrcation");
+//        for (Touristattractions t:touristattractions) {
+//            IndexRequest indexRequest = new IndexRequest()
+//                    .id(t.getId().toString()).source(JSON.toJSONString(t), XContentType.JSON);
+//            bulkRequest.add(indexRequest);
+//        }
+//        restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
         return Result.OK(touristattractions,"查询成功");
     }
 }