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
ÎļþÒÑɾ³ý