From 48e8e81666b2d0f49b931cb7b93729355758f2ae Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 24 九月 2026 19:24:02 +0800
Subject: [PATCH] fix(aftersalesservice): 解决售后工单查询中的空指针异常

---
 src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesServiceServiceImpl.java |   23 +++++++++--
 .mcp.json                                                                                |   24 ++++++++++++
 .claude/settings.local.json                                                              |   39 +++++++++++++++++++
 src/main/resources/application-dev.yml                                                   |    4 +-
 4 files changed, 84 insertions(+), 6 deletions(-)

diff --git a/.claude/settings.local.json b/.claude/settings.local.json
new file mode 100644
index 0000000..085a4e7
--- /dev/null
+++ b/.claude/settings.local.json
@@ -0,0 +1,39 @@
+{
+  "permissions": {
+    "allow": [
+      "Bash(claude mcp *)",
+      "Bash(python *)",
+      "Bash(node *)",
+      "mcp__mcp_server_mysql__mysql_query",
+      "Bash(netstat -ano)",
+      "Bash(git -C \"D:\\\\鐗涢┈\\\\鍗楅�歕\\\鍚庣\\\\product-inventory-management-after-jdk25\" status -sb)",
+      "Bash(git -C \"D:\\\\鐗涢┈\\\\鍗楅�歕\\\鍚庣\\\\product-inventory-management-after-jdk25\" log --oneline -3)",
+      "Read(//c/Users/浜�/**)",
+      "Bash(ls -la .claude.json)",
+      "Read(//d/鐗涢┈/鍗楅��/鍓嶇/product-inventory-management/**)",
+      "Bash(awk '{print $5, $9}')",
+      "Bash(cygpath -w /tmp/sales_all.txt)",
+      "Bash(awk -F'\\\\t' '{print $1}')",
+      "Bash(awk 'NF')",
+      "Bash(awk '{print $1\"\\\\t\"$2}')",
+      "Bash(awk -F'\\\\t' 'NF{print $1}')",
+      "Bash(awk -F'\\\\t' 'NF && $6 ~ /^2026-/ {d=$6; gsub\\(/-/,\"\",d\\); if \\(d+0 >= 20260820\\) n++} END {print \"绗﹀悎:\", n; }')",
+      "Bash(sed -n '3,88p' /tmp/sales_all.txt)",
+      "Bash(awk -F'\\\\t' 'NF{print $6}')",
+      "Bash(sort -k2)",
+      "Bash(mkdir -p /tmp/x1)",
+      "Read(//tmp/**)",
+      "Bash(rm -rf *)",
+      "Bash(unzip -o -q \"D:/鐗涢┈/鍗楅��/鍚庣/product-inventory-management-after-jdk25/docs/閿�鍞彴璐︽ā鏉�.xlsx\")",
+      "Bash(mkdir -p /tmp/x2)",
+      "Bash(unzip -o -q \"D:/鐗涢┈/鍗楅��/鍚庣/product-inventory-management-after-jdk25/docs/閲囪喘鍙拌处妯℃澘\\(2\\).xlsx\")",
+      "Bash(curl -s -o /dev/null -w \"e-iceblue pom HTTP %{http_code}\\\\n\" --max-time 25 \"https://repo.e-iceblue.cn/repository/maven-public/e-iceblue/spire.doc.free/5.2.0/spire.doc.free-5.2.0.pom\")",
+      "Bash(curl -s -o /dev/null -w \"my-mirror HTTP %{http_code}\\\\n\" --max-time 15 \"https://my-company-repository.com/maven/\")",
+      "Bash(mvn -B -q help:effective-settings)",
+      "Bash(mvn -B help:effective-settings)",
+      "Bash(rm -f \"/d/Maven3.6.3/myRepository/e-iceblue/spire.doc.free/5.2.0/\"*.lastUpdated)",
+      "Bash(mvn -B dependency:get -Dartifact=e-iceblue:spire.doc.free:5.2.0)",
+      "Bash(mvn -B -DskipTests package)"
+    ]
+  }
+}
diff --git a/.mcp.json b/.mcp.json
new file mode 100644
index 0000000..876e1a4
--- /dev/null
+++ b/.mcp.json
@@ -0,0 +1,24 @@
+{
+  "mcpServers": {
+    "mysql_zyrq": {
+      "type": "stdio",
+      "command": "cmd",
+      "args": [
+        "/c",
+        "node",
+        "C:/nvm4w/nodejs/node_modules/@benborla29/mcp-server-mysql/dist/index.js"
+      ],
+      "env": {
+        "MYSQL_HOST": "127.0.0.1",
+        "MYSQL_PORT": "3306",
+        "MYSQL_USER": "root",
+        "MYSQL_PASS": "123456",
+        "MYSQL_DB": "product-inventory-management-zyrq-pro",
+        "ALLOW_DDL_OPERATION": "false",
+        "ALLOW_INSERT_OPERATION": "false",
+        "ALLOW_UPDATE_OPERATION": "false",
+        "ALLOW_DELETE_OPERATION": "false"
+      }
+    }
+  }
+}
diff --git a/src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesServiceServiceImpl.java b/src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesServiceServiceImpl.java
index a9e4f43..60472af 100644
--- a/src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesServiceServiceImpl.java
+++ b/src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesServiceServiceImpl.java
@@ -95,9 +95,19 @@
     @Override
     public AfterSalesServiceNewDto getAfterSalesServiceNewDtoById(Long id) {
         AfterSalesService afterSalesService = afterSalesServiceMapper.selectById(id);
-        SalesLedger byId = salesLedgerService.getById(afterSalesService.getSalesLedgerId());
-        List<Long> collect = Arrays.stream(afterSalesService.getProductModelIds().split(",")).map(Long::valueOf).collect(Collectors.toList());
-        List<SalesLedgerProduct> list = salesLedgerProductService.list(new QueryWrapper<SalesLedgerProduct>().lambda().in(SalesLedgerProduct::getId, collect));
+        if (afterSalesService == null) {
+            throw new RuntimeException("鍞悗宸ュ崟涓嶅瓨鍦�");
+        }
+        // 宸ュ崟鍙互涓嶅叧鑱斾骇鍝侊紙鍙嶉鐧昏瀵煎叆銆佸巻鍙叉暟鎹兘鏄┖锛夛紝姝ゅ蹇呴』瀹归敊
+        List<Long> collect = StringUtils.isEmpty(afterSalesService.getProductModelIds())
+                ? new ArrayList<>()
+                : Arrays.stream(afterSalesService.getProductModelIds().split(","))
+                        .filter(StringUtils::isNotEmpty)
+                        .map(Long::valueOf)
+                        .collect(Collectors.toList());
+        List<SalesLedgerProduct> list = collect.isEmpty()
+                ? new ArrayList<>()
+                : salesLedgerProductService.list(new QueryWrapper<SalesLedgerProduct>().lambda().in(SalesLedgerProduct::getId, collect));
 
         if (StringUtils.isNotEmpty(afterSalesService.getProductModelQuantities())) {
             String[] quantities = afterSalesService.getProductModelQuantities().split(",");
@@ -133,7 +143,12 @@
         AfterSalesServiceNewDto afterSalesServiceNewDto = new AfterSalesServiceNewDto();
         BeanUtils.copyProperties(afterSalesService, afterSalesServiceNewDto);
         SalesLedgerDto salesLedgerDto = new SalesLedgerDto();
-        BeanUtils.copyProperties(byId, salesLedgerDto);
+        if (afterSalesService.getSalesLedgerId() != null) {
+            SalesLedger byId = salesLedgerService.getById(afterSalesService.getSalesLedgerId());
+            if (byId != null) {
+                BeanUtils.copyProperties(byId, salesLedgerDto);
+            }
+        }
         salesLedgerDto.setProductData( list);
         afterSalesServiceNewDto.setSalesLedgerDto(salesLedgerDto);
         return afterSalesServiceNewDto;
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 31c9c0c..8aca342 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -73,9 +73,9 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://localhost:3306/product-inventory-management-hnhb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3306/product-inventory-management-zyrq-pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
-        password: 200381
+        password: 123456
       # 浠庡簱鏁版嵁婧�
       slave:
         # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴

--
Gitblit v1.9.3