From 5f5b48f0c12fc7518030f5aa62393c8dfec5662e Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 18 三月 2026 11:09:39 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/ai/mcp/tool/WcsMcpTools.java | 6
src/main/java/com/zy/ai/service/MainProcessPseudocodeService.java | 8
src/main/java/com/zy/ai/service/impl/MainProcessPseudocodeServiceImpl.java | 302 ++++++++++++++++++++++++++++++
src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java | 9
src/main/java/com/zy/ai/mcp/service/WcsDataFacade.java | 7
src/main/java/com/zy/ai/timer/MakeMainProcessPseudocodeScheduler.java | 223 ----------------------
src/main/resources/application.yml | 2
7 files changed, 332 insertions(+), 225 deletions(-)
diff --git a/src/main/java/com/zy/ai/mcp/service/WcsDataFacade.java b/src/main/java/com/zy/ai/mcp/service/WcsDataFacade.java
index 26d459b..efb669d 100644
--- a/src/main/java/com/zy/ai/mcp/service/WcsDataFacade.java
+++ b/src/main/java/com/zy/ai/mcp/service/WcsDataFacade.java
@@ -18,8 +18,7 @@
Object getSystemConfig(JSONObject args);
- /**
- * 鈽� 鑱氬悎蹇収锛氭牳蹇冭瘖鏂緭鍏�
- */
+ Object getSystemPseudocode(JSONObject args);
+
Object buildDiagnosisSnapshot(JSONObject args);
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java b/src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java
index 2efa2a0..f7d6777 100644
--- a/src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java
+++ b/src/main/java/com/zy/ai/mcp/service/impl/WcsDataFacadeImpl.java
@@ -6,6 +6,7 @@
import com.zy.ai.entity.DeviceConfigsData;
import com.zy.ai.log.AiLogAppender;
import com.zy.ai.mcp.service.WcsDataFacade;
+import com.zy.ai.service.MainProcessPseudocodeService;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.BasRgv;
@@ -45,6 +46,8 @@
private WrkMastService wrkMastService;
@Autowired
private ConfigService configService;
+ @Autowired
+ private MainProcessPseudocodeService mainProcessPseudocodeService;
@Override
public Object getCrnDeviceStatus(JSONObject args) {
@@ -276,6 +279,12 @@
}
@Override
+ public Object getSystemPseudocode(JSONObject args) {
+ boolean refresh = optBool(args, "refresh", false);
+ return mainProcessPseudocodeService.queryMainProcessPseudocode(refresh);
+ }
+
+ @Override
public Object buildDiagnosisSnapshot(JSONObject args) {
String wh = mustStr(args, "warehouseCode");
List<String> crnDeviceNos = optStrList(args, "crnDeviceNos");
diff --git a/src/main/java/com/zy/ai/mcp/tool/WcsMcpTools.java b/src/main/java/com/zy/ai/mcp/tool/WcsMcpTools.java
index 35f122d..2f7c72b 100644
--- a/src/main/java/com/zy/ai/mcp/tool/WcsMcpTools.java
+++ b/src/main/java/com/zy/ai/mcp/tool/WcsMcpTools.java
@@ -87,6 +87,12 @@
return wcsDataFacade.getSystemConfig(json());
}
+ @Tool(name = "system_get_main_process_pseudocode", description = "鏌ヨ褰撳墠WCS绯荤粺涓绘祦绋嬩吉浠g爜")
+ public Object getSystemPseudocode(
+ @ToolParam(description = "鏄惁寮哄埗閲嶆柊鐢熸垚浼唬鐮侊紝榛樿 false", required = false) Boolean refresh) {
+ return wcsDataFacade.getSystemPseudocode(json().fluentPut("refresh", refresh));
+ }
+
private JSONObject json() {
return new JSONObject();
}
diff --git a/src/main/java/com/zy/ai/service/MainProcessPseudocodeService.java b/src/main/java/com/zy/ai/service/MainProcessPseudocodeService.java
new file mode 100644
index 0000000..8436715
--- /dev/null
+++ b/src/main/java/com/zy/ai/service/MainProcessPseudocodeService.java
@@ -0,0 +1,8 @@
+package com.zy.ai.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+public interface MainProcessPseudocodeService {
+
+ JSONObject queryMainProcessPseudocode(boolean refresh);
+}
diff --git a/src/main/java/com/zy/ai/service/impl/MainProcessPseudocodeServiceImpl.java b/src/main/java/com/zy/ai/service/impl/MainProcessPseudocodeServiceImpl.java
new file mode 100644
index 0000000..c78a3fd
--- /dev/null
+++ b/src/main/java/com/zy/ai/service/impl/MainProcessPseudocodeServiceImpl.java
@@ -0,0 +1,302 @@
+package com.zy.ai.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zy.ai.entity.ChatCompletionRequest;
+import com.zy.ai.service.LlmChatService;
+import com.zy.ai.service.MainProcessPseudocodeService;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+import com.zy.core.enums.RedisKeyType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("mainProcessPseudocodeService")
+public class MainProcessPseudocodeServiceImpl implements MainProcessPseudocodeService {
+
+ private static final long SUCCESS_CACHE_SECONDS = 60 * 60 * 24;
+ private static final long FAILURE_CACHE_SECONDS = 60 * 10;
+ private static final String FAILURE_TEXT = "AI鐢熸垚浼唬鐮佸け璐�";
+ private static final String PSEUDOCODE_SYSTEM_PROMPT = """
+ 浣犵幇鍦ㄦ槸涓�鍚嶉珮绾� Java 鏋舵瀯甯堝吋浼唬鐮佽浆鎹笓瀹讹紝涓撻棬璐熻矗鎶婂鏉傜殑 Java 浠g爜杞崲鎴愮粨鏋勬竻鏅般�侀�傚悎澶фā鍨嬮槄璇讳笌鎺ㄧ悊鐨勪吉浠g爜銆�
+
+ 璇蜂弗鏍奸伒瀹堜互涓嬭姹傚伐浣滐細
+
+ 鏍稿績鐩爣
+
+ 杈撳叆鏄竴娈垫垨澶氭 Java 浠g爜銆�
+
+ 杈撳嚭鏄竴娈典汉绫诲彲璇汇�侀�昏緫娓呮櫚銆佸敖閲忚瑷�涓珛鐨勪吉浠g爜銆�
+
+ 杩欎唤浼唬鐮佸皢琚敤浣滃悗缁ぇ妯″瀷鎻愰棶鐨勨�滃弬鑰冩弿杩扳�濓紝鎵�浠ヨ锛�
+
+ 淇濈暀鍏抽敭涓氬姟閫昏緫鍜屽垽鏂潯浠讹紱
+
+ 寮卞寲璇█缁嗚妭锛堝鍏蜂綋搴撱�佹敞瑙c�佹鏋剁粏鑺傦級锛�
+
+ 鐢ㄨ嚜鐒惰瑷� + 绠�娲佹祦绋嬬粨鏋勶紝甯姪澶фā鍨嬪揩閫熺悊瑙d唬鐮佹剰鍥俱��
+
+ 椋庢牸瑕佹眰
+
+ 浣跨敤涓枃鎻忚堪閫昏緫锛屼絾鍙互淇濈暀灏戦噺鍏抽敭鑻辨枃鏍囪瘑锛堜緥濡傜被鍚嶃�佹柟娉曞悕銆佺姸鎬佹灇涓撅級浠ヤ究璺熶唬鐮佸搴斻��
+
+ 浼唬鐮佽鍒嗗眰鍒嗗潡锛屽敖閲忔寜锛�
+
+ 绫昏亴璐h鏄�
+
+ 閲嶈瀛楁 / 鍏ㄥ眬鍙橀噺璇存槑
+
+ 姣忎釜鍏紑鏂规硶 / 鏍稿績绉佹湁鏂规硶鐨勪吉浠g爜
+
+ 閫昏緫涓婁娇鐢ㄧ被浼硷細
+
+ 濡傛灉 ... 鍒� ...
+
+ 鍚﹀垯濡傛灉 ...
+
+ 寰幆閬嶅巻鍒楄〃 ...
+
+ 璋冪敤鏈嶅姟/鏂规硶: ...
+
+ 杩斿洖 ...
+
+ 涓嶈拷姹備弗鏍艰娉曪紝鍙拷姹傛槗鎳傚拰鍑嗙‘銆�
+
+ 淇濈暀淇℃伅 & 鎶借薄淇℃伅
+
+ 蹇呴』淇濈暀锛�
+
+ 鍏抽敭涓氬姟鍚箟锛堜緥濡傗�滅敓鎴愬叆搴撲换鍔♀�濄�佲�滄鏌ュ爢鍨涙満浠诲姟鏄惁瀹屾垚鈥濓級
+
+ 鍏抽敭鏉′欢鍒ゆ柇锛堢姸鎬佸瓧娈点�佹灇涓俱�侀噸瑕侀厤缃紑鍏筹級
+
+ 閲嶈鏁版嵁娴佸悜锛堜粠鍝噷璇绘暟鎹�佸啓鍒板摢閲屻�佽皟鐢ㄤ簡鍝簺鏈嶅姟锛�
+
+ 涓庡閮ㄧ郴缁熶氦浜掞紙濡� HTTP 璋冪敤 WMS銆佸啓 Redis 閿併�佸啓鏁版嵁搴擄級
+
+ 鍙互鎶借薄鎴栫渷鐣ワ細
+
+ 鏃ュ織鎵撳嵃鐨勫叿浣撴牸寮忥紝鍙繚鐣欌�滆褰曟棩蹇楋細xxx鈥濆嵆鍙紱
+
+ 鍏蜂綋妗嗘灦娉ㄨВ锛堝 @Component, @Autowired 绛夛級锛�
+
+ 娉涘瀷銆佸紓甯告爤缁嗚妭銆佸伐鍏风被鍐呴儴瀹炵幇锛�
+
+ 缁撴瀯妯℃澘锛堜紭鍏堥伒寰級
+
+ 瀵逛簬涓�娈佃緝澶х殑 Java 绫伙紝璇锋寜浠ヤ笅缁撴瀯杈撳嚭浼唬鐮侊細
+
+ 绫绘暣浣撹鏄�
+
+ 绠�瑕佽鏄庤繖涓被鐨勭敤閫斿拰鍦ㄧ郴缁熶腑鐨勮鑹层��
+
+ 閲嶈瀛楁 / 閰嶇疆璇存槑
+
+ 鍒楀嚭鍏抽敭闈欐�佸彉閲� / 閰嶇疆椤� / 鐘舵�佺紦瀛橈紝骞剁敤涓�琛岃В閲婂畠浠殑鍚箟銆�
+
+ 涓绘祦绋嬫柟娉曪紙渚嬪 run()锛�
+
+ 鐢ㄦ湁搴忓垪琛ㄦ垨浼唬鐮侊紝鎸夎皟鐢ㄩ『搴忔弿杩颁富瑕佹楠ゃ��
+
+ 姣忎釜鏍稿績绉佹湁鏂规硶
+
+ 瀵逛簬姣忎釜鍏抽敭鏂规硶锛�
+
+ 鍏堢敤涓�琛屼腑鏂囨�荤粨鍔熻兘锛�
+
+ 鍐嶇粰鍑轰吉浠g爜娴佺▼锛堟潯浠躲�佸惊鐜�佸叧閿皟鐢級锛�
+
+ 涓庡閮ㄧ郴缁熶氦浜掔殑璇存槑
+
+ 鍗曠嫭寮鸿皟鏈夊摢浜涘湴鏂硅皟鐢ㄤ簡澶栭儴鏈嶅姟锛圚TTP銆佹秷鎭槦鍒椼�佹暟鎹簱銆丷edis 绛夛級銆�
+
+ 杈撳嚭鏍煎紡瑕佹眰
+
+ 浣跨敤 Markdown 缁撴瀯锛屾柟渚垮鍒剁粰鍏朵粬澶фā鍨嬶細
+
+ 鐢� ## 鏍囬鍖哄垎鈥滅被璇存槑鈥濄�佲�滀富娴佺▼浼唬鐮佲�濄�佲�滄柟娉曚吉浠g爜鈥濈瓑閮ㄥ垎锛�
+
+ 浼唬鐮佸潡鍙互浣跨敤缂╄繘鍜岄」鐩鍙凤紝鎴栫敤 pseudo 浠g爜鍧� 鍖呰9锛�
+
+ 涓嶈鐩存帴閫愯缈昏瘧浠g爜锛岃�屾槸鍋氭娊璞″拰鏁寸悊锛�
+
+ 涓嶈杈撳嚭鏃犲叧鏂囨湰锛屼緥濡傞亾姝夈�佸瘨鏆勬垨涓庝换鍔℃棤鍏崇殑瑙i噴銆�
+
+ 浼唬鐮佺ず渚嬮鏍硷紙绀烘剰锛�
+
+ 渚嬪褰撹緭鍏ヤ竴涓� run() 鏂规硶鏃讹紝鏈熸湜浣犵殑杈撳嚭椋庢牸绫讳技锛�
+
+ 鍑芥暟 run():
+ 璇诲彇閰嶇疆 enableFake, fakeRealTaskRequestWms
+ 濡傛灉 enableFake == "Y":
+ 璋冪敤 checkInStationHasTask() 妫�娴嬪叆搴撶珯骞剁敓鎴愪豢鐪熺珯鐐规暟鎹�
+ 濡傛灉 fakeRealTaskRequestWms == "N":
+ 璋冪敤 generateFakeInTask() 鐢熸垚鏈湴浠跨湡鍏ュ簱浠诲姟
+ 璋冪敤 generateFakeOutTask() 鐢熸垚鏈湴浠跨湡鍑哄簱浠诲姟
+ 璁$畻鎵�鏈夌珯鐐圭殑鍋滅暀鏃堕棿 calcAllStationStayTime()
+ 妫�鏌ュ嚭搴撶珯鐐规槸鍚﹁秴鏃跺苟閲嶇疆 checkOutStationStayTimeOut()
+ 妫�鏌ュ叆搴撶珯鐐硅揣鐗╂槸鍚﹀凡琚爢鍨涙満鍙栬蛋 checkInStationCrnTake()
+ 濡傛灉 fakeRealTaskRequestWms == "Y":
+ 璋冪敤 generateStoreWrkFile() 璇锋眰 WMS 鐢熸垚鐪熷疄浠诲姟
+ 璋冪敤 crnOperateUtils.crnIoExecute() 鎵ц鍫嗗灈鏈轰换鍔�
+ 璋冪敤 crnIoExecuteFinish() 澶勭悊鍫嗗灈鏈轰换鍔″畬鎴愬悗鐨勭姸鎬佹洿鏂板拰浠跨湡绔欑偣鐢熸垚
+ 璋冪敤 stationOperateProcessUtils.stationInExecute() 鎵ц杈撻�佺珯鍏ュ簱浠诲姟
+ 璋冪敤 stationOperateProcessUtils.stationOutExecute() 鎵ц杈撻�佺珯鍑哄簱浠诲姟
+ 璋冪敤 stationOperateProcessUtils.stationOutExecuteFinish() 妫�鏌ヨ緭閫佺珯鍑哄簱浠诲姟瀹屾垚
+
+ 瀵硅緭鍏ョ殑瑕佹眰
+
+ 濡傛灉鐢ㄦ埛缁欏嚭鐨勬槸澶氭浠g爜鎴栧彧缁欏嚭鐗囨锛�
+
+ 鍏堟帹鏂繖娈典唬鐮佺殑鑱岃矗锛�
+
+ 鍐嶆寜浣犺兘鐞嗚В鍒扮殑鑼冨洿杩涜浼唬鐮佽浆鎹紱
+
+ 濡傛灉瀛樺湪鏄庢樉缂哄け鐨勭被/鏂规硶锛屽彧闇�鍦ㄤ吉浠g爜涓敤鈥滆皟鐢� XXX锛堝叿浣撻�昏緫鐣ワ級鈥濇爣璁板嵆鍙��
+
+ 璇峰缁堜互銆岃鍚庣画澶фā鍨嬭兘鐪嬫噦杩欐浠g爜閫昏緫骞跺熀浜庝吉浠g爜杩涜鎺ㄧ悊鍜屾彁闂�嶄负鏈�楂樹紭鍏堢骇鏉ョ粍缁囦綘鐨勮緭鍑恒��
+ """;
+
+ @Value("${mainProcessPlugin}")
+ private String mainProcessPlugin;
+
+ @Autowired
+ private LlmChatService llmChatService;
+ @Autowired
+ private RedisUtil redisUtil;
+
+ @Override
+ public JSONObject queryMainProcessPseudocode(boolean refresh) {
+ String cacheKey = RedisKeyType.MAIN_PROCESS_PSEUDOCODE.key;
+ String cached = trimToNull(redisUtil.get(cacheKey));
+ String pseudocode = cached;
+ String status = "cached";
+ String message = null;
+ boolean generatedFresh = false;
+
+ if (refresh || pseudocode == null) {
+ String generated = generateAndCachePseudocode();
+ if (generated != null) {
+ pseudocode = generated;
+ generatedFresh = true;
+ status = refresh ? "refreshed" : "generated";
+ } else if (cached != null) {
+ pseudocode = cached;
+ status = "fallback_cached";
+ message = "閲嶆柊鐢熸垚澶辫触锛岃繑鍥炵紦瀛樹腑鐨勪吉浠g爜";
+ } else {
+ pseudocode = FAILURE_TEXT;
+ status = "failed";
+ message = FAILURE_TEXT;
+ redisUtil.set(cacheKey, FAILURE_TEXT, FAILURE_CACHE_SECONDS);
+ News.info(FAILURE_TEXT);
+ }
+ }
+
+ JSONObject result = new JSONObject();
+ result.put("mainProcessPlugin", resolvePlugin());
+ result.put("mainProcessPluginClass", resolvePluginClassName());
+ result.put("refreshRequested", refresh);
+ result.put("generatedFresh", generatedFresh);
+ result.put("cacheHit", !generatedFresh && ("cached".equals(status) || "fallback_cached".equals(status)));
+ result.put("status", status);
+ result.put("expireSeconds", redisUtil.getExpire(cacheKey));
+ result.put("message", message);
+ result.put("pseudocode", pseudocode);
+ return result;
+ }
+
+ private String generateAndCachePseudocode() {
+ String code = loadSourceBundle();
+ if (code == null || code.isEmpty()) {
+ return null;
+ }
+
+ List<ChatCompletionRequest.Message> messages = new ArrayList<>();
+ ChatCompletionRequest.Message system = new ChatCompletionRequest.Message();
+ system.setRole("system");
+ system.setContent(PSEUDOCODE_SYSTEM_PROMPT);
+ messages.add(system);
+
+ ChatCompletionRequest.Message user = new ChatCompletionRequest.Message();
+ user.setRole("user");
+ user.setContent("涓绘祦绋嬫彃浠剁被婧愪唬鐮侊細\n\n" + code);
+ messages.add(user);
+
+ try {
+ String result = trimToNull(llmChatService.chat(messages, 0.2, 2048));
+ if (result == null) {
+ return null;
+ }
+ redisUtil.set(RedisKeyType.MAIN_PROCESS_PSEUDOCODE.key, result, SUCCESS_CACHE_SECONDS);
+ News.info("AI鐢熸垚浼唬鐮佹垚鍔�");
+ return result;
+ } catch (Exception ignore) {
+ return null;
+ }
+ }
+
+ private String loadSourceBundle() {
+ StringBuilder code = new StringBuilder();
+ appendSource(code, resolvePluginClassName());
+ appendSource(code, "com.zy.core.utils.CrnOperateProcessUtils");
+ appendSource(code, "com.zy.core.utils.StationOperateProcessUtils");
+ return code.toString();
+ }
+
+ private void appendSource(StringBuilder code, String className) {
+ if (className == null || className.trim().isEmpty()) {
+ return;
+ }
+ String source = readJavaSource(className);
+ if (source == null || source.isEmpty()) {
+ return;
+ }
+ if (code.length() > 0) {
+ code.append("\n\n");
+ }
+ code.append("// ===== ").append(className).append(" =====\n");
+ code.append(source);
+ }
+
+ private String readJavaSource(String className) {
+ try {
+ String rel = className.replace('.', '/') + ".java";
+ Path path = Paths.get(System.getProperty("user.dir"), "src", "main", "java", rel);
+ if (!Files.exists(path)) {
+ return null;
+ }
+ return Files.readString(path, StandardCharsets.UTF_8);
+ } catch (Exception ignore) {
+ return null;
+ }
+ }
+
+ private String resolvePlugin() {
+ String plugin = trimToNull(mainProcessPlugin);
+ return plugin == null ? "NormalProcess" : plugin;
+ }
+
+ private String resolvePluginClassName() {
+ String plugin = resolvePlugin();
+ if (plugin.contains(".")) {
+ return plugin;
+ }
+ return "com.zy.core.plugin." + plugin;
+ }
+
+ private String trimToNull(Object value) {
+ if (value == null) {
+ return null;
+ }
+ String text = String.valueOf(value).trim();
+ return text.isEmpty() ? null : text;
+ }
+}
diff --git a/src/main/java/com/zy/ai/timer/MakeMainProcessPseudocodeScheduler.java b/src/main/java/com/zy/ai/timer/MakeMainProcessPseudocodeScheduler.java
index e75083f..61cd010 100644
--- a/src/main/java/com/zy/ai/timer/MakeMainProcessPseudocodeScheduler.java
+++ b/src/main/java/com/zy/ai/timer/MakeMainProcessPseudocodeScheduler.java
@@ -1,239 +1,22 @@
package com.zy.ai.timer;
-import com.zy.ai.entity.ChatCompletionRequest;
-import com.zy.ai.service.LlmChatService;
-import com.zy.common.utils.RedisUtil;
-import com.zy.core.News;
-import com.zy.core.enums.RedisKeyType;
+import com.zy.ai.service.MainProcessPseudocodeService;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
-
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.List;
@Component
public class MakeMainProcessPseudocodeScheduler {
- @Value("${mainProcessPlugin}")
- private String mainProcessPlugin;
@Autowired
- private LlmChatService llmChatService;
- @Autowired
- private RedisUtil redisUtil;
+ private MainProcessPseudocodeService mainProcessPseudocodeService;
@Scheduled(cron = "0/10 * * * * ? ")
public void refreshPseudocodeDaily() {
try {
- initMainProcessPseudocode();
+ mainProcessPseudocodeService.queryMainProcessPseudocode(false);
} catch (Exception e) {
e.printStackTrace();
}
}
-
- private void initMainProcessPseudocode(){
- Object object = redisUtil.get(RedisKeyType.MAIN_PROCESS_PSEUDOCODE.key);
- if (object != null) {
- return;
- }
-
- String plugin = mainProcessPlugin;
- if (plugin == null) plugin = "NormalProcess";
- String className = plugin.contains(".") ? plugin : "com.zy.core.plugin." + plugin;
- String code = null;
- try {
- String rel = className.replace('.', '/') + ".java";
- java.nio.file.Path p = Paths.get(System.getProperty("user.dir"), "src", "main", "java", rel);
- if (Files.exists(p)) {
- code = new String(Files.readAllBytes(p), StandardCharsets.UTF_8);
- }
- } catch (Exception ignore) {}
-
- String crnOperateProcessUtilsCode = null;
- try {
- String utilsClassName = "com.zy.core.utils.CrnOperateProcessUtils";
- String rel = utilsClassName.replace('.', '/') + ".java";
- java.nio.file.Path p = Paths.get(System.getProperty("user.dir"), "src", "main", "java", rel);
- if (Files.exists(p)) {
- crnOperateProcessUtilsCode = new String(Files.readAllBytes(p), StandardCharsets.UTF_8);
- code += crnOperateProcessUtilsCode;
- }
- } catch (Exception ignore) {}
-
- String StationOperateProcessUtilsCode = null;
- try {
- String utilsClassName = "com.zy.core.utils.StationOperateProcessUtils";
- String rel = utilsClassName.replace('.', '/') + ".java";
- java.nio.file.Path p = Paths.get(System.getProperty("user.dir"), "src", "main", "java", rel);
- if (Files.exists(p)) {
- StationOperateProcessUtilsCode = new String(Files.readAllBytes(p), StandardCharsets.UTF_8);
- code += StationOperateProcessUtilsCode;
- }
- } catch (Exception ignore) {}
-
- String result = null;
- if (code != null && !code.isEmpty()) {
- List<ChatCompletionRequest.Message> messages = new java.util.ArrayList<>();
- ChatCompletionRequest.Message system = new ChatCompletionRequest.Message();
- system.setRole("system");
- system.setContent("浣犵幇鍦ㄦ槸涓�鍚嶉珮绾� Java 鏋舵瀯甯堝吋浼唬鐮佽浆鎹笓瀹讹紝涓撻棬璐熻矗鎶婂鏉傜殑 Java 浠g爜杞崲鎴愮粨鏋勬竻鏅般�侀�傚悎澶фā鍨嬮槄璇讳笌鎺ㄧ悊鐨勪吉浠g爜銆俓n" +
- "\n" +
- "璇蜂弗鏍奸伒瀹堜互涓嬭姹傚伐浣滐細\n" +
- "\n" +
- "鏍稿績鐩爣\n" +
- "\n" +
- "杈撳叆鏄竴娈垫垨澶氭 Java 浠g爜銆俓n" +
- "\n" +
- "杈撳嚭鏄竴娈典汉绫诲彲璇汇�侀�昏緫娓呮櫚銆佸敖閲忚瑷�涓珛鐨勪吉浠g爜銆俓n" +
- "\n" +
- "杩欎唤浼唬鐮佸皢琚敤浣滃悗缁ぇ妯″瀷鎻愰棶鐨勨�滃弬鑰冩弿杩扳�濓紝鎵�浠ヨ锛歕n" +
- "\n" +
- "淇濈暀鍏抽敭涓氬姟閫昏緫鍜屽垽鏂潯浠讹紱\n" +
- "\n" +
- "寮卞寲璇█缁嗚妭锛堝鍏蜂綋搴撱�佹敞瑙c�佹鏋剁粏鑺傦級锛沑n" +
- "\n" +
- "鐢ㄨ嚜鐒惰瑷� + 绠�娲佹祦绋嬬粨鏋勶紝甯姪澶фā鍨嬪揩閫熺悊瑙d唬鐮佹剰鍥俱�俓n" +
- "\n" +
- "椋庢牸瑕佹眰\n" +
- "\n" +
- "浣跨敤涓枃鎻忚堪閫昏緫锛屼絾鍙互淇濈暀灏戦噺鍏抽敭鑻辨枃鏍囪瘑锛堜緥濡傜被鍚嶃�佹柟娉曞悕銆佺姸鎬佹灇涓撅級浠ヤ究璺熶唬鐮佸搴斻�俓n" +
- "\n" +
- "浼唬鐮佽鍒嗗眰鍒嗗潡锛屽敖閲忔寜锛歕n" +
- "\n" +
- "绫昏亴璐h鏄嶾n" +
- "\n" +
- "閲嶈瀛楁 / 鍏ㄥ眬鍙橀噺璇存槑\n" +
- "\n" +
- "姣忎釜鍏紑鏂规硶 / 鏍稿績绉佹湁鏂规硶鐨勪吉浠g爜\n" +
- "\n" +
- "閫昏緫涓婁娇鐢ㄧ被浼硷細\n" +
- "\n" +
- "濡傛灉 ... 鍒� ...\n" +
- "\n" +
- "鍚﹀垯濡傛灉 ...\n" +
- "\n" +
- "寰幆閬嶅巻鍒楄〃 ...\n" +
- "\n" +
- "璋冪敤鏈嶅姟/鏂规硶: ...\n" +
- "\n" +
- "杩斿洖 ...\n" +
- "\n" +
- "涓嶈拷姹備弗鏍艰娉曪紝鍙拷姹傛槗鎳傚拰鍑嗙‘銆俓n" +
- "\n" +
- "淇濈暀淇℃伅 & 鎶借薄淇℃伅\n" +
- "\n" +
- "蹇呴』淇濈暀锛歕n" +
- "\n" +
- "鍏抽敭涓氬姟鍚箟锛堜緥濡傗�滅敓鎴愬叆搴撲换鍔♀�濄�佲�滄鏌ュ爢鍨涙満浠诲姟鏄惁瀹屾垚鈥濓級\n" +
- "\n" +
- "鍏抽敭鏉′欢鍒ゆ柇锛堢姸鎬佸瓧娈点�佹灇涓俱�侀噸瑕侀厤缃紑鍏筹級\n" +
- "\n" +
- "閲嶈鏁版嵁娴佸悜锛堜粠鍝噷璇绘暟鎹�佸啓鍒板摢閲屻�佽皟鐢ㄤ簡鍝簺鏈嶅姟锛塡n" +
- "\n" +
- "涓庡閮ㄧ郴缁熶氦浜掞紙濡� HTTP 璋冪敤 WMS銆佸啓 Redis 閿併�佸啓鏁版嵁搴擄級\n" +
- "\n" +
- "鍙互鎶借薄鎴栫渷鐣ワ細\n" +
- "\n" +
- "鏃ュ織鎵撳嵃鐨勫叿浣撴牸寮忥紝鍙繚鐣欌�滆褰曟棩蹇楋細xxx鈥濆嵆鍙紱\n" +
- "\n" +
- "鍏蜂綋妗嗘灦娉ㄨВ锛堝 @Component, @Autowired 绛夛級锛沑n" +
- "\n" +
- "娉涘瀷銆佸紓甯告爤缁嗚妭銆佸伐鍏风被鍐呴儴瀹炵幇锛沑n" +
- "\n" +
- "缁撴瀯妯℃澘锛堜紭鍏堥伒寰級\n" +
- "\n" +
- "瀵逛簬涓�娈佃緝澶х殑 Java 绫伙紝璇锋寜浠ヤ笅缁撴瀯杈撳嚭浼唬鐮侊細\n" +
- "\n" +
- "绫绘暣浣撹鏄嶾n" +
- "\n" +
- "绠�瑕佽鏄庤繖涓被鐨勭敤閫斿拰鍦ㄧ郴缁熶腑鐨勮鑹层�俓n" +
- "\n" +
- "閲嶈瀛楁 / 閰嶇疆璇存槑\n" +
- "\n" +
- "鍒楀嚭鍏抽敭闈欐�佸彉閲� / 閰嶇疆椤� / 鐘舵�佺紦瀛橈紝骞剁敤涓�琛岃В閲婂畠浠殑鍚箟銆俓n" +
- "\n" +
- "涓绘祦绋嬫柟娉曪紙渚嬪 run()锛塡n" +
- "\n" +
- "鐢ㄦ湁搴忓垪琛ㄦ垨浼唬鐮侊紝鎸夎皟鐢ㄩ『搴忔弿杩颁富瑕佹楠ゃ�俓n" +
- "\n" +
- "姣忎釜鏍稿績绉佹湁鏂规硶\n" +
- "\n" +
- "瀵逛簬姣忎釜鍏抽敭鏂规硶锛歕n" +
- "\n" +
- "鍏堢敤涓�琛屼腑鏂囨�荤粨鍔熻兘锛沑n" +
- "\n" +
- "鍐嶇粰鍑轰吉浠g爜娴佺▼锛堟潯浠躲�佸惊鐜�佸叧閿皟鐢級锛沑n" +
- "\n" +
- "涓庡閮ㄧ郴缁熶氦浜掔殑璇存槑\n" +
- "\n" +
- "鍗曠嫭寮鸿皟鏈夊摢浜涘湴鏂硅皟鐢ㄤ簡澶栭儴鏈嶅姟锛圚TTP銆佹秷鎭槦鍒椼�佹暟鎹簱銆丷edis 绛夛級銆俓n" +
- "\n" +
- "杈撳嚭鏍煎紡瑕佹眰\n" +
- "\n" +
- "浣跨敤 Markdown 缁撴瀯锛屾柟渚垮鍒剁粰鍏朵粬澶фā鍨嬶細\n" +
- "\n" +
- "鐢� ## 鏍囬鍖哄垎鈥滅被璇存槑鈥濄�佲�滀富娴佺▼浼唬鐮佲�濄�佲�滄柟娉曚吉浠g爜鈥濈瓑閮ㄥ垎锛沑n" +
- "\n" +
- "浼唬鐮佸潡鍙互浣跨敤缂╄繘鍜岄」鐩鍙凤紝鎴栫敤 pseudo 浠g爜鍧� 鍖呰9锛沑n" +
- "\n" +
- "涓嶈鐩存帴閫愯缈昏瘧浠g爜锛岃�屾槸鍋氭娊璞″拰鏁寸悊锛沑n" +
- "\n" +
- "涓嶈杈撳嚭鏃犲叧鏂囨湰锛屼緥濡傞亾姝夈�佸瘨鏆勬垨涓庝换鍔℃棤鍏崇殑瑙i噴銆俓n" +
- "\n" +
- "浼唬鐮佺ず渚嬮鏍硷紙绀烘剰锛塡n" +
- "\n" +
- "渚嬪褰撹緭鍏ヤ竴涓� run() 鏂规硶鏃讹紝鏈熸湜浣犵殑杈撳嚭椋庢牸绫讳技锛歕n" +
- "\n" +
- "鍑芥暟 run():\n" +
- " 璇诲彇閰嶇疆 enableFake, fakeRealTaskRequestWms\n" +
- " 濡傛灉 enableFake == \"Y\":\n" +
- " 璋冪敤 checkInStationHasTask() 妫�娴嬪叆搴撶珯骞剁敓鎴愪豢鐪熺珯鐐规暟鎹甛n" +
- " 濡傛灉 fakeRealTaskRequestWms == \"N\":\n" +
- " 璋冪敤 generateFakeInTask() 鐢熸垚鏈湴浠跨湡鍏ュ簱浠诲姟\n" +
- " 璋冪敤 generateFakeOutTask() 鐢熸垚鏈湴浠跨湡鍑哄簱浠诲姟\n" +
- " 璁$畻鎵�鏈夌珯鐐圭殑鍋滅暀鏃堕棿 calcAllStationStayTime()\n" +
- " 妫�鏌ュ嚭搴撶珯鐐规槸鍚﹁秴鏃跺苟閲嶇疆 checkOutStationStayTimeOut()\n" +
- " 妫�鏌ュ叆搴撶珯鐐硅揣鐗╂槸鍚﹀凡琚爢鍨涙満鍙栬蛋 checkInStationCrnTake()\n" +
- " 濡傛灉 fakeRealTaskRequestWms == \"Y\":\n" +
- " 璋冪敤 generateStoreWrkFile() 璇锋眰 WMS 鐢熸垚鐪熷疄浠诲姟\n" +
- " 璋冪敤 crnOperateUtils.crnIoExecute() 鎵ц鍫嗗灈鏈轰换鍔n" +
- " 璋冪敤 crnIoExecuteFinish() 澶勭悊鍫嗗灈鏈轰换鍔″畬鎴愬悗鐨勭姸鎬佹洿鏂板拰浠跨湡绔欑偣鐢熸垚\n" +
- " 璋冪敤 stationOperateProcessUtils.stationInExecute() 鎵ц杈撻�佺珯鍏ュ簱浠诲姟\n" +
- " 璋冪敤 stationOperateProcessUtils.stationOutExecute() 鎵ц杈撻�佺珯鍑哄簱浠诲姟\n" +
- " 璋冪敤 stationOperateProcessUtils.stationOutExecuteFinish() 妫�鏌ヨ緭閫佺珯鍑哄簱浠诲姟瀹屾垚\n" +
- "\n" +
- "\n" +
- "瀵硅緭鍏ョ殑瑕佹眰\n" +
- "\n" +
- "濡傛灉鐢ㄦ埛缁欏嚭鐨勬槸澶氭浠g爜鎴栧彧缁欏嚭鐗囨锛歕n" +
- "\n" +
- "鍏堟帹鏂繖娈典唬鐮佺殑鑱岃矗锛沑n" +
- "\n" +
- "鍐嶆寜浣犺兘鐞嗚В鍒扮殑鑼冨洿杩涜浼唬鐮佽浆鎹紱\n" +
- "\n" +
- "濡傛灉瀛樺湪鏄庢樉缂哄け鐨勭被/鏂规硶锛屽彧闇�鍦ㄤ吉浠g爜涓敤鈥滆皟鐢� XXX锛堝叿浣撻�昏緫鐣ワ級鈥濇爣璁板嵆鍙�俓n" +
- "\n" +
- "璇峰缁堜互銆岃鍚庣画澶фā鍨嬭兘鐪嬫噦杩欐浠g爜閫昏緫骞跺熀浜庝吉浠g爜杩涜鎺ㄧ悊鍜屾彁闂�嶄负鏈�楂樹紭鍏堢骇鏉ョ粍缁囦綘鐨勮緭鍑恒��");
- messages.add(system);
- ChatCompletionRequest.Message user = new ChatCompletionRequest.Message();
- user.setRole("user");
- user.setContent("涓绘祦绋嬫彃浠剁被婧愪唬鐮侊細\n\n" + code);
- messages.add(user);
- try {
- result = llmChatService.chat(messages, 0.2, 2048);
- } catch (Exception ignore) {}
- }
-
- if (result == null) {
- redisUtil.set(RedisKeyType.MAIN_PROCESS_PSEUDOCODE.key, "AI鐢熸垚浼唬鐮佸け璐�", 60 * 10);
- News.info("AI鐢熸垚浼唬鐮佸け璐�");
- }else {
- redisUtil.set(RedisKeyType.MAIN_PROCESS_PSEUDOCODE.key, result, 60 * 60 * 24);
- News.info("AI鐢熸垚浼唬鐮佹垚鍔�");
- }
- }
-
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index d126daa..a45d6bc 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -63,7 +63,7 @@
sse-message-endpoint: /ai/mcp/message
streamable-http:
mcp-endpoint: /ai/mcp
- instructions: 鎻愪緵 WCS 璁惧鐘舵�併�佷换鍔°�佹棩蹇楀拰閰嶇疆鏌ヨ鑳藉姏
+ instructions: 鎻愪緵 WCS 璁惧鐘舵�併�佷换鍔°�佹棩蹇椼�侀厤缃拰涓绘祦绋嬩吉浠g爜鏌ヨ鑳藉姏
annotation-scanner:
enabled: false
capabilities:
--
Gitblit v1.9.1