From 16636995518326bca4419d05ea3985d422a61e32 Mon Sep 17 00:00:00 2001 From: zhouhaibin Date: Tue, 27 May 2025 15:14:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=90=88=E5=90=8C=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-prod.yml | 67 ++++++++--------- .../common/service/AbstractTaskProcessor.java | 2 +- .../common/service/BaseTaskService.java | 2 +- .../ContractualTasksController.java | 29 +++++++ .../domain/ContractualTasks.java | 10 +-- .../domain/bo/ContractualTasksBo.java | 4 +- .../domain/vo/ContractualTasksVo.java | 4 +- .../service/IContractualTasksService.java | 9 +++ .../impl/ContractualTasksServiceImpl.java | 75 +++++++++++++++++++ .../productManagement/utils/MyHttpUtils.java | 33 ++++---- 10 files changed, 171 insertions(+), 64 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index e64adfb..7c84ed6 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -15,7 +15,7 @@ spring.boot.admin.client: password: 123456 server: # 端口号 - port: 8081 + port: 8082 --- # snail-job 配置 snail-job: enabled: false @@ -29,9 +29,7 @@ snail-job: # 详见 script/sql/snail_job.sql `sj_namespace` 表 namespace: ${spring.profiles.active} # 随主应用端口飘逸 - port: 2${server.port} - # 客户端ip指定 - host: + port: 3${server.port} --- # 数据源配置 spring: @@ -52,35 +50,35 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://localhost:3306/zaojia?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://10.1.21.250:3306/aitesttable?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true username: root - password: root + password: HXj-6nR|D8xy*h#!I&:( # 从库数据源 - slave: - lazy: true - type: ${spring.datasource.type} - driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://116.62.210.190:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - username: root - password: Guoyan83086775 -# oracle: -# type: ${spring.datasource.type} -# driverClassName: oracle.jdbc.OracleDriver -# url: jdbc:oracle:thin:@//localhost:1521/XE -# username: ROOT -# password: root -# postgres: -# type: ${spring.datasource.type} -# driverClassName: org.postgresql.Driver -# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true -# username: root -# password: root -# sqlserver: -# type: ${spring.datasource.type} -# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver -# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true -# username: SA -# password: root + # slave: + # lazy: true + # type: ${spring.datasource.type} + # driverClassName: com.mysql.cj.jdbc.Driver + # url: jdbc:mysql://116.62.210.190:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + # username: root + # password: Guoyan83086775 + # oracle: + # type: ${spring.datasource.type} + # driverClassName: oracle.jdbc.OracleDriver + # url: jdbc:oracle:thin:@//localhost:1521/XE + # username: ROOT + # password: root + # postgres: + # type: ${spring.datasource.type} + # driverClassName: org.postgresql.Driver + # url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true + # username: root + # password: root + # sqlserver: + # type: ${spring.datasource.type} + # driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver + # url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true + # username: SA + # password: root hikari: # 最大连接池数量 maxPoolSize: 20 @@ -107,7 +105,7 @@ spring.data: # 数据库索引 database: 0 # redis 密码必须配置 - password: root + password: F*Nx=BZli+ZCCI-Fil+3 # 连接超时时间 timeout: 10s # 是否开启ssl @@ -284,5 +282,6 @@ justauth: # maxConnectNumPerRoute: 100 chat: # 聊天机器人配置 - filePath: /usr/app/tempFile - chatUrl: http://183.136.156.2:50000 + filePath: /guoYanXinXi/data/software/minio/data/ruoyi/ + tempfilePath: /guoYanXinXi/data/software/app/tempfile/ + chatUrl: http://127.0.0.1:8081 diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/AbstractTaskProcessor.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/AbstractTaskProcessor.java index e5bb91d..bb26850 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/AbstractTaskProcessor.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/AbstractTaskProcessor.java @@ -175,7 +175,7 @@ public abstract class AbstractTaskProcessor implements /** * 处理具体任务项 */ - protected Boolean processTaskItems(List taskNames, T taskData, FileProcessResult fileResult, String taskType) { + protected Boolean processTaskItems(List taskNames, T taskData, FileProcessResult fileResult, String taskType) throws IOException { boolean flag = false; for (String taskName : taskNames) { // 转换为对应的任务实体 diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/BaseTaskService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/BaseTaskService.java index 3fe9ebe..9f4dc9b 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/BaseTaskService.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/common/service/BaseTaskService.java @@ -215,7 +215,7 @@ public abstract class BaseTaskService { * 处理具体任务项 */ // protected abstract Boolean processTaskItems(List taskNames, BaseTaskBo bo, FileProcessResult fileResult, String taskType); - protected Boolean processTaskItems(List taskNames, T bo, FileProcessResult fileResult, String taskType) { + protected Boolean processTaskItems(List taskNames, T bo, FileProcessResult fileResult, String taskType) throws IOException { boolean flag = false; for (String taskName : taskNames) { diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualTasksController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualTasksController.java index fb214de..ca54393 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualTasksController.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ContractualTasksController.java @@ -26,6 +26,7 @@ import org.dromara.productManagement.domain.vo.ContractualTasksVo; import org.dromara.productManagement.domain.bo.ContractualTasksBo; import org.dromara.productManagement.service.IContractualTasksService; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.productManagement.domain.StartContractReviewRequest; /** * 合同任务 @@ -143,4 +144,32 @@ public class ContractualTasksController extends BaseController { return R.fail("合同分析失败: " + e.getMessage()); } } + + /** + * 启动合同审查任务 + * + * @param request 审查请求数据 + */ + @PostMapping("/startReview") + public R> startReview(@RequestBody StartContractReviewRequest request) { + try { + // 参数验证 + if (request.getOssId() == null || request.getOssId().trim().isEmpty()) { + return R.fail("文件ID不能为空"); + } + + if (request.getReviewTypes() == null || request.getReviewTypes().isEmpty()) { + return R.fail("审查类型不能为空"); + } + + // 调用服务层启动审查 + Map result = contractualTasksService.startContractReview(request); + + return R.ok(result); + + } catch (Exception e) { + e.printStackTrace(); + return R.fail("启动合同审查失败: " + e.getMessage()); + } + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTasks.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTasks.java index 5d2aca7..cde1014 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTasks.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ContractualTasks.java @@ -54,10 +54,6 @@ public class ContractualTasks extends TenantEntity { */ private Long ossId; - /** - * 预计完成时间 - */ - private Date estimatedCompletionTime; /** * @@ -87,7 +83,7 @@ public class ContractualTasks extends TenantEntity { * 任务类型 */ private String taskType; - + /** * 合同角色 */ @@ -101,7 +97,7 @@ public class ContractualTasks extends TenantEntity { /** * 审查重点 */ - private String focusPointsId; + private String focusPoints; /** * 甲方 @@ -116,5 +112,5 @@ public class ContractualTasks extends TenantEntity { /** * 审查组件 */ - private String reviewComponents; + private String reviewData; } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTasksBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTasksBo.java index ddd0d8e..d068051 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTasksBo.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ContractualTasksBo.java @@ -43,7 +43,7 @@ public class ContractualTasksBo extends BaseTaskBo { /** * 审查重点 */ - private String focusPointsId; + private String focusPoints; /** * 甲方 @@ -58,7 +58,7 @@ public class ContractualTasksBo extends BaseTaskBo { /** * 审查组件 */ - private String reviewComponents; + private String reviewData; // /** // * 模型所属行业 diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTasksVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTasksVo.java index 1e27bb0..c1339c9 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTasksVo.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ContractualTasksVo.java @@ -54,7 +54,7 @@ public class ContractualTasksVo extends BaseTaskVo implements Serializable { * 审查重点 */ @ExcelProperty(value = "审查重点") - private String focusPointsId; + private String focusPoints; /** * 甲方 @@ -72,6 +72,6 @@ public class ContractualTasksVo extends BaseTaskVo implements Serializable { * 审查组件 */ @ExcelProperty(value = "审查组件") - private String reviewComponents; + private String reviewData; private Long groupId; } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTasksService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTasksService.java index 1c95652..bc1bba4 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTasksService.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IContractualTasksService.java @@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.productManagement.domain.vo.ContractualTasksVo; import org.dromara.productManagement.domain.vo.DocumentTasksVo; +import org.dromara.productManagement.domain.StartContractReviewRequest; import java.io.IOException; import java.util.Collection; @@ -77,4 +78,12 @@ public interface IContractualTasksService { */ Map getContractBaseInfo(String ossId); + /** + * 启动合同审查任务 + * + * @param request 审查请求数据 + * @return 审查结果 + */ + Map startContractReview(StartContractReviewRequest request) throws Exception; + } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTasksServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTasksServiceImpl.java index f3211b4..cc7f3e3 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTasksServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ContractualTasksServiceImpl.java @@ -29,9 +29,11 @@ import org.springframework.stereotype.Service; import org.dromara.productManagement.domain.bo.ContractualTasksBo; import org.dromara.productManagement.service.IContractualTasksService; import org.springframework.transaction.annotation.Transactional; +import org.dromara.productManagement.utils.MyHttpUtils; import java.io.IOException; import java.util.*; +import com.fasterxml.jackson.databind.ObjectMapper; /** * 合同任务Service业务层处理 @@ -218,5 +220,78 @@ public class ContractualTasksServiceImpl extends AbstractTaskProcessor startContractReview(StartContractReviewRequest request) throws Exception { + FileProcessResult fileProcessResult = processFile(Long.valueOf(request.getOssId())); + String filePath = fileProcessResult.getFilePath(); + String fileName = fileProcessResult.getFileName(); + // 1. 参数验证 + if (request.getOssId() == null || request.getOssId().trim().isEmpty()) { + throw new IllegalArgumentException("文件ID不能为空"); + } + + + // 3. 创建合同任务记录 + ContractualTasks contractTask = new ContractualTasks(); + contractTask.setOssId(Long.valueOf(request.getOssId())); + contractTask.setTaskName(TaskEnum.ContractTask.CONTRACT_REVIEW.getValue()); + contractTask.setDocumentName(fileName); + contractTask.setTaskType(TaskEnum.TaskType.CONTRACT_REVIEW.getValue()); + contractTask.setProgressStatus("PENDING"); + String position = request.getReviewData().getSubstantive().getPosition(); + String contractPartyRole; + switch (position) { + case "party-a": + contractPartyRole = "甲方"; + break; + case "neutral": + contractPartyRole = "中立"; + break; + case "party-b": + contractPartyRole = "乙方"; + break; + default: + contractPartyRole = "中立"; + break; + } + request.getReviewData().getSubstantive().setPosition(contractPartyRole); + contractTask.setContractPartyRole(contractPartyRole); + // 4. 将reviewData序列化并保存到review_data字段 + ObjectMapper objectMapper = new ObjectMapper(); + String reviewDataJson = objectMapper.writeValueAsString(request.getReviewData()); + contractTask.setReviewData(reviewDataJson); + + + // 5. 保存到数据库 + if (!saveTaskEntity(contractTask)) { + throw new RuntimeException("保存合同任务失败"); + } + + // 6. 调用Python接口启动任务 + // String pythonUrl = "http://localhost:5000/api/contract/review"; + // MyHttpUtils.sendTaskStartMessage( + // pythonUrl, + // contractTask.getId(), + // contractTask.getTaskName(), + // filePath, + // 1L + // ); + + // 7. 立即返回任务创建成功信息 + Map result = new HashMap<>(); + result.put("success", true); + result.put("message", "合同审查任务已创建,正在后台处理"); + result.put("taskId", contractTask.getId()); + result.put("taskName", contractTask.getTaskName()); + result.put("status", "PENDING"); + + return result; + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java index aa70e87..9cae786 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java @@ -24,37 +24,36 @@ public class MyHttpUtils { MyHttpUtils.chatUrl = url; } - public static void sendTaskStartMessage(String url,Long taskId, String taskName, String filename,Long priority) { + public static void sendTaskStartMessage(String url, Long taskId, String taskName, String filename, Long priority) throws IOException { OkHttpClient client = new OkHttpClient.Builder().build(); if (url == null) { - throw new IllegalArgumentException("无效的任务名称: " + taskName); + throw new IllegalArgumentException("无效的URL: " + url); } -// Request request = new Request.Builder() -// .url(url+"?userId="+ LoginHelper.getUserId()+"&taskId="+taskId+"&filename="+filename+"&taskName="+taskName+"&priority="+priority) -// .build(); + // 构建请求URL HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder(); urlBuilder.addQueryParameter("userId", String.valueOf(LoginHelper.getUserId())); urlBuilder.addQueryParameter("taskId", String.valueOf(taskId)); urlBuilder.addQueryParameter("filename", filename); urlBuilder.addQueryParameter("taskName", taskName); urlBuilder.addQueryParameter("priority", String.valueOf(priority)); + Request request = new Request.Builder() .url(urlBuilder.build()) .build(); - // 使用异步调用 - client.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(Call call, IOException e) { - e.printStackTrace(); // 处理请求失败 - } - - @Override - public void onResponse(Call call, Response response) throws IOException { - // 忽略返回内容 - response.close(); // 确保响应被关闭 + + // 使用同步调用并检查状态码 + try (Response response = client.newCall(request).execute()) { + if (!response.isSuccessful()) { + throw new IOException("任务启动失败: HTTP " + response.code() + " - " + response.message()); } - }); + + System.out.println("任务启动成功: HTTP " + response.code() + ", 任务ID: " + taskId); + + } catch (IOException e) { + System.err.println("任务启动异常: " + e.getMessage()); + throw e; // 重新抛出异常,让调用方处理 + } } /**