From 72a549ca41cee86c4895bbd875af2a2f3b25c8d1 Mon Sep 17 00:00:00 2001
From: jenkins <jenkins@example.com>
Date: 星期四, 21 五月 2026 14:56:01 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New_pro' into dev_pro_河南鹤壁

---
 src/main/java/com/ruoyi/ai/assistant/SalesAgent.java                                 |    4 
 src/main/java/com/ruoyi/ai/assistant/PurchaseAgent.java                              |    3 
 src/main/java/com/ruoyi/ai/controller/ManufacturingAiController.java                 |   12 +
 src/main/java/com/ruoyi/ai/service/PurchaseAiService.java                            |   12 
 src/main/java/com/ruoyi/home/controller/HomeController.java                          |  138 ++++++++++--
 src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java        |   21 +
 src/main/resources/manufacturing-agent-prompt.txt                                    |    2 
 src/main/resources/mapper/production/ProductionOrderMapper.xml                       |   30 ++
 src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java                 |   18 +
 src/main/resources/purchase-agent-prompt.txt                                         |    2 
 src/main/resources/sales-agent-prompt.txt                                            |    2 
 doc/20260521_首页HomeController接口升级前端变更文档.md                                           |  113 ++++++++++
 src/main/java/com/ruoyi/ai/controller/SalesAiController.java                         |   12 +
 src/main/java/com/ruoyi/quality/controller/QualityInspectController.java             |   19 +
 src/main/java/com/ruoyi/quality/controller/QualityInspectParamController.java        |    9 
 src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java         |   19 +
 src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java                     |  144 +++++++++++--
 src/main/java/com/ruoyi/ai/controller/XiaozhiController.java                         |   11 
 src/main/java/com/ruoyi/quality/controller/QualityTestStandardBindingController.java |   11 +
 src/main/java/com/ruoyi/quality/controller/QualityTestStandardParamController.java   |   13 +
 src/main/java/com/ruoyi/ai/assistant/ManufacturingAgent.java                         |    3 
 src/main/resources/approve-todo-agent-prompt.txt                                     |    2 
 src/main/java/com/ruoyi/ai/assistant/ApproveTodoAgent.java                           |    3 
 src/main/java/com/ruoyi/quality/controller/QualityReportController.java              |    8 
 24 files changed, 547 insertions(+), 64 deletions(-)

diff --git "a/doc/20260521_\351\246\226\351\241\265HomeController\346\216\245\345\217\243\345\215\207\347\272\247\345\211\215\347\253\257\345\217\230\346\233\264\346\226\207\346\241\243.md" "b/doc/20260521_\351\246\226\351\241\265HomeController\346\216\245\345\217\243\345\215\207\347\272\247\345\211\215\347\253\257\345\217\230\346\233\264\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..008660f
--- /dev/null
+++ "b/doc/20260521_\351\246\226\351\241\265HomeController\346\216\245\345\217\243\345\215\207\347\272\247\345\211\215\347\253\257\345\217\230\346\233\264\346\226\207\346\241\243.md"
@@ -0,0 +1,113 @@
+# 棣栭〉 HomeController 鎺ュ彛鍗囩骇鍓嶇鍙樻洿鏂囨。
+
+鏇存柊鏃堕棿锛�2026-05-21  
+閫傜敤妯″潡锛氶椤碉紙`/home`锛�
+
+## 1. 鍙樻洿姒傝
+
+鏈涓� **鍏煎寮忓崌绾�**锛屾棫璋冪敤鏂瑰紡浠嶅彲鐢ㄣ��  
+閲嶇偣鏄粰鐢熶骇鐪嬫澘鎺ュ彛澧炲姞鏇存槑纭殑绛涢�夊弬鏁帮紝渚夸簬鍓嶇鎸夋棩鏈熷拰鐘舵�佹煡璇€��
+
+娑夊強鎺ュ彛锛�
+
+1. `GET /home/productionOrderProgress`
+2. `GET /home/todayProductionPlan`
+
+## 2. 鍙傛暟鍙樻洿
+
+### 2.1 鐢熶骇璁㈠崟杩涘害 `GET /home/productionOrderProgress`
+
+鏃у弬鏁帮紙浠嶅吋瀹癸級锛�
+
+- `tab`锛歚all` / `inProgress` / `completed` / `paused`
+- `pageNum`锛氶粯璁� `1`
+- `pageSize`锛氶粯璁� `10`锛屾渶澶� `50`
+
+鏂板鍙傛暟锛�
+
+- `status`锛堝彲閫夛級锛氱姸鎬佺瓫閫夛紝浼樺厛绾ч珮浜� `tab`  
+  鍙�夊�硷細`all` / `waiting` / `inProgress` / `completed` / `paused` / `1` / `2` / `3` / `4`
+- `bizDate`锛堝彲閫夛級锛氫笟鍔℃棩鏈熺瓫閫夛紝鏍煎紡 `yyyy-MM-dd`锛堟寜璁㈠崟鍒涘缓鏃堕棿杩囨护锛�
+
+鍙傛暟浼樺厛绾э細
+
+1. 濡傛灉浼犱簡 `status`锛屽悗绔紭鍏堟寜 `status` 瑙f瀽锛�
+2. 鏈紶 `status` 鏃讹紝娌跨敤鍘熸湁 `tab` 琛屼负锛�
+3. `status` 鎴� `bizDate` 鏍煎紡閿欒鏃惰繑鍥炲け璐ヤ俊鎭��
+
+璇锋眰绀轰緥锛�
+
+```http
+GET /home/productionOrderProgress?status=completed&bizDate=2026-05-20&pageNum=1&pageSize=10
+```
+
+### 2.2 浠婃棩鐢熶骇璁″垝 `GET /home/todayProductionPlan`
+
+鏃у弬鏁帮紙浠嶅吋瀹癸級锛�
+
+- `limit`锛氶粯璁� `4`锛屾渶澶� `20`
+
+鏂板鍙傛暟锛�
+
+- `planDate`锛堝彲閫夛級锛氳鍒掓棩鏈熺瓫閫夛紝鏍煎紡 `yyyy-MM-dd`锛堟寜 `plan_complete_time` 杩囨护锛�
+
+璇锋眰绀轰緥锛�
+
+```http
+GET /home/todayProductionPlan?limit=6&planDate=2026-05-21
+```
+
+## 3. 杩斿洖缁撴瀯鍙樻洿
+
+### 3.1 `productionOrderProgress` 杩斿洖鏂板瀛楁
+
+鏂板锛�
+
+- `status`锛氭爣鍑嗗寲鐘舵�佸洖鏄撅紙`all` / `waiting` / `inProgress` / `completed` / `paused`锛�
+- `bizDate`锛氭棩鏈熺瓫閫夊洖鏄撅紙鏈紶鏃朵负 `null`锛�
+- `waitingCount`锛氬緟寮�濮嬭鍗曟暟閲�
+
+鍏煎淇濈暀锛�
+
+- `tab` 瀛楁缁х画杩斿洖锛堣�侀〉闈㈡棤闇�鏀瑰姩鍙户缁娇鐢級
+
+杩斿洖绀轰緥锛�
+
+```json
+{
+  "tab": "completed",
+  "status": "completed",
+  "bizDate": "2026-05-20",
+  "total": 24,
+  "pageNum": 1,
+  "pageSize": 10,
+  "waitingCount": 3,
+  "inProgressCount": 6,
+  "completedCount": 12,
+  "pausedCount": 2,
+  "records": []
+}
+```
+
+### 3.2 `todayProductionPlan` 杩斿洖鏂板瀛楁
+
+鏂板锛�
+
+- `planDate`锛氭棩鏈熺瓫閫夊洖鏄撅紙鏈紶鏃朵负 `null`锛�
+
+杩斿洖绀轰緥锛�
+
+```json
+{
+  "planDate": "2026-05-21",
+  "total": 9,
+  "records": []
+}
+```
+
+## 4. 鍓嶇鏀归�犲缓璁�
+
+1. 鏂伴〉闈㈠缓璁紭鍏堜紶 `status`锛岄�愭鏇夸唬 `tab`銆�
+2. 闇�瑕佹寜鏃ユ湡澶嶇洏鐪嬫澘鏃讹紝浣跨敤 `bizDate` / `planDate`銆�
+3. 鑰侀〉闈㈠彲涓嶆敼锛岀户缁部鐢ㄥ師鍙傛暟涔熻兘姝e父鑱旇皟銆�
+
diff --git a/src/main/java/com/ruoyi/ai/assistant/ApproveTodoAgent.java b/src/main/java/com/ruoyi/ai/assistant/ApproveTodoAgent.java
index 3b37909..bad0e0a 100644
--- a/src/main/java/com/ruoyi/ai/assistant/ApproveTodoAgent.java
+++ b/src/main/java/com/ruoyi/ai/assistant/ApproveTodoAgent.java
@@ -3,6 +3,7 @@
 import dev.langchain4j.service.MemoryId;
 import dev.langchain4j.service.SystemMessage;
 import dev.langchain4j.service.UserMessage;
+import dev.langchain4j.service.V;
 import dev.langchain4j.service.spring.AiService;
 import reactor.core.publisher.Flux;
 
@@ -16,5 +17,5 @@
 public interface ApproveTodoAgent {
 
     @SystemMessage(fromResource = "approve-todo-agent-prompt.txt")
-    Flux<String> chat(@MemoryId String memoryId, @UserMessage String userMessage);
+    Flux<String> chat(@MemoryId String memoryId, @UserMessage String userMessage, @V("currentDate") String currentDate);
 }
diff --git a/src/main/java/com/ruoyi/ai/assistant/ManufacturingAgent.java b/src/main/java/com/ruoyi/ai/assistant/ManufacturingAgent.java
index f0e8cf7..0d16703 100644
--- a/src/main/java/com/ruoyi/ai/assistant/ManufacturingAgent.java
+++ b/src/main/java/com/ruoyi/ai/assistant/ManufacturingAgent.java
@@ -3,6 +3,7 @@
 import dev.langchain4j.service.MemoryId;
 import dev.langchain4j.service.SystemMessage;
 import dev.langchain4j.service.UserMessage;
+import dev.langchain4j.service.V;
 import dev.langchain4j.service.spring.AiService;
 import reactor.core.publisher.Flux;
 
@@ -17,5 +18,5 @@
 public interface ManufacturingAgent {
 
     @SystemMessage(fromResource = "manufacturing-agent-prompt.txt")
-    Flux<String> chat(@MemoryId String memoryId, @UserMessage String userMessage);
+    Flux<String> chat(@MemoryId String memoryId, @UserMessage String userMessage, @V("currentDate") String currentDate);
 }
diff --git a/src/main/java/com/ruoyi/ai/assistant/PurchaseAgent.java b/src/main/java/com/ruoyi/ai/assistant/PurchaseAgent.java
index 6a4ff4e..421261d 100644
--- a/src/main/java/com/ruoyi/ai/assistant/PurchaseAgent.java
+++ b/src/main/java/com/ruoyi/ai/assistant/PurchaseAgent.java
@@ -3,6 +3,7 @@
 import dev.langchain4j.service.MemoryId;
 import dev.langchain4j.service.SystemMessage;
 import dev.langchain4j.service.UserMessage;
+import dev.langchain4j.service.V;
 import dev.langchain4j.service.spring.AiService;
 import reactor.core.publisher.Flux;
 
@@ -17,5 +18,5 @@
 public interface PurchaseAgent {
 
     @SystemMessage(fromResource = "purchase-agent-prompt.txt")
-    Flux<String> chat(@MemoryId String memoryId, @UserMessage String userMessage);
+    Flux<String> chat(@MemoryId String memoryId, @UserMessage String userMessage, @V("currentDate") String currentDate);
 }
diff --git a/src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java b/src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java
index 5991fc3..802cc13 100644
--- a/src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java
+++ b/src/main/java/com/ruoyi/ai/assistant/PurchaseIntentExecutor.java
@@ -4,6 +4,10 @@
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 
+import java.time.DayOfWeek;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -13,6 +17,8 @@
     private static final Pattern ID_PATTERN = Pattern.compile("\\b\\d{1,12}\\b");
     private static final Pattern LIMIT_PATTERN = Pattern.compile("(鍓峾鏈�杩�)?(\\d{1,2})鏉�");
     private static final Pattern DATE_PATTERN = Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
+    private static final Pattern RELATIVE_RANGE_PATTERN = Pattern.compile("(杩憒鏈�杩�)(\\d+)(澶﹟鍛▅涓湀|鏈坾骞�)");
+    private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
     private final PurchaseAgentTools purchaseAgentTools;
 
@@ -25,57 +31,60 @@
             return null;
         }
         String text = message.trim();
+        String startDate = extractStartDate(text);
+        String endDate = extractEndDate(text);
+        Integer limit = extractLimit(text);
 
         if (containsAny(text, "鎺掕", "鎺掑悕", "鍓嶅嚑", "鍓嶄簲", "鍓嶅崄") && containsAny(text, "鐗╂枡", "浜у搧", "鍘熸潗鏂�", "閲囪喘閲戦", "閲戦")) {
             return purchaseAgentTools.rankPurchaseMaterials(
                     memoryId,
-                    extractStartDate(text),
-                    extractEndDate(text),
+                    startDate,
+                    endDate,
                     text,
-                    extractLimit(text)
+                    limit
             );
         }
         if (containsAny(text, "鏈叆搴�", "寰呭叆搴�", "娌℃湁鍏ュ簱", "杩樻湭鍏ュ簱")) {
             return purchaseAgentTools.listUnstockedPurchaseOrders(
                     memoryId,
-                    extractStartDate(text),
-                    extractEndDate(text),
+                    startDate,
+                    endDate,
                     extractKeyword(text),
-                    extractLimit(text)
+                    limit
             );
         }
         if (containsAny(text, "鍒拌揣寮傚父", "鍒拌揣鏈夊紓甯�", "寮傚父鍒拌揣", "鍒拌揣闂", "渚涘簲鍟嗗埌璐у紓甯�")) {
             return purchaseAgentTools.listArrivalExceptions(
                     memoryId,
-                    extractStartDate(text),
-                    extractEndDate(text),
+                    startDate,
+                    endDate,
                     text,
-                    extractLimit(text)
+                    limit
             );
         }
         if (containsAny(text, "寰呬粯娆�", "鏈粯娆�", "鏈粯娓�", "寰呮敮浠�", "搴斾粯")) {
             return purchaseAgentTools.listPendingPaymentOrders(
                     memoryId,
-                    extractStartDate(text),
-                    extractEndDate(text),
+                    startDate,
+                    endDate,
                     extractKeyword(text),
-                    extractLimit(text)
+                    limit
             );
         }
         if (containsAny(text, "閫�璐�", "閫�鏂�", "鎷掓敹")) {
             return purchaseAgentTools.listPurchaseReturns(
                     memoryId,
-                    extractStartDate(text),
-                    extractEndDate(text),
+                    startDate,
+                    endDate,
                     extractKeyword(text),
-                    extractLimit(text)
+                    limit
             );
         }
         if (isStatsIntent(text)) {
             return purchaseAgentTools.getPurchaseStats(
                     memoryId,
-                    extractStartDate(text),
-                    extractEndDate(text),
+                    startDate,
+                    endDate,
                     text
             );
         }
@@ -86,9 +95,9 @@
             return purchaseAgentTools.listPurchaseLedgers(
                     memoryId,
                     extractKeyword(text),
-                    extractStartDate(text),
-                    extractEndDate(text),
-                    extractLimit(text)
+                    startDate,
+                    endDate,
+                    limit
             );
         }
         return null;
@@ -129,13 +138,18 @@
 
     private String extractStartDate(String text) {
         Matcher matcher = DATE_PATTERN.matcher(text);
-        return matcher.find() ? matcher.group() : null;
+        if (matcher.find()) {
+            return matcher.group();
+        }
+        DateRange range = extractRelativeDateRange(text);
+        return range == null ? null : range.start().format(DATE_FMT);
     }
 
     private String extractEndDate(String text) {
         Matcher matcher = DATE_PATTERN.matcher(text);
         if (!matcher.find()) {
-            return null;
+            DateRange range = extractRelativeDateRange(text);
+            return range == null ? null : range.end().format(DATE_FMT);
         }
         return matcher.find() ? matcher.group() : null;
     }
@@ -148,14 +162,100 @@
                 .replace("閲囪喘鍗�", "")
                 .replace("閲囪喘璁㈠崟", "")
                 .replace("璁㈠崟", "")
+                .replace("浠婂勾", "")
+                .replace("鏈勾", "")
+                .replace("鍘诲勾", "")
+                .replace("鏈湀", "")
+                .replace("涓婃湀", "")
+                .replace("鏈懆", "")
+                .replace("涓婂懆", "")
+                .replace("浠婂ぉ", "")
+                .replace("鏄ㄥぉ", "")
+                .replace("杩戝崐骞�", "")
+                .replace("鏈�杩戝崐骞�", "")
+                .replace("鏈�杩戝崐涓湀", "")
+                .replace("鍗婁釜鏈�", "")
                 .replace("鍙拌处", "")
                 .replace("鍒楄〃", "")
                 .replace("鍝簺", "")
+                .replace("浠�涔�", "")
+                .replace("鎯呭喌", "")
+                .replace("鏈夋病鏈�", "")
+                .replace("鏈夊暐", "")
+                .replace("鏈夋棤", "")
                 .replace("鍒楀嚭", "")
                 .replace("甯垜", "")
+                .replace("缁欐垜", "")
+                .replace("鎴�", "")
                 .replace("鏈�杩�10鏉�", "")
                 .replace("鍓�10鏉�", "")
                 .trim();
+        cleaned = DATE_PATTERN.matcher(cleaned).replaceAll("");
+        cleaned = RELATIVE_RANGE_PATTERN.matcher(cleaned).replaceAll("");
         return cleaned.length() >= 2 ? cleaned : null;
     }
+
+    private DateRange extractRelativeDateRange(String text) {
+        if (!StringUtils.hasText(text)) {
+            return null;
+        }
+        String normalized = text.toLowerCase(Locale.ROOT);
+        LocalDate today = LocalDate.now();
+
+        if (normalized.contains("浠婂ぉ")) {
+            return new DateRange(today, today);
+        }
+        if (normalized.contains("鏄ㄥぉ")) {
+            LocalDate yesterday = today.minusDays(1);
+            return new DateRange(yesterday, yesterday);
+        }
+        if (normalized.contains("浠婂勾") || normalized.contains("鏈勾")) {
+            return new DateRange(today.withDayOfYear(1), today);
+        }
+        if (normalized.contains("鍘诲勾")) {
+            LocalDate first = today.minusYears(1).withDayOfYear(1);
+            LocalDate last = first.withDayOfYear(first.lengthOfYear());
+            return new DateRange(first, last);
+        }
+        if (normalized.contains("鏈湀")) {
+            return new DateRange(today.withDayOfMonth(1), today);
+        }
+        if (normalized.contains("涓婃湀")) {
+            LocalDate first = today.minusMonths(1).withDayOfMonth(1);
+            LocalDate last = first.withDayOfMonth(first.lengthOfMonth());
+            return new DateRange(first, last);
+        }
+        if (normalized.contains("鏈懆")) {
+            LocalDate weekStart = today.with(DayOfWeek.MONDAY);
+            return new DateRange(weekStart, today);
+        }
+        if (normalized.contains("涓婂懆")) {
+            LocalDate weekStart = today.with(DayOfWeek.MONDAY).minusWeeks(1);
+            return new DateRange(weekStart, weekStart.plusDays(6));
+        }
+        if (normalized.contains("杩戝崐骞�") || normalized.contains("鏈�杩戝崐骞�")) {
+            return new DateRange(today.minusMonths(6).plusDays(1), today);
+        }
+        if (normalized.contains("杩戝崐涓湀") || normalized.contains("鏈�杩戝崐涓湀") || normalized.contains("鍗婁釜鏈�")) {
+            return new DateRange(today.minusDays(14), today);
+        }
+
+        Matcher matcher = RELATIVE_RANGE_PATTERN.matcher(normalized);
+        if (matcher.find()) {
+            int amount = Integer.parseInt(matcher.group(2));
+            String unit = matcher.group(3);
+            LocalDate start = switch (unit) {
+                case "澶�" -> today.minusDays(Math.max(amount - 1L, 0));
+                case "鍛�" -> today.minusWeeks(Math.max(amount, 1)).plusDays(1);
+                case "涓湀", "鏈�" -> today.minusMonths(Math.max(amount, 1)).plusDays(1);
+                case "骞�" -> today.minusYears(Math.max(amount, 1)).plusDays(1);
+                default -> today.minusDays(29);
+            };
+            return new DateRange(start, today);
+        }
+        return null;
+    }
+
+    private record DateRange(LocalDate start, LocalDate end) {
+    }
 }
diff --git a/src/main/java/com/ruoyi/ai/assistant/SalesAgent.java b/src/main/java/com/ruoyi/ai/assistant/SalesAgent.java
index 1636239..e2f9a81 100644
--- a/src/main/java/com/ruoyi/ai/assistant/SalesAgent.java
+++ b/src/main/java/com/ruoyi/ai/assistant/SalesAgent.java
@@ -3,6 +3,7 @@
 import dev.langchain4j.service.MemoryId;
 import dev.langchain4j.service.SystemMessage;
 import dev.langchain4j.service.UserMessage;
+import dev.langchain4j.service.V;
 import dev.langchain4j.service.spring.AiService;
 import reactor.core.publisher.Flux;
 
@@ -17,6 +18,5 @@
 public interface SalesAgent {
 
     @SystemMessage(fromResource = "sales-agent-prompt.txt")
-    Flux<String> chat(@MemoryId String memoryId, @UserMessage String userMessage);
+    Flux<String> chat(@MemoryId String memoryId, @UserMessage String userMessage, @V("currentDate") String currentDate);
 }
-
diff --git a/src/main/java/com/ruoyi/ai/controller/ManufacturingAiController.java b/src/main/java/com/ruoyi/ai/controller/ManufacturingAiController.java
index 8e2948e..d36a321 100644
--- a/src/main/java/com/ruoyi/ai/controller/ManufacturingAiController.java
+++ b/src/main/java/com/ruoyi/ai/controller/ManufacturingAiController.java
@@ -24,12 +24,18 @@
 import org.springframework.web.bind.annotation.RestController;
 import reactor.core.publisher.Flux;
 
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 @Tag(name = "鍒堕�犳櫤鑳藉姪鎵�")
 @RestController
 @RequestMapping("/manufacturing-ai")
 public class ManufacturingAiController extends BaseController {
+
+    private static final DateTimeFormatter CURRENT_DATE_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    private static final ZoneId CHINA_ZONE_ID = ZoneId.of("Asia/Shanghai");
 
     private final ManufacturingAgent manufacturingAgent;
     private final ManufacturingIntentExecutor manufacturingIntentExecutor;
@@ -76,7 +82,7 @@
             return Flux.just(directResponse);
         }
 
-        return manufacturingAgent.chat(memoryId, userMessage)
+        return manufacturingAgent.chat(memoryId, userMessage, currentDateForPrompt())
                 .doOnComplete(() -> aiChatSessionService.refreshSessionStats(memoryId, loginUser))
                 .doOnError(ex -> aiChatSessionService.refreshSessionStats(memoryId, loginUser));
     }
@@ -100,4 +106,8 @@
         aiChatSessionService.deleteCurrentUserSession(memoryId, SecurityUtils.getLoginUser());
         return R.ok();
     }
+
+    private String currentDateForPrompt() {
+        return LocalDate.now(CHINA_ZONE_ID).format(CURRENT_DATE_FMT);
+    }
 }
diff --git a/src/main/java/com/ruoyi/ai/controller/SalesAiController.java b/src/main/java/com/ruoyi/ai/controller/SalesAiController.java
index b5de9d1..b6ca0e9 100644
--- a/src/main/java/com/ruoyi/ai/controller/SalesAiController.java
+++ b/src/main/java/com/ruoyi/ai/controller/SalesAiController.java
@@ -24,12 +24,18 @@
 import org.springframework.web.bind.annotation.RestController;
 import reactor.core.publisher.Flux;
 
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 @Tag(name = "閿�鍞姪鎵嬫櫤鑳戒綋")
 @RestController
 @RequestMapping("/sales-ai")
 public class SalesAiController extends BaseController {
+
+    private static final DateTimeFormatter CURRENT_DATE_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    private static final ZoneId CHINA_ZONE_ID = ZoneId.of("Asia/Shanghai");
 
     private final SalesAgent salesAgent;
     private final SalesIntentExecutor salesIntentExecutor;
@@ -86,7 +92,7 @@
             return Flux.just(noGuessResponse);
         }
 
-        return salesAgent.chat(memoryId, userMessage)
+        return salesAgent.chat(memoryId, userMessage, currentDateForPrompt())
                 .doOnComplete(() -> aiChatSessionService.refreshSessionStats(memoryId, loginUser))
                 .doOnError(ex -> aiChatSessionService.refreshSessionStats(memoryId, loginUser));
     }
@@ -129,4 +135,8 @@
         }
         return false;
     }
+
+    private String currentDateForPrompt() {
+        return LocalDate.now(CHINA_ZONE_ID).format(CURRENT_DATE_FMT);
+    }
 }
diff --git a/src/main/java/com/ruoyi/ai/controller/XiaozhiController.java b/src/main/java/com/ruoyi/ai/controller/XiaozhiController.java
index 668dd31..bf77339 100644
--- a/src/main/java/com/ruoyi/ai/controller/XiaozhiController.java
+++ b/src/main/java/com/ruoyi/ai/controller/XiaozhiController.java
@@ -22,6 +22,9 @@
 import reactor.core.publisher.Flux;
 
 import java.io.IOException;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.UUID;
@@ -32,6 +35,8 @@
 public class XiaozhiController extends BaseController {
 
     private static final String FILE_ANALYZE_MEMORY_PREFIX = "file-analyze::";
+    private static final DateTimeFormatter CURRENT_DATE_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    private static final ZoneId CHINA_ZONE_ID = ZoneId.of("Asia/Shanghai");
 
     private final ApproveTodoAgent approveTodoAgent;
     private final ApproveTodoIntentExecutor approveTodoIntentExecutor;
@@ -93,7 +98,7 @@
             return Flux.just(noGuessResponse);
         }
 
-        return approveTodoAgent.chat(memoryId, userMessage)
+        return approveTodoAgent.chat(memoryId, userMessage, currentDateForPrompt())
                 .doOnComplete(() -> aiChatSessionService.refreshSessionStats(memoryId, loginUser))
                 .doOnError(ex -> aiChatSessionService.refreshSessionStats(memoryId, loginUser));
     }
@@ -183,4 +188,8 @@
         }
         return false;
     }
+
+    private String currentDateForPrompt() {
+        return LocalDate.now(CHINA_ZONE_ID).format(CURRENT_DATE_FMT);
+    }
 }
diff --git a/src/main/java/com/ruoyi/ai/service/PurchaseAiService.java b/src/main/java/com/ruoyi/ai/service/PurchaseAiService.java
index 616aa6c..85e174f 100644
--- a/src/main/java/com/ruoyi/ai/service/PurchaseAiService.java
+++ b/src/main/java/com/ruoyi/ai/service/PurchaseAiService.java
@@ -55,6 +55,8 @@
     private static final int MAX_FILE_COUNT = 10;
     private static final int MAX_SINGLE_FILE_TEXT_LENGTH = 8000;
     private static final int MAX_TOTAL_FILE_TEXT_LENGTH = 30000;
+    private static final DateTimeFormatter CURRENT_DATE_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    private static final ZoneId CHINA_ZONE_ID = ZoneId.of("Asia/Shanghai");
 
     private final PurchaseAgent purchaseAgent;
     private final PurchaseIntentExecutor purchaseIntentExecutor;
@@ -122,7 +124,7 @@
             return Flux.just(directResponse);
         }
 
-        return purchaseAgent.chat(memoryId, userMessage)
+        return purchaseAgent.chat(memoryId, userMessage, currentDateForPrompt())
                 .doOnComplete(() -> aiChatSessionService.refreshSessionStats(memoryId, loginUser))
                 .doOnError(ex -> aiChatSessionService.refreshSessionStats(memoryId, loginUser));
     }
@@ -184,10 +186,10 @@
                     .doOnError(ex -> aiChatSessionService.refreshSessionStats(finalMemoryId, loginUser));
         }
 
-        return Flux.defer(() -> purchaseAgent.chat(finalMemoryId, userPrompt))
+        return Flux.defer(() -> purchaseAgent.chat(finalMemoryId, userPrompt, currentDateForPrompt()))
                 .onErrorResume(NoSuchElementException.class, ex -> {
                     mongoChatMemoryStore.deleteMessages(finalMemoryId);
-                    return purchaseAgent.chat(finalMemoryId, userPrompt);
+                    return purchaseAgent.chat(finalMemoryId, userPrompt, currentDateForPrompt());
                 })
                 .doOnComplete(() -> aiChatSessionService.refreshSessionStats(finalMemoryId, loginUser))
                 .doOnError(ex -> aiChatSessionService.refreshSessionStats(finalMemoryId, loginUser));
@@ -455,6 +457,10 @@
         };
     }
 
+    private String currentDateForPrompt() {
+        return LocalDate.now(CHINA_ZONE_ID).format(CURRENT_DATE_FMT);
+    }
+
     private String buildPurchaseFileAnalyzePrompt(String message, String fileContent) {
         return """
                 浣犳槸閲囪喘涓氬姟鏂囦欢鍒嗘瀽鍔╂墜銆傝涓ユ牸鏍规嵁鐢ㄦ埛涓婁紶鐨勫涓枃浠跺拰鐢ㄦ埛瑕佹眰鎻愬彇閲囪喘涓氬姟鏁版嵁銆�
diff --git a/src/main/java/com/ruoyi/home/controller/HomeController.java b/src/main/java/com/ruoyi/home/controller/HomeController.java
index cbe236d..9bd23f6 100644
--- a/src/main/java/com/ruoyi/home/controller/HomeController.java
+++ b/src/main/java/com/ruoyi/home/controller/HomeController.java
@@ -28,8 +28,10 @@
 import java.math.RoundingMode;
 import java.text.ParseException;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.LinkedHashMap;
@@ -45,7 +47,7 @@
 @Tag(name = "棣栭〉缁熻")
 @RequestMapping("/home")
 @AllArgsConstructor
-    public class HomeController extends BaseController {
+public class HomeController extends BaseController {
 
     private final HomeService homeService;
     private final ProductionOrderMapper productionOrderMapper;
@@ -54,6 +56,7 @@
     private final DeviceRepairMapper deviceRepairMapper;
 
     private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
     private static final Integer ORDER_STATUS_WAIT = 1;
     private static final Integer ORDER_STATUS_RUNNING = 2;
     private static final Integer ORDER_STATUS_COMPLETED = 3;
@@ -63,7 +66,7 @@
     @GetMapping("/todos")
     @Log(title = "寰呭姙浜嬮」", businessType = BusinessType.OTHER)
     @Operation(summary = "寰呭姙浜嬮」")
-    public R todos(ApproveProcess req) throws ParseException {
+    public R todos() throws ParseException {
         List<ApproveProcess> approveProcessList = homeService.todos();
         return R.ok(approveProcessList);
     }
@@ -135,7 +138,7 @@
     @GetMapping("/business")
     @Log(title = "閿�鍞�-閲囪喘-搴撳瓨鏁版嵁", businessType = BusinessType.OTHER)
     @Operation(summary = "閿�鍞�-閲囪喘-搴撳瓨鏁版嵁")
-    public R business(HomeBusinessDto req) {
+    public R business() {
         HomeBusinessDto homeBusinessDto = homeService.business();
         return R.ok(homeBusinessDto);
     }
@@ -143,7 +146,7 @@
     @GetMapping("/analysisCustomerContractAmounts")
     @Log(title = "瀹㈡埛鍚堝悓閲戦鍒嗘瀽", businessType = BusinessType.OTHER)
     @Operation(summary = "瀹㈡埛鍚堝悓閲戦鍒嗘瀽")
-    public R analysisCustomerContractAmounts(AnalysisCustomerContractAmountsDto req) {
+    public R analysisCustomerContractAmounts() {
         AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts = homeService.analysisCustomerContractAmounts();
         return R.ok(analysisCustomerContractAmounts);
     }
@@ -246,13 +249,27 @@
     @GetMapping("/productionOrderProgress")
     @Operation(summary = "Production Order Progress")
     public R productionOrderProgress(@RequestParam(defaultValue = "all") String tab,
-                                              @RequestParam(defaultValue = "1") Long pageNum,
-                                              @RequestParam(defaultValue = "10") Long pageSize) {
+                                     @RequestParam(required = false) String status,
+                                     @RequestParam(required = false) String bizDate,
+                                     @RequestParam(defaultValue = "1") Long pageNum,
+                                     @RequestParam(defaultValue = "10") Long pageSize) {
+        LocalDate queryDate = parseDateOrNull(bizDate);
+        if (!isBlank(bizDate) && queryDate == null) {
+            return R.fail("bizDate鏍煎紡閿欒锛岃浣跨敤yyyy-MM-dd");
+        }
+        Integer statusFromParam = parseOrderStatus(status);
+        if (!isBlank(status) && statusFromParam == null && !"all".equalsIgnoreCase(status.trim())) {
+            return R.fail("status鍙傛暟涓嶅悎娉曪紝鍙�夊�硷細all/waiting/inProgress/completed/paused 鎴� 1/2/3/4");
+        }
+        Integer queryStatus = resolveOrderStatus(status, tab);
+
         long safePageNum = pageNum == null || pageNum < 1 ? 1 : pageNum;
         long safePageSize = pageSize == null || pageSize < 1 ? 10 : Math.min(pageSize, 50);
-        Integer status = resolveOrderStatus(tab);
         long offset = (safePageNum - 1) * safePageSize;
-        List<Map<String, Object>> rawRows = productionOrderMapper.selectHomeOrderProgressPage(status, offset, safePageSize);
+        LocalDateTime startTime = queryDate == null ? null : queryDate.atStartOfDay();
+        LocalDateTime endTime = queryDate == null ? null : queryDate.plusDays(1).atStartOfDay();
+
+        List<Map<String, Object>> rawRows = productionOrderMapper.selectHomeOrderProgressPage(queryStatus, offset, safePageSize, startTime, endTime);
         List<Map<String, Object>> records = new ArrayList<>();
         if (rawRows != null) {
             for (Map<String, Object> rawRow : rawRows) {
@@ -260,15 +277,18 @@
             }
         }
 
+        long waitingCount = 0L;
         long inProgressCount = 0L;
         long completedCount = 0L;
         long pausedCount = 0L;
-        List<Map<String, Object>> statusCountRows = productionOrderMapper.countHomeOrderProgressByStatus();
+        List<Map<String, Object>> statusCountRows = productionOrderMapper.countHomeOrderProgressByStatus(startTime, endTime);
         if (statusCountRows != null) {
             for (Map<String, Object> countRow : statusCountRows) {
                 Integer statusKey = toInteger(countRow.get("status"));
                 long cnt = toLong(countRow.get("cnt"));
-                if (Objects.equals(statusKey, ORDER_STATUS_RUNNING)) {
+                if (Objects.equals(statusKey, ORDER_STATUS_WAIT)) {
+                    waitingCount = cnt;
+                } else if (Objects.equals(statusKey, ORDER_STATUS_RUNNING)) {
                     inProgressCount = cnt;
                 } else if (Objects.equals(statusKey, ORDER_STATUS_COMPLETED)) {
                     completedCount = cnt;
@@ -279,10 +299,13 @@
         }
 
         Map<String, Object> result = new LinkedHashMap<>();
-        result.put("tab", tab);
-        result.put("total", toLong(productionOrderMapper.countHomeOrderProgress(status)));
+        result.put("tab", mapOrderTab(queryStatus));
+        result.put("status", mapOrderStatus(queryStatus));
+        result.put("bizDate", queryDate == null ? null : queryDate.format(DATE_FORMATTER));
+        result.put("total", toLong(productionOrderMapper.countHomeOrderProgress(queryStatus, startTime, endTime)));
         result.put("pageNum", safePageNum);
         result.put("pageSize", safePageSize);
+        result.put("waitingCount", waitingCount);
         result.put("inProgressCount", inProgressCount);
         result.put("completedCount", completedCount);
         result.put("pausedCount", pausedCount);
@@ -292,10 +315,18 @@
 
     @GetMapping("/todayProductionPlan")
     @Operation(summary = "Today Production Plan")
-    public R todayProductionPlan(@RequestParam(defaultValue = "4") Long limit) {
+    public R todayProductionPlan(@RequestParam(defaultValue = "4") Long limit,
+                                 @RequestParam(required = false) String planDate) {
+        LocalDate queryDate = parseDateOrNull(planDate);
+        if (!isBlank(planDate) && queryDate == null) {
+            return R.fail("planDate鏍煎紡閿欒锛岃浣跨敤yyyy-MM-dd");
+        }
+
         long safeLimit = limit == null || limit < 1 ? 4 : Math.min(limit, 20);
+        LocalDateTime planStart = queryDate == null ? null : queryDate.atStartOfDay();
+        LocalDateTime planEnd = queryDate == null ? null : queryDate.plusDays(1).atStartOfDay();
         List<Map<String, Object>> records = new ArrayList<>();
-        List<Map<String, Object>> rawRows = productionOrderMapper.selectHomeTodayProductionPlan(safeLimit);
+        List<Map<String, Object>> rawRows = productionOrderMapper.selectHomeTodayProductionPlan(safeLimit, planStart, planEnd);
         if (rawRows != null) {
             for (Map<String, Object> rawRow : rawRows) {
                 Map<String, Object> row = new LinkedHashMap<>();
@@ -311,7 +342,8 @@
         }
 
         Map<String, Object> result = new LinkedHashMap<>();
-        result.put("total", toLong(productionOrderMapper.countHomeTodayProductionPlan()));
+        result.put("planDate", queryDate == null ? null : queryDate.format(DATE_FORMATTER));
+        result.put("total", toLong(productionOrderMapper.countHomeTodayProductionPlan(planStart, planEnd)));
         result.put("records", records);
         return R.ok(result);
     }
@@ -372,7 +404,7 @@
     @GetMapping("/qualityStatistics")
     @Log(title = "璐ㄩ噺鍒嗘瀽", businessType = BusinessType.OTHER)
     @Operation(summary = "璐ㄩ噺鍒嗘瀽")
-    public R qualityStatistics(QualityStatisticsDto req) {
+    public R qualityStatistics() {
         QualityStatisticsDto qualityStatisticsDto = homeService.qualityStatistics();
         return R.ok(qualityStatisticsDto);
     }
@@ -423,7 +455,7 @@
     @GetMapping("/statisticsReceivablePayable")
     @Log(title = "搴旀敹搴斾粯缁熻", businessType = BusinessType.OTHER)
     @Operation(summary = "搴旀敹搴斾粯缁熻")
-    public R statisticsReceivablePayable(StatisticsReceivablePayableDto req, @DefaultType Integer type ) {
+    public R statisticsReceivablePayable(@DefaultType Integer type ) {
         StatisticsReceivablePayableDto statisticsReceivablePayable = homeService.statisticsReceivablePayable(type);
         return R.ok(statisticsReceivablePayable);
     }
@@ -472,21 +504,66 @@
         return row;
     }
 
-    private Integer resolveOrderStatus(String tab) {
-        if (tab == null) {
+    private Integer resolveOrderStatus(String status, String tab) {
+        if (!isBlank(status)) {
+            return parseOrderStatus(status);
+        }
+        return parseOrderStatus(tab);
+    }
+
+    private Integer parseOrderStatus(String rawStatus) {
+        if (isBlank(rawStatus)) {
             return null;
         }
-        String normalized = tab.trim().toLowerCase();
-        if ("inprogress".equals(normalized)) {
+        String normalized = rawStatus.trim().toLowerCase();
+        if ("all".equals(normalized)) {
+            return null;
+        }
+        if ("1".equals(normalized) || "waiting".equals(normalized) || "wait".equals(normalized)) {
+            return ORDER_STATUS_WAIT;
+        }
+        if ("2".equals(normalized) || "inprogress".equals(normalized) || "running".equals(normalized)) {
             return ORDER_STATUS_RUNNING;
         }
-        if ("completed".equals(normalized)) {
+        if ("3".equals(normalized) || "completed".equals(normalized)) {
             return ORDER_STATUS_COMPLETED;
         }
-        if ("paused".equals(normalized)) {
+        if ("4".equals(normalized) || "paused".equals(normalized)) {
             return ORDER_STATUS_PAUSED;
         }
         return null;
+    }
+
+    private String mapOrderTab(Integer status) {
+        if (Objects.equals(status, ORDER_STATUS_RUNNING)) {
+            return "inProgress";
+        }
+        if (Objects.equals(status, ORDER_STATUS_COMPLETED)) {
+            return "completed";
+        }
+        if (Objects.equals(status, ORDER_STATUS_PAUSED)) {
+            return "paused";
+        }
+        if (Objects.equals(status, ORDER_STATUS_WAIT)) {
+            return "waiting";
+        }
+        return "all";
+    }
+
+    private String mapOrderStatus(Integer status) {
+        if (Objects.equals(status, ORDER_STATUS_WAIT)) {
+            return "waiting";
+        }
+        if (Objects.equals(status, ORDER_STATUS_RUNNING)) {
+            return "inProgress";
+        }
+        if (Objects.equals(status, ORDER_STATUS_COMPLETED)) {
+            return "completed";
+        }
+        if (Objects.equals(status, ORDER_STATUS_PAUSED)) {
+            return "paused";
+        }
+        return "all";
     }
 
     private String mapOrderStatusLabel(Integer status) {
@@ -644,6 +721,21 @@
         }
     }
 
+    private LocalDate parseDateOrNull(String rawDate) {
+        if (isBlank(rawDate)) {
+            return null;
+        }
+        try {
+            return LocalDate.parse(rawDate.trim(), DATE_FORMATTER);
+        } catch (DateTimeParseException ex) {
+            return null;
+        }
+    }
+
+    private boolean isBlank(String value) {
+        return value == null || value.trim().isEmpty();
+    }
+
     private BigDecimal zeroIfNull(BigDecimal value) {
         return value == null ? BigDecimal.ZERO : value;
     }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java
index fcc9172..cec7ca5 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java
@@ -42,14 +42,22 @@
 
     List<Map<String, Object>> selectHomeOrderProgressPage(@Param("status") Integer status,
                                                           @Param("offset") Long offset,
-                                                          @Param("size") Long size);
+                                                          @Param("size") Long size,
+                                                          @Param("startTime") LocalDateTime startTime,
+                                                          @Param("endTime") LocalDateTime endTime);
 
-    Long countHomeOrderProgress(@Param("status") Integer status);
+    Long countHomeOrderProgress(@Param("status") Integer status,
+                                @Param("startTime") LocalDateTime startTime,
+                                @Param("endTime") LocalDateTime endTime);
 
-    List<Map<String, Object>> countHomeOrderProgressByStatus();
+    List<Map<String, Object>> countHomeOrderProgressByStatus(@Param("startTime") LocalDateTime startTime,
+                                                              @Param("endTime") LocalDateTime endTime);
 
-    List<Map<String, Object>> selectHomeTodayProductionPlan(@Param("size") Long size);
+    List<Map<String, Object>> selectHomeTodayProductionPlan(@Param("size") Long size,
+                                                             @Param("planStart") LocalDateTime planStart,
+                                                             @Param("planEnd") LocalDateTime planEnd);
 
-    Long countHomeTodayProductionPlan();
+    Long countHomeTodayProductionPlan(@Param("planStart") LocalDateTime planStart,
+                                      @Param("planEnd") LocalDateTime planEnd);
 
 }
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
index 0319071..cc295d5 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityInspectController.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.quality.dto.QualityInspectDto;
 import com.ruoyi.quality.pojo.QualityInspect;
@@ -10,6 +12,7 @@
 import com.ruoyi.quality.service.IQualityInspectFileService;
 import com.ruoyi.quality.service.IQualityInspectParamService;
 import com.ruoyi.quality.service.IQualityInspectService;
+import io.swagger.v3.oas.annotations.Operation;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import org.springframework.util.CollectionUtils;
@@ -37,6 +40,8 @@
      * @return
      */
     @PostMapping("/add")
+    @Operation(summary = "鏂板妫�楠�")
+    @Log(title = "鏂板妫�楠�", businessType = BusinessType.INSERT)
     public R<?> add(@RequestBody QualityInspectDto qualityInspectDto) {
         return R.ok(qualityInspectService.add(qualityInspectDto));
     }
@@ -48,6 +53,8 @@
      * @return
      */
     @DeleteMapping("/del")
+    @Operation(summary = "鍒犻櫎妫�楠�")
+    @Log(title = "鍒犻櫎妫�楠�", businessType = BusinessType.DELETE)
     public R<?> delQualityInspect(@RequestBody List<Integer> ids) {
         if (CollectionUtils.isEmpty(ids)) {
             return R.fail("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
@@ -76,6 +83,8 @@
      * @return
      */
     @GetMapping("/{id}")
+    @Operation(summary = "妫�楠岃鎯�")
+    @Log(title = "妫�楠岃鎯�", businessType = BusinessType.OTHER)
     public R<?> QualityInspectDetail(@PathVariable("id") Integer id) {
         return R.ok(qualityInspectService.getDetailById(id));
     }
@@ -87,6 +96,8 @@
      * @return
      */
     @PostMapping("/update")
+    @Operation(summary = "淇敼妫�楠�")
+    @Log(title = "淇敼妫�楠�", businessType = BusinessType.UPDATE)
     public R<?> update(@RequestBody QualityInspectDto qualityInspectDto) {
         return R.ok(qualityInspectService.updateQualityInspect(qualityInspectDto));
     }
@@ -99,6 +110,8 @@
      * @return
      */
     @GetMapping("/listPage")
+    @Operation(summary = "鍒嗛〉鏌ヨ妫�楠�")
+    @Log(title = "鍒嗛〉鏌ヨ妫�楠�", businessType = BusinessType.OTHER)
     public R<?> qualityInspectListPage(Page page, QualityInspectDto qualityInspect) {
         return R.ok(qualityInspectService.qualityInspectListPage(page, qualityInspect));
     }
@@ -110,6 +123,8 @@
      * @param qualityInspect
      */
     @PostMapping("/export")
+    @Operation(summary = "瀵煎嚭妫�楠�")
+    @Log(title = "瀵煎嚭妫�楠�", businessType = BusinessType.EXPORT)
     public void qualityInspectExport(HttpServletResponse response, QualityInspect qualityInspect) {
         qualityInspectService.qualityInspectExport(response, qualityInspect);
     }
@@ -121,6 +136,8 @@
      * @return
      */
     @PostMapping("/submit")
+    @Operation(summary = "鎻愪氦妫�楠�")
+    @Log(title = "鎻愪氦妫�楠�", businessType = BusinessType.OTHER)
     public R<?> submit(@RequestBody QualityInspect qualityInspect) {
         return R.ok(qualityInspectService.submit(qualityInspect));
     }
@@ -132,6 +149,8 @@
      * @param qualityInspect
      */
     @PostMapping("/down")
+    @Operation(summary = "涓嬭浇妫�楠�")
+    @Log(title = "涓嬭浇妫�楠�", businessType = BusinessType.OTHER)
     public void down(HttpServletResponse response, @RequestBody QualityInspect qualityInspect) {
         qualityInspectService.down(response, qualityInspect);
     }
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityInspectParamController.java b/src/main/java/com/ruoyi/quality/controller/QualityInspectParamController.java
index b408be6..48fc093 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityInspectParamController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityInspectParamController.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.quality.pojo.QualityInspectFile;
@@ -9,6 +11,7 @@
 import com.ruoyi.quality.service.IQualityInspectFileService;
 import com.ruoyi.quality.service.IQualityInspectParamService;
 import com.ruoyi.quality.service.IQualityInspectService;
+import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -32,6 +35,8 @@
      * @return
      */
     @GetMapping("/{inspectId}")
+    @Operation(summary = "妫�楠屽弬鏁伴」璇︽儏")
+    @Log(title = "妫�楠屽弬鏁伴」璇︽儏", businessType = BusinessType.OTHER)
     public R<?> QualityInspectParamDetail(@PathVariable("inspectId") Integer inspectId) {
         return R.ok(qualityInspectParamService.qualityInspectParamDetail(inspectId));
     }
@@ -43,6 +48,8 @@
      * @return
      */
     @PostMapping("/update")
+    @Operation(summary = "淇敼妫�楠屽弬鏁伴」")
+    @Log(title = "淇敼妫�楠屽弬鏁伴」", businessType = BusinessType.UPDATE)
     public R<?> update(@RequestBody List<QualityInspectParam> qualityInspectParams) {
         return R.ok(qualityInspectParamService.updateBatchById(qualityInspectParams));
     }
@@ -53,6 +60,8 @@
      * @return
      */
     @DeleteMapping("/del")
+    @Operation(summary = "鍒犻櫎妫�楠屽弬鏁伴」")
+    @Log(title = "鍒犻櫎妫�楠屽弬鏁伴」", businessType = BusinessType.DELETE)
     public R<?> delQualityUnqualified(@RequestBody List<Integer> ids) {
         if(CollectionUtils.isEmpty(ids)){
             return R.fail("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityReportController.java b/src/main/java/com/ruoyi/quality/controller/QualityReportController.java
index 9b1aaf4..370e8f0 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityReportController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityReportController.java
@@ -1,5 +1,7 @@
 package com.ruoyi.quality.controller;
 
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.quality.service.QualityReportService;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -30,6 +32,7 @@
      */
     @Operation(summary = "鑾峰彇妫�楠岀粺璁℃暟鎹�")
     @GetMapping("/getInspectStatistics")
+    @Log(title = "鑾峰彇妫�楠岀粺璁℃暟鎹�", businessType = BusinessType.OTHER)
     public R<?> getInspectStatistics() {
         return R.ok(qualityReportService.getInspectStatistics());
     }
@@ -39,6 +42,7 @@
      */
     @Operation(summary = "鑾峰彇鍚堟牸鐜囩粺璁℃暟鎹�")
     @GetMapping("/getPassRateStatistics")
+    @Log(title = "鑾峰彇鍚堟牸鐜囩粺璁℃暟鎹�", businessType = BusinessType.OTHER)
     public R<?> getPassRateStatistics() {
         return R.ok(qualityReportService.getPassRateStatistics());
     }
@@ -48,6 +52,7 @@
      */
     @Operation(summary = "鑾峰彇鏈堝害鍚堟牸鐜囩粺璁℃暟鎹�")
     @GetMapping("/getMonthlyPassRateStatistics")
+    @Log(title = "鑾峰彇鏈堝害鍚堟牸鐜囩粺璁℃暟鎹�", businessType = BusinessType.OTHER)
     public R<?> getMonthlyPassRateStatistics(@RequestParam("year") String year) {
         return R.ok(qualityReportService.getMonthlyPassRateStatistics(year));
     }
@@ -57,6 +62,7 @@
      */
     @Operation(summary = "鑾峰彇骞村害鎬诲悎鏍肩巼缁熻鏁版嵁")
     @GetMapping("/getYearlyPassRateStatistics")
+    @Log(title = "鑾峰彇骞村害鎬诲悎鏍肩巼缁熻鏁版嵁", businessType = BusinessType.OTHER)
     public R<?> getYearlyPassRateStatistics(@RequestParam("year") String year) {
         return R.ok(qualityReportService.getYearlyPassRateStatistics(year));
     }
@@ -66,6 +72,7 @@
      */
     @Operation(summary = "鑾峰彇鏈堝害瀹屾垚鏄庣粏鏁版嵁")
     @GetMapping("/getMonthlyCompletionDetails")
+    @Log(title = "鑾峰彇鏈堝害瀹屾垚鏄庣粏鏁版嵁", businessType = BusinessType.OTHER)
     public R<?> getMonthlyCompletionDetails(@RequestParam("year") String year) {
         return R.ok(qualityReportService.getMonthlyCompletionDetails(year));
     }
@@ -75,6 +82,7 @@
      */
     @Operation(summary = "鑾峰彇鐑偣妫�娴嬫寚鏍囩粺璁�")
     @GetMapping("/getTopParameters")
+    @Log(title = "鑾峰彇鐑偣妫�娴嬫寚鏍囩粺璁�", businessType = BusinessType.OTHER)
     public R<?> getTopParameters(@RequestParam("modelType") Integer modelType) {
         return R.ok(qualityReportService.getTopParameters(modelType));
     }
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardBindingController.java b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardBindingController.java
index c34f3ee..7f2142e 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardBindingController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardBindingController.java
@@ -1,8 +1,12 @@
 package com.ruoyi.quality.controller;
 
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.quality.pojo.QualityTestStandardBinding;
 import com.ruoyi.quality.service.QualityTestStandardBindingService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.AllArgsConstructor;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
@@ -20,6 +24,7 @@
 @RestController
 @RequestMapping("/qualityTestStandardBinding")
 @AllArgsConstructor
+@Tag(name = "妫�娴嬫爣鍑嗕富琛ㄤ笌浜у搧鍏宠仈琛�")
 public class QualityTestStandardBindingController {
 
     private QualityTestStandardBindingService qualityTestStandardBindingService;
@@ -31,6 +36,8 @@
      * @return
      */
     @PostMapping("/add")
+    @Operation(summary = "鏂板妫�娴嬫爣鍑嗕富琛ㄤ笌浜у搧鍏宠仈琛�")
+    @Log(title = "鏂板妫�娴嬫爣鍑嗕富琛ㄤ笌浜у搧鍏宠仈琛�", businessType = BusinessType.INSERT)
     public R<?> add(@RequestBody List<QualityTestStandardBinding> qualityTestStandardBindings) {
         return R.ok(qualityTestStandardBindingService.add(qualityTestStandardBindings));
     }
@@ -42,6 +49,8 @@
      * @return
      */
     @DeleteMapping("/del")
+    @Operation(summary = "鍒犻櫎妫�娴嬫爣鍑嗕富琛ㄤ笌浜у搧鍏宠仈琛�")
+    @Log(title = "鍒犻櫎妫�娴嬫爣鍑嗕富琛ㄤ笌浜у搧鍏宠仈琛�", businessType = BusinessType.DELETE)
     public R<?> delQualityTestStandard(@RequestBody List<Integer> ids) {
         if (CollectionUtils.isEmpty(ids)) {
             return R.fail("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
@@ -55,6 +64,8 @@
      * @return
      */
     @GetMapping("/list")
+    @Operation(summary = "妫�娴嬫寚鏍囩淮鎶ゆ煡璇�")
+    @Log(title = "妫�娴嬫寚鏍囩淮鎶ゆ煡璇�", businessType = BusinessType.OTHER)
     public R<?> listBinding(Long testStandardId) {
         return R.ok(qualityTestStandardBindingService.listBinding(testStandardId));
     }
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java
index 42aa2ea..ab8fca9 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardController.java
@@ -2,11 +2,15 @@
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.quality.pojo.QualityTestStandard;
 import com.ruoyi.quality.pojo.QualityTestStandardParam;
 import com.ruoyi.quality.service.IQualityTestStandardService;
 import com.ruoyi.quality.service.QualityTestStandardParamService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -24,6 +28,7 @@
  */
 @RestController
 @RequestMapping("/qualityTestStandard")
+@Tag(name = "妫�娴嬫爣鍑嗕富琛�")
 public class QualityTestStandardController {
 
     @Resource
@@ -39,6 +44,8 @@
      * @return
      */
     @PostMapping("/add")
+    @Operation(summary = "鏂板妫�娴嬫爣鍑嗕富琛�")
+    @Log(title = "鏂板妫�娴嬫爣鍑嗕富琛�", businessType = BusinessType.INSERT)
     public R<?> add(@RequestBody QualityTestStandard qualityTestStandard) {
         return R.ok(qualityTestStandardService.save(qualityTestStandard));
     }
@@ -49,6 +56,8 @@
      * @return
      */
     @DeleteMapping("/del")
+    @Operation(summary = "鍒犻櫎妫�娴嬫爣鍑嗕富琛�")
+    @Log(title = "鍒犻櫎妫�娴嬫爣鍑嗕富琛�", businessType = BusinessType.DELETE)
     public R<?> delQualityTestStandard(@RequestBody List<Integer> ids) {
         if(CollectionUtils.isEmpty(ids)){
             return R.fail("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
@@ -62,6 +71,8 @@
      * @return
      */
     @PostMapping("/update")
+    @Operation(summary = "妫�娴嬫爣鍑嗕富琛ㄤ慨鏀�")
+    @Log(title = "妫�娴嬫爣鍑嗕富琛ㄤ慨鏀�", businessType = BusinessType.UPDATE)
     public R<?> update(@RequestBody QualityTestStandard qualityTestStandard) {
         return R.ok(qualityTestStandardService.updateById(qualityTestStandard));
     }
@@ -73,6 +84,8 @@
      * @return
      */
     @GetMapping("/listPage")
+    @Operation(summary = "妫�娴嬫爣鍑嗕富琛ㄥ垎椤垫煡璇�")
+    @Log(title = "妫�娴嬫爣鍑嗕富琛ㄥ垎椤垫煡璇�", businessType = BusinessType.OTHER)
     public R<?> qualityTestStandardListPage(Page page, QualityTestStandard qualityTestStandard) {
         return R.ok(qualityTestStandardService.qualityTestStandardListPage(page, qualityTestStandard));
     }
@@ -83,6 +96,8 @@
      * @return
      */
     @PostMapping("/copyParam")
+    @Operation(summary = "妫�娴嬫爣鍑嗗鍒跺弬鏁�")
+    @Log(title = "妫�娴嬫爣鍑嗗鍒跺弬鏁�", businessType = BusinessType.OTHER)
     public R<?> copyParam(@RequestBody QualityTestStandard qualityTestStandard) {
         return R.ok(qualityTestStandardService.copyParam(qualityTestStandard));
     }
@@ -93,6 +108,8 @@
      * @return
      */
     @PostMapping("/qualityTestStandardAudit")
+    @Operation(summary = "妫�娴嬫爣鍑嗘壒閲忓鏍�")
+    @Log(title = "妫�娴嬫爣鍑嗘壒閲忓鏍�", businessType = BusinessType.OTHER)
     public R<?> qualityTestStandardAudit(@RequestBody List<QualityTestStandard> qualityTestStandards) {
         return R.ok(qualityTestStandardService.updateBatchById(qualityTestStandards));
     }
@@ -102,6 +119,8 @@
      * @return
      */
     @GetMapping("/getQualityTestStandardByProductId")
+    @Operation(summary = "鏍规嵁浜у搧id鏌ヨ鐩稿叧鐨勬楠屾爣鍑�")
+    @Log(title = "鏍规嵁浜у搧id鏌ヨ鐩稿叧鐨勬楠屾爣鍑�", businessType = BusinessType.OTHER)
     public R<?> getQualityTestStandardByProductId(@Nonnull Long productId, @Nonnull Integer inspectType, String process) {
         return R.ok(qualityTestStandardService.getQualityTestStandardByProductId(productId,inspectType,process));
     }
@@ -111,6 +130,8 @@
      * @return
      */
     @GetMapping("/getQualityTestStandardParamByTestStandardId")
+    @Operation(summary = "鏍规嵁妫�娴嬫爣鍑唅d鏌ヨ鐩稿叧鐨勬楠屾爣鍑嗗弬鏁�")
+    @Log(title = "鏍规嵁妫�娴嬫爣鍑唅d鏌ヨ鐩稿叧鐨勬楠屾爣鍑嗗弬鏁�", businessType = BusinessType.OTHER)
     public R<?> getQualityTestStandardParamByTestStandardId(Long testStandardId) {
         return R.ok(qualityTestStandardParamService.list(Wrappers.<QualityTestStandardParam>lambdaQuery().eq(QualityTestStandardParam::getTestStandardId, testStandardId)));
     }
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardParamController.java b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardParamController.java
index 44dc0cd..16788c9 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityTestStandardParamController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityTestStandardParamController.java
@@ -2,10 +2,14 @@
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.quality.pojo.QualityTestStandard;
 import com.ruoyi.quality.pojo.QualityTestStandardParam;
 import com.ruoyi.quality.service.QualityTestStandardParamService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
@@ -24,6 +28,7 @@
 @RestController
 @RequestMapping("/qualityTestStandardParam")
 @AllArgsConstructor
+@Tag(name = "妫�娴嬫爣鍑嗗弬鏁�")
 public class QualityTestStandardParamController {
 
     private QualityTestStandardParamService qualityTestStandardParamService;
@@ -34,6 +39,8 @@
      * @return
      */
     @PostMapping("/add")
+    @Operation(summary = "鏂板妫�娴嬫爣鍑嗗弬鏁�")
+    @Log(title = "鏂板妫�娴嬫爣鍑嗗弬鏁�", businessType = BusinessType.INSERT)
     public R<?> add(@RequestBody QualityTestStandardParam qualityTestStandardParam) {
         return R.ok(qualityTestStandardParamService.save(qualityTestStandardParam));
     }
@@ -44,6 +51,8 @@
      * @return
      */
     @DeleteMapping("/del")
+    @Operation(summary = "鍒犻櫎妫�娴嬫寚鏍囩淮鎶�")
+    @Log(title = "鍒犻櫎妫�娴嬫寚鏍囩淮鎶�", businessType = BusinessType.DELETE)
     public R<?> delQualityTestStandard(@RequestBody List<Integer> ids) {
         if(CollectionUtils.isEmpty(ids)){
             return R.fail("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
@@ -57,6 +66,8 @@
      * @return
      */
     @PostMapping("/update")
+    @Operation(summary = "妫�娴嬫寚鏍囩淮鎶や慨鏀�")
+    @Log(title = "妫�娴嬫寚鏍囩淮鎶や慨鏀�", businessType = BusinessType.UPDATE)
     public R<?> update(@RequestBody QualityTestStandardParam qualityTestStandardParam) {
         return R.ok(qualityTestStandardParamService.updateById(qualityTestStandardParam));
     }
@@ -66,6 +77,8 @@
      * @return
      */
     @GetMapping("/list")
+    @Operation(summary = "妫�娴嬫寚鏍囩淮鎶ゆ煡璇�")
+    @Log(title = "妫�娴嬫寚鏍囩淮鎶ゆ煡璇�", businessType = BusinessType.OTHER)
     public R<?> list(Long testStandardId) {
         return R.ok(qualityTestStandardParamService.list(Wrappers.<QualityTestStandardParam>lambdaQuery().eq(QualityTestStandardParam::getTestStandardId,testStandardId)));
     }
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java b/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
index 33c6005..a2222c3 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
@@ -1,9 +1,13 @@
 package com.ruoyi.quality.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.quality.pojo.QualityUnqualified;
 import com.ruoyi.quality.service.IQualityUnqualifiedService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -16,6 +20,7 @@
  */
 @RestController
 @RequestMapping("/quality/qualityUnqualified")
+@Tag(name = "涓嶅悎鏍肩鐞�")
 public class QualityUnqualifiedController {
 
     @Resource
@@ -28,6 +33,8 @@
      * @return
      */
     @PostMapping("/add")
+    @Operation(summary = "鏂板涓嶅悎鏍肩鐞�")
+    @Log(title = "鏂板涓嶅悎鏍肩鐞�", businessType = BusinessType.INSERT)
     public R<?> add(@RequestBody QualityUnqualified qualityUnqualified) {
         qualityUnqualified.setInspectState(0);
         return R.ok(qualityUnqualifiedService.save(qualityUnqualified));
@@ -39,6 +46,8 @@
      * @return
      */
     @DeleteMapping("/del")
+    @Operation(summary = "鍒犻櫎涓嶅悎鏍肩鐞�")
+    @Log(title = "鍒犻櫎涓嶅悎鏍肩鐞�", businessType = BusinessType.DELETE)
     public R<?> delQualityUnqualified(@RequestBody List<Integer> ids) {
        qualityUnqualifiedService.listByIds(ids).stream().forEach(qualityUnqualified -> {
            if (qualityUnqualified.getInspectState()==1){
@@ -54,6 +63,8 @@
      * @return
      */
     @GetMapping("/{id}")
+    @Operation(summary = "涓嶅悎鏍肩鐞嗚鎯�")
+    @Log(title = "涓嶅悎鏍肩鐞嗚鎯�", businessType = BusinessType.OTHER)
     public R<?> QualityUnqualifiedDetail(@PathVariable("id") Integer id) {
         return R.ok(qualityUnqualifiedService.getUnqualified(id));
     }
@@ -64,6 +75,8 @@
      * @return
      */
     @PostMapping("/update")
+    @Operation(summary = "涓嶅悎鏍肩鐞嗕慨鏀�")
+    @Log(title = "涓嶅悎鏍肩鐞嗕慨鏀�", businessType = BusinessType.UPDATE)
     public R<?> update(@RequestBody QualityUnqualified qualityUnqualified) {
         return R.ok(qualityUnqualifiedService.updateById(qualityUnqualified));
     }
@@ -75,6 +88,8 @@
      * @return
      */
     @GetMapping("/listPage")
+    @Operation(summary = "涓嶅悎鏍肩鐞嗗垎椤垫煡璇�")
+    @Log(title = "涓嶅悎鏍肩鐞嗗垎椤垫煡璇�", businessType = BusinessType.OTHER)
     public R<?> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
         return R.ok(qualityUnqualifiedService.qualityUnqualifiedListPage(page, qualityUnqualified));
     }
@@ -85,6 +100,8 @@
      * @param qualityUnqualified
      */
     @PostMapping("/export")
+    @Operation(summary = "涓嶅悎鏍肩鐞嗗鍑�")
+    @Log(title = "涓嶅悎鏍肩鐞嗗鍑�", businessType = BusinessType.EXPORT)
     public void qualityUnqualifiedExport(HttpServletResponse response,QualityUnqualified qualityUnqualified) {
         qualityUnqualifiedService.qualityUnqualifiedExport(response, qualityUnqualified);
     }
@@ -95,6 +112,8 @@
      * @return
      */
     @PostMapping("/deal")
+    @Operation(summary = "涓嶅悎鏍肩鐞嗗鐞�")
+    @Log(title = "涓嶅悎鏍肩鐞嗗鐞�", businessType = BusinessType.OTHER)
     public R<?> deal(@RequestBody QualityUnqualified qualityUnqualified) {
         return R.ok(qualityUnqualifiedService.deal(qualityUnqualified));
     }
diff --git a/src/main/resources/approve-todo-agent-prompt.txt b/src/main/resources/approve-todo-agent-prompt.txt
index c309da8..f026fee 100644
--- a/src/main/resources/approve-todo-agent-prompt.txt
+++ b/src/main/resources/approve-todo-agent-prompt.txt
@@ -1,4 +1,5 @@
 浣犳槸涓�涓鎵瑰緟鍔炲姪鎵嬶紝璐熻矗鍗忓悓鍔炲叕瀹℃壒寰呭姙鐨勬煡璇€�佸鏍搞�佸彇娑堝鏍搞�佷慨鏀广�佸垹闄ゅ拰缁熻鍒嗘瀽銆�
+褰撳墠鏃ユ湡锛歿{currentDate}}锛堜腑鍥芥椂鍖猴級銆�
 
 宸ヤ綔瑕佹眰锛�
 1. 鐢ㄦ埛闂緟鍔炲垪琛ㄣ�佸鎵硅繘搴︺�佸鎵硅鎯呫�佺粺璁℃暟鎹椂锛屼紭鍏堣皟鐢ㄥ伐鍏凤紝涓嶈鑷嗛�犳暟鎹��
@@ -16,3 +17,4 @@
 13. 鍙湁鈥滄煡璇㈠鎵瑰緟鍔炶鎯呪�濊繖涓伐鍏峰厑璁歌緭鍑鸿嚜鐒惰瑷�鏂囨湰銆�
 14. 濡傛灉宸ュ叿杩斿洖鐨勬槸缁熻 JSON锛屼篃鍚屾牱鐩存帴杈撳嚭鍘熷 JSON锛涘叾涓� `description`銆乣summary`銆乣charts` 宸茬粡渚涘墠绔娇鐢ㄣ��
 15. 鍥炵瓟浣跨敤涓枃锛涗絾鍦� JSON 鍦烘櫙涓嬶紝鏈�缁堣緭鍑哄繀椤绘槸鍚堟硶 JSON 鏈綋銆�
+16. 鐢ㄦ埛鎻愬埌鈥滀粖骞�/鏈湀/浠婂ぉ/鏈�杩�/涓婃湀/鍘诲勾鈥濈瓑鐩稿鏃堕棿鏃讹紝蹇呴』涓ユ牸鍩轰簬鈥滃綋鍓嶆棩鏈熲�濇崲绠楋紝绂佹鑷鍋囪骞翠唤銆�
diff --git a/src/main/resources/manufacturing-agent-prompt.txt b/src/main/resources/manufacturing-agent-prompt.txt
index c1a30c8..1653bb9 100644
--- a/src/main/resources/manufacturing-agent-prompt.txt
+++ b/src/main/resources/manufacturing-agent-prompt.txt
@@ -1,4 +1,5 @@
 浣犳槸浼佷笟鍒堕�犳櫤鑳藉姪鎵嬶紝瑕嗙洊鐢熶骇鐜板満銆佽鍒掋�佸伐鍗曘�佽澶囥�佽川閲忋�佺墿鏂欍�佸紓甯稿鐞嗕竷涓煙銆�
+褰撳墠鏃ユ湡锛歿{currentDate}}锛堜腑鍥芥椂鍖猴級銆�
 
 宸ヤ綔瑙勫垯锛�
 1. 鐢ㄦ埛鎻愬嚭鈥滄煡銆侀棶銆侀璀︺�佸垎鏋愨�濋渶姹傛椂锛屼紭鍏堣皟鐢ㄥ伐鍏锋嬁缁撴瀯鍖栫粨鏋滐紝涓嶈鑷嗛�犱笟鍔℃暟鎹��
@@ -6,3 +7,4 @@
 3. 宸ュ叿杩斿洖 JSON 鏃讹紝鐩存帴杈撳嚭鍘熷 JSON 瀛楃涓诧紝涓嶈棰濆鍖呰9 Markdown锛屼笉瑕佸湪鍓嶅悗鍔犺В閲婃枃瀛椼��
 4. 鍥炵瓟蹇呴』浣跨敤涓枃锛涜嫢鐢ㄦ埛闂缂哄皯鏃堕棿鑼冨洿銆佸叧閿瓧绛夋潯浠讹紝鍙厛缁欓粯璁ゅ彛寰勫苟鎻愮ず鍙ˉ鍏呮潯浠躲��
 5. 鑻ユ棤娉曚粠宸ュ叿缁撴灉寰楀埌缁撹锛屾槑纭鏄庣己灏戠殑绛涢�夋潯浠舵垨涓氬姟瀛楁銆�
+6. 鐢ㄦ埛鎻愬埌鈥滀粖骞�/鏈湀/浠婂ぉ/鏈�杩�/涓婃湀/鍘诲勾鈥濈瓑鐩稿鏃堕棿鏃讹紝蹇呴』涓ユ牸鍩轰簬鈥滃綋鍓嶆棩鏈熲�濇崲绠楋紝绂佹鑷鍋囪骞翠唤銆�
diff --git a/src/main/resources/mapper/production/ProductionOrderMapper.xml b/src/main/resources/mapper/production/ProductionOrderMapper.xml
index 95679a7..8e64413 100644
--- a/src/main/resources/mapper/production/ProductionOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -227,6 +227,10 @@
             <if test="status != null">
                 and po.status = #{status}
             </if>
+            <if test="startTime != null and endTime != null">
+                and po.create_time &gt;= #{startTime}
+                and po.create_time &lt; #{endTime}
+            </if>
         </where>
         order by po.id desc
         limit #{offset}, #{size}
@@ -239,13 +243,21 @@
             <if test="status != null">
                 and po.status = #{status}
             </if>
+            <if test="startTime != null and endTime != null">
+                and po.create_time &gt;= #{startTime}
+                and po.create_time &lt; #{endTime}
+            </if>
         </where>
     </select>
 
     <select id="countHomeOrderProgressByStatus" resultType="java.util.Map">
         select po.status as status, count(1) as cnt
         from production_order po
-        where po.status in (2, 3, 4)
+        where po.status in (1, 2, 3, 4)
+        <if test="startTime != null and endTime != null">
+            and po.create_time &gt;= #{startTime}
+            and po.create_time &lt; #{endTime}
+        </if>
         group by po.status
     </select>
 
@@ -258,7 +270,13 @@
         from production_order po
                  left join product_model pm on po.product_model_id = pm.id
                  left join product p on pm.product_id = p.id
-        where po.status in (1, 2)
+        <where>
+            po.status in (1, 2)
+            <if test="planStart != null and planEnd != null">
+                and po.plan_complete_time &gt;= #{planStart}
+                and po.plan_complete_time &lt; #{planEnd}
+            </if>
+        </where>
         order by case when po.status = 2 then 0 else 1 end, po.id desc
         limit #{size}
     </select>
@@ -266,7 +284,13 @@
     <select id="countHomeTodayProductionPlan" resultType="java.lang.Long">
         select count(1)
         from production_order po
-        where po.status in (1, 2)
+        <where>
+            po.status in (1, 2)
+            <if test="planStart != null and planEnd != null">
+                and po.plan_complete_time &gt;= #{planStart}
+                and po.plan_complete_time &lt; #{planEnd}
+            </if>
+        </where>
     </select>
 
 </mapper>
diff --git a/src/main/resources/purchase-agent-prompt.txt b/src/main/resources/purchase-agent-prompt.txt
index 97f7eb2..b4267b8 100644
--- a/src/main/resources/purchase-agent-prompt.txt
+++ b/src/main/resources/purchase-agent-prompt.txt
@@ -1,5 +1,6 @@
 浣犳槸浼佷笟閲囪喘鏅鸿兘鍔╃悊銆�
 浣犵殑鐩爣鏄府鍔╃敤鎴峰揩閫熷畬鎴愰噰璐浉鍏充俊鎭煡璇笌瑙h銆�
+褰撳墠鏃ユ湡锛歿{currentDate}}锛堜腑鍥芥椂鍖猴級銆�
 
 宸ヤ綔瑙勫垯锛�
 1. 浼樺厛璋冪敤宸ュ叿鍑芥暟鑾峰彇閲囪喘鍙拌处銆佷粯娆俱�佸彂绁ㄣ�侀��璐х瓑缁撴瀯鍖栨暟鎹��
@@ -12,3 +13,4 @@
 8. 缁撴灉鐢ㄧ畝娲佷腑鏂囧洖绛旓紝鍏堢粰缁撹锛屽啀缁欏叧閿暟鎹偣銆�
 9. 涓嶈缂栭�犻噰璐暟鎹紝鎵�鏈夌粨璁哄繀椤诲熀浜庡伐鍏疯繑鍥炪��
 10. 鏃犳硶鐩存帴寰楀嚭缁撹鏃讹紝鏄庣‘璇存槑缂哄皯鍝簺瀛楁鎴栫瓫閫夋潯浠躲��
+11. 鐢ㄦ埛鎻愬埌鈥滀粖骞�/鏈湀/浠婂ぉ/鏈�杩�/涓婃湀/鍘诲勾鈥濈瓑鐩稿鏃堕棿鏃讹紝蹇呴』涓ユ牸鍩轰簬鈥滃綋鍓嶆棩鏈熲�濇崲绠楋紝绂佹鑷鍋囪骞翠唤銆�
diff --git a/src/main/resources/sales-agent-prompt.txt b/src/main/resources/sales-agent-prompt.txt
index 5cd87ff..3a43502 100644
--- a/src/main/resources/sales-agent-prompt.txt
+++ b/src/main/resources/sales-agent-prompt.txt
@@ -1,7 +1,9 @@
 浣犳槸浼佷笟閿�鍞姪鎵嬶紝瑕嗙洊瀹㈡埛妗f銆侀攢鍞姤浠枫�侀攢鍞彴璐︺�侀攢鍞��璐с�佸鎴峰線鏉ャ�佸彂璐у彴璐︺�佹寚鏍囩粺璁°�佸鎴锋祦澶遍闄╁垎鏋愩�佸洖娆句笌鎶ヤ环绛栫暐寤鸿绛夊満鏅��
+褰撳墠鏃ユ湡锛歿{currentDate}}锛堜腑鍥芥椂鍖猴級銆�
 宸ヤ綔瑙勫垯锛�
 1. 鐢ㄦ埛鎻愬嚭鈥滄煡銆侀棶銆佺粺璁°�佸垎鏋愩�佸缓璁�濋渶姹傛椂锛屼紭鍏堣皟鐢ㄥ伐鍏疯繑鍥炵粨鏋勫寲鏁版嵁锛屼笉缂栭�犱笟鍔℃暟鎹��
 2. 鍛戒腑鈥滃鎴锋祦澶遍闄╁垎鏋愨�濇垨鈥滃洖娆句笌鎶ヤ环绛栫暐寤鸿鈥濇椂锛屼紭鍏堜娇鐢ㄥ伐鍏疯緭鍑虹粨鏋勫寲 JSON銆�
 3. 宸ュ叿杩斿洖 JSON 鏃讹紝鐩存帴杈撳嚭鍘熷 JSON 瀛楃涓诧紝涓嶈棰濆鍖呰9 Markdown锛屼篃涓嶈鍦ㄥ墠鍚庤拷鍔犺В閲婃枃鏈��
 4. 鍥炲蹇呴』浣跨敤涓枃锛涜嫢鐢ㄦ埛缂哄皯鏃堕棿鑼冨洿銆佸叧閿瘝绛夋潯浠讹紝鍙厛浣跨敤榛樿鍙e緞骞舵彁绀哄彲琛ュ厖鏉′欢銆�
 5. 鑻ユ暟鎹笉瓒充互寰楀嚭缁撹锛屾槑纭寚鍑虹己灏戠殑绛涢�夋潯浠舵垨鍏抽敭瀛楁銆�
+6. 鐢ㄦ埛鎻愬埌鈥滀粖骞�/鏈湀/浠婂ぉ/鏈�杩�/涓婃湀/鍘诲勾鈥濈瓑鐩稿鏃堕棿鏃讹紝蹇呴』涓ユ牸鍩轰簬鈥滃綋鍓嶆棩鏈熲�濇崲绠楋紝绂佹鑷鍋囪骞翠唤銆�

--
Gitblit v1.9.3