Enhance CRM service with additional query methods and improve parameter descriptions

This commit is contained in:
bigtian 2025-06-27 11:36:43 +08:00
parent 2667322716
commit a737168b1c

View File

@ -1,5 +1,6 @@
package net.rzdata.mcp.server.crm;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
@ -10,6 +11,8 @@ import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class CrmMcpService {
@Autowired
@ -28,10 +31,10 @@ public class CrmMcpService {
}
@Tool(description = "根据客户名称或客户编码查询客户负责人")
@Tool(description = "根据客户名称或客户编码查询客户负责人。clientCode和clientName必须二选一。如果都提取不到则输出请提供需要查询的客户。如果提取到多个值则输出目前只能查询单个客户数据")
public String getClientResponsible(
@ToolParam(description = "客户编码",required = false) String clientCode,
@ToolParam(description = "客户名称",required = false) String clientName
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName
) {
Assert.isTrue(StrUtil.isNotEmpty(clientCode) || StrUtil.isNotEmpty(clientName),
@ -44,9 +47,9 @@ public class CrmMcpService {
return executeRequest("ai/query/getClientResponsible", requestBody);
}
@Tool(description = "根据订单编码(即订单号)查询订单负责人")
@Tool(description = "根据订单编码(即订单号)查询订单负责人。orderCode是必填项如果提取不到则输出请告知需要查询的订单号")
public String getOrderSaller(
@ToolParam(description = "订单编码") String orderCode
@ToolParam(description = "订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'") String orderCode
) {
Assert.isTrue(StrUtil.isNotEmpty(orderCode), "订单编码不能为空");
@ -56,12 +59,12 @@ public class CrmMcpService {
return executeRequest("ai/query/getOrderSaller", requestBody);
}
@Tool(description = "根据客户名称或客户编码查询某个时间段内的订单销售额")
@Tool(description = "根据客户名称或客户编码查询某个时间段内的订单销售额。clientCode和clientName必须二选一。如果都提取不到则输出请提供需要查询的客户。如果提取到多个值则输出目前只能查询单个客户数据。对于'去年'、'今年'这种时间词,需要结合当前系统时间来判断")
public String sumOrderTotalForClientInTime(
@ToolParam(description = "客户编码", required = false) String clientCode,
@ToolParam(description = "客户名称", required = false) String clientName,
@ToolParam(description = "开始时间", required = false) String startTime,
@ToolParam(description = "结束时间", required = false) String endTime
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName,
@ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String startTime,
@ToolParam(description = "结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String endTime
) {
JSONObject requestBody = new JSONObject();
@ -73,13 +76,13 @@ public class CrmMcpService {
return executeRequest("ai/query/sumOrderTotalForClientInTime", requestBody);
}
@Tool(description = "根据客户名称或客户编码查询某个时间段内购买的某个产品货号的数量")
@Tool(description = "根据客户名称或客户编码查询某个时间段内购买的某个产品货号的数量。clientCode和clientName必须二选一。如果都提取不到则输出请提供需要查询的客户。productnum必填如果提取不到则输出请提供需要查询的货号。startTime和endTime必填如果提取不到则输出请提供需要查询的采购时间范围")
public String sumProductNumForClientInTime(
@ToolParam(description = "客户编码", required = false) String clientCode,
@ToolParam(description = "客户名称", required = false) String clientName,
@ToolParam(description = "产品货号", required = false) String productnum,
@ToolParam(description = "开始时间", required = false) String startTime,
@ToolParam(description = "结束时间", required = false) String endTime
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'等组织例如张三课题组广州小懒科技有限公司。与clientCode必须二选一", required = false) String clientName,
@ToolParam(description = "产品货号,一般类似于'XXXX-XX'格式例如C112-01。必填参数", required = false) String productnum,
@ToolParam(description = "采购开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。必填参数", required = false) String startTime,
@ToolParam(description = "采购结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。必填参数", required = false) String endTime
) {
JSONObject requestBody = new JSONObject();
requestBody.put("clientCode", clientCode);
@ -91,9 +94,9 @@ public class CrmMcpService {
return executeRequest("ai/query/sumProductNumForClientInTime", requestBody);
}
@Tool(description = "根据订单编码(即订单号)查询订单购买的产品明细")
@Tool(description = "根据订单编码(即订单号)查询订单购买的产品明细。orderCode是必填项如果提取不到则输出请告知需要查询的订单号")
public String detailOrderProduct(
@ToolParam(description = "订单编码") String orderCode
@ToolParam(description = "订单编码(即订单号),值一般是由字母、数字和'-'组成,特征一般类似于'NJ00027202506090001',或'NJ00027202506090001-G'或'NJ00027202506090001-T-1',或'dev-NJ00027202506090001'") String orderCode
) {
Assert.isTrue(StrUtil.isNotEmpty(orderCode), "订单编码不能为空");
@ -103,4 +106,56 @@ public class CrmMcpService {
return executeRequest("ai/query/detailOrderProduct", requestBody);
}
@Tool(description = "根据客户名称或客户编码查询某个时间段内购买的产品主货号列表")
public String listProductForClientInTime(
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName,
@ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String startTime,
@ToolParam(description = "结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String endTime
) {
JSONObject requestBody = new JSONObject();
requestBody.put("clientCode", clientCode);
requestBody.put("clientName", clientName);
requestBody.put("startTime", startTime);
requestBody.put("endTime", endTime);
return executeRequest("ai/query/listProductForClientInTime", requestBody);
}
@Tool(description = "查询客户在某个时间段内的欠款额")
public String getUnpaidAmountForClient(
@ToolParam(description = "客户编码,一般类似于'XX.XX.XXXX.XXX'格式例如01.01.0023.024。与clientName必须二选一", required = false) String clientCode,
@ToolParam(description = "客户名称,一般类似于'某某课题组'或'某某公司'或'某某实验室'或'某某经营部'或'某某研究院'或'某某研究所'或'某某测试'等组织例如张三课题组广州小懒科技有限公司金域测试、金域课题组111、玉尘测试A01、睿展小组3号。与clientCode必须二选一", required = false) String clientName,
@ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String startTime,
@ToolParam(description = "结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String endTime
) {
JSONObject requestBody = new JSONObject();
requestBody.put("clientCode", clientCode);
requestBody.put("clientName", clientName);
requestBody.put("startTime", startTime);
requestBody.put("endTime", endTime);
return executeRequest("ai/query/getUnpaidAmountForClient", requestBody);
}
@Tool(description = "根据主货号查询某个时间段内购买过该产品的客户名称列表")
public String listClientsByMainNumInTime(
@ToolParam(description = "主货号,一般类似于'XXXX-XXXX'格式例如1234-5678", required = false) String mainNum,
@ToolParam(description = "开始时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String startTime,
@ToolParam(description = "结束时间,一般类似于'yyyy-MM-dd HH:mm:ss'格式例如2024-01-01 00:00:00。非必填", required = false) String endTime
) {
JSONObject requestBody = new JSONObject();
requestBody.put("mainNum", mainNum);
requestBody.put("startTime", startTime);
requestBody.put("endTime", endTime);
return executeRequest("ai/query/listClientsByMainNumInTime", requestBody);
}
@Tool(description = "获取当前时间(涉及到时间的问题时,必须调用此函数)")
public String getCurrentTime() {
return DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
}
}