leutu
2024-08-27 55e607b91e8058a7fe713fa07cd4c829b5593aa5
更新
已添加7个文件
已修改5个文件
已删除1个文件
581 ■■■■ 文件已修改
pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/config/R.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/controller/AiController.java 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/controller/WebSocketController.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/controller/XzController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/entity/ReqEntity.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/entity/ResponseEntity.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/message/WebSocketServer.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/message/WebSocketStompConfig.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/message/WebsocketConfiguration.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yb/util/OkHttpUtil.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/test/java/com/yb/SimpleTest.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -20,6 +20,11 @@
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.14.9</version>
src/main/java/com/yb/config/R.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.yb.config;
import org.apache.http.HttpStatus;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * è¿”回数据
 *
 * @author Mark sunlightcs@gmail.com
 */
public class R extends HashMap<String, Object> {
    private static final long serialVersionUID = 1L;
    public R() {
        put("code", 200);
        put("msg", "success");
    }
    public static R error() {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
    }
    public static  R error(String msg) {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
    }
    public static  R error(int code, String msg) {
        R r = new  R();
        r.put("code", code);
        r.put("msg", msg);
        return r;
    }
    public static  R ok(String msg) {
        R r = new  R();
        r.put("msg", msg);
        return r;
    }
    public static  R ok(Map<String, Object> map) {
        R r = new  R();
        r.putAll(map);
        return r;
    }
    public static  R ok() {
        return new  R();
    }
    public  R put(String key, Object value) {
        super.put(key, value);
        return this;
    }
    public static  R ok(List list) {
        R r = new  R();
        r.put("list", list);
        return r;
    }
}
src/main/java/com/yb/controller/AiController.java
@@ -8,19 +8,14 @@
import jakarta.annotation.Resource;
import net.sf.json.JSONObject;
import okhttp3.Response;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@Tag(name="terra openai")
@@ -36,7 +31,8 @@
    @Value("${spring.intent}")
    String intent ;
    @Autowired
    WebSocketController webSocketController;
    @GetMapping("/chat")
    @Operation(summary = "大模型对话")
@@ -44,16 +40,74 @@
        return chatModel.call(message);
    }
    @GetMapping("/ai")
    @Operation(summary = "大模型对话")
    public String ai(@RequestParam(value = "message",defaultValue = "Hi") String message){
        System.out.println("rec message:"+message);
        HashMap<String,String> hash = new HashMap<>();
        hash.put("func","flyTo()");
        hash.put("content","x:120.9671,y:13.5748");
        message = JSON.toJSONString(hash);
        return webSocketController.sendAllMessage(message);
    }
    @GetMapping("/ai/{place}/{funcName}/showPlaceMap")
    @Operation(summary = "大模型对话")
    public String intentShowMap(@PathVariable("place")String place,@PathVariable("funcName")String funcName){
        System.out.println("rec message:"+place);
        HashMap<String,Object> hash = new HashMap<>();
        hash.put("func","flyTo()");
        HashMap<String,String> xy = new HashMap<>();
        xy.put("x","120.9671");
        xy.put("y","13.5748");
        hash.put("content",xy);
        webSocketController.sendAllMessage(JSON.toJSONString(hash));
        HashMap<String,Object> result = new HashMap<>();
        result.put("code","200");
        result.put("message","成功");
        result.put("data","");
        return JSON.toJSONString(result);
    }
    @GetMapping("/intent")
    @Operation(summary = "意图请求")
    public String intent(@RequestParam(value = "message",defaultValue = "Hi") String message){
        String json = okHttpUtil.getMessage(intent+"="+message);
        if( message.toLowerCase().indexOf("x") == 0){
            return getString(message.substring(1));
        }
        String r = intent+"=\""+message+"\"";
        System.out.println(r);
        String json = okHttpUtil.getMessage(r);
        System.out.println(json);
        Map<String,String> hashMap = new HashMap<>() ;
        if( json == null){
            hashMap.put("status","500");
            //String llm = chatModel.call(message);
            //hashMap.put("content","识别异常,"+llm);
            if( hashMap.get("name") == null ){
                String json2 = okHttpUtil.requesFast(message);
                return  json2 ;
            }
            return  JSON.toJSON(hashMap).toString() ;
        }
        iteraJson(json,hashMap);
        if( hashMap.get("name") == null ){
            String json2 = okHttpUtil.requesFast(message);
            return  json2 ;
        }
        intentSwitch(hashMap,message);
        return  JSON.toJSON(hashMap).toString() ;
    }
    private String getString(String message) {
        String json = okHttpUtil.requesFast(message.substring(1));
        return json;
    }
    public  boolean iteraJson(String str, Map res){
        if(str.toString().indexOf(":") == -1){
            return true;
@@ -103,7 +157,7 @@
    @GetMapping("/fastgpt")
    @Operation(summary = "知识库查询")
    public String fastgpt(@RequestParam(value = "message",defaultValue = "三维实景") String message){
    public String fastgpt(@RequestParam(value = "message",defaultValue = "055") String message){
        //okHttpUtil.requesFast(message);
        String json = okHttpUtil.requesFast(message);
@@ -152,8 +206,29 @@
   */
    private void intentSwitch(Map<String,String>hash,String message){
        if( hash.get("name") == null ) return ;
        if( hash.get("name").equals("anomalyCheck")) hash.put("name","scanWeapon");
        if( hash.get("name").equals("weaponParameters")) hash.put("name","weaponParameters");
//        if( hash.get("name").equals("anomalyCheck")) hash.put("name","scanWeapon");
//        if( hash.get("name").equals("weaponParameters")) hash.put("name","weaponParameters");
        String ws = " å ¤ä¸°æ­¦å™¨ç³»ç»Ÿ å ¤ä¸°ç³»ç»Ÿ" +
                "圣安东尼奥级" +
                " C130 C130飞机  C130运输机  C130炮艇" +
                "何塞黎刹级系统" +
                " é±¼é¹°æ­¦å™¨ç³»ç»Ÿ é±¼é¹°ç³»ç»Ÿ" +
                "丹鹿级武器系统 ä¸¹é¹¿çº§ç³»ç»Ÿ" +
                "先锋级武器系统 å…ˆé”‹çº§ç³»ç»Ÿ" +
                "支奴干武器系统 æ”¯å¥´å¹²ç›´å‡æœº æ”¯å¥´å¹²ç³»ç»Ÿ æ”¯å¥´å¹²è¿è¾“机" +
                "黑鹰武器系统 é»‘鹰直升机 é»‘鹰系统 é»‘鹰武装直升机";
        if( hash.get("name").toLowerCase().equals("weaponsystemparametersinput")
                || hash.get("name").toLowerCase().equals("weaponsystemparameters")){
            if(ws.indexOf(hash.get("weapons")) > -1 )hash.put("name","weaponSystemParameters");
            else {
                hash.put("name", "weaponSystemParameters");
                hash.put("weapons", "");
                String llm = chatModel.call(message);
                System.out.println("llm:" + llm);
                hash.put("content", llm);
            }
        }
        if( hash.get("name").equals("searchTarget")) {
            String entity = hash.get("entity");
            if( entity.indexOf("政治")>=0 || entity.indexOf("社会")>=0||entity.indexOf("军事")>=0 ||
src/main/java/com/yb/controller/WebSocketController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.yb.controller;
import java.io.*;
import com.yb.message.WebSocketServer;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping({ "/api/ws" })
public class WebSocketController
{
    @RequestMapping(value = { "/sendAll" }, method = { RequestMethod.GET })
    public String sendAllMessage(@RequestParam(required = true) final String message) {
        try {
            WebSocketServer.BroadCastInfo(message);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return "ok";
    }
    @RequestMapping(value = { "/sendOne" }, method = { RequestMethod.GET })
    public String sendOneMessage(@RequestParam(required = true) final String message, @RequestParam(required = true) final String id) {
        try {
            WebSocketServer.SendMessage(message, id);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return "ok";
    }
}
src/main/java/com/yb/controller/XzController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
package com.yb.controller;
import com.alibaba.fastjson.JSON;
import com.yb.config.R;
import com.yb.entity.ReqEntity;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@Tag(name="新智接口")
@RestController
@RequestMapping("/api/v1")
public class XzController {
    @Autowired
    WebSocketController webSocketController;
    @GetMapping("/poiMap/{place}")
    @Operation(summary = "显示地点")
    public R poiMap(@PathVariable("place")String place){
        System.out.println("rec message:"+place);
        HashMap<String,Object> hash = new HashMap<>();
        hash.put("func","poiMap");
        ReqEntity reqEntity = new ReqEntity();
        reqEntity.setPlace(place);
        reqEntity.setX("120.9671");
        reqEntity.setY("13.5748");
        hash.put("poi",reqEntity);
        String message = JSON.toJSONString(hash);
        webSocketController.sendAllMessage(message);
        return R.ok(hash);
    }
    @PostMapping("/aroundPoi")
    @Operation(summary = "周边查询")
    public R aroundPoi(@RequestBody ReqEntity reqEntity){
        System.out.println("rec message:"+reqEntity);
        HashMap<String,Object> hash = new HashMap<>();
        hash.put("func","aroundPoi");
        List<ReqEntity> list = new ArrayList<>();
        reqEntity.setX("120.9671");
        reqEntity.setY("13.5748");
        list.add(reqEntity);
        list.add(reqEntity);
        hash.put("poi",list);
        String message = JSON.toJSONString(hash);
        webSocketController.sendAllMessage(message);
        return R.ok(hash);
    }
    @GetMapping("/queryPath/{start_point}/{end_point}")
    @Operation(summary = "路线查询")
    public R queryPath(@PathVariable("start_point")String start_point,@PathVariable("end_point")String end_point){
        System.out.println("rec start_point: "+start_point+"  end_point: "+end_point);
        HashMap<String,Object> hash = new HashMap<>();
        hash.put("func","searchPath");
        List<ReqEntity> list = new ArrayList<>();
        hash.put("path",list);
        String message = JSON.toJSONString(hash);
        webSocketController.sendAllMessage(message);
        return R.ok(hash);
    }
    @GetMapping("/queryMeta")
    @Operation(summary = "元信息查询")
    public R queryMeta(){
        System.out.println("queryMeta ");
        HashMap<String,Object> hash = new HashMap<>();
        hash.put("func","queryMeta");
        List<ReqEntity> list = new ArrayList<>();
        hash.put("meta",list);
        String message = JSON.toJSONString(hash);
        webSocketController.sendAllMessage(message);
        return R.ok(hash);
    }
}
src/main/java/com/yb/entity/ReqEntity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.yb.entity;
import lombok.Data;
@Data
public class ReqEntity {
    /**
     åœ°å
     */
    private String place ;
    /**
     æŸ¥è¯¢ç±»åž‹ï¼Œå¦‚: å»ºç­‘,交通设施。。
     */
    private String type ;
    /**
     * æŸ¥è¯¢åŠå¾„,默认5km
     */
    private String redius = "5000" ;
    /**
     *查询属性长度,如:某个广场的长度
     */
    private String length;
    /**
     * æŸ¥è¯¢å±žæ€§é•¿åº¦ï¼Œå¦‚:某个广场宽度
     */
    private String  width ;
    /**
     * æŸ¥è¯¢å±žæ€§é•¿åº¦ï¼Œå¦‚:某个建筑的高度
     */
    private String  high ;
    /**
     * å…¶ä»–属性,若是多个其他属性,使用json设置
     */
    private String  attris ;
    private String  x ;
    private String  y ;
    private String content ;
}
src/main/java/com/yb/entity/ResponseEntity.java
@@ -4,6 +4,6 @@
@Data
public class ResponseEntity {
    private String[] eveent;
    private String[] event;
    private String[] data ;
}
src/main/java/com/yb/message/WebSocketServer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
package com.yb.message;
import jakarta.annotation.PostConstruct;
import jakarta.websocket.*;
import jakarta.websocket.server.ServerEndpoint;
import org.springframework.stereotype.*;
import java.util.concurrent.atomic.*;
import java.util.concurrent.*;
import java.io.*;
import java.util.*;
import org.slf4j.*;
@ServerEndpoint("/ws/asset")
@Component
public class WebSocketServer
{
    private static Logger log;
    private static final AtomicInteger OnlineCount;
    private static CopyOnWriteArraySet<Session> SessionSet;
    @PostConstruct
    public void init() {
       // System.out.println("websocket åŠ è½½");
    }
    @OnOpen
    public void onOpen(final Session session) {
        WebSocketServer.SessionSet.add(session);
        final int cnt = WebSocketServer.OnlineCount.incrementAndGet();
        WebSocketServer.log.info("有连接加入,当前连接数为:{}", (Object)cnt);
        SendMessage(session, "连接成功");
    }
    @OnClose
    public void onClose(final Session session) {
        WebSocketServer.SessionSet.remove(session);
        final int cnt = WebSocketServer.OnlineCount.decrementAndGet();
        WebSocketServer.log.info("有连接关闭,当前连接数为:{}", (Object)cnt);
    }
    @OnMessage
    public void onMessage(final String message, final Session session) {
        WebSocketServer.log.info("来自客户端的消息:{}", (Object)message);
        SendMessage(session, "收到消息,消息内容:" + message);
    }
    @OnError
    public void onError(final Session session, final Throwable error) {
        WebSocketServer.log.error("发生错误:{},Session ID: {}", (Object)error.getMessage(), (Object)session.getId());
        error.printStackTrace();
    }
    public static void SendMessage(final Session session, final String message) {
        try {
            session.getBasicRemote().sendText(String.format("%s", message));
        }
        catch (IOException e) {
            WebSocketServer.log.error("发送消息出错:{}", (Object)e.getMessage());
            e.printStackTrace();
        }
    }
    public static void BroadCastInfo(final String message) throws IOException {
        for (final Session session : WebSocketServer.SessionSet) {
            if (session.isOpen()) {
                SendMessage(session, message);
            }
        }
    }
    public static void SendMessage(final String message, final String sessionId) throws IOException {
        Session session = null;
        for (final Session s : WebSocketServer.SessionSet) {
            if (s.getId().equals(sessionId)) {
                session = s;
                break;
            }
        }
        if (session != null) {
            SendMessage(session, message);
        }
        else {
            WebSocketServer.log.warn("没有找到你指定ID的会话:{}", (Object)sessionId);
        }
    }
    static {
        WebSocketServer.log = LoggerFactory.getLogger((Class)WebSocketServer.class);
        OnlineCount = new AtomicInteger(0);
        WebSocketServer.SessionSet = new CopyOnWriteArraySet<Session>();
    }
}
src/main/java/com/yb/message/WebSocketStompConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
package com.yb.message;
import org.springframework.context.annotation.*;
import org.springframework.messaging.converter.MessageConverter;
import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver;
import org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler;
import org.springframework.web.socket.config.annotation.*;
import org.springframework.messaging.simp.config.*;
import java.util.List;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketStompConfig implements WebSocketMessageBrokerConfigurer
{
    @Override
    public void registerStompEndpoints(final StompEndpointRegistry registry) {
        registry.addEndpoint(new String[] { "/mywebsockets" }).setAllowedOrigins(new String[] { "*" }).withSockJS();
    }
    @Override
    public void configureWebSocketTransport(WebSocketTransportRegistration webSocketTransportRegistration) {
    }
    @Override
    public void configureClientInboundChannel(ChannelRegistration channelRegistration) {
    }
    @Override
    public void configureClientOutboundChannel(ChannelRegistration channelRegistration) {
    }
    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> list) {
    }
    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> list) {
    }
    @Override
    public boolean configureMessageConverters(List<MessageConverter> list) {
        return false;
    }
    @Override
    public void configureMessageBroker(final MessageBrokerRegistry config) {
        config.enableSimpleBroker(new String[] { "/topic/", "/queue/" });
        config.setApplicationDestinationPrefixes(new String[] { "/ts" });
    }
}
src/main/java/com/yb/message/WebsocketConfiguration.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.yb.message;
import org.springframework.stereotype.*;
import org.springframework.web.socket.server.standard.*;
import org.springframework.context.annotation.*;
@Component
public class WebsocketConfiguration
{
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}
src/main/java/com/yb/util/OkHttpUtil.java
@@ -1,8 +1,6 @@
package com.yb.util;
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.yb.entity.ResponseEntity;
import okhttp3.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
@@ -13,6 +11,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
@Component
@RestController
@@ -29,8 +28,13 @@
    // get请求
    public  String getMessage(String url)  {
        try {
            OkHttpClient client = new OkHttpClient();
            OkHttpClient client = new OkHttpClient.Builder()
                    .connectTimeout(5, TimeUnit.SECONDS)
                    .readTimeout(5, TimeUnit.SECONDS)
                    .writeTimeout(5, TimeUnit.SECONDS)
                    .build();
            Request request = new Request.Builder()
                    .url(url)
                    .build();
src/main/resources/application.yml
@@ -7,14 +7,14 @@
    name: ollama-ai
  ai:
    ollama:
      base-url: http://192.168.11.104:11434
      base-url: http://127.0.0.1:11434
      chat:
#        model: yi:9b-chat-v1.5-q4_0
        model: qwen2:1.5b
  intent: http://106.120.22.26:5367/intention?message
  intent: http://106.120.22.26:5368/intention?message
  fastgpt:
    appid:  6673bfa1d14da0cede023f28
    apikey: fastgpt-4HbHYUnw3ICJWwIAObTfq2BWV94KQzsssFSrM3MMZjjCZrYjulv5zqp5RVL
    apikey: fastgpt-eNuz6Rsc5EMrYMiODBQbBXCbGwQYp9nSpYPE06vBBt3nitnFLdHSoQ0BAmNHDyB
    url: http://192.168.11.28/api/v1/chat/completions
    kc: http://192.168.11.28/api/core/dataset/create
    kl: http://192.168.11.28/api/core/dataset/list
src/test/java/com/yb/SimpleTest.java
ÎļþÒÑɾ³ý