From 1668b4ce8fb82ddfd54b44b86e78e3080b99a1cc Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期六, 21 三月 2026 08:44:07 +0800
Subject: [PATCH] #ai

---
 rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsTaskTools.java |  152 +++++++++++++++++++++++++++++++++++---------------
 1 files changed, 106 insertions(+), 46 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsTaskTools.java b/rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsTaskTools.java
index ba6d622..249d4bd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsTaskTools.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/ai/tool/RsfWmsTaskTools.java
@@ -2,7 +2,10 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.common.utils.FieldsUtils;
 import com.vincent.rsf.server.manager.entity.Task;
+import com.vincent.rsf.server.manager.entity.TaskItem;
+import com.vincent.rsf.server.manager.service.TaskItemService;
 import com.vincent.rsf.server.manager.service.TaskService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.ai.tool.annotation.Tool;
@@ -14,14 +17,20 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 @Component
 @RequiredArgsConstructor
 public class RsfWmsTaskTools {
 
     private final TaskService taskService;
+    private final TaskItemService taskItemService;
 
-    @Tool(name = "rsf_query_task_list", description = "鎸変换鍔″彿銆佺姸鎬併�佷换鍔$被鍨嬨�佹簮绔欑偣銆佺洰鏍囩珯鐐圭瓑鏉′欢鏌ヨ浠诲姟鍒楄〃銆�")
+    /**
+     * 鏌ヨ浠诲姟鍒楄〃銆�
+     * 鏂规硶瑕佹眰鑷冲皯甯︿竴涓繃婊ゆ潯浠讹紝閬垮厤妯″瀷鎶婁换鍔¤〃褰撲綔鍙洿鎺ラ亶鍘嗙殑鏁版嵁婧愩��
+     */
+    @Tool(name = "rsf_query_task_list", description = "鍙鏌ヨ宸ュ叿銆傛寜浠诲姟鍙枫�佺姸鎬併�佷换鍔$被鍨嬨�佹簮绔欑偣銆佺洰鏍囩珯鐐圭瓑鏉′欢鏌ヨ浠诲姟鍒楄〃銆�")
     public List<Map<String, Object>> queryTaskList(
             @ToolParam(description = "浠诲姟鍙凤紝鍙ā绯婃煡璇�") String taskCode,
             @ToolParam(description = "浠诲姟鐘舵�侊紝鍙��") Integer taskStatus,
@@ -29,10 +38,17 @@
             @ToolParam(description = "婧愮珯鐐癸紝鍙��") String orgSite,
             @ToolParam(description = "鐩爣绔欑偣锛屽彲閫�") String targSite,
             @ToolParam(description = "杩斿洖鏉℃暟锛岄粯璁� 10锛屾渶澶� 50") Integer limit) {
+        String normalizedTaskCode = BuiltinToolGovernanceSupport.sanitizeQueryText(taskCode, "浠诲姟鍙�", 64);
+        String normalizedOrgSite = BuiltinToolGovernanceSupport.sanitizeQueryText(orgSite, "婧愮珯鐐�", 64);
+        String normalizedTargSite = BuiltinToolGovernanceSupport.sanitizeQueryText(targSite, "鐩爣绔欑偣", 64);
+        BuiltinToolGovernanceSupport.requireAnyFilter("浠诲姟鍒楄〃鏌ヨ鑷冲皯闇�瑕佹彁渚涗竴涓繃婊ゆ潯浠�",
+                normalizedTaskCode, normalizedOrgSite, normalizedTargSite,
+                taskStatus == null ? null : String.valueOf(taskStatus),
+                taskType == null ? null : String.valueOf(taskType));
         LambdaQueryWrapper<Task> queryWrapper = new LambdaQueryWrapper<>();
-        int finalLimit = normalizeLimit(limit, 10, 50);
-        if (StringUtils.hasText(taskCode)) {
-            queryWrapper.like(Task::getTaskCode, taskCode);
+        int finalLimit = BuiltinToolGovernanceSupport.normalizeLimit(limit, 10, 50);
+        if (StringUtils.hasText(normalizedTaskCode)) {
+            queryWrapper.like(Task::getTaskCode, normalizedTaskCode);
         }
         if (taskStatus != null) {
             queryWrapper.eq(Task::getTaskStatus, taskStatus);
@@ -40,11 +56,11 @@
         if (taskType != null) {
             queryWrapper.eq(Task::getTaskType, taskType);
         }
-        if (StringUtils.hasText(orgSite)) {
-            queryWrapper.eq(Task::getOrgSite, orgSite);
+        if (StringUtils.hasText(normalizedOrgSite)) {
+            queryWrapper.eq(Task::getOrgSite, normalizedOrgSite);
         }
-        if (StringUtils.hasText(targSite)) {
-            queryWrapper.eq(Task::getTargSite, targSite);
+        if (StringUtils.hasText(normalizedTargSite)) {
+            queryWrapper.eq(Task::getTargSite, normalizedTargSite);
         }
         queryWrapper.orderByDesc(Task::getCreateTime).last("LIMIT " + finalLimit);
         List<Task> tasks = taskService.list(queryWrapper);
@@ -55,44 +71,29 @@
         return result;
     }
 
-    @Tool(name = "rsf_query_task_detail", description = "鏍规嵁浠诲姟 ID 鎴栦换鍔″彿鏌ヨ浠诲姟璇︽儏銆�")
+    /**
+     * 鏌ヨ鍗曚釜浠诲姟璇︽儏銆�
+     * 涓庡垪琛ㄦ煡璇笉鍚岋紝杩欓噷鍏佽杩斿洖鏇翠赴瀵岀殑瀛楁锛屼絾浠嶇劧瑕佹眰璋冪敤鏂归�氳繃浠诲姟 ID 鎴栦换鍔″彿鍋氱簿纭畾浣嶃��
+     */
+    @Tool(name = "rsf_query_task_detail", description = "鍙鏌ヨ宸ュ叿銆傛煡璇换鍔″垪琛ㄦ湁姝e父杩斿洖鍊煎彲浠ユ牴鎹换鍔D鏌ヨ浠诲姟璇︽儏銆�")
     public Map<String, Object> queryTaskDetail(
-            @ToolParam(description = "浠诲姟 ID") Long taskId,
-            @ToolParam(description = "浠诲姟鍙�") String taskCode) {
-        if (taskId == null && !StringUtils.hasText(taskCode)) {
-            throw new CoolException("浠诲姟 ID 鍜屼换鍔″彿鑷冲皯闇�瑕佹彁渚涗竴涓�");
+            @ToolParam(description = "浠诲姟 ID") Long taskId
+            ) {
+
+        if (taskId == null) {
+            throw new CoolException("浠诲姟 ID 闇�瑕佹彁渚�");
         }
-        Task task;
-        if (taskId != null) {
-            task = taskService.getById(taskId);
-        } else {
-            task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, taskCode));
-        }
-        if (task == null) {
+        List<TaskItem> taskItems = new ArrayList<>();
+        taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, taskId));
+
+        if (taskItems.isEmpty()) {
             throw new CoolException("鏈煡璇㈠埌浠诲姟");
         }
-        Map<String, Object> result = buildTaskSummary(task);
-        result.put("resource", task.getResource());
-        result.put("exceStatus", task.getExceStatus());
-        result.put("orgLoc", task.getOrgLoc());
-        result.put("targLoc", task.getTargLoc());
-        result.put("orgSite", task.getOrgSite());
-        result.put("orgSiteLabel", task.getOrgSite$());
-        result.put("targSite", task.getTargSite());
-        result.put("targSiteLabel", task.getTargSite$());
-        result.put("barcode", task.getBarcode());
-        result.put("robotCode", task.getRobotCode());
-        result.put("memo", task.getMemo());
-        result.put("expCode", task.getExpCode());
-        result.put("expDesc", task.getExpDesc());
-        result.put("startTime", task.getStartTime$());
-        result.put("endTime", task.getEndTime$());
-        result.put("createTime", task.getCreateTime$());
-        result.put("updateTime", task.getUpdateTime$());
-        return result;
+        return buildTaskItemDetail(taskItems);
     }
 
     private Map<String, Object> buildTaskSummary(Task task) {
+        /** 鎶婁换鍔″疄浣撴敹鏁涗负閫傚悎妯″瀷闃呰鍜屽墠绔睍绀虹殑鎽樿缁撴瀯銆� */
         Map<String, Object> item = new LinkedHashMap<>();
         item.put("id", task.getId());
         item.put("taskCode", task.getTaskCode());
@@ -111,13 +112,72 @@
         return item;
     }
 
-    private int normalizeLimit(Integer limit, int defaultValue, int maxValue) {
-        if (limit == null) {
-            return defaultValue;
+    private Map<String, Object> buildTaskItemDetail(List<TaskItem> taskItems) {
+        Map<String, Object> result = new LinkedHashMap<>();
+        result.put("taskId", taskItems.get(0).getTaskId());
+        result.put("itemCount", taskItems.size());
+
+        double totalAnfme = 0D;
+        double totalWorkQty = 0D;
+        double totalQty = 0D;
+        List<Map<String, Object>> items = new ArrayList<>();
+        for (TaskItem taskItem : taskItems) {
+            totalAnfme += taskItem.getAnfme() == null ? 0D : taskItem.getAnfme();
+            totalWorkQty += taskItem.getWorkQty() == null ? 0D : taskItem.getWorkQty();
+            totalQty += taskItem.getQty() == null ? 0D : taskItem.getQty();
+            items.add(buildTaskItemRow(taskItem));
         }
-        if (limit < 1 || limit > maxValue) {
-            throw new CoolException("limit 蹇呴』鍦� 1 鍒� " + maxValue + " 涔嬮棿");
-        }
-        return limit;
+
+        result.put("totalAnfme", totalAnfme);
+        result.put("totalWorkQty", totalWorkQty);
+        result.put("totalQty", totalQty);
+        result.put("items", items);
+        return result;
     }
+
+    private Map<String, Object> buildTaskItemRow(TaskItem taskItem) {
+        if (!Objects.isNull(taskItem.getFieldsIndex())) {
+            taskItem.setExtendFields(FieldsUtils.getFields(taskItem.getFieldsIndex()));
+        }
+        Map<String, Object> item = new LinkedHashMap<>();
+        item.put("id", taskItem.getId());
+        item.put("taskId", taskItem.getTaskId());
+        item.put("matnrId", taskItem.getMatnrId());
+        item.put("matnrCode", taskItem.getMatnrCode());
+        item.put("maktx", taskItem.getMaktx());
+        item.put("trackCode", taskItem.getTrackCode());
+        item.put("splrBatch", taskItem.getSplrBatch());
+        item.put("batch", taskItem.getBatch());
+        item.put("spec", taskItem.getSpec());
+        item.put("model", taskItem.getModel());
+        item.put("unit", taskItem.getUnit());
+        item.put("anfme", taskItem.getAnfme());
+        item.put("workQty", taskItem.getWorkQty());
+        item.put("qty", taskItem.getQty());
+        item.put("ableQty", taskItem.getAbleQty());
+        item.put("source", taskItem.getSource());
+        item.put("sourceId", taskItem.getSourceId());
+        item.put("sourceCode", taskItem.getSourceCode());
+        item.put("orderId", taskItem.getOrderId());
+        item.put("orderItemId", taskItem.getOrderItemId());
+        item.put("platItemId", taskItem.getPlatItemId());
+        item.put("platOrderCode", taskItem.getPlatOrderCode());
+        item.put("platWorkCode", taskItem.getPlatWorkCode());
+        item.put("projectCode", taskItem.getProjectCode());
+        item.put("orderType", taskItem.getOrderType());
+        item.put("orderTypeLabel", taskItem.getOrderType$());
+        item.put("wkType", taskItem.getWkType());
+        item.put("wkTypeLabel", taskItem.getWkType$());
+        item.put("isptResult", taskItem.getIsptResult());
+        item.put("isptResultLabel", taskItem.getIsptResult$());
+        item.put("fieldsIndex", taskItem.getFieldsIndex());
+        item.put("extendFields", taskItem.getExtendFields());
+        item.put("status", taskItem.getStatus());
+        item.put("statusLabel", taskItem.getStatus$());
+        item.put("memo", taskItem.getMemo());
+        item.put("createTime", taskItem.getCreateTime$());
+        item.put("updateTime", taskItem.getUpdateTime$());
+        return item;
+    }
+
 }

--
Gitblit v1.9.1