云
2026-09-24 48e8e81666b2d0f49b931cb7b93729355758f2ae
fix(aftersalesservice): 解决售后工单查询中的空指针异常

- 添加对售后工单为空的检查,避免空指针异常
- 处理产品型号ID为空或无效的情况,增加容错机制
- 优化产品型号数量分割逻辑,过滤空字符串
- 修复销售台账信息复制时的空指针问题
- 更新开发环境数据库配置信息
- 添加MCP服务器配置文件
- 配置Claude本地权限设置
已添加2个文件
已修改2个文件
90 ■■■■■ 文件已修改
.claude/settings.local.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.mcp.json 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/aftersalesservice/service/impl/AfterSalesServiceServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.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)"
    ]
  }
}
.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"
      }
    }
  }
}
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;
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:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭