From 3feed5879e5a9b794862bf46d38c7f66cfe41d50 Mon Sep 17 00:00:00 2001
From: xusd <330628789@qq.com>
Date: Wed, 25 Jun 2025 21:36:08 +0800
Subject: [PATCH] feature:增加市民编号,增加AI问答

---
 dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/domain/AiRequestVo.java                                |   17 +++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/ThGridCitizenEventService.java          |    4 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/AiChatController.java                                  |  103 ++++++++++++++++++++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/impl/ThGridCitizenEventServiceImpl.java |    5 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java       |    6 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml               |  101 ++++++++++++++------
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java                    |    6 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java                     |    2 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/domain/AiBodyDto.java                                  |   10 ++
 9 files changed, 223 insertions(+), 31 deletions(-)

diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
index 9ba2986..270ed62 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
@@ -179,6 +179,12 @@
             terms.put("systemSource", systemSource);
         }
 
+        //市民编码
+        String cityCode = request.getParameter("cityCode");
+        if (StringUtils.isNotBlank(cityCode)) {
+            terms.put("cityCode", cityCode);
+        }
+
         String peopleNum = request.getParameter("peopleNum");
         if (StringUtils.isNotBlank(peopleNum)) {
             String[] split = peopleNum.split("-");
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
index 45a367f..10fe974 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
@@ -139,7 +139,10 @@
     <!-- 表 -->
     <sql id='table-name'>dyh_case_info</sql>
     <sql id="column-part-all">
-        a.id,
+        a
+        .
+        id
+        ,
         a.status,
         a.status_name,
         a.canal,
@@ -187,7 +190,8 @@
     </sql>
     <!-- 字段 -->
     <sql id="column-part">
-        id,
+        id
+        ,
         case_title,
         case_ref,
         case_level,
@@ -392,7 +396,8 @@
                 </if>
                 <if test="terms.caseTypeFirstList != null and terms.caseTypeFirstList.size > 0">
                     and a.case_type_first in
-                    <foreach collection="terms.caseTypeFirstList" item="caseTypeFirst" index="index" open="(" separator="," close=")">
+                    <foreach collection="terms.caseTypeFirstList" item="caseTypeFirst" index="index" open="("
+                             separator="," close=")">
                         #{caseTypeFirst}
                     </foreach>
                 </if>
@@ -415,7 +420,8 @@
                     and (b.belong_unit_id is not null and c.city = #{terms.queCity}
                     <if test="terms.unitGrades != null and terms.unitGrades.size > 0">
                         and c.unit_grade in
-                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator="," close=")">
+                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator=","
+                                 close=")">
                             #{unitGrade}
                         </foreach>
                     </if>
@@ -430,7 +436,8 @@
                                  close=")">
                             #{unitGrade}
                         </foreach>
-                    </if>)
+                    </if>
+                    )
                     or (b.belong_unit_id is null and a.que_city = #{terms.queCity})
                     )
                 </if>
@@ -438,7 +445,8 @@
                     and (b.belong_unit_id is not null and c.area = #{terms.queArea}
                     <if test="terms.unitGrades != null and terms.unitGrades.size > 0">
                         and c.unit_grade in
-                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator="," close=")">
+                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator=","
+                                 close=")">
                             #{unitGrade}
                         </foreach>
                     </if>
@@ -448,7 +456,8 @@
                     and ((b.belong_unit_id is not null and c.area = #{terms.queArea}
                     <if test="terms.unitGrades != null and terms.unitGrades.size > 0">
                         and c.unit_grade in
-                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator="," close=")">
+                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator=","
+                                 close=")">
                             #{unitGrade}
                         </foreach>
                     </if>
@@ -461,7 +470,8 @@
                     and (b.belong_unit_id is not null and c.road = #{terms.queRoad}
                     <if test="terms.unitGrades != null and terms.unitGrades.size > 0">
                         and c.unit_grade in
-                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator="," close=")">
+                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator=","
+                                 close=")">
                             #{unitGrade}
                         </foreach>
                     </if>
@@ -472,7 +482,8 @@
                     and ((b.belong_unit_id is not null and c.road = #{terms.queRoad}
                     <if test="terms.unitGrades != null and terms.unitGrades.size > 0">
                         and c.unit_grade in
-                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator="," close=")">
+                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator=","
+                                 close=")">
                             #{unitGrade}
                         </foreach>
                     </if>
@@ -483,7 +494,8 @@
                     and (b.belong_unit_id is not null and c.village = #{terms.queVillage}
                     <if test="terms.unitGrades != null and terms.unitGrades.size > 0">
                         and c.unit_grade in
-                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator="," close=")">
+                        <foreach collection="terms.unitGrades" item="unitGrade" index="index" open="(" separator=","
+                                 close=")">
                             #{unitGrade}
                         </foreach>
                     </if>
@@ -576,6 +588,9 @@
                 <if test="terms.fileStart != null and terms.fileStart !='' and terms.fileEnd != null and terms.fileEnd !=''">
                     and (DATE_FORMAT(b.file_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.fileStart}
                     and DATE_FORMAT(b.file_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.fileEnd})
+                </if>
+                <if test="terms.cityCode != null and terms.cityCode !=''">
+                    and e.citizen_event_code = #{terms.cityCode}
                 </if>
             </where>
         </if>
@@ -962,7 +977,8 @@
 
     <select id="pageTermsCaseRegister" resultType="cn.huge.module.cases.domain.dto.CaseRegisterDTO">
         SELECT
-        t1.id as caseId,t1.create_time as createTime,t1.input_user_name as inputUserName,t1.status_name as statusName,t1.case_level as
+        t1.id as caseId,t1.create_time as createTime,t1.input_user_name as inputUserName,t1.status_name as
+        statusName,t1.case_level as
         caseLevel,t1.canal_name as canalName,
         t1.case_type_first_name as caseTypeFirstName,t1.case_type_name as caseTypeName,t1.plaintiffs as
         plaintiffs,t1.defendants as defendants,t2.medi_result_name as mediResultName,
@@ -986,7 +1002,7 @@
     </select>
 
 
-    <select id="countTermsCaseRegister" resultType="java.lang.Long" >
+    <select id="countTermsCaseRegister" resultType="java.lang.Long">
         SELECT
         count(t1.id)
         FROM
@@ -1001,6 +1017,9 @@
         from
         dyh_case_info a LEFT JOIN dyh_case_info_unfold b on a.id = b.id
         LEFT JOIN dyh_ct_unit c ON b.belong_unit_id = c.id
+        <if test="terms.cityCode != null and terms.cityCode !=''">
+            left join dyh_th_grid_citizen_event e on e.case_id = a.id
+        </if>
         <include refid="where-part-all"/>
     </select>
 
@@ -1012,6 +1031,9 @@
         dyh_case_info a LEFT JOIN dyh_case_info_unfold b on a.id = b.id
         LEFT JOIN dyh_ct_unit c ON b.belong_unit_id = c.id
         left join (select id ,case_id from dyh_case_task group by case_id) d on a.id = d.case_id
+        <if test="terms.cityCode != null and terms.cityCode !=''">
+            left join dyh_th_grid_citizen_event d on d.case_id = a.id
+        </if>
         <include refid="where-part-all"/>
         <if test="page.sort != null">
             <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
@@ -1066,16 +1088,20 @@
     <select id="statisticsArea" resultType="cn.huge.module.cases.domain.dto.CaseStatisticsAreaDTO">
         SELECT
         <if test='terms.areaType == null or terms.areaType =="1"'>
-            IF(c.city is null,a.que_city,c.city) as areaCode,IF(c.city_name is null,a.que_city_name,c.city_name) as areaName,
+            IF(c.city is null,a.que_city,c.city) as areaCode,IF(c.city_name is null,a.que_city_name,c.city_name) as
+            areaName,
         </if>
         <if test='terms.areaType != null and terms.areaType =="2"'>
-            IF(c.area is null,a.que_area,c.area) as areaCode,IF(c.area_name is null,a.que_area_name,c.area_name) as areaName,
+            IF(c.area is null,a.que_area,c.area) as areaCode,IF(c.area_name is null,a.que_area_name,c.area_name) as
+            areaName,
         </if>
         <if test='terms.areaType != null and terms.areaType =="3"'>
-            IF(c.road is null,a.que_road,c.road) as areaCode,IF(c.road_name is null,a.que_road_name,c.road_name) as areaName,
+            IF(c.road is null,a.que_road,c.road) as areaCode,IF(c.road_name is null,a.que_road_name,c.road_name) as
+            areaName,
         </if>
         <if test='terms.areaType != null and terms.areaType =="4"'>
-            IF(c.village is null,a.que_village,c.village) as areaCode,IF(c.village_name is null,a.que_village_name,c.village_name) as areaName,
+            IF(c.village is null,a.que_village,c.village) as areaCode,IF(c.village_name is
+            null,a.que_village_name,c.village_name) as areaName,
         </if>
         c.unit_grade as unitGrade,
         count(1) as caseNum,
@@ -1121,7 +1147,7 @@
         sum(case when a.case_level = 2 then 1 else 0 end) as twoLevelNum,
         sum(case when a.case_level = 3 then 1 else 0 end) as threeLevelNum,
         sum(case when a.info_process = 2 then 1
-                when a.info_process = 1 then 1   else 0 end) as processNum,
+        when a.info_process = 1 then 1 else 0 end) as processNum,
         sum(case when a.info_process = 3 and b.medi_result = '22_00025-1' then 1 else 0 end) as finishNum,
         sum(case when a.info_process = 4 then 1 else 0 end) as rejectNum,
         sum(case when a.info_process = 3 and b.medi_result = '22_00025-2' then 1 else 0 end) as failNum,
@@ -1278,14 +1304,20 @@
         <if test='terms.areaType != null and terms.areaType =="4"'>
             ifnull(t2.village_name, '本级') as areaName,ifnull(t2.village, '1') as areaCode,
         </if>
-        count(distinct case when (t1.node_id = 'DSRPJ' or t1.node_id = 'JAGD' or t1.node_id = 'ZJ_DFP' or t1.node_id = 'QJ_DFP'
-        or t1.node_id = 'SJ_DFP' or t1.node_id = 'DFP' or t1.node_id = 'ZJ_DSL' or t1.node_id = 'QJ_DSL' or t1.node_id = 'SJ_DSL'
-        or  t1.node_id = 'DSL' or t1.node_id = 'QJ_SBSH' or t1.node_id = 'SJ_SBSH' or t1.node_id = 'HTSH' or t1.node_id = 'ZJ_HTSH'
+        count(distinct case when (t1.node_id = 'DSRPJ' or t1.node_id = 'JAGD' or t1.node_id = 'ZJ_DFP' or t1.node_id =
+        'QJ_DFP'
+        or t1.node_id = 'SJ_DFP' or t1.node_id = 'DFP' or t1.node_id = 'ZJ_DSL' or t1.node_id = 'QJ_DSL' or t1.node_id =
+        'SJ_DSL'
+        or t1.node_id = 'DSL' or t1.node_id = 'QJ_SBSH' or t1.node_id = 'SJ_SBSH' or t1.node_id = 'HTSH' or t1.node_id =
+        'ZJ_HTSH'
         or t1.node_id = 'QJ_HTSH' or t1.node_id = 'SJ_HTSH')then t1.id end) as flowAllNum,
-        count(distinct case when (t1.node_id = 'ZJ_DFP' or t1.node_id = 'QJ_DFP' or t1.node_id = 'SJ_DFP' or t1.node_id = 'DFP') then t1.id end) as flowJbNum,
-        count(distinct case when (t1.node_id = 'ZJ_DSL' or t1.node_id = 'QJ_DSL' or t1.node_id = 'SJ_DSL' or  t1.node_id = 'DSL') then t1.id end) as flowSlNum,
+        count(distinct case when (t1.node_id = 'ZJ_DFP' or t1.node_id = 'QJ_DFP' or t1.node_id = 'SJ_DFP' or t1.node_id
+        = 'DFP') then t1.id end) as flowJbNum,
+        count(distinct case when (t1.node_id = 'ZJ_DSL' or t1.node_id = 'QJ_DSL' or t1.node_id = 'SJ_DSL' or t1.node_id
+        = 'DSL') then t1.id end) as flowSlNum,
         count(distinct case when (t1.node_id = 'QJ_SBSH' or t1.node_id = 'SJ_SBSH') then t1.id end) as flowSbNum,
-        count(distinct case when (t1.node_id = 'HTSH' or t1.node_id = 'ZJ_HTSH' or t1.node_id = 'QJ_HTSH' or t1.node_id = 'SJ_HTSH') then t1.id end) as flowHtNum,
+        count(distinct case when (t1.node_id = 'HTSH' or t1.node_id = 'ZJ_HTSH' or t1.node_id = 'QJ_HTSH' or t1.node_id
+        = 'SJ_HTSH') then t1.id end) as flowHtNum,
         count(distinct case when (t1.node_id = 'DSRPJ' or t1.node_id = 'JAGD') then t1.id end) as flowBjNum
         from
         (SELECT case_id, node_id, handle_time, create_time, cande_unit_id, id, status
@@ -1296,9 +1328,11 @@
         where status = 2 or (status = 1 and (node_id = 'DSRPJ' or node_id = 'JAGD'))
         ) s
         WHERE rn = 1 AND ((DATE_FORMAT(s.handle_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.startDate}
-        and DATE_FORMAT(s.handle_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.endDate}) OR DATE_FORMAT(s.create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.startDate}
+        and DATE_FORMAT(s.handle_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.endDate}) OR
+        DATE_FORMAT(s.create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.startDate}
         and DATE_FORMAT(s.create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.endDate}) group by s.case_id) t1
-        left join dyh_ct_unit t2 on (t1.cande_unit_id = t2.id) or (t1.cande_unit_id is null and t2.id = (select mediate_unit_id from dyh_case_info_unfold where id = t1.case_id))
+        left join dyh_ct_unit t2 on (t1.cande_unit_id = t2.id) or (t1.cande_unit_id is null and t2.id = (select
+        mediate_unit_id from dyh_case_info_unfold where id = t1.case_id))
         <where>
             <if test="terms.queCity != null and terms.queCity !=''">
                 and t2.city = #{terms.queCity}
@@ -1362,7 +1396,8 @@
         </if>
         count(distinct case when t2.info_process = 1 or t2.info_process = 2 then t2.id end) as sourceHjzNum,
         count(distinct case when t2.info_process = 3 and t3.medi_result = '22_00025-1' then t2.id end) as sourceHjcgNum,
-        count(distinct case when t2.info_process = 3 and t3.medi_result = '22_00025-2' then t2.id end) as sourceHjbcgNum,
+        count(distinct case when t2.info_process = 3 and t3.medi_result = '22_00025-2' then t2.id end) as
+        sourceHjbcgNum,
         count(distinct case when t2.info_process = 4 then t2.id end) as sourceByslNum
         from (SELECT case_id, node_id, create_time, cande_unit_id, id, status,handle_result
         FROM (
@@ -1370,7 +1405,8 @@
         ROW_NUMBER() OVER (PARTITION BY case_id ORDER BY node_type desc, create_time DESC) AS rn
         FROM dyh_case_task where node_id != 'DSRPJ' and delete_status = 0
         ) s
-        WHERE rn = 1 group by s.case_id)t1 left join dyh_case_info t2 on t2.id = t1.case_id left join dyh_case_info_unfold t3 on t2.id = t3.id
+        WHERE rn = 1 group by s.case_id)t1 left join dyh_case_info t2 on t2.id = t1.case_id left join
+        dyh_case_info_unfold t3 on t2.id = t3.id
         left join dyh_ct_unit t4 on t3.belong_unit_id = t4.id
         <where>
             and t2.delete_status = 0 and t4.delete_status = 0
@@ -1453,21 +1489,24 @@
     </select>
 
     <update id="deleteCaseById">
-        update dyh_case_info set delete_status = 1,update_time = #{updateTime} where id = #{id}
+        update dyh_case_info
+        set delete_status = 1,
+            update_time   = #{updateTime}
+        where id = #{id}
     </update>
 
     <!-- 统计指定canal值下按canal_second分组的案件数量 -->
     <select id="countByCanalSecond" resultType="cn.huge.module.cases.domain.dto.CaseStatisticsTypeDTO">
         SELECT
-            a.canal_second as caseType,
-            COUNT(*) as caseNum
+        a.canal_second as caseType,
+        COUNT(*) as caseNum
         FROM
         dyh_case_info a
         inner JOIN dyh_case_info_unfold b on a.id = b.id
         LEFT JOIN dyh_ct_unit c ON b.belong_unit_id = c.id
         <include refid="where-part-all"/>
         GROUP BY
-            a.canal_second
+        a.canal_second
     </select>
 
 </mapper>
\ No newline at end of file
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java
index 32126a2..b031dd8 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java
@@ -61,5 +61,7 @@
      */
     private String tcqk;
 
+    private String cityCode;
+
 
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
index f42aacb..dc9ff88 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
@@ -118,6 +118,8 @@
     private CaseWindupApplyService caseWindupApplyService;
     @Autowired
     private CasePersonService casePersonService;
+    @Autowired
+    private ThGridCitizenEventService thGridCitizenEventService;
 
 
     /**
@@ -606,6 +608,10 @@
                 caseInfoDTO.setIsRisk(caseInfoUnfold.getIsRisk());
                 caseInfoDTO.setTcqk(caseInfoUnfold.getTcqk());
             }
+            ThGridCitizenEvent thGridCitizenEvent = thGridCitizenEventService.getByCaseId(caseId);
+            if(thGridCitizenEvent!=null){
+                caseInfoDTO.setCityCode(thGridCitizenEvent.getCitizenEventCode());
+            }
         } else {
             CasebookInfo casebookInfo = casebookInfoService.getById(caseId);
             if (ObjectUtils.isNotEmpty(casebookInfo)) {
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/ThGridCitizenEventService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/ThGridCitizenEventService.java
index 2de8408..35a4b3b 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/ThGridCitizenEventService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/ThGridCitizenEventService.java
@@ -1,6 +1,8 @@
 package cn.huge.module.cases.service;
 
 import cn.huge.module.cases.domain.dto.CaseAndEventInfoDTO;
+import cn.huge.module.cases.domain.po.ThGridCitizenEvent;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @title: 市民工单事件表服务接口
@@ -18,4 +20,6 @@
      * @return 整合后的案件和工单信息
      */
     CaseAndEventInfoDTO integrateCaseAndEventInfo(String caseId);
+
+    ThGridCitizenEvent getByCaseId(String caseId);
 } 
\ No newline at end of file
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/impl/ThGridCitizenEventServiceImpl.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/impl/ThGridCitizenEventServiceImpl.java
index e459de2..a47f4c4 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/impl/ThGridCitizenEventServiceImpl.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/impl/ThGridCitizenEventServiceImpl.java
@@ -63,4 +63,9 @@
         
         return dto;
     }
+
+    @Override
+    public ThGridCitizenEvent getByCaseId(String caseId) {
+        return thGridCitizenEventMapper.getByCaseId(caseId);
+    }
 } 
\ No newline at end of file
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/AiChatController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/AiChatController.java
new file mode 100644
index 0000000..6420519
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/AiChatController.java
@@ -0,0 +1,103 @@
+package cn.huge.module.ai;
+
+import cn.huge.base.common.utils.HttpClientUtils;
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.ai.domain.AiBodyDto;
+import cn.huge.module.ai.domain.AiRequestVo;
+import cn.huge.module.sy.domain.po.SyTimeLimit;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.net.http.HttpClient;
+import java.util.HashMap;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/ai/chat")
+public class AiChatController {
+
+    private String url = "http://10.202.1.102:9002/";
+
+    @PostMapping("/risk")
+    public String risk(@RequestBody AiRequestVo aiRequestVo) {
+        String postUrl = url + "v1/workflows/run";
+        initHead("Bearer app-8ylvZOHf2fOgTGfe28MYtHDD");
+        String s = "";
+        try {
+            s = HttpClientUtils.httpPostRaw(postUrl, JSON.toJSONString(aiRequestVo), initHead("Bearer app-8ylvZOHf2fOgTGfe28MYtHDD"), "utf-8");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        JSONObject object = JSONObject.parseObject(s);
+        if (object != null) {
+            JSONObject data = object.getJSONObject("data");
+            if (data != null) {
+                JSONObject outputs = data.getJSONObject("outputs");
+                if (outputs != null) {
+                    JSONArray result = outputs.getJSONArray("result");
+                    if (result != null && result.size() > 0) {
+                        return result.getJSONObject(0).getString("is_risk_ai");
+                    }
+                }
+            }
+        }
+        return "0";
+    }
+
+    @PostMapping("/chat")
+    public AiBodyDto chat(@RequestBody AiRequestVo aiRequestVo) {
+        String postUrl = url + "v1/chat-messages";
+        String s = "";
+        AiBodyDto aiBodyDto = new AiBodyDto();
+        try {
+            s = HttpClientUtils.httpPostRaw(postUrl, JSON.toJSONString(aiRequestVo), initHead("Bearer app-8naZjGyj8a129EuUP2Jb6n7T"), "utf-8");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        JSONObject object = JSONObject.parseObject(s);
+        if (object != null) {
+            String conversation_id = object.getString("conversation_id");
+            String answer = object.getString("answer");
+            aiBodyDto.setAnswer(answer);
+            aiBodyDto.setConversationId(conversation_id);
+        }
+        return aiBodyDto;
+    }
+
+    @PostMapping("/strategy")
+    public AiBodyDto strategy(@RequestBody AiRequestVo aiRequestVo) {
+        String postUrl = url + "v1/workflows/run";
+        String s = "";
+        AiBodyDto aiBodyDto = new AiBodyDto();
+        try {
+            s = HttpClientUtils.httpPostRaw(postUrl, JSON.toJSONString(aiRequestVo), initHead("Bearer app-WMriHFsAozx0FECkopW2Z6X1"), "utf-8");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        JSONObject object = JSONObject.parseObject(s);
+        if (object != null) {
+            JSONObject data = object.getJSONObject("data");
+            if (data != null) {
+                JSONObject outputs = data.getJSONObject("outputs");
+                if (outputs != null) {
+                    String text = outputs.getString("text");
+                    aiBodyDto.setAnswer(text);
+                }
+            }
+        }
+        return aiBodyDto;
+    }
+
+    private Map<String, String> initHead(String token) {
+        Map<String, String> head = new HashMap<>();
+        head.put("Content-Type", "application/json");
+        head.put("Authorization", token);
+        return head;
+    }
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/domain/AiBodyDto.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/domain/AiBodyDto.java
new file mode 100644
index 0000000..abeaad3
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/domain/AiBodyDto.java
@@ -0,0 +1,10 @@
+package cn.huge.module.ai.domain;
+
+import lombok.Data;
+
+@Data
+public class AiBodyDto {
+    private String response_mode;
+    private String conversationId;
+    private String answer;
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/domain/AiRequestVo.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/domain/AiRequestVo.java
new file mode 100644
index 0000000..eab8549
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/ai/domain/AiRequestVo.java
@@ -0,0 +1,17 @@
+package cn.huge.module.ai.domain;
+
+import lombok.Data;
+
+@Data
+public class AiRequestVo {
+    private Inputs inputs;
+    private String response_mode;
+    private String user;
+    private String query;
+    private String conversation_id;
+    @Data
+    public static class Inputs{
+        private String caseId;
+        private String caseText;
+    }
+}

--
Gitblit v1.8.0