Explorar o código

通过接口 获取AI整理的个人信息

zrd hai 3 meses
pai
achega
6945b1835b
Modificáronse 16 ficheiros con 325 adicións e 44 borrados
  1. 8 0
      yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/core/AiFrameworkUtils.java
  2. 2 0
      yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/ai/AiApi.java
  3. 12 0
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/ai/AiApiImpl.java
  4. 9 22
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/aipromptmanagement/WorkflowRunServiceImpl.java
  5. 137 0
      yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/aipromptmanagement/utils/DifyBlocking.java
  6. 4 1
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/userinformation/vo/UserInformationPageReqVO.java
  7. 1 1
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/userinformation/vo/UserInformationRespVO.java
  8. 1 1
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/userinformation/vo/UserInformationSaveReqVO.java
  9. 7 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserInformationController.java
  10. 5 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/userinformation/UserInformationDO.java
  11. 11 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/userbusinesslicense/UserBusinessLicenseMapper.java
  12. 1 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/userinformation/UserInformationMapper.java
  13. 18 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/userpersonalcredit/UserPersonalCreditMapper.java
  14. 29 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/AiUserinfoJob.java
  15. 4 0
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/userinformation/UserInformationService.java
  16. 76 19
      yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/userinformation/UserInformationServiceImpl.java

+ 8 - 0
yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/core/AiFrameworkUtils.java

@@ -29,5 +29,13 @@ public class AiFrameworkUtils {
         return api.ai(createReqVO);
     }
     
+    @SneakyThrows
+    public static String getHtml(String type, String content) {
+        DifyaiReqDTO createReqVO = new DifyaiReqDTO();
+        createReqVO.setType(type);
+        createReqVO.setContent(content);
+        return api.html(createReqVO);
+    }
+    
     
 }

+ 2 - 0
yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/ai/AiApi.java

@@ -16,6 +16,8 @@ public interface AiApi {
     
     String ai(DifyaiReqDTO createReqVO);
     
+    String html(DifyaiReqDTO createReqVO);
+    
     Flux<StreamResponseDTO> getDifyMessageStreaming(Map<String, Object> inputs, String user, String apiKey,
                                                     String query,
                                                     String conversationId);

+ 12 - 0
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/ai/AiApiImpl.java

@@ -40,6 +40,18 @@ public class AiApiImpl implements AiApi {
         return workflowRunService.getDifyResul(inputs, createReqVO.getType(), apiKey, 1L);
     }
     
+    @Override
+    public String html(DifyaiReqDTO createReqVO) {
+        Map<String, Object> inputs = new HashMap<>();
+        
+        
+        String apiKey = DictFrameworkUtils.parseDictDataValue("ai_key", "HTML生成");
+        inputs.put("type", createReqVO.getType());
+        
+        inputs.put("content", createReqVO.getContent());
+        return workflowRunService.getDifyResul(inputs, createReqVO.getType(), apiKey, 1L);
+    }
+    
     @Override
     public Flux<StreamResponseDTO> getDifyMessageStreaming(Map<String, Object> inputs, String user, String apiKey,
                                                            String query,

+ 9 - 22
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/aipromptmanagement/WorkflowRunServiceImpl.java

@@ -8,10 +8,7 @@ import cn.hutool.json.JSONObject;
 import cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.infra.api.ai.dto.StreamResponseDTO;
-import cn.iocoder.yudao.module.infra.service.aipromptmanagement.utils.DifyApiUtils;
-import cn.iocoder.yudao.module.infra.service.aipromptmanagement.utils.DifyFilesUtils;
-import cn.iocoder.yudao.module.infra.service.aipromptmanagement.utils.DifyResponse;
-import cn.iocoder.yudao.module.infra.service.aipromptmanagement.utils.FileResp;
+import cn.iocoder.yudao.module.infra.service.aipromptmanagement.utils.*;
 import com.alibaba.fastjson.JSON;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -162,9 +159,11 @@ public class WorkflowRunServiceImpl implements WorkflowRunService {
      * @param user   用户
      * @return {@link DifyResponse }
      */
-    public DifyResponse getDifyResponse(Map<String, Object> inputs, String user, String apiKey) {
-        DifyResponse difyResponse = new DifyResponse();
+    public DifyBlocking getDifyResponse(Map<String, Object> inputs, String user, String apiKey) {
+        DifyBlocking difyResponse = new DifyBlocking();
         // 接口地址
+        
+        
         String url = baseUrl + "/v1/workflows/run";
         // 替换为你的实际 API Key
         
@@ -175,7 +174,7 @@ public class WorkflowRunServiceImpl implements WorkflowRunService {
         // 构建请求体
         JSONObject requestBody = new JSONObject();
         requestBody.put("inputs", inputs);
-        requestBody.put("response_mode", "streaming");
+        requestBody.put("response_mode", "blocking");
         requestBody.put("user", user);
         
         // 发送 POST 请求
@@ -191,19 +190,7 @@ public class WorkflowRunServiceImpl implements WorkflowRunService {
             // Hutool工具示例
             String decodedBody = Convert.unicodeToStr(response.body());
             
-            // 使用 \n\n 分割字符串
-            String[] parts = decodedBody.split("\n\n");
-            
-            // 取最后一条内容
-            String lastPart = parts[parts.length - 1];
-            
-            System.out.println("请求成功,响应内容:");
-            System.out.println(lastPart);
-            // 去除"data: "前缀
-            String jsonStr = lastPart.substring(6);
-            
-            // 转换为DifyResponse实体
-            difyResponse = JSON.parseObject(jsonStr, DifyResponse.class);
+            difyResponse = JSON.parseObject(decodedBody, DifyBlocking.class);
             System.out.println(difyResponse.getData().getOutputs().getText());
         } else {
             System.out.println("请求失败,状态码:" + response.getStatus());
@@ -237,7 +224,7 @@ public class WorkflowRunServiceImpl implements WorkflowRunService {
     public String getDifyResul(Map<String, Object> inputs, String eventType, String aiKey) {
         // 创建 inputs 的 Map
 //        inputs.put("images", list);
-        DifyResponse response = getDifyResponse(inputs, SecurityFrameworkUtils.getLoginUserId().toString(), aiKey);
+        DifyBlocking response = getDifyResponse(inputs, SecurityFrameworkUtils.getLoginUserId().toString(), aiKey);
         return response.getData().getOutputs().getText();
     }
     
@@ -245,7 +232,7 @@ public class WorkflowRunServiceImpl implements WorkflowRunService {
     public String getDifyResul(Map<String, Object> inputs, String eventType, String aiKey, Long userId) {
         // 创建 inputs 的 Map
 //        inputs.put("images", list);
-        DifyResponse response = getDifyResponse(inputs, userId.toString(), aiKey);
+        DifyBlocking response = getDifyResponse(inputs, userId.toString(), aiKey);
         return response.getData().getOutputs().getText();
     }
     

+ 137 - 0
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/aipromptmanagement/utils/DifyBlocking.java

@@ -0,0 +1,137 @@
+package cn.iocoder.yudao.module.infra.service.aipromptmanagement.utils;
+
+public class DifyBlocking {
+    
+    
+    /**
+     * task_id : 8d61787e-fc34-4169-b25d-3a4b7f96763f
+     * workflow_run_id : f22057f7-0034-4d86-9f8d-f8ad0d5bae90
+     * data : {"id":"f22057f7-0034-4d86-9f8d-f8ad0d5bae90","workflow_id":"8279c90d-218c-41ff-984f-7c7016f00814",
+     * "status":"succeeded","outputs":{"text":"{\"text\":\"普惠贷款的线上申请流程如下:\\n1. 通过普惠二维码申请\\n2. 完善基本信息\\n3. 添加联系人\\n4.
+     * 视频面谈\\n5. 线上签约\\n\\n对于车辆贷款申请,流程中还包含车辆认证出额环节。\"}"},"error":null,"elapsed_time":6.902331062010489,
+     * "total_tokens":2153,"total_steps":8,"created_at":1745731810,"finished_at":1745731817}
+     */
+    
+    private String task_id;
+    private String workflow_run_id;
+    private DataBean data;
+    
+    public String getTask_id() {return task_id;}
+    
+    public void setTask_id(String task_id) {this.task_id = task_id;}
+    
+    public String getWorkflow_run_id() {return workflow_run_id;}
+    
+    public void setWorkflow_run_id(String workflow_run_id) {this.workflow_run_id = workflow_run_id;}
+    
+    public DataBean getData() {return data;}
+    
+    public void setData(DataBean data) {this.data = data;}
+    
+    public static class DataBean {
+        /**
+         * id : f22057f7-0034-4d86-9f8d-f8ad0d5bae90
+         * workflow_id : 8279c90d-218c-41ff-984f-7c7016f00814
+         * status : succeeded
+         * outputs : {"text":"{\"text\":\"普惠贷款的线上申请流程如下:\\n1. 通过普惠二维码申请\\n2. 完善基本信息\\n3. 添加联系人\\n4. 视频面谈\\n5.
+         * 线上签约\\n\\n对于车辆贷款申请,流程中还包含车辆认证出额环节。\"}"}
+         * error : null
+         * elapsed_time : 6.902331062010489
+         * total_tokens : 2153
+         * total_steps : 8
+         * created_at : 1745731810
+         * finished_at : 1745731817
+         */
+        
+        private String id;
+        private String workflow_id;
+        private String status;
+        private OutputsBean outputs;
+        private Object error;
+        private double elapsed_time;
+        private int total_tokens;
+        private int total_steps;
+        private int created_at;
+        private int finished_at;
+        
+        public String getId() {return id;}
+        
+        public void setId(String id) {this.id = id;}
+        
+        public String getWorkflow_id() {return workflow_id;}
+        
+        public void setWorkflow_id(String workflow_id) {this.workflow_id = workflow_id;}
+        
+        public String getStatus() {return status;}
+        
+        public void setStatus(String status) {this.status = status;}
+        
+        public OutputsBean getOutputs() {return outputs;}
+        
+        public void setOutputs(OutputsBean outputs) {this.outputs = outputs;}
+        
+        public Object getError() {return error;}
+        
+        public void setError(Object error) {this.error = error;}
+        
+        public double getElapsed_time() {return elapsed_time;}
+        
+        public void setElapsed_time(double elapsed_time) {this.elapsed_time = elapsed_time;}
+        
+        public int getTotal_tokens() {return total_tokens;}
+        
+        public void setTotal_tokens(int total_tokens) {this.total_tokens = total_tokens;}
+        
+        public int getTotal_steps() {return total_steps;}
+        
+        public void setTotal_steps(int total_steps) {this.total_steps = total_steps;}
+        
+        public int getCreated_at() {return created_at;}
+        
+        public void setCreated_at(int created_at) {this.created_at = created_at;}
+        
+        public int getFinished_at() {return finished_at;}
+        
+        public void setFinished_at(int finished_at) {this.finished_at = finished_at;}
+        
+        public static class OutputsBean {
+            /**
+             * text : {"text":"普惠贷款的线上申请流程如下:\n1. 通过普惠二维码申请\n2. 完善基本信息\n3. 添加联系人\n4. 视频面谈\n5.
+             * 线上签约\n\n对于车辆贷款申请,流程中还包含车辆认证出额环节。"}
+             */
+            
+            private String text;
+            private String urls;
+            private String images;
+            private String textNew;
+            
+            public String getUrls() {
+                return urls;
+            }
+            
+            public void setUrls(String urls) {
+                this.urls = urls;
+            }
+            
+            public String getImages() {
+                return images;
+            }
+            
+            public void setImages(String images) {
+                this.images = images;
+            }
+            
+            public String getTextNew() {
+                return textNew;
+            }
+            
+            public void setTextNew(String textNew) {
+                this.textNew = textNew;
+            }
+            
+            public String getText() {return text;}
+            
+            public void setText(String text) {this.text = text;}
+        }
+    }
+}

+ 4 - 1
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/userinformation/vo/UserInformationPageReqVO.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.Serial;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -17,6 +18,8 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 public class UserInformationPageReqVO extends PageParam {
     
+    @Serial
+    private static final long serialVersionUID = 1453845802045944704L;
     @Schema(description = "用户编号", example = "11938")
     private Long userId;
     
@@ -41,5 +44,5 @@ public class UserInformationPageReqVO extends PageParam {
     
     @Schema(description = "营业执照id", example = "25990")
     private Long businessLicenseId;
-    
+    private String userHtml;
 }

+ 1 - 1
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/userinformation/vo/UserInformationRespVO.java

@@ -47,5 +47,5 @@ public class UserInformationRespVO {
     @Schema(description = "营业执照id", example = "25990")
     @ExcelProperty("营业执照id")
     private Long businessLicenseId;
-    
+    private String userHtml;
 }

+ 1 - 1
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/userinformation/vo/UserInformationSaveReqVO.java

@@ -32,5 +32,5 @@ public class UserInformationSaveReqVO {
     
     @Schema(description = "营业执照id", example = "25990")
     private Long businessLicenseId;
-    
+    private String userHtml;
 }

+ 7 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppUserInformationController.java

@@ -57,6 +57,13 @@ public class AppUserInformationController {
         return success(BeanUtils.toBean(userInformation, UserInformationRespVO.class));
     }
     
+    @GetMapping("/getUserInfo")
+    @Operation(summary = "获得用户信息")
+    public CommonResult<UserInformationRespVO> getUserInfo() {
+        UserInformationDO userInformation = userInformationService.getUserInfo();
+        return success(BeanUtils.toBean(userInformation, UserInformationRespVO.class));
+    }
+    
     @GetMapping("/getAi")
     @Operation(summary = "获得用户信息")
     public CommonResult<String> getAi() {

+ 5 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/userinformation/UserInformationDO.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
+import java.io.Serial;
+
 /**
  * 用户信息 DO
  *
@@ -21,6 +23,8 @@ import lombok.*;
 @AllArgsConstructor
 public class UserInformationDO extends BaseDO {
     
+    @Serial
+    private static final long serialVersionUID = -8238287391307241829L;
     /**
      * 自增主键
      */
@@ -38,6 +42,7 @@ public class UserInformationDO extends BaseDO {
      * 个人身份证信息
      */
     private String idCardInformation;
+    private String userHtml;
     /**
      * 个人营业执照信息
      */

+ 11 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/userbusinesslicense/UserBusinessLicenseMapper.java

@@ -5,8 +5,12 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.member.controller.admin.userbusinesslicense.vo.UserBusinessLicensePageReqVO;
 import cn.iocoder.yudao.module.member.dal.dataobject.userbusinesslicense.UserBusinessLicenseDO;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 营业执照信息 Mapper
  *
@@ -34,4 +38,11 @@ public interface UserBusinessLicenseMapper extends BaseMapperX<UserBusinessLicen
                 .orderByDesc(UserBusinessLicenseDO::getId));
     }
     
+    
+    default List<Map<String, Object>> setletUserList() {
+        return selectMaps(new QueryWrapper<UserBusinessLicenseDO>()
+                .select("creator userId") // 时间越大 id 也越大 直接用 id
+                .apply("DATE(update_time)=CURDATE()")
+                .groupBy("creator"));
+    }
 }

+ 1 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/userinformation/UserInformationMapper.java

@@ -28,4 +28,5 @@ public interface UserInformationMapper extends BaseMapperX<UserInformationDO> {
                 .orderByDesc(UserInformationDO::getId));
     }
     
+    
 }

+ 18 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/userpersonalcredit/UserPersonalCreditMapper.java

@@ -5,8 +5,12 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.member.controller.admin.userpersonalcredit.vo.UserPersonalCreditPageReqVO;
 import cn.iocoder.yudao.module.member.dal.dataobject.userpersonalcredit.UserPersonalCreditDO;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * 个人信用报告 Mapper
  *
@@ -77,4 +81,18 @@ public interface UserPersonalCreditMapper extends BaseMapperX<UserPersonalCredit
                 .orderByDesc(UserPersonalCreditDO::getId));
     }
     
+    
+    /**
+     * 查询出指定 spuId 的 spu 参加的活动最接近现在的一条记录。多个的话,一个 spuId 对应一个最近的活动编号
+     *
+     * @param spuIds spu 编号
+     * @param status 状态
+     * @return 包含 spuId 和 activityId 的 map 对象列表
+     */
+    default List<Map<String, Object>> setletUserList() {
+        return selectMaps(new QueryWrapper<UserPersonalCreditDO>()
+                .select("user_Id userId") // 时间越大 id 也越大 直接用 id
+                .apply("DATE(update_time)=CURDATE()")
+                .groupBy("user_Id"));
+    }
 }

+ 29 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/AiUserinfoJob.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.member.job;
+
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.member.service.userinformation.UserInformationService;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * 物理删除 N 天前的任务日志的 Job
+ *
+ * @author j-sentinel
+ */
+@Slf4j
+@Component
+public class AiUserinfoJob implements JobHandler {
+    @Resource
+    UserInformationService userInformationService;
+    
+    @Override
+    @TenantIgnore
+    public String execute(String param) {
+        userInformationService.init();
+        log.info("[execute][定时执行清理定时任务日志数量 ({}) 个]");
+        return String.format("定时执行清理定时任务日志数量 %s 个");
+    }
+    
+}

+ 4 - 0
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/userinformation/UserInformationService.java

@@ -45,6 +45,10 @@ public interface UserInformationService {
     
     UserInformationDO getAi();
     
+    void init();
+    
+    UserInformationDO getUserInfo();
+    
     /**
      * 获得用户信息分页
      *

+ 76 - 19
yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/userinformation/UserInformationServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.member.service.userinformation;
 
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.dict.core.AiFrameworkUtils;
@@ -17,6 +18,11 @@ import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.USER_INFORMATION_NOT_EXISTS;
 
@@ -73,39 +79,90 @@ public class UserInformationServiceImpl implements UserInformationService {
         return userInformationMapper.selectById(id);
     }
     
+    @Override
+    public UserInformationDO getUserInfo() {
+        return userInformationMapper.selectOne(UserInformationDO::getUserId,
+                SecurityFrameworkUtils.getLoginUserId());
+    }
     @Override
     public UserInformationDO getAi() {
         Long userId = SecurityFrameworkUtils.getLoginUserId();
+        
+        return userInformation(userId, false);
+    }
+    
+    private UserInformationDO userInformation(Long userId, Boolean updateFlag) {
         UserInformationDO userInformation = userInformationMapper.selectOne(UserInformationDO::getUserId,
                 SecurityFrameworkUtils.getLoginUserId());
         
         if (userInformation != null) {
+            Long id = userInformation.getId();
+            if (updateFlag) {
+                userInformation = userAiInformation(userId);
+                userInformation.setId(id);
+                userInformation.setUserHtml(AiFrameworkUtils.getHtml("个人征信HTML",
+                        "个人征信" + userInformation.getCreditInformation()
+                                + "营业执照" + userInformation.getCreditInformation()));
+                userInformationMapper.updateById(userInformation);
+            }
             return userInformation;
         } else {
-            userInformation = new UserInformationDO();
-            UserPersonalCreditDO userPersonalCreditDO =
-                    userPersonalCreditMapper.selectOne(new QueryWrapper<UserPersonalCreditDO>()
-                            .eq("user_id", userId)
-                            .orderByDesc("create_time")
-                            .last("limit 1"));
-            if (userPersonalCreditDO != null) {
-                userInformation.setCreditInformation(AiFrameworkUtils.getAi("个人征信MD", userPersonalCreditDO.toString()));
-            }
-            UserBusinessLicenseDO userBusinessLicenseDO =
-                    userBusinessLicenseMapper.selectOne(new QueryWrapper<UserBusinessLicenseDO>()
-                            .eq("creator", userId)
-                            .orderByDesc("create_time")
-                            .last("limit 1"));
-            if (userBusinessLicenseDO != null) {
-                userInformation.setBusinessLicenseInformation(AiFrameworkUtils.getAi("营业执照MD",
-                        userBusinessLicenseDO.toString()));
+            UserInformationDO insertUserInformation = new UserInformationDO();
+            insertUserInformation = userAiInformation(userId);
+            insertUserInformation.setUserId(SecurityFrameworkUtils.getLoginUserId());
+            if (updateFlag) {
+                insertUserInformation.setUserHtml(AiFrameworkUtils.getHtml("个人征信HTML",
+                        "个人征信" + insertUserInformation.getCreditInformation()
+                                + "营业执照" + insertUserInformation.getCreditInformation()));
             }
-            userInformation.setUserId(SecurityFrameworkUtils.getLoginUserId());
-            userInformationMapper.insert(userInformation);
+            userInformationMapper.insert(insertUserInformation);
+//            AiFrameworkUtils.getHtml("个人征信HTML", userInformation.getCreditInformation());
+            return insertUserInformation;
+        }
+    }
+    
+    private UserInformationDO userAiInformation(Long userId) {
+        UserInformationDO userInformation = new UserInformationDO();
+        UserPersonalCreditDO userPersonalCreditDO =
+                userPersonalCreditMapper.selectOne(new QueryWrapper<UserPersonalCreditDO>()
+                        .eq("user_id", userId)
+                        .orderByDesc("create_time")
+                        .last("limit 1"));
+        if (userPersonalCreditDO != null) {
+            userInformation.setCreditInformation(AiFrameworkUtils.getAi("个人征信MD", userPersonalCreditDO.toString()));
+        }
+        UserBusinessLicenseDO userBusinessLicenseDO =
+                userBusinessLicenseMapper.selectOne(new QueryWrapper<UserBusinessLicenseDO>()
+                        .eq("creator", userId)
+                        .orderByDesc("create_time")
+                        .last("limit 1"));
+        if (userBusinessLicenseDO != null) {
+            userInformation.setBusinessLicenseInformation(AiFrameworkUtils.getAi("营业执照MD",
+                    userBusinessLicenseDO.toString()));
         }
         return userInformation;
     }
     
+    @Override
+    public void init() {
+        //查询当日所有的 征信-
+        List<Map<String, Object>> userList = userBusinessLicenseMapper.setletUserList();
+        List<Map<String, Object>> userListCred = userPersonalCreditMapper.setletUserList();
+        Set<String> userIds = userList.stream().map(map -> map.get("userId").toString()).collect(Collectors.toSet());
+        Set<String> cuserIds =
+                userListCred.stream().map(map -> map.get("userId").toString()).collect(Collectors.toSet());
+        userIds.addAll(cuserIds);
+        if (userIds.size() > 0) {
+            for (String userId : userIds) {
+                if (StrUtil.isNotBlank(userId) && !StrUtil.equals(userId, "null")) {
+                    userInformation(Long.parseLong(userId), true);
+                }
+                ;
+                
+            }
+        }
+    }
+    
     @Override
     public PageResult<UserInformationDO> getUserInformationPage(UserInformationPageReqVO pageReqVO) {
         return userInformationMapper.selectPage(pageReqVO);