diff --git a/src/main/java/com/xly/agent/DynamicTableNl2SqlAiAgent.java b/src/main/java/com/xly/agent/DynamicTableNl2SqlAiAgent.java index 5d24a18..105ff3f 100644 --- a/src/main/java/com/xly/agent/DynamicTableNl2SqlAiAgent.java +++ b/src/main/java/com/xly/agent/DynamicTableNl2SqlAiAgent.java @@ -33,6 +33,22 @@ public interface DynamicTableNl2SqlAiAgent { 5.1 严格按用户需求+传入的表结构生成,仅使用指定字段/表,无多余字段、无无效表关联、无冗余过滤条件; 5.2 用户需求中没有明确的日期条件,默认为全部数据,禁止增加任何日期过滤条件 6. 关联规则:多表关联时,必须使用外键/业务唯一键关联,禁止无意义关联。 + 7. 当前时间:{{sDataNow}} + 8. 时间处理规则: + 8.1 当前系统时间:{{sDataNow}}(格式:yyyy年MM月dd日HH时mm分ss秒) + 8.2 用户需求中的相对时间概念,必须基于{{sDataNow}}进行转换: + - "本年" → 当前年份:{{sDataNow}}的年份 + - "本月" → 当前月份:{{sDataNow}}的年份和月份 + - "本季度" → 当前季度:基于{{sDataNow}}计算 + - "本日/今天" → {{sDataNow}}的具体日期 + - "昨天" → {{sDataNow}}减1天 + - "本周" → 基于{{sDataNow}}计算周一到周日 + - "近7天" → {{sDataNow}}减7天到{{sDataNow}} + 8.3 示例转换: + 当前时间:2024-03-15 + 用户说"查询本年数据" → 查询条件应为:YEAR(日期字段) = 2024 + 用户说"查询本月数据" → 查询条件应为:YEAR(日期字段) = 2024 AND MONTH(日期字段) = 3 + 8.4 如果用户需求中没有明确的时间条件,禁止增加任何时间过滤条件 """) @UserMessage(""" 【业务场景表结构信息】 @@ -41,7 +57,16 @@ public interface DynamicTableNl2SqlAiAgent { 当前时间:{{sDataNow}} 【用户需求】 {{userInput}} - 请根据上述表结构+通用规则,生成符合要求的MySQL SELECT语句: + 请根据上述表结构+通用规则,生成符合要求的MySQL SELECT语句; + 【时间处理要求】 + 1. 如果用户需求包含"本年/本月/本季度/本日/今天/昨天/本周/近X天"等相对时间概念: + - 必须使用当前系统时间 {{sDataNow}} 进行转换 + - 转换为具体的年份、月份或日期范围 + 2. 转换示例: + - "本年" → 年份 = {{sDataNow}}的年份部分 + - "本月" → 年份 = {{sDataNow}}的年份, 月份 = {{sDataNow}}的月份 + - "今天" → 日期 = {{sDataNow}} + 3. 如果没有明确的时间需求,不要添加任何时间过滤条件 """) String generateMysqlSql(@MemoryId String userId, @V("tableNames") String tableNames, diff --git a/src/main/java/com/xly/service/XlyErpService.java b/src/main/java/com/xly/service/XlyErpService.java index 4f670bb..40fe55b 100644 --- a/src/main/java/com/xly/service/XlyErpService.java +++ b/src/main/java/com/xly/service/XlyErpService.java @@ -1,5 +1,6 @@ package com.xly.service; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -32,7 +33,9 @@ import org.python.antlr.ast.Str; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.text.DateFormat; import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.*; @Service @@ -245,7 +248,8 @@ public class XlyErpService { String tableNames = session.getCurrentTool().getSInputTabelName(); // "订单表:viw_salsalesorder,客户信息表:elecustomer,结算方式表:sispayment,产品表(无单价,无金额,无数量):viw_product_sort,销售人员表:viw_sissalesman_depart"; String tableStruct = session.getCurrentTool().getSStructureMemo(); - String sDataNow = DateUtil.now(); + String sDataNow = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_TIME_FORMAT); + log.info("当前时间:"+sDataNow); String rawSql = aiDynamicTableNl2SqlAiAgent.generateMysqlSql(userId,tableNames,tableStruct,sDataNow,userInput); if (rawSql == null || rawSql.trim().isEmpty()) { throw new SqlGenerateException("AI服务生成SQL失败,返回结果为空");